From 14b4f0595fda95e9c4fbedd9dcaddccba3f3ef40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D0=B5=D0=BC=20=D0=A7=D0=B0=D0=BC=D0=B0?= =?UTF-8?q?=D0=B9=D0=BA=D0=B8=D0=BD?= Date: Tue, 24 Mar 2026 04:38:40 +0300 Subject: [PATCH] =?UTF-8?q?if=20it=20breaks,=20I=E2=80=99m=20in=20the=20mo?= =?UTF-8?q?untains?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 14340 -> 10244 bytes .project | 2 +- GbTModuleSW30Web.ioc => CCSModuleSW30Web.ioc | 144 +- Core/Inc/board.h | 5 + Core/Inc/charger_config.h | 2 +- Core/Inc/charger_gbt.h | 238 - Core/Inc/connector.h | 5 - Core/Inc/cp.h | 27 + Core/Inc/j1939.h | 40 - Core/Inc/lock.h | 35 - Core/Inc/main.h | 8 +- Core/Inc/serial.h | 127 + Core/Inc/sma_filter.h | 23 + Core/Inc/stm32f1xx_it.h | 1 + Core/Inc/tim.h | 3 + Core/Src/.DS_Store | Bin 6148 -> 6148 bytes Core/Src/adc.c | 6 +- Core/Src/board.c | 60 +- Core/Src/charger_control.c | 50 +- Core/Src/charger_gbt.c | 593 - Core/Src/connector.c | 221 - Core/Src/cp.c | 115 + Core/Src/debug.c | 1 - Core/Src/gbt_packet.c | 120 - Core/Src/gpio.c | 16 +- Core/Src/j1939.c | 197 - Core/Src/lock.c | 169 - Core/Src/main.c | 596 +- Core/Src/psu_control.c | 1 - Core/Src/serial.c | 427 + Core/Src/serial_control.c | 3 + Core/Src/serial_handler.c | 49 +- Core/Src/sma_filter.c | 40 + Core/Src/stm32f1xx_it.c | 15 + Core/Src/tim.c | 118 +- Debug/.DS_Store | Bin 8196 -> 8196 bytes Debug/CCSModuleSW30Web.bin | Bin 0 -> 58844 bytes Debug/CCSModuleSW30Web.list | 33115 ++++++++++++++++ Debug/CCSModuleSW30Web.srec | 3683 ++ Debug/Core/Src/adc.cyclo | 2 +- Debug/Core/Src/board.cyclo | 22 +- Debug/Core/Src/charger_control.cyclo | 8 +- Debug/Core/Src/charger_gbt.cyclo | 13 - Debug/Core/Src/connector.cyclo | 8 +- Debug/Core/Src/cp.cyclo | 9 + Debug/Core/Src/debug.cyclo | 10 +- Debug/Core/Src/gbt_packet.cyclo | 9 - Debug/Core/Src/j1939.cyclo | 6 - Debug/Core/Src/lock.cyclo | 7 - Debug/Core/Src/main.cyclo | 15 +- Debug/Core/Src/psu_control.cyclo | 24 +- Debug/Core/Src/serial.cyclo | 15 + Debug/Core/Src/serial_control.cyclo | 20 +- Debug/Core/Src/serial_handler.cyclo | 4 +- Debug/Core/Src/sma_filter.cyclo | 2 + Debug/Core/Src/stm32f1xx_it.cyclo | 33 +- Debug/Core/Src/subdir.mk | 26 +- Debug/Core/Src/tim.cyclo | 9 +- Debug/GbTModuleSW30Web.bin | Bin 62360 -> 0 bytes Debug/GbTModuleSW30Web.list | 33889 ----------------- Debug/GbTModuleSW30Web.srec | 3903 -- Debug/objects.list | 8 +- GbTModuleSW30Web.code-workspace | 14 - plan.md | 146 + 64 files changed, 38499 insertions(+), 39958 deletions(-) rename GbTModuleSW30Web.ioc => CCSModuleSW30Web.ioc (83%) delete mode 100755 Core/Inc/charger_gbt.h create mode 100644 Core/Inc/cp.h delete mode 100755 Core/Inc/j1939.h delete mode 100755 Core/Inc/lock.h create mode 100644 Core/Inc/serial.h create mode 100644 Core/Inc/sma_filter.h delete mode 100755 Core/Src/charger_gbt.c delete mode 100755 Core/Src/connector.c create mode 100644 Core/Src/cp.c delete mode 100755 Core/Src/gbt_packet.c delete mode 100755 Core/Src/j1939.c delete mode 100755 Core/Src/lock.c create mode 100644 Core/Src/serial.c create mode 100644 Core/Src/sma_filter.c create mode 100755 Debug/CCSModuleSW30Web.bin create mode 100644 Debug/CCSModuleSW30Web.list create mode 100755 Debug/CCSModuleSW30Web.srec delete mode 100644 Debug/Core/Src/charger_gbt.cyclo create mode 100644 Debug/Core/Src/cp.cyclo delete mode 100644 Debug/Core/Src/gbt_packet.cyclo delete mode 100644 Debug/Core/Src/j1939.cyclo delete mode 100644 Debug/Core/Src/lock.cyclo create mode 100644 Debug/Core/Src/serial.cyclo create mode 100644 Debug/Core/Src/sma_filter.cyclo delete mode 100755 Debug/GbTModuleSW30Web.bin delete mode 100644 Debug/GbTModuleSW30Web.list delete mode 100755 Debug/GbTModuleSW30Web.srec delete mode 100644 GbTModuleSW30Web.code-workspace create mode 100644 plan.md diff --git a/.DS_Store b/.DS_Store index b68c1b18bfa23550b7b18d06697dfcfe320783e5..5f376416c99570fc504246acd469fa3c4d0f1db8 100755 GIT binary patch delta 225 zcmZoEXbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~3gIoZI3MHI+q5CCFE5S5c|7@VA+ zTd-M>LyTp!0>?yVPM|mlaBxG!)OemUGYV|xQCQ8$&C1}ykjjw6P|A=#xkE~Ja;8#( zxI}fexv9C1f{D3Vt&T#qrI7)UZEQAKM%sAuEMW(>$u?5_n?*Q;SvEGvFbgt63|HU= t(ykzf0WJB?Jel9bbFx1VhX51A%^Dz8KzA5S&M=ucnT5@Cv%A{7-#lXWF{}sHGtSP~#vocp zY0`#PYMQ2%TB%JRY1On6q-mohO`x>uBWjygtx%-WCVeF${nLkp)KV$XbMKv9&yH=> zstpQc$C|zOo_o)^ckZ4ubG~oK0D$4)cr8E;0LXN*Qd0r)X8}}D={;CKJ0~4^Btbgs z=%l&^kODnvj|@eVR&>(noFKOYxgB^n?SMp!Vey;K&t|Z)<5xNx9ZDLuQ&V#prM&zZ zGYe#8)@*f7S?i9ro$BshBW9T$#!0>%l1Vn0Wb^D;%1S2pS+?OAmf6?q=qH@Cp{%an1GbfNnz^xlO&hlL{W{q)M)Vf4 zNT!O|Z0$qLjNPrLY$_{5>|REP^6RS_s6mqBh8gcPBZK;VOuRc{JMBZdsmCuZTokyg zEU1?Ej2N~NP3m2vM%)?bi`X&Uj2mX6ixl+}av@eJT7ek7L|rOtaYdUUn#@k5oO^RkKTE1uo)sUiSz#C=FW!q%! zWm%KuO0gFJm7$fQT6r;XgxB~LDaGjlZi#fO55h8Ngb;MXQSylg;A8Lvd>hWg1^6Xg zhTp?ma22lMOq`7xmg5Sn!L=B|?bwPtaTo5vZtTH6Jb;H#$D=ra1|CNThjA27;7NQC zKZFnChw%}73_ppFkOvv>}l#%J(FdKm#m8rRjGKCQ?lm8&=I??0X#G_6O(5KJr1NvpW!87lL^b$=t4 zeth98Y4`t~rey_y@Tf1S%q7M+;Uu$ zT$OaVDwRT&J$FPuS0{Oe+YY(qxG04>pil>NXGRyHpil>_;KKn!qRf5fb|AL{lXu{5 z5@nK~L93<3#qM(Lxhvt%T0d^e?vLNJe`uh#gEH(PKFzF)tjO3N=}4JL%S@1rh42h$ z0Ue?+42ia+6?120!OLd+{0)9kEo)?S)J}5?&!v;ISJA~LvOHTp+(AI3!-+V&oMqH;Mhk7Vow?@M(g|oSChv<+MMd{Z{Po1i3 zTw7I9bGoYH)c=xedM-U~$C6Q6pzk{0GfC*A#I?6Cl1fF)gdQF{%pqF48MYk98oUYG ztlauH?kI$DcBLyTL`8!P0Foymoyv>Hj__ffre*3%WoVyJQs_~%irjDybi;8t37>$^ z!Bg-eybQ0wUkUgW5bRlktFQq#<5t{(Z3J~<9Ok5ifeb_migx-FZK`>`{bXVyT=E*< zINi72P+kV(^+Vq_XHOQ zm&>vj_6voTK|<;gnR5U_vRbWWFq?A#LbX9%%MiR^5QJ#Gx{;yyG@T%X#p+gB$q)`g z77n&BVD9G;*oFkd!5y-Ez#fRC^!8D@Go>|l%Q9zJNY1E-ZE?e~QhYb|E)E9!7$wmZ zkLz)|=)l57MZu0>m#qDYbTq>pG3Z`Mq=>jB{=eCPSKw869o~Syz%}?6ybaee4^=F} zGF*!H;%edrYH*Zs;1iLj|IBEqfbY)IREncFQYcnWlM0444 zYR;s95zSRq<>i`0aVnZMwdJaoM^UJ7-8EIzM7ObigQ{xz6px~BOOTr2Hp0zhhDFyc zV!f*A0kDNwuN~yuyE*ICOAmsBob^f&=XH#;UL(YLjd9lNA>zC~!db7!@l%}j`XX^& zPjc4lY5XQrp=>S%wl9}EN4nlz&NteV&pn@h#AWiif_E^VlPRBDceM2qF z=+@U!yvj`^L^Fc3=X<4JT%!Eya9Rt!!NwF%i#g( zv*QiQ=|_136Z*z!GQaEjg0mP}31W3pCTl^QpjMKCv;%seo__D`;qa@PLf3*=cGyac zTk(c%>3?7+2@#sXgcuC?tg)=vYpnowLmTn!+h8xPW?S}X4*#k>@UMVYZ9xL6!GROt z_(q2*H0OFo2gr6it+thB*h`=Nu%G5>CfOePV>7nU44u^5&S$TNL5TZoKI5~ga2rje z$t+Bz!ESTjH7}s+V!K{XKaFpPTH5V(ge96u)=MkePHSwU5j)6M(my-08;W|^LCB1Yf@-lo7~W$KZ9H+ z0e033VAlDmM|szxcfXnDDWy&gu4(0Zb@TZ6Q!2wPRQ+u~z1!s~>y-O>HD{$bkTskN5)v@(26wsnc| zHeTzQah_-RZOqAJE+_Z!zH=YmnJ+mjk_(EP$+su^CTN#6>6|p1b_sNLb@!-!w*&1` zwwS&6uzquR`_8?bPnchfe09WAeM6X;& zM2XWYC0L3JaS<_)tBGEz!+PArImn&ZffE4q7?CW4M6-+%$?`!?vYa7;B@H~khEL(w z@moZ$`~ZK5KO%DFGX4gCi*MpT@Sk{1k|b4{Bh8gcrG-SY+$B{L#nLD>Njs%>$t6iM z#0q0AJ%AU zP=&pU*XTBRLH!|Cp>kZ5T#ed7?Uua+nEoFJ&x;q3!~YZiu#kS2B8UHpPPnu2|GxoK C54=JE diff --git a/.project b/.project index 343746a..5f668d6 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - GbTModuleSW30Web + CCSModuleSW30Web diff --git a/GbTModuleSW30Web.ioc b/CCSModuleSW30Web.ioc similarity index 83% rename from GbTModuleSW30Web.ioc rename to CCSModuleSW30Web.ioc index 8582644..c5fe73a 100755 --- a/GbTModuleSW30Web.ioc +++ b/CCSModuleSW30Web.ioc @@ -37,70 +37,77 @@ Mcu.CPN=STM32F107VCT6 Mcu.Family=STM32F1 Mcu.IP0=ADC1 Mcu.IP1=CAN1 -Mcu.IP10=USART1 -Mcu.IP11=USART2 -Mcu.IP12=USART3 +Mcu.IP10=UART5 +Mcu.IP11=USART1 +Mcu.IP12=USART2 +Mcu.IP13=USART3 Mcu.IP2=CAN2 Mcu.IP3=CRC Mcu.IP4=NVIC Mcu.IP5=RCC Mcu.IP6=RTC Mcu.IP7=SYS -Mcu.IP8=TIM4 -Mcu.IP9=UART5 -Mcu.IPNb=13 +Mcu.IP8=TIM3 +Mcu.IP9=TIM4 +Mcu.IPNb=14 Mcu.Name=STM32F107V(B-C)Tx Mcu.Package=LQFP100 Mcu.Pin0=PC14-OSC32_IN Mcu.Pin1=PC15-OSC32_OUT -Mcu.Pin10=PB1 -Mcu.Pin11=PE7 -Mcu.Pin12=PE8 -Mcu.Pin13=PE9 -Mcu.Pin14=PE10 -Mcu.Pin15=PE11 -Mcu.Pin16=PE12 -Mcu.Pin17=PE14 -Mcu.Pin18=PD13 -Mcu.Pin19=PD14 +Mcu.Pin10=PC4 +Mcu.Pin11=PC5 +Mcu.Pin12=PB0 +Mcu.Pin13=PB1 +Mcu.Pin14=PE7 +Mcu.Pin15=PE8 +Mcu.Pin16=PE9 +Mcu.Pin17=PE10 +Mcu.Pin18=PE11 +Mcu.Pin19=PE12 Mcu.Pin2=OSC_IN -Mcu.Pin20=PD15 -Mcu.Pin21=PA9 -Mcu.Pin22=PA10 -Mcu.Pin23=PA13 -Mcu.Pin24=PA14 -Mcu.Pin25=PA15 -Mcu.Pin26=PC10 -Mcu.Pin27=PC11 -Mcu.Pin28=PC12 -Mcu.Pin29=PD0 +Mcu.Pin20=PE14 +Mcu.Pin21=PD13 +Mcu.Pin22=PD14 +Mcu.Pin23=PD15 +Mcu.Pin24=PA9 +Mcu.Pin25=PA10 +Mcu.Pin26=PA13 +Mcu.Pin27=PA14 +Mcu.Pin28=PA15 +Mcu.Pin29=PC10 Mcu.Pin3=OSC_OUT -Mcu.Pin30=PD1 -Mcu.Pin31=PD2 -Mcu.Pin32=PD3 -Mcu.Pin33=PD4 -Mcu.Pin34=PD5 -Mcu.Pin35=PD6 -Mcu.Pin36=PD7 -Mcu.Pin37=PB3 -Mcu.Pin38=PB4 -Mcu.Pin39=PB5 -Mcu.Pin4=PA1 -Mcu.Pin40=PB6 -Mcu.Pin41=PB7 -Mcu.Pin42=PB8 -Mcu.Pin43=PB9 -Mcu.Pin44=PE1 -Mcu.Pin45=VP_CRC_VS_CRC -Mcu.Pin46=VP_RTC_VS_RTC_Activate -Mcu.Pin47=VP_SYS_VS_Systick -Mcu.Pin48=VP_TIM4_VS_ClockSourceINT -Mcu.Pin5=PA2 -Mcu.Pin6=PA3 -Mcu.Pin7=PC4 -Mcu.Pin8=PC5 -Mcu.Pin9=PB0 -Mcu.PinsNb=49 +Mcu.Pin30=PC11 +Mcu.Pin31=PC12 +Mcu.Pin32=PD0 +Mcu.Pin33=PD1 +Mcu.Pin34=PD2 +Mcu.Pin35=PD3 +Mcu.Pin36=PD4 +Mcu.Pin37=PD5 +Mcu.Pin38=PD6 +Mcu.Pin39=PD7 +Mcu.Pin4=PC3 +Mcu.Pin40=PB3 +Mcu.Pin41=PB4 +Mcu.Pin42=PB5 +Mcu.Pin43=PB6 +Mcu.Pin44=PB7 +Mcu.Pin45=PB8 +Mcu.Pin46=PB9 +Mcu.Pin47=PE1 +Mcu.Pin48=VP_ADC1_TempSens_Input +Mcu.Pin49=VP_ADC1_Vref_Input +Mcu.Pin5=PA1 +Mcu.Pin50=VP_CRC_VS_CRC +Mcu.Pin51=VP_RTC_VS_RTC_Activate +Mcu.Pin52=VP_SYS_VS_Systick +Mcu.Pin53=VP_TIM3_VS_ClockSourceINT +Mcu.Pin54=VP_TIM4_VS_ClockSourceINT +Mcu.Pin6=PA2 +Mcu.Pin7=PA3 +Mcu.Pin8=PA4 +Mcu.Pin9=PA7 +Mcu.PinsNb=55 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F107VCTx @@ -119,6 +126,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UART5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true @@ -150,6 +158,14 @@ PA2.Locked=true PA2.Signal=GPIO_Input PA3.Locked=true PA3.Signal=ADCx_IN3 +PA4.GPIOParameters=GPIO_Label +PA4.GPIO_Label=CP_ADC +PA4.Locked=true +PA4.Signal=ADCx_IN4 +PA7.GPIOParameters=GPIO_Label +PA7.GPIO_Label=CP_PWM +PA7.Locked=true +PA7.Signal=S_TIM3_CH2 PA9.Locked=true PA9.Mode=Asynchronous PA9.Signal=USART1_TX @@ -195,6 +211,10 @@ PC14-OSC32_IN.Mode=LSE-External-Oscillator PC14-OSC32_IN.Signal=RCC_OSC32_IN PC15-OSC32_OUT.Mode=LSE-External-Oscillator PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PC3.GPIOParameters=GPIO_Label +PC3.GPIO_Label=RELAY_CP +PC3.Locked=true +PC3.Signal=GPIO_Output PC4.GPIOParameters=GPIO_Label PC4.GPIO_Label=LOCK_A PC4.Locked=true @@ -284,14 +304,14 @@ ProjectManager.FreePins=false ProjectManager.HalAssertFull=false ProjectManager.HeapSize=0x200 ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true +ProjectManager.LastFirmware=false ProjectManager.LibraryCopy=1 ProjectManager.MainLocation=Core/Src ProjectManager.NoMain=false ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=GbTModuleSW30Web.ioc -ProjectManager.ProjectName=GbTModuleSW30Web +ProjectManager.ProjectFileName=CCSModuleSW30Web.ioc +ProjectManager.ProjectName=CCSModuleSW30Web ProjectManager.ProjectStructure= ProjectManager.RegisterCallBack= ProjectManager.StackSize=0x400 @@ -300,7 +320,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_CAN1_Init-CAN1-false-HAL-true,5-MX_CAN2_Init-CAN2-false-HAL-true,6-MX_RTC_Init-RTC-false-HAL-true,7-MX_TIM4_Init-TIM4-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_CRC_Init-CRC-false-HAL-true,10-MX_UART5_Init-UART5-false-HAL-true,11-MX_USART1_UART_Init-USART1-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_ADC1_Init-ADC1-false-HAL-true,4-MX_CAN1_Init-CAN1-false-HAL-true,5-MX_CAN2_Init-CAN2-false-HAL-true,6-MX_RTC_Init-RTC-false-HAL-true,7-MX_TIM4_Init-TIM4-false-HAL-true,8-MX_USART2_UART_Init-USART2-false-HAL-true,9-MX_CRC_Init-CRC-false-HAL-true,10-MX_UART5_Init-UART5-false-HAL-true,11-MX_USART1_UART_Init-USART1-false-HAL-true,12-MX_USART3_UART_Init-USART3-false-HAL-true,13-MX_TIM3_Init-TIM3-false-HAL-true RCC.ADCFreqValue=12000000 RCC.ADCPresc=RCC_ADCPCLK2_DIV6 RCC.AHBFreq_Value=72000000 @@ -337,16 +357,22 @@ RCC.USBFreq_Value=48000000 RCC.VCOOutput2Freq_Value=8000000 SH.ADCx_IN3.0=ADC1_IN3,IN3 SH.ADCx_IN3.ConfNb=1 +SH.ADCx_IN4.0=ADC1_IN4,IN4 +SH.ADCx_IN4.ConfNb=1 SH.ADCx_IN8.0=ADC1_IN8,IN8 SH.ADCx_IN8.ConfNb=1 SH.ADCx_IN9.0=ADC1_IN9,IN9 SH.ADCx_IN9.ConfNb=1 +SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2 +SH.S_TIM3_CH2.ConfNb=1 SH.S_TIM4_CH2.0=TIM4_CH2,PWM Generation2 CH2 SH.S_TIM4_CH2.ConfNb=1 SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3 SH.S_TIM4_CH3.ConfNb=1 SH.S_TIM4_CH4.0=TIM4_CH4,PWM Generation4 CH4 SH.S_TIM4_CH4.ConfNb=1 +TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM3.IPParameters=Channel-PWM Generation2 CH2 TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 TIM4.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 @@ -362,12 +388,18 @@ USART2.IPParameters=VirtualMode USART2.VirtualMode=VM_ASYNC USART3.IPParameters=VirtualMode USART3.VirtualMode=VM_ASYNC +VP_ADC1_TempSens_Input.Mode=IN-TempSens +VP_ADC1_TempSens_Input.Signal=ADC1_TempSens_Input +VP_ADC1_Vref_Input.Mode=IN-Vrefint +VP_ADC1_Vref_Input.Signal=ADC1_Vref_Input VP_CRC_VS_CRC.Mode=CRC_Activate VP_CRC_VS_CRC.Signal=CRC_VS_CRC VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT VP_TIM4_VS_ClockSourceINT.Mode=Internal VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT board=custom diff --git a/Core/Inc/board.h b/Core/Inc/board.h index 9884ba1..1fb8a8f 100755 --- a/Core/Inc/board.h +++ b/Core/Inc/board.h @@ -16,6 +16,7 @@ typedef enum{ RELAY3, RELAY_DC, RELAY_AC, + RELAY_CP, RELAY_CC, RELAY_DC1, // @@ -28,7 +29,11 @@ uint8_t GBT_LockGetState(); void GBT_Lock(uint8_t state); uint8_t SW_GetAddr(); void ADC_Select_Channel(uint32_t ch); +uint8_t ADC_TryLock(void); +void ADC_LockBlocking(void); +void ADC_Unlock(void); int16_t GBT_ReadTemp(uint8_t ch); +int16_t CONN_ReadTemp(uint8_t ch); typedef enum{ IN_SW0 = 0, diff --git a/Core/Inc/charger_config.h b/Core/Inc/charger_config.h index 5b549a4..ee4b12b 100755 --- a/Core/Inc/charger_config.h +++ b/Core/Inc/charger_config.h @@ -3,7 +3,7 @@ #define PSU_MAX_VOLTAGE 1000 //1V/bit #define PSU_MIN_VOLTAGE 150 //1V/bit -#define PSU_MAX_CURRENT 100 //1A/bit +#define PSU_MAX_CURRENT 133 //1A/bit #define PSU_MIN_CURRENT 1 //1A/bit #define PSU_MAX_POWER 30000 //1W/bit diff --git a/Core/Inc/charger_gbt.h b/Core/Inc/charger_gbt.h deleted file mode 100755 index fec8399..0000000 --- a/Core/Inc/charger_gbt.h +++ /dev/null @@ -1,238 +0,0 @@ -/* - * charger_gbt.h - * - * Created on: Apr 18, 2024 - * Author: colorbass - */ - -#ifndef INC_CHARGER_GBT_H_ -#define INC_CHARGER_GBT_H_ - -#include "main.h" -#include "connector.h" -#include "charger_control.h" - - -#define GBT_CST_NO_REASON 0x0000F0F0 // Без причины -#define GBT_CST_CONDITION_REACHED 0x0100F0F0 // Заряд завершен -#define GBT_CST_SUSPENDS_ARTIFICIALLY 0x0400F0F0 // Искуственная остановка -#define GBT_CST_FAULT_SUSPENSION 0x1000F0F0 // Приостановка из за неисправности -#define GBT_CST_BMS_ACTIVELY_SUSPENDS 0x4000F0F0 // завершение по инициативе BMS -#define GBT_CST_CONNECTOR_OVER_TEMP 0x0001F0F0 // Перегрев коннектора -#define GBT_CST_INT_PART_OVER_TEMP 0x0010F0F0 // Перегрев внутренних частей -#define GBT_CST_CANNOT_SUPPLY_REQ_ELQ 0x0040F0F0 // Неполучится обеспечить столько энергии -#define GBT_CST_SUDDENSTOP 0x0000F1F0 // Внезапная остановка -#define GBT_CST_OTHERFALUT 0x0000F4F0 // Прочая ошибка -#define GBT_CST_CURRENT_MISMATCH 0x0000F0F1 // Неправильный ток -#define GBT_CST_ABNORMALVOLTAGEERROR 0x0000F0F4 // Ненормальное напряжение - -typedef enum { - GBT_STOP_EVSE = 0, - GBT_STOP_EV = 1, - GBT_STOP_OCPP = 2, - -}GBT_StopSource_t; - - -typedef enum{ - GBT_CC_UNKNOWN, - GBT_CC_12V, - GBT_CC_6V, - GBT_CC_4V, - GBT_CC_2V, - -}gbtCcState_t; - -typedef enum{ - GBT_DISABLED = 0x10, -// GBT_S0_UNCONNECTED = 0x10, //СС1 12V/6V СС2 12V -// GBT_S1_CONNECTED = 0x11, //СС1 4V СС2 4V (6V) -// GBT_S2_LOCKED = 0x12, // - GBT_S3_STARTED = 0x13, // 12V AUX - GBT_S31_WAIT_BHM = 0x14, // testing isolation, send CHM receive BHM - GBT_S4_WAIT_PSU_READY = 0x15, // wait for PSU to be ready - GBT_S4_WAIT_PSU_ON = 0x16, // PSU is on, wait for isolation test - GBT_S4_ISOTEST = 0x17, // testing isolation, send CHM receive BHM - GBT_S4_WAIT_PSU_OFF = 0x18, // PSU is off, wait for battery info - GBT_S5_BAT_INFO = 0x19, // identifying BMS, send CRM receive BRM (long) - GBT_S6_BAT_STAT = 0x1A, // send CRM(AA), receive BCP (long) - GBT_S7_BMS_WAIT = 0x1B, // wait for BMS, send CTS+CML receive BRO(00), next BRO(AA) - GBT_S8_INIT_CHARGER = 0x1C,// starting power modules, send CRO(00) - GBT_S9_WAIT_BCL = 0x1D, // waiting for BCL (requested voltage), send CRO(00) - GBT_S10_CHARGING = 0x1E, // charging, contactor ON, send CCS, receiving BCL+BCS+BSM - GBT_STOP = 0x1F, // normal stop - GBT_STOP_CSD = 0x20, // normal stop - GBT_ERROR = 0x21, // Error - GBT_COMPLETE = 0x22, - -}gbtState_t; - -#pragma pack(push, 1) - -typedef struct { - uint16_t maxOutputVoltage; - -}GBT_BHM_t; - -typedef struct { - uint8_t bmsIdentified; - uint32_t chargerNumber; - char chargerLocation[3]; -}GBT_CRM_t; - -typedef struct { - uint16_t maxOutputVoltage; - uint16_t minOutputVoltage; - uint16_t maxOutputCurrent; - uint16_t minOutputCurrent; - -}GBT_CML_t; - -typedef struct{ - uint8_t version[3]; //GB/T version - uint8_t batteryType; //battery type - uint16_t batteryCapacity; // 0.1Ah/bit - uint16_t batteryVoltage; // 0.1V/bit - uint8_t batteryVendor[4]; // Battery vendor (ASCII string) - uint32_t batterySN; // int - uint8_t batteryManuY; // year (offset 1985) - uint8_t batteryManuM; // month - uint8_t batteryManuD; // day - uint32_t batteryCycleCount:24; //uint24_t - uint8_t ownAuto; // 0 = lizing, 1 = own auto - uint8_t rsvd0; - uint8_t EVIN[17]; //EVIN - uint8_t EV_SW_VER[8]; - -}GBT_BRM_t; - -typedef struct { - uint16_t maxCellVoltage; // 0.01v/bit - uint16_t maxChargingCurrent; // 0.1A/bit - uint16_t totalEnergy; // 0.1kWh - uint16_t maxChargingVoltage; // 0.1V/ bit - uint8_t maxTemp; // 1C/bit, -50C offset - uint16_t SOC; // 0.1%/bit , 0..100% - uint16_t measVoltage; // 0.1V/bit -}GBT_BCP_t; - -typedef struct { - uint16_t requestedVoltage; // 0.1V/bit - uint16_t requestedCurrent; // 0.1A/bit - uint8_t chargingMode; // 0x01 - CV, 0x02 - CC - -}GBT_BCL_t; - -typedef struct { - uint16_t measuredChargingVoltage; - uint16_t measuredChargingCurrent; - uint16_t highestVoltageOfBatteryCell; - //uint8_t groupNrOfCellWithHighestVoltage; - uint8_t currentChargeState; - uint16_t estimatedRemainingChargingTime; - -}GBT_BCS_t; - -typedef struct { - - uint8_t singleBatteryHighestVoltageSerNo;// SINGLE_BATTERY_HIGHEST_VOLTAGE_SER_NO - uint8_t batteryHighestTemp; //BATTERY_HIGHEST_TEMP - uint8_t batteryHighestTempSerNo;//BATTERY_HIGHEST_TEMP_SER_NO - uint8_t batteryLowestTemp;//BATTERY_LOWEST_TEMP - uint8_t batteryLowestTempSerNo;//BATTERY_LOWEST_TEMP_SER_NO - uint8_t batteryCellVoltageState;//BATTERY_CELL_VOLTAGE_STATE - uint8_t batteryStatus;//BATTERY_STATUS[bit-mask]; - -}GBT_BSM_t; - -typedef struct { - - uint16_t outputVoltage; - uint16_t outputCurrent; - uint16_t chargingTime; - uint16_t chargingPermissible; - -}GBT_CCS_t; - -typedef struct { - uint16_t chargingTime; - uint16_t outputEnergy; - uint32_t chargerNumber; -}GBT_CSD_t; - - -/* 500 - Power Supply -TX -* PSU_ENABLE -* BMS_STATUS -* BMS_ERRORS -* PSU_REQUESTED_VOLTAGE[2] -* PSU_REQUESTED_CURRENT[2] -* BMS_CHARGE_PERCENTAGE -// BMS_MIN_CURRENT -* CHARGE_REMAINING_TIME_MIN -* CHARGE_REMAINING_TIME_SEC -* CHARGE_ELAPSED_TIME[1] - -RX -* MEASURED_VOLTAGE[2] -* MEASURED_CURRENT[2] -// MAX_VOLTAGE[2] -// MAX_CURRENT[2] -// MAX_POWER[2] -* PSU_STATUS -* -*/ - -#pragma pack(pop) - -extern gbtState_t GBT_State; - -extern ADC_HandleTypeDef hadc1; - -extern GBT_BRM_t GBT_EVInfo; -extern GBT_BCP_t GBT_BATStat; -extern GBT_BCS_t GBT_ChargingStatus; -extern GBT_BCL_t GBT_ReqPower; -extern GBT_CML_t GBT_MaxLoad; -extern GBT_CCS_t GBT_ChargerCurrentStatus; -extern GBT_CRM_t GBT_ChargerInfo; -extern GBT_BSM_t GBT_BatteryStatus; -extern GBT_CSD_t GBT_ChargerStop; - -extern uint8_t GBT_BRO; - -extern uint8_t GBT_Charger_Enable; - -extern GBT_StopSource_t GBT_StopSource; - -void GBT_Init(); -void GBT_Start(); -void GBT_Reset(); -//void GBT_Stop(uint32_t causecode); -void GBT_StopEV(uint32_t causecode); -void GBT_StopEVSE(uint32_t causecode); -void GBT_StopOCPP(uint32_t causecode); -void GBT_ForceStop(); -void GBT_ChargerTask(); -void GBT_Error(uint32_t errorcode); - -//float GBT_CC_GetAdc(); - -//uint8_t GBT_CC_GetState(); - -void GBT_SwitchState(gbtState_t state); -void GBT_Delay(uint32_t delay); -uint32_t GBT_StateTick(); -void J_SendPacket(uint32_t PGN, uint8_t pri, uint8_t DLC, uint8_t *data); - -void GBT_SendCCS(); -void GBT_SendCST(uint32_t Cause); -void GBT_SendCRO(uint8_t state); -void GBT_SendCML(); -void GBT_SendCTS(); -void GBT_SendCHM(); -void GBT_SendCRM(uint8_t state); -void GBT_SendCSD(); -void GBT_SendCEM(uint32_t ErrorCode); -#endif /* INC_CHARGER_GBT_H_ */ diff --git a/Core/Inc/connector.h b/Core/Inc/connector.h index 716ef8c..55bafe8 100755 --- a/Core/Inc/connector.h +++ b/Core/Inc/connector.h @@ -9,8 +9,6 @@ #define INC_CONNECTOR_H_ #include "main.h" - -#include "charger_gbt.h" #include "charger_control.h" @@ -19,8 +17,5 @@ extern CONN_State_t connectorState; void CONN_Init(); void CONN_Task(); void CONN_SetState(CONN_State_t state); -uint8_t CONN_CC_GetStateRaw(); -uint8_t CONN_CC_GetState(); -float CONN_CC_GetAdc(); #endif /* INC_CONNECTOR_H_ */ diff --git a/Core/Inc/cp.h b/Core/Inc/cp.h new file mode 100644 index 0000000..fe14cb3 --- /dev/null +++ b/Core/Inc/cp.h @@ -0,0 +1,27 @@ +#ifndef __CP_H +#define __CP_H + +#include "main.h" +#include + +#define DUTY_INVERT 0 + +typedef enum { + EV_STATE_A_IDLE = 0, + EV_STATE_B_CONN_PREP = 1, + EV_STATE_C_CONN_ACTIVE = 2, + EV_STATE_D_CONN_ACT_VENT = 3, + EV_STATE_E_NO_POWER = 4, + EV_STATE_F_ERROR = 5, + EV_STATE_ACQUIRING = 6, +} CP_State_t; + +void CP_Init(void); +void CP_SetDuty(uint8_t percentage); +uint8_t CP_GetDuty(void); +int32_t CP_GetVoltage(void); +CP_State_t CP_GetState(void); +void CP_Loop(void); + +#endif + diff --git a/Core/Inc/j1939.h b/Core/Inc/j1939.h deleted file mode 100755 index 4c6dce5..0000000 --- a/Core/Inc/j1939.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * j1939.h - * - * Created on: May 3, 2024 - * Author: colorbass - */ - -#ifndef INC_J1939_H_ -#define INC_J1939_H_ - -#define J_ID_SE 0x56 -#define J_ID_EV 0xF4 - -#include "main.h" - -extern CAN_HandleTypeDef hcan1; - -typedef struct{ - uint8_t data[256]; //data array - uint32_t PGN; //received PGN - uint16_t size; - uint8_t packets; - uint8_t packet; - uint8_t step; - uint8_t step_cts_remain; - uint8_t state; //(0 = standby, 1= receiving) - uint32_t tick; -}j_receive_t; - -extern j_receive_t j_rx; - - -void J_SendCTS(j_receive_t rx); -void J_SendACK(j_receive_t rx); - - -void GBT_CAN_ReInit(); -void GBT_CAN_FilterInit(); - -#endif /* INC_J1939_H_ */ diff --git a/Core/Inc/lock.h b/Core/Inc/lock.h deleted file mode 100755 index 83e1be2..0000000 --- a/Core/Inc/lock.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * lock.h - * - * Created on: Jul 31, 2024 - * Author: colorbass - */ - -#ifndef INC_LOCK_H_ -#define INC_LOCK_H_ - -#include "main.h" -#include "stdbool.h" - - -void GBT_Lock(uint8_t state); -void GBT_ManageLockSolenoid(); -void GBT_ManageLockMotor(); -uint8_t GBT_LockGetState(); -void GBT_ForceLock(uint8_t state); -void GBT_ResetErrorTimeout(); - -typedef struct { -// uint8_t state; - uint8_t demand; - uint8_t error; - uint8_t action_requested; // 0 = unlock, 1 = lock, 255 = no action - uint8_t motor_state; // 0 = idle, 1 = motor_on, 2 = waiting_off - uint32_t last_action_time; // время последнего изменения состояния мотора - uint8_t retry_count; // счетчик попыток - uint32_t error_tick; // время установки ошибки (для таймаута сброса) -} GBT_LockState_t; - -extern GBT_LockState_t GBT_LockState; - -#endif /* INC_LOCK_H_ */ diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 5a279de..59837fc 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -43,7 +43,7 @@ extern "C" { /* USER CODE BEGIN EC */ #define FW_VERSION_MAJOR 0x01 #define FW_VERSION_MINOR 0x00 -#define FW_VERSION_PATCH 0x01 +#define FW_VERSION_PATCH 0x02 /* USER CODE END EC */ /* Exported macro ------------------------------------------------------------*/ @@ -59,10 +59,16 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define RELAY_CP_Pin GPIO_PIN_3 +#define RELAY_CP_GPIO_Port GPIOC #define IN_SW0_Pin GPIO_PIN_1 #define IN_SW0_GPIO_Port GPIOA #define IN_SW1_Pin GPIO_PIN_2 #define IN_SW1_GPIO_Port GPIOA +#define CP_ADC_Pin GPIO_PIN_4 +#define CP_ADC_GPIO_Port GPIOA +#define CP_PWM_Pin GPIO_PIN_7 +#define CP_PWM_GPIO_Port GPIOA #define LOCK_A_Pin GPIO_PIN_4 #define LOCK_A_GPIO_Port GPIOC #define LOCK_B_Pin GPIO_PIN_5 diff --git a/Core/Inc/serial.h b/Core/Inc/serial.h new file mode 100644 index 0000000..9238253 --- /dev/null +++ b/Core/Inc/serial.h @@ -0,0 +1,127 @@ +#ifndef __SERIAL_H +#define __SERIAL_H + +#include "main.h" +#include "charger_control.h" +#include "usart.h" +#include "cp.h" + +void CCS_SerialLoop(void); +void CCS_Init(void); +void CCS_SendEmergencyStop(void); +void CCS_SendStart(void); +void CCS_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size); + +typedef enum { + CCS_DISABLED = 0, + CCS_UNPLUGGED = 1, + CCS_AUTH_REQUIRED = 2, + CCS_CONNECTED = 3, + CCS_REPLUGGING = 4, +} CCS_ConnectorState_t; + +typedef enum { + PSU_OFF = 0, + PSU_ON = 1, + PSU_PREPARE = 2, +} EnablePSU_t; + +typedef struct { + uint16_t maxVoltage; + uint16_t minVoltage; + uint16_t maxCurrent; + uint16_t minCurrent; + uint32_t maxPower; +} CCS_MaxLoad_t; + +/* Commands Everest -> module. */ +#define CMD_E2M_PWM_DUTY 0x40 +#define CMD_E2M_ENABLE_OUTPUT 0x41 +#define CMD_E2M_RESET 0x42 +#define CMD_E2M_ENABLE 0x43 +#define CMD_E2M_REPLUG 0x44 +#define CMD_E2M_SET_OUTPUT_VOLTAGE 0x45 +#define CMD_E2M_ISOLATION_CONTROL 0x46 +#define CMD_E2M_EV_INFO 0x47 +#define CMD_E2M_EVSE_STATE 0x48 +#define CMD_E2M_KEEP_ALIVE 0x49 + +/* Commands module -> Everest. */ +#define CMD_M2E_STATE 0x50 +#define CMD_M2E_RESET 0x52 +#define CMD_M2E_ESTOP 0x53 +#define CMD_M2E_START 0x54 + +typedef struct __attribute__((packed)) { + uint8_t pwm_duty_percent; +} e2m_pwm_duty_t; + +typedef struct __attribute__((packed)) { + uint8_t enable_output; +} e2m_enable_output_t; + +typedef struct __attribute__((packed)) { + uint8_t reset; +} e2m_reset_t; + +typedef struct __attribute__((packed)) { + uint8_t enable; +} e2m_enable_t; + +typedef struct __attribute__((packed)) { + uint8_t replug; +} e2m_replug_t; + +typedef struct __attribute__((packed)) { + uint16_t voltage_V; + uint16_t current_0p1A; +} e2m_set_output_t; + +typedef struct __attribute__((packed)) { + uint8_t command; +} e2m_isolation_control_t; + +typedef struct __attribute__((packed)) { + uint16_t valid_mask; + uint16_t soc; + uint16_t present_voltage; + uint16_t present_current; + uint16_t target_voltage; + uint16_t target_current; + uint16_t max_current; + uint16_t min_current; + uint16_t max_voltage; + uint32_t max_power; + uint32_t remaining_energy; + uint16_t battery_capacity; + uint16_t battery_full_soc; + uint16_t battery_bulk_soc; + uint32_t estimated_time_full; + uint32_t departure_time; + uint32_t estimated_time_bulk; +} CCS_EvInfo_t; + +typedef struct __attribute__((packed)) { + uint8_t DutyCycle; + uint8_t OutputEnabled; + uint16_t MeasuredVoltage; + uint16_t MeasuredCurrent; + uint32_t Power; + uint32_t Energy; + uint32_t IsolationResistance; + uint8_t IsolationValid; + uint8_t CpState; + uint16_t MaxVoltage; + uint16_t MinVoltage; + uint16_t MaxCurrent; + uint16_t MinCurrent; + uint32_t MaxPower; +} CCS_State_t; + +extern CCS_MaxLoad_t CCS_MaxLoad; +extern CCS_EvInfo_t CCS_EvInfo; +extern CONN_State_t CCS_EvseState; +extern uint8_t REPLUG; + +#endif + diff --git a/Core/Inc/sma_filter.h b/Core/Inc/sma_filter.h new file mode 100644 index 0000000..aaa8464 --- /dev/null +++ b/Core/Inc/sma_filter.h @@ -0,0 +1,23 @@ +#ifndef SMA_FILTER_H +#define SMA_FILTER_H + +#include + +// Простая скользящая SMA (simple moving average) для целых значений. +// Окно фиксировано и задается макросом. +#ifndef SMA_FILTER_WINDOW +#define SMA_FILTER_WINDOW 8 +#endif + +typedef struct { + int32_t sum; + uint16_t idx; + uint16_t count; + int32_t buffer[SMA_FILTER_WINDOW]; +} SMAFilter_t; + +void SMAFilter_Init(SMAFilter_t* f); +int32_t SMAFilter_Update(SMAFilter_t* f, int32_t x); + +#endif // SMA_FILTER_H + diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index 955eca1..9e675c0 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -56,6 +56,7 @@ void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void CAN1_RX0_IRQHandler(void); +void TIM3_IRQHandler(void); void USART1_IRQHandler(void); void USART2_IRQHandler(void); void USART3_IRQHandler(void); diff --git a/Core/Inc/tim.h b/Core/Inc/tim.h index efce052..de93f98 100644 --- a/Core/Inc/tim.h +++ b/Core/Inc/tim.h @@ -32,12 +32,15 @@ extern "C" { /* USER CODE END Includes */ +extern TIM_HandleTypeDef htim3; + extern TIM_HandleTypeDef htim4; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ +void MX_TIM3_Init(void); void MX_TIM4_Init(void); void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); diff --git a/Core/Src/.DS_Store b/Core/Src/.DS_Store index c5fbc9a0513a9b4d379051d99b7e7bb276747480..31d6e099e9293497585d86e240cf29df7c92c48d 100755 GIT binary patch delta 39 vcmZoMXfc@J&&aniU^g=(-(((^jg!B#=uM7g)!DqAHGpYi!-CE19Dn%%1^f+` delta 145 zcmZoMXfc@J&nUPtU^g?P;A9?_jrzO{$qX3`i3~*y=?tkrG9E}LF_bXqF(iBDTP zvOFbDwgdIknYzR8IvVl6W=wM2pe22xFo1Gzx!H~g{!I;5v Vavhr(6C>Yd9@c24&Fmb1`2lY^AK(B0 diff --git a/Core/Src/adc.c b/Core/Src/adc.c index 6f6f72d..c78dd11 100644 --- a/Core/Src/adc.c +++ b/Core/Src/adc.c @@ -85,10 +85,11 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) __HAL_RCC_GPIOB_CLK_ENABLE(); /**ADC1 GPIO Configuration PA3 ------> ADC1_IN3 + PA4 ------> ADC1_IN4 PB0 ------> ADC1_IN8 PB1 ------> ADC1_IN9 */ - GPIO_InitStruct.Pin = GPIO_PIN_3; + GPIO_InitStruct.Pin = GPIO_PIN_3|CP_ADC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); @@ -115,10 +116,11 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* adcHandle) /**ADC1 GPIO Configuration PA3 ------> ADC1_IN3 + PA4 ------> ADC1_IN4 PB0 ------> ADC1_IN8 PB1 ------> ADC1_IN9 */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3); + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|CP_ADC_Pin); HAL_GPIO_DeInit(GPIOB, ADC_NTC1_Pin|ADC_NTC2_Pin); diff --git a/Core/Src/board.c b/Core/Src/board.c index fcc75b1..2b1ce50 100755 --- a/Core/Src/board.c +++ b/Core/Src/board.c @@ -2,16 +2,19 @@ #include "main.h" #include "board.h" #include "tim.h" +#include "sma_filter.h" extern ADC_HandleTypeDef hadc1; //TODO: //TEMP READ -//GBT_TEMP_SENSORS +// Connector temperature sensors InfoBlock_t *InfoBlock = (InfoBlock_t *)(VERSION_OFFSET); uint8_t RELAY_State[RELAY_COUNT]; +static volatile uint8_t adc_lock = 0; +static SMAFilter_t conn_temp_adc_filter[2]; void RELAY_Write(relay_t num, uint8_t state){ switch (num) { @@ -30,6 +33,9 @@ void RELAY_Write(relay_t num, uint8_t state){ case RELAY_AC: HAL_GPIO_WritePin(RELAY5_GPIO_Port, RELAY5_Pin, state); break; + case RELAY_CP: + HAL_GPIO_WritePin(RELAY_CP_GPIO_Port, RELAY_CP_Pin, state); + break; case RELAY_CC: HAL_GPIO_WritePin(RELAY_CC_GPIO_Port, RELAY_CC_Pin, state); break; @@ -89,8 +95,12 @@ void Init_Peripheral(){ RELAY_Write(RELAY3, 0); RELAY_Write(RELAY_DC, 0); RELAY_Write(RELAY_AC, 0); + RELAY_Write(RELAY_CP, 1); RELAY_Write(RELAY_CC, 1); RELAY_Write(RELAY_DC1, 0); + + SMAFilter_Init(&conn_temp_adc_filter[0]); + SMAFilter_Init(&conn_temp_adc_filter[1]); } float pt1000_to_temperature(float resistance) { @@ -119,7 +129,9 @@ float calculate_NTC_resistance(int adc_value, float Vref, float Vin, float R) { return R_NTC; } -int16_t GBT_ReadTemp(uint8_t ch){ +int16_t CONN_ReadTemp(uint8_t ch){ + ADC_LockBlocking(); + //TODO if(ch)ADC_Select_Channel(ADC_CHANNEL_8); else ADC_Select_Channel(ADC_CHANNEL_9); @@ -136,19 +148,28 @@ int16_t GBT_ReadTemp(uint8_t ch){ // Остановка АЦП (по желанию) HAL_ADC_Stop(&hadc1); - if(adcValue>4000) return 20; //Термодатчик не подключен + int32_t adc_filtered = SMAFilter_Update(&conn_temp_adc_filter[ch ? 1u : 0u], (int32_t)adcValue); + if((uint32_t)adc_filtered > 4000u) { + ADC_Unlock(); + return 20; //Термодатчик не подключен + } // int adc_value = 2048; // Пример значения АЦП float Vref = 3.3; // Напряжение опорное float Vin = 5.0; // Входное напряжение float R = 1000; // Сопротивление резистора в Омах - float temp = pt1000_to_temperature(calculate_NTC_resistance(adcValue, Vref, Vin, R)); + float temp = pt1000_to_temperature(calculate_NTC_resistance((int)adc_filtered, Vref, Vin, R)); + ADC_Unlock(); return (int16_t)temp; } +int16_t GBT_ReadTemp(uint8_t ch){ + return CONN_ReadTemp(ch); +} + void ADC_Select_Channel(uint32_t ch) { ADC_ChannelConfTypeDef conf = { .Channel = ch, @@ -159,3 +180,34 @@ void ADC_Select_Channel(uint32_t ch) { Error_Handler(); } } + +uint8_t ADC_TryLock(void) { + uint32_t primask = __get_PRIMASK(); + __disable_irq(); + if (adc_lock != 0u) { + if (primask == 0u) { + __enable_irq(); + } + return 0u; + } + adc_lock = 1u; + if (primask == 0u) { + __enable_irq(); + } + return 1u; +} + +void ADC_LockBlocking(void) { + while (ADC_TryLock() == 0u) { + /* wait in main context until ADC is free */ + } +} + +void ADC_Unlock(void) { + uint32_t primask = __get_PRIMASK(); + __disable_irq(); + adc_lock = 0u; + if (primask == 0u) { + __enable_irq(); + } +} diff --git a/Core/Src/charger_control.c b/Core/Src/charger_control.c index 94e51f2..4584276 100644 --- a/Core/Src/charger_control.c +++ b/Core/Src/charger_control.c @@ -1,10 +1,12 @@ #include "charger_control.h" #include "charger_config.h" -#include "lock.h" #include "psu_control.h" +#include "connector.h" +#include "debug.h" ChargingConnector_t CONN; +CONN_State_t connectorState; void CONN_Init(){ @@ -21,9 +23,7 @@ void CONN_Loop(){ CONN.connControl = CMD_NONE; } - if(GBT_LockState.error){ - CONN.chargingError = CONN_ERR_LOCK; - } else if(PSU0.cont_fault){ + if(PSU0.cont_fault){ CONN.chargingError = CONN_ERR_CONTACTOR; } else if(PSU0.psu_fault){ CONN.chargingError = CONN_ERR_PSU_FAULT; @@ -38,6 +38,48 @@ void CONN_Loop(){ } +void CONN_Task(){ + /* CCS state machine is handled in serial.c. + * Keep this task lightweight for scheduler compatibility. + */ + if (CONN.chargingError != CONN_NO_ERROR) { + CONN_SetState(Disabled); + return; + } + + if (connectorState == Unknown) { + CONN_SetState(Unplugged); + } else if (connectorState == Disabled && CONN.chargingError == CONN_NO_ERROR) { + CONN_SetState(Unplugged); + } +} + +void CONN_SetState(CONN_State_t state){ + if (connectorState == state) { + CONN.connState = state; + return; + } + + connectorState = state; + + if(connectorState == Unknown) log_printf(LOG_INFO, "Connector: Unknown\n"); + if(connectorState == Unplugged) log_printf(LOG_INFO, "Connector: Unplugged\n"); + if(connectorState == Disabled) log_printf(LOG_INFO, "Connector: Disabled\n"); + if(connectorState == Preparing) log_printf(LOG_INFO, "Connector: Preparing\n"); + if(connectorState == AuthRequired) log_printf(LOG_INFO, "Connector: AuthRequired\n"); + if(connectorState == WaitingForEnergy) log_printf(LOG_INFO, "Connector: WaitingForEnergy\n"); + if(connectorState == ChargingPausedEV) log_printf(LOG_INFO, "Connector: ChargingPausedEV\n"); + if(connectorState == ChargingPausedEVSE) log_printf(LOG_INFO, "Connector: ChargingPausedEVSE\n"); + if(connectorState == Charging) log_printf(LOG_INFO, "Connector: Charging\n"); + if(connectorState == AuthTimeout) log_printf(LOG_INFO, "Connector: AuthTimeout\n"); + if(connectorState == Finished) log_printf(LOG_INFO, "Connector: Finished\n"); + if(connectorState == FinishedEVSE) log_printf(LOG_INFO, "Connector: FinishedEVSE\n"); + if(connectorState == FinishedEV) log_printf(LOG_INFO, "Connector: FinishedEV\n"); + if(connectorState == Replugging) log_printf(LOG_INFO, "Connector: Replugging\n"); + + CONN.connState = state; +} + void CONN_PrintChargingTotal(){ printf("CONN%d Charging Finished:\n", 0); // printf("Charging Time: %d\n", CONN.chargingTime); diff --git a/Core/Src/charger_gbt.c b/Core/Src/charger_gbt.c deleted file mode 100755 index b26fa39..0000000 --- a/Core/Src/charger_gbt.c +++ /dev/null @@ -1,593 +0,0 @@ -/* - * charger_gbt.c - * - * Created on: Apr 18, 2024 - * Author: colorbass - */ - - -#include "charger_gbt.h" -#include "main.h" -#include "board.h" -#include "stdio.h" -#include "j1939.h" -#include "string.h" -#include "lock.h" -#include "connector.h" -#include "soft_rtc.h" -#include "debug.h" -#include "charger_config.h" -#include "serial_control.h" -#include "lock.h" -#include "psu_control.h" - -uint8_t GBT_CC_GetStateRaw(); - -gbtState_t GBT_State; -uint32_t GBT_state_tick; //Tick after state switch -uint32_t GBT_delay_start; -uint32_t GBT_delay; -uint8_t GBT_BAT_INFO_recv; -uint8_t GBT_BAT_STAT_recv; -uint8_t GBT_BRO_recv; -uint8_t GBT_BHM_recv; -uint8_t GBT_BSD_recv; -uint8_t EV_ready; -//uint8_t GBT_Charger_Enable; //FIX -//uint8_t GBT_Charger_Permission;//FIX - -GBT_CML_t GBT_MaxLoad; -GBT_CRM_t GBT_ChargerInfo; - -GBT_BHM_t GBT_MaxVoltage; -GBT_BRM_t GBT_EVInfo; -GBT_BCP_t GBT_BATStat; -GBT_BCL_t GBT_ReqPower; -GBT_BCL_t GBT_CurrPower; - -GBT_BCS_t GBT_ChargingStatus; - -GBT_BSM_t GBT_BatteryStatus; - -GBT_CCS_t GBT_ChargerCurrentStatus; - -GBT_CSD_t GBT_ChargerStop; - -uint8_t GBT_BRO; - -uint32_t GBT_TimeChargingStarted; -/** Время последнего приёма любого из PGN BCL/BCS/BSM; общий таймаут в GBT_S10_CHARGING */ -uint32_t GBT_last_BCL_BCS_BSM_tick; - -#define GBT_BCL_BCS_BSM_TIMEOUT_MS 2000 - -uint32_t GBT_StopCauseCode; -uint32_t GBT_ErrorCode; - -GBT_StopSource_t GBT_StopSource; - -extern ConfigBlock_t config; - -void GBT_Init(){ - GBT_State = GBT_DISABLED; - GBT_Reset(); - - GBT_MaxLoad.maxOutputVoltage = PSU_MAX_VOLTAGE*10; // 1000V - GBT_MaxLoad.minOutputVoltage = PSU_MIN_VOLTAGE*10; //150V - GBT_MaxLoad.maxOutputCurrent = 4000 - (PSU_MAX_CURRENT*10); //100A - GBT_MaxLoad.minOutputCurrent = 4000 - (PSU_MIN_CURRENT*10); //1A - -} - -void GBT_SetConfig(){ - set_Time(config.unixTime); - GBT_ChargerInfo.chargerLocation[0] = config.location[0]; - GBT_ChargerInfo.chargerLocation[1] = config.location[1]; - GBT_ChargerInfo.chargerLocation[2] = config.location[2]; - GBT_ChargerInfo.chargerNumber = config.chargerNumber; -} - - -void GBT_ChargerTask(){ - - //GBT_LockTask(); - if(j_rx.state == 2){ - switch (j_rx.PGN){ - case 0x2700: //PGN BHM - GBT_BHM_recv = 1; - memcpy (&GBT_MaxVoltage, j_rx.data, sizeof(GBT_MaxVoltage)); - - break; - - case 0x0200: //PGN BRM LONG - GBT_BAT_INFO_recv = 1; - memcpy (&GBT_EVInfo, j_rx.data, sizeof(GBT_EVInfo)); - - break; - - case 0x0600: //PGN BCP LONG - GBT_BAT_STAT_recv = 1; - memcpy (&GBT_BATStat, j_rx.data, sizeof(GBT_BATStat)); - break; - - case 0x0900: //PGN BRO - GBT_BRO_recv = 1; - if(j_rx.data[0] == 0xAA) EV_ready = 1; - else EV_ready = 0; - GBT_BRO = j_rx.data[0]; - break; - - case 0x1000: //PGN BCL - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - //TODO: power block - memcpy (&GBT_ReqPower, j_rx.data, sizeof(GBT_ReqPower)); - - uint16_t volt = GBT_ReqPower.requestedVoltage; // 0.1V/bit - uint16_t curr = 4000 - GBT_ReqPower.requestedCurrent; // 0.1A/bit - CONN.RequestedVoltage = volt / 10; // В - CONN.WantedCurrent = curr; // 0.1A - - break; - - case 0x1100: //PGN BCS - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - //TODO - memcpy (&GBT_ChargingStatus, j_rx.data, sizeof(GBT_ChargingStatus)); - CONN.SOC = GBT_ChargingStatus.currentChargeState; - break; - - case 0x1300: //PGN BSM - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - //TODO - memcpy (&GBT_BatteryStatus, j_rx.data, sizeof(GBT_BatteryStatus)); - break; - - case 0x1500: //PGN BMV - //TODO - break; - - case 0x1600: //PGN BMT - //TODO - break; - - case 0x1700: //PGN BSP - //TODO - break; - - //this handler in j1939.c -// case 0x1900: //PGN BST -// break; - - case 0x1C00: //PGN BSD - //TODO SOC Voltage Temp - GBT_BSD_recv = 1; - break; - - //this handler in j1939.c -// case 0x1E00: //PGN BEM -// break; - - //BSM BMV BMT BSP BST BSD BEM - - } - j_rx.state = 0; - } - - if((HAL_GetTick() - GBT_delay_start) < GBT_delay){ - //waiting - }else switch (GBT_State){ - case GBT_DISABLED: - RELAY_Write(RELAY_AUX0, 0); - RELAY_Write(RELAY_AUX1, 0); - if(connectorState == Preparing){ - GBT_Reset(); - GBT_Start();//TODO IF protections (maybe not needed) - } - break; - - case GBT_S3_STARTED: - GBT_SwitchState(GBT_S31_WAIT_BHM); - GBT_Delay(500); - break; - - case GBT_S31_WAIT_BHM: - if(j_rx.state == 0) GBT_SendCHM(); - GBT_Delay(250); - - if(GBT_BHM_recv) { - GBT_SwitchState(GBT_S4_WAIT_PSU_READY); - } - - //Timeout 10S - if((GBT_BHM_recv == 0) && (GBT_StateTick()>10000)) { //BHM Timeout - GBT_Error(0xFCF0C0FC); - CONN.chargingError = CONN_ERR_EV_COMM; - log_printf(LOG_ERR, "BHM Timeout\n"); - } - break; - case GBT_S4_WAIT_PSU_READY: - if(j_rx.state == 0) GBT_SendCHM(); - GBT_Delay(250); - if(PSU0.ready){ - GBT_SwitchState(GBT_S4_WAIT_PSU_ON); - } - if(GBT_StateTick()>10000){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_PSU_FAULT; - log_printf(LOG_ERR, "PSU ready timeout, stopping...\n"); - break; - } - break; - - case GBT_S4_WAIT_PSU_ON: - if(j_rx.state == 0) GBT_SendCHM(); - GBT_Delay(250); - CONN.RequestedVoltage = GBT_MaxVoltage.maxOutputVoltage / 10; // 0.1V -> V - CONN.WantedCurrent = 10; // 1A max (0.1A units) - CONN.EnableOutput = 1; - if(PSU0.state == PSU_CONNECTED){ - GBT_SwitchState(GBT_S4_ISOTEST); - } - if(GBT_StateTick()>10000){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_PSU_FAULT; - log_printf(LOG_ERR, "PSU on timeout, stopping...\n"); - break; - } - break; - - case GBT_S4_ISOTEST: - if(j_rx.state == 0) GBT_SendCHM(); - GBT_Delay(250); - //TODO: Isolation test trigger - if(CONN.chargingError != CONN_NO_ERROR){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - } - if(GBT_StateTick()>5000){ - GBT_SwitchState(GBT_S4_WAIT_PSU_OFF); - } - if(ISO.isolationResistance < (ISO.voltageComm/2)){ // *100/1000 - CONN.chargingError = CONN_ERR_INSULATION; - log_printf(LOG_WARN, "Isolation warning\n"); - } // 500 Ohm/V - - if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000 - CONN.chargingError = CONN_ERR_INSULATION; - log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n"); - GBT_StopEVSE(GBT_CST_OTHERFALUT); - } // 100 Ohm/V - - break; - - case GBT_S4_WAIT_PSU_OFF: - CONN.RequestedVoltage = 0; - CONN.WantedCurrent = 0; - CONN.EnableOutput = 0; - if(GBT_StateTick()>5000){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_PSU_FAULT; - log_printf(LOG_ERR, "PSU off timeout, stopping...\n"); - break; - } - if(PSU0.PSU_enabled == 0){ - GBT_SwitchState(GBT_S5_BAT_INFO); - } - break; - - case GBT_S5_BAT_INFO: - if(j_rx.state == 0) GBT_SendCRM(0x00); - GBT_Delay(250); - if(GBT_BAT_INFO_recv){ //BRM - //Got battery info - GBT_SwitchState(GBT_S6_BAT_STAT); - log_printf(LOG_INFO, "EV info:\n"); - log_printf(LOG_INFO, "GBT_ver V%d.%d%d\n",GBT_EVInfo.version[0],GBT_EVInfo.version[1],GBT_EVInfo.version[2]); - log_printf(LOG_INFO, "Battery type: %d\n",GBT_EVInfo.batteryType); - log_printf(LOG_INFO, "Battery capacity: %d\n", GBT_EVInfo.batteryCapacity); // 0.1Ah/bit - log_printf(LOG_INFO, "Battery voltage: %d\n", GBT_EVInfo.batteryVoltage); // 0.1V/bit - log_printf(LOG_INFO, "Battery vendor: %.4s\n", GBT_EVInfo.batteryVendor); // Battery vendor (ASCII string) - log_printf(LOG_INFO, "Battery SN: %lu\n", GBT_EVInfo.batterySN); // int - log_printf(LOG_INFO, "Battery manufacture date: %02d.%02d.%04d\n", GBT_EVInfo.batteryManuD, GBT_EVInfo.batteryManuM ,GBT_EVInfo.batteryManuY+1985); // year (offset 1985) - log_printf(LOG_INFO, "Battery cycles: %d\n", GBT_EVInfo.batteryCycleCount); //uint24_t - log_printf(LOG_INFO, "Own auto: %d\n", GBT_EVInfo.ownAuto); // 0 = lizing, 1 = own auto - log_printf(LOG_INFO, "EVIN: %.17s\n", GBT_EVInfo.EVIN); //EVIN - log_printf(LOG_INFO, "EV_SW_VER: %.8s\n", GBT_EVInfo.EV_SW_VER); - - } - //Timeout - if((GBT_StateTick()>5000) && (GBT_BAT_INFO_recv == 0)){ - CONN.chargingError = CONN_ERR_EV_COMM; - GBT_Error(0xFDF0C0FC); //BRM Timeout - log_printf(LOG_ERR, "BRM Timeout\n"); - } - break; - - case GBT_S6_BAT_STAT: - if(j_rx.state == 0) GBT_SendCRM(0xAA); - GBT_Delay(250); - if(GBT_BAT_STAT_recv){ - //Got battery status - GBT_SwitchState(GBT_S7_BMS_WAIT); - log_printf(LOG_INFO, "Battery info:\n"); - log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxCellVoltage/100); // 0.01v/bit - log_printf(LOG_INFO, "maxCC %dA\n",GBT_BATStat.maxChargingCurrent/10); // 0.1A/bit - log_printf(LOG_INFO, "totE %dkWh\n",GBT_BATStat.totalEnergy/10); // 0.1kWh - log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxChargingVoltage/10); // 0.1V/ bit - log_printf(LOG_INFO, "maxT %dC\n",(int16_t)GBT_BATStat.maxTemp-50); // 1C/bit, -50C offset - log_printf(LOG_INFO, "SOC %dp\n",GBT_BATStat.SOC/10); // 0.1%/bit , 0..100% - log_printf(LOG_INFO, "Volt. %dV\n",GBT_BATStat.measVoltage/10); // 0.1V/bit - - } - if((GBT_StateTick()>5000) && (GBT_BAT_STAT_recv == 0)){ - CONN.chargingError = CONN_ERR_EV_COMM; - GBT_Error(0xFCF1C0FC); //BCP Timeout - log_printf(LOG_ERR, "BCP Timeout\n"); - } - break; - - case GBT_S7_BMS_WAIT: - if(j_rx.state == 0) GBT_SendCTS(); - HAL_Delay(2); - if(j_rx.state == 0) GBT_SendCML(); - GBT_Delay(250); - if((GBT_StateTick()>5000) && (GBT_BRO_recv == 0)){ - CONN.chargingError = CONN_ERR_EV_COMM; - GBT_Error(0xFCF4C0FC); //BRO Timeout - log_printf(LOG_ERR, "BRO Timeout\n"); - } - if(EV_ready){ - //EV ready (AA) - GBT_SwitchState(GBT_S8_INIT_CHARGER); - }else{ - if((GBT_StateTick()>60000) && (GBT_BRO_recv == 1)){ - CONN.chargingError = CONN_ERR_EV_COMM; - GBT_Error(0xFCF4C0FC); //BRO Timeout - log_printf(LOG_ERR, "EV not ready for a 60s\n"); - } - } - break; - - case GBT_S8_INIT_CHARGER: - if(j_rx.state == 0) GBT_SendCRO(0x00); - //TODO - GBT_Delay(250); - // if(GBT_StateTick()>1500){ - if(PSU0.ready){ - //Power Modules initiated - GBT_SwitchState(GBT_S9_WAIT_BCL); - } - if((GBT_StateTick()>6000) && (PSU0.ready == 0)){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_PSU_FAULT; - log_printf(LOG_ERR, "PSU not ready, stopping...\n"); - } - break; - - case GBT_S9_WAIT_BCL: - if(j_rx.state == 0) GBT_SendCRO(0xAA); - GBT_Delay(250); - if(GBT_ReqPower.chargingMode != 0){ //REFACTORING - //BCL power requirements received - - GBT_SwitchState(GBT_S10_CHARGING); - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - CONN_SetState(Charging); - - uint16_t curr = 4000 - GBT_ReqPower.requestedCurrent; - uint16_t volt = GBT_ReqPower.requestedVoltage; - //TODO Limits - CONN.RequestedVoltage = volt / 10; // В - CONN.WantedCurrent = curr; // 0.1A - CONN.EnableOutput = 1; - GBT_TimeChargingStarted = get_Current_Time(); - - } - break; - - case GBT_S10_CHARGING: - //CHARGING - if((HAL_GetTick() - GBT_last_BCL_BCS_BSM_tick) > GBT_BCL_BCS_BSM_TIMEOUT_MS){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_EV_COMM; - log_printf(LOG_WARN, "BCL/BCS/BSM timeout, stopping...\n"); - break; - } - if(CONN.connControl == CMD_STOP) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY); - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY); // --> Finished - if(GBT_LockState.error) { - GBT_StopEVSE(GBT_CST_OTHERFALUT); // --> Suspend EVSE - CONN.chargingError = CONN_ERR_LOCK; - log_printf(LOG_WARN, "Lock error, stopping...\n"); - break; - } - if(CONN_CC_GetState()!=GBT_CC_4V){ - GBT_StopEVSE(GBT_CST_OTHERFALUT); - CONN.chargingError = CONN_ERR_HOTPLUG; - log_printf(LOG_WARN, "Hotplug detected, stopping...\n"); - break; - } - if((GBT_ReadTemp(0) > 90) || (GBT_ReadTemp(1) > 90)) { - GBT_StopEVSE(GBT_CST_CONNECTOR_OVER_TEMP); - CONN.chargingError = CONN_ERR_CONN_TEMP; - log_printf(LOG_WARN, "Connector overheat %d %d, stopping...\n", GBT_ReadTemp(0), GBT_ReadTemp(1)); - break; - } - if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000 - CONN.chargingError = CONN_ERR_INSULATION; - log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n"); - } // 100 Ohm/V - - if(CONN.chargingError != CONN_NO_ERROR){ // --> Suspend EVSE - GBT_StopEVSE(GBT_CST_OTHERFALUT); - - } - - //GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111100;//NOT PERMITTED - GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111101; - GBT_ChargerCurrentStatus.chargingTime = (get_Current_Time() - GBT_TimeChargingStarted)/60; - GBT_ChargerCurrentStatus.outputCurrent = 4000 - CONN.MeasuredCurrent; // 0.1A - GBT_ChargerCurrentStatus.outputVoltage = CONN.MeasuredVoltage * 10; // V -> 0.1V - - if(j_rx.state == 0) { - GBT_SendCCS(); - GBT_Delay(49); - }else{ - GBT_Delay(10); // Resend packet if not sent - - } - - - //TODO: снижение тока если перегрев контактов - - break; - - case GBT_STOP: - GBT_Delay(10); - CONN.EnableOutput = 0; - GBT_SendCST(GBT_StopCauseCode); - //RELAY_Write(RELAY_OUTPUT, 0); - //GBT_SwitchState(GBT_DISABLED); - if(GBT_StateTick()>10000){ - log_printf(LOG_ERR, "BSD Timeout\n"); - GBT_Error(0xFCF0C0FD); //BSD Timeout - } - - if(GBT_BSD_recv != 0){ - GBT_SwitchState(GBT_STOP_CSD); - } - - break; - case GBT_STOP_CSD: - GBT_Delay(250); - GBT_SendCSD(); - if(GBT_StateTick()>2500){ //2.5S - GBT_SwitchState(GBT_COMPLETE); - - } - break; - - - case GBT_ERROR: - GBT_SendCEM(GBT_ErrorCode); //2.5S - GBT_SwitchState(GBT_COMPLETE); - - break; - - case GBT_COMPLETE: - if(connectorState != Finished) { - GBT_SwitchState(GBT_DISABLED); - GBT_Reset();//CHECK - } - break; - - default: - GBT_SwitchState(GBT_DISABLED); - } - if (CONN_CC_GetState()==GBT_CC_4V) CONN.EvConnected = 1; - else CONN.EvConnected = 0; -} - - - -void GBT_SwitchState(gbtState_t state){ - GBT_State = state; - GBT_state_tick = HAL_GetTick(); - - if(GBT_State == GBT_DISABLED) log_printf(LOG_INFO, "Disabled\n"); - if(GBT_State == GBT_S3_STARTED) log_printf(LOG_INFO, "Charging started\n"); - if(GBT_State == GBT_S31_WAIT_BHM) log_printf(LOG_INFO, "Waiting for BHM\n"); - if(GBT_State == GBT_S4_WAIT_PSU_READY) log_printf(LOG_INFO, "Waiting for PSU ready\n"); - if(GBT_State == GBT_S4_ISOTEST) log_printf(LOG_INFO, "Isolation test\n"); - if(GBT_State == GBT_S5_BAT_INFO) log_printf(LOG_INFO, "Waiting for battery info\n"); - if(GBT_State == GBT_S6_BAT_STAT) log_printf(LOG_INFO, "Waiting for battery status\n"); - if(GBT_State == GBT_S7_BMS_WAIT) log_printf(LOG_INFO, "Waiting for BMS\n"); - if(GBT_State == GBT_S8_INIT_CHARGER)log_printf(LOG_INFO, "Initializing charger\n"); - if(GBT_State == GBT_S9_WAIT_BCL) log_printf(LOG_INFO, "Waiting for BCL\n"); - if(GBT_State == GBT_S10_CHARGING) log_printf(LOG_INFO, "Charging in progress\n"); - if(GBT_State == GBT_STOP) log_printf(LOG_INFO, "Charging Stopped\n"); - if(GBT_State == GBT_STOP_CSD) log_printf(LOG_INFO, "Charging Stopped with CSD\n"); - if(GBT_State == GBT_ERROR) log_printf(LOG_INFO, "Charging Error\n"); - if(GBT_State == GBT_COMPLETE) log_printf(LOG_INFO, "Charging Finished\n"); -} - -uint32_t GBT_StateTick(){ - return HAL_GetTick() - GBT_state_tick; -} - -void GBT_Delay(uint32_t delay){ - GBT_delay_start = HAL_GetTick(); - GBT_delay = delay; -} - -void GBT_StopEV(uint32_t causecode){ // --> Suspend EV - if (CONN.chargingError){ - GBT_StopSource = GBT_STOP_EVSE; - }else{ - GBT_StopSource = GBT_STOP_EV; - } - GBT_StopCauseCode = causecode; - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); -} - -void GBT_StopEVSE(uint32_t causecode){ // --> Suspend EVSE - GBT_StopSource = GBT_STOP_EVSE; - GBT_StopCauseCode = causecode; - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); -} - -void GBT_StopOCPP(uint32_t causecode){ // --> Finished - GBT_StopSource = GBT_STOP_OCPP; - GBT_StopCauseCode = causecode; - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); -} - -void GBT_ForceStop(){ // --> Suspend EV - GBT_StopSource = GBT_STOP_EV; - CONN.EnableOutput = 0; - GBT_SwitchState(GBT_COMPLETE); - GBT_Lock(0); - RELAY_Write(RELAY_AUX0, 0); - RELAY_Write(RELAY_AUX1, 0); -} - -void GBT_Error(uint32_t errorcode){ // --> Suspend EV - GBT_StopSource = GBT_STOP_EV; - log_printf(LOG_ERR, "GBT Error code: 0x%X\n", errorcode); - GBT_ErrorCode = errorcode; - GBT_SwitchState(GBT_ERROR); -} - - -void GBT_Reset(){ - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - GBT_BAT_INFO_recv = 0; - GBT_BAT_STAT_recv = 0; - GBT_BRO_recv = 0; - GBT_BHM_recv = 0; - GBT_BSD_recv = 0; - EV_ready = 0; - CONN.SOC = 0; - CONN.EnableOutput = 0; - CONN.WantedCurrent = 0; - CONN.RequestedVoltage = 0; - memset(&GBT_EVInfo, 0, sizeof (GBT_EVInfo)); - memset(&GBT_BATStat, 0, sizeof (GBT_BATStat)); - memset(&GBT_ReqPower, 0, sizeof (GBT_ReqPower)); - memset(&GBT_CurrPower, 0, sizeof (GBT_CurrPower)); - memset(&GBT_MaxVoltage, 0, sizeof (GBT_MaxVoltage)); - memset(&GBT_ChargingStatus, 0, sizeof (GBT_ChargingStatus)); - memset(&GBT_BatteryStatus, 0, sizeof (GBT_BatteryStatus)); - memset(&GBT_ChargerCurrentStatus, 0, sizeof (GBT_ChargerCurrentStatus)); - memset(&GBT_ChargerStop, 0, sizeof (GBT_ChargerStop)); - GBT_CurrPower.requestedCurrent = 4000; //0A - GBT_CurrPower.requestedVoltage = 500; //50V - GBT_TimeChargingStarted = 0; - GBT_BRO = 0x00; - GBT_LockResetError(); -} -void GBT_Start(){ - RELAY_Write(RELAY_AUX0, 1); - RELAY_Write(RELAY_AUX1, 1); - - GBT_SwitchState(GBT_S3_STARTED); -} diff --git a/Core/Src/connector.c b/Core/Src/connector.c deleted file mode 100755 index 0452c51..0000000 --- a/Core/Src/connector.c +++ /dev/null @@ -1,221 +0,0 @@ -/* - * connector.c - * - * All initialization before 12v_aux - */ - -#include "connector.h" -#include "lock.h" -#include "board.h" -#include "debug.h" - - -CONN_State_t connectorState; - -extern uint8_t config_initialized; - -gbtCcState_t CC_STATE_FILTERED; - -// name - уникальный идентификатор таймера для данного места использования -// cond - условие, которое должно непрерывно держаться delay_ms мс -// delay_ms - задержка в миллисекундах -#define DELAYED_HOLD_MS(name, cond, delay_ms) \ -({ \ - static uint32_t name = 0; \ - uint8_t __hold_result = 0; \ - if (cond) { \ - if (name == 0) { \ - name = HAL_GetTick(); \ - } else if ((HAL_GetTick() - name) >= (uint32_t)(delay_ms)) {\ - __hold_result = 1; \ - name = 0; \ - } \ - } else { \ - name = 0; \ - } \ - __hold_result; \ -}) - -void CONN_Task(){ - - switch (connectorState){ - case Unknown: // unlocked, waiting for config - GBT_Lock(0); - if (config_initialized) { - CONN_SetState(Unplugged); - } - break; - - case Disabled: // faulted, unlocked - GBT_Lock(0); - if(CONN.chargingError == 0) CONN_SetState(Unplugged); - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - break; - - case Unplugged: // unlocked, waiting to connect - GBT_Lock(0); - if(CONN.chargingError != 0) CONN_SetState(Disabled); - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - - if((CONN_CC_GetState()==GBT_CC_4V) && (CONN.connControl != CMD_FORCE_UNLOCK)){ - CONN_SetState(AuthRequired); - GBT_Lock(0); - } - break; - - case AuthRequired: // plugged, waiting to start charge - GBT_Lock(0); - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - if(CONN_CC_GetState()==GBT_CC_4V){ - if(CONN.connControl == CMD_START){ - CONN_SetState(Preparing); - } - if(CONN.connControl == CMD_FORCE_UNLOCK){ - CONN_SetState(Unplugged); - } - // if CHARGING_NOT_ALLOWED — stay here - }else{ - CONN_SetState(Unplugged); - } - break; - - case Preparing: // charging, locked - GBT_Lock(1); - - if(GBT_State == GBT_COMPLETE){ - if(GBT_StopSource == GBT_STOP_EVSE){ - CONN_SetState(FinishedEVSE); - }else if(GBT_StopSource == GBT_STOP_EV){ - CONN_SetState(FinishedEV); - }else if(GBT_StopSource == GBT_STOP_OCPP){ - CONN_SetState(Finished); - }else{ - CONN_SetState(FinishedEVSE); - } - } - if(GBT_State == GBT_S10_CHARGING){ - CONN_SetState(Charging); - } - break; - case Charging: // charging, locked - GBT_Lock(1); - - if(GBT_State == GBT_COMPLETE){ - if(GBT_StopSource == GBT_STOP_EVSE){ - CONN_SetState(FinishedEVSE); - }else if(GBT_StopSource == GBT_STOP_EV){ - CONN_SetState(FinishedEV); - }else if(GBT_StopSource == GBT_STOP_OCPP){ - CONN_SetState(Finished); - }else{ - CONN_SetState(FinishedEVSE); - } - } - break; - - case FinishedEV: // charging completed by EV, waiting to transaction stop - GBT_Lock(0); - CONN_SetState(Finished); - break; - - case FinishedEVSE: // charging completed by EVSE, waiting to transaction stop - GBT_Lock(0); - CONN_SetState(Finished); - break; - - case Finished: // charging completed, waiting to disconnect, unlocked - GBT_Lock(0); - - //TODO Force unlock time limit - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - - if(DELAYED_HOLD_MS(cc6v_hold_tick, CONN_CC_GetState()==GBT_CC_6V, 5000)){ - GBT_Lock(0); - CONN_SetState(Unplugged); - } - break; - - default: - CONN_SetState(Unknown); - } - -} -//external -//CONN_SetState(Disabled); - -void CONN_SetState(CONN_State_t state){ - connectorState = state; - - if(connectorState == Unknown) log_printf(LOG_INFO, "Connector: Unknown\n"); - if(connectorState == Unplugged) log_printf(LOG_INFO, "Connector: Unplugged\n"); - if(connectorState == Disabled) log_printf(LOG_INFO, "Connector: Disabled\n"); - if(connectorState == Preparing) log_printf(LOG_INFO, "Connector: Preparing\n"); - if(connectorState == AuthRequired) log_printf(LOG_INFO, "Connector: AuthRequired\n"); - if(connectorState == WaitingForEnergy) log_printf(LOG_INFO, "Connector: WaitingForEnergy\n"); - if(connectorState == ChargingPausedEV) log_printf(LOG_INFO, "Connector: ChargingPausedEV\n"); - if(connectorState == ChargingPausedEVSE) log_printf(LOG_INFO, "Connector: ChargingPausedEVSE\n"); - if(connectorState == Charging) log_printf(LOG_INFO, "Connector: Charging\n"); - if(connectorState == AuthTimeout) log_printf(LOG_INFO, "Connector: AuthTimeout\n"); - if(connectorState == Finished) log_printf(LOG_INFO, "Connector: Finished\n"); - if(connectorState == FinishedEVSE) log_printf(LOG_INFO, "Connector: FinishedEVSE\n"); - if(connectorState == FinishedEV) log_printf(LOG_INFO, "Connector: FinishedEV\n"); - if(connectorState == Replugging) log_printf(LOG_INFO, "Connector: Replugging\n"); - - CONN.connState = state; -} - -void CONN_CC_ReadStateFiltered() { - static uint32_t last_change_time = 0; - static uint32_t last_check_time = 0; - static uint8_t prev_state = 0; - - if((HAL_GetTick()-last_check_time)<100) return; - - last_check_time = HAL_GetTick(); - - uint8_t new_state = CONN_CC_GetStateRaw(); - - if (new_state != prev_state) { - last_change_time = HAL_GetTick(); - prev_state = new_state; - } else if ((HAL_GetTick() - last_change_time) >= 300) { - CC_STATE_FILTERED = prev_state; - } -} - -uint8_t CONN_CC_GetState(){ - return CC_STATE_FILTERED; -} -uint8_t CONN_CC_GetStateRaw(){ - float volt = CONN_CC_GetAdc(); -// if((volt<12.6f) && (volt>11.4f)) return GBT_CC_12V; -// if((volt<6.8f) && (volt>5.2f)) return GBT_CC_6V; -// if((volt<4.8f) && (volt>3.2f)) return GBT_CC_4V; -// if((volt<2.8f) && (volt>1.2f)) return GBT_CC_2V; - if((volt<13.0f) && (volt>11.0f)) return GBT_CC_12V; - if((volt<7.2f) && (volt>4.8f)) return GBT_CC_6V; - if((volt<4.8f) && (volt>3.0f)) return GBT_CC_4V; - if((volt<3.0f) && (volt>1.0f)) return GBT_CC_2V; - return GBT_CC_UNKNOWN; -} - -float CONN_CC_GetAdc(){ - //TODO: Filters - //Vref=3.3v = 4095 - //k=1/11 - //Vin = 12v - //Vin*k= 1.09v - //12vin = 1353 ADC - - uint32_t adc; - float volt; - ADC_Select_Channel(ADC_CHANNEL_3); - HAL_ADC_Start(&hadc1); - HAL_ADC_PollForConversion(&hadc1, 100); - adc = HAL_ADC_GetValue(&hadc1); - HAL_ADC_Stop(&hadc1); - - volt = (float)adc/113.4f; - - return volt; -} diff --git a/Core/Src/cp.c b/Core/Src/cp.c new file mode 100644 index 0000000..8c48631 --- /dev/null +++ b/Core/Src/cp.c @@ -0,0 +1,115 @@ +#include "cp.h" +#include "adc.h" +#include "board.h" +#include "tim.h" +#include + +#define MAX_DUTY 450 + +static int32_t cp_voltage_mv = 0; +static uint8_t cp_duty = 0; +CP_State_t fake_cp_state = EV_STATE_ACQUIRING; + +static uint32_t CP_ReadAdcChannel(uint32_t ch) { + uint32_t adc = 0; + + ADC_Select_Channel(ch); + HAL_ADC_Start(&hadc1); + HAL_ADC_PollForConversion(&hadc1, 10); + adc = HAL_ADC_GetValue(&hadc1); + HAL_ADC_Stop(&hadc1); + + return adc; +} +#define VREFINT_CAL_ADDR ((uint16_t*)0x1FFFF7BA) // для STM32F1! + +static int32_t CP_ReadVoltageMv(void) +{ + uint32_t adc = 0; + int32_t v_adc_mv = 0; + int32_t v_out_mv = 0; + + adc = CP_ReadAdcChannel((uint32_t)4u); + v_adc_mv = (int32_t)((adc * 3300u) / 4095u); + v_out_mv = ((v_adc_mv - 1723) * 1000) / 130; + + return v_out_mv; +} + +void CP_Init(void) { + /* TIM3_CH2 (PA7): set 1kHz PWM like original CCS logic. */ + htim3.Instance->PSC = 160 - 1; + htim3.Instance->ARR = MAX_DUTY - 1; + +#if DUTY_INVERT == 0 + htim3.Instance->CCR2 = MAX_DUTY; + htim3.Instance->CCR1 = MAX_DUTY + 5; +#else + htim3.Instance->CCR2 = 0; + htim3.Instance->CCR1 = 0; +#endif + + HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); + HAL_TIM_OC_Start_IT(&htim3, TIM_CHANNEL_1); +} + +void CP_SetDuty(uint8_t percentage) { + uint32_t pwmduty = MAX_DUTY * percentage / 100; + cp_duty = percentage; + +#if DUTY_INVERT == 0 + htim3.Instance->CCR2 = pwmduty; + htim3.Instance->CCR1 = 0 + 1; +#else + htim3.Instance->CCR2 = MAX_DUTY - pwmduty; + htim3.Instance->CCR1 = MAX_DUTY - pwmduty + 5; +#endif +} + +uint8_t CP_GetDuty(void) { + return cp_duty; +} + +int32_t CP_GetVoltage(void) { + return cp_voltage_mv; +} + +CP_State_t CP_GetState(void) { + int32_t voltage_real = cp_voltage_mv; + + if(fake_cp_state != EV_STATE_ACQUIRING) { + return fake_cp_state; + } + + if (voltage_real >= (12000-1000)) { + return EV_STATE_A_IDLE; + } else if (voltage_real >= (9000-1000) && voltage_real <= (9000+1000)) { + return EV_STATE_B_CONN_PREP; + } else if (voltage_real >= (6000-1000) && voltage_real <= (6000+1000)) { + return EV_STATE_C_CONN_ACTIVE; + } else if (voltage_real >= (3000-1000) && voltage_real <= (3000 + 1000)) { + return EV_STATE_D_CONN_ACT_VENT; + } else if (voltage_real >= (0-1000) && voltage_real <= (0+2000)){ + return EV_STATE_E_NO_POWER; + } else if (voltage_real <= (-12000+1000)) { + return EV_STATE_F_ERROR; + } else { + return EV_STATE_ACQUIRING; + } +} + +void CP_Loop(void) { + (void)CP_GetState(); +} + +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + if (htim->Instance == TIM3 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { + if (ADC_TryLock() == 0u) { + return; + } + cp_voltage_mv = CP_ReadVoltageMv(); + ADC_Unlock(); + } +} + diff --git a/Core/Src/debug.c b/Core/Src/debug.c index bd47071..e55898d 100755 --- a/Core/Src/debug.c +++ b/Core/Src/debug.c @@ -12,7 +12,6 @@ #include #include "debug.h" #include "board.h" -#include "charger_gbt.h" #include "usart.h" #include #include diff --git a/Core/Src/gbt_packet.c b/Core/Src/gbt_packet.c deleted file mode 100755 index 89804e2..0000000 --- a/Core/Src/gbt_packet.c +++ /dev/null @@ -1,120 +0,0 @@ -/* - * gbt_packet.c - * - * Created on: Jul 23, 2024 - * Author: colorbass - */ - - -// GB/T Time Synchronization Packet -#include "main.h" -#include "soft_rtc.h" -#include "charger_gbt.h" - -void GBT_SendCTS(){ - - uint8_t data[7]; - unix_to_bcd(get_Current_Time(), data); -// data[0] = 0x00; //seconds -// data[1] = 0x30; //minutes -// data[2] = 0x23; //hours -// data[3] = 0x05; //days -// data[4] = 0x05; //month -// data[5] = 0x24; //years -// data[6] = 0x20; //centuries - - J_SendPacket(0x000700, 6, 7, data); -} - -//GB/T Max Load Packet -void GBT_SendCML(){ -// uint8_t data[8]; -// data[0] = 0x94; //450V max output voltage -// data[1] = 0x11; // -// data[2] = 0xB0; //120V min output voltage -// data[3] = 0x04; // -// data[4] = 0xC4; //-150A maximum output current -// data[5] = 0x09; // -// data[6] = 0x8C; //-2A minimum output current -// data[7] = 0x0F; // - - J_SendPacket(0x000800, 6, 8, (uint8_t*)&GBT_MaxLoad); - -} - -//GB/T Version packet -void GBT_SendCHM(){ - uint8_t data[3]; - data[0] = 0x01; - data[1] = 0x01; - data[2] = 0x00; - J_SendPacket(0x2600, 6, 3, data); -} - -//GB/T CRM Packet (state=BMS identified) -void GBT_SendCRM(uint8_t state){ -// uint8_t data[8]; -// data[0] = state; // 0x00 / 0xAA -// data[1] = 0x40; //TODO: Charger Number 123456 -// data[2] = 0xE2; -// data[3] = 0x01; -// data[4] = 0x00; -// data[5] = 0x42; //TODO: location BFG -// data[6] = 0x46; -// data[7] = 0x47; - GBT_ChargerInfo.bmsIdentified = state; - J_SendPacket(0x100, 6, 8, (uint8_t *)&GBT_ChargerInfo); -} - -//GB/T CRO packet (Charger ready) -void GBT_SendCRO(uint8_t state){ - uint8_t data[1]; - data[0] = state; - J_SendPacket(0xA00, 4, 1, data); -} - -//GB/T CCS packet (Charger current status) -void GBT_SendCCS(){ -// uint8_t data[8]; -// data[0] = GBT_CurrPower.requestedVoltage; // -// data[1] = GBT_CurrPower.requestedVoltage>>8; //output voltage -// data[2] = GBT_CurrPower.requestedCurrent; //смещение 400а, границы -// //-400A = 0 -// // 0A = 4000 -// // -100A = 3000 -// data[3] = GBT_CurrPower.requestedCurrent>>8; //TODO: current -// data[4] = GBT_StateTick()/60000; //charging time (min) -// data[5] = 0; //TODO: 255 min+ -// data[6] = 0b11111101; //charging not permitted -// data[7] = 0xFF; - J_SendPacket(0x1200, 6, 8, (uint8_t *)&GBT_ChargerCurrentStatus); -} - -// GB/T Charging Stop packet -void GBT_SendCST(uint32_t Cause){ - uint8_t data[8]; - data[0] = (Cause>>24) & 0xFF; // Error - data[1] = (Cause>>16) & 0xFF; // - data[2] = (Cause>>8) & 0xFF; // - data[3] = Cause & 0xFF; // - - J_SendPacket(0x1A00, 4, 4, data); -} - -void GBT_SendCSD(){ - GBT_ChargerStop.chargerNumber = GBT_ChargerInfo.chargerNumber; - GBT_ChargerStop.outputEnergy = 0; //TODO Energy meters - GBT_ChargerStop.chargingTime = GBT_ChargerCurrentStatus.chargingTime; - J_SendPacket(0x1D00, 6, 7, (uint8_t *)&GBT_ChargerStop); - -} - -void GBT_SendCEM(uint32_t ErrorCode){ - uint8_t data[8]; - data[0] = (ErrorCode>>24) & 0xFF; // Error - data[1] = (ErrorCode>>16) & 0xFF; // - data[2] = (ErrorCode>>8) & 0xFF; // - data[3] = ErrorCode & 0xFF; // - - J_SendPacket(0x1F00, 4, 4, data); -} diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index de2e6b8..54eadf0 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -54,7 +54,7 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, LOCK_A_Pin|LOCK_B_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOC, RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOE, RELAY1_Pin|RELAY2_Pin|RELAY3_Pin|RELAY4_Pin @@ -69,6 +69,13 @@ void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(EE_WP_GPIO_Port, EE_WP_Pin, GPIO_PIN_RESET); + /*Configure GPIO pins : RELAY_CP_Pin LOCK_A_Pin LOCK_B_Pin */ + GPIO_InitStruct.Pin = RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /*Configure GPIO pin : IN_SW0_Pin */ GPIO_InitStruct.Pin = IN_SW0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; @@ -81,13 +88,6 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_PULLDOWN; HAL_GPIO_Init(IN_SW1_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : LOCK_A_Pin LOCK_B_Pin */ - GPIO_InitStruct.Pin = LOCK_A_Pin|LOCK_B_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pins : IN0_Pin AC_OK_Pin ISO_IN_Pin */ GPIO_InitStruct.Pin = IN0_Pin|AC_OK_Pin|ISO_IN_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; diff --git a/Core/Src/j1939.c b/Core/Src/j1939.c deleted file mode 100755 index 4b92f73..0000000 --- a/Core/Src/j1939.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - * j1939.c - * - * Created on: May 3, 2024 - * Author: colorbass - */ - -#include "main.h" -#include "j1939.h" -#include "charger_gbt.h" -#include "string.h" -#include "can.h" -#include "debug.h" - -extern GBT_BCL_t GBT_ReqPower; -extern GBT_BCL_t GBT_CurrPower; - -j_receive_t j_rx; - -void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) -{ - CAN_RxHeaderTypeDef RxHeader; - uint8_t RxData[8] = {0,}; - - if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) - { - if((RxHeader.ExtId & 0x00FFFF) == ((J_ID_SE << 8) | J_ID_EV)){ // SA, DA match - switch ((RxHeader.ExtId>>8) & 0x00FF00){ - - case 0xEC00: //PGN Connection Management Message - if(RxData[0] == 16){ //Request to Send - /* Set the RTS values */ - j_rx.size = RxData[1] | (RxData[2]<<8); - j_rx.packet = 1; - j_rx.packets = RxData[3]; - j_rx.step = 2; //TODO - j_rx.step_cts_remain = j_rx.step; - j_rx.PGN = (RxData[7] << 16) | (RxData[6] << 8) | RxData[5]; - if(j_rx.size<256) { //TODO: valid check - J_SendCTS(j_rx); - j_rx.state = 1; - } - } - if(RxData[0] == 255){ //Connection Abort - j_rx.state = 0; - } - - //if(RxData[0] == 32){}//Broadcast Announce Message - /* - * 1CEC56F4 10 31 00 07 07 00 02 00 - * 1CECF456 11 02 01 FF FF 00 02 00 - * 1CEB56F4 01 01 01 00 03 46 05 40 - * 1CEC56F4 FF FF FF FF FF 00 00 00 - */ - - break; - - case 0xEB00: //PGN Data Message - if(j_rx.state != 1) break; - if((RxData[0]>0) && (RxData[0]<35)){ //Array limit check - if(j_rx.packet == RxData[0]){ //step check - memcpy (&j_rx.data[(RxData[0]-1)*7], &RxData[1],7); - j_rx.packet++; - if(j_rx.packet > j_rx.packets){ - //End of transmission - J_SendACK(j_rx); - - j_rx.state = 2; - }else{ - if(j_rx.step_cts_remain > 0) j_rx.step_cts_remain--; - if(j_rx.step_cts_remain == 0){ - J_SendCTS(j_rx); - j_rx.step_cts_remain = 2; - } - } - } - } - break; - - case 0x1E00: //PGN BEM (ERROR) - //Error force stop - // --> Suspend EV - log_printf(LOG_ERR, "BEM Received, force stopping...\n"); - log_printf(LOG_ERR, "BEM: %02X %02X %02X %02X", RxData[0], RxData[1], RxData[2], RxData[3]); - log_printf(LOG_ERR, " %02X %02X %02X %02X\n", RxData[4], RxData[5], RxData[6], RxData[7]); - GBT_ForceStop(); - break; - - case 0x1900: //PGN BST (STOP) - //Normal stop - - // --> Suspend EV - log_printf(LOG_INFO, "BST Received, stopping...\n"); - log_printf(LOG_INFO, "BST: %02X %02X %02X %02X", RxData[0], RxData[1], RxData[2], RxData[3]); - log_printf(LOG_INFO, " %02X %02X %02X %02X\n", RxData[4], RxData[5], RxData[6], RxData[7]); - GBT_StopEV(GBT_CST_BMS_ACTIVELY_SUSPENDS); - - break; - - default: - if(j_rx.state == 0){//TODO protections - //Short packet - j_rx.size = RxHeader.DLC; - j_rx.packet = 1; - j_rx.packets = 1; - j_rx.step = 1; - j_rx.step_cts_remain = 0; - j_rx.PGN = (RxHeader.ExtId>>8) & 0x00FF00; - j_rx.state = 2; - memcpy (j_rx.data, RxData, j_rx.size); - } - } - } - } -} - -void GBT_CAN_ReInit(){ - HAL_CAN_Stop(&hcan1); - MX_CAN1_Init(); - GBT_CAN_FilterInit(); - HAL_CAN_Start(&hcan1); - HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); -} - -void J_SendPacket(uint32_t PGN, uint8_t pri, uint8_t DLC, uint8_t *data){ - - CAN_TxHeaderTypeDef tx_header; - uint32_t tx_mailbox; - - tx_header.ExtId = (pri << 26) | (PGN << 8) | (J_ID_EV << 8) | J_ID_SE; - tx_header.RTR = CAN_RTR_DATA; - tx_header.IDE = CAN_ID_EXT; - tx_header.DLC = DLC; - - //TODO buffer wait - HAL_CAN_AddTxMessage(&hcan1, &tx_header, data, &tx_mailbox); - //HAL_Delay(2); - -} - -//void J_SendPacketLong(){ -// //TODO (no need) -//} - -// J1939 sequence Clear To Send packet -void J_SendCTS(j_receive_t rx){ - - //if(rx.packets <= rx.packet) return; TODO - uint8_t data[8]; - data[0] = 17; //CONTROL_BYTE_TP_CM_CTS - data[1] = rx.step;//total_number_of_packages_transmitted - if (rx.step > (rx.packets - rx.packet+1)) data[1] = rx.packets - rx.packet+1; - data[2] = rx.packet;//next_packet_number_transmitted - data[3] = 0xFF; /* Reserved */ - data[4] = 0xFF; - data[5] = rx.PGN; - data[6] = rx.PGN >> 8; - data[7] = rx.PGN >> 16; - - J_SendPacket(0x00EC00, 7, 8, data); -} - -// J1939 sequence ACK packet -void J_SendACK(j_receive_t rx){//uint32_t PGN, uint8_t step, uint8_t packet){ - - uint8_t data[8]; - data[0] = 19; //CONTROL_BYTE_TP_CM_ACK - data[1] = j_rx.size; - data[2] = j_rx.size>>8; - data[3] = j_rx.packets; - data[4] = 0xFF;//TODO - data[5] = rx.PGN; - data[6] = rx.PGN >> 8; - data[7] = rx.PGN >> 16; - - J_SendPacket(0x00EC00, 7, 8, data); -} - -void GBT_CAN_FilterInit(){ - CAN_FilterTypeDef sFilterConfig; - - sFilterConfig.FilterBank = 0; - sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; - sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - sFilterConfig.FilterIdHigh = 0x0000; - sFilterConfig.FilterIdLow = 0x0000; - sFilterConfig.FilterMaskIdHigh = 0x0000; - sFilterConfig.FilterMaskIdLow = 0x0000; - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; - sFilterConfig.FilterActivation = ENABLE; - //sFilterConfig.SlaveStartFilterBank = 14; - if(HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK) - { - Error_Handler(); - } - -} diff --git a/Core/Src/lock.c b/Core/Src/lock.c deleted file mode 100755 index d85a895..0000000 --- a/Core/Src/lock.c +++ /dev/null @@ -1,169 +0,0 @@ -/* - * lock.c - * - * Created on: Jul 31, 2024 - * Author: colorbass - */ -#include "lock.h" -#include "debug.h" - - -uint8_t LOCK_POLARITY = 1; // 1 for v1 -uint8_t LOCK_MOTOR_POLARITY = 1; -uint16_t LOCK_DELAY = 100; - -GBT_LockState_t GBT_LockState = { - .demand = 0, - .error = 0, - .action_requested = 255, // нет запрошенного действия - .motor_state = 0, // idle - .last_action_time = 0, - .retry_count = 0, - .error_tick = 0 -}; - - -void GBT_ForceLock(uint8_t state){ - // Устанавливаем флаг для выполнения действия - GBT_LockState.action_requested = state ? 1 : 0; - GBT_LockState.retry_count = 0; -} - -uint8_t GBT_LockGetState(){ - //1 = locked - //0 = unlocked - if(LOCK_POLARITY){ - return HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); - }else{ - return !HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); - - } -} - -void GBT_Lock(uint8_t state){ - GBT_LockState.demand = state; -} - -void GBT_ManageLockSolenoid(){ - static uint32_t tick; - - if(HAL_GetTick() - tick < 50) return; - tick = HAL_GetTick(); - - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, GBT_LockState.demand ? 1 : 0); -} - -void GBT_ManageLockMotor(){ - static const uint8_t MAX_RETRIES = 5; - uint32_t current_tick = HAL_GetTick(); - - // Проверяем таймаут сброса ошибки (до проверки error, чтобы можно было сбросить) - GBT_ResetErrorTimeout(); - - if (GBT_LockState.error) { - return; - } - - // Проверяем, нужно ли выполнить действие - bool lock_is_open = GBT_LockGetState() == 0; - bool lock_should_be_open = GBT_LockState.demand == 0; - - // Если есть запрошенное действие или состояние не соответствует требуемому - if (GBT_LockState.action_requested != 255 || (lock_is_open != lock_should_be_open)) { - // Если действие еще не запрошено, запрашиваем его - if (GBT_LockState.action_requested == 255) { - GBT_LockState.action_requested = lock_should_be_open ? 0 : 1; - GBT_LockState.retry_count = 0; - } - - // Управление мотором через машину состояний - switch (GBT_LockState.motor_state) { - case 0: // idle - мотор выключен - // Определяем, какой пин нужно включить - if (LOCK_MOTOR_POLARITY) { - if (GBT_LockState.action_requested == 1) { // LOCK - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 1); - } else { // UNLOCK - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 1); - } - } else { - if (GBT_LockState.action_requested == 1) { // LOCK - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 1); - } else { // UNLOCK - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 1); - } - } - GBT_LockState.motor_state = 1; // motor_on - GBT_LockState.last_action_time = current_tick; - break; - - case 1: // motor_on - мотор включен, ждем LOCK_DELAY - if (current_tick - GBT_LockState.last_action_time >= LOCK_DELAY) { - // Выключаем оба пина - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 0); - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 0); - GBT_LockState.motor_state = 2; // waiting_off - GBT_LockState.last_action_time = current_tick; - } - break; - - case 2: // waiting_off - ждем немного перед проверкой состояния - // Небольшая задержка перед проверкой состояния (например, 50мс) - if (current_tick - GBT_LockState.last_action_time >= 50) { - // Проверяем, достигнуто ли требуемое состояние - lock_is_open = GBT_LockGetState() == 0; - bool action_success = (lock_is_open == (GBT_LockState.action_requested == 0)); - - if (action_success) { - // Действие выполнено успешно - GBT_LockState.action_requested = 255; // сбрасываем флаг - GBT_LockState.motor_state = 0; // idle - GBT_LockState.retry_count = 0; - } else { - // Действие не выполнено, повторяем попытку - GBT_LockState.retry_count++; - if (GBT_LockState.retry_count >= MAX_RETRIES) { - // Превышено количество попыток - GBT_LockState.error = 1; - GBT_LockState.error_tick = current_tick; // сохраняем время установки ошибки - GBT_LockState.action_requested = 0; // пытаемся разблокировать - GBT_LockState.motor_state = 0; - GBT_LockState.retry_count = 0; - log_printf(LOG_ERR, "Lock error\n"); - } else { - // Повторяем попытку - GBT_LockState.motor_state = 0; // возвращаемся к началу - } - } - } - break; - } - } else { - // Состояние соответствует требуемому, сбрасываем флаги - if (GBT_LockState.motor_state != 0) { - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 0); - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 0); - GBT_LockState.motor_state = 0; - } - GBT_LockState.action_requested = 255; - GBT_LockState.retry_count = 0; - } -} - -void GBT_LockResetError(){ - GBT_LockState.error = 0; - GBT_LockState.error_tick = 0; - log_printf(LOG_INFO, "Lock error reset\n"); -} - -void GBT_ResetErrorTimeout(){ - static const uint32_t ERROR_TIMEOUT_MS = 300000; // 5 минут - - if (GBT_LockState.error && GBT_LockState.error_tick != 0) { - - if ((HAL_GetTick()-GBT_LockState.error_tick) >= ERROR_TIMEOUT_MS) { - // Прошло 5 минут, сбрасываем ошибку - GBT_LockResetError(); - } - } -} diff --git a/Core/Src/main.c b/Core/Src/main.c index ba38126..a671418 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -1,295 +1,301 @@ -/* USER CODE BEGIN Header */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "adc.h" -#include "can.h" -#include "crc.h" -#include "rtc.h" -#include "tim.h" -#include "usart.h" -#include "gpio.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "can.h" -#include "board.h" -#include -#include "debug.h" -#include "charger_gbt.h" -#include "soft_rtc.h" -#include "j1939.h" -#include "lock.h" -#include "connector.h" -#include "serial_control.h" -#include "charger_config.h" - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ - -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/** - * @brief Vector base address configuration. It should no longer be at the start of - * flash memory but moved forward because the first part of flash is - * reserved for the bootloader. Note that this is already done by the - * bootloader before starting this program. Unfortunately, function - * SystemInit() overwrites this change again. - * @return none. - */ -static void VectorBase_Config(void) -{ - /* The constant array with vectors of the vector table is declared externally in the - * c-startup code. - */ - extern const unsigned long g_pfnVectors[]; - - /* Remap the vector table to where the vector table is located for this program. */ - SCB->VTOR = (unsigned long)&g_pfnVectors[0]; -} - -uint8_t ED_TraceWarning(uint8_t flag, uint8_t id){ - static uint8_t memory[32]; - if(id > 31) return 0; - uint8_t result = 0; - if(memory[id] != flag){ - result = 1; - } - memory[id] = flag; - return result; -} - - -void ED_Delay(uint32_t Delay) -{ - uint32_t tickstart = HAL_GetTick(); - uint32_t wait = Delay; - - /* Add a freq to guarantee minimum wait */ - if (wait < HAL_MAX_DELAY) - { - wait += (uint32_t)(uwTickFreq); - } - - while ((HAL_GetTick() - tickstart) < wait){ - CONN_CC_ReadStateFiltered(); - GBT_ManageLockMotor(); - CONN_Task(); - GBT_ChargerTask(); - LED_Task(); - SC_Task(); - // if(huart2.gState != HAL_UART_STATE_BUSY_TX) debug_buffer_send(); // TEST - } -} - -void StopButtonControl(){ - - //Charging do nothing - if(!IN_ReadInput(IN_ESTOP)){ - CONN.connControl = CMD_STOP; - } - -} - -uint8_t temp0, temp1; - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - - /* USER CODE BEGIN 1 */ - VectorBase_Config(); - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - HAL_RCC_DeInit(); - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_ADC1_Init(); - MX_CAN1_Init(); - MX_CAN2_Init(); - MX_RTC_Init(); - MX_TIM4_Init(); - MX_USART2_UART_Init(); - MX_CRC_Init(); - MX_UART5_Init(); - MX_USART1_UART_Init(); - MX_USART3_UART_Init(); - /* USER CODE BEGIN 2 */ - Init_Peripheral(); - LED_Init(); - - HAL_Delay(300); - GBT_Init(); - SC_Init(); - log_printf(LOG_INFO, "GBT Charger v%d.%d\n", GBT_CH_VER_MAJOR, GBT_CH_VER_MINOR); - ReadVersion(); - log_printf(LOG_INFO, "Serial number: %d\n", infoPacket.serialNumber); - log_printf(LOG_INFO, "Board revision: %d\n", infoPacket.boardVersion); - log_printf(LOG_INFO, "FW version: %d.%d.%d\n", infoPacket.fw_version_major, infoPacket.fw_version_minor, infoPacket.fw_version_patch); - GBT_SetConfig(); - GBT_CAN_ReInit(); - PSU_Init(); - CONN_Init(); - - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - - - PSU_ReadWrite(); - PSU_Task(); - ED_Delay(10); - METER_CalculateEnergy(); - CONN_Loop(); - LED_Write(); - ED_Delay(10); - StopButtonControl(); - ED_Delay(50); - - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON; - RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8; - RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC; - PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - { - Error_Handler(); - } - - /** Configure the Systick interrupt time - */ - __HAL_RCC_PLLI2S_ENABLE(); -} - -/* USER CODE BEGIN 4 */ - -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - __disable_irq(); - while (1) - { - } - /* USER CODE END Error_Handler_Debug */ -} -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ +/* USER CODE BEGIN Header */ +/* USER CODE END Header */ +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "adc.h" +#include "can.h" +#include "crc.h" +#include "rtc.h" +#include "tim.h" +#include "usart.h" +#include "gpio.h" + +/* Private includes ----------------------------------------------------------*/ +/* USER CODE BEGIN Includes */ +#include "can.h" +#include "board.h" +#include +#include "debug.h" +#include "soft_rtc.h" +#include "connector.h" +#include "serial_control.h" +#include "charger_config.h" +#include "serial.h" +/* USER CODE END Includes */ + +/* Private typedef -----------------------------------------------------------*/ +/* USER CODE BEGIN PTD */ + +/* USER CODE END PTD */ + +/* Private define ------------------------------------------------------------*/ +/* USER CODE BEGIN PD */ + +/* USER CODE END PD */ + +/* Private macro -------------------------------------------------------------*/ +/* USER CODE BEGIN PM */ + +/* USER CODE END PM */ + +/* Private variables ---------------------------------------------------------*/ + +/* USER CODE BEGIN PV */ + +/* USER CODE END PV */ + +/* Private function prototypes -----------------------------------------------*/ +void SystemClock_Config(void); +/* USER CODE BEGIN PFP */ + +/* USER CODE END PFP */ + +/* Private user code ---------------------------------------------------------*/ +/* USER CODE BEGIN 0 */ + +/** + * @brief Vector base address configuration. It should no longer be at the start of + * flash memory but moved forward because the first part of flash is + * reserved for the bootloader. Note that this is already done by the + * bootloader before starting this program. Unfortunately, function + * SystemInit() overwrites this change again. + * @return none. + */ +static void VectorBase_Config(void) +{ + /* The constant array with vectors of the vector table is declared externally in the + * c-startup code. + */ + extern const unsigned long g_pfnVectors[]; + + /* Remap the vector table to where the vector table is located for this program. */ + SCB->VTOR = (unsigned long)&g_pfnVectors[0]; +} + +uint8_t ED_TraceWarning(uint8_t flag, uint8_t id){ + static uint8_t memory[32]; + if(id > 31) return 0; + uint8_t result = 0; + if(memory[id] != flag){ + result = 1; + } + memory[id] = flag; + return result; +} + + +void ED_Delay(uint32_t Delay) +{ + uint32_t tickstart = HAL_GetTick(); + uint32_t wait = Delay; + + if (wait < HAL_MAX_DELAY) + { + wait += (uint32_t)(uwTickFreq); + } + + while ((HAL_GetTick() - tickstart) < wait){ + CCS_SerialLoop(); +// CP_Loop(); + CONN_Task(); + LED_Task(); + SC_Task(); + } +} + +void StopButtonControl(){ + + //Charging do nothing + if(!IN_ReadInput(IN_ESTOP)){ + CONN.connControl = CMD_STOP; + } + +} + +uint8_t temp0, temp1; + +static void CAN1_MinimalReInit(void) +{ + HAL_CAN_Stop(&hcan1); + MX_CAN1_Init(); + if (HAL_CAN_Start(&hcan1) != HAL_OK) { + Error_Handler(); + } + if (HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK) { + Error_Handler(); + } +} + +/* USER CODE END 0 */ + +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + + /* USER CODE BEGIN 1 */ + VectorBase_Config(); + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + + /* USER CODE BEGIN Init */ + HAL_RCC_DeInit(); + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + MX_ADC1_Init(); + MX_CAN1_Init(); + MX_CAN2_Init(); + MX_RTC_Init(); + MX_TIM4_Init(); + MX_USART2_UART_Init(); + MX_CRC_Init(); + MX_UART5_Init(); + MX_USART1_UART_Init(); + MX_USART3_UART_Init(); + MX_TIM3_Init(); + /* USER CODE BEGIN 2 */ + Init_Peripheral(); + LED_Init(); + + HAL_Delay(300); + CCS_Init(); + SC_Init(); + log_printf(LOG_INFO, "CCS module start\n"); + ReadVersion(); + log_printf(LOG_INFO, "Serial number: %d\n", infoPacket.serialNumber); + log_printf(LOG_INFO, "Board revision: %d\n", infoPacket.boardVersion); + log_printf(LOG_INFO, "FW version: %d.%d.%d\n", infoPacket.fw_version_major, infoPacket.fw_version_minor, infoPacket.fw_version_patch); + CAN1_MinimalReInit(); + PSU_Init(); + CONN_Init(); + + /* USER CODE END 2 */ + + /* Infinite loop */ + /* USER CODE BEGIN WHILE */ + while (1) + { + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + + + PSU_ReadWrite(); + PSU_Task(); + ED_Delay(10); + METER_CalculateEnergy(); + CONN_Loop(); + LED_Write(); + ED_Delay(10); + StopButtonControl(); + ED_Delay(50); + + } + /* USER CODE END 3 */ +} + +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5; + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2; + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON; + RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8; + RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5; + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + { + Error_Handler(); + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + { + Error_Handler(); + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC; + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + { + Error_Handler(); + } + + /** Configure the Systick interrupt time + */ + __HAL_RCC_PLLI2S_ENABLE(); +} + +/* USER CODE BEGIN 4 */ + +/* USER CODE END 4 */ + +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + /* USER CODE BEGIN Error_Handler_Debug */ + /* User can add his own implementation to report the HAL error return state */ + __disable_irq(); + while (1) + { + } + /* USER CODE END Error_Handler_Debug */ +} +#ifdef USE_FULL_ASSERT +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t *file, uint32_t line) +{ + /* USER CODE BEGIN 6 */ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + /* USER CODE END 6 */ +} +#endif /* USE_FULL_ASSERT */ diff --git a/Core/Src/psu_control.c b/Core/Src/psu_control.c index ff8657c..432542a 100755 --- a/Core/Src/psu_control.c +++ b/Core/Src/psu_control.c @@ -6,7 +6,6 @@ #include "stdio.h" #include "charger_config.h" #include "charger_control.h" -#include "charger_gbt.h" #include "board.h" #include "debug.h" diff --git a/Core/Src/serial.c b/Core/Src/serial.c new file mode 100644 index 0000000..768d76a --- /dev/null +++ b/Core/Src/serial.c @@ -0,0 +1,427 @@ +#include "serial.h" +#include "cp.h" +#include "connector.h" +#include "board.h" +#include "debug.h" +#include +#include +#include "charger_config.h" +#include "psu_control.h" + +extern UART_HandleTypeDef huart3; + +static void send_state(void); +static void CCS_SendResetReason(void); + +CCS_MaxLoad_t CCS_MaxLoad; + +uint32_t CCS_Power = 0; +uint32_t CCS_EnergyWs = 0; +uint32_t CCS_Energy = 0; + +uint32_t last_cmd_sent = 0; +uint32_t last_stop_sent = 0; +CONN_Control_t last_cmd = CMD_NONE; +uint8_t ev_enable_output = 0; + +#define CMD_INTERVAL 10 +#define MAX_TX_BUFFER_SIZE 256 +#define MAX_RX_BUFFER_SIZE 256 + +static uint8_t rx_buffer[MAX_RX_BUFFER_SIZE]; +static uint8_t tx_buffer[MAX_TX_BUFFER_SIZE]; +static uint8_t rx_armed = 0; + +uint8_t ESTOP = 0; +uint8_t REPLUG = 0; + +static uint8_t enabled = 0; +static uint8_t pwm_duty_percent = 100; +uint8_t isolation_enable = 0; +static uint32_t last_host_seen = 0; +static CP_State_t cp_state_buffer = EV_STATE_ACQUIRING; + +CCS_State_t CCS_State; +CCS_EvInfo_t CCS_EvInfo; +CONN_State_t CCS_EvseState; +CCS_ConnectorState_t CCS_ConnectorState = CCS_UNPLUGGED; + +static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len); + +void CCS_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size) { + if (huart != &huart3) { + return; + } + rx_armed = 0; + if (size > 0 && size <= sizeof(rx_buffer)) { + process_received_packet(rx_buffer, size); + } +} + +void CCS_SerialLoop(void) { + static uint32_t replug_tick = 0; + static uint32_t replug_watchdog_tick = 0; + static uint32_t replug_watchdog1_tick = 0; + static uint32_t last_state_sent = 0; + + if (!rx_armed && HAL_UART_GetState(&huart3) == HAL_UART_STATE_READY) { + if (HAL_UARTEx_ReceiveToIdle_IT(&huart3, rx_buffer, sizeof(rx_buffer)) == HAL_OK) { + rx_armed = 1; + } + } + + /* Read CP once per loop and use buffered value below. */ + cp_state_buffer = CP_GetState(); + + if (CONN.connControl != CMD_NONE) { + last_cmd = CONN.connControl; + } + + if((HAL_GetTick() - last_cmd_sent) > CMD_INTERVAL){ + if ((HAL_GetTick() - last_state_sent) >= 200) { + send_state(); + last_state_sent = HAL_GetTick(); + } + + if (ESTOP) { + log_printf(LOG_ERR, "ESTOP triggered\n"); + CCS_SendEmergencyStop(); + ESTOP = 0; + } + + if (((CONN.connControl == CMD_STOP) || + (CONN.chargingError != CONN_NO_ERROR)) && + ((HAL_GetTick() - last_stop_sent) > 1000)) { + last_stop_sent = HAL_GetTick(); + log_printf(LOG_WARN, "Stopping charging...\n"); + CCS_SendEmergencyStop(); + } + + if (((CCS_EvseState == FinishedEV) || (CCS_EvseState == FinishedEVSE)) && + ((HAL_GetTick() - last_stop_sent) > 1000)) { + last_stop_sent = HAL_GetTick(); + log_printf(LOG_WARN, "FinishedEV, stopping...\n"); + CCS_SendEmergencyStop(); + } + } + + (void)replug_watchdog_tick; + (void)replug_watchdog1_tick; + + switch(CCS_ConnectorState){ + case CCS_DISABLED: + RELAY_Write(RELAY_CP, 0); + CONN_SetState(Disabled); + if (CONN.chargingError == CONN_NO_ERROR){ + CCS_ConnectorState = CCS_UNPLUGGED; + } + break; + case CCS_UNPLUGGED: + RELAY_Write(RELAY_CP, 1); + CONN_SetState(Unplugged); + if ((cp_state_buffer == EV_STATE_B_CONN_PREP) || (cp_state_buffer == EV_STATE_C_CONN_ACTIVE)){ + CCS_ConnectorState = CCS_AUTH_REQUIRED; + } + if (CONN.chargingError != CONN_NO_ERROR){ + log_printf(LOG_ERR, "Charging error %d, state -> disabled\n", CONN.chargingError); + CCS_ConnectorState = CCS_DISABLED; + } + + break; + case CCS_AUTH_REQUIRED: + RELAY_Write(RELAY_CP, 1); + CONN_SetState(AuthRequired); + if(CONN.connControl == CMD_START){ + log_printf(LOG_INFO, "Charging permitted, start charging\n"); + CCS_ConnectorState = CCS_CONNECTED; + } + if (cp_state_buffer == EV_STATE_A_IDLE){ + log_printf(LOG_INFO, "Car unplugged\n"); + CCS_ConnectorState = CCS_UNPLUGGED; + } + break; + case CCS_CONNECTED: + RELAY_Write(RELAY_CP, 1); + if(CCS_EvseState < Preparing) { + CONN_SetState(Preparing); + } else { + CONN_SetState(CCS_EvseState); + } + if (cp_state_buffer == EV_STATE_A_IDLE){ + log_printf(LOG_INFO, "Car unplugged\n"); + CCS_ConnectorState = CCS_UNPLUGGED; + } + if(REPLUG > 0){ + log_printf(LOG_INFO, "Replugging...\n"); + CCS_ConnectorState = CCS_REPLUGGING; + } + break; + case CCS_REPLUGGING: + RELAY_Write(RELAY_CP, 0); + CONN_SetState(Replugging); + if((HAL_GetTick() - replug_tick) > 1000){ + replug_tick = HAL_GetTick(); + if(REPLUG > 0){ + if (REPLUG != 0xFF) REPLUG--; + } else { + log_printf(LOG_INFO, "Replugging finished, but car unplugged\n"); + CCS_ConnectorState = CCS_UNPLUGGED; + } + } + + if(REPLUG == 0){ + if(cp_state_buffer == EV_STATE_B_CONN_PREP){ + log_printf(LOG_INFO, "Replugging finished, car plugged, state -> auth required\n"); + CCS_ConnectorState = CCS_AUTH_REQUIRED; + } + } + break; + } + + if (last_host_seen > 0 && (HAL_GetTick() - last_host_seen) > 500) { + CONN.EnableOutput = 0; + CCS_EvseState = Unknown; + CP_SetDuty(100); + log_printf(LOG_ERR, "Everest timeout\n"); + } else { + if (last_cmd == CMD_STOP) { + CONN.EnableOutput = 0; + } else { + CONN.EnableOutput = ev_enable_output ? 1 : 0; + if((CONN.EnableOutput == 0) && (CONN.connState == Preparing)){ + CONN.EnableOutput = 0; + } + } + } + + if ((cp_state_buffer == EV_STATE_B_CONN_PREP) || + (cp_state_buffer == EV_STATE_C_CONN_ACTIVE) || + (cp_state_buffer == EV_STATE_D_CONN_ACT_VENT)) { + CONN.EvConnected = 1; + } else { + CONN.EvConnected = 0; + } +} + +void CCS_Init(void){ + CP_Init(); + CP_SetDuty(100); + CCS_MaxLoad.maxVoltage = PSU_MAX_VOLTAGE; // 1000V + CCS_MaxLoad.minVoltage = PSU_MIN_VOLTAGE; //150V + CCS_MaxLoad.maxCurrent = PSU_MAX_CURRENT*10; //100A + CCS_MaxLoad.minCurrent = PSU_MIN_CURRENT*10; //1A + CCS_MaxLoad.maxPower = PSU_MAX_POWER; //30000W + CCS_SendResetReason(); + log_printf(LOG_INFO, "CCS init\n"); +} + +static uint16_t crc16_ibm(const uint8_t* data, uint16_t length) { + uint16_t crc = 0xFFFFu; + for (uint16_t i = 0; i < length; i++) { + crc ^= data[i]; + for (uint8_t j = 0; j < 8; j++) { + if (crc & 1u) { + crc = (crc >> 1) ^ 0xA001u; + } else { + crc >>= 1; + } + } + } + return crc; +} + +static uint16_t CCS_BuildPacket(uint8_t cmd, const void* payload, uint16_t payload_len, uint8_t* out, uint16_t out_max) { + uint16_t total_len = (uint16_t)(1u + payload_len + 2u); + if (total_len > out_max) return 0; + + out[0] = cmd; + if (payload_len && payload != NULL) { + memcpy(&out[1], payload, payload_len); + } + + uint16_t crc = crc16_ibm(out, (uint16_t)(1u + payload_len)); + out[1u + payload_len] = (uint8_t)(crc & 0xFFu); + out[1u + payload_len + 1u] = (uint8_t)((crc >> 8) & 0xFFu); + + return total_len; +} + +static void CCS_SendPacket(uint8_t cmd, const void* payload, uint16_t payload_len) { + uint16_t len = CCS_BuildPacket(cmd, payload, payload_len, tx_buffer, sizeof(tx_buffer)); + if (len > 0) { + HAL_UART_Transmit(&huart3, tx_buffer, len, 1000); + } + last_cmd_sent = HAL_GetTick(); +} + +static void CCS_SendResetReason(void) { + CCS_SendPacket(CMD_M2E_RESET, NULL, 0); +} + +void CCS_SendEmergencyStop(void) { + CCS_SendPacket(CMD_M2E_ESTOP, NULL, 0); +} + +void CCS_SendStart(void) { + CCS_SendPacket(CMD_M2E_START, NULL, 0); +} + +static void CCS_CalculateEnergy(void) { + static uint32_t lastTick = 0; + uint32_t currentTick = HAL_GetTick(); + uint32_t elapsedTimeMs = currentTick - lastTick; + lastTick = currentTick; + + CCS_Power = CONN.MeasuredVoltage * CONN.MeasuredCurrent / 10; + CCS_EnergyWs += (CCS_Power * elapsedTimeMs) / 1000; + + if(CCS_EvseState == Unplugged) { + CCS_EnergyWs = 0; + } + CCS_Energy = CCS_EnergyWs / 3600; +} + +static void send_state(void) { + CCS_CalculateEnergy(); + + CCS_State.DutyCycle = CP_GetDuty(); + CCS_State.OutputEnabled = PSU0.CONT_enabled; + CCS_State.MeasuredVoltage = (uint16_t)CONN.MeasuredVoltage; + CCS_State.MeasuredCurrent = (uint16_t)CONN.MeasuredCurrent; + CCS_State.Power = CCS_Power; + CCS_State.Energy = CCS_Energy; + + if(CCS_ConnectorState == CCS_CONNECTED){ + CCS_State.CpState = cp_state_buffer; + } else { + CCS_State.CpState = EV_STATE_A_IDLE; + } + + CCS_State.MaxVoltage = CCS_MaxLoad.maxVoltage; + CCS_State.MinVoltage = CCS_MaxLoad.minVoltage; + CCS_State.MaxCurrent = CCS_MaxLoad.maxCurrent; + CCS_State.MinCurrent = CCS_MaxLoad.minCurrent; + CCS_State.MaxPower = CCS_MaxLoad.maxPower; + CCS_State.IsolationValid = isolation_enable; + CCS_State.IsolationResistance = 900000; + + CCS_SendPacket(CMD_M2E_STATE, &CCS_State, sizeof(CCS_State)); +} + +static uint16_t expected_payload_len(uint8_t cmd) { + switch (cmd) { + case CMD_E2M_PWM_DUTY: return sizeof(e2m_pwm_duty_t); + case CMD_E2M_ENABLE_OUTPUT: return sizeof(e2m_enable_output_t); + case CMD_E2M_RESET: return sizeof(e2m_reset_t); + case CMD_E2M_ENABLE: return sizeof(e2m_enable_t); + case CMD_E2M_REPLUG: return sizeof(e2m_replug_t); + case CMD_E2M_SET_OUTPUT_VOLTAGE: return sizeof(e2m_set_output_t); + case CMD_E2M_ISOLATION_CONTROL: return sizeof(e2m_isolation_control_t); + case CMD_E2M_EV_INFO: return sizeof(CCS_EvInfo_t); + case CMD_E2M_EVSE_STATE: return sizeof(CONN_State_t); + case CMD_E2M_KEEP_ALIVE: return 0; + default: return 0xFFFFu; + } +} + +static void apply_command(uint8_t cmd, const uint8_t* payload, uint16_t payload_len) { + (void)payload_len; + last_host_seen = HAL_GetTick(); + switch (cmd) { + case CMD_E2M_PWM_DUTY: { + const e2m_pwm_duty_t* p = (const e2m_pwm_duty_t*)payload; + uint8_t duty = p->pwm_duty_percent; + if (duty > 100) duty = 100; + pwm_duty_percent = duty; + CP_SetDuty(duty); + break; + } + case CMD_E2M_ENABLE_OUTPUT: { + const e2m_enable_output_t* p = (const e2m_enable_output_t*)payload; + ev_enable_output = (p->enable_output != 0); + break; + } + case CMD_E2M_RESET: { + const e2m_reset_t* p = (const e2m_reset_t*)payload; + if (p->reset) { + log_printf(LOG_WARN, "Everest reset command\n"); + CCS_SendResetReason(); + HAL_Delay(10); + NVIC_SystemReset(); + } + break; + } + case CMD_E2M_ENABLE: { + const e2m_enable_t* p = (const e2m_enable_t*)payload; + enabled = (p->enable != 0); + (void)enabled; + break; + } + case CMD_E2M_SET_OUTPUT_VOLTAGE: { + const e2m_set_output_t* p = (const e2m_set_output_t*)payload; + CONN.RequestedVoltage = p->voltage_V; + CONN.WantedCurrent = p->current_0p1A; + break; + } + case CMD_E2M_ISOLATION_CONTROL: { + const e2m_isolation_control_t* p = (const e2m_isolation_control_t*)payload; + isolation_enable = p->command; + break; + } + case CMD_E2M_EV_INFO: { + memcpy(&CCS_EvInfo, payload, sizeof(CCS_EvInfo_t)); + CONN.SOC = (uint8_t)(CCS_EvInfo.soc / 10); + break; + } + case CMD_E2M_EVSE_STATE: { + CCS_EvseState = (CONN_State_t)payload[0]; + break; + } + case CMD_E2M_REPLUG: { + (void)payload; + CP_SetDuty(pwm_duty_percent); + break; + } + case CMD_E2M_KEEP_ALIVE: { + last_host_seen = HAL_GetTick(); + break; + } + default: + break; + } +} + +static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len) { + if (packet_len < 3) return 0; + + uint8_t cmd = packet[0]; + uint16_t payload_len = (uint16_t)(packet_len - 3); + + uint16_t received_crc = (uint16_t)packet[packet_len - 2u] | + (uint16_t)packet[packet_len - 1u] << 8; + + uint16_t calculated_crc = crc16_ibm(packet, (uint16_t)(1 + payload_len)); + if (received_crc != calculated_crc) { + log_printf(LOG_ERR, "Packet CRC error\n"); + return 0; + } + + uint16_t expected_len = expected_payload_len(cmd); + if (expected_len == 0xFFFF) { + log_printf(LOG_WARN, "Unknown cmd 0x%02x\n", cmd); + return 0; + } + if (expected_len != payload_len) { + log_printf(LOG_ERR, "Packet len mismatch cmd=0x%02x\n", cmd); + return 0; + } + + if (payload_len > 0) { + apply_command(cmd, &packet[1], payload_len); + } else { + apply_command(cmd, NULL, 0); + } + + return 1; +} + diff --git a/Core/Src/serial_control.c b/Core/Src/serial_control.c index 550bed2..be0728d 100644 --- a/Core/Src/serial_control.c +++ b/Core/Src/serial_control.c @@ -1,6 +1,7 @@ #include "serial_control.h" #include "usart.h" #include "board.h" +#include "serial.h" // Приватные функции static uint32_t calculate_crc32(const uint8_t* data, uint16_t length); @@ -111,6 +112,8 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command); } HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + } else if (huart->Instance == huart3.Instance) { + CCS_RxEventCallback(huart, Size); } } diff --git a/Core/Src/serial_handler.c b/Core/Src/serial_handler.c index bc307eb..4864af6 100644 --- a/Core/Src/serial_handler.c +++ b/Core/Src/serial_handler.c @@ -1,15 +1,13 @@ #include "serial_control.h" -#include "charger_gbt.h" #include "usart.h" #include "charger_control.h" -#include "charger_gbt.h" #include "board.h" #include "psu_control.h" #include "debug.h" +#include #ifdef USE_WEB_INTERFACE -extern uint8_t GBT_BAT_STAT_recv; extern volatile SC_Source_t g_sc_command_source; IsolationStatusPacket_t ISO = { @@ -52,10 +50,7 @@ void SC_CommandHandler(ReceivedCommand_t* cmd) { case CMD_SET_CONFIG: if (cmd->argument_length == sizeof(ConfigBlock_t)) { memcpy(&config, cmd->argument, sizeof(ConfigBlock_t)); - GBT_SetConfig(); config_initialized = 1; - GBT_SetConfig(); -// CONN.connState = CONN_Available; // log_printf(LOG_INFO, "Set Config: %s %d\n", config.location, config.chargerNumber); response_code = RESP_SUCCESS; break; @@ -147,38 +142,40 @@ void monitoring_data_callback() { statusPacket.relayAC = RELAY_Read(RELAY_AC); statusPacket.relayDC = RELAY_Read(RELAY_DC); statusPacket.relayAUX = RELAY_Read(RELAY_AUX0); - statusPacket.lockState = GBT_LockGetState(); + statusPacket.lockState = 0; statusPacket.stopButton = !IN_ReadInput(IN_ESTOP); statusPacket.logAvailable = (debug_buffer_available()>0)?1:0; - statusPacket.evInfoAvailable = GBT_BAT_STAT_recv; + statusPacket.evInfoAvailable = 0; statusPacket.psuOnline = PSU0.online; - statusPacket.tempConnector0 = GBT_ReadTemp(0); // температура коннектора - statusPacket.tempConnector1 = GBT_ReadTemp(1); + statusPacket.tempConnector0 = CONN_ReadTemp(0); // температура коннектора + statusPacket.tempConnector1 = CONN_ReadTemp(1); statusPacket.tempAmbient = PSU0.tempAmbient; // температура окружающего воздуха - statusPacket.tempBatteryMax = GBT_BatteryStatus.batteryHighestTemp; // максимальная температура батареи - statusPacket.tempBatteryMin = GBT_BatteryStatus.batteryLowestTemp; // минимальная температура батареи + statusPacket.tempBatteryMax = 0; + statusPacket.tempBatteryMin = 0; - statusPacket.highestVoltageOfBatteryCell = GBT_ChargingStatus.highestVoltageOfBatteryCell; - statusPacket.batteryStatus = GBT_BatteryStatus.batteryStatus; + statusPacket.highestVoltageOfBatteryCell = 0; + statusPacket.batteryStatus = 0; statusPacket.phaseVoltageAB = PSU_06.VAB; statusPacket.phaseVoltageBC = PSU_06.VBC; statusPacket.phaseVoltageCA = PSU_06.VCA; - memcpy(statusPacket.VIN, GBT_EVInfo.EVIN, sizeof(GBT_EVInfo.EVIN)); + // GBT TODO + memset(statusPacket.VIN, 0, sizeof(statusPacket.VIN)); - statusPacket.batteryType = GBT_EVInfo.batteryType; - statusPacket.batteryCapacity = GBT_EVInfo.batteryCapacity; - statusPacket.batteryVoltage = GBT_EVInfo.batteryVoltage; - memcpy(statusPacket.batteryVendor, GBT_EVInfo.batteryVendor, sizeof(statusPacket.batteryVendor)); - statusPacket.batterySN = GBT_EVInfo.batterySN; - statusPacket.batteryManuD = GBT_EVInfo.batteryManuD; - statusPacket.batteryManuM = GBT_EVInfo.batteryManuM; - statusPacket.batteryManuY = GBT_EVInfo.batteryManuY; - statusPacket.batteryCycleCount = GBT_EVInfo.batteryCycleCount; - statusPacket.ownAuto = GBT_EVInfo.ownAuto; - memcpy(statusPacket.EV_SW_VER, GBT_EVInfo.EV_SW_VER, sizeof(statusPacket.EV_SW_VER)); + // GBT TODO + statusPacket.batteryType = 0; + statusPacket.batteryCapacity = 0; + statusPacket.batteryVoltage = 0; + memset(statusPacket.batteryVendor, 0, sizeof(statusPacket.batteryVendor)); + statusPacket.batterySN = 0; + statusPacket.batteryManuD = 0; + statusPacket.batteryManuM = 0; + statusPacket.batteryManuY = 0; + statusPacket.batteryCycleCount = 0; + statusPacket.ownAuto = 0; + memset(statusPacket.EV_SW_VER, 0, sizeof(statusPacket.EV_SW_VER)); statusPacket.testMode = 0; statusPacket.testVoltage = 0; diff --git a/Core/Src/sma_filter.c b/Core/Src/sma_filter.c new file mode 100644 index 0000000..1e8a52c --- /dev/null +++ b/Core/Src/sma_filter.c @@ -0,0 +1,40 @@ +#include "sma_filter.h" + +void SMAFilter_Init(SMAFilter_t* f) +{ + if (f == 0) return; + + f->sum = 0; + f->idx = 0; + f->count = 0; + + for (uint16_t i = 0; i < SMA_FILTER_WINDOW; i++) { + f->buffer[i] = 0; + } +} + +int32_t SMAFilter_Update(SMAFilter_t* f, int32_t x) +{ + if (f == 0) return x; + + // Пока окно не заполнено полностью, делим по фактическому count. + if (f->count < SMA_FILTER_WINDOW) { + f->buffer[f->idx] = x; + f->sum += x; + f->idx++; + if (f->idx >= SMA_FILTER_WINDOW) f->idx = 0; + f->count++; + return (int32_t)(f->sum / (int32_t)f->count); + } + + // Окно заполнено: "вычитаем старое + добавляем новое". + int32_t old = f->buffer[f->idx]; + f->buffer[f->idx] = x; + f->sum += (x - old); + + f->idx++; + if (f->idx >= SMA_FILTER_WINDOW) f->idx = 0; + + return (int32_t)(f->sum / (int32_t)SMA_FILTER_WINDOW); +} + diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index c5ef477..bc6ae08 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -57,6 +57,7 @@ /* External variables --------------------------------------------------------*/ extern CAN_HandleTypeDef hcan1; extern CAN_HandleTypeDef hcan2; +extern TIM_HandleTypeDef htim3; extern UART_HandleTypeDef huart5; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; @@ -217,6 +218,20 @@ void CAN1_RX0_IRQHandler(void) /* USER CODE END CAN1_RX0_IRQn 1 */ } +/** + * @brief This function handles TIM3 global interrupt. + */ +void TIM3_IRQHandler(void) +{ + /* USER CODE BEGIN TIM3_IRQn 0 */ + + /* USER CODE END TIM3_IRQn 0 */ + HAL_TIM_IRQHandler(&htim3); + /* USER CODE BEGIN TIM3_IRQn 1 */ + + /* USER CODE END TIM3_IRQn 1 */ +} + /** * @brief This function handles USART1 global interrupt. */ diff --git a/Core/Src/tim.c b/Core/Src/tim.c index 3cd40ba..d17a4b7 100644 --- a/Core/Src/tim.c +++ b/Core/Src/tim.c @@ -24,8 +24,73 @@ /* USER CODE END 0 */ +TIM_HandleTypeDef htim3; TIM_HandleTypeDef htim4; +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + htim3.Init.Prescaler = 0; + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + htim3.Init.Period = 65535; + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim3) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_OC_Init(&htim3) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_TIMING; + sConfigOC.Pulse = 1; + if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + HAL_TIM_MspPostInit(&htim3); + +} /* TIM4 init function */ void MX_TIM4_Init(void) { @@ -92,7 +157,22 @@ void MX_TIM4_Init(void) void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { - if(tim_baseHandle->Instance==TIM4) + if(tim_baseHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + + /* TIM3 interrupt Init */ + HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM3_IRQn); + /* USER CODE BEGIN TIM3_MspInit 1 */ + + /* USER CODE END TIM3_MspInit 1 */ + } + else if(tim_baseHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ @@ -108,7 +188,25 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) { GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(timHandle->Instance==TIM4) + if(timHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspPostInit 0 */ + + /* USER CODE END TIM3_MspPostInit 0 */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = CP_PWM_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(CP_PWM_GPIO_Port, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM3_MspPostInit 1 */ + + /* USER CODE END TIM3_MspPostInit 1 */ + } + else if(timHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspPostInit 0 */ @@ -137,7 +235,21 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) { - if(tim_baseHandle->Instance==TIM4) + if(tim_baseHandle->Instance==TIM3) + { + /* USER CODE BEGIN TIM3_MspDeInit 0 */ + + /* USER CODE END TIM3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM3_CLK_DISABLE(); + + /* TIM3 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM3_IRQn); + /* USER CODE BEGIN TIM3_MspDeInit 1 */ + + /* USER CODE END TIM3_MspDeInit 1 */ + } + else if(tim_baseHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspDeInit 0 */ diff --git a/Debug/.DS_Store b/Debug/.DS_Store index 2a920ffe0a9faf1be2df9f22cf95dc0ea76109d1..0e9f0ff072e8d81d5422f20071a6931734590f64 100644 GIT binary patch delta 42 ycmZp1XmOa}&nUDpU^hRb&}JTiP?pWDqD@R28&nuKvrBwq*{mq`jB#UwA|n7K-3^!k delta 441 zcmZp1XmOa}&nUJrU^hRb*k&GqP?k&)26u)eh7bl{hJ1z;hEj$chE#@NhHwUB1_L0O z3Y61h$Nh;slZ?5Lt4R*a|qr&;~mY*$z|=DL6N9 ztb&yUibH4%38f&@Ed{#WUIPwLK%}BvcH7c!rMR@Q9a_=L2IQrE?KoK0Yg_-{nfH}1 zNxJQ~yZ`U`p3l!Sn)}R|nKS2{IdkSU$MNR(f6M8X{5z*x0e3CjI=JiMxC{PnMp}cK z{(1QO;VwJ7XK%U{#D4KHdo96!hTd5fhb_oQ9m%mijfJ+ITfEV@lEid7=Z z*PW#FO5{_X=rY84E4NsV6dL)JE$a_RT!j$jLWd;IS@v>GtU^;0bEZ8WOUu!P9*qe( z^FlYpIQ`8rLEj$RzO_Ae`&Lf+gTE$r(@nqbzxn1@L!Wo(Ke(dO9}|QFF;P4iF?J_T=tm(PJe$t$KBP>^DmzF&ogzuc%GZ5@2=8qi?HwqP9Lh z^_axvXhOV;GryQPa84I8mp?a?FNbS5V6pLtIJONiOs#n?J6k zWj!!($iH1PuuOwC(%|?_XD^+fi~cr*><%h(9m+Vcihtm1VoTwKmU*Fksoi-@YOgsU zd2Vc3zf5X(=t3>)DMb^aewDsFdkO9mjHVcE06Kw60Sfe<8J&y+gVzb~D_C2jLbxsV z*w(c}r+-)@iNdzn8GT_$T$b{M{xbqrSL71ns5wDvB97Z**;p~GeC5gi;6g3vBdOmw z6x~@I%e!e#s5oZ0`SF-O=c{m>^t<>KmDo?(lGw%@EwPQYfMi7>o3{$ApA##&GW?7z z{5!$JL(_Pv@@+hR9lf4;)i zuhlwY|5{QJyZOeN*t=$X?6yrcv46kvrGYVhN9c|7(YxoK{&5Qbvs3urauU6`T-e?A zn7{!#{-yq{nzur~?$@VP#56ayoFv!)K{mgJJNG?*!NAoyzYB3@%y2~uFqG4n*Q@|8 zn^L%(#$l%__?$LKZK9;31f_HPyIX*{pE~-r{B1F3Hg;63yM@|dSdMxc)Jr2wPt{{} zh(1g&Z>By5Z-@!m=;s`durnrzv?~ZI_=9Hj%b~xi^=P-`L{P$I$Ij>ZydnQQU5H;Z z9Il9I`LD9MZCNiOe>3Oo7e#}Tf9-JC8Pkd_>uDYJSkJ-`t)@P_DORDS)pKei5t=vZ z8}r1qoTMCWDA!fwqTC|vLw$}A!D?S^h)~_M2=>a=#jHf;MBR!h`wX+rVy%43$^ROs zz8!zQKTU)FvuXbkJ?5kiP;#-nM)KdhE@m(|WBE({Y& zo^VtSjA=B$BH>iMt|qojc*S^oznG?kYli%}HACDLuk;Jq`})P~($Fi$eJ*=UfE zNZ1Vi`W7_P(a7`=?kj>gx6VuMBiM=g4W1IKX#NNXGD=vOBLhF*JbVf=h!N@7xMb4XQ&SQ<#4N_4Rtf zGCk2&fpKrn+_FA*fXktjEup8dj*mL72%VmNckGWXc8TX&)~DKHShprULTyruzad!H zbcb(^YqDC_bD;;o4;o#M0PZFi2Uz%*lfyqsatk+vsD1wA^>N)N$>E`-KE#_j^R026 z%!QP+SaSJAY0>247p49CCDPuRR(CqAnG>)I3|1k+_SAaJk}@tK|2&sJ^HkpZcMrAh zInm#^IlreS_7jT}l8!UBsTMT7#sb=02rhzop#8WWYgd*QL5^J)x*NZ#bj*FMLg*TZ zI_HN@oac(q42*A`(Sv=wu_pGWurao&r3>`Z-hYS#tz!M>N&cFWh+$ym?l(dxhn6ac zI>t6{eruqRc!NGSp$8RX{i6m!Ruk*Ch>!(n-vF|6SPStN;M0w@>4a6~bAbWlcKeVW zkW!m=79+U1kRNfvkptMT4sISKmkRMHR=qt|y0blI*|`IIC%^GjzoF?Tp;Ltw_6_z5 z`>UaPN0GGy91q;I#y-SxW~tpy^Feb1F3Fcj?G=TgDhIW+HvH@WFI0e|<@W2jx53@O z)do1srtp51!_#l)UO3O?7`k5=@V9Hb?Vu4$c>y)X7vFg5MK(KcZBk~3WS5rpRh%6X z8NYgAi0XZE>V<@V^!o!keOJF;;2rLw>-@ zFXL@5pT)X}G)CG7mYpSGf>aZxlDd%2)w2H47@t!NF4VFf5NO4>`V*6o75M_!kgzp%81k+ z1tmHLcX!wbxt-VBg+dx%$=ontZNkpTb;fSYdq(D$>M>7{lXI>MRdE%u?p^hqJ;rm5 z1MR}t;yI^JOj}dTH0B&NHtIrEv?Cx@+-PoJ{Z{DIKvJ~F-rCf%o-mB&gI|5?nf!sG zoHHR{kG*C6TLYX>!DJ&EA&qofY$<1l++7>nC=&OlQP7&A{6-;U=W>TYb5@UpX{Q`R zI(7rntGGN$w~c^L>-n#o)vKc|4AFQq!(}K{7+Q+o(-DlEQ+g-3XOj$CqjNomFkDRm z@JOG-M;t;JV#U4ZKX~ZHd7D4O` zXX0rMi;JU?vBhgY-E{nj!;Za^qD8bSv?A@xF1;Gpoc(_~w_lx@TOH=8edxa9G)wJ6 zEys1Pd(Ki=gBe>pv=Q;U&Q8wz&m#ys+K09t$0|76ht?e52D$rh^Eo?aZ0i2b1E1R* zs|DAi-MA&x)h}`#p`XrP8M-_6VGAf1qrF5Agvhp-{fe{*QH4JtTye#RQ+S!q)!<5= z%>fVl*#r;E`Cs5+r!K+6etH29vxAR}*W`59NdF|B=+AGQ0j|U`u9OSRyO1O04>T}5 zOp74*0w(B3+1ESWI)c6t0Yu9(nBtprW7uSo80kq>XebXj#AH zV`;ta>tA+hTpcdXS{-@VG27MH)0H^*=?yRbE2HPyxH%!7`;pxl)9GHa*TiPu@TxpM zFfZ}YXttc!!OQwViynE-fFq+vF60N2WqzsOA8^2*|=8%QqmOTYC$z0N-PYrm~hSP5EU=SrUI*Nbyr?q#+sEb?j=P*ic_`_LlF(*Cd zr?GHX+NE##A2#wOqMk(Hnr38#pIQ2A2{n9VEOeRN6Z~xZWpA49_N9?5u?eIM3l?iPEJypFf zkHoVR{J1%xJ(nRDewXIW8Oz2gkRR8{dZ}1n8OyAE#vvs5!OWgDMY@6HYQOYP{%0_M zo&J9r5OixQ=Nq5wdPyEZeM6;)Ikd+#mCs`a*A$6twjcCAj~P7Z7i?=Pu@d&@`}G=} z1RvSH&guHlwY|F`eCvxp#_VkG&(LTR+D}Up{JFW#U(oDs=Sprk`=UHJ%Ihm)*%kgS ztboJjdQl!8Sm|2hde!w~mwCan{W<~Ev*Px%yleK^T$lAMFoVA`!H@pPo}JKQZ2SOf za^Wv@vSuVxkC}12V1H~~O)S^x@4Bw%^+Jqr4S(vfb@NU?+n*s| z6-F{-O*~sJTKsUABbMoKtXp*I^}>vS->N^7hzq;~`v;VrT^VF;Tg1ECk zUC*!l(DnG)Z}(?pR98|9m?u58(sx#L-FG(Zy8W!qmG}=})atUc-$$OUvgmA;D{wZ| z<2x=Y{SN31lapS4;05luZ4Osz^wfC*ofi zT*T@;Ic~nx*f3**M*8!Jh`qyyc}Ym`9G0#VWsmGFv;-SOi`+o{6uB}tq)Dfe;m%Pj13ht8kr&~9j=AYdhw@8Pd;B-&HeFyF} zxSzrGz@3E~h70aDx@v~}yGk}_rDY>mN0m6YYYyUzN3K-k{)QsNOGg%@@*8F%ZXB7L z%D*uW@%)ilEUqibK`d(|Csn#akGMFJuI6SSHX5f>2_UU{egDsI;zBxQWFfAQ#s)`Y zE8y*qU@iPF9b)5?F*32bduyRfPo>`={9yU&_$gm&wW%YAZ2dJ(_a(Te;JyX-BHT&1 zpTP+wvjN4kanUtDswpWz_-TaaM*SuE2tR>vA;P%`KZ_&SHi93G%7g~LD-t+IKp#i=`Xt<&aF4$H5W`u$+t;9X+Zy&a zw|bMqzrZdicCBh|ZB7n{6CzH9W><2!T^3yo|6IkG&qtwmZmV3D=eLpm`GuFih<4(h z*F0?=nVNTkPSad*TI_+0h)#V-Dsq$4xV}x_N)| ztAM#B3H-nqHzZ&6a8g73RX`uZI80rIE;GaA)S8r+*8=uu;MywvY))H2L1fS&8}_^p zdtQ${uLXQJVe|waC;b3Bon|1lwhI3L^<3^Do5$w$d3L|Th4gMyYhM><)rNgu)QU7B zjkD;YTB3X{lW9C~GPPSCr@iztcbp3)hu_BtIBOz|T7*N~rTWkkWu4L%dL^jXzDu<= z+g%8HJj<;E)g?+C@EGvh>&avE*ob)pb;+-5m_cpbqX%?#_hjNXa8Cw)d+$l7^m_^F zx_dR41%rwyoU|CT;6M2hUgxlnm@?x-EZ_ z7{xb>LEsoxzmc=};DU|ROOfk(Q25`D3P=}_4sM{PuSfcOqwC%EUR#sxPRr1nPV${n zw2ApFzP8$SXRU`Tj2(#*1((v0TH4D9akhYf#rSNwR>Jv^G-F2--?4^K18=j5uY`3w6$rUZL+$JAU zn0$9Sa5Foa@2+R@Y$+0I#oNGA1jug+cH&Xp9pIE<07N*mT7#pvQn(l%sB z|1?JUMSX6CdqBsTpTXT8^*@8^p%(%4t0*onM|i~Z;+fdbrdGkKjfkwAz|zy= zN?Y}83<~d;cU7QdVt>FPM%Gr#`)gbFMc2SLwAj=ZZB^-LGnBXnaUMOaWbq#*%2^L$ zWCe>KPh5q#i2P+N{_O-Xqg8|WRV@CE#N~*mA$|pme=T7_T#NW37XM0O9^&bUFJSS9 z5+=lTh+9~^Juw^c48+YWes98ncqZa=Sp4op4&qse8(I8wi7dqRh|gy6ZHaWmXCPj{ z;-5`u*l1IHm*#}#`6bNnPvN3)ak$*AyzUCPjc_~R9)Wuv?hUwK!%1+uTWL*5-fU$u zB5}^k#xgdDQeZ5zBprUsIC0-S$+$;^f9*JAH`k=hsMICt68jp?=OIr18!t5aJ-}394G$k5HChtLR5a91; z6pjm-b4i|hQ01fYeyT-1XR)3)vz}#72E!a3+Ddo>O~64f=yMYnDwv@E^B(NKaXaQ& zX^%TDU{wlT%I>0cg`dnvO`k`>5FuQGGAluq9G?!C9&_*?aF(Troj9M^rtL%OVD4_D zp5ZMEkXkYL(6VC=?FR^bx&t`zv~#CiSU94@;A}k_AGRBlyMm?f&3SKF)n9tkURRp<^gDYe|KT`e8dFA`0_f(+vhUGx6WkBlFF)6v=EXd}XXdRVXqV_@bm&)Ftj#T!`9eyj{EMZ+=wv-e=`MxF0k{hRl&s&6PxMl7Rz4IpIOthUBo2Bq~HZ z^W;Z;u5@L|HtY}%T)k!} ze&ekOCq^jDRn#Lqgm7U=9YTLa$X~Jrq1ebuNXR&`HvpR(NH(IeD6&#T9C8xUl{_WA z3UyY*HEO!RPSjN1iS$MB%E5!;g*Db7r#KFHYA@B#a^%iHF6X>d?v;>M$CHKV?P3TQ zB2P;CRY(YW1wuNX{E5|>4*49UpJwGRZfh3uex9ruvO~9!&$I%mdB{P|$z%>mRE@qJ zBoivWAo?0Js(m|ZJrf#(5R;X1At%w9R6SdhyhO5-A2O5Z)>H>jJ|!PE8yYimkejU!^Bz5p%p2am)37qF;pMsIfSs~7FQQ@ni^q2Unz!Spf z69dV$*osm81QC_-YBssiW=B3;?FKrzcrQgH_SJ2yS1SfL*^)#JV6pqV< z_JWQR{T0pQ!(;3`BSZw8B#bQz?M=yeS(vBvcyjpLBgD&p%u3QZYa}j!N8)5Saq^Pl zRFlpe#2bX;$>Ci|@cDR}^s_i8?Lr$jkB<+(Jf0jr04QG`;idYxApLn%keZM-0zYe9 zkjmj6gmaH3hegyog4KJXMU;FP(NhUt`e3XCvJ1+O@zRMg$V(kWede;Xzm7qZg!wSB z*hgct-JL9Vrn?V*kqgq&;m$7Z7|!3U#Baxv!(U2r(tQcQl;EU?WKOzlG!w16kosjn z{0LHW$0_C7WODd($z=$w#M$bjvo}HB$%Q=Nh5rS(N16QdG-z!4z)Eo?r0+skhO{}J zJ}`d@1u-_*=9tyI%6OWEq!)j=Z9Deec3>}@yq!|yCczTCorUllHQ4UJj=iI1=*_0! z9d?U+2lY|tN|XL`f@dy`=iuyvS~wTUji`w;4y33i>R$jXC_8atGsSUw_Mpt3AbvTg z42>R@h>WE;aAsU2TmVkDD5r){3+HeUt~34^8aun>;}@KSl~>YvVb_)JddR7oh!wRC z#pjzv@Dz@P1nF_eaF@9|Aq{mKgPziA*?Y`W>h6wh1<*2b}!qg+tI2;4DFS-hF*z?z<ccBlH#^9_(+=;k@dea)5cEr~* zn63kK*SZ7VH41Fb)z!y5s}Ns_QBcjR5nqA$avBe6E<=1NaBZoIQ}Tf&?mq98ELNWp zJaBone7M$sS#|L6F~5A+V0|RSTR2M}D2Uk|*gcPMe)k-=asM25U{^6<=dBBRaLVnN z2WiA$p6xy{qA3e>nGl<4CfR3ZnIij~h#L?hY@Vr{LUQR8Vsz!X-;Rss40oU{+ikpu zB;XYN{VDM1`*8mPXNTJeM>wi~M$iiIa2q=-DQ6}+ zJK4ZdZH=TML%Bv9w1ZmEZ9&xxL05{i%tCcf=Q6pFJ8nRUnPcO_{h-6YOy(l?^HI{- ziqgHw`Jh(%4La$Qu`ITy1nK*r5<2XOboctfvdwi3q$R-EpqVAPns@-UJGmbwb?fN^ zI#I`{pH6yrj5LZfBQxA4>m%5nw$21xHydw87nV2=blzG~%9KVb>_!7c8Gb^$3kH?<4h_Q7+8px@WAy_8nY z*AVPToh5D1@0hatx@>#k>-)NVyH~$$M-{?r!*$OFreoN3IHeF@rvx>FO1Y zqyqCJfZ66zp~jtq51RLf;tR`y_+3=y+fVeMx9e;1#bu4>(!_`0`@WP}+Ia4;!S`UM z<)QdhWx*XJi^&ZdNHjXE_S|Rz)@mc8-q~T&ilz_b@~geHg1fQu55=!6`x+c)%?^{^ z{I~MgMy@LB>*8&FUDO`MIO~}+G`nTfaD&baHW$_x_eVCD25Tpw{@0VVA}`4{msU-A zoTYpZDH&?Y5tj0-yc)a2guStf?ZG}B?UxluOYIk1TA=GP7Plalhqmp5%Qhc#=z8V>6CKhrp>8kvX+mJHNiAV? z6(W?Q?$N?&do&+=G|LPP74WbS5|vU;k8@j|8Rs_Gt0aeiK29UH$#g~`$WNR<-!Al| z5xux)k~h#k{pBxy@e5jK+OJPCK2b0#xL(3pzS~GxXYT2u{j&Q7{07*san}!7$`A0{ zyX$+DuKaqwLn)qrq1=XVv+zGtuIHO<&xqk~fa+n_M7~LR7_)KTHxR1Zhcf$~M#y+i zC)2a(!#wUq#)l8X0_&HM0-gZhd6Zyp$&CuqJF?(9%HX@|oehupop53;_~!+u4>7rCFoAVj`EJ@58`W@cEq!J7{#H)vew{TDf1Mi<^1 zz}*V>J-AQcK6?U^^h>x`f^UPrlj^r{B_xloNHnuvIBCTJ;#8cKlgbWkXFb{_>jA>y zMWYKoOb)LGc9S;4K3IBSD@Iheo9=^5qs9-nu< zUdmc{DE>wiI%PmAhUcpzp#1O2!6>at309@pMKh*H=xN7nK>I;LaFwdqMy>yo-^ki6 zV0}>SN8}>b`j+@tu=?+!Chl=OhokKF7g!Y7OJ{WAY;&yIp5$-`AgvhefF5aoj}G;B z%KJbkh;I>|6W=19Mf{5JKMeoZaQ^~%_*J;m2rH{lJ+hR|LVARFMRHggB{_bbyeXO- z{){>s)jbOtoC_JuO1U$v+){Zypr*6R%IG|{Mq(rb^)Hi`q5jnqD`M>_Wa}||Vm%7v zS*&I>IR_<6l%DP`>LEt`qKQ$GQYpNAWROM98q&48N;HwW%AxFv8a;I4&R z2X{T(&2VP4HypnvIuHK2czM(W|F7|@qQ&t0b1m2?1lU<0z=Pd{FkX zQ|rTT!&;8?xz1 z)aaa2L(vsa?IVD5FWuz&aYJ{&k3XhYV>(B)v)w`x!t5#ioHEYDE(p$Gu_#@deYo&-dyjEUh(bx!$$vP$v3Vt9)zGc|Wqc`GSXzCm^_b&^o-1izw=5wl?_VFax~{u=j)9v z3s81Jb^iWij@3ODw}7&xtZaGIjMmLKDHOTD-_iQKs$#Sr8aJYbv3fIVSbAo=Mbx0X zr#gQzbdLpSJ$+eT$I;dzf1m|go{pUAqbQl%qbI)5Lb7a~KO>sKVi)dl(hMdcCj%Q! zN|@_2a5U#pxPCY~|7E(fptsI&CAH@8tJNdCQhyy)wut}{bIUuYuH2@9wuFQCQb~fPkN{|8s!`wI#=@*()spz#i3}U zrV4N5obP#*R1W8J(m`qPAS9)yC*8J>Y3g&>tsCy9u|G4zKFGqbVLt8aAdM&on;wz^ z6-?>K!+y_#%TUJr&x{x6MZSeQ5eLq%X58M=xSy^1CQ^)`tfW)^I$P=S;inNdx}L_J z;M1(07!J6Nt#B>8^f1oOPcf{^wARA5{2<~_u=u}$=WtRlG(D~8;W6OhW309={HQ|z zM>%O{;t{rPUqlXWcy^5V;nzpjvAWtw4Rl)LxMy**y>J~;IqO}KYL?nKx{mdKhg$c6 zG1}3BRXk17gKtC=rJK$|SfT72DPuLYku|L5y3uP`%~dRQLzr$p$02tub!)JX>``UB zTgPS~^|R3FeH~UTXn{$)ZS6*^z~kehi*Csmu@*AJbO)NW&In%ypSSgPS%4AR=zP|0 z_Na;VHkXxk(CH8>d|ia}d*hJ13fTNy4GdiYR}Qxn?kYIKQ--g=)f(_8;#~_7Hp6uw zZwcIgf>+N+oV$(JJ%D&2{7opk9R5}~Kiri_e-!>B@SlPIQ#dXJm~pEx3mCQpxQ0_wLJM@|`vU z8U+d~V8qm39;=xiru$s15;R=Oy)xN)1nvcwMybHPq|c>$vgLr4#!F+;Y~yt_?nQ7k z4@9fRhYyYrY~RG~3!QL{{w((sME~4$atiprq>j@s_%Yz4AXLnquyXC`E_22w6bk|7d{MS4_IyLWsoN*v{SS*(hCLXpu zLibXfWl_}UP56v0!NZ(2BOJt9k!=rO{`%q9aKDo-{br2%ARRE>OLt;#2M6!~GrmdbyU`WK*QSmj|hg8tV#;<)?u@8OQ=-K)^vakPgK zp>J(CaTqhaM_WZ!hmj-?y^8440Q*yP{EAEkPYEw+Z8)5lH$wvbCHOP-q@>g$Fxu+DuJE=2^K72tYTVpHU#gr&jjke9VxN>!j;b1{0=E%XMJDfRrfbb-r|>`q z@Czf)0bGP(Jn)Y3MGx!+yn5xNo|(m26yklB6px8&uu(3+uhrd;8FugHX?xsmtVZ5h_Zsyy`Co8SX*KY@D}?q_hngp0tv57z_t0UU2JM0rad zTn^j}xU8tgk^w(GdW9tozKEM4K1zFQ>iwwRd*~@Lg`Y3R4gU_iPi3_d! z38&iw_a(UFaL%^?5B#%m=iyc%UIS-iw@9YehvJt*H*|T~cB{~{9onVK%be8|H?+`i zp=)gTi^+SUHm?nKOw*~?YOHQEa>y2navH-|GhRt|P)BiR!b{(jlf&PUZCbg;v?7U1Jfv&~S=j52>=6ZxLN7!UuLwzuIk zi#Ooy^X9ypyFB;m?dygj<*rf}Ny|sQ>2DW8;wzlcIQ4ery8|r-v}kNKptWpfDMVu{ zOzLoJ=EQ8$9-TbnU4fH;bdu=m4OoAorSn1mu0ovfgK%LB9Mko{PuV6i8LLBpwvn^c zfg+h&<$b;m(H1=D>kw>2Yd|Brd>y=Pzc&kEQ8M2`%ugw-IWn_s~OVlCcCb5>79fU77_k2 zv&MZKbNT!XrQBlN?l_>MG+Q$x3lY{WBa2NFNPRS8m0j};@e z0`*F8Z(_tPlYSXEF8KD1(2LAs@owXGYgSJ_O3xeTN^?tQLQ7f;%PFq(?YO>l#zbFv z;f#s4vchyu{$wOss;$zX=JR7B${&hDn+>XMhn!5XKd$G@FJPR{XG6w-ZQbK+EJVK* z+Y+DG=q24uz%eW0>%g4@V1|^(tn4+B0;~e+Nr`wd+BUW%OAD)Jqp!QhE(0zZy@jl1 z0joKyY8GnlVl~skxlCrFlm63yFsEt;YSoTqvRY*C6mV!zOW}RPu+&e{bOtwICfHxf znS`Cz;CaMJo=Tk`2m-Qc3OIBTnl-vrcy)x1JJSWhD>ruK2lelIAnBzcUHEwkye4T7KI_h9LkRdk0iXt zO8Lkw#UqD`P$H``zZE5pB-oApV&p?cIrRDw-{FAcqi*?#GMirp=eNN=Ay-taBhXHB zTl1yb8E5Tik&kvj4@K+8AIL{i7S9})IvWxV0lY1~*8Lqbt4UgUazeV83wz2GcBe;j zu*yFkrL~xWwHS=^2xTGkNnAc`bZM(d3t$@MrC);=i{Pu+3F_?=tv9Vbty5~QvRrK* z-vQrY4WnLbu|{+*B-v^e!WtXRUV>3DXlgJQO4x+=Gom0L5z0ptil#9-Di`~_bvWr7TY+7eYr2u>?Lt}$(ILeaeA0f)038!> z-blqp3=;cDuh2CKO7w!o;CJG?C^S=U}wYjuFhNO zR&+&qhmW?A)}w+^h3nW&`?b~AL82cUzHKZY<7bY1wr&=$Y)ibtQ!BH1OVl%qPigj%G3Rbp^m0iMq7f16MZG-L^ zT9uLs93Ba0g5G@@mKBSWG?EN!4jW04I+A?sQL=aiURZO&1bG^3Phh{Wa`TamFzIhS zu3q{_1g5z8|BRf)D8u^HwsxQ+LJ!QH#3&0W_H z*U}2x=vK_qy+qfcVXxb}523)`J@{4bZ8YZ5;l<$UL;-ucK3`pXU&A?0tlcLfeeOj1 z=U93L(mAB(Poy`n^n*y>hL8pJW=hRGlt|sG_H=Dwr8I`xePhFaV!9gTB-+z;BgUeQ2|;Yn{999v-n@vsi^Ya8Cs^S9M)$-M#l*N29!V z4SwtHwb3~5#VGGxi4fT;tb~jn=vsk!Dly|$1mR@}Tg=N~NfGF}3gOGldBB#dpiw$8 zZe_JrninyDm6_UDZN7}fY%I3MOt+Gkq4d+^bpLlKUcu5G?AOVDE6qhLXFYE4sf5c+ zn!-czb!K{RaVWllm8vq63~(r3ZKgYFdXu$hob-f;; zR?gsrSA=(jXItQYkMMaok>nng5Bk7w3L$@CemwLW@Y8RvAH3;+4pN)XD=gzmobl3J z89a_8ymafi9>VOD?Qp84Ra768&*uFMc4J>hy7ltY&@@A)pf*-{sSV=THt;m~DBa0) zxjrxT*@^N(PYQxQHK!LjbiO>*aZDaOw;1iF+N+J1mdUJ*3)^4imA&s7|9&4PK+E-} zm-ppP;nkqeWX(yh{0gd_!2Dwk^vaL0j%+$}fKk~<_t$pgHC7+e{k1+okqJv0(vMnT zvqwI?9FaY+WcSwMl%1L>X0xZ-=aD{?c){QI75%?b_7Y(_ol8dc9)W0vuz{Dd*y)iA zDRys^rjc%ej754GGp#)pwoLW=E7c}F zWy3+RygM}w<0W3Gj)J}NYxS)1Xr)}7E@lA(Ng_+Vxl2iT^!kfrjhNK{vhC2+lR!>3oOgHTPaR#+Dke-7y(0T5B=;m|XMlVTvt08fupVCT? zL?)CpDAwzA1fR;S{SrvO=ak z4I7Dxx3;|=V?$j-pkbwZ6=1==2;N<-z;D2_+)d}UUe7Ybj16U!)^HW%wr?=|4L&?J z>>h=7sWu3U-G#8gC41QGa7&B*j=XC}=cDWbMe;#>#i$wa@I>7uqqq}d@1qE+B3B`5 zzdMmTchm#RKS;cAOzws~qNcRSMb@y@>@-1rWT6e^wJ(jQ$d!)V->bJ8W5c7eh?B;z zaJR8iwG|;e$9&n9w_pGG++5>ciMhENI?3g`>o6}gJImbLVe_z*&COM8Zmz`m@+L-b zQl2_DmjkjFCg46UTTu2%#`S0%-+3vz~yTx6{0(-lq}GOYP~Jp;@3C*$h`mXW0v#CGDdOx4yKl zfnKi#Fgr+Zpcm?Is&;Q6mEKqP9sqh1)=F9%VX-^ntP|RE%)rt61N4k;j2u$M81aZ|H7# zj4%x$xl!KnWvum=fHU;|;RsvzTrt=f+|hyXLr5olcu>U$T5Z~?Hdr$In(!tQmdItG zNB09Cc)T-Etdl{B)b#z}U+0sA|0{s`_2cxrcl->)x;=nub>wced>29GJl3$2dO^qr z4Pi6FUKNw?V7=q@1@wyGFnccSy%D{<1&i{Ob@XKa^~iad^?w<9HjUHo^6{rx|2Lz5 zSEL3raRd72%DWpjvRUESNxlkwZcs<>V*Q(;4e&LaF~;d*x1*0kN&7`(Uyby8lhdcL#8HW|tvS%G~H_is}(c$-!_=*AXYMkTjcz5u0 z6V7$;iD!?WC7lYrXEotH8{w?MBLXhVSPssdI@tEVnIP$ddWUHH5?*38pf>3%OHoHAY#$F$XSBg5g%9LX<=hHWR{ zqIVW8a3n*(;sd8-virdIP9SllWC|)1CK(WA1mvcqHkPK^48UFr@8x|=@};*QX<>Tp z3Y!?T1x}7v=~3Ka2XQ+@Z#{-j)7@a|JWTDUbkyMc`@j_&QZj&#og;Y5k1?iBgz>ur zcW5|=gN8QJFWK|Adgb9+s!8otaCqt*g$2Hqw> zDntu)UYt;xjZV-PUp;4VzV3xq2qWplJ4AoGi1Sb<-htzbc66f_{MaoA??nSV{YI|QgE0M~j6w<~kvgg?Fhsp8mdARdb^ifzZ=%eVR1CR5b zV0jXCl{Xf&8uUF1d5?@4vP%#7mHD^tvET#+dazrWf0MTYbRsQMfjuk^wOGjNS}Ezz zPnDn?e-me2K&ydK+iOvOGv&@vV8wR`Qf03~YZ{a@d94V|z?+X$ZMs{SUYp`*xmLN4 z#e7Oywn740or+)7+TFkyI;om~58{x=a^k$_Dg&*E7q2}4f8GTAI+hv$UYWd(p=X4E zN00VQSYIW@pC9mutOvqfdQYY9goU6r^NCMidT!~B?Bv{jVPbA+H_*5UvoW*kI;Zx= zWc#V_hpYk}U>4f&Z4Jp`12mrm8I21#Zp~uzG>N&&9^)#t_984PENnpaM%zg(?<6Da2>v$C@_q(*9-80qdQBh5J_V^3rML4(nW zJ%8aCaZ84qf0CxDR1fqbgj@Lxw@`kF+nvJX&IvrD9YJ)4#z-rj+B+%iO=Ib)l_$QT ze)T0pG=6^7(fM%P(fL*Ra2%r0Z74Q;)O+8~3s1Ck5~rO_RCwy{CV5A}KpQBS)>_P< zzvWIFsHkEapJtm^D&V_iea<4g&0FZ5nu9Mev-JbLYohzpdaqt>p=e4AmcQA8#WvZ3 zvB|{NvS-I+4;6p2X2q16y^S`EIm23v^)Y#S0HG1EgYs9-wWUvi{mE%LlRfu(idfG@ z&673%R=vqucv*+ua$ze&ex7w1!@W769G9^Wtu=?8v4F)=l!628Q0f^Yq&+Yw_7VEj zJA@!^pn_iBM*1kuIuc1yZiVN7a)UN2du!UOP0$#^i$lLNIj7JXtT?SUqXVELyw%Qj zgbE9&O2C5`D)>Iuv-BQLe_`La1CZmMdC}x>KP>iTaC*U7$mSShW9{Xsbmd~MlY){g z4W>eH8h0lX)RE!xg)mPoedUz7D`oH|hrb1wOn~W|6EGD_gJ}lpVAoxe6HbTaOn3?` zT#A+|@(S_eNgnt$j3Gs*VP{YGWBW*JRmDPzG;+YN?Bwavh+U<2Uj}UlwL4eO$?T4i zw-LRd6{hi~Rz!ytNe(ZUS2oZH%P>M4sBNZoa)dfy6wx)%jA{HnMbRA-vrQ$>Olw`k zT2E73=P%K^=I^v_m}s3!QtJfAq$HABb&@Wo(yJ6sBA;1ke}Z<7#m%@iC+!)@dc~tO z4@QNbVx^6khZpd+J|FY&ecYrI_GRK09k(__QI|o=YxH^3AS;^9yyaa6S3Sc@&iZGD zrC{DJ zDrvr`B&9%-y`W?%FnfCM4weEq@imO;aOy57St?Nq;Jm1$=Ax360=|V6>GLvKnn~34 z%?^BH9W8k4=F*BmN`<5WT_aY5c8J+Lbx$ca`^0;wEY7HG)#bhN7s!fM{(=B0^2e}L zrPFJ7oLk2DUGv*{{*J++2hD=GEp}ddF zs;u)+d%U%DqCEu?Y7H{Xf7x2!C0pwRbddD`on{Jjno{7Fnx^!ip&lm67ECEypq8aH zrECF}-N9SaS-UhJN_uf>PDz?%^T%1}+bgu6{H3&?=p31Pk$}_OcGBCV?8lYe%3Fyd z3v8Wz7;_5ymHm1;uI$%e!@~c+-mm%S*MzwzE~4x)!k|fbu>LAMiX43*9D=o+QMS~6 zRQi8X?f>z=+rJ`dO!R*dy_m%1i5bej0HT);PuvsOK*?!-I^xY> zD_K}>;fNu%>pC1h`rH|RCO0z#>yDW`Vnl$#fkY3*3Lp;A*$=gmAX z@L>1UviL4fIZpgqpH~at1WOB0Tngbub(>eSEWb6^#p=a4U=%?mp8wZ9L^VXUo-k35 zpQv}KTJNCNRESh~7^bGit5|RlwsQG0!wzj!R~gt(wOv47)fcgJ{P9ZN~O~1)+Tl5H~A*14c}cfalw)*$c>Wc@0 zSjTM4w+U-Vs|>4d#HNm87~?Que=E7LuA7$o5ps=KM-$c^_IzlAoj))x!Vo=M$;sUM z8E>D<6nwy-tPAS(=`51R0W1cb)7vAxN$<2&!Uz$!`t%Oa=hZ>mJ-sz0KZp8hnA#ep zn=;9wCU9}OK7jPPR652YoJykw%;deL*@yO4gVWZrmV6gb>uLYOENg)CTi6F7RnLn$N)iDA)Q?wOKhrb3h}|hkY0yX&RwjqVerf z<}hLLxGXL!%6ke#i@jU zqQul5loI`{1m}cqmbF16-W_JO_R!Z)WQ>Y%1hip?6Coe&M3nVZ@)T^LJVDK)l~wYn zEv23&RS$Vi)+TA4u2VxEt2OMgUU_I1W-Dx! zqtuTMZQ%@$5N-z=3s?wuB8@pLgl}Cn!ZsDTeuUB}1dQ}GlAR09dVuY)QmI7->Yk+xuf@W3)vk*O4~B|M)Ln3DY(O!upJVmbll&-5(eLqdEE;e z0?}X(5}y!)(5O45P!o1Xc@UN`xCNMM2@|5XfONN@L0wZOwUfGGfLzJ)Qs0RF+DJOS z1d-K;Z$(S<1Z@??>oa&W{!hhV1+26t=a>7C+EnV%yBMWrW}gilM9=Ew^QXG9Di6W( zJTpqEx+-clN7UGq9QtxX%FY9DpgjeaNl8xjvN7W>@9lwfQDa>gqAy;^&6;v8?3b{g zY;<4XYrq}MvS2f5#d;xm(P<-KCrcJsry#8d_>yHeIH$-X>Rk`yO4|wi2N%AZUSwoe zQ@qxbQ$lw-$>B$nWaky|Xz&)@2;EKURtNVgQH)(}gY*tdU@fEE_$aq5qKm%#Oxisk zw7-sIYeO4u9O!$^kK&HzYa=;j^v&et@HW&_wEjwKB3_ozJW}3@DQzk@Q`FP5&~T*S zNI~EO-=lZdbSqWApU&{4t>o}krdDraxB-@x_&&j|N%&J3mAY9d!MR^xyGv6_@0m$= zL8o{#+5_igI)G9so1H%=<0RwzyvChAZ{MAK3H~F?Aa*G`bC#G>ZA{gPrOph~driZh zrd~;t_M3m8KlJa~?hZJ%Fdb7Pw0kv-veUPPH?Yt)gcQBnZ3wMoX1TS%ivMi0*mwS?DH&@HQ6Xr*iCWs@4<*w=6HD-#s&@T2&>^>jY?R=)KX_03l3Q+(SV z?t5^bz@7VVxNoA)%W(VAz9D=Cs9Yc3EG=Tbrrg#zpM`V?&0`@wLPmr-v15e@Y#@1DqPnfg1*6;3!E|7oP=dQ)&zK@fz2Joh10$rotyv;spOAh;v6IVD_4cs($9oN**Um=l^R9(Y`p@g&)9v52@cD=c30q^)Lx!x%Zh4P*wD|f-z#DAt zb1tkh*pDb97~)tt3%(at%F4Zma%RM+++37t%W^qxDO@RB30yv0UT(^+l-V!PHz0H2$fiNV+q2LHwVr|2 zvoLqCjcl|L1>I2!tmdrkLtp+OS`N|cGCzF@9(7XGnBINhoaXg)7;y6@goz^Zm^r%L zoqEDmZj~lqiO`O0>i{JNuHa3PhC);LDo1=@q?Z7Y2-IFfW-i;IaF4O!cayCi`X>7} zh6@Id4lfIW;8H$zzrgp1mhVTmAYVCkNMXEK_gbX5Sc~$0*i?)SKaUnRfm7CbGEw*I zYF*`vF;xGND88kG`g+Kde~Gx<>tXY^9<9*(yGqrLk+G6SoTeW z<&NkI1`C~5qzGA1)&YVh)Wesz@trrz5a==+!!2sP?Ra-1TB`BoD2#zg;!=d(oLW%U zkFo?qtH+F#dDLr@QhW8Z+E%zazE__+-7s)<>=8)0Ufh4NX^I}zKV*7hR&IkmRZ zx&fA%509^GAWZurUenufr=qOV(LdaZ(h9s%xB&V0sO5G~D|i1NYA4G@h&n2BLnoc4 z@Wu&j%L-Rb%uF#bPnj9g_&BLPJ4cfQQV%UMj~%!94}^WdZUK-s_i?ML49+aiYRpPK zw7ur=)odSO{Z*(gSE0g-PvBVjAC^qCDuwYPW=cz!vzBH?7XTBCz`0Dd1?{vJ^8YYr zvIV9UQ%;<#0V8S7i}00w+R0Z=q5=LvnifHlO zOVf^f(E~3U8kb-dNawDP>_O^o>^w?sLHKTjH3%285@{&01F6lZN2#Af_zty=tSG)A zwxda{+kmh~t*f*>6PS4|;3GP=N`-HdjyXTP2{n}2{R_j+%hj@$i^?wfuxhd_-scjB zUxzuWM1M42SWld2@&C*4WgP`8X*Xs^)=c25F0#tq$20?!L-M`&A=MJBH-PRD_7W%0 z2wz2|BncQ>f2Z;#;lD<&P*?o7qY9RE;|p|?yX^N-dV?ye)NCH=Th#i+z|!{`O_Va! z(ug^^vyi3G7qtk3j;rl`Z(4gliqacXwY_jDC|}=>Ot$;G@ojwt_l}|_;og@gY7*`R zh|d!4wQzPX@XtNb4#Pb*Lmhs$Z^1ouRxe=&X5jjWLv8mC6{1G9U1cBK6~)&|2qMNM zFf%)74s#;q?%o}Ud6%+Lm9deN*0j&Ngr$%rlVxZx?iOxAxy~I~PTIF_&jNM)SE;>O zr}cIXedi<9TllJ|NrkOYEluD5o7|&j{4b1&(h;&1quU``Ujt^Yp4s<_L;ht1HU6&# z^qH{#0YsgM5se~gDrGB1bLXLbtKJKd)>7dX;VAY1U`iLsHYm3Ty8zTEUAVo<2Kg(? z(=;WQT78w^KzX7Z${9n^DW-*Q0Zd!4d!tQsBA_y)p-KzaB7HN`J+-yq{+Kt0L!I91 z*^DVAiC59drXCV*dW3ks$av9AjJ6#;)_Vn{S1?#;tum0lCrUI}frMt|POK%hE)s@& zuV$@}4eyZSOxn0ZwK|yGrM1x|C=Y3amG9&Nj{XSa{i(S)#kfD_qEwv=;{B(<3(#}${>A5X4QLJN&d@# z#V5U&C%NaR%=R>8pGo$ow3ct;T_VW}-<<^M~D)Pq`c}H~ZgM@nH_qRhG-(!uPCk+R3YCUya*Ambv)pZBYldTK5^gRa&^Hnb0j`021&kC1*eWaDiXRnMX7KRF!{&V!6i5gNE@*i-= zzQ+b^;H+1&eNJ(*y1P6~JQ#MQ$lbxHr zfeavpGopAa3HX%yN-xm0vk}qFgf5J;2k4Yv02OQ2u-PCkqP(!508-_t2Rg~^Rw5KpD2{GN1PcL-1h zJq#;xN+S7a&>!?NIwszS|CNC6CJ?@Yj@iPkY+iH3R;0@f``Gv?rxXpV_eG^R)IsGgqUVU#7<%qYtaP?kmwZq{y7C`;oO zKnrL@$QC(5#J9uN7y#X==RT|KXq~O`D6DH!cq8Kf;>;Xd+4wN%a|%;9=>bSLQ=uii zG-WAN*Vf=rpP#s3^#+1R9>iAf&3HH`mIHf8iA9Zt4)SSgQRxaxfn^i4mJ)7_Z7o<58|Y+OQ&+V_6&Ser5^Z9a)KDH`qYm6?1_AP`@9H~ zZWxy@3eR-g8fQgk!e)%@clDUBPK-?y`SN;>R>9V&g9NCB)4-*^zGK@_=u&QVh(^aj zS9Kn|>j14L8vVWRe)qdlLf}#|4{#K6i6Zs1kxcQ0DH`y-qyevl23)|Kd%7`dVQ=+t zs|l@h-Co|(z-~p4UXV&}s!i>H}3uLWfIQn z!Z=L8r&W;n@lED&ij|O_oTb;{<_vueagMs}6fz>mz;+96Bx|x+h~5e-Rs}N=BC16e z>gxYm1JxlplxVjWxA3eD6@I##Q}zjAH;sr=Chu#wD|qOuIpvM5o@mDZ6gPXZqyDe$ zoc{th|KGvOrvElx((I=&;CI-+{}l$9E`b5FFM$CC7hnKM^ZytIOwvlod>7%s1MEJI zVC)0$BHz@^Bm-3|AggkLiQyW1tpz<6G(-1N*-psxB9jV;&%TmK180p7|7Vh7uO^84 z8t)CF1(Ltb%&LS!skUI<{C}$Z7VxI3Z2x_7@@g7Npan}>AWZ;E%Oem#q>PlLJv^#_ zf{JuTla@llqpcJaVeU03j^N`CQ05LaKG4pnBR(k7JCw=aaz4zK{t-bczYp?wREbJPWfCX!WEDTD$Ee`8L z3D%B2u*h1MVbN0p7Uom~7IvqVV6|L@*NQl-Jrb-{ePEHDEW@Iw1T4($1}x0DOTg-b zS3w-s1__qX2Nv~h^gZ)(Xk3g|AfXOQGlqtD6Cb=iap)-##~Y7Re3|0p_r#&6M4bG1 zoWT+tQ%@XvO2je69+(c{pvz{5UXmQs?p@XN#*A&hsdjxuPx@jZy=&e0^^!Zdy zd#ca1x6dezwh=m#%C4k95t?`eW;n(-5VeJz2vI&o!~sIQl@?C_y;WgTWaI z1NogWkl&m8U~tA|>68BVebWPjtI`95-t@f~oN@hkWgzPY*%qMIJ0Up-&;lkTCt*=R z7oZo{=(dC&mRcuE=cA5BNuOZVtTPYvzVkhM;I=0E%Pu_WMX%!l%uJN-kDji~H8xe| zZanSGUC`vreHb&&renrg6=s|*#*DKH%s5+$8D}d`n{u6)akl(4%l&baA$Lhr2{1`_ z=ec*|T7s(unnR6NDS?ec!iL@ni}^Q*{T*sB%2{qPJH7TA=k$22`y_bSYYeB|QJe+R zS;dFD$6Ob_SqgVb;cs@+hy>x(o1U~phC5#hf4-Y+dLzQIT0ycucXso#{ea$(%vZ8d z<29mZ73=@h%r*vJ*AwwM7=#t+e42~WANq=H5L%^5^H4~q(3)TB)zEAdnqzATRbnn$ z9(pYHBh-*?xmJU*w;wgtGQbL1L%9eOag5^~Jl85F6Y{XZZsX(Q0rX)|Y&TC3G zVpm_}AHcf@9K#$X^nsw4Goaf^*U}hXh6lYe1wt|Uo$#4m*TzX_R>ar8;0z_Cf*(do zg*=L}$L&V6W7M9?^wAv$Q~)39nMwE|7tEr>{1l&i1285SnZOMrrU=nWAuWjze8H?r z#E@;aJP$lDlDEv#$>2NN|yAVP9eA5SFPpg zp@mld8Ly?KvkjaDEpg6gxHA;J)X-iPL`?>lpoi8>V$~k7$NWr$we*JJ8)k2UBCWavXm+$rQ6h}W z1mCWrXknZpx`Uz&u9u?3b1y|_5Qoa?%=HvWHrCZN7)AV=CN#d`B z4a$j^vB3@$C<9up1ZWPT3cT+r!wqpMN?>PPN*G@yMLqnMch`ynuZ`5sNHrn~DT+cW zB~FAwyo7h056Cg3gA{B)`$IJ#O6#og_i8DX>AoJe0WDr1*qxOQ33h@iz}^GcjXg5= z_n`M`E*~^kqQ*{hM}dfV(B zPxjbPjqcucZbZLv#YW8fG3LvZ8CS^RkGN^}DfUAJy?x>IV&2=17PZ}|9W9RA;nbcc zD9r2CMbZ;#3$!0pA4v;Jnp^HYQlC-oJ(B*BdyfP0qz^Qb&PCe{nL%qP@5Ujwi`TX~ z)MMz;rq}lwuJ4&$|K*y#r5%*Yy?@NkLQj}lw|sbIqBu_ut%%f{CpykZ?XVfU#L51! zdU)|NB>fMcT<11B+2tATC1?-GN0+0J+Ji(7UP?uFW<9vqab_4bo0cwC}NuD{qcz!wDuEzkI{doE7Tb`uWt#&Z9N7E{hA zU&`l+>++$MFmj#@Bg+bKCBEyfWEl`w93Z~;a0pnQL9HZP z+6xa!BAJyS1Q6I>Qj>7_!_kwEkx$ zmpc+%&jVL7@K3%M5CD9J0ib;X7iGry%$ zqcZp=Kz4CY4ib;7(wYO-22hY{M#k@g;cyo?D(26{M57!xM)?C3Nb zm8!&VCuzuhJ};irw2E$5qpQKw?U8tml9qEKnrOy!iaYljqGocB;@WKPFs)5TYpHB6XJM=`F-JFXNW_iK=kD^`ih;APip!MDP<44>?2uzsrb)wJQn)g`x&6g zma!VC5VLa|yeTXcKnTGln>ksAA&ve@bKtP27g@qfmdbI+J4102kP>ldbz&k8jRM^$ z4y}kx#39ejfIj%DfYG%uwNm_z?&4L_nBS&eO0|7b%B!|6NPW756eRr6$HbH1WbrC_ z1eZr1C&9D%lK<#Asn3;2F%xA?_3D`Tob@wYBs<5%U3lJQCHXlfHc4fYX8TNRG943N z!}TkK{>tzfo=KLDiF@$A2k@IA86;2C^0ut}SJVo+rwf-NTcmldgQf4qE3v2UN`tU# zR*E#*RNbYM?mzEROZTU{WSLrrnRr!S0z1^~{LuV37swk0Ukcu+#O1e{n`i`<=*WO& zK=)#)$1Od@>j!*rUc!dLUKM|5{VgtnRJaNC`&qo1YV6+7ZFr;SGmz_+l|GLNF}5Hb zX~SdU7SOpR&Y{hC-fX2F%rWtx#34O6bP(LxiEA4|w;4Xev&^Aq@cvAkL&R;={|ZST zEYGVT?RHE&(8J{eNbfa8mv>c=hLrTe^2Q35`(<1+UZqi`657|3cHiI8sJ(5y5oJQu zT&-UXz~GG@D&8<%uVYCs%VoJ7o_mZR0#41d`1Y)C{|Tdfl28}Uj(HA!^|7eqeM4Ur z{{+|+lQ{lw-rwS#p0>t0dzHRM-8?3K)Pu`Mrt5WfqK&v(s}dKF_Hg2;>3Ypd>8|I* z)f$sHaik~rBc|)MCP5+ki3&RPpeyo=E0#97j(Q=T32j8rvNmeyN{fe+rcP;+WtX0{ zQjHXG-dOK=@3)e!{AaxyvNes?8kPms1=&)GN>5}-kmY=4f1|qv=d85s@3m%o{fd&^ z_h4RI-U`}R@0O-$BoA{f@-QYk4Rh`kC-Trn(V7O>WRRp5*#4v&EjVS$3y*Q5J3n_Q zEVm5&BkiL_dm-D9^kt)DgA_|W4YF455u@-XlXb*kKjxcg-5I6Dx&f@LfM?2{I0GA2 z-y=2l15IS9#@C2lW0N5^>=xKvPe_(0{>pZjS+a8h6)hglfC2Ql{e_!m5b9^34|FM8T7y=^0`3#ks5=B>0qYNJax0+!y^y=vOhXld8VX_A#e zvK_ZjQ1A25{!6VhY$>YujZ&I4+o4t6C5}$&2rkllFs~#NUE^LA~BAM)?o!fL`yDl>da;l>*|OZAT46TMZccQWOP{wP8r`I7;KWQXFSzQJad>Kpmjq?Oe2_YEti zl|)@#o@r9uX~asfM13O-WZ(^;iS!}G&WL*uiX|TjD0o)Z;0G|`LhDHjF4In{i9T6x zza~)^00I7`{5vM^&ExwICAxv{~*$M2p`%t zf$n4Ahv2c2W*O%3Dlq$R9`5i-3O?)-SHp}2sI6|FG)KrR&!$Qm!rd_Zg0ZMJs^E*0 zmYQhJ=?P;7H_j&DicK8z=ce32E?V(vi zg+@OgW{#l(vy8QD*_S39^rr~}YYZ=>R;Kw{#oPB-LMH9Ou+U%CbTC}lp9Q!n3iPls zzvgx24)yED+Z8V#Z)a1?LM}!X@~#{V&+4xch6D!qS~MxAScf_ZJN{Zs!f4_9$VZp8 zb;rfbZC10!S5!Fc#8g4!8&uPhfptgw4u2bZl5(LG-vs#eRx10RlzT6yH+&f8)PE3} z^Nh%>y9-VP@5|I|H&!+WBlT?bfB45*axHW0Nuw2&j>^%k{jkb3|O zoGNlFIgzXQYtU-3PI$cXy-I#)I0(+o-@Z>Tw2E%;U}3nR0_~AYJVpz()!#?5yRfHB z^=aUlv`u5P&>Y*aRc(0&iw^6KxjTvuf#1*gw+Xuh-ZDSLk}R%V zwCWb8O~?|m1@_DSud~p}F3y@C+D7?U2N0)!PVx!@=|3PrjJNKZU;67S( zB3SCyg}&gHWX=evEv4ACxd`56i&MQL1tqS0x!>#jj(%aA;&?kZvD9rBSamia>bA#l zj*4!#SC}=r-|pov|e}Ls4#tiyH!9(G){%4yHg_reD53tdt?&Q`i zS89XV-K0?Qav?ZBv|N|s+ih31Sln5z)0*?AiZX*i zHu^vPocX=5LXld~7PMeTB+W^S$1Y3&?+(u5ths@uQl9x2&U#O_59Fv6zK<-u#IkLe z|4OkY&!u=XI`4eDwY}d|N1+1nPiy+0YHim_;c}?`ZNf_%j!jjDjk=Etlg?V)J`D>i zHnq9?`*zt6`qPC8!1J!2oM&`qznv83lD-Z0^Re8iXXV_6#B(!JZnxfdp63+-i@RC# z*){p;C_f$YO77j-PXeQ<*rsEoc%Y-W%SMBOn zaq6Chg|GP+LOym2Q_ccr^62yJj{vTscD1g$wj+rzE}U?-pRcBH8YnuWx#eU(-|HQG zl8*lJyODOc&=6+*ZIo6UPYawVlu|niAB}9l=^lOYdgCo^nA83x*jozk2VOcS)34hh z^RwnHT}^VBOKuEK5Qx)qX&nhXdrntVB++OupqL*7HlHIZ4u!e?+}Re*lv9|s+=mAb zy>)dtmA{oJWnDNn?fXbY^hm=(0r)5q5}^+i1DC$|E|TzVD!kZIgfkr%DB8{ut;Bnh zJiG8E{?6@_=X5FlSML71i;a%L(AmrJ_(PI9Nw3TrjJo`kJK3WVsv#Gtg3Y;IbeKrj zn6~NaIGfFBaqm{!{Wk1YWOI&m4+^PO>VPslME8|@qT6TOYtKEq6SdgvW_jtD-L^w* zJvmdD3fvrukH8a4lf`XD-&&287HNJq(uSSCnOf`r#tod6TK`{-i^PG`wf>Rkzgbsp zKkD}x|C(NJHwKsqCrm;@2^PWO1Efz#Z*!C13tCNIrf(7*Y)R%$vCv>HP}m+59ftQo zySXRDxh8H(GiZ#>>i@6Xh4tgTf?lW*^e=G0Omn(qJoX_UPrjYS_ zw^qGSR2C~v;>cY8oBJ!q+ni~BokeR|Fq>r|reT?zjeEtZYRPhsb7X~-T$Zz_X|PZq zy%^@B1MWTc6Sc_w%Xp#D-cRUk*1~6QaetxFp0apc(4n9Etrmn&SBGO$c4U}cMbPj0 z!f}!9;a`tMzPiF$=St z%dv*m87yxGN6l`B21IL*bUy?K3x|U?_egj8P?yK*9H-83bEk&D!f}HGL%hr~Sg^R> zMGTf@96HfC%w6KPq78hcOIzp7a5_uf7K{%NcU})pM5~oASUgRTnKvPOK27S$Ha8#F zdapo2sjtvDbd#Y)6odgj}n?59UB0<>6u$L%mWs(#~v0+LgA)otri} zmc75}an}$*YyPp7g<@jAq7fyfC9sKbeTB*@T_-?~H!wR^v^HH-gWFW;YUif;W92&Z5L+s823RzFj}p zBp98_EM|^HcE*%pH{;AnS+U5!;kk(^%#?Z{-hbxT;|u^w|NJeSmIFRVfX@JYqvyu> zGjWCX)wit3sH2p4_A84lSe>1Lp27E+Uw<@qA;|pofI;xA^=Sedqr%C?zJ01QPg{5= z)#Z$R*2D8V6;*GFdMk7SKcrgkw?J>iY>H}CHJ#-y+-yuFU673CG*jg_ai{Z7`U)(Ead$eJo}&Q^R*zZxp>TI~H-o zj_XblT2q`GEoZh5l9MnpEdU7gKqQgN5#YVubGtanZ}XvyK$ zcD3bryWY~;u9qyxPT-&s7T2L|MA{L))Vi%jBk=TvIO1g%Dma|Bm#ZGMmsQV(ZKJnv zp`Tv*=%Vf(ej6LNzKLM;^SyE*Hsu54i8H}*zCnKKz+Vm#n0Z4{XXJD(2TT?GFgH=}=bn$MT9WY`@42VsoOSd`VwlC)!y zUs;`0&Bo`oB>7T)nOA^ki>}(_OUf-ft;#*>SLT`U_K}~Bs0}Ol(|&FQpS$$*7vJJE zCs{9af;eFwtSkeGhQ+d2Kf@sxJ(5jKHjfPw~aX&pyvHWj7z{#MnD$ekm+g zakmZJu@-GheX#$w13{&)B|}-g(XKCOM_im%iHl@4-Kq7ZVEx)l zUN(k>UhuN_(sO@;+I}M@=+om0r`aE*i=b$EPITN7%61=?hz`^ z^ICRumM|Ok5zb{A%R+~}U$M{VtVEB~ z07`YB^rzj-oXACu_qE+rE=M8DB$K;vL0)GtHXcPD2rz#Ym_OVn%!jZUooR2U zzECwRwR$jYXKSw5G)u^9djU|463*`i?;*|s=Z)&tN^6n)sFnzI$zIH}b68~hK zI7`%qtxE0lz^&+&4xRGXcH*Zk&>5Kyo?)jbNss>Y(h=071jIWo8S2tQT>q57Y=Pg+ za271H*ecCF?v~-u{ZtEz9vkMI{pW*_&S3)lO=EA(Q3q-Y#emgJJ>jR&E*sZ#6OEO7 zg3Me2+}}kD1>Gv;H4Id~*c1pR*RUKGI`1{ra5?PaaU2{&@9%l}3pR)DIpqt=8ZOIN zpxlvEGg~kgB<)}!OH3s!t4jg~Nv-eL(YguBnjegx7%9#PV^X!wm;6q$gx`mfRypDw zEtn-q{auW&;o$Qki5?u|;qRfRSyyzvj0|X4?8!A#&>g}hR|>b;A39AqmNtFs`MQRXEMHk(yI%2v_DFu zR<#;|1(nD?U`c#XwPwL0Bg|fnDFxC{uBI%3--WYLMV4KB2CbG^PI2*avXAr-+GJ4l z@Fv(hQWy)JyG(jZB~+X>`4qWx&aP}r^L-GW!cPxU9iTd)_5FC5&R1(sYRSwXUFZM7 z`nJ-it$D%7EV)6QFQw)yoI|VIseFNrfL7m;6{PY@em* z5>)#hM(d-iek54kq^!xb$)!B3fJ*tPATM+VwZ4Pkyy>h@Ae@G^5{8d<*1ee}6bmX) z1g(3S6O^Eoh5kLpvLB7qzIl%@!9vmpNzZ%n8`3@_0SP{ceX>k&o7gy2>u6!3#IOF4 zB^_w_ano$U<7Of5vRcS)pceAGEN>BPuErdXDy-)e6L&B@cBHK8=FAhMlozgyha|xh z#Vf0I9m%||TJ58G9aKidd-!VeVv#3t%EhgM)u!IY?@ES*Ibu12cAKnI?~A?fRtw2K zMI(9~pkOlXu;3%;$J>)9vQYGr$)~STzCh;-B>9Fol70OGx8~m5q(u$kTGhS@wx{8# z9rsPP&=BOze-3JQv(d^H(=N`Dgv%6QIe%;A%>3@z0<4)(%@ts^jfE88lhUU++ZH&Z z`TW$axn}~mS_lr+Vd$DMT;8oY^O~sEa^J8VzV%kDAmwZy2bDFt-S9+De+qjclFSfX z7W(5QvDCB^DWqB2hL)TKKSGJolIyLYfg7l{ns^xuLa~%hK{km`8CB3r` z?9m0nO_Jqp@^QJ3M#jCB;?q@graR6_@)K!(>mK+Z_+7Ec!7diI@+2wHiHhpN1FbTS zRJZQG#Bb{elAW>zb_@Bph714ZeoXkCT`z1ClHFrZ*LCSl13R}>jA|}thu(p z0zl+Kv%2&aj4@biw^D!DfjJtro7z!x$=|#nDzP+AuDO>g*Tdu1(L1IaUiiU(ofry1J1$ zU4cU#%H-sxV(3@u@x~%6V;sC0uX>YemY^2b03*^fFT(Evye1xRS6Rq+tE|>kKPxV@ z8mkwf9;czlI}iPv--^nb(+y4P0zc)w&^iEqo?PjP;N;{EYFdQe8RSf_smT)1C(X0w zCFK@1@2k`7NNd~Eq2-fcSEo8&hP;0gMh zuFt^d&&VPQ;L+oxf02a+B4O{r-8j&i`6r}ANzLF zt}#6^)KZN4%YO|Hf{bS18jh=BJf{r{oVMC+IKbtx+-j%h%uY|OoomsJRs;<1VlK?@ zQr(L)4bCBzTET$Pd9hwC^oL}eN`C|UMlzG8Z5sMqL}x5=7Jib80r9XbM~F?b1XC~dF(18K8D+Ftr6rETHtD-myuq%F`RZK?k&()LkY+O9;V z#{QnPjh3YCO5|o}?isZI!8OuG{nGyzX|oEck}QS0G{XAKPXpJM={Hwo`5O-T8y1&8 zt02qYx=UYQCx3sO!)X;ooRE(8bR_(IvJb2OJiRc%tr7+_U_I#-t5X`~3q5_sktzA( zCz*uG!$&hmgm~p1yV#Uv%qATN@9>4dcd*aX;QJ#V-0{qjAzr1OtRFkouOG?Ass*m) zH+E&S-ePky6Zzr35KnqpXh0W@VrB{jjUqk=5_d@>MnEh3x0&5{WtdJT=iJon8d7T? z=}h{?f-q}#6 z3>Wa^E2dHzfPO$}X+QWJvW0!K6vBecj}e!2+0b0BX)sO`8IQ8aYNJ*tW52PjzlV+g zp{ZJv4xdyC_*CTiA)`NhR%~2Ht4)}O-c{C$lVbLfwplD&bM`=&UTVKcThwk64{Hjh z7~6v!%QsD}PxcV)sSRvowlMW@LJPHCqBJb`VpB84pRC>LQ++9gZM@tX@sKFUMz!^I*s*!`l-WolTN zbyHC~>5a?q!YxxfKXjh+Ty#HP_m!swe%+DmU<2*Jt@>fjP?N9&R=nr3vko!uNomV6 zE3@DY2stl*ZenpgX z4bvy<6;ZWq>wd0-pZSCx9#i3VQJL|VvnlV?y7$_LoOQY36P*x?JQDLt_VA%BeUToy zbC=B?Wsg04CDL&zOKSIj9VU ziy#~7(L!USLIb-yyCMHV;Q(ck5;Xq&5@#uJ@h%$wNYFrb)J=lUljqqg)YxD4=b_Eq zE&RySEE@JSx*u_?I&|uH>`&~2Hx69;{E8KQi20p$59Sxm1jJ>R;N@0Y;1N=G{4Axa z&~!ork9SfSi=aE6P;nhk@rvq>j6r#{)=_C2bjx8_j!Fwxt?=>NpSJ5yvvGXu{i5_;ddU(@O;U$6H4DWbuGfEo1>!@$PE}Cr1E5Li@K>ZB8 zE~;3g=tzzGugl=S9yn_b{MTQf=6t~gyiYmd9Z|83M!ik&HvCE;pSuNfli9v^MTN(I-;kBOdvTGc{axgC*q#*C+4zou4*K%VX|ASrfpXG|LGHGfAlJP-6di+v zf!Ie-BcuqLrjfUE)0kzEXhto2^@>_})9|CFOP-%fweAaec|{kM$~yxxi-v-SN291s z1xn{p=V$O`pBAn6ttM#Ng;z{uBc3=v7+Y+&D|*%E}nj)L&+zkLm3{#oP}E; zAAeY&tJ8)RYVNkFpk|ya7Wp$Y9`z6GqOw0{`+ZP(s|*FB6yv*2W5l7SEO^K=^H}S> z#*{#sEo}nd@tBh9c#K;lDu05}*0H~UmrwNx>0s;OTKmNl(I98)lKK;o`CDNF4nR*Y z4Yaq!RKo@a;`M9LB&F>YseTPDC@vT# zj1dY7Q%-2ZJU1sJE5vjBk6tUB>StNW1%N(ucil~{7lP*m@Fin-_ohpo1zP=s1*~IC z{?`37&$F2XUqIN|AUES&AO4PQuX1o%+n^(~FT^6BUQ!CA5%MqepI|AnfHyzs{`jKq z?vLRy>R0E$zUy4|!7$@TG`TS&DF&}@Ydafwx{mxnv>Si2M|FTFlpC5!YqT$C*oACTlRb=fcE%WyfQ@ z)tQbS=;X^sI_!q8rT#7HXwrpsT`30ml)6~PGL5kSx&PV{n?2E#jf3yE#wIY010w9lZEy+^g@2Hi>!`8erFlQ1l5S0 z?kCtXlvf)VOF6*T!yB?!HJc=tVXQP3d9O=Bvn<&fvYoHc;j8VURNv7F3tg^)8$gIH#d+pX1&6lTiY?n88||1_{+``&t3MHU1pEH z0WC56ePHV0-I~Sz63@%d&LA^Ig0ej?%gZ2vjUFca`#$}d+N~@L@%yLw^DXl+=Z={s zICGtY_f;NV0p5O$p7LK?xZPZ5<;<79XAAGM-#3$Dbp)T@8mWI?qlT@bIi(EG!W<5Z zi?fuvXb$5Ff!j;t@a#nudC|bv%U!b@h$l6wzn!Gk(h*XCu0IEBw;pX*YGi*3=QBBr z>#UL#vd}0oyN>ulaXG}T-8$6q>rMX^++sJ>a~%q$qIt93B4|!KhP`ChHo>cqi*fGp zVvxg#{8Jc_H_%MVJK*`c12!6)TF)%1JCuS}$aO{{%cG7=1=-1U7U$H%nXn_LVm^Zw z+L4)6cjP#YLL~CQ|3w`A4dV38XYLKcug<44a{Hz0ap?;q(tV?FwM5GRiJI_LF|b}5 z^r%hRdgug^GeshAbywEojNwI-(6f(4rgo91)QVo4-pocRoL#{jv_h97H8DsD_=K6I zqw|~4mQ2?Vr&*d`r^g~fcjnwwx2>VnndYQ=Iu-Lh?1yUY+GdkGEB$FZ=O2Pu$4Ti~ z&c8}MqU5?-dw25y_k#32_T&J(VFe4)AGZ&1wgu7=Pg`JcE_9v=D$x7OMK9@E7^Tid z&OZjxPXHZ{?c*A_-`MMl>QdJyJ8|OTuyj9XQb3~^glMoL#4#~QxTXWwcm2tWkEFx$ zL`lx9i{&VrpE6UOGs1S{OuEX-S;I#YeR@IJJUBiBW$NMgR}QSZOGG2qKz*bMq8Vca zGL6th2jMSkx(_{FiqDxae-k|dyEwwI3)W~G_$Bw3W06m=-z?QHlC!>L(+1tyD`|4s zL?VA`5bK#=d{_JK3j%p^dY>Kh=gk|r)Ks`;O~smNrjbi^j4?+=d3jmsTKaHz`O5N& zhs$+Wf2&-zZu#=EYvUGps$3009{Uw#ejnd{cN?<#w6ooCJUY3_A- z)*^*av8J%RY|ZjVC~04q4!3K~azt3*T31!JwD6vP6uz(!G5XMzNPlfQ!fBCbby>x_ zwO7$Bc*;Fh?(6YPd@sC5%HgU!dc&^H`>ryHe=LxN+g;_Y2rkhWF91nhdCSz zO{*)Gu3J@Rs#@z>156oPShmLFT4gFvd ztzF}Ra3sofVLX|sG)_!BeS*%yd#(fBOShCYgp#7T)|Q#Z-ey|bN632kQ(3lVwP)?x zGCAU!wLO`k3|(tX>&kltwwL)bBE9dXW$`i|V=7q(5LYL>VLXZx2i*rn7i0)r?-lGq zaJ;N)?Nz*@GDLn-*(JgesSFuctX}OZr$SlaDqV>Wj=LOkArRl=71C6?da22}ex!Bc zdR-#ksF2 z_IyRA_;Ctesn%$d63>h&Rf%`jPY#zp=#usQQu-VIQTUvB0`rtFWAkRtW96=Lxc{va zCfX)Vo^s37TW8uG1%*PN53Z8ZrDe<57}K(K<)v#SS!S-Ps84%^koc)D=!1FBdbPM>DU~Q4|YGo=DFsvy9x{EEi$ckty)!4YN}dST3S}Nv}`FG zU$V}#YU%jp+WGlY@0d8$ z+BN&($Cga@S3TM~f6zLL3MUoDb?Ha*9q4yozI4m~xqRR9fqY*fN_X$(aWg5rX<(^z z-~8DxrF+@&<8(JYut#CX{o99T-$M77cN$mYp8w5r)|YYLHtguTpW;4g)b}g(js%`; z&*>-bo%E1{eKc?R>i70K*pIe5zh3;MBmbHD^+VqtRIuQ?KY#kQv8Z6jsXNsF74jDR zF!#%2im~+t2cBapJ>y2dZu*WJu9*DYM31o;eaDSH zOW*N%shVKpEB%#zcip{^K3%!%g=G+(P6nmGq&T?qxM: + 80081e8: b510 push {r4, lr} + 80081ea: 4c05 ldr r4, [pc, #20] @ (8008200 <__do_global_dtors_aux+0x18>) + 80081ec: 7823 ldrb r3, [r4, #0] + 80081ee: b933 cbnz r3, 80081fe <__do_global_dtors_aux+0x16> + 80081f0: 4b04 ldr r3, [pc, #16] @ (8008204 <__do_global_dtors_aux+0x1c>) + 80081f2: b113 cbz r3, 80081fa <__do_global_dtors_aux+0x12> + 80081f4: 4804 ldr r0, [pc, #16] @ (8008208 <__do_global_dtors_aux+0x20>) + 80081f6: f3af 8000 nop.w + 80081fa: 2301 movs r3, #1 + 80081fc: 7023 strb r3, [r4, #0] + 80081fe: bd10 pop {r4, pc} + 8008200: 20000240 .word 0x20000240 + 8008204: 00000000 .word 0x00000000 + 8008208: 08015b88 .word 0x08015b88 + +0800820c : + 800820c: b508 push {r3, lr} + 800820e: 4b03 ldr r3, [pc, #12] @ (800821c ) + 8008210: b11b cbz r3, 800821a + 8008212: 4903 ldr r1, [pc, #12] @ (8008220 ) + 8008214: 4803 ldr r0, [pc, #12] @ (8008224 ) + 8008216: f3af 8000 nop.w + 800821a: bd08 pop {r3, pc} + 800821c: 00000000 .word 0x00000000 + 8008220: 20000244 .word 0x20000244 + 8008224: 08015b88 .word 0x08015b88 + +08008228 : + 8008228: 4603 mov r3, r0 + 800822a: f813 2b01 ldrb.w r2, [r3], #1 + 800822e: 2a00 cmp r2, #0 + 8008230: d1fb bne.n 800822a + 8008232: 1a18 subs r0, r3, r0 + 8008234: 3801 subs r0, #1 + 8008236: 4770 bx lr + +08008238 <__aeabi_drsub>: + 8008238: f081 4100 eor.w r1, r1, #2147483648 @ 0x80000000 + 800823c: e002 b.n 8008244 <__adddf3> + 800823e: bf00 nop + +08008240 <__aeabi_dsub>: + 8008240: f083 4300 eor.w r3, r3, #2147483648 @ 0x80000000 + +08008244 <__adddf3>: + 8008244: b530 push {r4, r5, lr} + 8008246: ea4f 0441 mov.w r4, r1, lsl #1 + 800824a: ea4f 0543 mov.w r5, r3, lsl #1 + 800824e: ea94 0f05 teq r4, r5 + 8008252: bf08 it eq + 8008254: ea90 0f02 teqeq r0, r2 + 8008258: bf1f itttt ne + 800825a: ea54 0c00 orrsne.w ip, r4, r0 + 800825e: ea55 0c02 orrsne.w ip, r5, r2 + 8008262: ea7f 5c64 mvnsne.w ip, r4, asr #21 + 8008266: ea7f 5c65 mvnsne.w ip, r5, asr #21 + 800826a: f000 80e2 beq.w 8008432 <__adddf3+0x1ee> + 800826e: ea4f 5454 mov.w r4, r4, lsr #21 + 8008272: ebd4 5555 rsbs r5, r4, r5, lsr #21 + 8008276: bfb8 it lt + 8008278: 426d neglt r5, r5 + 800827a: dd0c ble.n 8008296 <__adddf3+0x52> + 800827c: 442c add r4, r5 + 800827e: ea80 0202 eor.w r2, r0, r2 + 8008282: ea81 0303 eor.w r3, r1, r3 + 8008286: ea82 0000 eor.w r0, r2, r0 + 800828a: ea83 0101 eor.w r1, r3, r1 + 800828e: ea80 0202 eor.w r2, r0, r2 + 8008292: ea81 0303 eor.w r3, r1, r3 + 8008296: 2d36 cmp r5, #54 @ 0x36 + 8008298: bf88 it hi + 800829a: bd30 pophi {r4, r5, pc} + 800829c: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 + 80082a0: ea4f 3101 mov.w r1, r1, lsl #12 + 80082a4: f44f 1c80 mov.w ip, #1048576 @ 0x100000 + 80082a8: ea4c 3111 orr.w r1, ip, r1, lsr #12 + 80082ac: d002 beq.n 80082b4 <__adddf3+0x70> + 80082ae: 4240 negs r0, r0 + 80082b0: eb61 0141 sbc.w r1, r1, r1, lsl #1 + 80082b4: f013 4f00 tst.w r3, #2147483648 @ 0x80000000 + 80082b8: ea4f 3303 mov.w r3, r3, lsl #12 + 80082bc: ea4c 3313 orr.w r3, ip, r3, lsr #12 + 80082c0: d002 beq.n 80082c8 <__adddf3+0x84> + 80082c2: 4252 negs r2, r2 + 80082c4: eb63 0343 sbc.w r3, r3, r3, lsl #1 + 80082c8: ea94 0f05 teq r4, r5 + 80082cc: f000 80a7 beq.w 800841e <__adddf3+0x1da> + 80082d0: f1a4 0401 sub.w r4, r4, #1 + 80082d4: f1d5 0e20 rsbs lr, r5, #32 + 80082d8: db0d blt.n 80082f6 <__adddf3+0xb2> + 80082da: fa02 fc0e lsl.w ip, r2, lr + 80082de: fa22 f205 lsr.w r2, r2, r5 + 80082e2: 1880 adds r0, r0, r2 + 80082e4: f141 0100 adc.w r1, r1, #0 + 80082e8: fa03 f20e lsl.w r2, r3, lr + 80082ec: 1880 adds r0, r0, r2 + 80082ee: fa43 f305 asr.w r3, r3, r5 + 80082f2: 4159 adcs r1, r3 + 80082f4: e00e b.n 8008314 <__adddf3+0xd0> + 80082f6: f1a5 0520 sub.w r5, r5, #32 + 80082fa: f10e 0e20 add.w lr, lr, #32 + 80082fe: 2a01 cmp r2, #1 + 8008300: fa03 fc0e lsl.w ip, r3, lr + 8008304: bf28 it cs + 8008306: f04c 0c02 orrcs.w ip, ip, #2 + 800830a: fa43 f305 asr.w r3, r3, r5 + 800830e: 18c0 adds r0, r0, r3 + 8008310: eb51 71e3 adcs.w r1, r1, r3, asr #31 + 8008314: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 + 8008318: d507 bpl.n 800832a <__adddf3+0xe6> + 800831a: f04f 0e00 mov.w lr, #0 + 800831e: f1dc 0c00 rsbs ip, ip, #0 + 8008322: eb7e 0000 sbcs.w r0, lr, r0 + 8008326: eb6e 0101 sbc.w r1, lr, r1 + 800832a: f5b1 1f80 cmp.w r1, #1048576 @ 0x100000 + 800832e: d31b bcc.n 8008368 <__adddf3+0x124> + 8008330: f5b1 1f00 cmp.w r1, #2097152 @ 0x200000 + 8008334: d30c bcc.n 8008350 <__adddf3+0x10c> + 8008336: 0849 lsrs r1, r1, #1 + 8008338: ea5f 0030 movs.w r0, r0, rrx + 800833c: ea4f 0c3c mov.w ip, ip, rrx + 8008340: f104 0401 add.w r4, r4, #1 + 8008344: ea4f 5244 mov.w r2, r4, lsl #21 + 8008348: f512 0f80 cmn.w r2, #4194304 @ 0x400000 + 800834c: f080 809a bcs.w 8008484 <__adddf3+0x240> + 8008350: f1bc 4f00 cmp.w ip, #2147483648 @ 0x80000000 + 8008354: bf08 it eq + 8008356: ea5f 0c50 movseq.w ip, r0, lsr #1 + 800835a: f150 0000 adcs.w r0, r0, #0 + 800835e: eb41 5104 adc.w r1, r1, r4, lsl #20 + 8008362: ea41 0105 orr.w r1, r1, r5 + 8008366: bd30 pop {r4, r5, pc} + 8008368: ea5f 0c4c movs.w ip, ip, lsl #1 + 800836c: 4140 adcs r0, r0 + 800836e: eb41 0101 adc.w r1, r1, r1 + 8008372: 3c01 subs r4, #1 + 8008374: bf28 it cs + 8008376: f5b1 1f80 cmpcs.w r1, #1048576 @ 0x100000 + 800837a: d2e9 bcs.n 8008350 <__adddf3+0x10c> + 800837c: f091 0f00 teq r1, #0 + 8008380: bf04 itt eq + 8008382: 4601 moveq r1, r0 + 8008384: 2000 moveq r0, #0 + 8008386: fab1 f381 clz r3, r1 + 800838a: bf08 it eq + 800838c: 3320 addeq r3, #32 + 800838e: f1a3 030b sub.w r3, r3, #11 + 8008392: f1b3 0220 subs.w r2, r3, #32 + 8008396: da0c bge.n 80083b2 <__adddf3+0x16e> + 8008398: 320c adds r2, #12 + 800839a: dd08 ble.n 80083ae <__adddf3+0x16a> + 800839c: f102 0c14 add.w ip, r2, #20 + 80083a0: f1c2 020c rsb r2, r2, #12 + 80083a4: fa01 f00c lsl.w r0, r1, ip + 80083a8: fa21 f102 lsr.w r1, r1, r2 + 80083ac: e00c b.n 80083c8 <__adddf3+0x184> + 80083ae: f102 0214 add.w r2, r2, #20 + 80083b2: bfd8 it le + 80083b4: f1c2 0c20 rsble ip, r2, #32 + 80083b8: fa01 f102 lsl.w r1, r1, r2 + 80083bc: fa20 fc0c lsr.w ip, r0, ip + 80083c0: bfdc itt le + 80083c2: ea41 010c orrle.w r1, r1, ip + 80083c6: 4090 lslle r0, r2 + 80083c8: 1ae4 subs r4, r4, r3 + 80083ca: bfa2 ittt ge + 80083cc: eb01 5104 addge.w r1, r1, r4, lsl #20 + 80083d0: 4329 orrge r1, r5 + 80083d2: bd30 popge {r4, r5, pc} + 80083d4: ea6f 0404 mvn.w r4, r4 + 80083d8: 3c1f subs r4, #31 + 80083da: da1c bge.n 8008416 <__adddf3+0x1d2> + 80083dc: 340c adds r4, #12 + 80083de: dc0e bgt.n 80083fe <__adddf3+0x1ba> + 80083e0: f104 0414 add.w r4, r4, #20 + 80083e4: f1c4 0220 rsb r2, r4, #32 + 80083e8: fa20 f004 lsr.w r0, r0, r4 + 80083ec: fa01 f302 lsl.w r3, r1, r2 + 80083f0: ea40 0003 orr.w r0, r0, r3 + 80083f4: fa21 f304 lsr.w r3, r1, r4 + 80083f8: ea45 0103 orr.w r1, r5, r3 + 80083fc: bd30 pop {r4, r5, pc} + 80083fe: f1c4 040c rsb r4, r4, #12 + 8008402: f1c4 0220 rsb r2, r4, #32 + 8008406: fa20 f002 lsr.w r0, r0, r2 + 800840a: fa01 f304 lsl.w r3, r1, r4 + 800840e: ea40 0003 orr.w r0, r0, r3 + 8008412: 4629 mov r1, r5 + 8008414: bd30 pop {r4, r5, pc} + 8008416: fa21 f004 lsr.w r0, r1, r4 + 800841a: 4629 mov r1, r5 + 800841c: bd30 pop {r4, r5, pc} + 800841e: f094 0f00 teq r4, #0 + 8008422: f483 1380 eor.w r3, r3, #1048576 @ 0x100000 + 8008426: bf06 itte eq + 8008428: f481 1180 eoreq.w r1, r1, #1048576 @ 0x100000 + 800842c: 3401 addeq r4, #1 + 800842e: 3d01 subne r5, #1 + 8008430: e74e b.n 80082d0 <__adddf3+0x8c> + 8008432: ea7f 5c64 mvns.w ip, r4, asr #21 + 8008436: bf18 it ne + 8008438: ea7f 5c65 mvnsne.w ip, r5, asr #21 + 800843c: d029 beq.n 8008492 <__adddf3+0x24e> + 800843e: ea94 0f05 teq r4, r5 + 8008442: bf08 it eq + 8008444: ea90 0f02 teqeq r0, r2 + 8008448: d005 beq.n 8008456 <__adddf3+0x212> + 800844a: ea54 0c00 orrs.w ip, r4, r0 + 800844e: bf04 itt eq + 8008450: 4619 moveq r1, r3 + 8008452: 4610 moveq r0, r2 + 8008454: bd30 pop {r4, r5, pc} + 8008456: ea91 0f03 teq r1, r3 + 800845a: bf1e ittt ne + 800845c: 2100 movne r1, #0 + 800845e: 2000 movne r0, #0 + 8008460: bd30 popne {r4, r5, pc} + 8008462: ea5f 5c54 movs.w ip, r4, lsr #21 + 8008466: d105 bne.n 8008474 <__adddf3+0x230> + 8008468: 0040 lsls r0, r0, #1 + 800846a: 4149 adcs r1, r1 + 800846c: bf28 it cs + 800846e: f041 4100 orrcs.w r1, r1, #2147483648 @ 0x80000000 + 8008472: bd30 pop {r4, r5, pc} + 8008474: f514 0480 adds.w r4, r4, #4194304 @ 0x400000 + 8008478: bf3c itt cc + 800847a: f501 1180 addcc.w r1, r1, #1048576 @ 0x100000 + 800847e: bd30 popcc {r4, r5, pc} + 8008480: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 + 8008484: f045 41fe orr.w r1, r5, #2130706432 @ 0x7f000000 + 8008488: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000 + 800848c: f04f 0000 mov.w r0, #0 + 8008490: bd30 pop {r4, r5, pc} + 8008492: ea7f 5c64 mvns.w ip, r4, asr #21 + 8008496: bf1a itte ne + 8008498: 4619 movne r1, r3 + 800849a: 4610 movne r0, r2 + 800849c: ea7f 5c65 mvnseq.w ip, r5, asr #21 + 80084a0: bf1c itt ne + 80084a2: 460b movne r3, r1 + 80084a4: 4602 movne r2, r0 + 80084a6: ea50 3401 orrs.w r4, r0, r1, lsl #12 + 80084aa: bf06 itte eq + 80084ac: ea52 3503 orrseq.w r5, r2, r3, lsl #12 + 80084b0: ea91 0f03 teqeq r1, r3 + 80084b4: f441 2100 orrne.w r1, r1, #524288 @ 0x80000 + 80084b8: bd30 pop {r4, r5, pc} + 80084ba: bf00 nop + +080084bc <__aeabi_ui2d>: + 80084bc: f090 0f00 teq r0, #0 + 80084c0: bf04 itt eq + 80084c2: 2100 moveq r1, #0 + 80084c4: 4770 bxeq lr + 80084c6: b530 push {r4, r5, lr} + 80084c8: f44f 6480 mov.w r4, #1024 @ 0x400 + 80084cc: f104 0432 add.w r4, r4, #50 @ 0x32 + 80084d0: f04f 0500 mov.w r5, #0 + 80084d4: f04f 0100 mov.w r1, #0 + 80084d8: e750 b.n 800837c <__adddf3+0x138> + 80084da: bf00 nop + +080084dc <__aeabi_i2d>: + 80084dc: f090 0f00 teq r0, #0 + 80084e0: bf04 itt eq + 80084e2: 2100 moveq r1, #0 + 80084e4: 4770 bxeq lr + 80084e6: b530 push {r4, r5, lr} + 80084e8: f44f 6480 mov.w r4, #1024 @ 0x400 + 80084ec: f104 0432 add.w r4, r4, #50 @ 0x32 + 80084f0: f010 4500 ands.w r5, r0, #2147483648 @ 0x80000000 + 80084f4: bf48 it mi + 80084f6: 4240 negmi r0, r0 + 80084f8: f04f 0100 mov.w r1, #0 + 80084fc: e73e b.n 800837c <__adddf3+0x138> + 80084fe: bf00 nop + +08008500 <__aeabi_f2d>: + 8008500: 0042 lsls r2, r0, #1 + 8008502: ea4f 01e2 mov.w r1, r2, asr #3 + 8008506: ea4f 0131 mov.w r1, r1, rrx + 800850a: ea4f 7002 mov.w r0, r2, lsl #28 + 800850e: bf1f itttt ne + 8008510: f012 437f andsne.w r3, r2, #4278190080 @ 0xff000000 + 8008514: f093 4f7f teqne r3, #4278190080 @ 0xff000000 + 8008518: f081 5160 eorne.w r1, r1, #939524096 @ 0x38000000 + 800851c: 4770 bxne lr + 800851e: f032 427f bics.w r2, r2, #4278190080 @ 0xff000000 + 8008522: bf08 it eq + 8008524: 4770 bxeq lr + 8008526: f093 4f7f teq r3, #4278190080 @ 0xff000000 + 800852a: bf04 itt eq + 800852c: f441 2100 orreq.w r1, r1, #524288 @ 0x80000 + 8008530: 4770 bxeq lr + 8008532: b530 push {r4, r5, lr} + 8008534: f44f 7460 mov.w r4, #896 @ 0x380 + 8008538: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 + 800853c: f021 4100 bic.w r1, r1, #2147483648 @ 0x80000000 + 8008540: e71c b.n 800837c <__adddf3+0x138> + 8008542: bf00 nop + +08008544 <__aeabi_ul2d>: + 8008544: ea50 0201 orrs.w r2, r0, r1 + 8008548: bf08 it eq + 800854a: 4770 bxeq lr + 800854c: b530 push {r4, r5, lr} + 800854e: f04f 0500 mov.w r5, #0 + 8008552: e00a b.n 800856a <__aeabi_l2d+0x16> + +08008554 <__aeabi_l2d>: + 8008554: ea50 0201 orrs.w r2, r0, r1 + 8008558: bf08 it eq + 800855a: 4770 bxeq lr + 800855c: b530 push {r4, r5, lr} + 800855e: f011 4500 ands.w r5, r1, #2147483648 @ 0x80000000 + 8008562: d502 bpl.n 800856a <__aeabi_l2d+0x16> + 8008564: 4240 negs r0, r0 + 8008566: eb61 0141 sbc.w r1, r1, r1, lsl #1 + 800856a: f44f 6480 mov.w r4, #1024 @ 0x400 + 800856e: f104 0432 add.w r4, r4, #50 @ 0x32 + 8008572: ea5f 5c91 movs.w ip, r1, lsr #22 + 8008576: f43f aed8 beq.w 800832a <__adddf3+0xe6> + 800857a: f04f 0203 mov.w r2, #3 + 800857e: ea5f 0cdc movs.w ip, ip, lsr #3 + 8008582: bf18 it ne + 8008584: 3203 addne r2, #3 + 8008586: ea5f 0cdc movs.w ip, ip, lsr #3 + 800858a: bf18 it ne + 800858c: 3203 addne r2, #3 + 800858e: eb02 02dc add.w r2, r2, ip, lsr #3 + 8008592: f1c2 0320 rsb r3, r2, #32 + 8008596: fa00 fc03 lsl.w ip, r0, r3 + 800859a: fa20 f002 lsr.w r0, r0, r2 + 800859e: fa01 fe03 lsl.w lr, r1, r3 + 80085a2: ea40 000e orr.w r0, r0, lr + 80085a6: fa21 f102 lsr.w r1, r1, r2 + 80085aa: 4414 add r4, r2 + 80085ac: e6bd b.n 800832a <__adddf3+0xe6> + 80085ae: bf00 nop + +080085b0 <__aeabi_dmul>: + 80085b0: b570 push {r4, r5, r6, lr} + 80085b2: f04f 0cff mov.w ip, #255 @ 0xff + 80085b6: f44c 6ce0 orr.w ip, ip, #1792 @ 0x700 + 80085ba: ea1c 5411 ands.w r4, ip, r1, lsr #20 + 80085be: bf1d ittte ne + 80085c0: ea1c 5513 andsne.w r5, ip, r3, lsr #20 + 80085c4: ea94 0f0c teqne r4, ip + 80085c8: ea95 0f0c teqne r5, ip + 80085cc: f000 f8de bleq 800878c <__aeabi_dmul+0x1dc> + 80085d0: 442c add r4, r5 + 80085d2: ea81 0603 eor.w r6, r1, r3 + 80085d6: ea21 514c bic.w r1, r1, ip, lsl #21 + 80085da: ea23 534c bic.w r3, r3, ip, lsl #21 + 80085de: ea50 3501 orrs.w r5, r0, r1, lsl #12 + 80085e2: bf18 it ne + 80085e4: ea52 3503 orrsne.w r5, r2, r3, lsl #12 + 80085e8: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 + 80085ec: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 + 80085f0: d038 beq.n 8008664 <__aeabi_dmul+0xb4> + 80085f2: fba0 ce02 umull ip, lr, r0, r2 + 80085f6: f04f 0500 mov.w r5, #0 + 80085fa: fbe1 e502 umlal lr, r5, r1, r2 + 80085fe: f006 4200 and.w r2, r6, #2147483648 @ 0x80000000 + 8008602: fbe0 e503 umlal lr, r5, r0, r3 + 8008606: f04f 0600 mov.w r6, #0 + 800860a: fbe1 5603 umlal r5, r6, r1, r3 + 800860e: f09c 0f00 teq ip, #0 + 8008612: bf18 it ne + 8008614: f04e 0e01 orrne.w lr, lr, #1 + 8008618: f1a4 04ff sub.w r4, r4, #255 @ 0xff + 800861c: f5b6 7f00 cmp.w r6, #512 @ 0x200 + 8008620: f564 7440 sbc.w r4, r4, #768 @ 0x300 + 8008624: d204 bcs.n 8008630 <__aeabi_dmul+0x80> + 8008626: ea5f 0e4e movs.w lr, lr, lsl #1 + 800862a: 416d adcs r5, r5 + 800862c: eb46 0606 adc.w r6, r6, r6 + 8008630: ea42 21c6 orr.w r1, r2, r6, lsl #11 + 8008634: ea41 5155 orr.w r1, r1, r5, lsr #21 + 8008638: ea4f 20c5 mov.w r0, r5, lsl #11 + 800863c: ea40 505e orr.w r0, r0, lr, lsr #21 + 8008640: ea4f 2ece mov.w lr, lr, lsl #11 + 8008644: f1b4 0cfd subs.w ip, r4, #253 @ 0xfd + 8008648: bf88 it hi + 800864a: f5bc 6fe0 cmphi.w ip, #1792 @ 0x700 + 800864e: d81e bhi.n 800868e <__aeabi_dmul+0xde> + 8008650: f1be 4f00 cmp.w lr, #2147483648 @ 0x80000000 + 8008654: bf08 it eq + 8008656: ea5f 0e50 movseq.w lr, r0, lsr #1 + 800865a: f150 0000 adcs.w r0, r0, #0 + 800865e: eb41 5104 adc.w r1, r1, r4, lsl #20 + 8008662: bd70 pop {r4, r5, r6, pc} + 8008664: f006 4600 and.w r6, r6, #2147483648 @ 0x80000000 + 8008668: ea46 0101 orr.w r1, r6, r1 + 800866c: ea40 0002 orr.w r0, r0, r2 + 8008670: ea81 0103 eor.w r1, r1, r3 + 8008674: ebb4 045c subs.w r4, r4, ip, lsr #1 + 8008678: bfc2 ittt gt + 800867a: ebd4 050c rsbsgt r5, r4, ip + 800867e: ea41 5104 orrgt.w r1, r1, r4, lsl #20 + 8008682: bd70 popgt {r4, r5, r6, pc} + 8008684: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 + 8008688: f04f 0e00 mov.w lr, #0 + 800868c: 3c01 subs r4, #1 + 800868e: f300 80ab bgt.w 80087e8 <__aeabi_dmul+0x238> + 8008692: f114 0f36 cmn.w r4, #54 @ 0x36 + 8008696: bfde ittt le + 8008698: 2000 movle r0, #0 + 800869a: f001 4100 andle.w r1, r1, #2147483648 @ 0x80000000 + 800869e: bd70 pople {r4, r5, r6, pc} + 80086a0: f1c4 0400 rsb r4, r4, #0 + 80086a4: 3c20 subs r4, #32 + 80086a6: da35 bge.n 8008714 <__aeabi_dmul+0x164> + 80086a8: 340c adds r4, #12 + 80086aa: dc1b bgt.n 80086e4 <__aeabi_dmul+0x134> + 80086ac: f104 0414 add.w r4, r4, #20 + 80086b0: f1c4 0520 rsb r5, r4, #32 + 80086b4: fa00 f305 lsl.w r3, r0, r5 + 80086b8: fa20 f004 lsr.w r0, r0, r4 + 80086bc: fa01 f205 lsl.w r2, r1, r5 + 80086c0: ea40 0002 orr.w r0, r0, r2 + 80086c4: f001 4200 and.w r2, r1, #2147483648 @ 0x80000000 + 80086c8: f021 4100 bic.w r1, r1, #2147483648 @ 0x80000000 + 80086cc: eb10 70d3 adds.w r0, r0, r3, lsr #31 + 80086d0: fa21 f604 lsr.w r6, r1, r4 + 80086d4: eb42 0106 adc.w r1, r2, r6 + 80086d8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 80086dc: bf08 it eq + 80086de: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 80086e2: bd70 pop {r4, r5, r6, pc} + 80086e4: f1c4 040c rsb r4, r4, #12 + 80086e8: f1c4 0520 rsb r5, r4, #32 + 80086ec: fa00 f304 lsl.w r3, r0, r4 + 80086f0: fa20 f005 lsr.w r0, r0, r5 + 80086f4: fa01 f204 lsl.w r2, r1, r4 + 80086f8: ea40 0002 orr.w r0, r0, r2 + 80086fc: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 + 8008700: eb10 70d3 adds.w r0, r0, r3, lsr #31 + 8008704: f141 0100 adc.w r1, r1, #0 + 8008708: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 800870c: bf08 it eq + 800870e: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 8008712: bd70 pop {r4, r5, r6, pc} + 8008714: f1c4 0520 rsb r5, r4, #32 + 8008718: fa00 f205 lsl.w r2, r0, r5 + 800871c: ea4e 0e02 orr.w lr, lr, r2 + 8008720: fa20 f304 lsr.w r3, r0, r4 + 8008724: fa01 f205 lsl.w r2, r1, r5 + 8008728: ea43 0302 orr.w r3, r3, r2 + 800872c: fa21 f004 lsr.w r0, r1, r4 + 8008730: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 + 8008734: fa21 f204 lsr.w r2, r1, r4 + 8008738: ea20 0002 bic.w r0, r0, r2 + 800873c: eb00 70d3 add.w r0, r0, r3, lsr #31 + 8008740: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 + 8008744: bf08 it eq + 8008746: ea20 70d3 biceq.w r0, r0, r3, lsr #31 + 800874a: bd70 pop {r4, r5, r6, pc} + 800874c: f094 0f00 teq r4, #0 + 8008750: d10f bne.n 8008772 <__aeabi_dmul+0x1c2> + 8008752: f001 4600 and.w r6, r1, #2147483648 @ 0x80000000 + 8008756: 0040 lsls r0, r0, #1 + 8008758: eb41 0101 adc.w r1, r1, r1 + 800875c: f411 1f80 tst.w r1, #1048576 @ 0x100000 + 8008760: bf08 it eq + 8008762: 3c01 subeq r4, #1 + 8008764: d0f7 beq.n 8008756 <__aeabi_dmul+0x1a6> + 8008766: ea41 0106 orr.w r1, r1, r6 + 800876a: f095 0f00 teq r5, #0 + 800876e: bf18 it ne + 8008770: 4770 bxne lr + 8008772: f003 4600 and.w r6, r3, #2147483648 @ 0x80000000 + 8008776: 0052 lsls r2, r2, #1 + 8008778: eb43 0303 adc.w r3, r3, r3 + 800877c: f413 1f80 tst.w r3, #1048576 @ 0x100000 + 8008780: bf08 it eq + 8008782: 3d01 subeq r5, #1 + 8008784: d0f7 beq.n 8008776 <__aeabi_dmul+0x1c6> + 8008786: ea43 0306 orr.w r3, r3, r6 + 800878a: 4770 bx lr + 800878c: ea94 0f0c teq r4, ip + 8008790: ea0c 5513 and.w r5, ip, r3, lsr #20 + 8008794: bf18 it ne + 8008796: ea95 0f0c teqne r5, ip + 800879a: d00c beq.n 80087b6 <__aeabi_dmul+0x206> + 800879c: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 80087a0: bf18 it ne + 80087a2: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 80087a6: d1d1 bne.n 800874c <__aeabi_dmul+0x19c> + 80087a8: ea81 0103 eor.w r1, r1, r3 + 80087ac: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 + 80087b0: f04f 0000 mov.w r0, #0 + 80087b4: bd70 pop {r4, r5, r6, pc} + 80087b6: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 80087ba: bf06 itte eq + 80087bc: 4610 moveq r0, r2 + 80087be: 4619 moveq r1, r3 + 80087c0: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 80087c4: d019 beq.n 80087fa <__aeabi_dmul+0x24a> + 80087c6: ea94 0f0c teq r4, ip + 80087ca: d102 bne.n 80087d2 <__aeabi_dmul+0x222> + 80087cc: ea50 3601 orrs.w r6, r0, r1, lsl #12 + 80087d0: d113 bne.n 80087fa <__aeabi_dmul+0x24a> + 80087d2: ea95 0f0c teq r5, ip + 80087d6: d105 bne.n 80087e4 <__aeabi_dmul+0x234> + 80087d8: ea52 3603 orrs.w r6, r2, r3, lsl #12 + 80087dc: bf1c itt ne + 80087de: 4610 movne r0, r2 + 80087e0: 4619 movne r1, r3 + 80087e2: d10a bne.n 80087fa <__aeabi_dmul+0x24a> + 80087e4: ea81 0103 eor.w r1, r1, r3 + 80087e8: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 + 80087ec: f041 41fe orr.w r1, r1, #2130706432 @ 0x7f000000 + 80087f0: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000 + 80087f4: f04f 0000 mov.w r0, #0 + 80087f8: bd70 pop {r4, r5, r6, pc} + 80087fa: f041 41fe orr.w r1, r1, #2130706432 @ 0x7f000000 + 80087fe: f441 0178 orr.w r1, r1, #16252928 @ 0xf80000 + 8008802: bd70 pop {r4, r5, r6, pc} + +08008804 <__aeabi_ddiv>: + 8008804: b570 push {r4, r5, r6, lr} + 8008806: f04f 0cff mov.w ip, #255 @ 0xff + 800880a: f44c 6ce0 orr.w ip, ip, #1792 @ 0x700 + 800880e: ea1c 5411 ands.w r4, ip, r1, lsr #20 + 8008812: bf1d ittte ne + 8008814: ea1c 5513 andsne.w r5, ip, r3, lsr #20 + 8008818: ea94 0f0c teqne r4, ip + 800881c: ea95 0f0c teqne r5, ip + 8008820: f000 f8a7 bleq 8008972 <__aeabi_ddiv+0x16e> + 8008824: eba4 0405 sub.w r4, r4, r5 + 8008828: ea81 0e03 eor.w lr, r1, r3 + 800882c: ea52 3503 orrs.w r5, r2, r3, lsl #12 + 8008830: ea4f 3101 mov.w r1, r1, lsl #12 + 8008834: f000 8088 beq.w 8008948 <__aeabi_ddiv+0x144> + 8008838: ea4f 3303 mov.w r3, r3, lsl #12 + 800883c: f04f 5580 mov.w r5, #268435456 @ 0x10000000 + 8008840: ea45 1313 orr.w r3, r5, r3, lsr #4 + 8008844: ea43 6312 orr.w r3, r3, r2, lsr #24 + 8008848: ea4f 2202 mov.w r2, r2, lsl #8 + 800884c: ea45 1511 orr.w r5, r5, r1, lsr #4 + 8008850: ea45 6510 orr.w r5, r5, r0, lsr #24 + 8008854: ea4f 2600 mov.w r6, r0, lsl #8 + 8008858: f00e 4100 and.w r1, lr, #2147483648 @ 0x80000000 + 800885c: 429d cmp r5, r3 + 800885e: bf08 it eq + 8008860: 4296 cmpeq r6, r2 + 8008862: f144 04fd adc.w r4, r4, #253 @ 0xfd + 8008866: f504 7440 add.w r4, r4, #768 @ 0x300 + 800886a: d202 bcs.n 8008872 <__aeabi_ddiv+0x6e> + 800886c: 085b lsrs r3, r3, #1 + 800886e: ea4f 0232 mov.w r2, r2, rrx + 8008872: 1ab6 subs r6, r6, r2 + 8008874: eb65 0503 sbc.w r5, r5, r3 + 8008878: 085b lsrs r3, r3, #1 + 800887a: ea4f 0232 mov.w r2, r2, rrx + 800887e: f44f 1080 mov.w r0, #1048576 @ 0x100000 + 8008882: f44f 2c00 mov.w ip, #524288 @ 0x80000 + 8008886: ebb6 0e02 subs.w lr, r6, r2 + 800888a: eb75 0e03 sbcs.w lr, r5, r3 + 800888e: bf22 ittt cs + 8008890: 1ab6 subcs r6, r6, r2 + 8008892: 4675 movcs r5, lr + 8008894: ea40 000c orrcs.w r0, r0, ip + 8008898: 085b lsrs r3, r3, #1 + 800889a: ea4f 0232 mov.w r2, r2, rrx + 800889e: ebb6 0e02 subs.w lr, r6, r2 + 80088a2: eb75 0e03 sbcs.w lr, r5, r3 + 80088a6: bf22 ittt cs + 80088a8: 1ab6 subcs r6, r6, r2 + 80088aa: 4675 movcs r5, lr + 80088ac: ea40 005c orrcs.w r0, r0, ip, lsr #1 + 80088b0: 085b lsrs r3, r3, #1 + 80088b2: ea4f 0232 mov.w r2, r2, rrx + 80088b6: ebb6 0e02 subs.w lr, r6, r2 + 80088ba: eb75 0e03 sbcs.w lr, r5, r3 + 80088be: bf22 ittt cs + 80088c0: 1ab6 subcs r6, r6, r2 + 80088c2: 4675 movcs r5, lr + 80088c4: ea40 009c orrcs.w r0, r0, ip, lsr #2 + 80088c8: 085b lsrs r3, r3, #1 + 80088ca: ea4f 0232 mov.w r2, r2, rrx + 80088ce: ebb6 0e02 subs.w lr, r6, r2 + 80088d2: eb75 0e03 sbcs.w lr, r5, r3 + 80088d6: bf22 ittt cs + 80088d8: 1ab6 subcs r6, r6, r2 + 80088da: 4675 movcs r5, lr + 80088dc: ea40 00dc orrcs.w r0, r0, ip, lsr #3 + 80088e0: ea55 0e06 orrs.w lr, r5, r6 + 80088e4: d018 beq.n 8008918 <__aeabi_ddiv+0x114> + 80088e6: ea4f 1505 mov.w r5, r5, lsl #4 + 80088ea: ea45 7516 orr.w r5, r5, r6, lsr #28 + 80088ee: ea4f 1606 mov.w r6, r6, lsl #4 + 80088f2: ea4f 03c3 mov.w r3, r3, lsl #3 + 80088f6: ea43 7352 orr.w r3, r3, r2, lsr #29 + 80088fa: ea4f 02c2 mov.w r2, r2, lsl #3 + 80088fe: ea5f 1c1c movs.w ip, ip, lsr #4 + 8008902: d1c0 bne.n 8008886 <__aeabi_ddiv+0x82> + 8008904: f411 1f80 tst.w r1, #1048576 @ 0x100000 + 8008908: d10b bne.n 8008922 <__aeabi_ddiv+0x11e> + 800890a: ea41 0100 orr.w r1, r1, r0 + 800890e: f04f 0000 mov.w r0, #0 + 8008912: f04f 4c00 mov.w ip, #2147483648 @ 0x80000000 + 8008916: e7b6 b.n 8008886 <__aeabi_ddiv+0x82> + 8008918: f411 1f80 tst.w r1, #1048576 @ 0x100000 + 800891c: bf04 itt eq + 800891e: 4301 orreq r1, r0 + 8008920: 2000 moveq r0, #0 + 8008922: f1b4 0cfd subs.w ip, r4, #253 @ 0xfd + 8008926: bf88 it hi + 8008928: f5bc 6fe0 cmphi.w ip, #1792 @ 0x700 + 800892c: f63f aeaf bhi.w 800868e <__aeabi_dmul+0xde> + 8008930: ebb5 0c03 subs.w ip, r5, r3 + 8008934: bf04 itt eq + 8008936: ebb6 0c02 subseq.w ip, r6, r2 + 800893a: ea5f 0c50 movseq.w ip, r0, lsr #1 + 800893e: f150 0000 adcs.w r0, r0, #0 + 8008942: eb41 5104 adc.w r1, r1, r4, lsl #20 + 8008946: bd70 pop {r4, r5, r6, pc} + 8008948: f00e 4e00 and.w lr, lr, #2147483648 @ 0x80000000 + 800894c: ea4e 3111 orr.w r1, lr, r1, lsr #12 + 8008950: eb14 045c adds.w r4, r4, ip, lsr #1 + 8008954: bfc2 ittt gt + 8008956: ebd4 050c rsbsgt r5, r4, ip + 800895a: ea41 5104 orrgt.w r1, r1, r4, lsl #20 + 800895e: bd70 popgt {r4, r5, r6, pc} + 8008960: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 + 8008964: f04f 0e00 mov.w lr, #0 + 8008968: 3c01 subs r4, #1 + 800896a: e690 b.n 800868e <__aeabi_dmul+0xde> + 800896c: ea45 0e06 orr.w lr, r5, r6 + 8008970: e68d b.n 800868e <__aeabi_dmul+0xde> + 8008972: ea0c 5513 and.w r5, ip, r3, lsr #20 + 8008976: ea94 0f0c teq r4, ip + 800897a: bf08 it eq + 800897c: ea95 0f0c teqeq r5, ip + 8008980: f43f af3b beq.w 80087fa <__aeabi_dmul+0x24a> + 8008984: ea94 0f0c teq r4, ip + 8008988: d10a bne.n 80089a0 <__aeabi_ddiv+0x19c> + 800898a: ea50 3401 orrs.w r4, r0, r1, lsl #12 + 800898e: f47f af34 bne.w 80087fa <__aeabi_dmul+0x24a> + 8008992: ea95 0f0c teq r5, ip + 8008996: f47f af25 bne.w 80087e4 <__aeabi_dmul+0x234> + 800899a: 4610 mov r0, r2 + 800899c: 4619 mov r1, r3 + 800899e: e72c b.n 80087fa <__aeabi_dmul+0x24a> + 80089a0: ea95 0f0c teq r5, ip + 80089a4: d106 bne.n 80089b4 <__aeabi_ddiv+0x1b0> + 80089a6: ea52 3503 orrs.w r5, r2, r3, lsl #12 + 80089aa: f43f aefd beq.w 80087a8 <__aeabi_dmul+0x1f8> + 80089ae: 4610 mov r0, r2 + 80089b0: 4619 mov r1, r3 + 80089b2: e722 b.n 80087fa <__aeabi_dmul+0x24a> + 80089b4: ea50 0641 orrs.w r6, r0, r1, lsl #1 + 80089b8: bf18 it ne + 80089ba: ea52 0643 orrsne.w r6, r2, r3, lsl #1 + 80089be: f47f aec5 bne.w 800874c <__aeabi_dmul+0x19c> + 80089c2: ea50 0441 orrs.w r4, r0, r1, lsl #1 + 80089c6: f47f af0d bne.w 80087e4 <__aeabi_dmul+0x234> + 80089ca: ea52 0543 orrs.w r5, r2, r3, lsl #1 + 80089ce: f47f aeeb bne.w 80087a8 <__aeabi_dmul+0x1f8> + 80089d2: e712 b.n 80087fa <__aeabi_dmul+0x24a> + +080089d4 <__gedf2>: + 80089d4: f04f 3cff mov.w ip, #4294967295 @ 0xffffffff + 80089d8: e006 b.n 80089e8 <__cmpdf2+0x4> + 80089da: bf00 nop + +080089dc <__ledf2>: + 80089dc: f04f 0c01 mov.w ip, #1 + 80089e0: e002 b.n 80089e8 <__cmpdf2+0x4> + 80089e2: bf00 nop + +080089e4 <__cmpdf2>: + 80089e4: f04f 0c01 mov.w ip, #1 + 80089e8: f84d cd04 str.w ip, [sp, #-4]! + 80089ec: ea4f 0c41 mov.w ip, r1, lsl #1 + 80089f0: ea7f 5c6c mvns.w ip, ip, asr #21 + 80089f4: ea4f 0c43 mov.w ip, r3, lsl #1 + 80089f8: bf18 it ne + 80089fa: ea7f 5c6c mvnsne.w ip, ip, asr #21 + 80089fe: d01b beq.n 8008a38 <__cmpdf2+0x54> + 8008a00: b001 add sp, #4 + 8008a02: ea50 0c41 orrs.w ip, r0, r1, lsl #1 + 8008a06: bf0c ite eq + 8008a08: ea52 0c43 orrseq.w ip, r2, r3, lsl #1 + 8008a0c: ea91 0f03 teqne r1, r3 + 8008a10: bf02 ittt eq + 8008a12: ea90 0f02 teqeq r0, r2 + 8008a16: 2000 moveq r0, #0 + 8008a18: 4770 bxeq lr + 8008a1a: f110 0f00 cmn.w r0, #0 + 8008a1e: ea91 0f03 teq r1, r3 + 8008a22: bf58 it pl + 8008a24: 4299 cmppl r1, r3 + 8008a26: bf08 it eq + 8008a28: 4290 cmpeq r0, r2 + 8008a2a: bf2c ite cs + 8008a2c: 17d8 asrcs r0, r3, #31 + 8008a2e: ea6f 70e3 mvncc.w r0, r3, asr #31 + 8008a32: f040 0001 orr.w r0, r0, #1 + 8008a36: 4770 bx lr + 8008a38: ea4f 0c41 mov.w ip, r1, lsl #1 + 8008a3c: ea7f 5c6c mvns.w ip, ip, asr #21 + 8008a40: d102 bne.n 8008a48 <__cmpdf2+0x64> + 8008a42: ea50 3c01 orrs.w ip, r0, r1, lsl #12 + 8008a46: d107 bne.n 8008a58 <__cmpdf2+0x74> + 8008a48: ea4f 0c43 mov.w ip, r3, lsl #1 + 8008a4c: ea7f 5c6c mvns.w ip, ip, asr #21 + 8008a50: d1d6 bne.n 8008a00 <__cmpdf2+0x1c> + 8008a52: ea52 3c03 orrs.w ip, r2, r3, lsl #12 + 8008a56: d0d3 beq.n 8008a00 <__cmpdf2+0x1c> + 8008a58: f85d 0b04 ldr.w r0, [sp], #4 + 8008a5c: 4770 bx lr + 8008a5e: bf00 nop + +08008a60 <__aeabi_cdrcmple>: + 8008a60: 4684 mov ip, r0 + 8008a62: 4610 mov r0, r2 + 8008a64: 4662 mov r2, ip + 8008a66: 468c mov ip, r1 + 8008a68: 4619 mov r1, r3 + 8008a6a: 4663 mov r3, ip + 8008a6c: e000 b.n 8008a70 <__aeabi_cdcmpeq> + 8008a6e: bf00 nop + +08008a70 <__aeabi_cdcmpeq>: + 8008a70: b501 push {r0, lr} + 8008a72: f7ff ffb7 bl 80089e4 <__cmpdf2> + 8008a76: 2800 cmp r0, #0 + 8008a78: bf48 it mi + 8008a7a: f110 0f00 cmnmi.w r0, #0 + 8008a7e: bd01 pop {r0, pc} + +08008a80 <__aeabi_dcmpeq>: + 8008a80: f84d ed08 str.w lr, [sp, #-8]! + 8008a84: f7ff fff4 bl 8008a70 <__aeabi_cdcmpeq> + 8008a88: bf0c ite eq + 8008a8a: 2001 moveq r0, #1 + 8008a8c: 2000 movne r0, #0 + 8008a8e: f85d fb08 ldr.w pc, [sp], #8 + 8008a92: bf00 nop + +08008a94 <__aeabi_dcmplt>: + 8008a94: f84d ed08 str.w lr, [sp, #-8]! + 8008a98: f7ff ffea bl 8008a70 <__aeabi_cdcmpeq> + 8008a9c: bf34 ite cc + 8008a9e: 2001 movcc r0, #1 + 8008aa0: 2000 movcs r0, #0 + 8008aa2: f85d fb08 ldr.w pc, [sp], #8 + 8008aa6: bf00 nop + +08008aa8 <__aeabi_dcmple>: + 8008aa8: f84d ed08 str.w lr, [sp, #-8]! + 8008aac: f7ff ffe0 bl 8008a70 <__aeabi_cdcmpeq> + 8008ab0: bf94 ite ls + 8008ab2: 2001 movls r0, #1 + 8008ab4: 2000 movhi r0, #0 + 8008ab6: f85d fb08 ldr.w pc, [sp], #8 + 8008aba: bf00 nop + +08008abc <__aeabi_dcmpge>: + 8008abc: f84d ed08 str.w lr, [sp, #-8]! + 8008ac0: f7ff ffce bl 8008a60 <__aeabi_cdrcmple> + 8008ac4: bf94 ite ls + 8008ac6: 2001 movls r0, #1 + 8008ac8: 2000 movhi r0, #0 + 8008aca: f85d fb08 ldr.w pc, [sp], #8 + 8008ace: bf00 nop + +08008ad0 <__aeabi_dcmpgt>: + 8008ad0: f84d ed08 str.w lr, [sp, #-8]! + 8008ad4: f7ff ffc4 bl 8008a60 <__aeabi_cdrcmple> + 8008ad8: bf34 ite cc + 8008ada: 2001 movcc r0, #1 + 8008adc: 2000 movcs r0, #0 + 8008ade: f85d fb08 ldr.w pc, [sp], #8 + 8008ae2: bf00 nop + +08008ae4 <__aeabi_dcmpun>: + 8008ae4: ea4f 0c41 mov.w ip, r1, lsl #1 + 8008ae8: ea7f 5c6c mvns.w ip, ip, asr #21 + 8008aec: d102 bne.n 8008af4 <__aeabi_dcmpun+0x10> + 8008aee: ea50 3c01 orrs.w ip, r0, r1, lsl #12 + 8008af2: d10a bne.n 8008b0a <__aeabi_dcmpun+0x26> + 8008af4: ea4f 0c43 mov.w ip, r3, lsl #1 + 8008af8: ea7f 5c6c mvns.w ip, ip, asr #21 + 8008afc: d102 bne.n 8008b04 <__aeabi_dcmpun+0x20> + 8008afe: ea52 3c03 orrs.w ip, r2, r3, lsl #12 + 8008b02: d102 bne.n 8008b0a <__aeabi_dcmpun+0x26> + 8008b04: f04f 0000 mov.w r0, #0 + 8008b08: 4770 bx lr + 8008b0a: f04f 0001 mov.w r0, #1 + 8008b0e: 4770 bx lr + +08008b10 <__aeabi_d2iz>: + 8008b10: ea4f 0241 mov.w r2, r1, lsl #1 + 8008b14: f512 1200 adds.w r2, r2, #2097152 @ 0x200000 + 8008b18: d215 bcs.n 8008b46 <__aeabi_d2iz+0x36> + 8008b1a: d511 bpl.n 8008b40 <__aeabi_d2iz+0x30> + 8008b1c: f46f 7378 mvn.w r3, #992 @ 0x3e0 + 8008b20: ebb3 5262 subs.w r2, r3, r2, asr #21 + 8008b24: d912 bls.n 8008b4c <__aeabi_d2iz+0x3c> + 8008b26: ea4f 23c1 mov.w r3, r1, lsl #11 + 8008b2a: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000 + 8008b2e: ea43 5350 orr.w r3, r3, r0, lsr #21 + 8008b32: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 + 8008b36: fa23 f002 lsr.w r0, r3, r2 + 8008b3a: bf18 it ne + 8008b3c: 4240 negne r0, r0 + 8008b3e: 4770 bx lr + 8008b40: f04f 0000 mov.w r0, #0 + 8008b44: 4770 bx lr + 8008b46: ea50 3001 orrs.w r0, r0, r1, lsl #12 + 8008b4a: d105 bne.n 8008b58 <__aeabi_d2iz+0x48> + 8008b4c: f011 4000 ands.w r0, r1, #2147483648 @ 0x80000000 + 8008b50: bf08 it eq + 8008b52: f06f 4000 mvneq.w r0, #2147483648 @ 0x80000000 + 8008b56: 4770 bx lr + 8008b58: f04f 0000 mov.w r0, #0 + 8008b5c: 4770 bx lr + 8008b5e: bf00 nop + +08008b60 <__aeabi_d2f>: + 8008b60: ea4f 0241 mov.w r2, r1, lsl #1 + 8008b64: f1b2 43e0 subs.w r3, r2, #1879048192 @ 0x70000000 + 8008b68: bf24 itt cs + 8008b6a: f5b3 1c00 subscs.w ip, r3, #2097152 @ 0x200000 + 8008b6e: f1dc 5cfe rsbscs ip, ip, #532676608 @ 0x1fc00000 + 8008b72: d90d bls.n 8008b90 <__aeabi_d2f+0x30> + 8008b74: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 + 8008b78: ea4f 02c0 mov.w r2, r0, lsl #3 + 8008b7c: ea4c 7050 orr.w r0, ip, r0, lsr #29 + 8008b80: f1b2 4f00 cmp.w r2, #2147483648 @ 0x80000000 + 8008b84: eb40 0083 adc.w r0, r0, r3, lsl #2 + 8008b88: bf08 it eq + 8008b8a: f020 0001 biceq.w r0, r0, #1 + 8008b8e: 4770 bx lr + 8008b90: f011 4f80 tst.w r1, #1073741824 @ 0x40000000 + 8008b94: d121 bne.n 8008bda <__aeabi_d2f+0x7a> + 8008b96: f113 7238 adds.w r2, r3, #48234496 @ 0x2e00000 + 8008b9a: bfbc itt lt + 8008b9c: f001 4000 andlt.w r0, r1, #2147483648 @ 0x80000000 + 8008ba0: 4770 bxlt lr + 8008ba2: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 + 8008ba6: ea4f 5252 mov.w r2, r2, lsr #21 + 8008baa: f1c2 0218 rsb r2, r2, #24 + 8008bae: f1c2 0c20 rsb ip, r2, #32 + 8008bb2: fa10 f30c lsls.w r3, r0, ip + 8008bb6: fa20 f002 lsr.w r0, r0, r2 + 8008bba: bf18 it ne + 8008bbc: f040 0001 orrne.w r0, r0, #1 + 8008bc0: ea4f 23c1 mov.w r3, r1, lsl #11 + 8008bc4: ea4f 23d3 mov.w r3, r3, lsr #11 + 8008bc8: fa03 fc0c lsl.w ip, r3, ip + 8008bcc: ea40 000c orr.w r0, r0, ip + 8008bd0: fa23 f302 lsr.w r3, r3, r2 + 8008bd4: ea4f 0343 mov.w r3, r3, lsl #1 + 8008bd8: e7cc b.n 8008b74 <__aeabi_d2f+0x14> + 8008bda: ea7f 5362 mvns.w r3, r2, asr #21 + 8008bde: d107 bne.n 8008bf0 <__aeabi_d2f+0x90> + 8008be0: ea50 3301 orrs.w r3, r0, r1, lsl #12 + 8008be4: bf1e ittt ne + 8008be6: f04f 40fe movne.w r0, #2130706432 @ 0x7f000000 + 8008bea: f440 0040 orrne.w r0, r0, #12582912 @ 0xc00000 + 8008bee: 4770 bxne lr + 8008bf0: f001 4000 and.w r0, r1, #2147483648 @ 0x80000000 + 8008bf4: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 + 8008bf8: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8008bfc: 4770 bx lr + 8008bfe: bf00 nop + +08008c00 <__aeabi_frsub>: + 8008c00: f080 4000 eor.w r0, r0, #2147483648 @ 0x80000000 + 8008c04: e002 b.n 8008c0c <__addsf3> + 8008c06: bf00 nop + +08008c08 <__aeabi_fsub>: + 8008c08: f081 4100 eor.w r1, r1, #2147483648 @ 0x80000000 + +08008c0c <__addsf3>: + 8008c0c: 0042 lsls r2, r0, #1 + 8008c0e: bf1f itttt ne + 8008c10: ea5f 0341 movsne.w r3, r1, lsl #1 + 8008c14: ea92 0f03 teqne r2, r3 + 8008c18: ea7f 6c22 mvnsne.w ip, r2, asr #24 + 8008c1c: ea7f 6c23 mvnsne.w ip, r3, asr #24 + 8008c20: d06a beq.n 8008cf8 <__addsf3+0xec> + 8008c22: ea4f 6212 mov.w r2, r2, lsr #24 + 8008c26: ebd2 6313 rsbs r3, r2, r3, lsr #24 + 8008c2a: bfc1 itttt gt + 8008c2c: 18d2 addgt r2, r2, r3 + 8008c2e: 4041 eorgt r1, r0 + 8008c30: 4048 eorgt r0, r1 + 8008c32: 4041 eorgt r1, r0 + 8008c34: bfb8 it lt + 8008c36: 425b neglt r3, r3 + 8008c38: 2b19 cmp r3, #25 + 8008c3a: bf88 it hi + 8008c3c: 4770 bxhi lr + 8008c3e: f010 4f00 tst.w r0, #2147483648 @ 0x80000000 + 8008c42: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8008c46: f020 407f bic.w r0, r0, #4278190080 @ 0xff000000 + 8008c4a: bf18 it ne + 8008c4c: 4240 negne r0, r0 + 8008c4e: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 + 8008c52: f441 0100 orr.w r1, r1, #8388608 @ 0x800000 + 8008c56: f021 417f bic.w r1, r1, #4278190080 @ 0xff000000 + 8008c5a: bf18 it ne + 8008c5c: 4249 negne r1, r1 + 8008c5e: ea92 0f03 teq r2, r3 + 8008c62: d03f beq.n 8008ce4 <__addsf3+0xd8> + 8008c64: f1a2 0201 sub.w r2, r2, #1 + 8008c68: fa41 fc03 asr.w ip, r1, r3 + 8008c6c: eb10 000c adds.w r0, r0, ip + 8008c70: f1c3 0320 rsb r3, r3, #32 + 8008c74: fa01 f103 lsl.w r1, r1, r3 + 8008c78: f000 4300 and.w r3, r0, #2147483648 @ 0x80000000 + 8008c7c: d502 bpl.n 8008c84 <__addsf3+0x78> + 8008c7e: 4249 negs r1, r1 + 8008c80: eb60 0040 sbc.w r0, r0, r0, lsl #1 + 8008c84: f5b0 0f00 cmp.w r0, #8388608 @ 0x800000 + 8008c88: d313 bcc.n 8008cb2 <__addsf3+0xa6> + 8008c8a: f1b0 7f80 cmp.w r0, #16777216 @ 0x1000000 + 8008c8e: d306 bcc.n 8008c9e <__addsf3+0x92> + 8008c90: 0840 lsrs r0, r0, #1 + 8008c92: ea4f 0131 mov.w r1, r1, rrx + 8008c96: f102 0201 add.w r2, r2, #1 + 8008c9a: 2afe cmp r2, #254 @ 0xfe + 8008c9c: d251 bcs.n 8008d42 <__addsf3+0x136> + 8008c9e: f1b1 4f00 cmp.w r1, #2147483648 @ 0x80000000 + 8008ca2: eb40 50c2 adc.w r0, r0, r2, lsl #23 + 8008ca6: bf08 it eq + 8008ca8: f020 0001 biceq.w r0, r0, #1 + 8008cac: ea40 0003 orr.w r0, r0, r3 + 8008cb0: 4770 bx lr + 8008cb2: 0049 lsls r1, r1, #1 + 8008cb4: eb40 0000 adc.w r0, r0, r0 + 8008cb8: 3a01 subs r2, #1 + 8008cba: bf28 it cs + 8008cbc: f5b0 0f00 cmpcs.w r0, #8388608 @ 0x800000 + 8008cc0: d2ed bcs.n 8008c9e <__addsf3+0x92> + 8008cc2: fab0 fc80 clz ip, r0 + 8008cc6: f1ac 0c08 sub.w ip, ip, #8 + 8008cca: ebb2 020c subs.w r2, r2, ip + 8008cce: fa00 f00c lsl.w r0, r0, ip + 8008cd2: bfaa itet ge + 8008cd4: eb00 50c2 addge.w r0, r0, r2, lsl #23 + 8008cd8: 4252 neglt r2, r2 + 8008cda: 4318 orrge r0, r3 + 8008cdc: bfbc itt lt + 8008cde: 40d0 lsrlt r0, r2 + 8008ce0: 4318 orrlt r0, r3 + 8008ce2: 4770 bx lr + 8008ce4: f092 0f00 teq r2, #0 + 8008ce8: f481 0100 eor.w r1, r1, #8388608 @ 0x800000 + 8008cec: bf06 itte eq + 8008cee: f480 0000 eoreq.w r0, r0, #8388608 @ 0x800000 + 8008cf2: 3201 addeq r2, #1 + 8008cf4: 3b01 subne r3, #1 + 8008cf6: e7b5 b.n 8008c64 <__addsf3+0x58> + 8008cf8: ea4f 0341 mov.w r3, r1, lsl #1 + 8008cfc: ea7f 6c22 mvns.w ip, r2, asr #24 + 8008d00: bf18 it ne + 8008d02: ea7f 6c23 mvnsne.w ip, r3, asr #24 + 8008d06: d021 beq.n 8008d4c <__addsf3+0x140> + 8008d08: ea92 0f03 teq r2, r3 + 8008d0c: d004 beq.n 8008d18 <__addsf3+0x10c> + 8008d0e: f092 0f00 teq r2, #0 + 8008d12: bf08 it eq + 8008d14: 4608 moveq r0, r1 + 8008d16: 4770 bx lr + 8008d18: ea90 0f01 teq r0, r1 + 8008d1c: bf1c itt ne + 8008d1e: 2000 movne r0, #0 + 8008d20: 4770 bxne lr + 8008d22: f012 4f7f tst.w r2, #4278190080 @ 0xff000000 + 8008d26: d104 bne.n 8008d32 <__addsf3+0x126> + 8008d28: 0040 lsls r0, r0, #1 + 8008d2a: bf28 it cs + 8008d2c: f040 4000 orrcs.w r0, r0, #2147483648 @ 0x80000000 + 8008d30: 4770 bx lr + 8008d32: f112 7200 adds.w r2, r2, #33554432 @ 0x2000000 + 8008d36: bf3c itt cc + 8008d38: f500 0000 addcc.w r0, r0, #8388608 @ 0x800000 + 8008d3c: 4770 bxcc lr + 8008d3e: f000 4300 and.w r3, r0, #2147483648 @ 0x80000000 + 8008d42: f043 40fe orr.w r0, r3, #2130706432 @ 0x7f000000 + 8008d46: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8008d4a: 4770 bx lr + 8008d4c: ea7f 6222 mvns.w r2, r2, asr #24 + 8008d50: bf16 itet ne + 8008d52: 4608 movne r0, r1 + 8008d54: ea7f 6323 mvnseq.w r3, r3, asr #24 + 8008d58: 4601 movne r1, r0 + 8008d5a: 0242 lsls r2, r0, #9 + 8008d5c: bf06 itte eq + 8008d5e: ea5f 2341 movseq.w r3, r1, lsl #9 + 8008d62: ea90 0f01 teqeq r0, r1 + 8008d66: f440 0080 orrne.w r0, r0, #4194304 @ 0x400000 + 8008d6a: 4770 bx lr + +08008d6c <__aeabi_ui2f>: + 8008d6c: f04f 0300 mov.w r3, #0 + 8008d70: e004 b.n 8008d7c <__aeabi_i2f+0x8> + 8008d72: bf00 nop + +08008d74 <__aeabi_i2f>: + 8008d74: f010 4300 ands.w r3, r0, #2147483648 @ 0x80000000 + 8008d78: bf48 it mi + 8008d7a: 4240 negmi r0, r0 + 8008d7c: ea5f 0c00 movs.w ip, r0 + 8008d80: bf08 it eq + 8008d82: 4770 bxeq lr + 8008d84: f043 4396 orr.w r3, r3, #1258291200 @ 0x4b000000 + 8008d88: 4601 mov r1, r0 + 8008d8a: f04f 0000 mov.w r0, #0 + 8008d8e: e01c b.n 8008dca <__aeabi_l2f+0x2a> + +08008d90 <__aeabi_ul2f>: + 8008d90: ea50 0201 orrs.w r2, r0, r1 + 8008d94: bf08 it eq + 8008d96: 4770 bxeq lr + 8008d98: f04f 0300 mov.w r3, #0 + 8008d9c: e00a b.n 8008db4 <__aeabi_l2f+0x14> + 8008d9e: bf00 nop + +08008da0 <__aeabi_l2f>: + 8008da0: ea50 0201 orrs.w r2, r0, r1 + 8008da4: bf08 it eq + 8008da6: 4770 bxeq lr + 8008da8: f011 4300 ands.w r3, r1, #2147483648 @ 0x80000000 + 8008dac: d502 bpl.n 8008db4 <__aeabi_l2f+0x14> + 8008dae: 4240 negs r0, r0 + 8008db0: eb61 0141 sbc.w r1, r1, r1, lsl #1 + 8008db4: ea5f 0c01 movs.w ip, r1 + 8008db8: bf02 ittt eq + 8008dba: 4684 moveq ip, r0 + 8008dbc: 4601 moveq r1, r0 + 8008dbe: 2000 moveq r0, #0 + 8008dc0: f043 43b6 orr.w r3, r3, #1526726656 @ 0x5b000000 + 8008dc4: bf08 it eq + 8008dc6: f1a3 5380 subeq.w r3, r3, #268435456 @ 0x10000000 + 8008dca: f5a3 0300 sub.w r3, r3, #8388608 @ 0x800000 + 8008dce: fabc f28c clz r2, ip + 8008dd2: 3a08 subs r2, #8 + 8008dd4: eba3 53c2 sub.w r3, r3, r2, lsl #23 + 8008dd8: db10 blt.n 8008dfc <__aeabi_l2f+0x5c> + 8008dda: fa01 fc02 lsl.w ip, r1, r2 + 8008dde: 4463 add r3, ip + 8008de0: fa00 fc02 lsl.w ip, r0, r2 + 8008de4: f1c2 0220 rsb r2, r2, #32 + 8008de8: f1bc 4f00 cmp.w ip, #2147483648 @ 0x80000000 + 8008dec: fa20 f202 lsr.w r2, r0, r2 + 8008df0: eb43 0002 adc.w r0, r3, r2 + 8008df4: bf08 it eq + 8008df6: f020 0001 biceq.w r0, r0, #1 + 8008dfa: 4770 bx lr + 8008dfc: f102 0220 add.w r2, r2, #32 + 8008e00: fa01 fc02 lsl.w ip, r1, r2 + 8008e04: f1c2 0220 rsb r2, r2, #32 + 8008e08: ea50 004c orrs.w r0, r0, ip, lsl #1 + 8008e0c: fa21 f202 lsr.w r2, r1, r2 + 8008e10: eb43 0002 adc.w r0, r3, r2 + 8008e14: bf08 it eq + 8008e16: ea20 70dc biceq.w r0, r0, ip, lsr #31 + 8008e1a: 4770 bx lr + +08008e1c <__aeabi_fmul>: + 8008e1c: f04f 0cff mov.w ip, #255 @ 0xff + 8008e20: ea1c 52d0 ands.w r2, ip, r0, lsr #23 + 8008e24: bf1e ittt ne + 8008e26: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 + 8008e2a: ea92 0f0c teqne r2, ip + 8008e2e: ea93 0f0c teqne r3, ip + 8008e32: d06f beq.n 8008f14 <__aeabi_fmul+0xf8> + 8008e34: 441a add r2, r3 + 8008e36: ea80 0c01 eor.w ip, r0, r1 + 8008e3a: 0240 lsls r0, r0, #9 + 8008e3c: bf18 it ne + 8008e3e: ea5f 2141 movsne.w r1, r1, lsl #9 + 8008e42: d01e beq.n 8008e82 <__aeabi_fmul+0x66> + 8008e44: f04f 6300 mov.w r3, #134217728 @ 0x8000000 + 8008e48: ea43 1050 orr.w r0, r3, r0, lsr #5 + 8008e4c: ea43 1151 orr.w r1, r3, r1, lsr #5 + 8008e50: fba0 3101 umull r3, r1, r0, r1 + 8008e54: f00c 4000 and.w r0, ip, #2147483648 @ 0x80000000 + 8008e58: f5b1 0f00 cmp.w r1, #8388608 @ 0x800000 + 8008e5c: bf3e ittt cc + 8008e5e: 0049 lslcc r1, r1, #1 + 8008e60: ea41 71d3 orrcc.w r1, r1, r3, lsr #31 + 8008e64: 005b lslcc r3, r3, #1 + 8008e66: ea40 0001 orr.w r0, r0, r1 + 8008e6a: f162 027f sbc.w r2, r2, #127 @ 0x7f + 8008e6e: 2afd cmp r2, #253 @ 0xfd + 8008e70: d81d bhi.n 8008eae <__aeabi_fmul+0x92> + 8008e72: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 + 8008e76: eb40 50c2 adc.w r0, r0, r2, lsl #23 + 8008e7a: bf08 it eq + 8008e7c: f020 0001 biceq.w r0, r0, #1 + 8008e80: 4770 bx lr + 8008e82: f090 0f00 teq r0, #0 + 8008e86: f00c 4c00 and.w ip, ip, #2147483648 @ 0x80000000 + 8008e8a: bf08 it eq + 8008e8c: 0249 lsleq r1, r1, #9 + 8008e8e: ea4c 2050 orr.w r0, ip, r0, lsr #9 + 8008e92: ea40 2051 orr.w r0, r0, r1, lsr #9 + 8008e96: 3a7f subs r2, #127 @ 0x7f + 8008e98: bfc2 ittt gt + 8008e9a: f1d2 03ff rsbsgt r3, r2, #255 @ 0xff + 8008e9e: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 + 8008ea2: 4770 bxgt lr + 8008ea4: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8008ea8: f04f 0300 mov.w r3, #0 + 8008eac: 3a01 subs r2, #1 + 8008eae: dc5d bgt.n 8008f6c <__aeabi_fmul+0x150> + 8008eb0: f112 0f19 cmn.w r2, #25 + 8008eb4: bfdc itt le + 8008eb6: f000 4000 andle.w r0, r0, #2147483648 @ 0x80000000 + 8008eba: 4770 bxle lr + 8008ebc: f1c2 0200 rsb r2, r2, #0 + 8008ec0: 0041 lsls r1, r0, #1 + 8008ec2: fa21 f102 lsr.w r1, r1, r2 + 8008ec6: f1c2 0220 rsb r2, r2, #32 + 8008eca: fa00 fc02 lsl.w ip, r0, r2 + 8008ece: ea5f 0031 movs.w r0, r1, rrx + 8008ed2: f140 0000 adc.w r0, r0, #0 + 8008ed6: ea53 034c orrs.w r3, r3, ip, lsl #1 + 8008eda: bf08 it eq + 8008edc: ea20 70dc biceq.w r0, r0, ip, lsr #31 + 8008ee0: 4770 bx lr + 8008ee2: f092 0f00 teq r2, #0 + 8008ee6: f000 4c00 and.w ip, r0, #2147483648 @ 0x80000000 + 8008eea: bf02 ittt eq + 8008eec: 0040 lsleq r0, r0, #1 + 8008eee: f410 0f00 tsteq.w r0, #8388608 @ 0x800000 + 8008ef2: 3a01 subeq r2, #1 + 8008ef4: d0f9 beq.n 8008eea <__aeabi_fmul+0xce> + 8008ef6: ea40 000c orr.w r0, r0, ip + 8008efa: f093 0f00 teq r3, #0 + 8008efe: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 + 8008f02: bf02 ittt eq + 8008f04: 0049 lsleq r1, r1, #1 + 8008f06: f411 0f00 tsteq.w r1, #8388608 @ 0x800000 + 8008f0a: 3b01 subeq r3, #1 + 8008f0c: d0f9 beq.n 8008f02 <__aeabi_fmul+0xe6> + 8008f0e: ea41 010c orr.w r1, r1, ip + 8008f12: e78f b.n 8008e34 <__aeabi_fmul+0x18> + 8008f14: ea0c 53d1 and.w r3, ip, r1, lsr #23 + 8008f18: ea92 0f0c teq r2, ip + 8008f1c: bf18 it ne + 8008f1e: ea93 0f0c teqne r3, ip + 8008f22: d00a beq.n 8008f3a <__aeabi_fmul+0x11e> + 8008f24: f030 4c00 bics.w ip, r0, #2147483648 @ 0x80000000 + 8008f28: bf18 it ne + 8008f2a: f031 4c00 bicsne.w ip, r1, #2147483648 @ 0x80000000 + 8008f2e: d1d8 bne.n 8008ee2 <__aeabi_fmul+0xc6> + 8008f30: ea80 0001 eor.w r0, r0, r1 + 8008f34: f000 4000 and.w r0, r0, #2147483648 @ 0x80000000 + 8008f38: 4770 bx lr + 8008f3a: f090 0f00 teq r0, #0 + 8008f3e: bf17 itett ne + 8008f40: f090 4f00 teqne r0, #2147483648 @ 0x80000000 + 8008f44: 4608 moveq r0, r1 + 8008f46: f091 0f00 teqne r1, #0 + 8008f4a: f091 4f00 teqne r1, #2147483648 @ 0x80000000 + 8008f4e: d014 beq.n 8008f7a <__aeabi_fmul+0x15e> + 8008f50: ea92 0f0c teq r2, ip + 8008f54: d101 bne.n 8008f5a <__aeabi_fmul+0x13e> + 8008f56: 0242 lsls r2, r0, #9 + 8008f58: d10f bne.n 8008f7a <__aeabi_fmul+0x15e> + 8008f5a: ea93 0f0c teq r3, ip + 8008f5e: d103 bne.n 8008f68 <__aeabi_fmul+0x14c> + 8008f60: 024b lsls r3, r1, #9 + 8008f62: bf18 it ne + 8008f64: 4608 movne r0, r1 + 8008f66: d108 bne.n 8008f7a <__aeabi_fmul+0x15e> + 8008f68: ea80 0001 eor.w r0, r0, r1 + 8008f6c: f000 4000 and.w r0, r0, #2147483648 @ 0x80000000 + 8008f70: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 + 8008f74: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8008f78: 4770 bx lr + 8008f7a: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 + 8008f7e: f440 0040 orr.w r0, r0, #12582912 @ 0xc00000 + 8008f82: 4770 bx lr + +08008f84 <__aeabi_fdiv>: + 8008f84: f04f 0cff mov.w ip, #255 @ 0xff + 8008f88: ea1c 52d0 ands.w r2, ip, r0, lsr #23 + 8008f8c: bf1e ittt ne + 8008f8e: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 + 8008f92: ea92 0f0c teqne r2, ip + 8008f96: ea93 0f0c teqne r3, ip + 8008f9a: d069 beq.n 8009070 <__aeabi_fdiv+0xec> + 8008f9c: eba2 0203 sub.w r2, r2, r3 + 8008fa0: ea80 0c01 eor.w ip, r0, r1 + 8008fa4: 0249 lsls r1, r1, #9 + 8008fa6: ea4f 2040 mov.w r0, r0, lsl #9 + 8008faa: d037 beq.n 800901c <__aeabi_fdiv+0x98> + 8008fac: f04f 5380 mov.w r3, #268435456 @ 0x10000000 + 8008fb0: ea43 1111 orr.w r1, r3, r1, lsr #4 + 8008fb4: ea43 1310 orr.w r3, r3, r0, lsr #4 + 8008fb8: f00c 4000 and.w r0, ip, #2147483648 @ 0x80000000 + 8008fbc: 428b cmp r3, r1 + 8008fbe: bf38 it cc + 8008fc0: 005b lslcc r3, r3, #1 + 8008fc2: f142 027d adc.w r2, r2, #125 @ 0x7d + 8008fc6: f44f 0c00 mov.w ip, #8388608 @ 0x800000 + 8008fca: 428b cmp r3, r1 + 8008fcc: bf24 itt cs + 8008fce: 1a5b subcs r3, r3, r1 + 8008fd0: ea40 000c orrcs.w r0, r0, ip + 8008fd4: ebb3 0f51 cmp.w r3, r1, lsr #1 + 8008fd8: bf24 itt cs + 8008fda: eba3 0351 subcs.w r3, r3, r1, lsr #1 + 8008fde: ea40 005c orrcs.w r0, r0, ip, lsr #1 + 8008fe2: ebb3 0f91 cmp.w r3, r1, lsr #2 + 8008fe6: bf24 itt cs + 8008fe8: eba3 0391 subcs.w r3, r3, r1, lsr #2 + 8008fec: ea40 009c orrcs.w r0, r0, ip, lsr #2 + 8008ff0: ebb3 0fd1 cmp.w r3, r1, lsr #3 + 8008ff4: bf24 itt cs + 8008ff6: eba3 03d1 subcs.w r3, r3, r1, lsr #3 + 8008ffa: ea40 00dc orrcs.w r0, r0, ip, lsr #3 + 8008ffe: 011b lsls r3, r3, #4 + 8009000: bf18 it ne + 8009002: ea5f 1c1c movsne.w ip, ip, lsr #4 + 8009006: d1e0 bne.n 8008fca <__aeabi_fdiv+0x46> + 8009008: 2afd cmp r2, #253 @ 0xfd + 800900a: f63f af50 bhi.w 8008eae <__aeabi_fmul+0x92> + 800900e: 428b cmp r3, r1 + 8009010: eb40 50c2 adc.w r0, r0, r2, lsl #23 + 8009014: bf08 it eq + 8009016: f020 0001 biceq.w r0, r0, #1 + 800901a: 4770 bx lr + 800901c: f00c 4c00 and.w ip, ip, #2147483648 @ 0x80000000 + 8009020: ea4c 2050 orr.w r0, ip, r0, lsr #9 + 8009024: 327f adds r2, #127 @ 0x7f + 8009026: bfc2 ittt gt + 8009028: f1d2 03ff rsbsgt r3, r2, #255 @ 0xff + 800902c: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 + 8009030: 4770 bxgt lr + 8009032: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 + 8009036: f04f 0300 mov.w r3, #0 + 800903a: 3a01 subs r2, #1 + 800903c: e737 b.n 8008eae <__aeabi_fmul+0x92> + 800903e: f092 0f00 teq r2, #0 + 8009042: f000 4c00 and.w ip, r0, #2147483648 @ 0x80000000 + 8009046: bf02 ittt eq + 8009048: 0040 lsleq r0, r0, #1 + 800904a: f410 0f00 tsteq.w r0, #8388608 @ 0x800000 + 800904e: 3a01 subeq r2, #1 + 8009050: d0f9 beq.n 8009046 <__aeabi_fdiv+0xc2> + 8009052: ea40 000c orr.w r0, r0, ip + 8009056: f093 0f00 teq r3, #0 + 800905a: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 + 800905e: bf02 ittt eq + 8009060: 0049 lsleq r1, r1, #1 + 8009062: f411 0f00 tsteq.w r1, #8388608 @ 0x800000 + 8009066: 3b01 subeq r3, #1 + 8009068: d0f9 beq.n 800905e <__aeabi_fdiv+0xda> + 800906a: ea41 010c orr.w r1, r1, ip + 800906e: e795 b.n 8008f9c <__aeabi_fdiv+0x18> + 8009070: ea0c 53d1 and.w r3, ip, r1, lsr #23 + 8009074: ea92 0f0c teq r2, ip + 8009078: d108 bne.n 800908c <__aeabi_fdiv+0x108> + 800907a: 0242 lsls r2, r0, #9 + 800907c: f47f af7d bne.w 8008f7a <__aeabi_fmul+0x15e> + 8009080: ea93 0f0c teq r3, ip + 8009084: f47f af70 bne.w 8008f68 <__aeabi_fmul+0x14c> + 8009088: 4608 mov r0, r1 + 800908a: e776 b.n 8008f7a <__aeabi_fmul+0x15e> + 800908c: ea93 0f0c teq r3, ip + 8009090: d104 bne.n 800909c <__aeabi_fdiv+0x118> + 8009092: 024b lsls r3, r1, #9 + 8009094: f43f af4c beq.w 8008f30 <__aeabi_fmul+0x114> + 8009098: 4608 mov r0, r1 + 800909a: e76e b.n 8008f7a <__aeabi_fmul+0x15e> + 800909c: f030 4c00 bics.w ip, r0, #2147483648 @ 0x80000000 + 80090a0: bf18 it ne + 80090a2: f031 4c00 bicsne.w ip, r1, #2147483648 @ 0x80000000 + 80090a6: d1ca bne.n 800903e <__aeabi_fdiv+0xba> + 80090a8: f030 4200 bics.w r2, r0, #2147483648 @ 0x80000000 + 80090ac: f47f af5c bne.w 8008f68 <__aeabi_fmul+0x14c> + 80090b0: f031 4300 bics.w r3, r1, #2147483648 @ 0x80000000 + 80090b4: f47f af3c bne.w 8008f30 <__aeabi_fmul+0x114> + 80090b8: e75f b.n 8008f7a <__aeabi_fmul+0x15e> + 80090ba: bf00 nop + +080090bc <__gesf2>: + 80090bc: f04f 3cff mov.w ip, #4294967295 @ 0xffffffff + 80090c0: e006 b.n 80090d0 <__cmpsf2+0x4> + 80090c2: bf00 nop + +080090c4 <__lesf2>: + 80090c4: f04f 0c01 mov.w ip, #1 + 80090c8: e002 b.n 80090d0 <__cmpsf2+0x4> + 80090ca: bf00 nop + +080090cc <__cmpsf2>: + 80090cc: f04f 0c01 mov.w ip, #1 + 80090d0: f84d cd04 str.w ip, [sp, #-4]! + 80090d4: ea4f 0240 mov.w r2, r0, lsl #1 + 80090d8: ea4f 0341 mov.w r3, r1, lsl #1 + 80090dc: ea7f 6c22 mvns.w ip, r2, asr #24 + 80090e0: bf18 it ne + 80090e2: ea7f 6c23 mvnsne.w ip, r3, asr #24 + 80090e6: d011 beq.n 800910c <__cmpsf2+0x40> + 80090e8: b001 add sp, #4 + 80090ea: ea52 0c53 orrs.w ip, r2, r3, lsr #1 + 80090ee: bf18 it ne + 80090f0: ea90 0f01 teqne r0, r1 + 80090f4: bf58 it pl + 80090f6: ebb2 0003 subspl.w r0, r2, r3 + 80090fa: bf88 it hi + 80090fc: 17c8 asrhi r0, r1, #31 + 80090fe: bf38 it cc + 8009100: ea6f 70e1 mvncc.w r0, r1, asr #31 + 8009104: bf18 it ne + 8009106: f040 0001 orrne.w r0, r0, #1 + 800910a: 4770 bx lr + 800910c: ea7f 6c22 mvns.w ip, r2, asr #24 + 8009110: d102 bne.n 8009118 <__cmpsf2+0x4c> + 8009112: ea5f 2c40 movs.w ip, r0, lsl #9 + 8009116: d105 bne.n 8009124 <__cmpsf2+0x58> + 8009118: ea7f 6c23 mvns.w ip, r3, asr #24 + 800911c: d1e4 bne.n 80090e8 <__cmpsf2+0x1c> + 800911e: ea5f 2c41 movs.w ip, r1, lsl #9 + 8009122: d0e1 beq.n 80090e8 <__cmpsf2+0x1c> + 8009124: f85d 0b04 ldr.w r0, [sp], #4 + 8009128: 4770 bx lr + 800912a: bf00 nop + +0800912c <__aeabi_cfrcmple>: + 800912c: 4684 mov ip, r0 + 800912e: 4608 mov r0, r1 + 8009130: 4661 mov r1, ip + 8009132: e7ff b.n 8009134 <__aeabi_cfcmpeq> + +08009134 <__aeabi_cfcmpeq>: + 8009134: b50f push {r0, r1, r2, r3, lr} + 8009136: f7ff ffc9 bl 80090cc <__cmpsf2> + 800913a: 2800 cmp r0, #0 + 800913c: bf48 it mi + 800913e: f110 0f00 cmnmi.w r0, #0 + 8009142: bd0f pop {r0, r1, r2, r3, pc} + +08009144 <__aeabi_fcmpeq>: + 8009144: f84d ed08 str.w lr, [sp, #-8]! + 8009148: f7ff fff4 bl 8009134 <__aeabi_cfcmpeq> + 800914c: bf0c ite eq + 800914e: 2001 moveq r0, #1 + 8009150: 2000 movne r0, #0 + 8009152: f85d fb08 ldr.w pc, [sp], #8 + 8009156: bf00 nop + +08009158 <__aeabi_fcmplt>: + 8009158: f84d ed08 str.w lr, [sp, #-8]! + 800915c: f7ff ffea bl 8009134 <__aeabi_cfcmpeq> + 8009160: bf34 ite cc + 8009162: 2001 movcc r0, #1 + 8009164: 2000 movcs r0, #0 + 8009166: f85d fb08 ldr.w pc, [sp], #8 + 800916a: bf00 nop + +0800916c <__aeabi_fcmple>: + 800916c: f84d ed08 str.w lr, [sp, #-8]! + 8009170: f7ff ffe0 bl 8009134 <__aeabi_cfcmpeq> + 8009174: bf94 ite ls + 8009176: 2001 movls r0, #1 + 8009178: 2000 movhi r0, #0 + 800917a: f85d fb08 ldr.w pc, [sp], #8 + 800917e: bf00 nop + +08009180 <__aeabi_fcmpge>: + 8009180: f84d ed08 str.w lr, [sp, #-8]! + 8009184: f7ff ffd2 bl 800912c <__aeabi_cfrcmple> + 8009188: bf94 ite ls + 800918a: 2001 movls r0, #1 + 800918c: 2000 movhi r0, #0 + 800918e: f85d fb08 ldr.w pc, [sp], #8 + 8009192: bf00 nop + +08009194 <__aeabi_fcmpgt>: + 8009194: f84d ed08 str.w lr, [sp, #-8]! + 8009198: f7ff ffc8 bl 800912c <__aeabi_cfrcmple> + 800919c: bf34 ite cc + 800919e: 2001 movcc r0, #1 + 80091a0: 2000 movcs r0, #0 + 80091a2: f85d fb08 ldr.w pc, [sp], #8 + 80091a6: bf00 nop + +080091a8 <__aeabi_f2iz>: + 80091a8: ea4f 0240 mov.w r2, r0, lsl #1 + 80091ac: f1b2 4ffe cmp.w r2, #2130706432 @ 0x7f000000 + 80091b0: d30f bcc.n 80091d2 <__aeabi_f2iz+0x2a> + 80091b2: f04f 039e mov.w r3, #158 @ 0x9e + 80091b6: ebb3 6212 subs.w r2, r3, r2, lsr #24 + 80091ba: d90d bls.n 80091d8 <__aeabi_f2iz+0x30> + 80091bc: ea4f 2300 mov.w r3, r0, lsl #8 + 80091c0: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000 + 80091c4: f010 4f00 tst.w r0, #2147483648 @ 0x80000000 + 80091c8: fa23 f002 lsr.w r0, r3, r2 + 80091cc: bf18 it ne + 80091ce: 4240 negne r0, r0 + 80091d0: 4770 bx lr + 80091d2: f04f 0000 mov.w r0, #0 + 80091d6: 4770 bx lr + 80091d8: f112 0f61 cmn.w r2, #97 @ 0x61 + 80091dc: d101 bne.n 80091e2 <__aeabi_f2iz+0x3a> + 80091de: 0242 lsls r2, r0, #9 + 80091e0: d105 bne.n 80091ee <__aeabi_f2iz+0x46> + 80091e2: f010 4000 ands.w r0, r0, #2147483648 @ 0x80000000 + 80091e6: bf08 it eq + 80091e8: f06f 4000 mvneq.w r0, #2147483648 @ 0x80000000 + 80091ec: 4770 bx lr + 80091ee: f04f 0000 mov.w r0, #0 + 80091f2: 4770 bx lr + +080091f4 <__aeabi_uldivmod>: + 80091f4: b953 cbnz r3, 800920c <__aeabi_uldivmod+0x18> + 80091f6: b94a cbnz r2, 800920c <__aeabi_uldivmod+0x18> + 80091f8: 2900 cmp r1, #0 + 80091fa: bf08 it eq + 80091fc: 2800 cmpeq r0, #0 + 80091fe: bf1c itt ne + 8009200: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff + 8009204: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff + 8009208: f000 b98c b.w 8009524 <__aeabi_idiv0> + 800920c: f1ad 0c08 sub.w ip, sp, #8 + 8009210: e96d ce04 strd ip, lr, [sp, #-16]! + 8009214: f000 f806 bl 8009224 <__udivmoddi4> + 8009218: f8dd e004 ldr.w lr, [sp, #4] + 800921c: e9dd 2302 ldrd r2, r3, [sp, #8] + 8009220: b004 add sp, #16 + 8009222: 4770 bx lr + +08009224 <__udivmoddi4>: + 8009224: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8009228: 9d08 ldr r5, [sp, #32] + 800922a: 468e mov lr, r1 + 800922c: 4604 mov r4, r0 + 800922e: 4688 mov r8, r1 + 8009230: 2b00 cmp r3, #0 + 8009232: d14a bne.n 80092ca <__udivmoddi4+0xa6> + 8009234: 428a cmp r2, r1 + 8009236: 4617 mov r7, r2 + 8009238: d962 bls.n 8009300 <__udivmoddi4+0xdc> + 800923a: fab2 f682 clz r6, r2 + 800923e: b14e cbz r6, 8009254 <__udivmoddi4+0x30> + 8009240: f1c6 0320 rsb r3, r6, #32 + 8009244: fa01 f806 lsl.w r8, r1, r6 + 8009248: fa20 f303 lsr.w r3, r0, r3 + 800924c: 40b7 lsls r7, r6 + 800924e: ea43 0808 orr.w r8, r3, r8 + 8009252: 40b4 lsls r4, r6 + 8009254: ea4f 4e17 mov.w lr, r7, lsr #16 + 8009258: fbb8 f1fe udiv r1, r8, lr + 800925c: fa1f fc87 uxth.w ip, r7 + 8009260: fb0e 8811 mls r8, lr, r1, r8 + 8009264: fb01 f20c mul.w r2, r1, ip + 8009268: 0c23 lsrs r3, r4, #16 + 800926a: ea43 4308 orr.w r3, r3, r8, lsl #16 + 800926e: 429a cmp r2, r3 + 8009270: d909 bls.n 8009286 <__udivmoddi4+0x62> + 8009272: 18fb adds r3, r7, r3 + 8009274: f101 30ff add.w r0, r1, #4294967295 @ 0xffffffff + 8009278: f080 80eb bcs.w 8009452 <__udivmoddi4+0x22e> + 800927c: 429a cmp r2, r3 + 800927e: f240 80e8 bls.w 8009452 <__udivmoddi4+0x22e> + 8009282: 3902 subs r1, #2 + 8009284: 443b add r3, r7 + 8009286: 1a9a subs r2, r3, r2 + 8009288: fbb2 f0fe udiv r0, r2, lr + 800928c: fb0e 2210 mls r2, lr, r0, r2 + 8009290: fb00 fc0c mul.w ip, r0, ip + 8009294: b2a3 uxth r3, r4 + 8009296: ea43 4302 orr.w r3, r3, r2, lsl #16 + 800929a: 459c cmp ip, r3 + 800929c: d909 bls.n 80092b2 <__udivmoddi4+0x8e> + 800929e: 18fb adds r3, r7, r3 + 80092a0: f100 32ff add.w r2, r0, #4294967295 @ 0xffffffff + 80092a4: f080 80d7 bcs.w 8009456 <__udivmoddi4+0x232> + 80092a8: 459c cmp ip, r3 + 80092aa: f240 80d4 bls.w 8009456 <__udivmoddi4+0x232> + 80092ae: 443b add r3, r7 + 80092b0: 3802 subs r0, #2 + 80092b2: ea40 4001 orr.w r0, r0, r1, lsl #16 + 80092b6: 2100 movs r1, #0 + 80092b8: eba3 030c sub.w r3, r3, ip + 80092bc: b11d cbz r5, 80092c6 <__udivmoddi4+0xa2> + 80092be: 2200 movs r2, #0 + 80092c0: 40f3 lsrs r3, r6 + 80092c2: e9c5 3200 strd r3, r2, [r5] + 80092c6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80092ca: 428b cmp r3, r1 + 80092cc: d905 bls.n 80092da <__udivmoddi4+0xb6> + 80092ce: b10d cbz r5, 80092d4 <__udivmoddi4+0xb0> + 80092d0: e9c5 0100 strd r0, r1, [r5] + 80092d4: 2100 movs r1, #0 + 80092d6: 4608 mov r0, r1 + 80092d8: e7f5 b.n 80092c6 <__udivmoddi4+0xa2> + 80092da: fab3 f183 clz r1, r3 + 80092de: 2900 cmp r1, #0 + 80092e0: d146 bne.n 8009370 <__udivmoddi4+0x14c> + 80092e2: 4573 cmp r3, lr + 80092e4: d302 bcc.n 80092ec <__udivmoddi4+0xc8> + 80092e6: 4282 cmp r2, r0 + 80092e8: f200 8108 bhi.w 80094fc <__udivmoddi4+0x2d8> + 80092ec: 1a84 subs r4, r0, r2 + 80092ee: eb6e 0203 sbc.w r2, lr, r3 + 80092f2: 2001 movs r0, #1 + 80092f4: 4690 mov r8, r2 + 80092f6: 2d00 cmp r5, #0 + 80092f8: d0e5 beq.n 80092c6 <__udivmoddi4+0xa2> + 80092fa: e9c5 4800 strd r4, r8, [r5] + 80092fe: e7e2 b.n 80092c6 <__udivmoddi4+0xa2> + 8009300: 2a00 cmp r2, #0 + 8009302: f000 8091 beq.w 8009428 <__udivmoddi4+0x204> + 8009306: fab2 f682 clz r6, r2 + 800930a: 2e00 cmp r6, #0 + 800930c: f040 80a5 bne.w 800945a <__udivmoddi4+0x236> + 8009310: 1a8a subs r2, r1, r2 + 8009312: 2101 movs r1, #1 + 8009314: 0c03 lsrs r3, r0, #16 + 8009316: ea4f 4e17 mov.w lr, r7, lsr #16 + 800931a: b280 uxth r0, r0 + 800931c: b2bc uxth r4, r7 + 800931e: fbb2 fcfe udiv ip, r2, lr + 8009322: fb0e 221c mls r2, lr, ip, r2 + 8009326: ea43 4302 orr.w r3, r3, r2, lsl #16 + 800932a: fb04 f20c mul.w r2, r4, ip + 800932e: 429a cmp r2, r3 + 8009330: d907 bls.n 8009342 <__udivmoddi4+0x11e> + 8009332: 18fb adds r3, r7, r3 + 8009334: f10c 38ff add.w r8, ip, #4294967295 @ 0xffffffff + 8009338: d202 bcs.n 8009340 <__udivmoddi4+0x11c> + 800933a: 429a cmp r2, r3 + 800933c: f200 80e3 bhi.w 8009506 <__udivmoddi4+0x2e2> + 8009340: 46c4 mov ip, r8 + 8009342: 1a9b subs r3, r3, r2 + 8009344: fbb3 f2fe udiv r2, r3, lr + 8009348: fb0e 3312 mls r3, lr, r2, r3 + 800934c: fb02 f404 mul.w r4, r2, r4 + 8009350: ea40 4303 orr.w r3, r0, r3, lsl #16 + 8009354: 429c cmp r4, r3 + 8009356: d907 bls.n 8009368 <__udivmoddi4+0x144> + 8009358: 18fb adds r3, r7, r3 + 800935a: f102 30ff add.w r0, r2, #4294967295 @ 0xffffffff + 800935e: d202 bcs.n 8009366 <__udivmoddi4+0x142> + 8009360: 429c cmp r4, r3 + 8009362: f200 80cd bhi.w 8009500 <__udivmoddi4+0x2dc> + 8009366: 4602 mov r2, r0 + 8009368: 1b1b subs r3, r3, r4 + 800936a: ea42 400c orr.w r0, r2, ip, lsl #16 + 800936e: e7a5 b.n 80092bc <__udivmoddi4+0x98> + 8009370: f1c1 0620 rsb r6, r1, #32 + 8009374: 408b lsls r3, r1 + 8009376: fa22 f706 lsr.w r7, r2, r6 + 800937a: 431f orrs r7, r3 + 800937c: fa2e fa06 lsr.w sl, lr, r6 + 8009380: ea4f 4917 mov.w r9, r7, lsr #16 + 8009384: fbba f8f9 udiv r8, sl, r9 + 8009388: fa0e fe01 lsl.w lr, lr, r1 + 800938c: fa20 f306 lsr.w r3, r0, r6 + 8009390: fb09 aa18 mls sl, r9, r8, sl + 8009394: fa1f fc87 uxth.w ip, r7 + 8009398: ea43 030e orr.w r3, r3, lr + 800939c: fa00 fe01 lsl.w lr, r0, r1 + 80093a0: fb08 f00c mul.w r0, r8, ip + 80093a4: 0c1c lsrs r4, r3, #16 + 80093a6: ea44 440a orr.w r4, r4, sl, lsl #16 + 80093aa: 42a0 cmp r0, r4 + 80093ac: fa02 f201 lsl.w r2, r2, r1 + 80093b0: d90a bls.n 80093c8 <__udivmoddi4+0x1a4> + 80093b2: 193c adds r4, r7, r4 + 80093b4: f108 3aff add.w sl, r8, #4294967295 @ 0xffffffff + 80093b8: f080 809e bcs.w 80094f8 <__udivmoddi4+0x2d4> + 80093bc: 42a0 cmp r0, r4 + 80093be: f240 809b bls.w 80094f8 <__udivmoddi4+0x2d4> + 80093c2: f1a8 0802 sub.w r8, r8, #2 + 80093c6: 443c add r4, r7 + 80093c8: 1a24 subs r4, r4, r0 + 80093ca: b298 uxth r0, r3 + 80093cc: fbb4 f3f9 udiv r3, r4, r9 + 80093d0: fb09 4413 mls r4, r9, r3, r4 + 80093d4: fb03 fc0c mul.w ip, r3, ip + 80093d8: ea40 4404 orr.w r4, r0, r4, lsl #16 + 80093dc: 45a4 cmp ip, r4 + 80093de: d909 bls.n 80093f4 <__udivmoddi4+0x1d0> + 80093e0: 193c adds r4, r7, r4 + 80093e2: f103 30ff add.w r0, r3, #4294967295 @ 0xffffffff + 80093e6: f080 8085 bcs.w 80094f4 <__udivmoddi4+0x2d0> + 80093ea: 45a4 cmp ip, r4 + 80093ec: f240 8082 bls.w 80094f4 <__udivmoddi4+0x2d0> + 80093f0: 3b02 subs r3, #2 + 80093f2: 443c add r4, r7 + 80093f4: ea43 4008 orr.w r0, r3, r8, lsl #16 + 80093f8: eba4 040c sub.w r4, r4, ip + 80093fc: fba0 8c02 umull r8, ip, r0, r2 + 8009400: 4564 cmp r4, ip + 8009402: 4643 mov r3, r8 + 8009404: 46e1 mov r9, ip + 8009406: d364 bcc.n 80094d2 <__udivmoddi4+0x2ae> + 8009408: d061 beq.n 80094ce <__udivmoddi4+0x2aa> + 800940a: b15d cbz r5, 8009424 <__udivmoddi4+0x200> + 800940c: ebbe 0203 subs.w r2, lr, r3 + 8009410: eb64 0409 sbc.w r4, r4, r9 + 8009414: fa04 f606 lsl.w r6, r4, r6 + 8009418: fa22 f301 lsr.w r3, r2, r1 + 800941c: 431e orrs r6, r3 + 800941e: 40cc lsrs r4, r1 + 8009420: e9c5 6400 strd r6, r4, [r5] + 8009424: 2100 movs r1, #0 + 8009426: e74e b.n 80092c6 <__udivmoddi4+0xa2> + 8009428: fbb1 fcf2 udiv ip, r1, r2 + 800942c: 0c01 lsrs r1, r0, #16 + 800942e: ea41 410e orr.w r1, r1, lr, lsl #16 + 8009432: b280 uxth r0, r0 + 8009434: ea40 4201 orr.w r2, r0, r1, lsl #16 + 8009438: 463b mov r3, r7 + 800943a: fbb1 f1f7 udiv r1, r1, r7 + 800943e: 4638 mov r0, r7 + 8009440: 463c mov r4, r7 + 8009442: 46b8 mov r8, r7 + 8009444: 46be mov lr, r7 + 8009446: 2620 movs r6, #32 + 8009448: eba2 0208 sub.w r2, r2, r8 + 800944c: ea41 410c orr.w r1, r1, ip, lsl #16 + 8009450: e765 b.n 800931e <__udivmoddi4+0xfa> + 8009452: 4601 mov r1, r0 + 8009454: e717 b.n 8009286 <__udivmoddi4+0x62> + 8009456: 4610 mov r0, r2 + 8009458: e72b b.n 80092b2 <__udivmoddi4+0x8e> + 800945a: f1c6 0120 rsb r1, r6, #32 + 800945e: fa2e fc01 lsr.w ip, lr, r1 + 8009462: 40b7 lsls r7, r6 + 8009464: fa0e fe06 lsl.w lr, lr, r6 + 8009468: fa20 f101 lsr.w r1, r0, r1 + 800946c: ea41 010e orr.w r1, r1, lr + 8009470: ea4f 4e17 mov.w lr, r7, lsr #16 + 8009474: fbbc f8fe udiv r8, ip, lr + 8009478: b2bc uxth r4, r7 + 800947a: fb0e cc18 mls ip, lr, r8, ip + 800947e: fb08 f904 mul.w r9, r8, r4 + 8009482: 0c0a lsrs r2, r1, #16 + 8009484: ea42 420c orr.w r2, r2, ip, lsl #16 + 8009488: 40b0 lsls r0, r6 + 800948a: 4591 cmp r9, r2 + 800948c: ea4f 4310 mov.w r3, r0, lsr #16 + 8009490: b280 uxth r0, r0 + 8009492: d93e bls.n 8009512 <__udivmoddi4+0x2ee> + 8009494: 18ba adds r2, r7, r2 + 8009496: f108 3cff add.w ip, r8, #4294967295 @ 0xffffffff + 800949a: d201 bcs.n 80094a0 <__udivmoddi4+0x27c> + 800949c: 4591 cmp r9, r2 + 800949e: d81f bhi.n 80094e0 <__udivmoddi4+0x2bc> + 80094a0: eba2 0209 sub.w r2, r2, r9 + 80094a4: fbb2 f9fe udiv r9, r2, lr + 80094a8: fb09 f804 mul.w r8, r9, r4 + 80094ac: fb0e 2a19 mls sl, lr, r9, r2 + 80094b0: b28a uxth r2, r1 + 80094b2: ea42 420a orr.w r2, r2, sl, lsl #16 + 80094b6: 4542 cmp r2, r8 + 80094b8: d229 bcs.n 800950e <__udivmoddi4+0x2ea> + 80094ba: 18ba adds r2, r7, r2 + 80094bc: f109 31ff add.w r1, r9, #4294967295 @ 0xffffffff + 80094c0: d2c2 bcs.n 8009448 <__udivmoddi4+0x224> + 80094c2: 4542 cmp r2, r8 + 80094c4: d2c0 bcs.n 8009448 <__udivmoddi4+0x224> + 80094c6: f1a9 0102 sub.w r1, r9, #2 + 80094ca: 443a add r2, r7 + 80094cc: e7bc b.n 8009448 <__udivmoddi4+0x224> + 80094ce: 45c6 cmp lr, r8 + 80094d0: d29b bcs.n 800940a <__udivmoddi4+0x1e6> + 80094d2: ebb8 0302 subs.w r3, r8, r2 + 80094d6: eb6c 0c07 sbc.w ip, ip, r7 + 80094da: 3801 subs r0, #1 + 80094dc: 46e1 mov r9, ip + 80094de: e794 b.n 800940a <__udivmoddi4+0x1e6> + 80094e0: eba7 0909 sub.w r9, r7, r9 + 80094e4: 444a add r2, r9 + 80094e6: fbb2 f9fe udiv r9, r2, lr + 80094ea: f1a8 0c02 sub.w ip, r8, #2 + 80094ee: fb09 f804 mul.w r8, r9, r4 + 80094f2: e7db b.n 80094ac <__udivmoddi4+0x288> + 80094f4: 4603 mov r3, r0 + 80094f6: e77d b.n 80093f4 <__udivmoddi4+0x1d0> + 80094f8: 46d0 mov r8, sl + 80094fa: e765 b.n 80093c8 <__udivmoddi4+0x1a4> + 80094fc: 4608 mov r0, r1 + 80094fe: e6fa b.n 80092f6 <__udivmoddi4+0xd2> + 8009500: 443b add r3, r7 + 8009502: 3a02 subs r2, #2 + 8009504: e730 b.n 8009368 <__udivmoddi4+0x144> + 8009506: f1ac 0c02 sub.w ip, ip, #2 + 800950a: 443b add r3, r7 + 800950c: e719 b.n 8009342 <__udivmoddi4+0x11e> + 800950e: 4649 mov r1, r9 + 8009510: e79a b.n 8009448 <__udivmoddi4+0x224> + 8009512: eba2 0209 sub.w r2, r2, r9 + 8009516: fbb2 f9fe udiv r9, r2, lr + 800951a: 46c4 mov ip, r8 + 800951c: fb09 f804 mul.w r8, r9, r4 + 8009520: e7c4 b.n 80094ac <__udivmoddi4+0x288> + 8009522: bf00 nop + +08009524 <__aeabi_idiv0>: + 8009524: 4770 bx lr + 8009526: bf00 nop + +08009528 : + +ADC_HandleTypeDef hadc1; + +/* ADC1 init function */ +void MX_ADC1_Init(void) +{ + 8009528: b580 push {r7, lr} + 800952a: b084 sub sp, #16 + 800952c: af00 add r7, sp, #0 + + /* USER CODE BEGIN ADC1_Init 0 */ + + /* USER CODE END ADC1_Init 0 */ + + ADC_ChannelConfTypeDef sConfig = {0}; + 800952e: 1d3b adds r3, r7, #4 + 8009530: 2200 movs r2, #0 + 8009532: 601a str r2, [r3, #0] + 8009534: 605a str r2, [r3, #4] + 8009536: 609a str r2, [r3, #8] + + /* USER CODE END ADC1_Init 1 */ + + /** Common config + */ + hadc1.Instance = ADC1; + 8009538: 4b18 ldr r3, [pc, #96] @ (800959c ) + 800953a: 4a19 ldr r2, [pc, #100] @ (80095a0 ) + 800953c: 601a str r2, [r3, #0] + hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; + 800953e: 4b17 ldr r3, [pc, #92] @ (800959c ) + 8009540: 2200 movs r2, #0 + 8009542: 609a str r2, [r3, #8] + hadc1.Init.ContinuousConvMode = DISABLE; + 8009544: 4b15 ldr r3, [pc, #84] @ (800959c ) + 8009546: 2200 movs r2, #0 + 8009548: 731a strb r2, [r3, #12] + hadc1.Init.DiscontinuousConvMode = DISABLE; + 800954a: 4b14 ldr r3, [pc, #80] @ (800959c ) + 800954c: 2200 movs r2, #0 + 800954e: 751a strb r2, [r3, #20] + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + 8009550: 4b12 ldr r3, [pc, #72] @ (800959c ) + 8009552: f44f 2260 mov.w r2, #917504 @ 0xe0000 + 8009556: 61da str r2, [r3, #28] + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + 8009558: 4b10 ldr r3, [pc, #64] @ (800959c ) + 800955a: 2200 movs r2, #0 + 800955c: 605a str r2, [r3, #4] + hadc1.Init.NbrOfConversion = 1; + 800955e: 4b0f ldr r3, [pc, #60] @ (800959c ) + 8009560: 2201 movs r2, #1 + 8009562: 611a str r2, [r3, #16] + if (HAL_ADC_Init(&hadc1) != HAL_OK) + 8009564: 480d ldr r0, [pc, #52] @ (800959c ) + 8009566: f004 f9e5 bl 800d934 + 800956a: 4603 mov r3, r0 + 800956c: 2b00 cmp r3, #0 + 800956e: d001 beq.n 8009574 + { + Error_Handler(); + 8009570: f001 fa02 bl 800a978 + } + + /** Configure Regular Channel + */ + sConfig.Channel = ADC_CHANNEL_8; + 8009574: 2308 movs r3, #8 + 8009576: 607b str r3, [r7, #4] + sConfig.Rank = ADC_REGULAR_RANK_1; + 8009578: 2301 movs r3, #1 + 800957a: 60bb str r3, [r7, #8] + sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + 800957c: 2300 movs r3, #0 + 800957e: 60fb str r3, [r7, #12] + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) + 8009580: 1d3b adds r3, r7, #4 + 8009582: 4619 mov r1, r3 + 8009584: 4805 ldr r0, [pc, #20] @ (800959c ) + 8009586: f004 fc99 bl 800debc + 800958a: 4603 mov r3, r0 + 800958c: 2b00 cmp r3, #0 + 800958e: d001 beq.n 8009594 + { + Error_Handler(); + 8009590: f001 f9f2 bl 800a978 + } + /* USER CODE BEGIN ADC1_Init 2 */ + + /* USER CODE END ADC1_Init 2 */ + +} + 8009594: bf00 nop + 8009596: 3710 adds r7, #16 + 8009598: 46bd mov sp, r7 + 800959a: bd80 pop {r7, pc} + 800959c: 2000025c .word 0x2000025c + 80095a0: 40012400 .word 0x40012400 + +080095a4 : + +void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) +{ + 80095a4: b580 push {r7, lr} + 80095a6: b08a sub sp, #40 @ 0x28 + 80095a8: af00 add r7, sp, #0 + 80095aa: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 80095ac: f107 0318 add.w r3, r7, #24 + 80095b0: 2200 movs r2, #0 + 80095b2: 601a str r2, [r3, #0] + 80095b4: 605a str r2, [r3, #4] + 80095b6: 609a str r2, [r3, #8] + 80095b8: 60da str r2, [r3, #12] + if(adcHandle->Instance==ADC1) + 80095ba: 687b ldr r3, [r7, #4] + 80095bc: 681b ldr r3, [r3, #0] + 80095be: 4a1f ldr r2, [pc, #124] @ (800963c ) + 80095c0: 4293 cmp r3, r2 + 80095c2: d137 bne.n 8009634 + { + /* USER CODE BEGIN ADC1_MspInit 0 */ + + /* USER CODE END ADC1_MspInit 0 */ + /* ADC1 clock enable */ + __HAL_RCC_ADC1_CLK_ENABLE(); + 80095c4: 4b1e ldr r3, [pc, #120] @ (8009640 ) + 80095c6: 699b ldr r3, [r3, #24] + 80095c8: 4a1d ldr r2, [pc, #116] @ (8009640 ) + 80095ca: f443 7300 orr.w r3, r3, #512 @ 0x200 + 80095ce: 6193 str r3, [r2, #24] + 80095d0: 4b1b ldr r3, [pc, #108] @ (8009640 ) + 80095d2: 699b ldr r3, [r3, #24] + 80095d4: f403 7300 and.w r3, r3, #512 @ 0x200 + 80095d8: 617b str r3, [r7, #20] + 80095da: 697b ldr r3, [r7, #20] + + __HAL_RCC_GPIOA_CLK_ENABLE(); + 80095dc: 4b18 ldr r3, [pc, #96] @ (8009640 ) + 80095de: 699b ldr r3, [r3, #24] + 80095e0: 4a17 ldr r2, [pc, #92] @ (8009640 ) + 80095e2: f043 0304 orr.w r3, r3, #4 + 80095e6: 6193 str r3, [r2, #24] + 80095e8: 4b15 ldr r3, [pc, #84] @ (8009640 ) + 80095ea: 699b ldr r3, [r3, #24] + 80095ec: f003 0304 and.w r3, r3, #4 + 80095f0: 613b str r3, [r7, #16] + 80095f2: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 80095f4: 4b12 ldr r3, [pc, #72] @ (8009640 ) + 80095f6: 699b ldr r3, [r3, #24] + 80095f8: 4a11 ldr r2, [pc, #68] @ (8009640 ) + 80095fa: f043 0308 orr.w r3, r3, #8 + 80095fe: 6193 str r3, [r2, #24] + 8009600: 4b0f ldr r3, [pc, #60] @ (8009640 ) + 8009602: 699b ldr r3, [r3, #24] + 8009604: f003 0308 and.w r3, r3, #8 + 8009608: 60fb str r3, [r7, #12] + 800960a: 68fb ldr r3, [r7, #12] + PA3 ------> ADC1_IN3 + PA4 ------> ADC1_IN4 + PB0 ------> ADC1_IN8 + PB1 ------> ADC1_IN9 + */ + GPIO_InitStruct.Pin = GPIO_PIN_3|CP_ADC_Pin; + 800960c: 2318 movs r3, #24 + 800960e: 61bb str r3, [r7, #24] + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + 8009610: 2303 movs r3, #3 + 8009612: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 8009614: f107 0318 add.w r3, r7, #24 + 8009618: 4619 mov r1, r3 + 800961a: 480a ldr r0, [pc, #40] @ (8009644 ) + 800961c: f005 ffd2 bl 800f5c4 + + GPIO_InitStruct.Pin = ADC_NTC1_Pin|ADC_NTC2_Pin; + 8009620: 2303 movs r3, #3 + 8009622: 61bb str r3, [r7, #24] + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + 8009624: 2303 movs r3, #3 + 8009626: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 8009628: f107 0318 add.w r3, r7, #24 + 800962c: 4619 mov r1, r3 + 800962e: 4806 ldr r0, [pc, #24] @ (8009648 ) + 8009630: f005 ffc8 bl 800f5c4 + + /* USER CODE BEGIN ADC1_MspInit 1 */ + + /* USER CODE END ADC1_MspInit 1 */ + } +} + 8009634: bf00 nop + 8009636: 3728 adds r7, #40 @ 0x28 + 8009638: 46bd mov sp, r7 + 800963a: bd80 pop {r7, pc} + 800963c: 40012400 .word 0x40012400 + 8009640: 40021000 .word 0x40021000 + 8009644: 40010800 .word 0x40010800 + 8009648: 40010c00 .word 0x40010c00 + +0800964c : + +uint8_t RELAY_State[RELAY_COUNT]; +static volatile uint8_t adc_lock = 0; +static SMAFilter_t conn_temp_adc_filter[2]; + +void RELAY_Write(relay_t num, uint8_t state){ + 800964c: b580 push {r7, lr} + 800964e: b082 sub sp, #8 + 8009650: af00 add r7, sp, #0 + 8009652: 4603 mov r3, r0 + 8009654: 460a mov r2, r1 + 8009656: 71fb strb r3, [r7, #7] + 8009658: 4613 mov r3, r2 + 800965a: 71bb strb r3, [r7, #6] + switch (num) { + 800965c: 79fb ldrb r3, [r7, #7] + 800965e: 2b07 cmp r3, #7 + 8009660: d850 bhi.n 8009704 + 8009662: a201 add r2, pc, #4 @ (adr r2, 8009668 ) + 8009664: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8009668: 08009689 .word 0x08009689 + 800966c: 08009699 .word 0x08009699 + 8009670: 080096a9 .word 0x080096a9 + 8009674: 080096b9 .word 0x080096b9 + 8009678: 080096c9 .word 0x080096c9 + 800967c: 080096d9 .word 0x080096d9 + 8009680: 080096e7 .word 0x080096e7 + 8009684: 080096f7 .word 0x080096f7 + case RELAY_AUX0: + HAL_GPIO_WritePin(RELAY1_GPIO_Port, RELAY1_Pin, state); + 8009688: 79bb ldrb r3, [r7, #6] + 800968a: 461a mov r2, r3 + 800968c: f44f 7180 mov.w r1, #256 @ 0x100 + 8009690: 4821 ldr r0, [pc, #132] @ (8009718 ) + 8009692: f006 f932 bl 800f8fa + break; + 8009696: e036 b.n 8009706 + case RELAY_AUX1: + HAL_GPIO_WritePin(RELAY2_GPIO_Port, RELAY2_Pin, state); + 8009698: 79bb ldrb r3, [r7, #6] + 800969a: 461a mov r2, r3 + 800969c: f44f 7100 mov.w r1, #512 @ 0x200 + 80096a0: 481d ldr r0, [pc, #116] @ (8009718 ) + 80096a2: f006 f92a bl 800f8fa + break; + 80096a6: e02e b.n 8009706 + case RELAY3: + HAL_GPIO_WritePin(RELAY3_GPIO_Port, RELAY3_Pin, state); + 80096a8: 79bb ldrb r3, [r7, #6] + 80096aa: 461a mov r2, r3 + 80096ac: f44f 6180 mov.w r1, #1024 @ 0x400 + 80096b0: 4819 ldr r0, [pc, #100] @ (8009718 ) + 80096b2: f006 f922 bl 800f8fa + break; + 80096b6: e026 b.n 8009706 + case RELAY_DC: + HAL_GPIO_WritePin(RELAY4_GPIO_Port, RELAY4_Pin, state); + 80096b8: 79bb ldrb r3, [r7, #6] + 80096ba: 461a mov r2, r3 + 80096bc: f44f 6100 mov.w r1, #2048 @ 0x800 + 80096c0: 4815 ldr r0, [pc, #84] @ (8009718 ) + 80096c2: f006 f91a bl 800f8fa + break; + 80096c6: e01e b.n 8009706 + case RELAY_AC: + HAL_GPIO_WritePin(RELAY5_GPIO_Port, RELAY5_Pin, state); + 80096c8: 79bb ldrb r3, [r7, #6] + 80096ca: 461a mov r2, r3 + 80096cc: f44f 5180 mov.w r1, #4096 @ 0x1000 + 80096d0: 4811 ldr r0, [pc, #68] @ (8009718 ) + 80096d2: f006 f912 bl 800f8fa + break; + 80096d6: e016 b.n 8009706 + case RELAY_CP: + HAL_GPIO_WritePin(RELAY_CP_GPIO_Port, RELAY_CP_Pin, state); + 80096d8: 79bb ldrb r3, [r7, #6] + 80096da: 461a mov r2, r3 + 80096dc: 2108 movs r1, #8 + 80096de: 480f ldr r0, [pc, #60] @ (800971c ) + 80096e0: f006 f90b bl 800f8fa + break; + 80096e4: e00f b.n 8009706 + case RELAY_CC: + HAL_GPIO_WritePin(RELAY_CC_GPIO_Port, RELAY_CC_Pin, state); + 80096e6: 79bb ldrb r3, [r7, #6] + 80096e8: 461a mov r2, r3 + 80096ea: f44f 4100 mov.w r1, #32768 @ 0x8000 + 80096ee: 480c ldr r0, [pc, #48] @ (8009720 ) + 80096f0: f006 f903 bl 800f8fa + break; + 80096f4: e007 b.n 8009706 + case RELAY_DC1: + HAL_GPIO_WritePin(RELAY_DC_GPIO_Port, RELAY_DC_Pin, state); + 80096f6: 79bb ldrb r3, [r7, #6] + 80096f8: 461a mov r2, r3 + 80096fa: 2108 movs r1, #8 + 80096fc: 4809 ldr r0, [pc, #36] @ (8009724 ) + 80096fe: f006 f8fc bl 800f8fa + break; + 8009702: e000 b.n 8009706 + default: + break; + 8009704: bf00 nop + } + + RELAY_State[num] = state; + 8009706: 79fb ldrb r3, [r7, #7] + 8009708: 4907 ldr r1, [pc, #28] @ (8009728 ) + 800970a: 79ba ldrb r2, [r7, #6] + 800970c: 54ca strb r2, [r1, r3] +} + 800970e: bf00 nop + 8009710: 3708 adds r7, #8 + 8009712: 46bd mov sp, r7 + 8009714: bd80 pop {r7, pc} + 8009716: bf00 nop + 8009718: 40011800 .word 0x40011800 + 800971c: 40011000 .word 0x40011000 + 8009720: 40010800 .word 0x40010800 + 8009724: 40011400 .word 0x40011400 + 8009728: 2000028c .word 0x2000028c + +0800972c : + +uint8_t RELAY_Read(relay_t num){ + 800972c: b480 push {r7} + 800972e: b083 sub sp, #12 + 8009730: af00 add r7, sp, #0 + 8009732: 4603 mov r3, r0 + 8009734: 71fb strb r3, [r7, #7] + return RELAY_State[num]; + 8009736: 79fb ldrb r3, [r7, #7] + 8009738: 4a03 ldr r2, [pc, #12] @ (8009748 ) + 800973a: 5cd3 ldrb r3, [r2, r3] +} + 800973c: 4618 mov r0, r3 + 800973e: 370c adds r7, #12 + 8009740: 46bd mov sp, r7 + 8009742: bc80 pop {r7} + 8009744: 4770 bx lr + 8009746: bf00 nop + 8009748: 2000028c .word 0x2000028c + +0800974c : + + +uint8_t IN_ReadInput(inputNum_t input_n){ + 800974c: b580 push {r7, lr} + 800974e: b082 sub sp, #8 + 8009750: af00 add r7, sp, #0 + 8009752: 4603 mov r3, r0 + 8009754: 71fb strb r3, [r7, #7] + switch(input_n){ + 8009756: 79fb ldrb r3, [r7, #7] + 8009758: 2b06 cmp r3, #6 + 800975a: d83b bhi.n 80097d4 + 800975c: a201 add r2, pc, #4 @ (adr r2, 8009764 ) + 800975e: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8009762: bf00 nop + 8009764: 08009781 .word 0x08009781 + 8009768: 0800978d .word 0x0800978d + 800976c: 08009799 .word 0x08009799 + 8009770: 080097a5 .word 0x080097a5 + 8009774: 080097b1 .word 0x080097b1 + 8009778: 080097bd .word 0x080097bd + 800977c: 080097c9 .word 0x080097c9 + case IN_SW0: + return HAL_GPIO_ReadPin(IN_SW0_GPIO_Port, IN_SW0_Pin); + 8009780: 2102 movs r1, #2 + 8009782: 4817 ldr r0, [pc, #92] @ (80097e0 ) + 8009784: f006 f8a2 bl 800f8cc + 8009788: 4603 mov r3, r0 + 800978a: e024 b.n 80097d6 + case IN_SW1: + return HAL_GPIO_ReadPin(IN_SW1_GPIO_Port, IN_SW1_Pin); + 800978c: 2104 movs r1, #4 + 800978e: 4814 ldr r0, [pc, #80] @ (80097e0 ) + 8009790: f006 f89c bl 800f8cc + 8009794: 4603 mov r3, r0 + 8009796: e01e b.n 80097d6 + case IN0: + return HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); + 8009798: 2180 movs r1, #128 @ 0x80 + 800979a: 4812 ldr r0, [pc, #72] @ (80097e4 ) + 800979c: f006 f896 bl 800f8cc + 80097a0: 4603 mov r3, r0 + 80097a2: e018 b.n 80097d6 + case IN_ESTOP: + return HAL_GPIO_ReadPin(IN_ESTOP_GPIO_Port, IN_ESTOP_Pin); + 80097a4: 2180 movs r1, #128 @ 0x80 + 80097a6: 4810 ldr r0, [pc, #64] @ (80097e8 ) + 80097a8: f006 f890 bl 800f8cc + 80097ac: 4603 mov r3, r0 + 80097ae: e012 b.n 80097d6 + case IN_FB1: + return HAL_GPIO_ReadPin(IN_FB1_GPIO_Port, IN_FB1_Pin); + 80097b0: 2110 movs r1, #16 + 80097b2: 480e ldr r0, [pc, #56] @ (80097ec ) + 80097b4: f006 f88a bl 800f8cc + 80097b8: 4603 mov r3, r0 + 80097ba: e00c b.n 80097d6 + case IN_CONT_FB_DC: + return HAL_GPIO_ReadPin(IN_FB2_GPIO_Port, IN_FB2_Pin); + 80097bc: 2108 movs r1, #8 + 80097be: 480b ldr r0, [pc, #44] @ (80097ec ) + 80097c0: f006 f884 bl 800f8cc + 80097c4: 4603 mov r3, r0 + 80097c6: e006 b.n 80097d6 + case ISO_IN: + return HAL_GPIO_ReadPin(ISO_IN_GPIO_Port, ISO_IN_Pin); + 80097c8: 2102 movs r1, #2 + 80097ca: 4806 ldr r0, [pc, #24] @ (80097e4 ) + 80097cc: f006 f87e bl 800f8cc + 80097d0: 4603 mov r3, r0 + 80097d2: e000 b.n 80097d6 + default: + return 0; + 80097d4: 2300 movs r3, #0 + } +} + 80097d6: 4618 mov r0, r3 + 80097d8: 3708 adds r7, #8 + 80097da: 46bd mov sp, r7 + 80097dc: bd80 pop {r7, pc} + 80097de: bf00 nop + 80097e0: 40010800 .word 0x40010800 + 80097e4: 40011800 .word 0x40011800 + 80097e8: 40011400 .word 0x40011400 + 80097ec: 40010c00 .word 0x40010c00 + +080097f0 : +// +// HAL_ADC_Stop(&hadc1); // stop adc + return 0; +} + +void Init_Peripheral(){ + 80097f0: b580 push {r7, lr} + 80097f2: af00 add r7, sp, #0 + HAL_ADCEx_Calibration_Start(&hadc1); + 80097f4: 4815 ldr r0, [pc, #84] @ (800984c ) + 80097f6: f004 fcf5 bl 800e1e4 + + RELAY_Write(RELAY_AUX0, 0); + 80097fa: 2100 movs r1, #0 + 80097fc: 2000 movs r0, #0 + 80097fe: f7ff ff25 bl 800964c + RELAY_Write(RELAY_AUX1, 0); + 8009802: 2100 movs r1, #0 + 8009804: 2001 movs r0, #1 + 8009806: f7ff ff21 bl 800964c + RELAY_Write(RELAY3, 0); + 800980a: 2100 movs r1, #0 + 800980c: 2002 movs r0, #2 + 800980e: f7ff ff1d bl 800964c + RELAY_Write(RELAY_DC, 0); + 8009812: 2100 movs r1, #0 + 8009814: 2003 movs r0, #3 + 8009816: f7ff ff19 bl 800964c + RELAY_Write(RELAY_AC, 0); + 800981a: 2100 movs r1, #0 + 800981c: 2004 movs r0, #4 + 800981e: f7ff ff15 bl 800964c + RELAY_Write(RELAY_CP, 1); + 8009822: 2101 movs r1, #1 + 8009824: 2005 movs r0, #5 + 8009826: f7ff ff11 bl 800964c + RELAY_Write(RELAY_CC, 1); + 800982a: 2101 movs r1, #1 + 800982c: 2006 movs r0, #6 + 800982e: f7ff ff0d bl 800964c + RELAY_Write(RELAY_DC1, 0); + 8009832: 2100 movs r1, #0 + 8009834: 2007 movs r0, #7 + 8009836: f7ff ff09 bl 800964c + + SMAFilter_Init(&conn_temp_adc_filter[0]); + 800983a: 4805 ldr r0, [pc, #20] @ (8009850 ) + 800983c: f003 fa38 bl 800ccb0 + SMAFilter_Init(&conn_temp_adc_filter[1]); + 8009840: 4804 ldr r0, [pc, #16] @ (8009854 ) + 8009842: f003 fa35 bl 800ccb0 +} + 8009846: bf00 nop + 8009848: bd80 pop {r7, pc} + 800984a: bf00 nop + 800984c: 2000025c .word 0x2000025c + 8009850: 20000298 .word 0x20000298 + 8009854: 200002c0 .word 0x200002c0 + +08009858 : + +float pt1000_to_temperature(float resistance) { + 8009858: b590 push {r4, r7, lr} + 800985a: b087 sub sp, #28 + 800985c: af00 add r7, sp, #0 + 800985e: 6078 str r0, [r7, #4] + // Константы для PT1000 + const float R0 = 1000.0; // Сопротивление при 0 °C + 8009860: 4b0c ldr r3, [pc, #48] @ (8009894 ) + 8009862: 617b str r3, [r7, #20] + const float C_A = 3.9083E-3f; + 8009864: 4b0c ldr r3, [pc, #48] @ (8009898 ) + 8009866: 613b str r3, [r7, #16] + + float temperature = (resistance-R0) / ( R0 * C_A); + 8009868: 6979 ldr r1, [r7, #20] + 800986a: 6878 ldr r0, [r7, #4] + 800986c: f7ff f9cc bl 8008c08 <__aeabi_fsub> + 8009870: 4603 mov r3, r0 + 8009872: 461c mov r4, r3 + 8009874: 6939 ldr r1, [r7, #16] + 8009876: 6978 ldr r0, [r7, #20] + 8009878: f7ff fad0 bl 8008e1c <__aeabi_fmul> + 800987c: 4603 mov r3, r0 + 800987e: 4619 mov r1, r3 + 8009880: 4620 mov r0, r4 + 8009882: f7ff fb7f bl 8008f84 <__aeabi_fdiv> + 8009886: 4603 mov r3, r0 + 8009888: 60fb str r3, [r7, #12] + + return temperature; + 800988a: 68fb ldr r3, [r7, #12] +} + 800988c: 4618 mov r0, r3 + 800988e: 371c adds r7, #28 + 8009890: 46bd mov sp, r7 + 8009892: bd90 pop {r4, r7, pc} + 8009894: 447a0000 .word 0x447a0000 + 8009898: 3b801132 .word 0x3b801132 + 800989c: 00000000 .word 0x00000000 + +080098a0 : + + +float calculate_NTC_resistance(int adc_value, float Vref, float Vin, float R) { + 80098a0: b5b0 push {r4, r5, r7, lr} + 80098a2: b086 sub sp, #24 + 80098a4: af00 add r7, sp, #0 + 80098a6: 60f8 str r0, [r7, #12] + 80098a8: 60b9 str r1, [r7, #8] + 80098aa: 607a str r2, [r7, #4] + 80098ac: 603b str r3, [r7, #0] + // Преобразуем значение АЦП в выходное напряжение + float Vout = (adc_value / 4095.0) * Vref; + 80098ae: 68f8 ldr r0, [r7, #12] + 80098b0: f7fe fe14 bl 80084dc <__aeabi_i2d> + 80098b4: a31c add r3, pc, #112 @ (adr r3, 8009928 ) + 80098b6: e9d3 2300 ldrd r2, r3, [r3] + 80098ba: f7fe ffa3 bl 8008804 <__aeabi_ddiv> + 80098be: 4602 mov r2, r0 + 80098c0: 460b mov r3, r1 + 80098c2: 4614 mov r4, r2 + 80098c4: 461d mov r5, r3 + 80098c6: 68b8 ldr r0, [r7, #8] + 80098c8: f7fe fe1a bl 8008500 <__aeabi_f2d> + 80098cc: 4602 mov r2, r0 + 80098ce: 460b mov r3, r1 + 80098d0: 4620 mov r0, r4 + 80098d2: 4629 mov r1, r5 + 80098d4: f7fe fe6c bl 80085b0 <__aeabi_dmul> + 80098d8: 4602 mov r2, r0 + 80098da: 460b mov r3, r1 + 80098dc: 4610 mov r0, r2 + 80098de: 4619 mov r1, r3 + 80098e0: f7ff f93e bl 8008b60 <__aeabi_d2f> + 80098e4: 4603 mov r3, r0 + 80098e6: 617b str r3, [r7, #20] + + // Проверяем, чтобы Vout не было равно Vin + if (Vout >= Vin) { + 80098e8: 6879 ldr r1, [r7, #4] + 80098ea: 6978 ldr r0, [r7, #20] + 80098ec: f7ff fc48 bl 8009180 <__aeabi_fcmpge> + 80098f0: 4603 mov r3, r0 + 80098f2: 2b00 cmp r3, #0 + 80098f4: d001 beq.n 80098fa + return -1; // Ошибка: Vout не может быть больше или равно Vin + 80098f6: 4b0e ldr r3, [pc, #56] @ (8009930 ) + 80098f8: e010 b.n 800991c + } + + // Вычисляем сопротивление термистора + float R_NTC = R * (Vout / (Vin - Vout)); + 80098fa: 6979 ldr r1, [r7, #20] + 80098fc: 6878 ldr r0, [r7, #4] + 80098fe: f7ff f983 bl 8008c08 <__aeabi_fsub> + 8009902: 4603 mov r3, r0 + 8009904: 4619 mov r1, r3 + 8009906: 6978 ldr r0, [r7, #20] + 8009908: f7ff fb3c bl 8008f84 <__aeabi_fdiv> + 800990c: 4603 mov r3, r0 + 800990e: 4619 mov r1, r3 + 8009910: 6838 ldr r0, [r7, #0] + 8009912: f7ff fa83 bl 8008e1c <__aeabi_fmul> + 8009916: 4603 mov r3, r0 + 8009918: 613b str r3, [r7, #16] + + return R_NTC; + 800991a: 693b ldr r3, [r7, #16] +} + 800991c: 4618 mov r0, r3 + 800991e: 3718 adds r7, #24 + 8009920: 46bd mov sp, r7 + 8009922: bdb0 pop {r4, r5, r7, pc} + 8009924: f3af 8000 nop.w + 8009928: 00000000 .word 0x00000000 + 800992c: 40affe00 .word 0x40affe00 + 8009930: bf800000 .word 0xbf800000 + +08009934 : + +int16_t CONN_ReadTemp(uint8_t ch){ + 8009934: b580 push {r7, lr} + 8009936: b088 sub sp, #32 + 8009938: af00 add r7, sp, #0 + 800993a: 4603 mov r3, r0 + 800993c: 71fb strb r3, [r7, #7] + ADC_LockBlocking(); + 800993e: f000 f89b bl 8009a78 + + //TODO + if(ch)ADC_Select_Channel(ADC_CHANNEL_8); + 8009942: 79fb ldrb r3, [r7, #7] + 8009944: 2b00 cmp r3, #0 + 8009946: d003 beq.n 8009950 + 8009948: 2008 movs r0, #8 + 800994a: f000 f853 bl 80099f4 + 800994e: e002 b.n 8009956 + else ADC_Select_Channel(ADC_CHANNEL_9); + 8009950: 2009 movs r0, #9 + 8009952: f000 f84f bl 80099f4 + // Начало конверсии + HAL_ADC_Start(&hadc1); + 8009956: 4822 ldr r0, [pc, #136] @ (80099e0 ) + 8009958: f004 f8c4 bl 800dae4 + + + // Ожидание окончания конверсии + HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); + 800995c: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 8009960: 481f ldr r0, [pc, #124] @ (80099e0 ) + 8009962: f004 f999 bl 800dc98 + + // Получение значения + uint32_t adcValue = HAL_ADC_GetValue(&hadc1); + 8009966: 481e ldr r0, [pc, #120] @ (80099e0 ) + 8009968: f004 fa9c bl 800dea4 + 800996c: 61f8 str r0, [r7, #28] + + // Остановка АЦП (по желанию) + HAL_ADC_Stop(&hadc1); + 800996e: 481c ldr r0, [pc, #112] @ (80099e0 ) + 8009970: f004 f966 bl 800dc40 + + int32_t adc_filtered = SMAFilter_Update(&conn_temp_adc_filter[ch ? 1u : 0u], (int32_t)adcValue); + 8009974: 79fb ldrb r3, [r7, #7] + 8009976: 2b00 cmp r3, #0 + 8009978: d001 beq.n 800997e + 800997a: 2201 movs r2, #1 + 800997c: e000 b.n 8009980 + 800997e: 2200 movs r2, #0 + 8009980: 4613 mov r3, r2 + 8009982: 009b lsls r3, r3, #2 + 8009984: 4413 add r3, r2 + 8009986: 00db lsls r3, r3, #3 + 8009988: 4a16 ldr r2, [pc, #88] @ (80099e4 ) + 800998a: 4413 add r3, r2 + 800998c: 69fa ldr r2, [r7, #28] + 800998e: 4611 mov r1, r2 + 8009990: 4618 mov r0, r3 + 8009992: f003 f9b2 bl 800ccfa + 8009996: 61b8 str r0, [r7, #24] + if((uint32_t)adc_filtered > 4000u) { + 8009998: 69bb ldr r3, [r7, #24] + 800999a: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 + 800999e: d903 bls.n 80099a8 + ADC_Unlock(); + 80099a0: f000 f876 bl 8009a90 + return 20; //Термодатчик не подключен + 80099a4: 2314 movs r3, #20 + 80099a6: e017 b.n 80099d8 + } + +// int adc_value = 2048; // Пример значения АЦП + float Vref = 3.3; // Напряжение опорное + 80099a8: 4b0f ldr r3, [pc, #60] @ (80099e8 ) + 80099aa: 617b str r3, [r7, #20] + float Vin = 5.0; // Входное напряжение + 80099ac: 4b0f ldr r3, [pc, #60] @ (80099ec ) + 80099ae: 613b str r3, [r7, #16] + float R = 1000; // Сопротивление резистора в Омах + 80099b0: 4b0f ldr r3, [pc, #60] @ (80099f0 ) + 80099b2: 60fb str r3, [r7, #12] + + float temp = pt1000_to_temperature(calculate_NTC_resistance((int)adc_filtered, Vref, Vin, R)); + 80099b4: 68fb ldr r3, [r7, #12] + 80099b6: 693a ldr r2, [r7, #16] + 80099b8: 6979 ldr r1, [r7, #20] + 80099ba: 69b8 ldr r0, [r7, #24] + 80099bc: f7ff ff70 bl 80098a0 + 80099c0: 4603 mov r3, r0 + 80099c2: 4618 mov r0, r3 + 80099c4: f7ff ff48 bl 8009858 + 80099c8: 60b8 str r0, [r7, #8] + + ADC_Unlock(); + 80099ca: f000 f861 bl 8009a90 + return (int16_t)temp; + 80099ce: 68b8 ldr r0, [r7, #8] + 80099d0: f7ff fbea bl 80091a8 <__aeabi_f2iz> + 80099d4: 4603 mov r3, r0 + 80099d6: b21b sxth r3, r3 + +} + 80099d8: 4618 mov r0, r3 + 80099da: 3720 adds r7, #32 + 80099dc: 46bd mov sp, r7 + 80099de: bd80 pop {r7, pc} + 80099e0: 2000025c .word 0x2000025c + 80099e4: 20000298 .word 0x20000298 + 80099e8: 40533333 .word 0x40533333 + 80099ec: 40a00000 .word 0x40a00000 + 80099f0: 447a0000 .word 0x447a0000 + +080099f4 : + +int16_t GBT_ReadTemp(uint8_t ch){ + return CONN_ReadTemp(ch); +} + +void ADC_Select_Channel(uint32_t ch) { + 80099f4: b580 push {r7, lr} + 80099f6: b086 sub sp, #24 + 80099f8: af00 add r7, sp, #0 + 80099fa: 6078 str r0, [r7, #4] + ADC_ChannelConfTypeDef conf = { + 80099fc: 687b ldr r3, [r7, #4] + 80099fe: 60fb str r3, [r7, #12] + 8009a00: 2301 movs r3, #1 + 8009a02: 613b str r3, [r7, #16] + 8009a04: 2303 movs r3, #3 + 8009a06: 617b str r3, [r7, #20] + .Channel = ch, + .Rank = 1, + .SamplingTime = ADC_SAMPLETIME_28CYCLES_5, + }; + if (HAL_ADC_ConfigChannel(&hadc1, &conf) != HAL_OK) { + 8009a08: f107 030c add.w r3, r7, #12 + 8009a0c: 4619 mov r1, r3 + 8009a0e: 4806 ldr r0, [pc, #24] @ (8009a28 ) + 8009a10: f004 fa54 bl 800debc + 8009a14: 4603 mov r3, r0 + 8009a16: 2b00 cmp r3, #0 + 8009a18: d001 beq.n 8009a1e + Error_Handler(); + 8009a1a: f000 ffad bl 800a978 + } +} + 8009a1e: bf00 nop + 8009a20: 3718 adds r7, #24 + 8009a22: 46bd mov sp, r7 + 8009a24: bd80 pop {r7, pc} + 8009a26: bf00 nop + 8009a28: 2000025c .word 0x2000025c + +08009a2c : + +uint8_t ADC_TryLock(void) { + 8009a2c: b480 push {r7} + 8009a2e: b083 sub sp, #12 + 8009a30: af00 add r7, sp, #0 + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009a32: f3ef 8310 mrs r3, PRIMASK + 8009a36: 603b str r3, [r7, #0] + return(result); + 8009a38: 683b ldr r3, [r7, #0] + uint32_t primask = __get_PRIMASK(); + 8009a3a: 607b str r3, [r7, #4] + __ASM volatile ("cpsid i" : : : "memory"); + 8009a3c: b672 cpsid i +} + 8009a3e: bf00 nop + __disable_irq(); + if (adc_lock != 0u) { + 8009a40: 4b0c ldr r3, [pc, #48] @ (8009a74 ) + 8009a42: 781b ldrb r3, [r3, #0] + 8009a44: b2db uxtb r3, r3 + 8009a46: 2b00 cmp r3, #0 + 8009a48: d006 beq.n 8009a58 + if (primask == 0u) { + 8009a4a: 687b ldr r3, [r7, #4] + 8009a4c: 2b00 cmp r3, #0 + 8009a4e: d101 bne.n 8009a54 + __ASM volatile ("cpsie i" : : : "memory"); + 8009a50: b662 cpsie i +} + 8009a52: bf00 nop + __enable_irq(); + } + return 0u; + 8009a54: 2300 movs r3, #0 + 8009a56: e008 b.n 8009a6a + } + adc_lock = 1u; + 8009a58: 4b06 ldr r3, [pc, #24] @ (8009a74 ) + 8009a5a: 2201 movs r2, #1 + 8009a5c: 701a strb r2, [r3, #0] + if (primask == 0u) { + 8009a5e: 687b ldr r3, [r7, #4] + 8009a60: 2b00 cmp r3, #0 + 8009a62: d101 bne.n 8009a68 + __ASM volatile ("cpsie i" : : : "memory"); + 8009a64: b662 cpsie i +} + 8009a66: bf00 nop + __enable_irq(); + } + return 1u; + 8009a68: 2301 movs r3, #1 +} + 8009a6a: 4618 mov r0, r3 + 8009a6c: 370c adds r7, #12 + 8009a6e: 46bd mov sp, r7 + 8009a70: bc80 pop {r7} + 8009a72: 4770 bx lr + 8009a74: 20000294 .word 0x20000294 + +08009a78 : + +void ADC_LockBlocking(void) { + 8009a78: b580 push {r7, lr} + 8009a7a: af00 add r7, sp, #0 + while (ADC_TryLock() == 0u) { + 8009a7c: bf00 nop + 8009a7e: f7ff ffd5 bl 8009a2c + 8009a82: 4603 mov r3, r0 + 8009a84: 2b00 cmp r3, #0 + 8009a86: d0fa beq.n 8009a7e + /* wait in main context until ADC is free */ + } +} + 8009a88: bf00 nop + 8009a8a: bf00 nop + 8009a8c: bd80 pop {r7, pc} + ... + +08009a90 : + +void ADC_Unlock(void) { + 8009a90: b480 push {r7} + 8009a92: b083 sub sp, #12 + 8009a94: af00 add r7, sp, #0 + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + 8009a96: f3ef 8310 mrs r3, PRIMASK + 8009a9a: 603b str r3, [r7, #0] + return(result); + 8009a9c: 683b ldr r3, [r7, #0] + uint32_t primask = __get_PRIMASK(); + 8009a9e: 607b str r3, [r7, #4] + __ASM volatile ("cpsid i" : : : "memory"); + 8009aa0: b672 cpsid i +} + 8009aa2: bf00 nop + __disable_irq(); + adc_lock = 0u; + 8009aa4: 4b06 ldr r3, [pc, #24] @ (8009ac0 ) + 8009aa6: 2200 movs r2, #0 + 8009aa8: 701a strb r2, [r3, #0] + if (primask == 0u) { + 8009aaa: 687b ldr r3, [r7, #4] + 8009aac: 2b00 cmp r3, #0 + 8009aae: d101 bne.n 8009ab4 + __ASM volatile ("cpsie i" : : : "memory"); + 8009ab0: b662 cpsie i +} + 8009ab2: bf00 nop + __enable_irq(); + } +} + 8009ab4: bf00 nop + 8009ab6: 370c adds r7, #12 + 8009ab8: 46bd mov sp, r7 + 8009aba: bc80 pop {r7} + 8009abc: 4770 bx lr + 8009abe: bf00 nop + 8009ac0: 20000294 .word 0x20000294 + +08009ac4 : +CAN_HandleTypeDef hcan1; +CAN_HandleTypeDef hcan2; + +/* CAN1 init function */ +void MX_CAN1_Init(void) +{ + 8009ac4: b580 push {r7, lr} + 8009ac6: af00 add r7, sp, #0 + /* USER CODE END CAN1_Init 0 */ + + /* USER CODE BEGIN CAN1_Init 1 */ + + /* USER CODE END CAN1_Init 1 */ + hcan1.Instance = CAN1; + 8009ac8: 4b17 ldr r3, [pc, #92] @ (8009b28 ) + 8009aca: 4a18 ldr r2, [pc, #96] @ (8009b2c ) + 8009acc: 601a str r2, [r3, #0] + hcan1.Init.Prescaler = 8; + 8009ace: 4b16 ldr r3, [pc, #88] @ (8009b28 ) + 8009ad0: 2208 movs r2, #8 + 8009ad2: 605a str r2, [r3, #4] + hcan1.Init.Mode = CAN_MODE_NORMAL; + 8009ad4: 4b14 ldr r3, [pc, #80] @ (8009b28 ) + 8009ad6: 2200 movs r2, #0 + 8009ad8: 609a str r2, [r3, #8] + hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; + 8009ada: 4b13 ldr r3, [pc, #76] @ (8009b28 ) + 8009adc: 2200 movs r2, #0 + 8009ade: 60da str r2, [r3, #12] + hcan1.Init.TimeSeg1 = CAN_BS1_15TQ; + 8009ae0: 4b11 ldr r3, [pc, #68] @ (8009b28 ) + 8009ae2: f44f 2260 mov.w r2, #917504 @ 0xe0000 + 8009ae6: 611a str r2, [r3, #16] + hcan1.Init.TimeSeg2 = CAN_BS2_2TQ; + 8009ae8: 4b0f ldr r3, [pc, #60] @ (8009b28 ) + 8009aea: f44f 1280 mov.w r2, #1048576 @ 0x100000 + 8009aee: 615a str r2, [r3, #20] + hcan1.Init.TimeTriggeredMode = DISABLE; + 8009af0: 4b0d ldr r3, [pc, #52] @ (8009b28 ) + 8009af2: 2200 movs r2, #0 + 8009af4: 761a strb r2, [r3, #24] + hcan1.Init.AutoBusOff = ENABLE; + 8009af6: 4b0c ldr r3, [pc, #48] @ (8009b28 ) + 8009af8: 2201 movs r2, #1 + 8009afa: 765a strb r2, [r3, #25] + hcan1.Init.AutoWakeUp = ENABLE; + 8009afc: 4b0a ldr r3, [pc, #40] @ (8009b28 ) + 8009afe: 2201 movs r2, #1 + 8009b00: 769a strb r2, [r3, #26] + hcan1.Init.AutoRetransmission = ENABLE; + 8009b02: 4b09 ldr r3, [pc, #36] @ (8009b28 ) + 8009b04: 2201 movs r2, #1 + 8009b06: 76da strb r2, [r3, #27] + hcan1.Init.ReceiveFifoLocked = DISABLE; + 8009b08: 4b07 ldr r3, [pc, #28] @ (8009b28 ) + 8009b0a: 2200 movs r2, #0 + 8009b0c: 771a strb r2, [r3, #28] + hcan1.Init.TransmitFifoPriority = ENABLE; + 8009b0e: 4b06 ldr r3, [pc, #24] @ (8009b28 ) + 8009b10: 2201 movs r2, #1 + 8009b12: 775a strb r2, [r3, #29] + if (HAL_CAN_Init(&hcan1) != HAL_OK) + 8009b14: 4804 ldr r0, [pc, #16] @ (8009b28 ) + 8009b16: f004 fc13 bl 800e340 + 8009b1a: 4603 mov r3, r0 + 8009b1c: 2b00 cmp r3, #0 + 8009b1e: d001 beq.n 8009b24 + { + Error_Handler(); + 8009b20: f000 ff2a bl 800a978 + } + /* USER CODE BEGIN CAN1_Init 2 */ + + /* USER CODE END CAN1_Init 2 */ + +} + 8009b24: bf00 nop + 8009b26: bd80 pop {r7, pc} + 8009b28: 200002e8 .word 0x200002e8 + 8009b2c: 40006400 .word 0x40006400 + +08009b30 : +/* CAN2 init function */ +void MX_CAN2_Init(void) +{ + 8009b30: b580 push {r7, lr} + 8009b32: af00 add r7, sp, #0 + /* USER CODE END CAN2_Init 0 */ + + /* USER CODE BEGIN CAN2_Init 1 */ + + /* USER CODE END CAN2_Init 1 */ + hcan2.Instance = CAN2; + 8009b34: 4b17 ldr r3, [pc, #92] @ (8009b94 ) + 8009b36: 4a18 ldr r2, [pc, #96] @ (8009b98 ) + 8009b38: 601a str r2, [r3, #0] + hcan2.Init.Prescaler = 16; + 8009b3a: 4b16 ldr r3, [pc, #88] @ (8009b94 ) + 8009b3c: 2210 movs r2, #16 + 8009b3e: 605a str r2, [r3, #4] + hcan2.Init.Mode = CAN_MODE_NORMAL; + 8009b40: 4b14 ldr r3, [pc, #80] @ (8009b94 ) + 8009b42: 2200 movs r2, #0 + 8009b44: 609a str r2, [r3, #8] + hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ; + 8009b46: 4b13 ldr r3, [pc, #76] @ (8009b94 ) + 8009b48: 2200 movs r2, #0 + 8009b4a: 60da str r2, [r3, #12] + hcan2.Init.TimeSeg1 = CAN_BS1_15TQ; + 8009b4c: 4b11 ldr r3, [pc, #68] @ (8009b94 ) + 8009b4e: f44f 2260 mov.w r2, #917504 @ 0xe0000 + 8009b52: 611a str r2, [r3, #16] + hcan2.Init.TimeSeg2 = CAN_BS2_2TQ; + 8009b54: 4b0f ldr r3, [pc, #60] @ (8009b94 ) + 8009b56: f44f 1280 mov.w r2, #1048576 @ 0x100000 + 8009b5a: 615a str r2, [r3, #20] + hcan2.Init.TimeTriggeredMode = DISABLE; + 8009b5c: 4b0d ldr r3, [pc, #52] @ (8009b94 ) + 8009b5e: 2200 movs r2, #0 + 8009b60: 761a strb r2, [r3, #24] + hcan2.Init.AutoBusOff = ENABLE; + 8009b62: 4b0c ldr r3, [pc, #48] @ (8009b94 ) + 8009b64: 2201 movs r2, #1 + 8009b66: 765a strb r2, [r3, #25] + hcan2.Init.AutoWakeUp = ENABLE; + 8009b68: 4b0a ldr r3, [pc, #40] @ (8009b94 ) + 8009b6a: 2201 movs r2, #1 + 8009b6c: 769a strb r2, [r3, #26] + hcan2.Init.AutoRetransmission = ENABLE; + 8009b6e: 4b09 ldr r3, [pc, #36] @ (8009b94 ) + 8009b70: 2201 movs r2, #1 + 8009b72: 76da strb r2, [r3, #27] + hcan2.Init.ReceiveFifoLocked = DISABLE; + 8009b74: 4b07 ldr r3, [pc, #28] @ (8009b94 ) + 8009b76: 2200 movs r2, #0 + 8009b78: 771a strb r2, [r3, #28] + hcan2.Init.TransmitFifoPriority = ENABLE; + 8009b7a: 4b06 ldr r3, [pc, #24] @ (8009b94 ) + 8009b7c: 2201 movs r2, #1 + 8009b7e: 775a strb r2, [r3, #29] + if (HAL_CAN_Init(&hcan2) != HAL_OK) + 8009b80: 4804 ldr r0, [pc, #16] @ (8009b94 ) + 8009b82: f004 fbdd bl 800e340 + 8009b86: 4603 mov r3, r0 + 8009b88: 2b00 cmp r3, #0 + 8009b8a: d001 beq.n 8009b90 + { + Error_Handler(); + 8009b8c: f000 fef4 bl 800a978 + } + /* USER CODE BEGIN CAN2_Init 2 */ + + /* USER CODE END CAN2_Init 2 */ + +} + 8009b90: bf00 nop + 8009b92: bd80 pop {r7, pc} + 8009b94: 20000310 .word 0x20000310 + 8009b98: 40006800 .word 0x40006800 + +08009b9c : + +static uint32_t HAL_RCC_CAN1_CLK_ENABLED=0; + +void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) +{ + 8009b9c: b580 push {r7, lr} + 8009b9e: b08e sub sp, #56 @ 0x38 + 8009ba0: af00 add r7, sp, #0 + 8009ba2: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 8009ba4: f107 0320 add.w r3, r7, #32 + 8009ba8: 2200 movs r2, #0 + 8009baa: 601a str r2, [r3, #0] + 8009bac: 605a str r2, [r3, #4] + 8009bae: 609a str r2, [r3, #8] + 8009bb0: 60da str r2, [r3, #12] + if(canHandle->Instance==CAN1) + 8009bb2: 687b ldr r3, [r7, #4] + 8009bb4: 681b ldr r3, [r3, #0] + 8009bb6: 4a61 ldr r2, [pc, #388] @ (8009d3c ) + 8009bb8: 4293 cmp r3, r2 + 8009bba: d153 bne.n 8009c64 + { + /* USER CODE BEGIN CAN1_MspInit 0 */ + + /* USER CODE END CAN1_MspInit 0 */ + /* CAN1 clock enable */ + HAL_RCC_CAN1_CLK_ENABLED++; + 8009bbc: 4b60 ldr r3, [pc, #384] @ (8009d40 ) + 8009bbe: 681b ldr r3, [r3, #0] + 8009bc0: 3301 adds r3, #1 + 8009bc2: 4a5f ldr r2, [pc, #380] @ (8009d40 ) + 8009bc4: 6013 str r3, [r2, #0] + if(HAL_RCC_CAN1_CLK_ENABLED==1){ + 8009bc6: 4b5e ldr r3, [pc, #376] @ (8009d40 ) + 8009bc8: 681b ldr r3, [r3, #0] + 8009bca: 2b01 cmp r3, #1 + 8009bcc: d10b bne.n 8009be6 + __HAL_RCC_CAN1_CLK_ENABLE(); + 8009bce: 4b5d ldr r3, [pc, #372] @ (8009d44 ) + 8009bd0: 69db ldr r3, [r3, #28] + 8009bd2: 4a5c ldr r2, [pc, #368] @ (8009d44 ) + 8009bd4: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 + 8009bd8: 61d3 str r3, [r2, #28] + 8009bda: 4b5a ldr r3, [pc, #360] @ (8009d44 ) + 8009bdc: 69db ldr r3, [r3, #28] + 8009bde: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8009be2: 61fb str r3, [r7, #28] + 8009be4: 69fb ldr r3, [r7, #28] + } + + __HAL_RCC_GPIOD_CLK_ENABLE(); + 8009be6: 4b57 ldr r3, [pc, #348] @ (8009d44 ) + 8009be8: 699b ldr r3, [r3, #24] + 8009bea: 4a56 ldr r2, [pc, #344] @ (8009d44 ) + 8009bec: f043 0320 orr.w r3, r3, #32 + 8009bf0: 6193 str r3, [r2, #24] + 8009bf2: 4b54 ldr r3, [pc, #336] @ (8009d44 ) + 8009bf4: 699b ldr r3, [r3, #24] + 8009bf6: f003 0320 and.w r3, r3, #32 + 8009bfa: 61bb str r3, [r7, #24] + 8009bfc: 69bb ldr r3, [r7, #24] + /**CAN1 GPIO Configuration + PD0 ------> CAN1_RX + PD1 ------> CAN1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + 8009bfe: 2301 movs r3, #1 + 8009c00: 623b str r3, [r7, #32] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 8009c02: 2300 movs r3, #0 + 8009c04: 627b str r3, [r7, #36] @ 0x24 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8009c06: 2300 movs r3, #0 + 8009c08: 62bb str r3, [r7, #40] @ 0x28 + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 8009c0a: f107 0320 add.w r3, r7, #32 + 8009c0e: 4619 mov r1, r3 + 8009c10: 484d ldr r0, [pc, #308] @ (8009d48 ) + 8009c12: f005 fcd7 bl 800f5c4 + + GPIO_InitStruct.Pin = GPIO_PIN_1; + 8009c16: 2302 movs r3, #2 + 8009c18: 623b str r3, [r7, #32] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8009c1a: 2302 movs r3, #2 + 8009c1c: 627b str r3, [r7, #36] @ 0x24 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 8009c1e: 2303 movs r3, #3 + 8009c20: 62fb str r3, [r7, #44] @ 0x2c + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 8009c22: f107 0320 add.w r3, r7, #32 + 8009c26: 4619 mov r1, r3 + 8009c28: 4847 ldr r0, [pc, #284] @ (8009d48 ) + 8009c2a: f005 fccb bl 800f5c4 + + __HAL_AFIO_REMAP_CAN1_3(); + 8009c2e: 4b47 ldr r3, [pc, #284] @ (8009d4c ) + 8009c30: 685b ldr r3, [r3, #4] + 8009c32: 633b str r3, [r7, #48] @ 0x30 + 8009c34: 6b3b ldr r3, [r7, #48] @ 0x30 + 8009c36: f423 43c0 bic.w r3, r3, #24576 @ 0x6000 + 8009c3a: 633b str r3, [r7, #48] @ 0x30 + 8009c3c: 6b3b ldr r3, [r7, #48] @ 0x30 + 8009c3e: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 8009c42: 633b str r3, [r7, #48] @ 0x30 + 8009c44: 6b3b ldr r3, [r7, #48] @ 0x30 + 8009c46: f443 43c0 orr.w r3, r3, #24576 @ 0x6000 + 8009c4a: 633b str r3, [r7, #48] @ 0x30 + 8009c4c: 4a3f ldr r2, [pc, #252] @ (8009d4c ) + 8009c4e: 6b3b ldr r3, [r7, #48] @ 0x30 + 8009c50: 6053 str r3, [r2, #4] + + /* CAN1 interrupt Init */ + HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0); + 8009c52: 2200 movs r2, #0 + 8009c54: 2100 movs r1, #0 + 8009c56: 2014 movs r0, #20 + 8009c58: f005 fb1f bl 800f29a + HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); + 8009c5c: 2014 movs r0, #20 + 8009c5e: f005 fb38 bl 800f2d2 + HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn); + /* USER CODE BEGIN CAN2_MspInit 1 */ + + /* USER CODE END CAN2_MspInit 1 */ + } +} + 8009c62: e067 b.n 8009d34 + else if(canHandle->Instance==CAN2) + 8009c64: 687b ldr r3, [r7, #4] + 8009c66: 681b ldr r3, [r3, #0] + 8009c68: 4a39 ldr r2, [pc, #228] @ (8009d50 ) + 8009c6a: 4293 cmp r3, r2 + 8009c6c: d162 bne.n 8009d34 + __HAL_RCC_CAN2_CLK_ENABLE(); + 8009c6e: 4b35 ldr r3, [pc, #212] @ (8009d44 ) + 8009c70: 69db ldr r3, [r3, #28] + 8009c72: 4a34 ldr r2, [pc, #208] @ (8009d44 ) + 8009c74: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000 + 8009c78: 61d3 str r3, [r2, #28] + 8009c7a: 4b32 ldr r3, [pc, #200] @ (8009d44 ) + 8009c7c: 69db ldr r3, [r3, #28] + 8009c7e: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 + 8009c82: 617b str r3, [r7, #20] + 8009c84: 697b ldr r3, [r7, #20] + HAL_RCC_CAN1_CLK_ENABLED++; + 8009c86: 4b2e ldr r3, [pc, #184] @ (8009d40 ) + 8009c88: 681b ldr r3, [r3, #0] + 8009c8a: 3301 adds r3, #1 + 8009c8c: 4a2c ldr r2, [pc, #176] @ (8009d40 ) + 8009c8e: 6013 str r3, [r2, #0] + if(HAL_RCC_CAN1_CLK_ENABLED==1){ + 8009c90: 4b2b ldr r3, [pc, #172] @ (8009d40 ) + 8009c92: 681b ldr r3, [r3, #0] + 8009c94: 2b01 cmp r3, #1 + 8009c96: d10b bne.n 8009cb0 + __HAL_RCC_CAN1_CLK_ENABLE(); + 8009c98: 4b2a ldr r3, [pc, #168] @ (8009d44 ) + 8009c9a: 69db ldr r3, [r3, #28] + 8009c9c: 4a29 ldr r2, [pc, #164] @ (8009d44 ) + 8009c9e: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 + 8009ca2: 61d3 str r3, [r2, #28] + 8009ca4: 4b27 ldr r3, [pc, #156] @ (8009d44 ) + 8009ca6: 69db ldr r3, [r3, #28] + 8009ca8: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8009cac: 613b str r3, [r7, #16] + 8009cae: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 8009cb0: 4b24 ldr r3, [pc, #144] @ (8009d44 ) + 8009cb2: 699b ldr r3, [r3, #24] + 8009cb4: 4a23 ldr r2, [pc, #140] @ (8009d44 ) + 8009cb6: f043 0308 orr.w r3, r3, #8 + 8009cba: 6193 str r3, [r2, #24] + 8009cbc: 4b21 ldr r3, [pc, #132] @ (8009d44 ) + 8009cbe: 699b ldr r3, [r3, #24] + 8009cc0: f003 0308 and.w r3, r3, #8 + 8009cc4: 60fb str r3, [r7, #12] + 8009cc6: 68fb ldr r3, [r7, #12] + GPIO_InitStruct.Pin = GPIO_PIN_5; + 8009cc8: 2320 movs r3, #32 + 8009cca: 623b str r3, [r7, #32] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 8009ccc: 2300 movs r3, #0 + 8009cce: 627b str r3, [r7, #36] @ 0x24 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 8009cd0: 2300 movs r3, #0 + 8009cd2: 62bb str r3, [r7, #40] @ 0x28 + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 8009cd4: f107 0320 add.w r3, r7, #32 + 8009cd8: 4619 mov r1, r3 + 8009cda: 481e ldr r0, [pc, #120] @ (8009d54 ) + 8009cdc: f005 fc72 bl 800f5c4 + GPIO_InitStruct.Pin = GPIO_PIN_6; + 8009ce0: 2340 movs r3, #64 @ 0x40 + 8009ce2: 623b str r3, [r7, #32] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 8009ce4: 2302 movs r3, #2 + 8009ce6: 627b str r3, [r7, #36] @ 0x24 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 8009ce8: 2303 movs r3, #3 + 8009cea: 62fb str r3, [r7, #44] @ 0x2c + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 8009cec: f107 0320 add.w r3, r7, #32 + 8009cf0: 4619 mov r1, r3 + 8009cf2: 4818 ldr r0, [pc, #96] @ (8009d54 ) + 8009cf4: f005 fc66 bl 800f5c4 + __HAL_AFIO_REMAP_CAN2_ENABLE(); + 8009cf8: 4b14 ldr r3, [pc, #80] @ (8009d4c ) + 8009cfa: 685b ldr r3, [r3, #4] + 8009cfc: 637b str r3, [r7, #52] @ 0x34 + 8009cfe: 6b7b ldr r3, [r7, #52] @ 0x34 + 8009d00: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 8009d04: 637b str r3, [r7, #52] @ 0x34 + 8009d06: 6b7b ldr r3, [r7, #52] @ 0x34 + 8009d08: f443 0380 orr.w r3, r3, #4194304 @ 0x400000 + 8009d0c: 637b str r3, [r7, #52] @ 0x34 + 8009d0e: 4a0f ldr r2, [pc, #60] @ (8009d4c ) + 8009d10: 6b7b ldr r3, [r7, #52] @ 0x34 + 8009d12: 6053 str r3, [r2, #4] + HAL_NVIC_SetPriority(CAN2_TX_IRQn, 0, 0); + 8009d14: 2200 movs r2, #0 + 8009d16: 2100 movs r1, #0 + 8009d18: 203f movs r0, #63 @ 0x3f + 8009d1a: f005 fabe bl 800f29a + HAL_NVIC_EnableIRQ(CAN2_TX_IRQn); + 8009d1e: 203f movs r0, #63 @ 0x3f + 8009d20: f005 fad7 bl 800f2d2 + HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 0, 0); + 8009d24: 2200 movs r2, #0 + 8009d26: 2100 movs r1, #0 + 8009d28: 2041 movs r0, #65 @ 0x41 + 8009d2a: f005 fab6 bl 800f29a + HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn); + 8009d2e: 2041 movs r0, #65 @ 0x41 + 8009d30: f005 facf bl 800f2d2 +} + 8009d34: bf00 nop + 8009d36: 3738 adds r7, #56 @ 0x38 + 8009d38: 46bd mov sp, r7 + 8009d3a: bd80 pop {r7, pc} + 8009d3c: 40006400 .word 0x40006400 + 8009d40: 20000338 .word 0x20000338 + 8009d44: 40021000 .word 0x40021000 + 8009d48: 40011400 .word 0x40011400 + 8009d4c: 40010000 .word 0x40010000 + 8009d50: 40006800 .word 0x40006800 + 8009d54: 40010c00 .word 0x40010c00 + +08009d58 : +#include "debug.h" + +ChargingConnector_t CONN; +CONN_State_t connectorState; + +void CONN_Init(){ + 8009d58: b480 push {r7} + 8009d5a: af00 add r7, sp, #0 + + CONN.connControl = CMD_NONE; + 8009d5c: 4b08 ldr r3, [pc, #32] @ (8009d80 ) + 8009d5e: 2200 movs r2, #0 + 8009d60: 701a strb r2, [r3, #0] + CONN.connState = Unknown; + 8009d62: 4b07 ldr r3, [pc, #28] @ (8009d80 ) + 8009d64: 2200 movs r2, #0 + 8009d66: 705a strb r2, [r3, #1] + CONN.RequestedVoltage = PSU_MIN_VOLTAGE; + 8009d68: 4b05 ldr r3, [pc, #20] @ (8009d80 ) + 8009d6a: 2200 movs r2, #0 + 8009d6c: f062 0269 orn r2, r2, #105 @ 0x69 + 8009d70: 73da strb r2, [r3, #15] + 8009d72: 2200 movs r2, #0 + 8009d74: 741a strb r2, [r3, #16] + +} + 8009d76: bf00 nop + 8009d78: 46bd mov sp, r7 + 8009d7a: bc80 pop {r7} + 8009d7c: 4770 bx lr + 8009d7e: bf00 nop + 8009d80: 2000033c .word 0x2000033c + +08009d84 : + +void CONN_Loop(){ + 8009d84: b580 push {r7, lr} + 8009d86: af00 add r7, sp, #0 + static CONN_State_t last_connState = Unknown; + if(last_connState != CONN.connState){ + 8009d88: 4b1a ldr r3, [pc, #104] @ (8009df4 ) + 8009d8a: 785a ldrb r2, [r3, #1] + 8009d8c: 4b1a ldr r3, [pc, #104] @ (8009df8 ) + 8009d8e: 781b ldrb r3, [r3, #0] + 8009d90: 429a cmp r2, r3 + 8009d92: d006 beq.n 8009da2 + last_connState = CONN.connState; + 8009d94: 4b17 ldr r3, [pc, #92] @ (8009df4 ) + 8009d96: 785a ldrb r2, [r3, #1] + 8009d98: 4b17 ldr r3, [pc, #92] @ (8009df8 ) + 8009d9a: 701a strb r2, [r3, #0] + CONN.connControl = CMD_NONE; + 8009d9c: 4b15 ldr r3, [pc, #84] @ (8009df4 ) + 8009d9e: 2200 movs r2, #0 + 8009da0: 701a strb r2, [r3, #0] + } + + if(PSU0.cont_fault){ + 8009da2: 4b16 ldr r3, [pc, #88] @ (8009dfc ) + 8009da4: 7b1b ldrb r3, [r3, #12] + 8009da6: 2b00 cmp r3, #0 + 8009da8: d003 beq.n 8009db2 + CONN.chargingError = CONN_ERR_CONTACTOR; + 8009daa: 4b12 ldr r3, [pc, #72] @ (8009df4 ) + 8009dac: 2207 movs r2, #7 + 8009dae: 775a strb r2, [r3, #29] + 8009db0: e00e b.n 8009dd0 + } else if(PSU0.psu_fault){ + 8009db2: 4b12 ldr r3, [pc, #72] @ (8009dfc ) + 8009db4: 7b5b ldrb r3, [r3, #13] + 8009db6: 2b00 cmp r3, #0 + 8009db8: d003 beq.n 8009dc2 + CONN.chargingError = CONN_ERR_PSU_FAULT; + 8009dba: 4b0e ldr r3, [pc, #56] @ (8009df4 ) + 8009dbc: 220a movs r2, #10 + 8009dbe: 775a strb r2, [r3, #29] + 8009dc0: e006 b.n 8009dd0 + // } else if(!CTRL.ac_ok) { + // CONN.chargingError = CONN_ERR_AC_FAULT; + // } else + }else if (CONN.EvConnected == 0){ + 8009dc2: 4b0c ldr r3, [pc, #48] @ (8009df4 ) + 8009dc4: 7f9b ldrb r3, [r3, #30] + 8009dc6: 2b00 cmp r3, #0 + 8009dc8: d102 bne.n 8009dd0 + CONN.chargingError = CONN_NO_ERROR; + 8009dca: 4b0a ldr r3, [pc, #40] @ (8009df4 ) + 8009dcc: 2200 movs r2, #0 + 8009dce: 775a strb r2, [r3, #29] + } + + if(ED_TraceWarning(CONN.chargingError, 0)) printf("CONN%d Error: %d\n", 0, CONN.chargingError); + 8009dd0: 4b08 ldr r3, [pc, #32] @ (8009df4 ) + 8009dd2: 7f5b ldrb r3, [r3, #29] + 8009dd4: 2100 movs r1, #0 + 8009dd6: 4618 mov r0, r3 + 8009dd8: f000 fc66 bl 800a6a8 + 8009ddc: 4603 mov r3, r0 + 8009dde: 2b00 cmp r3, #0 + 8009de0: d006 beq.n 8009df0 + 8009de2: 4b04 ldr r3, [pc, #16] @ (8009df4 ) + 8009de4: 7f5b ldrb r3, [r3, #29] + 8009de6: 461a mov r2, r3 + 8009de8: 2100 movs r1, #0 + 8009dea: 4805 ldr r0, [pc, #20] @ (8009e00 ) + 8009dec: f009 fd9e bl 801392c + +} + 8009df0: bf00 nop + 8009df2: bd80 pop {r7, pc} + 8009df4: 2000033c .word 0x2000033c + 8009df8: 2000035c .word 0x2000035c + 8009dfc: 20000884 .word 0x20000884 + 8009e00: 08015ba0 .word 0x08015ba0 + +08009e04 : + +void CONN_Task(){ + 8009e04: b580 push {r7, lr} + 8009e06: af00 add r7, sp, #0 + /* CCS state machine is handled in serial.c. + * Keep this task lightweight for scheduler compatibility. + */ + if (CONN.chargingError != CONN_NO_ERROR) { + 8009e08: 4b0d ldr r3, [pc, #52] @ (8009e40 ) + 8009e0a: 7f5b ldrb r3, [r3, #29] + 8009e0c: 2b00 cmp r3, #0 + 8009e0e: d003 beq.n 8009e18 + CONN_SetState(Disabled); + 8009e10: 2002 movs r0, #2 + 8009e12: f000 f819 bl 8009e48 + return; + 8009e16: e012 b.n 8009e3e + } + + if (connectorState == Unknown) { + 8009e18: 4b0a ldr r3, [pc, #40] @ (8009e44 ) + 8009e1a: 781b ldrb r3, [r3, #0] + 8009e1c: 2b00 cmp r3, #0 + 8009e1e: d103 bne.n 8009e28 + CONN_SetState(Unplugged); + 8009e20: 2001 movs r0, #1 + 8009e22: f000 f811 bl 8009e48 + 8009e26: e00a b.n 8009e3e + } else if (connectorState == Disabled && CONN.chargingError == CONN_NO_ERROR) { + 8009e28: 4b06 ldr r3, [pc, #24] @ (8009e44 ) + 8009e2a: 781b ldrb r3, [r3, #0] + 8009e2c: 2b02 cmp r3, #2 + 8009e2e: d106 bne.n 8009e3e + 8009e30: 4b03 ldr r3, [pc, #12] @ (8009e40 ) + 8009e32: 7f5b ldrb r3, [r3, #29] + 8009e34: 2b00 cmp r3, #0 + 8009e36: d102 bne.n 8009e3e + CONN_SetState(Unplugged); + 8009e38: 2001 movs r0, #1 + 8009e3a: f000 f805 bl 8009e48 + } +} + 8009e3e: bd80 pop {r7, pc} + 8009e40: 2000033c .word 0x2000033c + 8009e44: 2000035b .word 0x2000035b + +08009e48 : + +void CONN_SetState(CONN_State_t state){ + 8009e48: b580 push {r7, lr} + 8009e4a: b082 sub sp, #8 + 8009e4c: af00 add r7, sp, #0 + 8009e4e: 4603 mov r3, r0 + 8009e50: 71fb strb r3, [r7, #7] + if (connectorState == state) { + 8009e52: 4b41 ldr r3, [pc, #260] @ (8009f58 ) + 8009e54: 781b ldrb r3, [r3, #0] + 8009e56: 79fa ldrb r2, [r7, #7] + 8009e58: 429a cmp r2, r3 + 8009e5a: d103 bne.n 8009e64 + CONN.connState = state; + 8009e5c: 4a3f ldr r2, [pc, #252] @ (8009f5c ) + 8009e5e: 79fb ldrb r3, [r7, #7] + 8009e60: 7053 strb r3, [r2, #1] + return; + 8009e62: e075 b.n 8009f50 + } + + connectorState = state; + 8009e64: 4a3c ldr r2, [pc, #240] @ (8009f58 ) + 8009e66: 79fb ldrb r3, [r7, #7] + 8009e68: 7013 strb r3, [r2, #0] + + if(connectorState == Unknown) log_printf(LOG_INFO, "Connector: Unknown\n"); + 8009e6a: 4b3b ldr r3, [pc, #236] @ (8009f58 ) + 8009e6c: 781b ldrb r3, [r3, #0] + 8009e6e: 2b00 cmp r3, #0 + 8009e70: d103 bne.n 8009e7a + 8009e72: 493b ldr r1, [pc, #236] @ (8009f60 ) + 8009e74: 2007 movs r0, #7 + 8009e76: f000 fabf bl 800a3f8 + if(connectorState == Unplugged) log_printf(LOG_INFO, "Connector: Unplugged\n"); + 8009e7a: 4b37 ldr r3, [pc, #220] @ (8009f58 ) + 8009e7c: 781b ldrb r3, [r3, #0] + 8009e7e: 2b01 cmp r3, #1 + 8009e80: d103 bne.n 8009e8a + 8009e82: 4938 ldr r1, [pc, #224] @ (8009f64 ) + 8009e84: 2007 movs r0, #7 + 8009e86: f000 fab7 bl 800a3f8 + if(connectorState == Disabled) log_printf(LOG_INFO, "Connector: Disabled\n"); + 8009e8a: 4b33 ldr r3, [pc, #204] @ (8009f58 ) + 8009e8c: 781b ldrb r3, [r3, #0] + 8009e8e: 2b02 cmp r3, #2 + 8009e90: d103 bne.n 8009e9a + 8009e92: 4935 ldr r1, [pc, #212] @ (8009f68 ) + 8009e94: 2007 movs r0, #7 + 8009e96: f000 faaf bl 800a3f8 + if(connectorState == Preparing) log_printf(LOG_INFO, "Connector: Preparing\n"); + 8009e9a: 4b2f ldr r3, [pc, #188] @ (8009f58 ) + 8009e9c: 781b ldrb r3, [r3, #0] + 8009e9e: 2b03 cmp r3, #3 + 8009ea0: d103 bne.n 8009eaa + 8009ea2: 4932 ldr r1, [pc, #200] @ (8009f6c ) + 8009ea4: 2007 movs r0, #7 + 8009ea6: f000 faa7 bl 800a3f8 + if(connectorState == AuthRequired) log_printf(LOG_INFO, "Connector: AuthRequired\n"); + 8009eaa: 4b2b ldr r3, [pc, #172] @ (8009f58 ) + 8009eac: 781b ldrb r3, [r3, #0] + 8009eae: 2b04 cmp r3, #4 + 8009eb0: d103 bne.n 8009eba + 8009eb2: 492f ldr r1, [pc, #188] @ (8009f70 ) + 8009eb4: 2007 movs r0, #7 + 8009eb6: f000 fa9f bl 800a3f8 + if(connectorState == WaitingForEnergy) log_printf(LOG_INFO, "Connector: WaitingForEnergy\n"); + 8009eba: 4b27 ldr r3, [pc, #156] @ (8009f58 ) + 8009ebc: 781b ldrb r3, [r3, #0] + 8009ebe: 2b05 cmp r3, #5 + 8009ec0: d103 bne.n 8009eca + 8009ec2: 492c ldr r1, [pc, #176] @ (8009f74 ) + 8009ec4: 2007 movs r0, #7 + 8009ec6: f000 fa97 bl 800a3f8 + if(connectorState == ChargingPausedEV) log_printf(LOG_INFO, "Connector: ChargingPausedEV\n"); + 8009eca: 4b23 ldr r3, [pc, #140] @ (8009f58 ) + 8009ecc: 781b ldrb r3, [r3, #0] + 8009ece: 2b06 cmp r3, #6 + 8009ed0: d103 bne.n 8009eda + 8009ed2: 4929 ldr r1, [pc, #164] @ (8009f78 ) + 8009ed4: 2007 movs r0, #7 + 8009ed6: f000 fa8f bl 800a3f8 + if(connectorState == ChargingPausedEVSE) log_printf(LOG_INFO, "Connector: ChargingPausedEVSE\n"); + 8009eda: 4b1f ldr r3, [pc, #124] @ (8009f58 ) + 8009edc: 781b ldrb r3, [r3, #0] + 8009ede: 2b07 cmp r3, #7 + 8009ee0: d103 bne.n 8009eea + 8009ee2: 4926 ldr r1, [pc, #152] @ (8009f7c ) + 8009ee4: 2007 movs r0, #7 + 8009ee6: f000 fa87 bl 800a3f8 + if(connectorState == Charging) log_printf(LOG_INFO, "Connector: Charging\n"); + 8009eea: 4b1b ldr r3, [pc, #108] @ (8009f58 ) + 8009eec: 781b ldrb r3, [r3, #0] + 8009eee: 2b08 cmp r3, #8 + 8009ef0: d103 bne.n 8009efa + 8009ef2: 4923 ldr r1, [pc, #140] @ (8009f80 ) + 8009ef4: 2007 movs r0, #7 + 8009ef6: f000 fa7f bl 800a3f8 + if(connectorState == AuthTimeout) log_printf(LOG_INFO, "Connector: AuthTimeout\n"); + 8009efa: 4b17 ldr r3, [pc, #92] @ (8009f58 ) + 8009efc: 781b ldrb r3, [r3, #0] + 8009efe: 2b09 cmp r3, #9 + 8009f00: d103 bne.n 8009f0a + 8009f02: 4920 ldr r1, [pc, #128] @ (8009f84 ) + 8009f04: 2007 movs r0, #7 + 8009f06: f000 fa77 bl 800a3f8 + if(connectorState == Finished) log_printf(LOG_INFO, "Connector: Finished\n"); + 8009f0a: 4b13 ldr r3, [pc, #76] @ (8009f58 ) + 8009f0c: 781b ldrb r3, [r3, #0] + 8009f0e: 2b0a cmp r3, #10 + 8009f10: d103 bne.n 8009f1a + 8009f12: 491d ldr r1, [pc, #116] @ (8009f88 ) + 8009f14: 2007 movs r0, #7 + 8009f16: f000 fa6f bl 800a3f8 + if(connectorState == FinishedEVSE) log_printf(LOG_INFO, "Connector: FinishedEVSE\n"); + 8009f1a: 4b0f ldr r3, [pc, #60] @ (8009f58 ) + 8009f1c: 781b ldrb r3, [r3, #0] + 8009f1e: 2b0b cmp r3, #11 + 8009f20: d103 bne.n 8009f2a + 8009f22: 491a ldr r1, [pc, #104] @ (8009f8c ) + 8009f24: 2007 movs r0, #7 + 8009f26: f000 fa67 bl 800a3f8 + if(connectorState == FinishedEV) log_printf(LOG_INFO, "Connector: FinishedEV\n"); + 8009f2a: 4b0b ldr r3, [pc, #44] @ (8009f58 ) + 8009f2c: 781b ldrb r3, [r3, #0] + 8009f2e: 2b0c cmp r3, #12 + 8009f30: d103 bne.n 8009f3a + 8009f32: 4917 ldr r1, [pc, #92] @ (8009f90 ) + 8009f34: 2007 movs r0, #7 + 8009f36: f000 fa5f bl 800a3f8 + if(connectorState == Replugging) log_printf(LOG_INFO, "Connector: Replugging\n"); + 8009f3a: 4b07 ldr r3, [pc, #28] @ (8009f58 ) + 8009f3c: 781b ldrb r3, [r3, #0] + 8009f3e: 2b0d cmp r3, #13 + 8009f40: d103 bne.n 8009f4a + 8009f42: 4914 ldr r1, [pc, #80] @ (8009f94 ) + 8009f44: 2007 movs r0, #7 + 8009f46: f000 fa57 bl 800a3f8 + + CONN.connState = state; + 8009f4a: 4a04 ldr r2, [pc, #16] @ (8009f5c ) + 8009f4c: 79fb ldrb r3, [r7, #7] + 8009f4e: 7053 strb r3, [r2, #1] +} + 8009f50: 3708 adds r7, #8 + 8009f52: 46bd mov sp, r7 + 8009f54: bd80 pop {r7, pc} + 8009f56: bf00 nop + 8009f58: 2000035b .word 0x2000035b + 8009f5c: 2000033c .word 0x2000033c + 8009f60: 08015bb4 .word 0x08015bb4 + 8009f64: 08015bc8 .word 0x08015bc8 + 8009f68: 08015be0 .word 0x08015be0 + 8009f6c: 08015bf8 .word 0x08015bf8 + 8009f70: 08015c10 .word 0x08015c10 + 8009f74: 08015c2c .word 0x08015c2c + 8009f78: 08015c4c .word 0x08015c4c + 8009f7c: 08015c6c .word 0x08015c6c + 8009f80: 08015c8c .word 0x08015c8c + 8009f84: 08015ca4 .word 0x08015ca4 + 8009f88: 08015cbc .word 0x08015cbc + 8009f8c: 08015cd4 .word 0x08015cd4 + 8009f90: 08015cf0 .word 0x08015cf0 + 8009f94: 08015d08 .word 0x08015d08 + +08009f98 : + +static int32_t cp_voltage_mv = 0; +static uint8_t cp_duty = 0; +CP_State_t fake_cp_state = EV_STATE_ACQUIRING; + +static uint32_t CP_ReadAdcChannel(uint32_t ch) { + 8009f98: b580 push {r7, lr} + 8009f9a: b084 sub sp, #16 + 8009f9c: af00 add r7, sp, #0 + 8009f9e: 6078 str r0, [r7, #4] + uint32_t adc = 0; + 8009fa0: 2300 movs r3, #0 + 8009fa2: 60fb str r3, [r7, #12] + + ADC_Select_Channel(ch); + 8009fa4: 6878 ldr r0, [r7, #4] + 8009fa6: f7ff fd25 bl 80099f4 + HAL_ADC_Start(&hadc1); + 8009faa: 4809 ldr r0, [pc, #36] @ (8009fd0 ) + 8009fac: f003 fd9a bl 800dae4 + HAL_ADC_PollForConversion(&hadc1, 10); + 8009fb0: 210a movs r1, #10 + 8009fb2: 4807 ldr r0, [pc, #28] @ (8009fd0 ) + 8009fb4: f003 fe70 bl 800dc98 + adc = HAL_ADC_GetValue(&hadc1); + 8009fb8: 4805 ldr r0, [pc, #20] @ (8009fd0 ) + 8009fba: f003 ff73 bl 800dea4 + 8009fbe: 60f8 str r0, [r7, #12] + HAL_ADC_Stop(&hadc1); + 8009fc0: 4803 ldr r0, [pc, #12] @ (8009fd0 ) + 8009fc2: f003 fe3d bl 800dc40 + + return adc; + 8009fc6: 68fb ldr r3, [r7, #12] +} + 8009fc8: 4618 mov r0, r3 + 8009fca: 3710 adds r7, #16 + 8009fcc: 46bd mov sp, r7 + 8009fce: bd80 pop {r7, pc} + 8009fd0: 2000025c .word 0x2000025c + +08009fd4 : +#define VREFINT_CAL_ADDR ((uint16_t*)0x1FFFF7BA) // для STM32F1! + +static int32_t CP_ReadVoltageMv(void) +{ + 8009fd4: b580 push {r7, lr} + 8009fd6: b084 sub sp, #16 + 8009fd8: af00 add r7, sp, #0 + uint32_t adc = 0; + 8009fda: 2300 movs r3, #0 + 8009fdc: 60fb str r3, [r7, #12] + int32_t v_adc_mv = 0; + 8009fde: 2300 movs r3, #0 + 8009fe0: 60bb str r3, [r7, #8] + int32_t v_out_mv = 0; + 8009fe2: 2300 movs r3, #0 + 8009fe4: 607b str r3, [r7, #4] + + adc = CP_ReadAdcChannel((uint32_t)4u); + 8009fe6: 2004 movs r0, #4 + 8009fe8: f7ff ffd6 bl 8009f98 + 8009fec: 60f8 str r0, [r7, #12] + v_adc_mv = (int32_t)((adc * 3300u) / 4095u); + 8009fee: 68fb ldr r3, [r7, #12] + 8009ff0: f640 42e4 movw r2, #3300 @ 0xce4 + 8009ff4: fb03 f202 mul.w r2, r3, r2 + 8009ff8: 4b0d ldr r3, [pc, #52] @ (800a030 ) + 8009ffa: fba3 1302 umull r1, r3, r3, r2 + 8009ffe: 1ad2 subs r2, r2, r3 + 800a000: 0852 lsrs r2, r2, #1 + 800a002: 4413 add r3, r2 + 800a004: 0adb lsrs r3, r3, #11 + 800a006: 60bb str r3, [r7, #8] + v_out_mv = ((v_adc_mv - 1723) * 1000) / 130; + 800a008: 68bb ldr r3, [r7, #8] + 800a00a: f2a3 63bb subw r3, r3, #1723 @ 0x6bb + 800a00e: f44f 727a mov.w r2, #1000 @ 0x3e8 + 800a012: fb02 f303 mul.w r3, r2, r3 + 800a016: 4a07 ldr r2, [pc, #28] @ (800a034 ) + 800a018: fb82 1203 smull r1, r2, r2, r3 + 800a01c: 1192 asrs r2, r2, #6 + 800a01e: 17db asrs r3, r3, #31 + 800a020: 1ad3 subs r3, r2, r3 + 800a022: 607b str r3, [r7, #4] + + return v_out_mv; + 800a024: 687b ldr r3, [r7, #4] +} + 800a026: 4618 mov r0, r3 + 800a028: 3710 adds r7, #16 + 800a02a: 46bd mov sp, r7 + 800a02c: bd80 pop {r7, pc} + 800a02e: bf00 nop + 800a030: 00100101 .word 0x00100101 + 800a034: 7e07e07f .word 0x7e07e07f + +0800a038 : + +void CP_Init(void) { + 800a038: b580 push {r7, lr} + 800a03a: af00 add r7, sp, #0 + /* TIM3_CH2 (PA7): set 1kHz PWM like original CCS logic. */ + htim3.Instance->PSC = 160 - 1; + 800a03c: 4b0e ldr r3, [pc, #56] @ (800a078 ) + 800a03e: 681b ldr r3, [r3, #0] + 800a040: 229f movs r2, #159 @ 0x9f + 800a042: 629a str r2, [r3, #40] @ 0x28 + htim3.Instance->ARR = MAX_DUTY - 1; + 800a044: 4b0c ldr r3, [pc, #48] @ (800a078 ) + 800a046: 681b ldr r3, [r3, #0] + 800a048: f240 12c1 movw r2, #449 @ 0x1c1 + 800a04c: 62da str r2, [r3, #44] @ 0x2c + +#if DUTY_INVERT == 0 + htim3.Instance->CCR2 = MAX_DUTY; + 800a04e: 4b0a ldr r3, [pc, #40] @ (800a078 ) + 800a050: 681b ldr r3, [r3, #0] + 800a052: f44f 72e1 mov.w r2, #450 @ 0x1c2 + 800a056: 639a str r2, [r3, #56] @ 0x38 + htim3.Instance->CCR1 = MAX_DUTY + 5; + 800a058: 4b07 ldr r3, [pc, #28] @ (800a078 ) + 800a05a: 681b ldr r3, [r3, #0] + 800a05c: f240 12c7 movw r2, #455 @ 0x1c7 + 800a060: 635a str r2, [r3, #52] @ 0x34 +#else + htim3.Instance->CCR2 = 0; + htim3.Instance->CCR1 = 0; +#endif + + HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); + 800a062: 2104 movs r1, #4 + 800a064: 4804 ldr r0, [pc, #16] @ (800a078 ) + 800a066: f006 ffcb bl 8011000 + HAL_TIM_OC_Start_IT(&htim3, TIM_CHANNEL_1); + 800a06a: 2100 movs r1, #0 + 800a06c: 4802 ldr r0, [pc, #8] @ (800a078 ) + 800a06e: f006 fe79 bl 8010d64 +} + 800a072: bf00 nop + 800a074: bd80 pop {r7, pc} + 800a076: bf00 nop + 800a078: 20001020 .word 0x20001020 + +0800a07c : + +void CP_SetDuty(uint8_t percentage) { + 800a07c: b480 push {r7} + 800a07e: b085 sub sp, #20 + 800a080: af00 add r7, sp, #0 + 800a082: 4603 mov r3, r0 + 800a084: 71fb strb r3, [r7, #7] + uint32_t pwmduty = MAX_DUTY * percentage / 100; + 800a086: 79fb ldrb r3, [r7, #7] + 800a088: f44f 72e1 mov.w r2, #450 @ 0x1c2 + 800a08c: fb02 f303 mul.w r3, r2, r3 + 800a090: 4a0b ldr r2, [pc, #44] @ (800a0c0 ) + 800a092: fb82 1203 smull r1, r2, r2, r3 + 800a096: 1152 asrs r2, r2, #5 + 800a098: 17db asrs r3, r3, #31 + 800a09a: 1ad3 subs r3, r2, r3 + 800a09c: 60fb str r3, [r7, #12] + cp_duty = percentage; + 800a09e: 4a09 ldr r2, [pc, #36] @ (800a0c4 ) + 800a0a0: 79fb ldrb r3, [r7, #7] + 800a0a2: 7013 strb r3, [r2, #0] + +#if DUTY_INVERT == 0 + htim3.Instance->CCR2 = pwmduty; + 800a0a4: 4b08 ldr r3, [pc, #32] @ (800a0c8 ) + 800a0a6: 681b ldr r3, [r3, #0] + 800a0a8: 68fa ldr r2, [r7, #12] + 800a0aa: 639a str r2, [r3, #56] @ 0x38 + htim3.Instance->CCR1 = 0 + 1; + 800a0ac: 4b06 ldr r3, [pc, #24] @ (800a0c8 ) + 800a0ae: 681b ldr r3, [r3, #0] + 800a0b0: 2201 movs r2, #1 + 800a0b2: 635a str r2, [r3, #52] @ 0x34 +#else + htim3.Instance->CCR2 = MAX_DUTY - pwmduty; + htim3.Instance->CCR1 = MAX_DUTY - pwmduty + 5; +#endif +} + 800a0b4: bf00 nop + 800a0b6: 3714 adds r7, #20 + 800a0b8: 46bd mov sp, r7 + 800a0ba: bc80 pop {r7} + 800a0bc: 4770 bx lr + 800a0be: bf00 nop + 800a0c0: 51eb851f .word 0x51eb851f + 800a0c4: 20000364 .word 0x20000364 + 800a0c8: 20001020 .word 0x20001020 + +0800a0cc : + +uint8_t CP_GetDuty(void) { + 800a0cc: b480 push {r7} + 800a0ce: af00 add r7, sp, #0 + return cp_duty; + 800a0d0: 4b02 ldr r3, [pc, #8] @ (800a0dc ) + 800a0d2: 781b ldrb r3, [r3, #0] +} + 800a0d4: 4618 mov r0, r3 + 800a0d6: 46bd mov sp, r7 + 800a0d8: bc80 pop {r7} + 800a0da: 4770 bx lr + 800a0dc: 20000364 .word 0x20000364 + +0800a0e0 : + +int32_t CP_GetVoltage(void) { + return cp_voltage_mv; +} + +CP_State_t CP_GetState(void) { + 800a0e0: b480 push {r7} + 800a0e2: b083 sub sp, #12 + 800a0e4: af00 add r7, sp, #0 + int32_t voltage_real = cp_voltage_mv; + 800a0e6: 4b24 ldr r3, [pc, #144] @ (800a178 ) + 800a0e8: 681b ldr r3, [r3, #0] + 800a0ea: 607b str r3, [r7, #4] + + if(fake_cp_state != EV_STATE_ACQUIRING) { + 800a0ec: 4b23 ldr r3, [pc, #140] @ (800a17c ) + 800a0ee: 781b ldrb r3, [r3, #0] + 800a0f0: 2b06 cmp r3, #6 + 800a0f2: d002 beq.n 800a0fa + return fake_cp_state; + 800a0f4: 4b21 ldr r3, [pc, #132] @ (800a17c ) + 800a0f6: 781b ldrb r3, [r3, #0] + 800a0f8: e038 b.n 800a16c + } + + if (voltage_real >= (12000-1000)) { + 800a0fa: 687b ldr r3, [r7, #4] + 800a0fc: f642 22f7 movw r2, #10999 @ 0x2af7 + 800a100: 4293 cmp r3, r2 + 800a102: dd01 ble.n 800a108 + return EV_STATE_A_IDLE; + 800a104: 2300 movs r3, #0 + 800a106: e031 b.n 800a16c + } else if (voltage_real >= (9000-1000) && voltage_real <= (9000+1000)) { + 800a108: 687b ldr r3, [r7, #4] + 800a10a: f5b3 5ffa cmp.w r3, #8000 @ 0x1f40 + 800a10e: db06 blt.n 800a11e + 800a110: 687b ldr r3, [r7, #4] + 800a112: f242 7210 movw r2, #10000 @ 0x2710 + 800a116: 4293 cmp r3, r2 + 800a118: dc01 bgt.n 800a11e + return EV_STATE_B_CONN_PREP; + 800a11a: 2301 movs r3, #1 + 800a11c: e026 b.n 800a16c + } else if (voltage_real >= (6000-1000) && voltage_real <= (6000+1000)) { + 800a11e: 687b ldr r3, [r7, #4] + 800a120: f241 3287 movw r2, #4999 @ 0x1387 + 800a124: 4293 cmp r3, r2 + 800a126: dd06 ble.n 800a136 + 800a128: 687b ldr r3, [r7, #4] + 800a12a: f641 3258 movw r2, #7000 @ 0x1b58 + 800a12e: 4293 cmp r3, r2 + 800a130: dc01 bgt.n 800a136 + return EV_STATE_C_CONN_ACTIVE; + 800a132: 2302 movs r3, #2 + 800a134: e01a b.n 800a16c + } else if (voltage_real >= (3000-1000) && voltage_real <= (3000 + 1000)) { + 800a136: 687b ldr r3, [r7, #4] + 800a138: f5b3 6ffa cmp.w r3, #2000 @ 0x7d0 + 800a13c: db05 blt.n 800a14a + 800a13e: 687b ldr r3, [r7, #4] + 800a140: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 + 800a144: dc01 bgt.n 800a14a + return EV_STATE_D_CONN_ACT_VENT; + 800a146: 2303 movs r3, #3 + 800a148: e010 b.n 800a16c + } else if (voltage_real >= (0-1000) && voltage_real <= (0+2000)){ + 800a14a: 687b ldr r3, [r7, #4] + 800a14c: f513 7f7a cmn.w r3, #1000 @ 0x3e8 + 800a150: db05 blt.n 800a15e + 800a152: 687b ldr r3, [r7, #4] + 800a154: f5b3 6ffa cmp.w r3, #2000 @ 0x7d0 + 800a158: dc01 bgt.n 800a15e + return EV_STATE_E_NO_POWER; + 800a15a: 2304 movs r3, #4 + 800a15c: e006 b.n 800a16c + } else if (voltage_real <= (-12000+1000)) { + 800a15e: 687b ldr r3, [r7, #4] + 800a160: 4a07 ldr r2, [pc, #28] @ (800a180 ) + 800a162: 4293 cmp r3, r2 + 800a164: da01 bge.n 800a16a + return EV_STATE_F_ERROR; + 800a166: 2305 movs r3, #5 + 800a168: e000 b.n 800a16c + } else { + return EV_STATE_ACQUIRING; + 800a16a: 2306 movs r3, #6 + } +} + 800a16c: 4618 mov r0, r3 + 800a16e: 370c adds r7, #12 + 800a170: 46bd mov sp, r7 + 800a172: bc80 pop {r7} + 800a174: 4770 bx lr + 800a176: bf00 nop + 800a178: 20000360 .word 0x20000360 + 800a17c: 20000004 .word 0x20000004 + 800a180: ffffd509 .word 0xffffd509 + +0800a184 : +void CP_Loop(void) { + (void)CP_GetState(); +} + +void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) +{ + 800a184: b580 push {r7, lr} + 800a186: b082 sub sp, #8 + 800a188: af00 add r7, sp, #0 + 800a18a: 6078 str r0, [r7, #4] + if (htim->Instance == TIM3 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { + 800a18c: 687b ldr r3, [r7, #4] + 800a18e: 681b ldr r3, [r3, #0] + 800a190: 4a0b ldr r2, [pc, #44] @ (800a1c0 ) + 800a192: 4293 cmp r3, r2 + 800a194: d111 bne.n 800a1ba + 800a196: 687b ldr r3, [r7, #4] + 800a198: 7f1b ldrb r3, [r3, #28] + 800a19a: 2b01 cmp r3, #1 + 800a19c: d10d bne.n 800a1ba + if (ADC_TryLock() == 0u) { + 800a19e: f7ff fc45 bl 8009a2c + 800a1a2: 4603 mov r3, r0 + 800a1a4: 2b00 cmp r3, #0 + 800a1a6: d007 beq.n 800a1b8 + return; + } + cp_voltage_mv = CP_ReadVoltageMv(); + 800a1a8: f7ff ff14 bl 8009fd4 + 800a1ac: 4603 mov r3, r0 + 800a1ae: 4a05 ldr r2, [pc, #20] @ (800a1c4 ) + 800a1b0: 6013 str r3, [r2, #0] + ADC_Unlock(); + 800a1b2: f7ff fc6d bl 8009a90 + 800a1b6: e000 b.n 800a1ba + return; + 800a1b8: bf00 nop + } +} + 800a1ba: 3708 adds r7, #8 + 800a1bc: 46bd mov sp, r7 + 800a1be: bd80 pop {r7, pc} + 800a1c0: 40000400 .word 0x40000400 + 800a1c4: 20000360 .word 0x20000360 + +0800a1c8 : + +CRC_HandleTypeDef hcrc; + +/* CRC init function */ +void MX_CRC_Init(void) +{ + 800a1c8: b580 push {r7, lr} + 800a1ca: af00 add r7, sp, #0 + /* USER CODE END CRC_Init 0 */ + + /* USER CODE BEGIN CRC_Init 1 */ + + /* USER CODE END CRC_Init 1 */ + hcrc.Instance = CRC; + 800a1cc: 4b06 ldr r3, [pc, #24] @ (800a1e8 ) + 800a1ce: 4a07 ldr r2, [pc, #28] @ (800a1ec ) + 800a1d0: 601a str r2, [r3, #0] + if (HAL_CRC_Init(&hcrc) != HAL_OK) + 800a1d2: 4805 ldr r0, [pc, #20] @ (800a1e8 ) + 800a1d4: f005 f897 bl 800f306 + 800a1d8: 4603 mov r3, r0 + 800a1da: 2b00 cmp r3, #0 + 800a1dc: d001 beq.n 800a1e2 + { + Error_Handler(); + 800a1de: f000 fbcb bl 800a978 + } + /* USER CODE BEGIN CRC_Init 2 */ + + /* USER CODE END CRC_Init 2 */ + +} + 800a1e2: bf00 nop + 800a1e4: bd80 pop {r7, pc} + 800a1e6: bf00 nop + 800a1e8: 20000368 .word 0x20000368 + 800a1ec: 40023000 .word 0x40023000 + +0800a1f0 : + +void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle) +{ + 800a1f0: b480 push {r7} + 800a1f2: b085 sub sp, #20 + 800a1f4: af00 add r7, sp, #0 + 800a1f6: 6078 str r0, [r7, #4] + + if(crcHandle->Instance==CRC) + 800a1f8: 687b ldr r3, [r7, #4] + 800a1fa: 681b ldr r3, [r3, #0] + 800a1fc: 4a09 ldr r2, [pc, #36] @ (800a224 ) + 800a1fe: 4293 cmp r3, r2 + 800a200: d10b bne.n 800a21a + { + /* USER CODE BEGIN CRC_MspInit 0 */ + + /* USER CODE END CRC_MspInit 0 */ + /* CRC clock enable */ + __HAL_RCC_CRC_CLK_ENABLE(); + 800a202: 4b09 ldr r3, [pc, #36] @ (800a228 ) + 800a204: 695b ldr r3, [r3, #20] + 800a206: 4a08 ldr r2, [pc, #32] @ (800a228 ) + 800a208: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800a20c: 6153 str r3, [r2, #20] + 800a20e: 4b06 ldr r3, [pc, #24] @ (800a228 ) + 800a210: 695b ldr r3, [r3, #20] + 800a212: f003 0340 and.w r3, r3, #64 @ 0x40 + 800a216: 60fb str r3, [r7, #12] + 800a218: 68fb ldr r3, [r7, #12] + /* USER CODE BEGIN CRC_MspInit 1 */ + + /* USER CODE END CRC_MspInit 1 */ + } +} + 800a21a: bf00 nop + 800a21c: 3714 adds r7, #20 + 800a21e: 46bd mov sp, r7 + 800a220: bc80 pop {r7} + 800a222: 4770 bx lr + 800a224: 40023000 .word 0x40023000 + 800a228: 40021000 .word 0x40021000 + +0800a22c <_write>: + + + +#if defined(__GNUC__) +int _write(int fd, char * ptr, int len) +{ + 800a22c: b580 push {r7, lr} + 800a22e: b084 sub sp, #16 + 800a230: af00 add r7, sp, #0 + 800a232: 60f8 str r0, [r7, #12] + 800a234: 60b9 str r1, [r7, #8] + 800a236: 607a str r2, [r7, #4] + debug_buffer_add((const uint8_t*)ptr, len); + 800a238: 687b ldr r3, [r7, #4] + 800a23a: b29b uxth r3, r3 + 800a23c: 4619 mov r1, r3 + 800a23e: 68b8 ldr r0, [r7, #8] + 800a240: f000 f806 bl 800a250 + return len; + 800a244: 687b ldr r3, [r7, #4] +} + 800a246: 4618 mov r0, r3 + 800a248: 3710 adds r7, #16 + 800a24a: 46bd mov sp, r7 + 800a24c: bd80 pop {r7, pc} + ... + +0800a250 : +#endif + +// Добавляет данные в кольцевой буфер +void debug_buffer_add(const uint8_t* data, uint16_t len) +{ + 800a250: b480 push {r7} + 800a252: b085 sub sp, #20 + 800a254: af00 add r7, sp, #0 + 800a256: 6078 str r0, [r7, #4] + 800a258: 460b mov r3, r1 + 800a25a: 807b strh r3, [r7, #2] + __ASM volatile ("cpsid i" : : : "memory"); + 800a25c: b672 cpsid i +} + 800a25e: bf00 nop + __disable_irq(); + + for (uint16_t i = 0; i < len; i++) { + 800a260: 2300 movs r3, #0 + 800a262: 81fb strh r3, [r7, #14] + 800a264: e045 b.n 800a2f2 + // Если буфер полон, перезаписываем старые данные + if (debug_buffer.count >= DEBUG_BUFFER_SIZE) { + 800a266: 4b28 ldr r3, [pc, #160] @ (800a308 ) + 800a268: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a26c: b29b uxth r3, r3 + 800a26e: f5b3 6f80 cmp.w r3, #1024 @ 0x400 + 800a272: d318 bcc.n 800a2a6 + debug_buffer.read_index = (debug_buffer.read_index + 1) % DEBUG_BUFFER_SIZE; + 800a274: 4b24 ldr r3, [pc, #144] @ (800a308 ) + 800a276: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 + 800a27a: b29b uxth r3, r3 + 800a27c: 3301 adds r3, #1 + 800a27e: 425a negs r2, r3 + 800a280: f3c3 0309 ubfx r3, r3, #0, #10 + 800a284: f3c2 0209 ubfx r2, r2, #0, #10 + 800a288: bf58 it pl + 800a28a: 4253 negpl r3, r2 + 800a28c: b29a uxth r2, r3 + 800a28e: 4b1e ldr r3, [pc, #120] @ (800a308 ) + 800a290: f8a3 2402 strh.w r2, [r3, #1026] @ 0x402 + debug_buffer.count--; + 800a294: 4b1c ldr r3, [pc, #112] @ (800a308 ) + 800a296: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a29a: b29b uxth r3, r3 + 800a29c: 3b01 subs r3, #1 + 800a29e: b29a uxth r2, r3 + 800a2a0: 4b19 ldr r3, [pc, #100] @ (800a308 ) + 800a2a2: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 + } + + debug_buffer.buffer[debug_buffer.write_index] = data[i]; + 800a2a6: 89fb ldrh r3, [r7, #14] + 800a2a8: 687a ldr r2, [r7, #4] + 800a2aa: 4413 add r3, r2 + 800a2ac: 4a16 ldr r2, [pc, #88] @ (800a308 ) + 800a2ae: f8b2 2400 ldrh.w r2, [r2, #1024] @ 0x400 + 800a2b2: b292 uxth r2, r2 + 800a2b4: 7819 ldrb r1, [r3, #0] + 800a2b6: 4b14 ldr r3, [pc, #80] @ (800a308 ) + 800a2b8: 5499 strb r1, [r3, r2] + debug_buffer.write_index = (debug_buffer.write_index + 1) % DEBUG_BUFFER_SIZE; + 800a2ba: 4b13 ldr r3, [pc, #76] @ (800a308 ) + 800a2bc: f8b3 3400 ldrh.w r3, [r3, #1024] @ 0x400 + 800a2c0: b29b uxth r3, r3 + 800a2c2: 3301 adds r3, #1 + 800a2c4: 425a negs r2, r3 + 800a2c6: f3c3 0309 ubfx r3, r3, #0, #10 + 800a2ca: f3c2 0209 ubfx r2, r2, #0, #10 + 800a2ce: bf58 it pl + 800a2d0: 4253 negpl r3, r2 + 800a2d2: b29a uxth r2, r3 + 800a2d4: 4b0c ldr r3, [pc, #48] @ (800a308 ) + 800a2d6: f8a3 2400 strh.w r2, [r3, #1024] @ 0x400 + debug_buffer.count++; + 800a2da: 4b0b ldr r3, [pc, #44] @ (800a308 ) + 800a2dc: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a2e0: b29b uxth r3, r3 + 800a2e2: 3301 adds r3, #1 + 800a2e4: b29a uxth r2, r3 + 800a2e6: 4b08 ldr r3, [pc, #32] @ (800a308 ) + 800a2e8: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 + for (uint16_t i = 0; i < len; i++) { + 800a2ec: 89fb ldrh r3, [r7, #14] + 800a2ee: 3301 adds r3, #1 + 800a2f0: 81fb strh r3, [r7, #14] + 800a2f2: 89fa ldrh r2, [r7, #14] + 800a2f4: 887b ldrh r3, [r7, #2] + 800a2f6: 429a cmp r2, r3 + 800a2f8: d3b5 bcc.n 800a266 + __ASM volatile ("cpsie i" : : : "memory"); + 800a2fa: b662 cpsie i +} + 800a2fc: bf00 nop + } + + __enable_irq(); +} + 800a2fe: bf00 nop + 800a300: 3714 adds r7, #20 + 800a302: 46bd mov sp, r7 + 800a304: bc80 pop {r7} + 800a306: 4770 bx lr + 800a308: 20000370 .word 0x20000370 + +0800a30c : + +// Возвращает количество доступных данных в буфере +uint16_t debug_buffer_available(void) +{ + 800a30c: b480 push {r7} + 800a30e: b083 sub sp, #12 + 800a310: af00 add r7, sp, #0 + __ASM volatile ("cpsid i" : : : "memory"); + 800a312: b672 cpsid i +} + 800a314: bf00 nop + __disable_irq(); + uint16_t count = debug_buffer.count; + 800a316: 4b06 ldr r3, [pc, #24] @ (800a330 ) + 800a318: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a31c: 80fb strh r3, [r7, #6] + __ASM volatile ("cpsie i" : : : "memory"); + 800a31e: b662 cpsie i +} + 800a320: bf00 nop + __enable_irq(); + return count; + 800a322: 88fb ldrh r3, [r7, #6] +} + 800a324: 4618 mov r0, r3 + 800a326: 370c adds r7, #12 + 800a328: 46bd mov sp, r7 + 800a32a: bc80 pop {r7} + 800a32c: 4770 bx lr + 800a32e: bf00 nop + 800a330: 20000370 .word 0x20000370 + +0800a334 : + +// Отправляет один пакет данных из буфера через SC_SendPacket (не более 250 байт) +void debug_buffer_send(void) +{ + 800a334: b580 push {r7, lr} + 800a336: b082 sub sp, #8 + 800a338: af00 add r7, sp, #0 + __ASM volatile ("cpsid i" : : : "memory"); + 800a33a: b672 cpsid i +} + 800a33c: bf00 nop + __disable_irq(); + + // Если буфер пуст, ничего не делаем + if (debug_buffer.count == 0) { + 800a33e: 4b2d ldr r3, [pc, #180] @ (800a3f4 ) + 800a340: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a344: b29b uxth r3, r3 + 800a346: 2b00 cmp r3, #0 + 800a348: d102 bne.n 800a350 + __ASM volatile ("cpsie i" : : : "memory"); + 800a34a: b662 cpsie i +} + 800a34c: bf00 nop + __enable_irq(); + return; + 800a34e: e04e b.n 800a3ee + } + + // Определяем сколько байт можно отправить (не более 250) + uint16_t bytes_to_send = debug_buffer.count; + 800a350: 4b28 ldr r3, [pc, #160] @ (800a3f4 ) + 800a352: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a356: 80fb strh r3, [r7, #6] + if (bytes_to_send > DEBUG_BUFFER_MAX_COUNT) { + 800a358: 88fb ldrh r3, [r7, #6] + 800a35a: 2b80 cmp r3, #128 @ 0x80 + 800a35c: d901 bls.n 800a362 + bytes_to_send = DEBUG_BUFFER_MAX_COUNT; + 800a35e: 2380 movs r3, #128 @ 0x80 + 800a360: 80fb strh r3, [r7, #6] + } + + // Вычисляем сколько байт до конца буфера + uint16_t bytes_to_end = DEBUG_BUFFER_SIZE - debug_buffer.read_index; + 800a362: 4b24 ldr r3, [pc, #144] @ (800a3f4 ) + 800a364: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 + 800a368: b29b uxth r3, r3 + 800a36a: f5c3 6380 rsb r3, r3, #1024 @ 0x400 + 800a36e: 80bb strh r3, [r7, #4] + + // Отправляем только непрерывный блок (до конца буфера или до bytes_to_send) + if (bytes_to_send > bytes_to_end) { + 800a370: 88fa ldrh r2, [r7, #6] + 800a372: 88bb ldrh r3, [r7, #4] + 800a374: 429a cmp r2, r3 + 800a376: d901 bls.n 800a37c + bytes_to_send = bytes_to_end; + 800a378: 88bb ldrh r3, [r7, #4] + 800a37a: 80fb strh r3, [r7, #6] + } + + // Отправляем данные напрямую из буфера + if(bytes_to_send == debug_buffer.count){ + 800a37c: 4b1d ldr r3, [pc, #116] @ (800a3f4 ) + 800a37e: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a382: b29b uxth r3, r3 + 800a384: 88fa ldrh r2, [r7, #6] + 800a386: 429a cmp r2, r3 + 800a388: d10c bne.n 800a3a4 + SC_SendPacket(&debug_buffer.buffer[debug_buffer.read_index], bytes_to_send, CMD_GET_LOG); + 800a38a: 4b1a ldr r3, [pc, #104] @ (800a3f4 ) + 800a38c: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 + 800a390: b29b uxth r3, r3 + 800a392: 461a mov r2, r3 + 800a394: 4b17 ldr r3, [pc, #92] @ (800a3f4 ) + 800a396: 4413 add r3, r2 + 800a398: 88f9 ldrh r1, [r7, #6] + 800a39a: 2250 movs r2, #80 @ 0x50 + 800a39c: 4618 mov r0, r3 + 800a39e: f002 f999 bl 800c6d4 + 800a3a2: e00b b.n 800a3bc + }else{ + SC_SendPacket(&debug_buffer.buffer[debug_buffer.read_index], bytes_to_send, CMD_GET_LOG_CONTINUE); + 800a3a4: 4b13 ldr r3, [pc, #76] @ (800a3f4 ) + 800a3a6: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 + 800a3aa: b29b uxth r3, r3 + 800a3ac: 461a mov r2, r3 + 800a3ae: 4b11 ldr r3, [pc, #68] @ (800a3f4 ) + 800a3b0: 4413 add r3, r2 + 800a3b2: 88f9 ldrh r1, [r7, #6] + 800a3b4: 2251 movs r2, #81 @ 0x51 + 800a3b6: 4618 mov r0, r3 + 800a3b8: f002 f98c bl 800c6d4 + } + debug_buffer.read_index = (debug_buffer.read_index + bytes_to_send) % DEBUG_BUFFER_SIZE; + 800a3bc: 4b0d ldr r3, [pc, #52] @ (800a3f4 ) + 800a3be: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 + 800a3c2: b29a uxth r2, r3 + 800a3c4: 88fb ldrh r3, [r7, #6] + 800a3c6: 4413 add r3, r2 + 800a3c8: b29b uxth r3, r3 + 800a3ca: f3c3 0309 ubfx r3, r3, #0, #10 + 800a3ce: b29a uxth r2, r3 + 800a3d0: 4b08 ldr r3, [pc, #32] @ (800a3f4 ) + 800a3d2: f8a3 2402 strh.w r2, [r3, #1026] @ 0x402 + debug_buffer.count -= bytes_to_send; + 800a3d6: 4b07 ldr r3, [pc, #28] @ (800a3f4 ) + 800a3d8: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 + 800a3dc: b29a uxth r2, r3 + 800a3de: 88fb ldrh r3, [r7, #6] + 800a3e0: 1ad3 subs r3, r2, r3 + 800a3e2: b29a uxth r2, r3 + 800a3e4: 4b03 ldr r3, [pc, #12] @ (800a3f4 ) + 800a3e6: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 + __ASM volatile ("cpsie i" : : : "memory"); + 800a3ea: b662 cpsie i +} + 800a3ec: bf00 nop + + __enable_irq(); +} + 800a3ee: 3708 adds r7, #8 + 800a3f0: 46bd mov sp, r7 + 800a3f2: bd80 pop {r7, pc} + 800a3f4: 20000370 .word 0x20000370 + +0800a3f8 : +#define LOG_BUFFER_SIZE 128 +uint8_t log_buffer[LOG_BUFFER_SIZE]; + +// Кастомный printf с приоритетом лога +int log_printf(LogLevel_t level, const char *format, ...) +{ + 800a3f8: b40e push {r1, r2, r3} + 800a3fa: b580 push {r7, lr} + 800a3fc: b085 sub sp, #20 + 800a3fe: af00 add r7, sp, #0 + 800a400: 4603 mov r3, r0 + 800a402: 71fb strb r3, [r7, #7] + va_list args; + int result; + + // Добавляем приоритет первым байтом + log_buffer[0] = (uint8_t)level; + 800a404: 4a15 ldr r2, [pc, #84] @ (800a45c ) + 800a406: 79fb ldrb r3, [r7, #7] + 800a408: 7013 strb r3, [r2, #0] + + // Форматируем строку начиная со второго байта + va_start(args, format); + 800a40a: f107 0320 add.w r3, r7, #32 + 800a40e: 60bb str r3, [r7, #8] + result = vsnprintf((char*)&log_buffer[1], LOG_BUFFER_SIZE - 2, format, args); + 800a410: 68bb ldr r3, [r7, #8] + 800a412: 69fa ldr r2, [r7, #28] + 800a414: 217e movs r1, #126 @ 0x7e + 800a416: 4812 ldr r0, [pc, #72] @ (800a460 ) + 800a418: f009 fa5c bl 80138d4 + 800a41c: 60f8 str r0, [r7, #12] + va_end(args); + + // Проверяем, не переполнился ли буфер + if (result < 0) { + 800a41e: 68fb ldr r3, [r7, #12] + 800a420: 2b00 cmp r3, #0 + 800a422: da01 bge.n 800a428 + return result; + 800a424: 68fb ldr r3, [r7, #12] + 800a426: e012 b.n 800a44e + } + + // Ограничиваем размер, чтобы оставить место для нуль-терминатора + if (result >= (LOG_BUFFER_SIZE - 2)) { + 800a428: 68fb ldr r3, [r7, #12] + 800a42a: 2b7d cmp r3, #125 @ 0x7d + 800a42c: dd01 ble.n 800a432 + result = LOG_BUFFER_SIZE - 2; + 800a42e: 237e movs r3, #126 @ 0x7e + 800a430: 60fb str r3, [r7, #12] + } + + // Добавляем нуль-терминатор в конец + log_buffer[result + 1] = '\0'; + 800a432: 68fb ldr r3, [r7, #12] + 800a434: 3301 adds r3, #1 + 800a436: 4a09 ldr r2, [pc, #36] @ (800a45c ) + 800a438: 2100 movs r1, #0 + 800a43a: 54d1 strb r1, [r2, r3] + + // Отправляем в буфер (приоритет + строка + нуль-терминатор) + debug_buffer_add(log_buffer, result + 2); + 800a43c: 68fb ldr r3, [r7, #12] + 800a43e: b29b uxth r3, r3 + 800a440: 3302 adds r3, #2 + 800a442: b29b uxth r3, r3 + 800a444: 4619 mov r1, r3 + 800a446: 4805 ldr r0, [pc, #20] @ (800a45c ) + 800a448: f7ff ff02 bl 800a250 + + return result; + 800a44c: 68fb ldr r3, [r7, #12] +} + 800a44e: 4618 mov r0, r3 + 800a450: 3714 adds r7, #20 + 800a452: 46bd mov sp, r7 + 800a454: e8bd 4080 ldmia.w sp!, {r7, lr} + 800a458: b003 add sp, #12 + 800a45a: 4770 bx lr + 800a45c: 20000778 .word 0x20000778 + 800a460: 20000779 .word 0x20000779 + +0800a464 : + * EXTI + PB8 ------> I2C1_SCL + PB9 ------> I2C1_SDA +*/ +void MX_GPIO_Init(void) +{ + 800a464: b580 push {r7, lr} + 800a466: b08a sub sp, #40 @ 0x28 + 800a468: af00 add r7, sp, #0 + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800a46a: f107 0314 add.w r3, r7, #20 + 800a46e: 2200 movs r2, #0 + 800a470: 601a str r2, [r3, #0] + 800a472: 605a str r2, [r3, #4] + 800a474: 609a str r2, [r3, #8] + 800a476: 60da str r2, [r3, #12] + + /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + 800a478: 4b7d ldr r3, [pc, #500] @ (800a670 ) + 800a47a: 699b ldr r3, [r3, #24] + 800a47c: 4a7c ldr r2, [pc, #496] @ (800a670 ) + 800a47e: f043 0310 orr.w r3, r3, #16 + 800a482: 6193 str r3, [r2, #24] + 800a484: 4b7a ldr r3, [pc, #488] @ (800a670 ) + 800a486: 699b ldr r3, [r3, #24] + 800a488: f003 0310 and.w r3, r3, #16 + 800a48c: 613b str r3, [r7, #16] + 800a48e: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 800a490: 4b77 ldr r3, [pc, #476] @ (800a670 ) + 800a492: 699b ldr r3, [r3, #24] + 800a494: 4a76 ldr r2, [pc, #472] @ (800a670 ) + 800a496: f043 0304 orr.w r3, r3, #4 + 800a49a: 6193 str r3, [r2, #24] + 800a49c: 4b74 ldr r3, [pc, #464] @ (800a670 ) + 800a49e: 699b ldr r3, [r3, #24] + 800a4a0: f003 0304 and.w r3, r3, #4 + 800a4a4: 60fb str r3, [r7, #12] + 800a4a6: 68fb ldr r3, [r7, #12] + __HAL_RCC_GPIOB_CLK_ENABLE(); + 800a4a8: 4b71 ldr r3, [pc, #452] @ (800a670 ) + 800a4aa: 699b ldr r3, [r3, #24] + 800a4ac: 4a70 ldr r2, [pc, #448] @ (800a670 ) + 800a4ae: f043 0308 orr.w r3, r3, #8 + 800a4b2: 6193 str r3, [r2, #24] + 800a4b4: 4b6e ldr r3, [pc, #440] @ (800a670 ) + 800a4b6: 699b ldr r3, [r3, #24] + 800a4b8: f003 0308 and.w r3, r3, #8 + 800a4bc: 60bb str r3, [r7, #8] + 800a4be: 68bb ldr r3, [r7, #8] + __HAL_RCC_GPIOE_CLK_ENABLE(); + 800a4c0: 4b6b ldr r3, [pc, #428] @ (800a670 ) + 800a4c2: 699b ldr r3, [r3, #24] + 800a4c4: 4a6a ldr r2, [pc, #424] @ (800a670 ) + 800a4c6: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800a4ca: 6193 str r3, [r2, #24] + 800a4cc: 4b68 ldr r3, [pc, #416] @ (800a670 ) + 800a4ce: 699b ldr r3, [r3, #24] + 800a4d0: f003 0340 and.w r3, r3, #64 @ 0x40 + 800a4d4: 607b str r3, [r7, #4] + 800a4d6: 687b ldr r3, [r7, #4] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 800a4d8: 4b65 ldr r3, [pc, #404] @ (800a670 ) + 800a4da: 699b ldr r3, [r3, #24] + 800a4dc: 4a64 ldr r2, [pc, #400] @ (800a670 ) + 800a4de: f043 0320 orr.w r3, r3, #32 + 800a4e2: 6193 str r3, [r2, #24] + 800a4e4: 4b62 ldr r3, [pc, #392] @ (800a670 ) + 800a4e6: 699b ldr r3, [r3, #24] + 800a4e8: f003 0320 and.w r3, r3, #32 + 800a4ec: 603b str r3, [r7, #0] + 800a4ee: 683b ldr r3, [r7, #0] + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOC, RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin, GPIO_PIN_RESET); + 800a4f0: 2200 movs r2, #0 + 800a4f2: 2138 movs r1, #56 @ 0x38 + 800a4f4: 485f ldr r0, [pc, #380] @ (800a674 ) + 800a4f6: f005 fa00 bl 800f8fa + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOE, RELAY1_Pin|RELAY2_Pin|RELAY3_Pin|RELAY4_Pin + 800a4fa: 2200 movs r2, #0 + 800a4fc: f44f 51f8 mov.w r1, #7936 @ 0x1f00 + 800a500: 485d ldr r0, [pc, #372] @ (800a678 ) + 800a502: f005 f9fa bl 800f8fa + |RELAY5_Pin, GPIO_PIN_RESET); + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(RELAY_CC_GPIO_Port, RELAY_CC_Pin, GPIO_PIN_RESET); + 800a506: 2200 movs r2, #0 + 800a508: f44f 4100 mov.w r1, #32768 @ 0x8000 + 800a50c: 485b ldr r0, [pc, #364] @ (800a67c ) + 800a50e: f005 f9f4 bl 800f8fa + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOD, RELAY_DC_Pin|USART2_DIR_Pin, GPIO_PIN_RESET); + 800a512: 2200 movs r2, #0 + 800a514: 2118 movs r1, #24 + 800a516: 485a ldr r0, [pc, #360] @ (800a680 ) + 800a518: f005 f9ef bl 800f8fa + + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(EE_WP_GPIO_Port, EE_WP_Pin, GPIO_PIN_RESET); + 800a51c: 2200 movs r2, #0 + 800a51e: 2180 movs r1, #128 @ 0x80 + 800a520: 4858 ldr r0, [pc, #352] @ (800a684 ) + 800a522: f005 f9ea bl 800f8fa + + /*Configure GPIO pins : RELAY_CP_Pin LOCK_A_Pin LOCK_B_Pin */ + GPIO_InitStruct.Pin = RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin; + 800a526: 2338 movs r3, #56 @ 0x38 + 800a528: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800a52a: 2301 movs r3, #1 + 800a52c: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a52e: 2300 movs r3, #0 + 800a530: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800a532: 2302 movs r3, #2 + 800a534: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800a536: f107 0314 add.w r3, r7, #20 + 800a53a: 4619 mov r1, r3 + 800a53c: 484d ldr r0, [pc, #308] @ (800a674 ) + 800a53e: f005 f841 bl 800f5c4 + + /*Configure GPIO pin : IN_SW0_Pin */ + GPIO_InitStruct.Pin = IN_SW0_Pin; + 800a542: 2302 movs r3, #2 + 800a544: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800a546: 2300 movs r3, #0 + 800a548: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a54a: 2300 movs r3, #0 + 800a54c: 61fb str r3, [r7, #28] + HAL_GPIO_Init(IN_SW0_GPIO_Port, &GPIO_InitStruct); + 800a54e: f107 0314 add.w r3, r7, #20 + 800a552: 4619 mov r1, r3 + 800a554: 4849 ldr r0, [pc, #292] @ (800a67c ) + 800a556: f005 f835 bl 800f5c4 + + /*Configure GPIO pin : IN_SW1_Pin */ + GPIO_InitStruct.Pin = IN_SW1_Pin; + 800a55a: 2304 movs r3, #4 + 800a55c: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800a55e: 2300 movs r3, #0 + 800a560: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_PULLDOWN; + 800a562: 2302 movs r3, #2 + 800a564: 61fb str r3, [r7, #28] + HAL_GPIO_Init(IN_SW1_GPIO_Port, &GPIO_InitStruct); + 800a566: f107 0314 add.w r3, r7, #20 + 800a56a: 4619 mov r1, r3 + 800a56c: 4843 ldr r0, [pc, #268] @ (800a67c ) + 800a56e: f005 f829 bl 800f5c4 + + /*Configure GPIO pins : IN0_Pin AC_OK_Pin ISO_IN_Pin */ + GPIO_InitStruct.Pin = IN0_Pin|AC_OK_Pin|ISO_IN_Pin; + 800a572: f244 0382 movw r3, #16514 @ 0x4082 + 800a576: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800a578: 2300 movs r3, #0 + 800a57a: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a57c: 2300 movs r3, #0 + 800a57e: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 800a580: f107 0314 add.w r3, r7, #20 + 800a584: 4619 mov r1, r3 + 800a586: 483c ldr r0, [pc, #240] @ (800a678 ) + 800a588: f005 f81c bl 800f5c4 + + /*Configure GPIO pins : RELAY1_Pin RELAY2_Pin RELAY3_Pin RELAY4_Pin + RELAY5_Pin */ + GPIO_InitStruct.Pin = RELAY1_Pin|RELAY2_Pin|RELAY3_Pin|RELAY4_Pin + 800a58c: f44f 53f8 mov.w r3, #7936 @ 0x1f00 + 800a590: 617b str r3, [r7, #20] + |RELAY5_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800a592: 2301 movs r3, #1 + 800a594: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a596: 2300 movs r3, #0 + 800a598: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800a59a: 2302 movs r3, #2 + 800a59c: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + 800a59e: f107 0314 add.w r3, r7, #20 + 800a5a2: 4619 mov r1, r3 + 800a5a4: 4834 ldr r0, [pc, #208] @ (800a678 ) + 800a5a6: f005 f80d bl 800f5c4 + + /*Configure GPIO pin : RELAY_CC_Pin */ + GPIO_InitStruct.Pin = RELAY_CC_Pin; + 800a5aa: f44f 4300 mov.w r3, #32768 @ 0x8000 + 800a5ae: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800a5b0: 2301 movs r3, #1 + 800a5b2: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a5b4: 2300 movs r3, #0 + 800a5b6: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800a5b8: 2302 movs r3, #2 + 800a5ba: 623b str r3, [r7, #32] + HAL_GPIO_Init(RELAY_CC_GPIO_Port, &GPIO_InitStruct); + 800a5bc: f107 0314 add.w r3, r7, #20 + 800a5c0: 4619 mov r1, r3 + 800a5c2: 482e ldr r0, [pc, #184] @ (800a67c ) + 800a5c4: f004 fffe bl 800f5c4 + + /*Configure GPIO pins : RELAY_DC_Pin USART2_DIR_Pin */ + GPIO_InitStruct.Pin = RELAY_DC_Pin|USART2_DIR_Pin; + 800a5c8: 2318 movs r3, #24 + 800a5ca: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800a5cc: 2301 movs r3, #1 + 800a5ce: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a5d0: 2300 movs r3, #0 + 800a5d2: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800a5d4: 2302 movs r3, #2 + 800a5d6: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 800a5d8: f107 0314 add.w r3, r7, #20 + 800a5dc: 4619 mov r1, r3 + 800a5de: 4828 ldr r0, [pc, #160] @ (800a680 ) + 800a5e0: f004 fff0 bl 800f5c4 + + /*Configure GPIO pin : IN_ESTOP_Pin */ + GPIO_InitStruct.Pin = IN_ESTOP_Pin; + 800a5e4: 2380 movs r3, #128 @ 0x80 + 800a5e6: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800a5e8: 2300 movs r3, #0 + 800a5ea: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a5ec: 2300 movs r3, #0 + 800a5ee: 61fb str r3, [r7, #28] + HAL_GPIO_Init(IN_ESTOP_GPIO_Port, &GPIO_InitStruct); + 800a5f0: f107 0314 add.w r3, r7, #20 + 800a5f4: 4619 mov r1, r3 + 800a5f6: 4822 ldr r0, [pc, #136] @ (800a680 ) + 800a5f8: f004 ffe4 bl 800f5c4 + + /*Configure GPIO pins : IN_FB2_Pin IN_FB1_Pin */ + GPIO_InitStruct.Pin = IN_FB2_Pin|IN_FB1_Pin; + 800a5fc: 2318 movs r3, #24 + 800a5fe: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800a600: 2300 movs r3, #0 + 800a602: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a604: 2300 movs r3, #0 + 800a606: 61fb str r3, [r7, #28] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 800a608: f107 0314 add.w r3, r7, #20 + 800a60c: 4619 mov r1, r3 + 800a60e: 481d ldr r0, [pc, #116] @ (800a684 ) + 800a610: f004 ffd8 bl 800f5c4 + + /*Configure GPIO pin : EE_WP_Pin */ + GPIO_InitStruct.Pin = EE_WP_Pin; + 800a614: 2380 movs r3, #128 @ 0x80 + 800a616: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + 800a618: 2301 movs r3, #1 + 800a61a: 61bb str r3, [r7, #24] + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800a61c: 2300 movs r3, #0 + 800a61e: 61fb str r3, [r7, #28] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800a620: 2302 movs r3, #2 + 800a622: 623b str r3, [r7, #32] + HAL_GPIO_Init(EE_WP_GPIO_Port, &GPIO_InitStruct); + 800a624: f107 0314 add.w r3, r7, #20 + 800a628: 4619 mov r1, r3 + 800a62a: 4816 ldr r0, [pc, #88] @ (800a684 ) + 800a62c: f004 ffca bl 800f5c4 + + /*Configure GPIO pins : PB8 PB9 */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; + 800a630: f44f 7340 mov.w r3, #768 @ 0x300 + 800a634: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; + 800a636: 2312 movs r3, #18 + 800a638: 61bb str r3, [r7, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 800a63a: 2303 movs r3, #3 + 800a63c: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + 800a63e: f107 0314 add.w r3, r7, #20 + 800a642: 4619 mov r1, r3 + 800a644: 480f ldr r0, [pc, #60] @ (800a684 ) + 800a646: f004 ffbd bl 800f5c4 + + /*Configure peripheral I/O remapping */ + __HAL_AFIO_REMAP_I2C1_ENABLE(); + 800a64a: 4b0f ldr r3, [pc, #60] @ (800a688 ) + 800a64c: 685b ldr r3, [r3, #4] + 800a64e: 627b str r3, [r7, #36] @ 0x24 + 800a650: 6a7b ldr r3, [r7, #36] @ 0x24 + 800a652: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 800a656: 627b str r3, [r7, #36] @ 0x24 + 800a658: 6a7b ldr r3, [r7, #36] @ 0x24 + 800a65a: f043 0302 orr.w r3, r3, #2 + 800a65e: 627b str r3, [r7, #36] @ 0x24 + 800a660: 4a09 ldr r2, [pc, #36] @ (800a688 ) + 800a662: 6a7b ldr r3, [r7, #36] @ 0x24 + 800a664: 6053 str r3, [r2, #4] + +} + 800a666: bf00 nop + 800a668: 3728 adds r7, #40 @ 0x28 + 800a66a: 46bd mov sp, r7 + 800a66c: bd80 pop {r7, pc} + 800a66e: bf00 nop + 800a670: 40021000 .word 0x40021000 + 800a674: 40011000 .word 0x40011000 + 800a678: 40011800 .word 0x40011800 + 800a67c: 40010800 .word 0x40010800 + 800a680: 40011400 .word 0x40011400 + 800a684: 40010c00 .word 0x40010c00 + 800a688: 40010000 .word 0x40010000 + +0800a68c : + * bootloader before starting this program. Unfortunately, function + * SystemInit() overwrites this change again. + * @return none. + */ +static void VectorBase_Config(void) +{ + 800a68c: b480 push {r7} + 800a68e: af00 add r7, sp, #0 + * c-startup code. + */ + extern const unsigned long g_pfnVectors[]; + + /* Remap the vector table to where the vector table is located for this program. */ + SCB->VTOR = (unsigned long)&g_pfnVectors[0]; + 800a690: 4b03 ldr r3, [pc, #12] @ (800a6a0 ) + 800a692: 4a04 ldr r2, [pc, #16] @ (800a6a4 ) + 800a694: 609a str r2, [r3, #8] +} + 800a696: bf00 nop + 800a698: 46bd mov sp, r7 + 800a69a: bc80 pop {r7} + 800a69c: 4770 bx lr + 800a69e: bf00 nop + 800a6a0: e000ed00 .word 0xe000ed00 + 800a6a4: 08008000 .word 0x08008000 + +0800a6a8 : + +uint8_t ED_TraceWarning(uint8_t flag, uint8_t id){ + 800a6a8: b480 push {r7} + 800a6aa: b085 sub sp, #20 + 800a6ac: af00 add r7, sp, #0 + 800a6ae: 4603 mov r3, r0 + 800a6b0: 460a mov r2, r1 + 800a6b2: 71fb strb r3, [r7, #7] + 800a6b4: 4613 mov r3, r2 + 800a6b6: 71bb strb r3, [r7, #6] + static uint8_t memory[32]; + if(id > 31) return 0; + 800a6b8: 79bb ldrb r3, [r7, #6] + 800a6ba: 2b1f cmp r3, #31 + 800a6bc: d901 bls.n 800a6c2 + 800a6be: 2300 movs r3, #0 + 800a6c0: e00e b.n 800a6e0 + uint8_t result = 0; + 800a6c2: 2300 movs r3, #0 + 800a6c4: 73fb strb r3, [r7, #15] + if(memory[id] != flag){ + 800a6c6: 79bb ldrb r3, [r7, #6] + 800a6c8: 4a08 ldr r2, [pc, #32] @ (800a6ec ) + 800a6ca: 5cd3 ldrb r3, [r2, r3] + 800a6cc: 79fa ldrb r2, [r7, #7] + 800a6ce: 429a cmp r2, r3 + 800a6d0: d001 beq.n 800a6d6 + result = 1; + 800a6d2: 2301 movs r3, #1 + 800a6d4: 73fb strb r3, [r7, #15] + } + memory[id] = flag; + 800a6d6: 79bb ldrb r3, [r7, #6] + 800a6d8: 4904 ldr r1, [pc, #16] @ (800a6ec ) + 800a6da: 79fa ldrb r2, [r7, #7] + 800a6dc: 54ca strb r2, [r1, r3] + return result; + 800a6de: 7bfb ldrb r3, [r7, #15] +} + 800a6e0: 4618 mov r0, r3 + 800a6e2: 3714 adds r7, #20 + 800a6e4: 46bd mov sp, r7 + 800a6e6: bc80 pop {r7} + 800a6e8: 4770 bx lr + 800a6ea: bf00 nop + 800a6ec: 200007f8 .word 0x200007f8 + +0800a6f0 : + + +void ED_Delay(uint32_t Delay) +{ + 800a6f0: b580 push {r7, lr} + 800a6f2: b084 sub sp, #16 + 800a6f4: af00 add r7, sp, #0 + 800a6f6: 6078 str r0, [r7, #4] + uint32_t tickstart = HAL_GetTick(); + 800a6f8: f003 f8ee bl 800d8d8 + 800a6fc: 60b8 str r0, [r7, #8] + uint32_t wait = Delay; + 800a6fe: 687b ldr r3, [r7, #4] + 800a700: 60fb str r3, [r7, #12] + + if (wait < HAL_MAX_DELAY) + 800a702: 68fb ldr r3, [r7, #12] + 800a704: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 800a708: d00e beq.n 800a728 + { + wait += (uint32_t)(uwTickFreq); + 800a70a: 4b0e ldr r3, [pc, #56] @ (800a744 ) + 800a70c: 781b ldrb r3, [r3, #0] + 800a70e: 461a mov r2, r3 + 800a710: 68fb ldr r3, [r7, #12] + 800a712: 4413 add r3, r2 + 800a714: 60fb str r3, [r7, #12] + } + + while ((HAL_GetTick() - tickstart) < wait){ + 800a716: e007 b.n 800a728 + CCS_SerialLoop(); + 800a718: f001 f92c bl 800b974 +// CP_Loop(); + CONN_Task(); + 800a71c: f7ff fb72 bl 8009e04 + LED_Task(); + 800a720: f001 f810 bl 800b744 + SC_Task(); + 800a724: f001 fe5c bl 800c3e0 + while ((HAL_GetTick() - tickstart) < wait){ + 800a728: f003 f8d6 bl 800d8d8 + 800a72c: 4602 mov r2, r0 + 800a72e: 68bb ldr r3, [r7, #8] + 800a730: 1ad3 subs r3, r2, r3 + 800a732: 68fa ldr r2, [r7, #12] + 800a734: 429a cmp r2, r3 + 800a736: d8ef bhi.n 800a718 + } +} + 800a738: bf00 nop + 800a73a: bf00 nop + 800a73c: 3710 adds r7, #16 + 800a73e: 46bd mov sp, r7 + 800a740: bd80 pop {r7, pc} + 800a742: bf00 nop + 800a744: 20000074 .word 0x20000074 + +0800a748 : + +void StopButtonControl(){ + 800a748: b580 push {r7, lr} + 800a74a: af00 add r7, sp, #0 + + //Charging do nothing + if(!IN_ReadInput(IN_ESTOP)){ + 800a74c: 2003 movs r0, #3 + 800a74e: f7fe fffd bl 800974c + 800a752: 4603 mov r3, r0 + 800a754: 2b00 cmp r3, #0 + 800a756: d102 bne.n 800a75e + CONN.connControl = CMD_STOP; + 800a758: 4b02 ldr r3, [pc, #8] @ (800a764 ) + 800a75a: 2201 movs r2, #1 + 800a75c: 701a strb r2, [r3, #0] + } + +} + 800a75e: bf00 nop + 800a760: bd80 pop {r7, pc} + 800a762: bf00 nop + 800a764: 2000033c .word 0x2000033c + +0800a768 : + +uint8_t temp0, temp1; + +static void CAN1_MinimalReInit(void) +{ + 800a768: b580 push {r7, lr} + 800a76a: af00 add r7, sp, #0 + HAL_CAN_Stop(&hcan1); + 800a76c: 480b ldr r0, [pc, #44] @ (800a79c ) + 800a76e: f004 f807 bl 800e780 + MX_CAN1_Init(); + 800a772: f7ff f9a7 bl 8009ac4 + if (HAL_CAN_Start(&hcan1) != HAL_OK) { + 800a776: 4809 ldr r0, [pc, #36] @ (800a79c ) + 800a778: f003 ffbe bl 800e6f8 + 800a77c: 4603 mov r3, r0 + 800a77e: 2b00 cmp r3, #0 + 800a780: d001 beq.n 800a786 + Error_Handler(); + 800a782: f000 f8f9 bl 800a978 + } + if (HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK) { + 800a786: 2102 movs r1, #2 + 800a788: 4804 ldr r0, [pc, #16] @ (800a79c ) + 800a78a: f004 fa66 bl 800ec5a + 800a78e: 4603 mov r3, r0 + 800a790: 2b00 cmp r3, #0 + 800a792: d001 beq.n 800a798 + Error_Handler(); + 800a794: f000 f8f0 bl 800a978 + } +} + 800a798: bf00 nop + 800a79a: bd80 pop {r7, pc} + 800a79c: 200002e8 .word 0x200002e8 + +0800a7a0
: +/** + * @brief The application entry point. + * @retval int + */ +int main(void) +{ + 800a7a0: b580 push {r7, lr} + 800a7a2: b082 sub sp, #8 + 800a7a4: af02 add r7, sp, #8 + + /* USER CODE BEGIN 1 */ + VectorBase_Config(); + 800a7a6: f7ff ff71 bl 800a68c + /* USER CODE END 1 */ + + /* MCU Configuration--------------------------------------------------------*/ + + /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ + HAL_Init(); + 800a7aa: f003 f83d bl 800d828 + + /* USER CODE BEGIN Init */ + HAL_RCC_DeInit(); + 800a7ae: f005 f8c9 bl 800f944 + /* USER CODE END Init */ + + /* Configure the system clock */ + SystemClock_Config(); + 800a7b2: f000 f871 bl 800a898 + /* USER CODE BEGIN SysInit */ + + /* USER CODE END SysInit */ + + /* Initialize all configured peripherals */ + MX_GPIO_Init(); + 800a7b6: f7ff fe55 bl 800a464 + MX_ADC1_Init(); + 800a7ba: f7fe feb5 bl 8009528 + MX_CAN1_Init(); + 800a7be: f7ff f981 bl 8009ac4 + MX_CAN2_Init(); + 800a7c2: f7ff f9b5 bl 8009b30 + MX_RTC_Init(); + 800a7c6: f001 f85b bl 800b880 + MX_TIM4_Init(); + 800a7ca: f002 fce5 bl 800d198 + MX_USART2_UART_Init(); + 800a7ce: f002 fe63 bl 800d498 + MX_CRC_Init(); + 800a7d2: f7ff fcf9 bl 800a1c8 + MX_UART5_Init(); + 800a7d6: f002 fe0b bl 800d3f0 + MX_USART1_UART_Init(); + 800a7da: f002 fe33 bl 800d444 + MX_USART3_UART_Init(); + 800a7de: f002 fe85 bl 800d4ec + MX_TIM3_Init(); + 800a7e2: f002 fc4b bl 800d07c + /* USER CODE BEGIN 2 */ + Init_Peripheral(); + 800a7e6: f7ff f803 bl 80097f0 + LED_Init(); + 800a7ea: f000 ff8b bl 800b704 + + HAL_Delay(300); + 800a7ee: f44f 7096 mov.w r0, #300 @ 0x12c + 800a7f2: f003 f87b bl 800d8ec + CCS_Init(); + 800a7f6: f001 fa99 bl 800bd2c + SC_Init(); + 800a7fa: f001 fddd bl 800c3b8 + log_printf(LOG_INFO, "CCS module start\n"); + 800a7fe: 4921 ldr r1, [pc, #132] @ (800a884 ) + 800a800: 2007 movs r0, #7 + 800a802: f7ff fdf9 bl 800a3f8 + ReadVersion(); + 800a806: f001 fdb3 bl 800c370 + log_printf(LOG_INFO, "Serial number: %d\n", infoPacket.serialNumber); + 800a80a: 4b1f ldr r3, [pc, #124] @ (800a888 ) + 800a80c: 881b ldrh r3, [r3, #0] + 800a80e: b29b uxth r3, r3 + 800a810: 461a mov r2, r3 + 800a812: 491e ldr r1, [pc, #120] @ (800a88c ) + 800a814: 2007 movs r0, #7 + 800a816: f7ff fdef bl 800a3f8 + log_printf(LOG_INFO, "Board revision: %d\n", infoPacket.boardVersion); + 800a81a: 4b1b ldr r3, [pc, #108] @ (800a888 ) + 800a81c: 789b ldrb r3, [r3, #2] + 800a81e: 461a mov r2, r3 + 800a820: 491b ldr r1, [pc, #108] @ (800a890 ) + 800a822: 2007 movs r0, #7 + 800a824: f7ff fde8 bl 800a3f8 + log_printf(LOG_INFO, "FW version: %d.%d.%d\n", infoPacket.fw_version_major, infoPacket.fw_version_minor, infoPacket.fw_version_patch); + 800a828: 4b17 ldr r3, [pc, #92] @ (800a888 ) + 800a82a: 889b ldrh r3, [r3, #4] + 800a82c: b29b uxth r3, r3 + 800a82e: 461a mov r2, r3 + 800a830: 4b15 ldr r3, [pc, #84] @ (800a888 ) + 800a832: 88db ldrh r3, [r3, #6] + 800a834: b29b uxth r3, r3 + 800a836: 4619 mov r1, r3 + 800a838: 4b13 ldr r3, [pc, #76] @ (800a888 ) + 800a83a: 891b ldrh r3, [r3, #8] + 800a83c: b29b uxth r3, r3 + 800a83e: 9300 str r3, [sp, #0] + 800a840: 460b mov r3, r1 + 800a842: 4914 ldr r1, [pc, #80] @ (800a894 ) + 800a844: 2007 movs r0, #7 + 800a846: f7ff fdd7 bl 800a3f8 + CAN1_MinimalReInit(); + 800a84a: f7ff ff8d bl 800a768 + PSU_Init(); + 800a84e: f000 fa7d bl 800ad4c + CONN_Init(); + 800a852: f7ff fa81 bl 8009d58 + /* USER CODE END WHILE */ + + /* USER CODE BEGIN 3 */ + + + PSU_ReadWrite(); + 800a856: f000 fb87 bl 800af68 + PSU_Task(); + 800a85a: f000 fc25 bl 800b0a8 + ED_Delay(10); + 800a85e: 200a movs r0, #10 + 800a860: f7ff ff46 bl 800a6f0 + METER_CalculateEnergy(); + 800a864: f000 f88e bl 800a984 + CONN_Loop(); + 800a868: f7ff fa8c bl 8009d84 + LED_Write(); + 800a86c: f000 fe10 bl 800b490 + ED_Delay(10); + 800a870: 200a movs r0, #10 + 800a872: f7ff ff3d bl 800a6f0 + StopButtonControl(); + 800a876: f7ff ff67 bl 800a748 + ED_Delay(50); + 800a87a: 2032 movs r0, #50 @ 0x32 + 800a87c: f7ff ff38 bl 800a6f0 + { + 800a880: bf00 nop + 800a882: e7e8 b.n 800a856 + 800a884: 08015d54 .word 0x08015d54 + 800a888: 20001010 .word 0x20001010 + 800a88c: 08015d68 .word 0x08015d68 + 800a890: 08015d7c .word 0x08015d7c + 800a894: 08015d90 .word 0x08015d90 + +0800a898 : +/** + * @brief System Clock Configuration + * @retval None + */ +void SystemClock_Config(void) +{ + 800a898: b580 push {r7, lr} + 800a89a: b09c sub sp, #112 @ 0x70 + 800a89c: af00 add r7, sp, #0 + RCC_OscInitTypeDef RCC_OscInitStruct = {0}; + 800a89e: f107 0338 add.w r3, r7, #56 @ 0x38 + 800a8a2: 2238 movs r2, #56 @ 0x38 + 800a8a4: 2100 movs r1, #0 + 800a8a6: 4618 mov r0, r3 + 800a8a8: f009 f852 bl 8013950 + RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; + 800a8ac: f107 0324 add.w r3, r7, #36 @ 0x24 + 800a8b0: 2200 movs r2, #0 + 800a8b2: 601a str r2, [r3, #0] + 800a8b4: 605a str r2, [r3, #4] + 800a8b6: 609a str r2, [r3, #8] + 800a8b8: 60da str r2, [r3, #12] + 800a8ba: 611a str r2, [r3, #16] + RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; + 800a8bc: 1d3b adds r3, r7, #4 + 800a8be: 2220 movs r2, #32 + 800a8c0: 2100 movs r1, #0 + 800a8c2: 4618 mov r0, r3 + 800a8c4: f009 f844 bl 8013950 + + /** Initializes the RCC Oscillators according to the specified parameters + * in the RCC_OscInitTypeDef structure. + */ + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; + 800a8c8: 2305 movs r3, #5 + 800a8ca: 63bb str r3, [r7, #56] @ 0x38 + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + 800a8cc: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800a8d0: 643b str r3, [r7, #64] @ 0x40 + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5; + 800a8d2: 2304 movs r3, #4 + 800a8d4: 647b str r3, [r7, #68] @ 0x44 + RCC_OscInitStruct.LSEState = RCC_LSE_ON; + 800a8d6: 2301 movs r3, #1 + 800a8d8: 64bb str r3, [r7, #72] @ 0x48 + RCC_OscInitStruct.HSIState = RCC_HSI_ON; + 800a8da: 2301 movs r3, #1 + 800a8dc: 64fb str r3, [r7, #76] @ 0x4c + RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2; + 800a8de: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800a8e2: 63fb str r3, [r7, #60] @ 0x3c + RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; + 800a8e4: 2302 movs r3, #2 + 800a8e6: 65bb str r3, [r7, #88] @ 0x58 + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + 800a8e8: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800a8ec: 65fb str r3, [r7, #92] @ 0x5c + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; + 800a8ee: f44f 13e0 mov.w r3, #1835008 @ 0x1c0000 + 800a8f2: 663b str r3, [r7, #96] @ 0x60 + RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON; + 800a8f4: 2302 movs r3, #2 + 800a8f6: 667b str r3, [r7, #100] @ 0x64 + RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8; + 800a8f8: f44f 63c0 mov.w r3, #1536 @ 0x600 + 800a8fc: 66bb str r3, [r7, #104] @ 0x68 + RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5; + 800a8fe: 2340 movs r3, #64 @ 0x40 + 800a900: 66fb str r3, [r7, #108] @ 0x6c + if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) + 800a902: f107 0338 add.w r3, r7, #56 @ 0x38 + 800a906: 4618 mov r0, r3 + 800a908: f005 f8ec bl 800fae4 + 800a90c: 4603 mov r3, r0 + 800a90e: 2b00 cmp r3, #0 + 800a910: d001 beq.n 800a916 + { + Error_Handler(); + 800a912: f000 f831 bl 800a978 + } + + /** Initializes the CPU, AHB and APB buses clocks + */ + RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK + 800a916: 230f movs r3, #15 + 800a918: 627b str r3, [r7, #36] @ 0x24 + |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; + 800a91a: 2302 movs r3, #2 + 800a91c: 62bb str r3, [r7, #40] @ 0x28 + RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; + 800a91e: 2300 movs r3, #0 + 800a920: 62fb str r3, [r7, #44] @ 0x2c + RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; + 800a922: f44f 6380 mov.w r3, #1024 @ 0x400 + 800a926: 633b str r3, [r7, #48] @ 0x30 + RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; + 800a928: 2300 movs r3, #0 + 800a92a: 637b str r3, [r7, #52] @ 0x34 + + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) + 800a92c: f107 0324 add.w r3, r7, #36 @ 0x24 + 800a930: 2102 movs r1, #2 + 800a932: 4618 mov r0, r3 + 800a934: f005 fbec bl 8010110 + 800a938: 4603 mov r3, r0 + 800a93a: 2b00 cmp r3, #0 + 800a93c: d001 beq.n 800a942 + { + Error_Handler(); + 800a93e: f000 f81b bl 800a978 + } + PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC; + 800a942: 2303 movs r3, #3 + 800a944: 607b str r3, [r7, #4] + PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; + 800a946: f44f 7380 mov.w r3, #256 @ 0x100 + 800a94a: 60bb str r3, [r7, #8] + PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; + 800a94c: f44f 4300 mov.w r3, #32768 @ 0x8000 + 800a950: 60fb str r3, [r7, #12] + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) + 800a952: 1d3b adds r3, r7, #4 + 800a954: 4618 mov r0, r3 + 800a956: f005 fdd1 bl 80104fc + 800a95a: 4603 mov r3, r0 + 800a95c: 2b00 cmp r3, #0 + 800a95e: d001 beq.n 800a964 + { + Error_Handler(); + 800a960: f000 f80a bl 800a978 + } + + /** Configure the Systick interrupt time + */ + __HAL_RCC_PLLI2S_ENABLE(); + 800a964: 4b03 ldr r3, [pc, #12] @ (800a974 ) + 800a966: 2201 movs r2, #1 + 800a968: 601a str r2, [r3, #0] +} + 800a96a: bf00 nop + 800a96c: 3770 adds r7, #112 @ 0x70 + 800a96e: 46bd mov sp, r7 + 800a970: bd80 pop {r7, pc} + 800a972: bf00 nop + 800a974: 42420070 .word 0x42420070 + +0800a978 : +/** + * @brief This function is executed in case of error occurrence. + * @retval None + */ +void Error_Handler(void) +{ + 800a978: b480 push {r7} + 800a97a: af00 add r7, sp, #0 + __ASM volatile ("cpsid i" : : : "memory"); + 800a97c: b672 cpsid i +} + 800a97e: 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) + 800a980: bf00 nop + 800a982: e7fd b.n 800a980 + +0800a984 : + + +METER_t METER; + +// Функция для расчета и накопления энергии c дробной частью без счетчиков +void METER_CalculateEnergy() { + 800a984: e92d 43b0 stmdb sp!, {r4, r5, r7, r8, r9, lr} + 800a988: b084 sub sp, #16 + 800a98a: af00 add r7, sp, #0 + // Проверяем, что индекс находится в пределах массива + + METER.online = 0; + 800a98c: 4b2e ldr r3, [pc, #184] @ (800aa48 ) + 800a98e: 2200 movs r2, #0 + 800a990: 711a strb r2, [r3, #4] + + if(CONN.connState == Charging){ + 800a992: 4b2e ldr r3, [pc, #184] @ (800aa4c ) + 800a994: 785b ldrb r3, [r3, #1] + 800a996: 2b08 cmp r3, #8 + 800a998: d104 bne.n 800a9a4 + METER.enable = 1; + 800a99a: 4b2b ldr r3, [pc, #172] @ (800aa48 ) + 800a99c: 2201 movs r2, #1 + 800a99e: f883 2024 strb.w r2, [r3, #36] @ 0x24 + 800a9a2: e003 b.n 800a9ac + }else{ + METER.enable = 0; + 800a9a4: 4b28 ldr r3, [pc, #160] @ (800aa48 ) + 800a9a6: 2200 movs r2, #0 + 800a9a8: f883 2024 strb.w r2, [r3, #36] @ 0x24 + } + + uint32_t currentTick = HAL_GetTick(); // Получаем текущее время в миллисекундах + 800a9ac: f002 ff94 bl 800d8d8 + 800a9b0: 60f8 str r0, [r7, #12] + uint32_t elapsedTimeMs = currentTick - METER.lastTick; // Вычисляем время, прошедшее с последнего вызова в секундах + 800a9b2: 4b25 ldr r3, [pc, #148] @ (800aa48 ) + 800a9b4: 689b ldr r3, [r3, #8] + 800a9b6: 68fa ldr r2, [r7, #12] + 800a9b8: 1ad3 subs r3, r2, r3 + 800a9ba: 60bb str r3, [r7, #8] + METER.lastTick = currentTick; // Обновляем время последнего вызова для текущего коннектора + 800a9bc: 4a22 ldr r2, [pc, #136] @ (800aa48 ) + 800a9be: 68fb ldr r3, [r7, #12] + 800a9c0: 6093 str r3, [r2, #8] + uint32_t energyWs = CONN.Power * elapsedTimeMs / 1000; // Рассчитываем энергию в ватт-секундах за прошедший промежуток времени + 800a9c2: 4b22 ldr r3, [pc, #136] @ (800aa4c ) + 800a9c4: f8d3 3003 ldr.w r3, [r3, #3] + 800a9c8: 68ba ldr r2, [r7, #8] + 800a9ca: fb02 f303 mul.w r3, r2, r3 + 800a9ce: 4a20 ldr r2, [pc, #128] @ (800aa50 ) + 800a9d0: fba2 2303 umull r2, r3, r2, r3 + 800a9d4: 099b lsrs r3, r3, #6 + 800a9d6: 607b str r3, [r7, #4] + + //Расчет энергии теперь идет всегда, смещение берем суммарное + METER.EnergyPSU_Ws += energyWs; + 800a9d8: 4b1b ldr r3, [pc, #108] @ (800aa48 ) + 800a9da: e9d3 2304 ldrd r2, r3, [r3, #16] + 800a9de: 6879 ldr r1, [r7, #4] + 800a9e0: 2000 movs r0, #0 + 800a9e2: 460c mov r4, r1 + 800a9e4: 4605 mov r5, r0 + 800a9e6: eb12 0804 adds.w r8, r2, r4 + 800a9ea: eb43 0905 adc.w r9, r3, r5 + 800a9ee: 4b16 ldr r3, [pc, #88] @ (800aa48 ) + 800a9f0: e9c3 8904 strd r8, r9, [r3, #16] + + // Абсолютное значение энергии разъема складывается из накопленной дробной части и значения со счетчиков + METER.AbsoluteEnergy = (uint32_t)METER.EnergyPSU_Ws/3600; //переводим в Вт*час + 800a9f4: 4b14 ldr r3, [pc, #80] @ (800aa48 ) + 800a9f6: e9d3 2304 ldrd r2, r3, [r3, #16] + 800a9fa: 4b16 ldr r3, [pc, #88] @ (800aa54 ) + 800a9fc: fba3 2302 umull r2, r3, r3, r2 + 800aa00: 0adb lsrs r3, r3, #11 + 800aa02: 4a11 ldr r2, [pc, #68] @ (800aa48 ) + 800aa04: 6193 str r3, [r2, #24] + + if(METER.enable) { + 800aa06: 4b10 ldr r3, [pc, #64] @ (800aa48 ) + 800aa08: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 + 800aa0c: 2b00 cmp r3, #0 + 800aa0e: d008 beq.n 800aa22 + //enabled state + CONN.Energy = METER.AbsoluteEnergy - METER.EnergyOffset;//переводим в Вт*час + 800aa10: 4b0d ldr r3, [pc, #52] @ (800aa48 ) + 800aa12: 699a ldr r2, [r3, #24] + 800aa14: 4b0c ldr r3, [pc, #48] @ (800aa48 ) + 800aa16: 69db ldr r3, [r3, #28] + 800aa18: 1ad3 subs r3, r2, r3 + 800aa1a: 4a0c ldr r2, [pc, #48] @ (800aa4c ) + 800aa1c: f8c2 3007 str.w r3, [r2, #7] + METER.EnergyOffset = METER.AbsoluteEnergy; + + } + + +} + 800aa20: e00c b.n 800aa3c + CONN.Energy = 0; + 800aa22: 4b0a ldr r3, [pc, #40] @ (800aa4c ) + 800aa24: 2200 movs r2, #0 + 800aa26: 71da strb r2, [r3, #7] + 800aa28: 2200 movs r2, #0 + 800aa2a: 721a strb r2, [r3, #8] + 800aa2c: 2200 movs r2, #0 + 800aa2e: 725a strb r2, [r3, #9] + 800aa30: 2200 movs r2, #0 + 800aa32: 729a strb r2, [r3, #10] + METER.EnergyOffset = METER.AbsoluteEnergy; + 800aa34: 4b04 ldr r3, [pc, #16] @ (800aa48 ) + 800aa36: 699b ldr r3, [r3, #24] + 800aa38: 4a03 ldr r2, [pc, #12] @ (800aa48 ) + 800aa3a: 61d3 str r3, [r2, #28] +} + 800aa3c: bf00 nop + 800aa3e: 3710 adds r7, #16 + 800aa40: 46bd mov sp, r7 + 800aa42: e8bd 83b0 ldmia.w sp!, {r4, r5, r7, r8, r9, pc} + 800aa46: bf00 nop + 800aa48: 20000818 .word 0x20000818 + 800aa4c: 2000033c .word 0x2000033c + 800aa50: 10624dd3 .word 0x10624dd3 + 800aa54: 91a2b3c5 .word 0x91a2b3c5 + +0800aa58 : + +uint32_t can_lastpacket; + +extern CAN_HandleTypeDef hcan2; + +static void PSU_SwitchState(PSU_State_t state){ + 800aa58: b580 push {r7, lr} + 800aa5a: b082 sub sp, #8 + 800aa5c: af00 add r7, sp, #0 + 800aa5e: 4603 mov r3, r0 + 800aa60: 71fb strb r3, [r7, #7] + PSU0.state = state; + 800aa62: 4a06 ldr r2, [pc, #24] @ (800aa7c ) + 800aa64: 79fb ldrb r3, [r7, #7] + 800aa66: 71d3 strb r3, [r2, #7] + PSU0.statetick = HAL_GetTick(); + 800aa68: f002 ff36 bl 800d8d8 + 800aa6c: 4603 mov r3, r0 + 800aa6e: 4a03 ldr r2, [pc, #12] @ (800aa7c ) + 800aa70: 6113 str r3, [r2, #16] +} + 800aa72: bf00 nop + 800aa74: 3708 adds r7, #8 + 800aa76: 46bd mov sp, r7 + 800aa78: bd80 pop {r7, pc} + 800aa7a: bf00 nop + 800aa7c: 20000884 .word 0x20000884 + +0800aa80 : + +static uint32_t PSU_StateTime(void){ + 800aa80: b580 push {r7, lr} + 800aa82: af00 add r7, sp, #0 + return HAL_GetTick() - PSU0.statetick; + 800aa84: f002 ff28 bl 800d8d8 + 800aa88: 4602 mov r2, r0 + 800aa8a: 4b02 ldr r3, [pc, #8] @ (800aa94 ) + 800aa8c: 691b ldr r3, [r3, #16] + 800aa8e: 1ad3 subs r3, r2, r3 +} + 800aa90: 4618 mov r0, r3 + 800aa92: bd80 pop {r7, pc} + 800aa94: 20000884 .word 0x20000884 + +0800aa98 : + +void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){ + 800aa98: b580 push {r7, lr} + 800aa9a: b084 sub sp, #16 + 800aa9c: af00 add r7, sp, #0 + 800aa9e: 6078 str r0, [r7, #4] + + static CAN_RxHeaderTypeDef RxHeader; + static uint8_t RxData[8] = {0,}; + CanId_t CanId; + + if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData) == HAL_OK) + 800aaa0: 4b88 ldr r3, [pc, #544] @ (800acc4 ) + 800aaa2: 4a89 ldr r2, [pc, #548] @ (800acc8 ) + 800aaa4: 2101 movs r1, #1 + 800aaa6: 6878 ldr r0, [r7, #4] + 800aaa8: f003 ffb6 bl 800ea18 + 800aaac: 4603 mov r3, r0 + 800aaae: 2b00 cmp r3, #0 + 800aab0: f040 8104 bne.w 800acbc + { + memcpy(&CanId, &RxHeader.ExtId, sizeof(CanId_t)); + 800aab4: 4b84 ldr r3, [pc, #528] @ (800acc8 ) + 800aab6: 685b ldr r3, [r3, #4] + 800aab8: 60bb str r3, [r7, #8] + + /* Для DC30 поддерживается только один силовой модуль (source == 0) */ + if(CanId.source != 0) return; + 800aaba: 7a3b ldrb r3, [r7, #8] + 800aabc: 2b00 cmp r3, #0 + 800aabe: f040 80fc bne.w 800acba + can_lastpacket = HAL_GetTick(); + 800aac2: f002 ff09 bl 800d8d8 + 800aac6: 4603 mov r3, r0 + 800aac8: 4a80 ldr r2, [pc, #512] @ (800accc ) + 800aaca: 6013 str r3, [r2, #0] + + if(CanId.command==0x02){ + 800aacc: 7abb ldrb r3, [r7, #10] + 800aace: f003 033f and.w r3, r3, #63 @ 0x3f + 800aad2: b2db uxtb r3, r3 + 800aad4: 2b02 cmp r3, #2 + 800aad6: d105 bne.n 800aae4 + memcpy(&PSU_02, RxData, 8); + 800aad8: 4b7d ldr r3, [pc, #500] @ (800acd0 ) + 800aada: 4a7a ldr r2, [pc, #488] @ (800acc4 ) + 800aadc: e892 0003 ldmia.w r2, {r0, r1} + 800aae0: e883 0003 stmia.w r3, {r0, r1} + } + if(CanId.command==0x04){ + 800aae4: 7abb ldrb r3, [r7, #10] + 800aae6: f003 033f and.w r3, r3, #63 @ 0x3f + 800aaea: b2db uxtb r3, r3 + 800aaec: 2b04 cmp r3, #4 + 800aaee: d119 bne.n 800ab24 + memcpy(&PSU_04, RxData, 8); + 800aaf0: 4b78 ldr r3, [pc, #480] @ (800acd4 ) + 800aaf2: 4a74 ldr r2, [pc, #464] @ (800acc4 ) + 800aaf4: e892 0003 ldmia.w r2, {r0, r1} + 800aaf8: e883 0003 stmia.w r3, {r0, r1} + + PSU0.tempAmbient = PSU_04.moduleTemperature; + 800aafc: 4b75 ldr r3, [pc, #468] @ (800acd4 ) + 800aafe: 791b ldrb r3, [r3, #4] + 800ab00: 461a mov r2, r3 + 800ab02: 4b75 ldr r3, [pc, #468] @ (800acd8 ) + 800ab04: 61da str r2, [r3, #28] + PSU0.status0.raw = PSU_04.modularForm0; + 800ab06: 4b73 ldr r3, [pc, #460] @ (800acd4 ) + 800ab08: 7a1a ldrb r2, [r3, #8] + 800ab0a: 4b73 ldr r3, [pc, #460] @ (800acd8 ) + 800ab0c: f883 2020 strb.w r2, [r3, #32] + PSU0.status1.raw = PSU_04.modularForm1; + 800ab10: 4b70 ldr r3, [pc, #448] @ (800acd4 ) + 800ab12: 79da ldrb r2, [r3, #7] + 800ab14: 4b70 ldr r3, [pc, #448] @ (800acd8 ) + 800ab16: f883 2021 strb.w r2, [r3, #33] @ 0x21 + PSU0.status2.raw = PSU_04.modularForm2; + 800ab1a: 4b6e ldr r3, [pc, #440] @ (800acd4 ) + 800ab1c: 799a ldrb r2, [r3, #6] + 800ab1e: 4b6e ldr r3, [pc, #440] @ (800acd8 ) + 800ab20: f883 2022 strb.w r2, [r3, #34] @ 0x22 + } + if(CanId.command==0x06){ + 800ab24: 7abb ldrb r3, [r7, #10] + 800ab26: f003 033f and.w r3, r3, #63 @ 0x3f + 800ab2a: b2db uxtb r3, r3 + 800ab2c: 2b06 cmp r3, #6 + 800ab2e: d123 bne.n 800ab78 + memcpy(&PSU_06, RxData, 8); + 800ab30: 4b6a ldr r3, [pc, #424] @ (800acdc ) + 800ab32: 4a64 ldr r2, [pc, #400] @ (800acc4 ) + 800ab34: e892 0003 ldmia.w r2, {r0, r1} + 800ab38: e883 0003 stmia.w r3, {r0, r1} + + PSU_06.VAB = PSU_06.VABLo+(PSU_06.VABHi<<8); + 800ab3c: 4b67 ldr r3, [pc, #412] @ (800acdc ) + 800ab3e: 785b ldrb r3, [r3, #1] + 800ab40: 461a mov r2, r3 + 800ab42: 4b66 ldr r3, [pc, #408] @ (800acdc ) + 800ab44: 781b ldrb r3, [r3, #0] + 800ab46: 021b lsls r3, r3, #8 + 800ab48: 4413 add r3, r2 + 800ab4a: 461a mov r2, r3 + 800ab4c: 4b63 ldr r3, [pc, #396] @ (800acdc ) + 800ab4e: 609a str r2, [r3, #8] + PSU_06.VBC = PSU_06.VBCLo+(PSU_06.VBCHi<<8); + 800ab50: 4b62 ldr r3, [pc, #392] @ (800acdc ) + 800ab52: 78db ldrb r3, [r3, #3] + 800ab54: 461a mov r2, r3 + 800ab56: 4b61 ldr r3, [pc, #388] @ (800acdc ) + 800ab58: 789b ldrb r3, [r3, #2] + 800ab5a: 021b lsls r3, r3, #8 + 800ab5c: 4413 add r3, r2 + 800ab5e: 461a mov r2, r3 + 800ab60: 4b5e ldr r3, [pc, #376] @ (800acdc ) + 800ab62: 60da str r2, [r3, #12] + PSU_06.VCA = PSU_06.VCALo+(PSU_06.VCAHi<<8); + 800ab64: 4b5d ldr r3, [pc, #372] @ (800acdc ) + 800ab66: 795b ldrb r3, [r3, #5] + 800ab68: 461a mov r2, r3 + 800ab6a: 4b5c ldr r3, [pc, #368] @ (800acdc ) + 800ab6c: 791b ldrb r3, [r3, #4] + 800ab6e: 021b lsls r3, r3, #8 + 800ab70: 4413 add r3, r2 + 800ab72: 461a mov r2, r3 + 800ab74: 4b59 ldr r3, [pc, #356] @ (800acdc ) + 800ab76: 611a str r2, [r3, #16] + + } + if(CanId.command==0x08){ + 800ab78: 7abb ldrb r3, [r7, #10] + 800ab7a: f003 033f and.w r3, r3, #63 @ 0x3f + 800ab7e: b2db uxtb r3, r3 + 800ab80: 2b08 cmp r3, #8 + 800ab82: d105 bne.n 800ab90 + memcpy(&PSU_08, RxData, 8); + 800ab84: 4b56 ldr r3, [pc, #344] @ (800ace0 ) + 800ab86: 4a4f ldr r2, [pc, #316] @ (800acc4 ) + 800ab88: e892 0003 ldmia.w r2, {r0, r1} + 800ab8c: e883 0003 stmia.w r3, {r0, r1} + } + if(CanId.command==0x09){ + 800ab90: 7abb ldrb r3, [r7, #10] + 800ab92: f003 033f and.w r3, r3, #63 @ 0x3f + 800ab96: b2db uxtb r3, r3 + 800ab98: 2b09 cmp r3, #9 + 800ab9a: f040 808f bne.w 800acbc + + memcpy(&PSU_09, RxData, 8); + 800ab9e: 4b51 ldr r3, [pc, #324] @ (800ace4 ) + 800aba0: 4a48 ldr r2, [pc, #288] @ (800acc4 ) + 800aba2: e892 0003 ldmia.w r2, {r0, r1} + 800aba6: e883 0003 stmia.w r3, {r0, r1} + PSU_09.moduleNCurrent = PSU_09.moduleNCurrent_[3]; + 800abaa: 4b4e ldr r3, [pc, #312] @ (800ace4 ) + 800abac: 79db ldrb r3, [r3, #7] + 800abae: 461a mov r2, r3 + 800abb0: 4b4c ldr r3, [pc, #304] @ (800ace4 ) + 800abb2: 60da str r2, [r3, #12] + PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[2]<<8; + 800abb4: 4b4b ldr r3, [pc, #300] @ (800ace4 ) + 800abb6: 68da ldr r2, [r3, #12] + 800abb8: 4b4a ldr r3, [pc, #296] @ (800ace4 ) + 800abba: 799b ldrb r3, [r3, #6] + 800abbc: 021b lsls r3, r3, #8 + 800abbe: 4313 orrs r3, r2 + 800abc0: 4a48 ldr r2, [pc, #288] @ (800ace4 ) + 800abc2: 60d3 str r3, [r2, #12] + PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[1]<<16; + 800abc4: 4b47 ldr r3, [pc, #284] @ (800ace4 ) + 800abc6: 68da ldr r2, [r3, #12] + 800abc8: 4b46 ldr r3, [pc, #280] @ (800ace4 ) + 800abca: 795b ldrb r3, [r3, #5] + 800abcc: 041b lsls r3, r3, #16 + 800abce: 4313 orrs r3, r2 + 800abd0: 4a44 ldr r2, [pc, #272] @ (800ace4 ) + 800abd2: 60d3 str r3, [r2, #12] + PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[0]<<24; + 800abd4: 4b43 ldr r3, [pc, #268] @ (800ace4 ) + 800abd6: 68da ldr r2, [r3, #12] + 800abd8: 4b42 ldr r3, [pc, #264] @ (800ace4 ) + 800abda: 791b ldrb r3, [r3, #4] + 800abdc: 061b lsls r3, r3, #24 + 800abde: 4313 orrs r3, r2 + 800abe0: 4a40 ldr r2, [pc, #256] @ (800ace4 ) + 800abe2: 60d3 str r3, [r2, #12] + + PSU_09.moduleNVoltage = PSU_09.moduleNVoltage_[3]; + 800abe4: 4b3f ldr r3, [pc, #252] @ (800ace4 ) + 800abe6: 78db ldrb r3, [r3, #3] + 800abe8: 461a mov r2, r3 + 800abea: 4b3e ldr r3, [pc, #248] @ (800ace4 ) + 800abec: 609a str r2, [r3, #8] + PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[2]<<8; + 800abee: 4b3d ldr r3, [pc, #244] @ (800ace4 ) + 800abf0: 689a ldr r2, [r3, #8] + 800abf2: 4b3c ldr r3, [pc, #240] @ (800ace4 ) + 800abf4: 789b ldrb r3, [r3, #2] + 800abf6: 021b lsls r3, r3, #8 + 800abf8: 4313 orrs r3, r2 + 800abfa: 4a3a ldr r2, [pc, #232] @ (800ace4 ) + 800abfc: 6093 str r3, [r2, #8] + PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[1]<<16; + 800abfe: 4b39 ldr r3, [pc, #228] @ (800ace4 ) + 800ac00: 689a ldr r2, [r3, #8] + 800ac02: 4b38 ldr r3, [pc, #224] @ (800ace4 ) + 800ac04: 785b ldrb r3, [r3, #1] + 800ac06: 041b lsls r3, r3, #16 + 800ac08: 4313 orrs r3, r2 + 800ac0a: 4a36 ldr r2, [pc, #216] @ (800ace4 ) + 800ac0c: 6093 str r3, [r2, #8] + PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[0]<<24; + 800ac0e: 4b35 ldr r3, [pc, #212] @ (800ace4 ) + 800ac10: 689a ldr r2, [r3, #8] + 800ac12: 4b34 ldr r3, [pc, #208] @ (800ace4 ) + 800ac14: 781b ldrb r3, [r3, #0] + 800ac16: 061b lsls r3, r3, #24 + 800ac18: 4313 orrs r3, r2 + 800ac1a: 4a32 ldr r2, [pc, #200] @ (800ace4 ) + 800ac1c: 6093 str r3, [r2, #8] + + // PSU_09 -> PSU -> CONN (один модуль) + { + uint16_t v = PSU_09.moduleNVoltage / 1000; + 800ac1e: 4b31 ldr r3, [pc, #196] @ (800ace4 ) + 800ac20: 689b ldr r3, [r3, #8] + 800ac22: 4a31 ldr r2, [pc, #196] @ (800ace8 ) + 800ac24: fba2 2303 umull r2, r3, r2, r3 + 800ac28: 099b lsrs r3, r3, #6 + 800ac2a: 81fb strh r3, [r7, #14] + int16_t i = PSU_09.moduleNCurrent / 100; + 800ac2c: 4b2d ldr r3, [pc, #180] @ (800ace4 ) + 800ac2e: 68db ldr r3, [r3, #12] + 800ac30: 4a2e ldr r2, [pc, #184] @ (800acec ) + 800ac32: fba2 2303 umull r2, r3, r2, r3 + 800ac36: 095b lsrs r3, r3, #5 + 800ac38: 81bb strh r3, [r7, #12] + + // Обновляем модель PSU0 по телеметрии + PSU0.outputVoltage = v; + 800ac3a: 4a27 ldr r2, [pc, #156] @ (800acd8 ) + 800ac3c: 89fb ldrh r3, [r7, #14] + 800ac3e: 8053 strh r3, [r2, #2] + PSU0.outputCurrent = i; + 800ac40: 4a25 ldr r2, [pc, #148] @ (800acd8 ) + 800ac42: 89bb ldrh r3, [r7, #12] + 800ac44: 8093 strh r3, [r2, #4] + PSU0.PSU_enabled = (v >= PSU_VOLTAGE_THRESHOLD); + 800ac46: 89fb ldrh r3, [r7, #14] + 800ac48: 2b13 cmp r3, #19 + 800ac4a: bf8c ite hi + 800ac4c: 2301 movhi r3, #1 + 800ac4e: 2300 movls r3, #0 + 800ac50: b2db uxtb r3, r3 + 800ac52: 461a mov r2, r3 + 800ac54: 4b20 ldr r3, [pc, #128] @ (800acd8 ) + 800ac56: 729a strb r2, [r3, #10] + PSU0.online = 1; + 800ac58: 4b1f ldr r3, [pc, #124] @ (800acd8 ) + 800ac5a: 2201 movs r2, #1 + 800ac5c: 721a strb r2, [r3, #8] + PSU0.temperature = PSU_04.moduleTemperature; + 800ac5e: 4b1d ldr r3, [pc, #116] @ (800acd4 ) + 800ac60: 791a ldrb r2, [r3, #4] + 800ac62: 4b1d ldr r3, [pc, #116] @ (800acd8 ) + 800ac64: 719a strb r2, [r3, #6] + + // Экспортируем значения из PSU0 в CONN только, + // когда модуль хотя бы в состоянии READY и выше + if(PSU0.state >= PSU_READY){ + 800ac66: 4b1c ldr r3, [pc, #112] @ (800acd8 ) + 800ac68: 79db ldrb r3, [r3, #7] + 800ac6a: 2b01 cmp r3, #1 + 800ac6c: d926 bls.n 800acbc + CONN.MeasuredVoltage = PSU0.outputVoltage; + 800ac6e: 4b1a ldr r3, [pc, #104] @ (800acd8 ) + 800ac70: 885a ldrh r2, [r3, #2] + 800ac72: 4b1f ldr r3, [pc, #124] @ (800acf0 ) + 800ac74: f8a3 2013 strh.w r2, [r3, #19] + CONN.MeasuredCurrent = PSU0.outputCurrent; + 800ac78: 4b17 ldr r3, [pc, #92] @ (800acd8 ) + 800ac7a: f9b3 3004 ldrsh.w r3, [r3, #4] + 800ac7e: b29a uxth r2, r3 + 800ac80: 4b1b ldr r3, [pc, #108] @ (800acf0 ) + 800ac82: f8a3 2015 strh.w r2, [r3, #21] + CONN.Power = CONN.MeasuredCurrent * CONN.MeasuredVoltage / 10; + 800ac86: 4b1a ldr r3, [pc, #104] @ (800acf0 ) + 800ac88: f8b3 3015 ldrh.w r3, [r3, #21] + 800ac8c: b29b uxth r3, r3 + 800ac8e: 461a mov r2, r3 + 800ac90: 4b17 ldr r3, [pc, #92] @ (800acf0 ) + 800ac92: f8b3 3013 ldrh.w r3, [r3, #19] + 800ac96: b29b uxth r3, r3 + 800ac98: fb02 f303 mul.w r3, r2, r3 + 800ac9c: 4a15 ldr r2, [pc, #84] @ (800acf4 ) + 800ac9e: fb82 1203 smull r1, r2, r2, r3 + 800aca2: 1092 asrs r2, r2, #2 + 800aca4: 17db asrs r3, r3, #31 + 800aca6: 1ad3 subs r3, r2, r3 + 800aca8: 461a mov r2, r3 + 800acaa: 4b11 ldr r3, [pc, #68] @ (800acf0 ) + 800acac: f8c3 2003 str.w r2, [r3, #3] + CONN.outputEnabled = PSU0.PSU_enabled; + 800acb0: 4b09 ldr r3, [pc, #36] @ (800acd8 ) + 800acb2: 7a9a ldrb r2, [r3, #10] + 800acb4: 4b0e ldr r3, [pc, #56] @ (800acf0 ) + 800acb6: 761a strb r2, [r3, #24] + 800acb8: e000 b.n 800acbc + if(CanId.source != 0) return; + 800acba: bf00 nop + } + } + } + } +} + 800acbc: 3710 adds r7, #16 + 800acbe: 46bd mov sp, r7 + 800acc0: bd80 pop {r7, pc} + 800acc2: bf00 nop + 800acc4: 200008c8 .word 0x200008c8 + 800acc8: 200008ac .word 0x200008ac + 800accc: 200008a8 .word 0x200008a8 + 800acd0: 20000840 .word 0x20000840 + 800acd4: 2000084c .word 0x2000084c + 800acd8: 20000884 .word 0x20000884 + 800acdc: 20000858 .word 0x20000858 + 800ace0: 2000086c .word 0x2000086c + 800ace4: 20000874 .word 0x20000874 + 800ace8: 10624dd3 .word 0x10624dd3 + 800acec: 51eb851f .word 0x51eb851f + 800acf0: 2000033c .word 0x2000033c + 800acf4: 66666667 .word 0x66666667 + +0800acf8 : + +void PSU_CAN_FilterInit(){ + 800acf8: b580 push {r7, lr} + 800acfa: b08a sub sp, #40 @ 0x28 + 800acfc: af00 add r7, sp, #0 + CAN_FilterTypeDef sFilterConfig; + + sFilterConfig.FilterBank = 14; + 800acfe: 230e movs r3, #14 + 800ad00: 617b str r3, [r7, #20] + sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; + 800ad02: 2300 movs r3, #0 + 800ad04: 61bb str r3, [r7, #24] + sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; + 800ad06: 2301 movs r3, #1 + 800ad08: 61fb str r3, [r7, #28] + sFilterConfig.FilterIdHigh = 0x0000; + 800ad0a: 2300 movs r3, #0 + 800ad0c: 603b str r3, [r7, #0] + sFilterConfig.FilterIdLow = 0x0000; + 800ad0e: 2300 movs r3, #0 + 800ad10: 607b str r3, [r7, #4] + sFilterConfig.FilterMaskIdHigh = 0x0000; + 800ad12: 2300 movs r3, #0 + 800ad14: 60bb str r3, [r7, #8] + sFilterConfig.FilterMaskIdLow = 0x0000; + 800ad16: 2300 movs r3, #0 + 800ad18: 60fb str r3, [r7, #12] + sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; + 800ad1a: 2300 movs r3, #0 + 800ad1c: 613b str r3, [r7, #16] + sFilterConfig.FilterActivation = ENABLE; + 800ad1e: 2301 movs r3, #1 + 800ad20: 623b str r3, [r7, #32] + + sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO1; + 800ad22: 2301 movs r3, #1 + 800ad24: 613b str r3, [r7, #16] + sFilterConfig.SlaveStartFilterBank = 14; + 800ad26: 230e movs r3, #14 + 800ad28: 627b str r3, [r7, #36] @ 0x24 + + + if(HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK) + 800ad2a: 463b mov r3, r7 + 800ad2c: 4619 mov r1, r3 + 800ad2e: 4806 ldr r0, [pc, #24] @ (800ad48 ) + 800ad30: f003 fc02 bl 800e538 + 800ad34: 4603 mov r3, r0 + 800ad36: 2b00 cmp r3, #0 + 800ad38: d001 beq.n 800ad3e + { + Error_Handler(); + 800ad3a: f7ff fe1d bl 800a978 + } +} + 800ad3e: bf00 nop + 800ad40: 3728 adds r7, #40 @ 0x28 + 800ad42: 46bd mov sp, r7 + 800ad44: bd80 pop {r7, pc} + 800ad46: bf00 nop + 800ad48: 20000310 .word 0x20000310 + +0800ad4c : + +void PSU_Init(){ + 800ad4c: b580 push {r7, lr} + 800ad4e: af00 add r7, sp, #0 + + HAL_CAN_Stop(&hcan2); + 800ad50: 4813 ldr r0, [pc, #76] @ (800ada0 ) + 800ad52: f003 fd15 bl 800e780 + MX_CAN2_Init(); + 800ad56: f7fe feeb bl 8009b30 + PSU_CAN_FilterInit(); + 800ad5a: f7ff ffcd bl 800acf8 + HAL_CAN_Start(&hcan2); + 800ad5e: 4810 ldr r0, [pc, #64] @ (800ada0 ) + 800ad60: f003 fcca bl 800e6f8 + HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING /* | CAN_IT_ERROR | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE | CAN_IT_TX_MAILBOX_EMPTY*/); + 800ad64: 2110 movs r1, #16 + 800ad66: 480e ldr r0, [pc, #56] @ (800ada0 ) + 800ad68: f003 ff77 bl 800ec5a + memset(&PSU0, 0, sizeof(PSU0)); + 800ad6c: 2224 movs r2, #36 @ 0x24 + 800ad6e: 2100 movs r1, #0 + 800ad70: 480c ldr r0, [pc, #48] @ (800ada4 ) + 800ad72: f008 fded bl 8013950 + PSU0.state = PSU_UNREADY; + 800ad76: 4b0b ldr r3, [pc, #44] @ (800ada4 ) + 800ad78: 2200 movs r2, #0 + 800ad7a: 71da strb r2, [r3, #7] + PSU0.statetick = HAL_GetTick(); + 800ad7c: f002 fdac bl 800d8d8 + 800ad80: 4603 mov r3, r0 + 800ad82: 4a08 ldr r2, [pc, #32] @ (800ada4 ) + 800ad84: 6113 str r3, [r2, #16] + + PSU0.power_limit = PSU_MAX_POWER; // kW + 800ad86: 4b07 ldr r3, [pc, #28] @ (800ada4 ) + 800ad88: f247 5230 movw r2, #30000 @ 0x7530 + 800ad8c: 615a str r2, [r3, #20] + PSU0.hv_mode = 0; + 800ad8e: 4b05 ldr r3, [pc, #20] @ (800ada4 ) + 800ad90: 2200 movs r2, #0 + 800ad92: 761a strb r2, [r3, #24] + + PSU_Enable(0, 0); + 800ad94: 2100 movs r1, #0 + 800ad96: 2000 movs r0, #0 + 800ad98: f000 f806 bl 800ada8 +} + 800ad9c: bf00 nop + 800ad9e: bd80 pop {r7, pc} + 800ada0: 20000310 .word 0x20000310 + 800ada4: 20000884 .word 0x20000884 + +0800ada8 : + +void PSU_Enable(uint8_t addr, uint8_t enable){ + 800ada8: b580 push {r7, lr} + 800adaa: b084 sub sp, #16 + 800adac: af00 add r7, sp, #0 + 800adae: 4603 mov r3, r0 + 800adb0: 460a mov r2, r1 + 800adb2: 71fb strb r3, [r7, #7] + 800adb4: 4613 mov r3, r2 + 800adb6: 71bb strb r3, [r7, #6] + PSU_1A_t data; + memset(&data, 0, sizeof(data)); + 800adb8: f107 0308 add.w r3, r7, #8 + 800adbc: 2208 movs r2, #8 + 800adbe: 2100 movs r1, #0 + 800adc0: 4618 mov r0, r3 + 800adc2: f008 fdc5 bl 8013950 + /* Для DC30 поддерживается только один модуль с адресом 0 */ + if(addr != 0) return; + 800adc6: 79fb ldrb r3, [r7, #7] + 800adc8: 2b00 cmp r3, #0 + 800adca: d115 bne.n 800adf8 + if(PSU0.online == 0) return; + 800adcc: 4b0d ldr r3, [pc, #52] @ (800ae04 ) + 800adce: 7a1b ldrb r3, [r3, #8] + 800add0: 2b00 cmp r3, #0 + 800add2: d013 beq.n 800adfc + + data.enable = !enable; + 800add4: 79bb ldrb r3, [r7, #6] + 800add6: 2b00 cmp r3, #0 + 800add8: bf0c ite eq + 800adda: 2301 moveq r3, #1 + 800addc: 2300 movne r3, #0 + 800adde: b2db uxtb r3, r3 + 800ade0: 723b strb r3, [r7, #8] + PSU_SendCmd(0xF0, addr, 0x1A, &data); + 800ade2: 79f9 ldrb r1, [r7, #7] + 800ade4: f107 0308 add.w r3, r7, #8 + 800ade8: 221a movs r2, #26 + 800adea: 20f0 movs r0, #240 @ 0xf0 + 800adec: f000 f866 bl 800aebc + ED_Delay(CAN_DELAY); + 800adf0: 2014 movs r0, #20 + 800adf2: f7ff fc7d bl 800a6f0 + 800adf6: e002 b.n 800adfe + if(addr != 0) return; + 800adf8: bf00 nop + 800adfa: e000 b.n 800adfe + if(PSU0.online == 0) return; + 800adfc: bf00 nop +} + 800adfe: 3710 adds r7, #16 + 800ae00: 46bd mov sp, r7 + 800ae02: bd80 pop {r7, pc} + 800ae04: 20000884 .word 0x20000884 + +0800ae08 : + memset(&data, 0, sizeof(data)); + data.enable = !enable; + if(addr != 0) return; + PSU_SendCmd(0xF0, addr, 0x1D, &data); +} +void PSU_SetVoltageCurrent(uint8_t addr, uint16_t voltage, uint16_t current){ + 800ae08: b580 push {r7, lr} + 800ae0a: b086 sub sp, #24 + 800ae0c: af00 add r7, sp, #0 + 800ae0e: 4603 mov r3, r0 + 800ae10: 71fb strb r3, [r7, #7] + 800ae12: 460b mov r3, r1 + 800ae14: 80bb strh r3, [r7, #4] + 800ae16: 4613 mov r3, r2 + 800ae18: 807b strh r3, [r7, #2] + PSU_1C_t data; + memset(&data, 0, sizeof(data)); + 800ae1a: f107 0308 add.w r3, r7, #8 + 800ae1e: 2208 movs r2, #8 + 800ae20: 2100 movs r1, #0 + 800ae22: 4618 mov r0, r3 + 800ae24: f008 fd94 bl 8013950 + + if(addr != 0) return; + 800ae28: 79fb ldrb r3, [r7, #7] + 800ae2a: 2b00 cmp r3, #0 + 800ae2c: d140 bne.n 800aeb0 + + if(voltage + 800ae34: 2396 movs r3, #150 @ 0x96 + 800ae36: 80bb strh r3, [r7, #4] + + if((PSU0.hv_mode==0) && voltage>499) voltage = 499; + 800ae38: 4b1f ldr r3, [pc, #124] @ (800aeb8 ) + 800ae3a: 7e1b ldrb r3, [r3, #24] + 800ae3c: 2b00 cmp r3, #0 + 800ae3e: d106 bne.n 800ae4e + 800ae40: 88bb ldrh r3, [r7, #4] + 800ae42: f5b3 7ffa cmp.w r3, #500 @ 0x1f4 + 800ae46: d302 bcc.n 800ae4e + 800ae48: f240 13f3 movw r3, #499 @ 0x1f3 + 800ae4c: 80bb strh r3, [r7, #4] + + uint32_t current_ma = current * 100; + 800ae4e: 887b ldrh r3, [r7, #2] + 800ae50: 2264 movs r2, #100 @ 0x64 + 800ae52: fb02 f303 mul.w r3, r2, r3 + 800ae56: 617b str r3, [r7, #20] + uint32_t voltage_mv = voltage * 1000; + 800ae58: 88bb ldrh r3, [r7, #4] + 800ae5a: f44f 727a mov.w r2, #1000 @ 0x3e8 + 800ae5e: fb02 f303 mul.w r3, r2, r3 + 800ae62: 613b str r3, [r7, #16] + + data.moduleCurrentTotal[0] = (current_ma >> 24) & 0xFF; + 800ae64: 697b ldr r3, [r7, #20] + 800ae66: 0e1b lsrs r3, r3, #24 + 800ae68: b2db uxtb r3, r3 + 800ae6a: 733b strb r3, [r7, #12] + data.moduleCurrentTotal[1] = (current_ma >> 16) & 0xFF; + 800ae6c: 697b ldr r3, [r7, #20] + 800ae6e: 0c1b lsrs r3, r3, #16 + 800ae70: b2db uxtb r3, r3 + 800ae72: 737b strb r3, [r7, #13] + data.moduleCurrentTotal[2] = (current_ma >> 8) & 0xFF; + 800ae74: 697b ldr r3, [r7, #20] + 800ae76: 0a1b lsrs r3, r3, #8 + 800ae78: b2db uxtb r3, r3 + 800ae7a: 73bb strb r3, [r7, #14] + data.moduleCurrentTotal[3] = (current_ma >> 0) & 0xFF; + 800ae7c: 697b ldr r3, [r7, #20] + 800ae7e: b2db uxtb r3, r3 + 800ae80: 73fb strb r3, [r7, #15] + + data.moduleVoltage[0] = (voltage_mv >> 24) & 0xFF; + 800ae82: 693b ldr r3, [r7, #16] + 800ae84: 0e1b lsrs r3, r3, #24 + 800ae86: b2db uxtb r3, r3 + 800ae88: 723b strb r3, [r7, #8] + data.moduleVoltage[1] = (voltage_mv >> 16) & 0xFF; + 800ae8a: 693b ldr r3, [r7, #16] + 800ae8c: 0c1b lsrs r3, r3, #16 + 800ae8e: b2db uxtb r3, r3 + 800ae90: 727b strb r3, [r7, #9] + data.moduleVoltage[2] = (voltage_mv >> 8) & 0xFF; + 800ae92: 693b ldr r3, [r7, #16] + 800ae94: 0a1b lsrs r3, r3, #8 + 800ae96: b2db uxtb r3, r3 + 800ae98: 72bb strb r3, [r7, #10] + data.moduleVoltage[3] = (voltage_mv >> 0) & 0xFF; + 800ae9a: 693b ldr r3, [r7, #16] + 800ae9c: b2db uxtb r3, r3 + 800ae9e: 72fb strb r3, [r7, #11] + + PSU_SendCmd(0xF0, addr, 0x1C, &data); + 800aea0: 79f9 ldrb r1, [r7, #7] + 800aea2: f107 0308 add.w r3, r7, #8 + 800aea6: 221c movs r2, #28 + 800aea8: 20f0 movs r0, #240 @ 0xf0 + 800aeaa: f000 f807 bl 800aebc + 800aeae: e000 b.n 800aeb2 + if(addr != 0) return; + 800aeb0: bf00 nop + +} + 800aeb2: 3718 adds r7, #24 + 800aeb4: 46bd mov sp, r7 + 800aeb6: bd80 pop {r7, pc} + 800aeb8: 20000884 .word 0x20000884 + +0800aebc : + +void PSU_SendCmd(uint8_t source, uint8_t destination, uint8_t cmd, void *data){ + 800aebc: b580 push {r7, lr} + 800aebe: b08c sub sp, #48 @ 0x30 + 800aec0: af00 add r7, sp, #0 + 800aec2: 603b str r3, [r7, #0] + 800aec4: 4603 mov r3, r0 + 800aec6: 71fb strb r3, [r7, #7] + 800aec8: 460b mov r3, r1 + 800aeca: 71bb strb r3, [r7, #6] + 800aecc: 4613 mov r3, r2 + 800aece: 717b strb r3, [r7, #5] + CanId_t CanId; + CanId.source = source; + 800aed0: 79fb ldrb r3, [r7, #7] + 800aed2: f887 3028 strb.w r3, [r7, #40] @ 0x28 + CanId.destination = destination; + 800aed6: 79bb ldrb r3, [r7, #6] + 800aed8: f887 3029 strb.w r3, [r7, #41] @ 0x29 + CanId.command = cmd; + 800aedc: 797b ldrb r3, [r7, #5] + 800aede: f003 033f and.w r3, r3, #63 @ 0x3f + 800aee2: b2da uxtb r2, r3 + 800aee4: f897 302a ldrb.w r3, [r7, #42] @ 0x2a + 800aee8: f362 0305 bfi r3, r2, #0, #6 + 800aeec: f887 302a strb.w r3, [r7, #42] @ 0x2a + CanId.device = 0x0A; + 800aef0: 8d7b ldrh r3, [r7, #42] @ 0x2a + 800aef2: 220a movs r2, #10 + 800aef4: f362 1389 bfi r3, r2, #6, #4 + 800aef8: 857b strh r3, [r7, #42] @ 0x2a + + int8_t retry_counter = 10; + 800aefa: 230a movs r3, #10 + 800aefc: f887 302f strb.w r3, [r7, #47] @ 0x2f + CAN_TxHeaderTypeDef tx_header; + uint32_t tx_mailbox; + HAL_StatusTypeDef CAN_result; + + memcpy(&tx_header.ExtId, &CanId, sizeof(CanId_t)); + 800af00: 6abb ldr r3, [r7, #40] @ 0x28 + 800af02: 617b str r3, [r7, #20] + + tx_header.RTR = CAN_RTR_DATA; + 800af04: 2300 movs r3, #0 + 800af06: 61fb str r3, [r7, #28] + tx_header.IDE = CAN_ID_EXT; + 800af08: 2304 movs r3, #4 + 800af0a: 61bb str r3, [r7, #24] + tx_header.DLC = 8; + 800af0c: 2308 movs r3, #8 + 800af0e: 623b str r3, [r7, #32] + + while(retry_counter>0){ //если буфер полон, ждем пока он освободится + 800af10: e01e b.n 800af50 + if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan2) > 0){ + 800af12: 4814 ldr r0, [pc, #80] @ (800af64 ) + 800af14: f003 fd4c bl 800e9b0 + 800af18: 4603 mov r3, r0 + 800af1a: 2b00 cmp r3, #0 + 800af1c: d00e beq.n 800af3c + /* отправка сообщения */ + CAN_result = HAL_CAN_AddTxMessage(&hcan2, &tx_header, (uint8_t*)data, &tx_mailbox); + 800af1e: f107 030c add.w r3, r7, #12 + 800af22: f107 0110 add.w r1, r7, #16 + 800af26: 683a ldr r2, [r7, #0] + 800af28: 480e ldr r0, [pc, #56] @ (800af64 ) + 800af2a: f003 fc72 bl 800e812 + 800af2e: 4603 mov r3, r0 + 800af30: f887 302e strb.w r3, [r7, #46] @ 0x2e + + /* если отправка удалась, выход */ + if(CAN_result == HAL_OK) { + 800af34: f897 302e ldrb.w r3, [r7, #46] @ 0x2e + 800af38: 2b00 cmp r3, #0 + 800af3a: d00e beq.n 800af5a + return; + retry_counter = 0; + } + } + ED_Delay(1); + 800af3c: 2001 movs r0, #1 + 800af3e: f7ff fbd7 bl 800a6f0 + + retry_counter--; + 800af42: f997 302f ldrsb.w r3, [r7, #47] @ 0x2f + 800af46: b2db uxtb r3, r3 + 800af48: 3b01 subs r3, #1 + 800af4a: b2db uxtb r3, r3 + 800af4c: f887 302f strb.w r3, [r7, #47] @ 0x2f + while(retry_counter>0){ //если буфер полон, ждем пока он освободится + 800af50: f997 302f ldrsb.w r3, [r7, #47] @ 0x2f + 800af54: 2b00 cmp r3, #0 + 800af56: dcdc bgt.n 800af12 + 800af58: e000 b.n 800af5c + return; + 800af5a: bf00 nop + } + +} + 800af5c: 3730 adds r7, #48 @ 0x30 + 800af5e: 46bd mov sp, r7 + 800af60: bd80 pop {r7, pc} + 800af62: bf00 nop + 800af64: 20000310 .word 0x20000310 + +0800af68 : +uint32_t max(uint32_t a, uint32_t b){ + if(a>b) return a; + else return b; +} + +void PSU_ReadWrite(){ + 800af68: b580 push {r7, lr} + 800af6a: b082 sub sp, #8 + 800af6c: af00 add r7, sp, #0 + + uint8_t zero_data[8] = {0,0,0,0,0,0,0,0}; + 800af6e: 463b mov r3, r7 + 800af70: 2200 movs r2, #0 + 800af72: 601a str r2, [r3, #0] + 800af74: 605a str r2, [r3, #4] + + PSU_SendCmd(0xF0, 0, 0x04, zero_data);ED_Delay(CAN_DELAY); + 800af76: 463b mov r3, r7 + 800af78: 2204 movs r2, #4 + 800af7a: 2100 movs r1, #0 + 800af7c: 20f0 movs r0, #240 @ 0xf0 + 800af7e: f7ff ff9d bl 800aebc + 800af82: 2014 movs r0, #20 + 800af84: f7ff fbb4 bl 800a6f0 + PSU_SendCmd(0xF0, 0, 0x06, zero_data);ED_Delay(CAN_DELAY); + 800af88: 463b mov r3, r7 + 800af8a: 2206 movs r2, #6 + 800af8c: 2100 movs r1, #0 + 800af8e: 20f0 movs r0, #240 @ 0xf0 + 800af90: f7ff ff94 bl 800aebc + 800af94: 2014 movs r0, #20 + 800af96: f7ff fbab bl 800a6f0 + // PSU_SendCmd(0xF0, 0, 0x08, zero_data);ED_Delay(CAN_DELAY); + PSU_SendCmd(0xF0, 0, 0x09, zero_data);ED_Delay(CAN_DELAY); + 800af9a: 463b mov r3, r7 + 800af9c: 2209 movs r2, #9 + 800af9e: 2100 movs r1, #0 + 800afa0: 20f0 movs r0, #240 @ 0xf0 + 800afa2: f7ff ff8b bl 800aebc + 800afa6: 2014 movs r0, #20 + 800afa8: f7ff fba2 bl 800a6f0 + + // Power Limit + if ((CONN.WantedCurrent/10) * CONN.MeasuredVoltage > PSU0.power_limit){ + 800afac: 4b3a ldr r3, [pc, #232] @ (800b098 ) + 800afae: f8b3 301b ldrh.w r3, [r3, #27] + 800afb2: b29b uxth r3, r3 + 800afb4: 4a39 ldr r2, [pc, #228] @ (800b09c ) + 800afb6: fba2 2303 umull r2, r3, r2, r3 + 800afba: 08db lsrs r3, r3, #3 + 800afbc: b29b uxth r3, r3 + 800afbe: 461a mov r2, r3 + 800afc0: 4b35 ldr r3, [pc, #212] @ (800b098 ) + 800afc2: f8b3 3013 ldrh.w r3, [r3, #19] + 800afc6: b29b uxth r3, r3 + 800afc8: fb02 f303 mul.w r3, r2, r3 + 800afcc: 461a mov r2, r3 + 800afce: 4b34 ldr r3, [pc, #208] @ (800b0a0 ) + 800afd0: 695b ldr r3, [r3, #20] + 800afd2: 429a cmp r2, r3 + 800afd4: d911 bls.n 800affa + CONN.RequestedCurrent = PSU0.power_limit * 10 / CONN.MeasuredVoltage; + 800afd6: 4b32 ldr r3, [pc, #200] @ (800b0a0 ) + 800afd8: 695a ldr r2, [r3, #20] + 800afda: 4613 mov r3, r2 + 800afdc: 009b lsls r3, r3, #2 + 800afde: 4413 add r3, r2 + 800afe0: 005b lsls r3, r3, #1 + 800afe2: 461a mov r2, r3 + 800afe4: 4b2c ldr r3, [pc, #176] @ (800b098 ) + 800afe6: f8b3 3013 ldrh.w r3, [r3, #19] + 800afea: b29b uxth r3, r3 + 800afec: fbb2 f3f3 udiv r3, r2, r3 + 800aff0: b29a uxth r2, r3 + 800aff2: 4b29 ldr r3, [pc, #164] @ (800b098 ) + 800aff4: f8a3 2011 strh.w r2, [r3, #17] + 800aff8: e006 b.n 800b008 + }else{ + CONN.RequestedCurrent = CONN.WantedCurrent; + 800affa: 4b27 ldr r3, [pc, #156] @ (800b098 ) + 800affc: f8b3 301b ldrh.w r3, [r3, #27] + 800b000: b29a uxth r2, r3 + 800b002: 4b25 ldr r3, [pc, #148] @ (800b098 ) + 800b004: f8a3 2011 strh.w r2, [r3, #17] + } + + if(CONN.RequestedCurrent > (PSU_MAX_CURRENT*10)){ + 800b008: 4b23 ldr r3, [pc, #140] @ (800b098 ) + 800b00a: f8b3 3011 ldrh.w r3, [r3, #17] + 800b00e: b29b uxth r3, r3 + 800b010: f240 5232 movw r2, #1330 @ 0x532 + 800b014: 4293 cmp r3, r2 + 800b016: d908 bls.n 800b02a + CONN.RequestedCurrent = PSU_MAX_CURRENT*10; + 800b018: 4b1f ldr r3, [pc, #124] @ (800b098 ) + 800b01a: 2200 movs r2, #0 + 800b01c: f042 0232 orr.w r2, r2, #50 @ 0x32 + 800b020: 745a strb r2, [r3, #17] + 800b022: 2200 movs r2, #0 + 800b024: f042 0205 orr.w r2, r2, #5 + 800b028: 749a strb r2, [r3, #18] + } + CONN.RequestedPower = CONN.RequestedCurrent * CONN.RequestedVoltage / 10; + 800b02a: 4b1b ldr r3, [pc, #108] @ (800b098 ) + 800b02c: f8b3 3011 ldrh.w r3, [r3, #17] + 800b030: b29b uxth r3, r3 + 800b032: 461a mov r2, r3 + 800b034: 4b18 ldr r3, [pc, #96] @ (800b098 ) + 800b036: f8b3 300f ldrh.w r3, [r3, #15] + 800b03a: b29b uxth r3, r3 + 800b03c: fb02 f303 mul.w r3, r2, r3 + 800b040: 4a18 ldr r2, [pc, #96] @ (800b0a4 ) + 800b042: fb82 1203 smull r1, r2, r2, r3 + 800b046: 1092 asrs r2, r2, #2 + 800b048: 17db asrs r3, r3, #31 + 800b04a: 1ad3 subs r3, r2, r3 + 800b04c: 461a mov r2, r3 + 800b04e: 4b12 ldr r3, [pc, #72] @ (800b098 ) + 800b050: f8c3 200b str.w r2, [r3, #11] + + + if(PSU0.ready){ + 800b054: 4b12 ldr r3, [pc, #72] @ (800b0a0 ) + 800b056: 7a5b ldrb r3, [r3, #9] + 800b058: 2b00 cmp r3, #0 + 800b05a: d018 beq.n 800b08e + PSU_SetVoltageCurrent(0, CONN.RequestedVoltage, CONN.RequestedCurrent); // Normal mode + 800b05c: 4b0e ldr r3, [pc, #56] @ (800b098 ) + 800b05e: f8b3 300f ldrh.w r3, [r3, #15] + 800b062: b29b uxth r3, r3 + 800b064: 4a0c ldr r2, [pc, #48] @ (800b098 ) + 800b066: f8b2 2011 ldrh.w r2, [r2, #17] + 800b06a: b292 uxth r2, r2 + 800b06c: 4619 mov r1, r3 + 800b06e: 2000 movs r0, #0 + 800b070: f7ff feca bl 800ae08 + ED_Delay(CAN_DELAY); + 800b074: 2014 movs r0, #20 + 800b076: f7ff fb3b bl 800a6f0 + if(CONN.MeasuredVoltage>490) PSU0.hv_mode = 1; + 800b07a: 4b07 ldr r3, [pc, #28] @ (800b098 ) + 800b07c: f8b3 3013 ldrh.w r3, [r3, #19] + 800b080: b29b uxth r3, r3 + 800b082: f5b3 7ff5 cmp.w r3, #490 @ 0x1ea + 800b086: d902 bls.n 800b08e + 800b088: 4b05 ldr r3, [pc, #20] @ (800b0a0 ) + 800b08a: 2201 movs r2, #1 + 800b08c: 761a strb r2, [r3, #24] + } + + // PSU_SetHVMode(0, PSU0.hv_mode); // auto set, no need + // ED_Delay(CAN_DELAY); + +} + 800b08e: bf00 nop + 800b090: 3708 adds r7, #8 + 800b092: 46bd mov sp, r7 + 800b094: bd80 pop {r7, pc} + 800b096: bf00 nop + 800b098: 2000033c .word 0x2000033c + 800b09c: cccccccd .word 0xcccccccd + 800b0a0: 20000884 .word 0x20000884 + 800b0a4: 66666667 .word 0x66666667 + +0800b0a8 : + +void PSU_Task(void){ + 800b0a8: b598 push {r3, r4, r7, lr} + 800b0aa: af00 add r7, sp, #0 + static uint32_t psu_on_tick = 0; + static uint32_t dc_on_tick = 0; + static uint32_t cont_ok_tick = 0; + + // Обновляем ONLINE/READY по таймауту + if((HAL_GetTick() - can_lastpacket) > PSU_ONLINE_TIMEOUT){ + 800b0ac: f002 fc14 bl 800d8d8 + 800b0b0: 4602 mov r2, r0 + 800b0b2: 4bb4 ldr r3, [pc, #720] @ (800b384 ) + 800b0b4: 681b ldr r3, [r3, #0] + 800b0b6: 1ad3 subs r3, r2, r3 + 800b0b8: f5b3 7ffa cmp.w r3, #500 @ 0x1f4 + 800b0bc: d920 bls.n 800b100 + PSU0.online = 0; + 800b0be: 4bb2 ldr r3, [pc, #712] @ (800b388 ) + 800b0c0: 2200 movs r2, #0 + 800b0c2: 721a strb r2, [r3, #8] + PSU0.PSU_enabled = 0; + 800b0c4: 4bb0 ldr r3, [pc, #704] @ (800b388 ) + 800b0c6: 2200 movs r2, #0 + 800b0c8: 729a strb r2, [r3, #10] + PSU_04.moduleTemperature = 0; + 800b0ca: 4bb0 ldr r3, [pc, #704] @ (800b38c ) + 800b0cc: 2200 movs r2, #0 + 800b0ce: 711a strb r2, [r3, #4] + PSU_04.modularForm0 = 0; + 800b0d0: 4bae ldr r3, [pc, #696] @ (800b38c ) + 800b0d2: 2200 movs r2, #0 + 800b0d4: 721a strb r2, [r3, #8] + PSU_04.modularForm1 = 0; + 800b0d6: 4bad ldr r3, [pc, #692] @ (800b38c ) + 800b0d8: 2200 movs r2, #0 + 800b0da: 71da strb r2, [r3, #7] + PSU_04.modularForm2 = 0; + 800b0dc: 4bab ldr r3, [pc, #684] @ (800b38c ) + 800b0de: 2200 movs r2, #0 + 800b0e0: 719a strb r2, [r3, #6] + PSU_06.VAB = 0; + 800b0e2: 4bab ldr r3, [pc, #684] @ (800b390 ) + 800b0e4: 2200 movs r2, #0 + 800b0e6: 609a str r2, [r3, #8] + PSU_06.VBC = 0; + 800b0e8: 4ba9 ldr r3, [pc, #676] @ (800b390 ) + 800b0ea: 2200 movs r2, #0 + 800b0ec: 60da str r2, [r3, #12] + PSU_06.VCA = 0; + 800b0ee: 4ba8 ldr r3, [pc, #672] @ (800b390 ) + 800b0f0: 2200 movs r2, #0 + 800b0f2: 611a str r2, [r3, #16] + PSU_09.moduleNCurrent = 0; + 800b0f4: 4ba7 ldr r3, [pc, #668] @ (800b394 ) + 800b0f6: 2200 movs r2, #0 + 800b0f8: 60da str r2, [r3, #12] + PSU_09.moduleNVoltage = 0; + 800b0fa: 4ba6 ldr r3, [pc, #664] @ (800b394 ) + 800b0fc: 2200 movs r2, #0 + 800b0fe: 609a str r2, [r3, #8] + } + if(!PSU0.online || !PSU0.enableAC){ + 800b100: 4ba1 ldr r3, [pc, #644] @ (800b388 ) + 800b102: 7a1b ldrb r3, [r3, #8] + 800b104: 2b00 cmp r3, #0 + 800b106: d003 beq.n 800b110 + 800b108: 4b9f ldr r3, [pc, #636] @ (800b388 ) + 800b10a: 781b ldrb r3, [r3, #0] + 800b10c: 2b00 cmp r3, #0 + 800b10e: d10c bne.n 800b12a + CONN.MeasuredVoltage = 0; + 800b110: 4ba1 ldr r3, [pc, #644] @ (800b398 ) + 800b112: 2200 movs r2, #0 + 800b114: 74da strb r2, [r3, #19] + 800b116: 2200 movs r2, #0 + 800b118: 751a strb r2, [r3, #20] + CONN.MeasuredCurrent = 0; + 800b11a: 4b9f ldr r3, [pc, #636] @ (800b398 ) + 800b11c: 2200 movs r2, #0 + 800b11e: 755a strb r2, [r3, #21] + 800b120: 2200 movs r2, #0 + 800b122: 759a strb r2, [r3, #22] + CONN.outputEnabled = 0; + 800b124: 4b9c ldr r3, [pc, #624] @ (800b398 ) + 800b126: 2200 movs r2, #0 + 800b128: 761a strb r2, [r3, #24] + } + + // Управление AC-контактором с задержкой отключения 1 минута + if(CONN.EvConnected){ + 800b12a: 4b9b ldr r3, [pc, #620] @ (800b398 ) + 800b12c: 7f9b ldrb r3, [r3, #30] + 800b12e: 2b00 cmp r3, #0 + 800b130: d00c beq.n 800b14c + RELAY_Write(RELAY_AC, 1); + 800b132: 2101 movs r1, #1 + 800b134: 2004 movs r0, #4 + 800b136: f7fe fa89 bl 800964c + psu_on_tick = HAL_GetTick(); + 800b13a: f002 fbcd bl 800d8d8 + 800b13e: 4603 mov r3, r0 + 800b140: 4a96 ldr r2, [pc, #600] @ (800b39c ) + 800b142: 6013 str r3, [r2, #0] + PSU0.enableAC = 1; + 800b144: 4b90 ldr r3, [pc, #576] @ (800b388 ) + 800b146: 2201 movs r2, #1 + 800b148: 701a strb r2, [r3, #0] + 800b14a: e010 b.n 800b16e + }else{ + if((HAL_GetTick() - psu_on_tick) > 1 * 60000){ + 800b14c: f002 fbc4 bl 800d8d8 + 800b150: 4602 mov r2, r0 + 800b152: 4b92 ldr r3, [pc, #584] @ (800b39c ) + 800b154: 681b ldr r3, [r3, #0] + 800b156: 1ad3 subs r3, r2, r3 + 800b158: f64e 2260 movw r2, #60000 @ 0xea60 + 800b15c: 4293 cmp r3, r2 + 800b15e: d906 bls.n 800b16e + RELAY_Write(RELAY_AC, 0); + 800b160: 2100 movs r1, #0 + 800b162: 2004 movs r0, #4 + 800b164: f7fe fa72 bl 800964c + PSU0.enableAC = 0; + 800b168: 4b87 ldr r3, [pc, #540] @ (800b388 ) + 800b16a: 2200 movs r2, #0 + 800b16c: 701a strb r2, [r3, #0] + } + } + + // Текущее состояние DC-контактора по обратной связи + PSU0.CONT_enabled = IN_ReadInput(IN_CONT_FB_DC); + 800b16e: 2005 movs r0, #5 + 800b170: f7fe faec bl 800974c + 800b174: 4603 mov r3, r0 + 800b176: 461a mov r2, r3 + 800b178: 4b83 ldr r3, [pc, #524] @ (800b388 ) + 800b17a: 72da strb r2, [r3, #11] + + // Обновляем ready с учётом ошибок + if(PSU0.online && !PSU0.cont_fault && PSU0.enableAC){ + 800b17c: 4b82 ldr r3, [pc, #520] @ (800b388 ) + 800b17e: 7a1b ldrb r3, [r3, #8] + 800b180: 2b00 cmp r3, #0 + 800b182: d007 beq.n 800b194 + 800b184: 4b80 ldr r3, [pc, #512] @ (800b388 ) + 800b186: 7b1b ldrb r3, [r3, #12] + 800b188: 2b00 cmp r3, #0 + 800b18a: d103 bne.n 800b194 + 800b18c: 4b7e ldr r3, [pc, #504] @ (800b388 ) + 800b18e: 781b ldrb r3, [r3, #0] + 800b190: 2b00 cmp r3, #0 + 800b192: d102 bne.n 800b19a + // PSU0.ready = 1; + }else{ + PSU0.ready = 0; + 800b194: 4b7c ldr r3, [pc, #496] @ (800b388 ) + 800b196: 2200 movs r2, #0 + 800b198: 725a strb r2, [r3, #9] + } + + switch(PSU0.state){ + 800b19a: 4b7b ldr r3, [pc, #492] @ (800b388 ) + 800b19c: 79db ldrb r3, [r3, #7] + 800b19e: 2b09 cmp r3, #9 + 800b1a0: f200 8155 bhi.w 800b44e + 800b1a4: a201 add r2, pc, #4 @ (adr r2, 800b1ac ) + 800b1a6: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800b1aa: bf00 nop + 800b1ac: 0800b1d5 .word 0x0800b1d5 + 800b1b0: 0800b209 .word 0x0800b209 + 800b1b4: 0800b225 .word 0x0800b225 + 800b1b8: 0800b25d .word 0x0800b25d + 800b1bc: 0800b2ab .word 0x0800b2ab + 800b1c0: 0800b2ed .word 0x0800b2ed + 800b1c4: 0800b357 .word 0x0800b357 + 800b1c8: 0800b401 .word 0x0800b401 + 800b1cc: 0800b3b1 .word 0x0800b3b1 + 800b1d0: 0800b43b .word 0x0800b43b + case PSU_UNREADY: + PSU0.enableOutput = 0; + 800b1d4: 4b6c ldr r3, [pc, #432] @ (800b388 ) + 800b1d6: 2200 movs r2, #0 + 800b1d8: 705a strb r2, [r3, #1] + RELAY_Write(RELAY_DC, 0); + 800b1da: 2100 movs r1, #0 + 800b1dc: 2003 movs r0, #3 + 800b1de: f7fe fa35 bl 800964c + if(PSU0.online && PSU0.enableAC && !PSU0.cont_fault){ + 800b1e2: 4b69 ldr r3, [pc, #420] @ (800b388 ) + 800b1e4: 7a1b ldrb r3, [r3, #8] + 800b1e6: 2b00 cmp r3, #0 + 800b1e8: f000 8135 beq.w 800b456 + 800b1ec: 4b66 ldr r3, [pc, #408] @ (800b388 ) + 800b1ee: 781b ldrb r3, [r3, #0] + 800b1f0: 2b00 cmp r3, #0 + 800b1f2: f000 8130 beq.w 800b456 + 800b1f6: 4b64 ldr r3, [pc, #400] @ (800b388 ) + 800b1f8: 7b1b ldrb r3, [r3, #12] + 800b1fa: 2b00 cmp r3, #0 + 800b1fc: f040 812b bne.w 800b456 + PSU_SwitchState(PSU_INITIALIZING); + 800b200: 2001 movs r0, #1 + 800b202: f7ff fc29 bl 800aa58 + } + break; + 800b206: e126 b.n 800b456 + + case PSU_INITIALIZING: + if(PSU_StateTime() > 4000){ // Wait 4s for PSU to initialize + 800b208: f7ff fc3a bl 800aa80 + 800b20c: 4603 mov r3, r0 + 800b20e: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 + 800b212: f240 8122 bls.w 800b45a + PSU0.ready = 1; + 800b216: 4b5c ldr r3, [pc, #368] @ (800b388 ) + 800b218: 2201 movs r2, #1 + 800b21a: 725a strb r2, [r3, #9] + PSU_SwitchState(PSU_READY); + 800b21c: 2002 movs r0, #2 + 800b21e: f7ff fc1b bl 800aa58 + } + break; + 800b222: e11a b.n 800b45a + + case PSU_READY: + // модуль готов, но выключен + PSU0.hv_mode = 0; + 800b224: 4b58 ldr r3, [pc, #352] @ (800b388 ) + 800b226: 2200 movs r2, #0 + 800b228: 761a strb r2, [r3, #24] + + RELAY_Write(RELAY_DC, 0); + 800b22a: 2100 movs r1, #0 + 800b22c: 2003 movs r0, #3 + 800b22e: f7fe fa0d bl 800964c + if(!PSU0.ready){ + 800b232: 4b55 ldr r3, [pc, #340] @ (800b388 ) + 800b234: 7a5b ldrb r3, [r3, #9] + 800b236: 2b00 cmp r3, #0 + 800b238: d103 bne.n 800b242 + PSU_SwitchState(PSU_UNREADY); + 800b23a: 2000 movs r0, #0 + 800b23c: f7ff fc0c bl 800aa58 + break; + 800b240: e11c b.n 800b47c + } + if(CONN.EnableOutput){ + 800b242: 4b55 ldr r3, [pc, #340] @ (800b398 ) + 800b244: 7ddb ldrb r3, [r3, #23] + 800b246: 2b00 cmp r3, #0 + 800b248: f000 8109 beq.w 800b45e + PSU_Enable(0, 1); + 800b24c: 2101 movs r1, #1 + 800b24e: 2000 movs r0, #0 + 800b250: f7ff fdaa bl 800ada8 + PSU_SwitchState(PSU_WAIT_ACK_ON); + 800b254: 2003 movs r0, #3 + 800b256: f7ff fbff bl 800aa58 + } + break; + 800b25a: e100 b.n 800b45e + + case PSU_WAIT_ACK_ON: + + if(PSU0.PSU_enabled && PSU0.ready){ + 800b25c: 4b4a ldr r3, [pc, #296] @ (800b388 ) + 800b25e: 7a9b ldrb r3, [r3, #10] + 800b260: 2b00 cmp r3, #0 + 800b262: d00c beq.n 800b27e + 800b264: 4b48 ldr r3, [pc, #288] @ (800b388 ) + 800b266: 7a5b ldrb r3, [r3, #9] + 800b268: 2b00 cmp r3, #0 + 800b26a: d008 beq.n 800b27e + dc_on_tick = HAL_GetTick(); + 800b26c: f002 fb34 bl 800d8d8 + 800b270: 4603 mov r3, r0 + 800b272: 4a4b ldr r2, [pc, #300] @ (800b3a0 ) + 800b274: 6013 str r3, [r2, #0] + PSU_SwitchState(PSU_CONT_WAIT_ACK_ON); + 800b276: 2004 movs r0, #4 + 800b278: f7ff fbee bl 800aa58 + PSU0.psu_fault = 1; + CONN.chargingError = CONN_ERR_PSU_FAULT; + PSU_SwitchState(PSU_UNREADY); + log_printf(LOG_ERR, "PSU on timeout\n"); + } + break; + 800b27c: e0f1 b.n 800b462 + }else if(PSU_StateTime() > 10000){ + 800b27e: f7ff fbff bl 800aa80 + 800b282: 4603 mov r3, r0 + 800b284: f242 7210 movw r2, #10000 @ 0x2710 + 800b288: 4293 cmp r3, r2 + 800b28a: f240 80ea bls.w 800b462 + PSU0.psu_fault = 1; + 800b28e: 4b3e ldr r3, [pc, #248] @ (800b388 ) + 800b290: 2201 movs r2, #1 + 800b292: 735a strb r2, [r3, #13] + CONN.chargingError = CONN_ERR_PSU_FAULT; + 800b294: 4b40 ldr r3, [pc, #256] @ (800b398 ) + 800b296: 220a movs r2, #10 + 800b298: 775a strb r2, [r3, #29] + PSU_SwitchState(PSU_UNREADY); + 800b29a: 2000 movs r0, #0 + 800b29c: f7ff fbdc bl 800aa58 + log_printf(LOG_ERR, "PSU on timeout\n"); + 800b2a0: 4940 ldr r1, [pc, #256] @ (800b3a4 ) + 800b2a2: 2004 movs r0, #4 + 800b2a4: f7ff f8a8 bl 800a3f8 + break; + 800b2a8: e0db b.n 800b462 + + case PSU_CONT_WAIT_ACK_ON: + // замыкаем DC-контактор и ждём подтверждение + RELAY_Write(RELAY_DC, 1); + 800b2aa: 2101 movs r1, #1 + 800b2ac: 2003 movs r0, #3 + 800b2ae: f7fe f9cd bl 800964c + if(PSU0.CONT_enabled){ + 800b2b2: 4b35 ldr r3, [pc, #212] @ (800b388 ) + 800b2b4: 7adb ldrb r3, [r3, #11] + 800b2b6: 2b00 cmp r3, #0 + 800b2b8: d003 beq.n 800b2c2 + PSU_SwitchState(PSU_CONNECTED); + 800b2ba: 2005 movs r0, #5 + 800b2bc: f7ff fbcc bl 800aa58 + PSU0.cont_fault = 1; + CONN.chargingError = CONN_ERR_CONTACTOR; + PSU_SwitchState(PSU_CURRENT_DROP); + log_printf(LOG_ERR, "Contactor error, stopping...\n"); + } + break; + 800b2c0: e0d1 b.n 800b466 + }else if(PSU_StateTime() > 1000){ + 800b2c2: f7ff fbdd bl 800aa80 + 800b2c6: 4603 mov r3, r0 + 800b2c8: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800b2cc: f240 80cb bls.w 800b466 + PSU0.cont_fault = 1; + 800b2d0: 4b2d ldr r3, [pc, #180] @ (800b388 ) + 800b2d2: 2201 movs r2, #1 + 800b2d4: 731a strb r2, [r3, #12] + CONN.chargingError = CONN_ERR_CONTACTOR; + 800b2d6: 4b30 ldr r3, [pc, #192] @ (800b398 ) + 800b2d8: 2207 movs r2, #7 + 800b2da: 775a strb r2, [r3, #29] + PSU_SwitchState(PSU_CURRENT_DROP); + 800b2dc: 2006 movs r0, #6 + 800b2de: f7ff fbbb bl 800aa58 + log_printf(LOG_ERR, "Contactor error, stopping...\n"); + 800b2e2: 4931 ldr r1, [pc, #196] @ (800b3a8 ) + 800b2e4: 2004 movs r0, #4 + 800b2e6: f7ff f887 bl 800a3f8 + break; + 800b2ea: e0bc b.n 800b466 + + case PSU_CONNECTED: + // Основное рабочее состояние + if(!CONN.EnableOutput || !PSU0.ready){ + 800b2ec: 4b2a ldr r3, [pc, #168] @ (800b398 ) + 800b2ee: 7ddb ldrb r3, [r3, #23] + 800b2f0: 2b00 cmp r3, #0 + 800b2f2: d003 beq.n 800b2fc + 800b2f4: 4b24 ldr r3, [pc, #144] @ (800b388 ) + 800b2f6: 7a5b ldrb r3, [r3, #9] + 800b2f8: 2b00 cmp r3, #0 + 800b2fa: d103 bne.n 800b304 + PSU_SwitchState(PSU_CURRENT_DROP); + 800b2fc: 2006 movs r0, #6 + 800b2fe: f7ff fbab bl 800aa58 + break; + 800b302: e0bb b.n 800b47c + } + // контроль контактора: 1 c таймаут + if (IN_ReadInput(IN_CONT_FB_DC) != RELAY_Read(RELAY_DC)){ + 800b304: 2005 movs r0, #5 + 800b306: f7fe fa21 bl 800974c + 800b30a: 4603 mov r3, r0 + 800b30c: 461c mov r4, r3 + 800b30e: 2003 movs r0, #3 + 800b310: f7fe fa0c bl 800972c + 800b314: 4603 mov r3, r0 + 800b316: 429c cmp r4, r3 + 800b318: d017 beq.n 800b34a + if((HAL_GetTick() - cont_ok_tick) > 1000){ + 800b31a: f002 fadd bl 800d8d8 + 800b31e: 4602 mov r2, r0 + 800b320: 4b22 ldr r3, [pc, #136] @ (800b3ac ) + 800b322: 681b ldr r3, [r3, #0] + 800b324: 1ad3 subs r3, r2, r3 + 800b326: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800b32a: f240 809e bls.w 800b46a + CONN.chargingError = CONN_ERR_CONTACTOR; + 800b32e: 4b1a ldr r3, [pc, #104] @ (800b398 ) + 800b330: 2207 movs r2, #7 + 800b332: 775a strb r2, [r3, #29] + PSU0.cont_fault = 1; + 800b334: 4b14 ldr r3, [pc, #80] @ (800b388 ) + 800b336: 2201 movs r2, #1 + 800b338: 731a strb r2, [r3, #12] + PSU_SwitchState(PSU_CURRENT_DROP); + 800b33a: 2006 movs r0, #6 + 800b33c: f7ff fb8c bl 800aa58 + log_printf(LOG_ERR, "Contactor error, stopping...\n"); + 800b340: 4919 ldr r1, [pc, #100] @ (800b3a8 ) + 800b342: 2004 movs r0, #4 + 800b344: f7ff f858 bl 800a3f8 + } + }else{ + cont_ok_tick = HAL_GetTick(); + } + break; + 800b348: e08f b.n 800b46a + cont_ok_tick = HAL_GetTick(); + 800b34a: f002 fac5 bl 800d8d8 + 800b34e: 4603 mov r3, r0 + 800b350: 4a16 ldr r2, [pc, #88] @ (800b3ac ) + 800b352: 6013 str r3, [r2, #0] + break; + 800b354: e089 b.n 800b46a + + case PSU_CURRENT_DROP: + // снижаем ток до нуля перед отключением DC + CONN.RequestedCurrent = 0; + 800b356: 4b10 ldr r3, [pc, #64] @ (800b398 ) + 800b358: 2200 movs r2, #0 + 800b35a: 745a strb r2, [r3, #17] + 800b35c: 2200 movs r2, #0 + 800b35e: 749a strb r2, [r3, #18] + + // если ток действительно упал или вышло время, отключаем DC + if((CONN.MeasuredCurrent < 30) || (PSU_StateTime() > 5000)){ + 800b360: 4b0d ldr r3, [pc, #52] @ (800b398 ) + 800b362: f8b3 3015 ldrh.w r3, [r3, #21] + 800b366: b29b uxth r3, r3 + 800b368: 2b1d cmp r3, #29 + 800b36a: d906 bls.n 800b37a + 800b36c: f7ff fb88 bl 800aa80 + 800b370: 4603 mov r3, r0 + 800b372: f241 3288 movw r2, #5000 @ 0x1388 + 800b376: 4293 cmp r3, r2 + 800b378: d979 bls.n 800b46e + PSU_SwitchState(PSU_CONT_WAIT_ACK_OFF); + 800b37a: 2008 movs r0, #8 + 800b37c: f7ff fb6c bl 800aa58 + } + break; + 800b380: e075 b.n 800b46e + 800b382: bf00 nop + 800b384: 200008a8 .word 0x200008a8 + 800b388: 20000884 .word 0x20000884 + 800b38c: 2000084c .word 0x2000084c + 800b390: 20000858 .word 0x20000858 + 800b394: 20000874 .word 0x20000874 + 800b398: 2000033c .word 0x2000033c + 800b39c: 200008d0 .word 0x200008d0 + 800b3a0: 200008d4 .word 0x200008d4 + 800b3a4: 08015da8 .word 0x08015da8 + 800b3a8: 08015db8 .word 0x08015db8 + 800b3ac: 200008d8 .word 0x200008d8 + + case PSU_CONT_WAIT_ACK_OFF: + RELAY_Write(RELAY_DC, 0); + 800b3b0: 2100 movs r1, #0 + 800b3b2: 2003 movs r0, #3 + 800b3b4: f7fe f94a bl 800964c + if(!PSU0.CONT_enabled){ + 800b3b8: 4b31 ldr r3, [pc, #196] @ (800b480 ) + 800b3ba: 7adb ldrb r3, [r3, #11] + 800b3bc: 2b00 cmp r3, #0 + 800b3be: d107 bne.n 800b3d0 + PSU_Enable(0, 0); + 800b3c0: 2100 movs r1, #0 + 800b3c2: 2000 movs r0, #0 + 800b3c4: f7ff fcf0 bl 800ada8 + PSU_SwitchState(PSU_WAIT_ACK_OFF); + 800b3c8: 2007 movs r0, #7 + 800b3ca: f7ff fb45 bl 800aa58 + CONN.chargingError = CONN_ERR_CONTACTOR; + PSU_Enable(0, 0); + PSU_SwitchState(PSU_WAIT_ACK_OFF); + log_printf(LOG_ERR, "Contactor error, stopping...\n"); + } + break; + 800b3ce: e050 b.n 800b472 + }else if(PSU_StateTime() > 1000){ + 800b3d0: f7ff fb56 bl 800aa80 + 800b3d4: 4603 mov r3, r0 + 800b3d6: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800b3da: d94a bls.n 800b472 + PSU0.cont_fault = 1; + 800b3dc: 4b28 ldr r3, [pc, #160] @ (800b480 ) + 800b3de: 2201 movs r2, #1 + 800b3e0: 731a strb r2, [r3, #12] + CONN.chargingError = CONN_ERR_CONTACTOR; + 800b3e2: 4b28 ldr r3, [pc, #160] @ (800b484 ) + 800b3e4: 2207 movs r2, #7 + 800b3e6: 775a strb r2, [r3, #29] + PSU_Enable(0, 0); + 800b3e8: 2100 movs r1, #0 + 800b3ea: 2000 movs r0, #0 + 800b3ec: f7ff fcdc bl 800ada8 + PSU_SwitchState(PSU_WAIT_ACK_OFF); + 800b3f0: 2007 movs r0, #7 + 800b3f2: f7ff fb31 bl 800aa58 + log_printf(LOG_ERR, "Contactor error, stopping...\n"); + 800b3f6: 4924 ldr r1, [pc, #144] @ (800b488 ) + 800b3f8: 2004 movs r0, #4 + 800b3fa: f7fe fffd bl 800a3f8 + break; + 800b3fe: e038 b.n 800b472 + + case PSU_WAIT_ACK_OFF: + if(!PSU0.PSU_enabled){ + 800b400: 4b1f ldr r3, [pc, #124] @ (800b480 ) + 800b402: 7a9b ldrb r3, [r3, #10] + 800b404: 2b00 cmp r3, #0 + 800b406: d103 bne.n 800b410 + PSU_SwitchState(PSU_OFF_PAUSE); + 800b408: 2009 movs r0, #9 + 800b40a: f7ff fb25 bl 800aa58 + PSU0.psu_fault = 1; + CONN.chargingError = CONN_ERR_PSU_FAULT; + PSU_SwitchState(PSU_UNREADY); + log_printf(LOG_ERR, "PSU off timeout\n"); + } + break; + 800b40e: e032 b.n 800b476 + }else if(PSU_StateTime() > 10000){ + 800b410: f7ff fb36 bl 800aa80 + 800b414: 4603 mov r3, r0 + 800b416: f242 7210 movw r2, #10000 @ 0x2710 + 800b41a: 4293 cmp r3, r2 + 800b41c: d92b bls.n 800b476 + PSU0.psu_fault = 1; + 800b41e: 4b18 ldr r3, [pc, #96] @ (800b480 ) + 800b420: 2201 movs r2, #1 + 800b422: 735a strb r2, [r3, #13] + CONN.chargingError = CONN_ERR_PSU_FAULT; + 800b424: 4b17 ldr r3, [pc, #92] @ (800b484 ) + 800b426: 220a movs r2, #10 + 800b428: 775a strb r2, [r3, #29] + PSU_SwitchState(PSU_UNREADY); + 800b42a: 2000 movs r0, #0 + 800b42c: f7ff fb14 bl 800aa58 + log_printf(LOG_ERR, "PSU off timeout\n"); + 800b430: 4916 ldr r1, [pc, #88] @ (800b48c ) + 800b432: 2004 movs r0, #4 + 800b434: f7fe ffe0 bl 800a3f8 + break; + 800b438: e01d b.n 800b476 + case PSU_OFF_PAUSE: + if(PSU_StateTime() > 4000){ + 800b43a: f7ff fb21 bl 800aa80 + 800b43e: 4603 mov r3, r0 + 800b440: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 + 800b444: d919 bls.n 800b47a + PSU_SwitchState(PSU_READY); + 800b446: 2002 movs r0, #2 + 800b448: f7ff fb06 bl 800aa58 + } + break; + 800b44c: e015 b.n 800b47a + + + + default: + PSU_SwitchState(PSU_UNREADY); + 800b44e: 2000 movs r0, #0 + 800b450: f7ff fb02 bl 800aa58 + break; + 800b454: e012 b.n 800b47c + break; + 800b456: bf00 nop + 800b458: e010 b.n 800b47c + break; + 800b45a: bf00 nop + 800b45c: e00e b.n 800b47c + break; + 800b45e: bf00 nop + 800b460: e00c b.n 800b47c + break; + 800b462: bf00 nop + 800b464: e00a b.n 800b47c + break; + 800b466: bf00 nop + 800b468: e008 b.n 800b47c + break; + 800b46a: bf00 nop + 800b46c: e006 b.n 800b47c + break; + 800b46e: bf00 nop + 800b470: e004 b.n 800b47c + break; + 800b472: bf00 nop + 800b474: e002 b.n 800b47c + break; + 800b476: bf00 nop + 800b478: e000 b.n 800b47c + break; + 800b47a: bf00 nop + } +} + 800b47c: bf00 nop + 800b47e: bd98 pop {r3, r4, r7, pc} + 800b480: 20000884 .word 0x20000884 + 800b484: 2000033c .word 0x2000033c + 800b488: 08015db8 .word 0x08015db8 + 800b48c: 08015dd8 .word 0x08015dd8 + +0800b490 : + .Th = 10, + .Tf = 50, + .Tl = 0, +}; + +void LED_Write(){ + 800b490: b580 push {r7, lr} + 800b492: af00 add r7, sp, #0 + if(CONN.chargingError != CONN_NO_ERROR){ + 800b494: 4b34 ldr r3, [pc, #208] @ (800b568 ) + 800b496: 7f5b ldrb r3, [r3, #29] + 800b498: 2b00 cmp r3, #0 + 800b49a: d003 beq.n 800b4a4 + LED_SetColor(&color_error); + 800b49c: 4833 ldr r0, [pc, #204] @ (800b56c ) + 800b49e: f000 f91f bl 800b6e0 + return; + 800b4a2: e05f b.n 800b564 + } + switch(CONN.connState){ + 800b4a4: 4b30 ldr r3, [pc, #192] @ (800b568 ) + 800b4a6: 785b ldrb r3, [r3, #1] + 800b4a8: 2b0d cmp r3, #13 + 800b4aa: d857 bhi.n 800b55c + 800b4ac: a201 add r2, pc, #4 @ (adr r2, 800b4b4 ) + 800b4ae: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800b4b2: bf00 nop + 800b4b4: 0800b4ed .word 0x0800b4ed + 800b4b8: 0800b4f5 .word 0x0800b4f5 + 800b4bc: 0800b4fd .word 0x0800b4fd + 800b4c0: 0800b505 .word 0x0800b505 + 800b4c4: 0800b50d .word 0x0800b50d + 800b4c8: 0800b515 .word 0x0800b515 + 800b4cc: 0800b51d .word 0x0800b51d + 800b4d0: 0800b525 .word 0x0800b525 + 800b4d4: 0800b52d .word 0x0800b52d + 800b4d8: 0800b535 .word 0x0800b535 + 800b4dc: 0800b53d .word 0x0800b53d + 800b4e0: 0800b545 .word 0x0800b545 + 800b4e4: 0800b54d .word 0x0800b54d + 800b4e8: 0800b555 .word 0x0800b555 + case Unknown: + LED_SetColor(&color_unknown); + 800b4ec: 4820 ldr r0, [pc, #128] @ (800b570 ) + 800b4ee: f000 f8f7 bl 800b6e0 + break; + 800b4f2: e037 b.n 800b564 + case Unplugged: + LED_SetColor(&color_unplugged); + 800b4f4: 481f ldr r0, [pc, #124] @ (800b574 ) + 800b4f6: f000 f8f3 bl 800b6e0 + break; + 800b4fa: e033 b.n 800b564 + case Disabled: + LED_SetColor(&color_error); + 800b4fc: 481b ldr r0, [pc, #108] @ (800b56c ) + 800b4fe: f000 f8ef bl 800b6e0 + break; + 800b502: e02f b.n 800b564 + case Preparing: + LED_SetColor(&color_preparing); + 800b504: 481c ldr r0, [pc, #112] @ (800b578 ) + 800b506: f000 f8eb bl 800b6e0 + break; + 800b50a: e02b b.n 800b564 + case AuthRequired: + LED_SetColor(&color_preparing); + 800b50c: 481a ldr r0, [pc, #104] @ (800b578 ) + 800b50e: f000 f8e7 bl 800b6e0 + break; + 800b512: e027 b.n 800b564 + case WaitingForEnergy: + LED_SetColor(&color_charging); + 800b514: 4819 ldr r0, [pc, #100] @ (800b57c ) + 800b516: f000 f8e3 bl 800b6e0 + break; + 800b51a: e023 b.n 800b564 + case ChargingPausedEV: + LED_SetColor(&color_charging); + 800b51c: 4817 ldr r0, [pc, #92] @ (800b57c ) + 800b51e: f000 f8df bl 800b6e0 + break; + 800b522: e01f b.n 800b564 + case ChargingPausedEVSE: + LED_SetColor(&color_charging); + 800b524: 4815 ldr r0, [pc, #84] @ (800b57c ) + 800b526: f000 f8db bl 800b6e0 + break; + 800b52a: e01b b.n 800b564 + case Charging: + LED_SetColor(&color_charging); + 800b52c: 4813 ldr r0, [pc, #76] @ (800b57c ) + 800b52e: f000 f8d7 bl 800b6e0 + break; + 800b532: e017 b.n 800b564 + case AuthTimeout: + LED_SetColor(&color_finished); + 800b534: 4812 ldr r0, [pc, #72] @ (800b580 ) + 800b536: f000 f8d3 bl 800b6e0 + break; + 800b53a: e013 b.n 800b564 + case Finished: + LED_SetColor(&color_finished); + 800b53c: 4810 ldr r0, [pc, #64] @ (800b580 ) + 800b53e: f000 f8cf bl 800b6e0 + break; + 800b542: e00f b.n 800b564 + case FinishedEVSE: + LED_SetColor(&color_finished); + 800b544: 480e ldr r0, [pc, #56] @ (800b580 ) + 800b546: f000 f8cb bl 800b6e0 + break; + 800b54a: e00b b.n 800b564 + case FinishedEV: + LED_SetColor(&color_finished); + 800b54c: 480c ldr r0, [pc, #48] @ (800b580 ) + 800b54e: f000 f8c7 bl 800b6e0 + break; + 800b552: e007 b.n 800b564 + case Replugging: + LED_SetColor(&color_preparing); + 800b554: 4808 ldr r0, [pc, #32] @ (800b578 ) + 800b556: f000 f8c3 bl 800b6e0 + break; + 800b55a: e003 b.n 800b564 + default: + LED_SetColor(&color_unknown); + 800b55c: 4804 ldr r0, [pc, #16] @ (800b570 ) + 800b55e: f000 f8bf bl 800b6e0 + break; + 800b562: bf00 nop + } + } + 800b564: bd80 pop {r7, pc} + 800b566: bf00 nop + 800b568: 2000033c .word 0x2000033c + 800b56c: 20000044 .word 0x20000044 + 800b570: 20000008 .word 0x20000008 + 800b574: 20000014 .word 0x20000014 + 800b578: 20000020 .word 0x20000020 + 800b57c: 2000002c .word 0x2000002c + 800b580: 20000038 .word 0x20000038 + +0800b584 : + +void interpolateColors(RGB_t* color1, RGB_t* color2, uint16_t a, uint16_t b, RGB_t *result) { + 800b584: b480 push {r7} + 800b586: b087 sub sp, #28 + 800b588: af00 add r7, sp, #0 + 800b58a: 60f8 str r0, [r7, #12] + 800b58c: 60b9 str r1, [r7, #8] + 800b58e: 4611 mov r1, r2 + 800b590: 461a mov r2, r3 + 800b592: 460b mov r3, r1 + 800b594: 80fb strh r3, [r7, #6] + 800b596: 4613 mov r3, r2 + 800b598: 80bb strh r3, [r7, #4] + + // Проверяем, чтобы a не выходила за пределы диапазона + if (a > b) a = b; + 800b59a: 88fa ldrh r2, [r7, #6] + 800b59c: 88bb ldrh r3, [r7, #4] + 800b59e: 429a cmp r2, r3 + 800b5a0: d901 bls.n 800b5a6 + 800b5a2: 88bb ldrh r3, [r7, #4] + 800b5a4: 80fb strh r3, [r7, #6] + + if(b==0) b = 1; + 800b5a6: 88bb ldrh r3, [r7, #4] + 800b5a8: 2b00 cmp r3, #0 + 800b5aa: d101 bne.n 800b5b0 + 800b5ac: 2301 movs r3, #1 + 800b5ae: 80bb strh r3, [r7, #4] + + // Вычисляем коэффициент смешивания в виде целого числа + uint16_t t = (a * 255) / b; // t будет от 0 до 255 + 800b5b0: 88fa ldrh r2, [r7, #6] + 800b5b2: 4613 mov r3, r2 + 800b5b4: 021b lsls r3, r3, #8 + 800b5b6: 1a9a subs r2, r3, r2 + 800b5b8: 88bb ldrh r3, [r7, #4] + 800b5ba: fb92 f3f3 sdiv r3, r2, r3 + 800b5be: 82fb strh r3, [r7, #22] + + // Линейная интерполяция с использованием целых чисел + result->R = (color1->R * (255 - t) + color2->R * t) / 255; + 800b5c0: 68fb ldr r3, [r7, #12] + 800b5c2: 781b ldrb r3, [r3, #0] + 800b5c4: 461a mov r2, r3 + 800b5c6: 8afb ldrh r3, [r7, #22] + 800b5c8: f1c3 03ff rsb r3, r3, #255 @ 0xff + 800b5cc: fb03 f202 mul.w r2, r3, r2 + 800b5d0: 68bb ldr r3, [r7, #8] + 800b5d2: 781b ldrb r3, [r3, #0] + 800b5d4: 4619 mov r1, r3 + 800b5d6: 8afb ldrh r3, [r7, #22] + 800b5d8: fb01 f303 mul.w r3, r1, r3 + 800b5dc: 4413 add r3, r2 + 800b5de: 4a20 ldr r2, [pc, #128] @ (800b660 ) + 800b5e0: fb82 1203 smull r1, r2, r2, r3 + 800b5e4: 441a add r2, r3 + 800b5e6: 11d2 asrs r2, r2, #7 + 800b5e8: 17db asrs r3, r3, #31 + 800b5ea: 1ad3 subs r3, r2, r3 + 800b5ec: b2da uxtb r2, r3 + 800b5ee: 6a3b ldr r3, [r7, #32] + 800b5f0: 701a strb r2, [r3, #0] + result->G = (color1->G * (255 - t) + color2->G * t) / 255; + 800b5f2: 68fb ldr r3, [r7, #12] + 800b5f4: 785b ldrb r3, [r3, #1] + 800b5f6: 461a mov r2, r3 + 800b5f8: 8afb ldrh r3, [r7, #22] + 800b5fa: f1c3 03ff rsb r3, r3, #255 @ 0xff + 800b5fe: fb03 f202 mul.w r2, r3, r2 + 800b602: 68bb ldr r3, [r7, #8] + 800b604: 785b ldrb r3, [r3, #1] + 800b606: 4619 mov r1, r3 + 800b608: 8afb ldrh r3, [r7, #22] + 800b60a: fb01 f303 mul.w r3, r1, r3 + 800b60e: 4413 add r3, r2 + 800b610: 4a13 ldr r2, [pc, #76] @ (800b660 ) + 800b612: fb82 1203 smull r1, r2, r2, r3 + 800b616: 441a add r2, r3 + 800b618: 11d2 asrs r2, r2, #7 + 800b61a: 17db asrs r3, r3, #31 + 800b61c: 1ad3 subs r3, r2, r3 + 800b61e: b2da uxtb r2, r3 + 800b620: 6a3b ldr r3, [r7, #32] + 800b622: 705a strb r2, [r3, #1] + result->B = (color1->B * (255 - t) + color2->B * t) / 255; + 800b624: 68fb ldr r3, [r7, #12] + 800b626: 789b ldrb r3, [r3, #2] + 800b628: 461a mov r2, r3 + 800b62a: 8afb ldrh r3, [r7, #22] + 800b62c: f1c3 03ff rsb r3, r3, #255 @ 0xff + 800b630: fb03 f202 mul.w r2, r3, r2 + 800b634: 68bb ldr r3, [r7, #8] + 800b636: 789b ldrb r3, [r3, #2] + 800b638: 4619 mov r1, r3 + 800b63a: 8afb ldrh r3, [r7, #22] + 800b63c: fb01 f303 mul.w r3, r1, r3 + 800b640: 4413 add r3, r2 + 800b642: 4a07 ldr r2, [pc, #28] @ (800b660 ) + 800b644: fb82 1203 smull r1, r2, r2, r3 + 800b648: 441a add r2, r3 + 800b64a: 11d2 asrs r2, r2, #7 + 800b64c: 17db asrs r3, r3, #31 + 800b64e: 1ad3 subs r3, r2, r3 + 800b650: b2da uxtb r2, r3 + 800b652: 6a3b ldr r3, [r7, #32] + 800b654: 709a strb r2, [r3, #2] + +} + 800b656: bf00 nop + 800b658: 371c adds r7, #28 + 800b65a: 46bd mov sp, r7 + 800b65c: bc80 pop {r7} + 800b65e: 4770 bx lr + 800b660: 80808081 .word 0x80808081 + +0800b664 : + + +void RGB_SetColor(RGB_t *color){ + 800b664: b480 push {r7} + 800b666: b083 sub sp, #12 + 800b668: af00 add r7, sp, #0 + 800b66a: 6078 str r0, [r7, #4] + htim4.Instance->CCR2 = color->R * 100 / 255; + 800b66c: 687b ldr r3, [r7, #4] + 800b66e: 781b ldrb r3, [r3, #0] + 800b670: 461a mov r2, r3 + 800b672: 2364 movs r3, #100 @ 0x64 + 800b674: fb02 f303 mul.w r3, r2, r3 + 800b678: 4a17 ldr r2, [pc, #92] @ (800b6d8 ) + 800b67a: fb82 1203 smull r1, r2, r2, r3 + 800b67e: 441a add r2, r3 + 800b680: 11d2 asrs r2, r2, #7 + 800b682: 17db asrs r3, r3, #31 + 800b684: 1ad2 subs r2, r2, r3 + 800b686: 4b15 ldr r3, [pc, #84] @ (800b6dc ) + 800b688: 681b ldr r3, [r3, #0] + 800b68a: 639a str r2, [r3, #56] @ 0x38 + htim4.Instance->CCR3 = color->G * 100 / 255; + 800b68c: 687b ldr r3, [r7, #4] + 800b68e: 785b ldrb r3, [r3, #1] + 800b690: 461a mov r2, r3 + 800b692: 2364 movs r3, #100 @ 0x64 + 800b694: fb02 f303 mul.w r3, r2, r3 + 800b698: 4a0f ldr r2, [pc, #60] @ (800b6d8 ) + 800b69a: fb82 1203 smull r1, r2, r2, r3 + 800b69e: 441a add r2, r3 + 800b6a0: 11d2 asrs r2, r2, #7 + 800b6a2: 17db asrs r3, r3, #31 + 800b6a4: 1ad2 subs r2, r2, r3 + 800b6a6: 4b0d ldr r3, [pc, #52] @ (800b6dc ) + 800b6a8: 681b ldr r3, [r3, #0] + 800b6aa: 63da str r2, [r3, #60] @ 0x3c + htim4.Instance->CCR4 = color->B * 100 / 255; + 800b6ac: 687b ldr r3, [r7, #4] + 800b6ae: 789b ldrb r3, [r3, #2] + 800b6b0: 461a mov r2, r3 + 800b6b2: 2364 movs r3, #100 @ 0x64 + 800b6b4: fb02 f303 mul.w r3, r2, r3 + 800b6b8: 4a07 ldr r2, [pc, #28] @ (800b6d8 ) + 800b6ba: fb82 1203 smull r1, r2, r2, r3 + 800b6be: 441a add r2, r3 + 800b6c0: 11d2 asrs r2, r2, #7 + 800b6c2: 17db asrs r3, r3, #31 + 800b6c4: 1ad2 subs r2, r2, r3 + 800b6c6: 4b05 ldr r3, [pc, #20] @ (800b6dc ) + 800b6c8: 681b ldr r3, [r3, #0] + 800b6ca: 641a str r2, [r3, #64] @ 0x40 +} + 800b6cc: bf00 nop + 800b6ce: 370c adds r7, #12 + 800b6d0: 46bd mov sp, r7 + 800b6d2: bc80 pop {r7} + 800b6d4: 4770 bx lr + 800b6d6: bf00 nop + 800b6d8: 80808081 .word 0x80808081 + 800b6dc: 20001068 .word 0x20001068 + +0800b6e0 : + +void LED_SetColor(RGB_Cycle_t *color){ + 800b6e0: b480 push {r7} + 800b6e2: b083 sub sp, #12 + 800b6e4: af00 add r7, sp, #0 + 800b6e6: 6078 str r0, [r7, #4] + memcpy(&LED_Cycle, color, sizeof(RGB_Cycle_t)); + 800b6e8: 4b05 ldr r3, [pc, #20] @ (800b700 ) + 800b6ea: 687a ldr r2, [r7, #4] + 800b6ec: 6810 ldr r0, [r2, #0] + 800b6ee: 6851 ldr r1, [r2, #4] + 800b6f0: c303 stmia r3!, {r0, r1} + 800b6f2: 8912 ldrh r2, [r2, #8] + 800b6f4: 801a strh r2, [r3, #0] +} + 800b6f6: bf00 nop + 800b6f8: 370c adds r7, #12 + 800b6fa: 46bd mov sp, r7 + 800b6fc: bc80 pop {r7} + 800b6fe: 4770 bx lr + 800b700: 200008e4 .word 0x200008e4 + +0800b704 : + + +void LED_Init(){ + 800b704: b580 push {r7, lr} + 800b706: b082 sub sp, #8 + 800b708: af00 add r7, sp, #0 + RGB_t color = {.R=0, .G=0, .B=0}; + 800b70a: 2300 movs r3, #0 + 800b70c: 713b strb r3, [r7, #4] + 800b70e: 2300 movs r3, #0 + 800b710: 717b strb r3, [r7, #5] + 800b712: 2300 movs r3, #0 + 800b714: 71bb strb r3, [r7, #6] + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); + 800b716: 2104 movs r1, #4 + 800b718: 4809 ldr r0, [pc, #36] @ (800b740 ) + 800b71a: f005 fc71 bl 8011000 + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); + 800b71e: 2108 movs r1, #8 + 800b720: 4807 ldr r0, [pc, #28] @ (800b740 ) + 800b722: f005 fc6d bl 8011000 + HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); + 800b726: 210c movs r1, #12 + 800b728: 4805 ldr r0, [pc, #20] @ (800b740 ) + 800b72a: f005 fc69 bl 8011000 + RGB_SetColor(&color); + 800b72e: 1d3b adds r3, r7, #4 + 800b730: 4618 mov r0, r3 + 800b732: f7ff ff97 bl 800b664 +} + 800b736: bf00 nop + 800b738: 3708 adds r7, #8 + 800b73a: 46bd mov sp, r7 + 800b73c: bd80 pop {r7, pc} + 800b73e: bf00 nop + 800b740: 20001068 .word 0x20001068 + +0800b744 : +// } +// } +// } +// } + +void LED_Task(){ + 800b744: b580 push {r7, lr} + 800b746: b082 sub sp, #8 + 800b748: af02 add r7, sp, #8 + static uint32_t led_tick; + if((HAL_GetTick() - led_tick) > 20){ + 800b74a: f002 f8c5 bl 800d8d8 + 800b74e: 4602 mov r2, r0 + 800b750: 4b46 ldr r3, [pc, #280] @ (800b86c ) + 800b752: 681b ldr r3, [r3, #0] + 800b754: 1ad3 subs r3, r2, r3 + 800b756: 2b14 cmp r3, #20 + 800b758: f240 8085 bls.w 800b866 + led_tick = HAL_GetTick(); + 800b75c: f002 f8bc bl 800d8d8 + 800b760: 4603 mov r3, r0 + 800b762: 4a42 ldr r2, [pc, #264] @ (800b86c ) + 800b764: 6013 str r3, [r2, #0] + LED_State.tick++; + 800b766: 4b42 ldr r3, [pc, #264] @ (800b870 ) + 800b768: 885b ldrh r3, [r3, #2] + 800b76a: 3301 adds r3, #1 + 800b76c: b29a uxth r2, r3 + 800b76e: 4b40 ldr r3, [pc, #256] @ (800b870 ) + 800b770: 805a strh r2, [r3, #2] + // LED_PhaseSync(led_n); + switch(LED_State.state){ + 800b772: 4b3f ldr r3, [pc, #252] @ (800b870 ) + 800b774: 781b ldrb r3, [r3, #0] + 800b776: 2b03 cmp r3, #3 + 800b778: d867 bhi.n 800b84a + 800b77a: a201 add r2, pc, #4 @ (adr r2, 800b780 ) + 800b77c: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800b780: 0800b791 .word 0x0800b791 + 800b784: 0800b7c3 .word 0x0800b7c3 + 800b788: 0800b7ef .word 0x0800b7ef + 800b78c: 0800b821 .word 0x0800b821 + case LED_RISING: + interpolateColors(&LED_Cycle.Color2, &LED_Cycle.Color1, LED_State.tick, LED_Cycle.Tr, &LED_State.color); + 800b790: 4b37 ldr r3, [pc, #220] @ (800b870 ) + 800b792: 885a ldrh r2, [r3, #2] + 800b794: 4b37 ldr r3, [pc, #220] @ (800b874 ) + 800b796: 78db ldrb r3, [r3, #3] + 800b798: 4619 mov r1, r3 + 800b79a: 4b37 ldr r3, [pc, #220] @ (800b878 ) + 800b79c: 9300 str r3, [sp, #0] + 800b79e: 460b mov r3, r1 + 800b7a0: 4934 ldr r1, [pc, #208] @ (800b874 ) + 800b7a2: 4836 ldr r0, [pc, #216] @ (800b87c ) + 800b7a4: f7ff feee bl 800b584 + + if(LED_State.tick>LED_Cycle.Tr){ + 800b7a8: 4b31 ldr r3, [pc, #196] @ (800b870 ) + 800b7aa: 885b ldrh r3, [r3, #2] + 800b7ac: 4a31 ldr r2, [pc, #196] @ (800b874 ) + 800b7ae: 78d2 ldrb r2, [r2, #3] + 800b7b0: 4293 cmp r3, r2 + 800b7b2: d94e bls.n 800b852 + LED_State.state = LED_HIGH; + 800b7b4: 4b2e ldr r3, [pc, #184] @ (800b870 ) + 800b7b6: 2201 movs r2, #1 + 800b7b8: 701a strb r2, [r3, #0] + LED_State.tick = 0; + 800b7ba: 4b2d ldr r3, [pc, #180] @ (800b870 ) + 800b7bc: 2200 movs r2, #0 + 800b7be: 805a strh r2, [r3, #2] + } + break; + 800b7c0: e047 b.n 800b852 + case LED_HIGH: + memcpy(&LED_State.color, &LED_Cycle.Color1, sizeof(RGB_t)); + 800b7c2: 4b2b ldr r3, [pc, #172] @ (800b870 ) + 800b7c4: 4a2b ldr r2, [pc, #172] @ (800b874 ) + 800b7c6: 3304 adds r3, #4 + 800b7c8: 6812 ldr r2, [r2, #0] + 800b7ca: 4611 mov r1, r2 + 800b7cc: 8019 strh r1, [r3, #0] + 800b7ce: 3302 adds r3, #2 + 800b7d0: 0c12 lsrs r2, r2, #16 + 800b7d2: 701a strb r2, [r3, #0] + + if(LED_State.tick>LED_Cycle.Th){ + 800b7d4: 4b26 ldr r3, [pc, #152] @ (800b870 ) + 800b7d6: 885b ldrh r3, [r3, #2] + 800b7d8: 4a26 ldr r2, [pc, #152] @ (800b874 ) + 800b7da: 7912 ldrb r2, [r2, #4] + 800b7dc: 4293 cmp r3, r2 + 800b7de: d93a bls.n 800b856 + LED_State.state = LED_FALLING; + 800b7e0: 4b23 ldr r3, [pc, #140] @ (800b870 ) + 800b7e2: 2202 movs r2, #2 + 800b7e4: 701a strb r2, [r3, #0] + LED_State.tick = 0; + 800b7e6: 4b22 ldr r3, [pc, #136] @ (800b870 ) + 800b7e8: 2200 movs r2, #0 + 800b7ea: 805a strh r2, [r3, #2] + } + break; + 800b7ec: e033 b.n 800b856 + case LED_FALLING: + interpolateColors(&LED_Cycle.Color1, &LED_Cycle.Color2, LED_State.tick, LED_Cycle.Tf, &LED_State.color); + 800b7ee: 4b20 ldr r3, [pc, #128] @ (800b870 ) + 800b7f0: 885a ldrh r2, [r3, #2] + 800b7f2: 4b20 ldr r3, [pc, #128] @ (800b874 ) + 800b7f4: 795b ldrb r3, [r3, #5] + 800b7f6: 4619 mov r1, r3 + 800b7f8: 4b1f ldr r3, [pc, #124] @ (800b878 ) + 800b7fa: 9300 str r3, [sp, #0] + 800b7fc: 460b mov r3, r1 + 800b7fe: 491f ldr r1, [pc, #124] @ (800b87c ) + 800b800: 481c ldr r0, [pc, #112] @ (800b874 ) + 800b802: f7ff febf bl 800b584 + + if(LED_State.tick>LED_Cycle.Tf){ + 800b806: 4b1a ldr r3, [pc, #104] @ (800b870 ) + 800b808: 885b ldrh r3, [r3, #2] + 800b80a: 4a1a ldr r2, [pc, #104] @ (800b874 ) + 800b80c: 7952 ldrb r2, [r2, #5] + 800b80e: 4293 cmp r3, r2 + 800b810: d923 bls.n 800b85a + LED_State.state = LED_LOW; + 800b812: 4b17 ldr r3, [pc, #92] @ (800b870 ) + 800b814: 2203 movs r2, #3 + 800b816: 701a strb r2, [r3, #0] + LED_State.tick = 0; + 800b818: 4b15 ldr r3, [pc, #84] @ (800b870 ) + 800b81a: 2200 movs r2, #0 + 800b81c: 805a strh r2, [r3, #2] + } + break; + 800b81e: e01c b.n 800b85a + case LED_LOW: + memcpy(&LED_State.color, &LED_Cycle.Color2, sizeof(RGB_t)); + 800b820: 4b13 ldr r3, [pc, #76] @ (800b870 ) + 800b822: 4a14 ldr r2, [pc, #80] @ (800b874 ) + 800b824: 3304 adds r3, #4 + 800b826: 3207 adds r2, #7 + 800b828: 8811 ldrh r1, [r2, #0] + 800b82a: 7892 ldrb r2, [r2, #2] + 800b82c: 8019 strh r1, [r3, #0] + 800b82e: 709a strb r2, [r3, #2] + + if(LED_State.tick>LED_Cycle.Tl){ + 800b830: 4b0f ldr r3, [pc, #60] @ (800b870 ) + 800b832: 885b ldrh r3, [r3, #2] + 800b834: 4a0f ldr r2, [pc, #60] @ (800b874 ) + 800b836: 7992 ldrb r2, [r2, #6] + 800b838: 4293 cmp r3, r2 + 800b83a: d910 bls.n 800b85e + LED_State.state = LED_RISING; + 800b83c: 4b0c ldr r3, [pc, #48] @ (800b870 ) + 800b83e: 2200 movs r2, #0 + 800b840: 701a strb r2, [r3, #0] + LED_State.tick = 0; + 800b842: 4b0b ldr r3, [pc, #44] @ (800b870 ) + 800b844: 2200 movs r2, #0 + 800b846: 805a strh r2, [r3, #2] + } + break; + 800b848: e009 b.n 800b85e + default: + LED_State.state = LED_RISING; + 800b84a: 4b09 ldr r3, [pc, #36] @ (800b870 ) + 800b84c: 2200 movs r2, #0 + 800b84e: 701a strb r2, [r3, #0] + 800b850: e006 b.n 800b860 + break; + 800b852: bf00 nop + 800b854: e004 b.n 800b860 + break; + 800b856: bf00 nop + 800b858: e002 b.n 800b860 + break; + 800b85a: bf00 nop + 800b85c: e000 b.n 800b860 + break; + 800b85e: bf00 nop + } + RGB_SetColor(&LED_State.color); + 800b860: 4805 ldr r0, [pc, #20] @ (800b878 ) + 800b862: f7ff feff bl 800b664 + } +} + 800b866: bf00 nop + 800b868: 46bd mov sp, r7 + 800b86a: bd80 pop {r7, pc} + 800b86c: 200008f0 .word 0x200008f0 + 800b870: 200008dc .word 0x200008dc + 800b874: 200008e4 .word 0x200008e4 + 800b878: 200008e0 .word 0x200008e0 + 800b87c: 200008eb .word 0x200008eb + +0800b880 : + +RTC_HandleTypeDef hrtc; + +/* RTC init function */ +void MX_RTC_Init(void) +{ + 800b880: b580 push {r7, lr} + 800b882: af00 add r7, sp, #0 + + /* USER CODE END RTC_Init 1 */ + + /** Initialize RTC Only + */ + hrtc.Instance = RTC; + 800b884: 4b0a ldr r3, [pc, #40] @ (800b8b0 ) + 800b886: 4a0b ldr r2, [pc, #44] @ (800b8b4 ) + 800b888: 601a str r2, [r3, #0] + hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; + 800b88a: 4b09 ldr r3, [pc, #36] @ (800b8b0 ) + 800b88c: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800b890: 605a str r2, [r3, #4] + hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM; + 800b892: 4b07 ldr r3, [pc, #28] @ (800b8b0 ) + 800b894: f44f 7280 mov.w r2, #256 @ 0x100 + 800b898: 609a str r2, [r3, #8] + if (HAL_RTC_Init(&hrtc) != HAL_OK) + 800b89a: 4805 ldr r0, [pc, #20] @ (800b8b0 ) + 800b89c: f005 f8b2 bl 8010a04 + 800b8a0: 4603 mov r3, r0 + 800b8a2: 2b00 cmp r3, #0 + 800b8a4: d001 beq.n 800b8aa + { + Error_Handler(); + 800b8a6: f7ff f867 bl 800a978 + } + /* USER CODE BEGIN RTC_Init 2 */ + + /* USER CODE END RTC_Init 2 */ + +} + 800b8aa: bf00 nop + 800b8ac: bd80 pop {r7, pc} + 800b8ae: bf00 nop + 800b8b0: 200008f4 .word 0x200008f4 + 800b8b4: 40002800 .word 0x40002800 + +0800b8b8 : + +void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) +{ + 800b8b8: b580 push {r7, lr} + 800b8ba: b084 sub sp, #16 + 800b8bc: af00 add r7, sp, #0 + 800b8be: 6078 str r0, [r7, #4] + + if(rtcHandle->Instance==RTC) + 800b8c0: 687b ldr r3, [r7, #4] + 800b8c2: 681b ldr r3, [r3, #0] + 800b8c4: 4a0b ldr r2, [pc, #44] @ (800b8f4 ) + 800b8c6: 4293 cmp r3, r2 + 800b8c8: d110 bne.n 800b8ec + { + /* USER CODE BEGIN RTC_MspInit 0 */ + + /* USER CODE END RTC_MspInit 0 */ + HAL_PWR_EnableBkUpAccess(); + 800b8ca: f004 f82f bl 800f92c + /* Enable BKP CLK enable for backup registers */ + __HAL_RCC_BKP_CLK_ENABLE(); + 800b8ce: 4b0a ldr r3, [pc, #40] @ (800b8f8 ) + 800b8d0: 69db ldr r3, [r3, #28] + 800b8d2: 4a09 ldr r2, [pc, #36] @ (800b8f8 ) + 800b8d4: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 + 800b8d8: 61d3 str r3, [r2, #28] + 800b8da: 4b07 ldr r3, [pc, #28] @ (800b8f8 ) + 800b8dc: 69db ldr r3, [r3, #28] + 800b8de: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800b8e2: 60fb str r3, [r7, #12] + 800b8e4: 68fb ldr r3, [r7, #12] + /* RTC clock enable */ + __HAL_RCC_RTC_ENABLE(); + 800b8e6: 4b05 ldr r3, [pc, #20] @ (800b8fc ) + 800b8e8: 2201 movs r2, #1 + 800b8ea: 601a str r2, [r3, #0] + /* USER CODE BEGIN RTC_MspInit 1 */ + + /* USER CODE END RTC_MspInit 1 */ + } +} + 800b8ec: bf00 nop + 800b8ee: 3710 adds r7, #16 + 800b8f0: 46bd mov sp, r7 + 800b8f2: bd80 pop {r7, pc} + 800b8f4: 40002800 .word 0x40002800 + 800b8f8: 40021000 .word 0x40021000 + 800b8fc: 4242043c .word 0x4242043c + +0800b900 <__NVIC_SystemReset>: +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + 800b900: b480 push {r7} + 800b902: af00 add r7, sp, #0 + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); + 800b904: f3bf 8f4f dsb sy +} + 800b908: bf00 nop + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + 800b90a: 4b06 ldr r3, [pc, #24] @ (800b924 <__NVIC_SystemReset+0x24>) + 800b90c: 68db ldr r3, [r3, #12] + 800b90e: f403 62e0 and.w r2, r3, #1792 @ 0x700 + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 800b912: 4904 ldr r1, [pc, #16] @ (800b924 <__NVIC_SystemReset+0x24>) + 800b914: 4b04 ldr r3, [pc, #16] @ (800b928 <__NVIC_SystemReset+0x28>) + 800b916: 4313 orrs r3, r2 + 800b918: 60cb str r3, [r1, #12] + __ASM volatile ("dsb 0xF":::"memory"); + 800b91a: f3bf 8f4f dsb sy +} + 800b91e: bf00 nop + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + 800b920: bf00 nop + 800b922: e7fd b.n 800b920 <__NVIC_SystemReset+0x20> + 800b924: e000ed00 .word 0xe000ed00 + 800b928: 05fa0004 .word 0x05fa0004 + +0800b92c : +CONN_State_t CCS_EvseState; +CCS_ConnectorState_t CCS_ConnectorState = CCS_UNPLUGGED; + +static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len); + +void CCS_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size) { + 800b92c: b580 push {r7, lr} + 800b92e: b082 sub sp, #8 + 800b930: af00 add r7, sp, #0 + 800b932: 6078 str r0, [r7, #4] + 800b934: 460b mov r3, r1 + 800b936: 807b strh r3, [r7, #2] + if (huart != &huart3) { + 800b938: 687b ldr r3, [r7, #4] + 800b93a: 4a0b ldr r2, [pc, #44] @ (800b968 ) + 800b93c: 4293 cmp r3, r2 + 800b93e: d10f bne.n 800b960 + return; + } + rx_armed = 0; + 800b940: 4b0a ldr r3, [pc, #40] @ (800b96c ) + 800b942: 2200 movs r2, #0 + 800b944: 701a strb r2, [r3, #0] + if (size > 0 && size <= sizeof(rx_buffer)) { + 800b946: 887b ldrh r3, [r7, #2] + 800b948: 2b00 cmp r3, #0 + 800b94a: d00a beq.n 800b962 + 800b94c: 887b ldrh r3, [r7, #2] + 800b94e: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 800b952: d806 bhi.n 800b962 + process_received_packet(rx_buffer, size); + 800b954: 887b ldrh r3, [r7, #2] + 800b956: 4619 mov r1, r3 + 800b958: 4805 ldr r0, [pc, #20] @ (800b970 ) + 800b95a: f000 fc99 bl 800c290 + 800b95e: e000 b.n 800b962 + return; + 800b960: bf00 nop + } +} + 800b962: 3708 adds r7, #8 + 800b964: 46bd mov sp, r7 + 800b966: bd80 pop {r7, pc} + 800b968: 20001188 .word 0x20001188 + 800b96c: 20000b2c .word 0x20000b2c + 800b970: 2000092c .word 0x2000092c + +0800b974 : + +void CCS_SerialLoop(void) { + 800b974: b580 push {r7, lr} + 800b976: af00 add r7, sp, #0 + static uint32_t replug_tick = 0; + static uint32_t replug_watchdog_tick = 0; + static uint32_t replug_watchdog1_tick = 0; + static uint32_t last_state_sent = 0; + + if (!rx_armed && HAL_UART_GetState(&huart3) == HAL_UART_STATE_READY) { + 800b978: 4ba6 ldr r3, [pc, #664] @ (800bc14 ) + 800b97a: 781b ldrb r3, [r3, #0] + 800b97c: 2b00 cmp r3, #0 + 800b97e: d111 bne.n 800b9a4 + 800b980: 48a5 ldr r0, [pc, #660] @ (800bc18 ) + 800b982: f006 ff42 bl 801280a + 800b986: 4603 mov r3, r0 + 800b988: 2b20 cmp r3, #32 + 800b98a: d10b bne.n 800b9a4 + if (HAL_UARTEx_ReceiveToIdle_IT(&huart3, rx_buffer, sizeof(rx_buffer)) == HAL_OK) { + 800b98c: f44f 7280 mov.w r2, #256 @ 0x100 + 800b990: 49a2 ldr r1, [pc, #648] @ (800bc1c ) + 800b992: 48a1 ldr r0, [pc, #644] @ (800bc18 ) + 800b994: f006 fb1a bl 8011fcc + 800b998: 4603 mov r3, r0 + 800b99a: 2b00 cmp r3, #0 + 800b99c: d102 bne.n 800b9a4 + rx_armed = 1; + 800b99e: 4b9d ldr r3, [pc, #628] @ (800bc14 ) + 800b9a0: 2201 movs r2, #1 + 800b9a2: 701a strb r2, [r3, #0] + } + } + + /* Read CP once per loop and use buffered value below. */ + cp_state_buffer = CP_GetState(); + 800b9a4: f7fe fb9c bl 800a0e0 + 800b9a8: 4603 mov r3, r0 + 800b9aa: 461a mov r2, r3 + 800b9ac: 4b9c ldr r3, [pc, #624] @ (800bc20 ) + 800b9ae: 701a strb r2, [r3, #0] + + if (CONN.connControl != CMD_NONE) { + 800b9b0: 4b9c ldr r3, [pc, #624] @ (800bc24 ) + 800b9b2: 781b ldrb r3, [r3, #0] + 800b9b4: 2b00 cmp r3, #0 + 800b9b6: d003 beq.n 800b9c0 + last_cmd = CONN.connControl; + 800b9b8: 4b9a ldr r3, [pc, #616] @ (800bc24 ) + 800b9ba: 781a ldrb r2, [r3, #0] + 800b9bc: 4b9a ldr r3, [pc, #616] @ (800bc28 ) + 800b9be: 701a strb r2, [r3, #0] + } + + if((HAL_GetTick() - last_cmd_sent) > CMD_INTERVAL){ + 800b9c0: f001 ff8a bl 800d8d8 + 800b9c4: 4602 mov r2, r0 + 800b9c6: 4b99 ldr r3, [pc, #612] @ (800bc2c ) + 800b9c8: 681b ldr r3, [r3, #0] + 800b9ca: 1ad3 subs r3, r2, r3 + 800b9cc: 2b0a cmp r3, #10 + 800b9ce: d953 bls.n 800ba78 + if ((HAL_GetTick() - last_state_sent) >= 200) { + 800b9d0: f001 ff82 bl 800d8d8 + 800b9d4: 4602 mov r2, r0 + 800b9d6: 4b96 ldr r3, [pc, #600] @ (800bc30 ) + 800b9d8: 681b ldr r3, [r3, #0] + 800b9da: 1ad3 subs r3, r2, r3 + 800b9dc: 2bc7 cmp r3, #199 @ 0xc7 + 800b9de: d906 bls.n 800b9ee + send_state(); + 800b9e0: f000 fada bl 800bf98 + last_state_sent = HAL_GetTick(); + 800b9e4: f001 ff78 bl 800d8d8 + 800b9e8: 4603 mov r3, r0 + 800b9ea: 4a91 ldr r2, [pc, #580] @ (800bc30 ) + 800b9ec: 6013 str r3, [r2, #0] + } + + if (ESTOP) { + 800b9ee: 4b91 ldr r3, [pc, #580] @ (800bc34 ) + 800b9f0: 781b ldrb r3, [r3, #0] + 800b9f2: 2b00 cmp r3, #0 + 800b9f4: d008 beq.n 800ba08 + log_printf(LOG_ERR, "ESTOP triggered\n"); + 800b9f6: 4990 ldr r1, [pc, #576] @ (800bc38 ) + 800b9f8: 2004 movs r0, #4 + 800b9fa: f7fe fcfd bl 800a3f8 + CCS_SendEmergencyStop(); + 800b9fe: f000 fa6c bl 800beda + ESTOP = 0; + 800ba02: 4b8c ldr r3, [pc, #560] @ (800bc34 ) + 800ba04: 2200 movs r2, #0 + 800ba06: 701a strb r2, [r3, #0] + } + + if (((CONN.connControl == CMD_STOP) || + 800ba08: 4b86 ldr r3, [pc, #536] @ (800bc24 ) + 800ba0a: 781b ldrb r3, [r3, #0] + 800ba0c: 2b01 cmp r3, #1 + 800ba0e: d003 beq.n 800ba18 + (CONN.chargingError != CONN_NO_ERROR)) && + 800ba10: 4b84 ldr r3, [pc, #528] @ (800bc24 ) + 800ba12: 7f5b ldrb r3, [r3, #29] + if (((CONN.connControl == CMD_STOP) || + 800ba14: 2b00 cmp r3, #0 + 800ba16: d013 beq.n 800ba40 + ((HAL_GetTick() - last_stop_sent) > 1000)) { + 800ba18: f001 ff5e bl 800d8d8 + 800ba1c: 4602 mov r2, r0 + 800ba1e: 4b87 ldr r3, [pc, #540] @ (800bc3c ) + 800ba20: 681b ldr r3, [r3, #0] + 800ba22: 1ad3 subs r3, r2, r3 + (CONN.chargingError != CONN_NO_ERROR)) && + 800ba24: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800ba28: d90a bls.n 800ba40 + last_stop_sent = HAL_GetTick(); + 800ba2a: f001 ff55 bl 800d8d8 + 800ba2e: 4603 mov r3, r0 + 800ba30: 4a82 ldr r2, [pc, #520] @ (800bc3c ) + 800ba32: 6013 str r3, [r2, #0] + log_printf(LOG_WARN, "Stopping charging...\n"); + 800ba34: 4982 ldr r1, [pc, #520] @ (800bc40 ) + 800ba36: 2005 movs r0, #5 + 800ba38: f7fe fcde bl 800a3f8 + CCS_SendEmergencyStop(); + 800ba3c: f000 fa4d bl 800beda + } + + if (((CCS_EvseState == FinishedEV) || (CCS_EvseState == FinishedEVSE)) && + 800ba40: 4b80 ldr r3, [pc, #512] @ (800bc44 ) + 800ba42: 781b ldrb r3, [r3, #0] + 800ba44: 2b0c cmp r3, #12 + 800ba46: d003 beq.n 800ba50 + 800ba48: 4b7e ldr r3, [pc, #504] @ (800bc44 ) + 800ba4a: 781b ldrb r3, [r3, #0] + 800ba4c: 2b0b cmp r3, #11 + 800ba4e: d113 bne.n 800ba78 + ((HAL_GetTick() - last_stop_sent) > 1000)) { + 800ba50: f001 ff42 bl 800d8d8 + 800ba54: 4602 mov r2, r0 + 800ba56: 4b79 ldr r3, [pc, #484] @ (800bc3c ) + 800ba58: 681b ldr r3, [r3, #0] + 800ba5a: 1ad3 subs r3, r2, r3 + if (((CCS_EvseState == FinishedEV) || (CCS_EvseState == FinishedEVSE)) && + 800ba5c: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800ba60: d90a bls.n 800ba78 + last_stop_sent = HAL_GetTick(); + 800ba62: f001 ff39 bl 800d8d8 + 800ba66: 4603 mov r3, r0 + 800ba68: 4a74 ldr r2, [pc, #464] @ (800bc3c ) + 800ba6a: 6013 str r3, [r2, #0] + log_printf(LOG_WARN, "FinishedEV, stopping...\n"); + 800ba6c: 4976 ldr r1, [pc, #472] @ (800bc48 ) + 800ba6e: 2005 movs r0, #5 + 800ba70: f7fe fcc2 bl 800a3f8 + CCS_SendEmergencyStop(); + 800ba74: f000 fa31 bl 800beda + } + + (void)replug_watchdog_tick; + (void)replug_watchdog1_tick; + + switch(CCS_ConnectorState){ + 800ba78: 4b74 ldr r3, [pc, #464] @ (800bc4c ) + 800ba7a: 781b ldrb r3, [r3, #0] + 800ba7c: 2b04 cmp r3, #4 + 800ba7e: f200 80f8 bhi.w 800bc72 + 800ba82: a201 add r2, pc, #4 @ (adr r2, 800ba88 ) + 800ba84: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800ba88: 0800ba9d .word 0x0800ba9d + 800ba8c: 0800babd .word 0x0800babd + 800ba90: 0800bb01 .word 0x0800bb01 + 800ba94: 0800bb3d .word 0x0800bb3d + 800ba98: 0800bb8d .word 0x0800bb8d + case CCS_DISABLED: + RELAY_Write(RELAY_CP, 0); + 800ba9c: 2100 movs r1, #0 + 800ba9e: 2005 movs r0, #5 + 800baa0: f7fd fdd4 bl 800964c + CONN_SetState(Disabled); + 800baa4: 2002 movs r0, #2 + 800baa6: f7fe f9cf bl 8009e48 + if (CONN.chargingError == CONN_NO_ERROR){ + 800baaa: 4b5e ldr r3, [pc, #376] @ (800bc24 ) + 800baac: 7f5b ldrb r3, [r3, #29] + 800baae: 2b00 cmp r3, #0 + 800bab0: f040 80a7 bne.w 800bc02 + CCS_ConnectorState = CCS_UNPLUGGED; + 800bab4: 4b65 ldr r3, [pc, #404] @ (800bc4c ) + 800bab6: 2201 movs r2, #1 + 800bab8: 701a strb r2, [r3, #0] + } + break; + 800baba: e0a2 b.n 800bc02 + case CCS_UNPLUGGED: + RELAY_Write(RELAY_CP, 1); + 800babc: 2101 movs r1, #1 + 800babe: 2005 movs r0, #5 + 800bac0: f7fd fdc4 bl 800964c + CONN_SetState(Unplugged); + 800bac4: 2001 movs r0, #1 + 800bac6: f7fe f9bf bl 8009e48 + if ((cp_state_buffer == EV_STATE_B_CONN_PREP) || (cp_state_buffer == EV_STATE_C_CONN_ACTIVE)){ + 800baca: 4b55 ldr r3, [pc, #340] @ (800bc20 ) + 800bacc: 781b ldrb r3, [r3, #0] + 800bace: 2b01 cmp r3, #1 + 800bad0: d003 beq.n 800bada + 800bad2: 4b53 ldr r3, [pc, #332] @ (800bc20 ) + 800bad4: 781b ldrb r3, [r3, #0] + 800bad6: 2b02 cmp r3, #2 + 800bad8: d102 bne.n 800bae0 + CCS_ConnectorState = CCS_AUTH_REQUIRED; + 800bada: 4b5c ldr r3, [pc, #368] @ (800bc4c ) + 800badc: 2202 movs r2, #2 + 800bade: 701a strb r2, [r3, #0] + } + if (CONN.chargingError != CONN_NO_ERROR){ + 800bae0: 4b50 ldr r3, [pc, #320] @ (800bc24 ) + 800bae2: 7f5b ldrb r3, [r3, #29] + 800bae4: 2b00 cmp r3, #0 + 800bae6: f000 808e beq.w 800bc06 + log_printf(LOG_ERR, "Charging error %d, state -> disabled\n", CONN.chargingError); + 800baea: 4b4e ldr r3, [pc, #312] @ (800bc24 ) + 800baec: 7f5b ldrb r3, [r3, #29] + 800baee: 461a mov r2, r3 + 800baf0: 4957 ldr r1, [pc, #348] @ (800bc50 ) + 800baf2: 2004 movs r0, #4 + 800baf4: f7fe fc80 bl 800a3f8 + CCS_ConnectorState = CCS_DISABLED; + 800baf8: 4b54 ldr r3, [pc, #336] @ (800bc4c ) + 800bafa: 2200 movs r2, #0 + 800bafc: 701a strb r2, [r3, #0] + } + + break; + 800bafe: e082 b.n 800bc06 + case CCS_AUTH_REQUIRED: + RELAY_Write(RELAY_CP, 1); + 800bb00: 2101 movs r1, #1 + 800bb02: 2005 movs r0, #5 + 800bb04: f7fd fda2 bl 800964c + CONN_SetState(AuthRequired); + 800bb08: 2004 movs r0, #4 + 800bb0a: f7fe f99d bl 8009e48 + if(CONN.connControl == CMD_START){ + 800bb0e: 4b45 ldr r3, [pc, #276] @ (800bc24 ) + 800bb10: 781b ldrb r3, [r3, #0] + 800bb12: 2b02 cmp r3, #2 + 800bb14: d106 bne.n 800bb24 + log_printf(LOG_INFO, "Charging permitted, start charging\n"); + 800bb16: 494f ldr r1, [pc, #316] @ (800bc54 ) + 800bb18: 2007 movs r0, #7 + 800bb1a: f7fe fc6d bl 800a3f8 + CCS_ConnectorState = CCS_CONNECTED; + 800bb1e: 4b4b ldr r3, [pc, #300] @ (800bc4c ) + 800bb20: 2203 movs r2, #3 + 800bb22: 701a strb r2, [r3, #0] + } + if (cp_state_buffer == EV_STATE_A_IDLE){ + 800bb24: 4b3e ldr r3, [pc, #248] @ (800bc20 ) + 800bb26: 781b ldrb r3, [r3, #0] + 800bb28: 2b00 cmp r3, #0 + 800bb2a: d16e bne.n 800bc0a + log_printf(LOG_INFO, "Car unplugged\n"); + 800bb2c: 494a ldr r1, [pc, #296] @ (800bc58 ) + 800bb2e: 2007 movs r0, #7 + 800bb30: f7fe fc62 bl 800a3f8 + CCS_ConnectorState = CCS_UNPLUGGED; + 800bb34: 4b45 ldr r3, [pc, #276] @ (800bc4c ) + 800bb36: 2201 movs r2, #1 + 800bb38: 701a strb r2, [r3, #0] + } + break; + 800bb3a: e066 b.n 800bc0a + case CCS_CONNECTED: + RELAY_Write(RELAY_CP, 1); + 800bb3c: 2101 movs r1, #1 + 800bb3e: 2005 movs r0, #5 + 800bb40: f7fd fd84 bl 800964c + if(CCS_EvseState < Preparing) { + 800bb44: 4b3f ldr r3, [pc, #252] @ (800bc44 ) + 800bb46: 781b ldrb r3, [r3, #0] + 800bb48: 2b02 cmp r3, #2 + 800bb4a: d803 bhi.n 800bb54 + CONN_SetState(Preparing); + 800bb4c: 2003 movs r0, #3 + 800bb4e: f7fe f97b bl 8009e48 + 800bb52: e004 b.n 800bb5e + } else { + CONN_SetState(CCS_EvseState); + 800bb54: 4b3b ldr r3, [pc, #236] @ (800bc44 ) + 800bb56: 781b ldrb r3, [r3, #0] + 800bb58: 4618 mov r0, r3 + 800bb5a: f7fe f975 bl 8009e48 + } + if (cp_state_buffer == EV_STATE_A_IDLE){ + 800bb5e: 4b30 ldr r3, [pc, #192] @ (800bc20 ) + 800bb60: 781b ldrb r3, [r3, #0] + 800bb62: 2b00 cmp r3, #0 + 800bb64: d106 bne.n 800bb74 + log_printf(LOG_INFO, "Car unplugged\n"); + 800bb66: 493c ldr r1, [pc, #240] @ (800bc58 ) + 800bb68: 2007 movs r0, #7 + 800bb6a: f7fe fc45 bl 800a3f8 + CCS_ConnectorState = CCS_UNPLUGGED; + 800bb6e: 4b37 ldr r3, [pc, #220] @ (800bc4c ) + 800bb70: 2201 movs r2, #1 + 800bb72: 701a strb r2, [r3, #0] + } + if(REPLUG > 0){ + 800bb74: 4b39 ldr r3, [pc, #228] @ (800bc5c ) + 800bb76: 781b ldrb r3, [r3, #0] + 800bb78: 2b00 cmp r3, #0 + 800bb7a: d048 beq.n 800bc0e + log_printf(LOG_INFO, "Replugging...\n"); + 800bb7c: 4938 ldr r1, [pc, #224] @ (800bc60 ) + 800bb7e: 2007 movs r0, #7 + 800bb80: f7fe fc3a bl 800a3f8 + CCS_ConnectorState = CCS_REPLUGGING; + 800bb84: 4b31 ldr r3, [pc, #196] @ (800bc4c ) + 800bb86: 2204 movs r2, #4 + 800bb88: 701a strb r2, [r3, #0] + } + break; + 800bb8a: e040 b.n 800bc0e + case CCS_REPLUGGING: + RELAY_Write(RELAY_CP, 0); + 800bb8c: 2100 movs r1, #0 + 800bb8e: 2005 movs r0, #5 + 800bb90: f7fd fd5c bl 800964c + CONN_SetState(Replugging); + 800bb94: 200d movs r0, #13 + 800bb96: f7fe f957 bl 8009e48 + if((HAL_GetTick() - replug_tick) > 1000){ + 800bb9a: f001 fe9d bl 800d8d8 + 800bb9e: 4602 mov r2, r0 + 800bba0: 4b30 ldr r3, [pc, #192] @ (800bc64 ) + 800bba2: 681b ldr r3, [r3, #0] + 800bba4: 1ad3 subs r3, r2, r3 + 800bba6: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 800bbaa: d91a bls.n 800bbe2 + replug_tick = HAL_GetTick(); + 800bbac: f001 fe94 bl 800d8d8 + 800bbb0: 4603 mov r3, r0 + 800bbb2: 4a2c ldr r2, [pc, #176] @ (800bc64 ) + 800bbb4: 6013 str r3, [r2, #0] + if(REPLUG > 0){ + 800bbb6: 4b29 ldr r3, [pc, #164] @ (800bc5c ) + 800bbb8: 781b ldrb r3, [r3, #0] + 800bbba: 2b00 cmp r3, #0 + 800bbbc: d00a beq.n 800bbd4 + if (REPLUG != 0xFF) REPLUG--; + 800bbbe: 4b27 ldr r3, [pc, #156] @ (800bc5c ) + 800bbc0: 781b ldrb r3, [r3, #0] + 800bbc2: 2bff cmp r3, #255 @ 0xff + 800bbc4: d00d beq.n 800bbe2 + 800bbc6: 4b25 ldr r3, [pc, #148] @ (800bc5c ) + 800bbc8: 781b ldrb r3, [r3, #0] + 800bbca: 3b01 subs r3, #1 + 800bbcc: b2da uxtb r2, r3 + 800bbce: 4b23 ldr r3, [pc, #140] @ (800bc5c ) + 800bbd0: 701a strb r2, [r3, #0] + 800bbd2: e006 b.n 800bbe2 + } else { + log_printf(LOG_INFO, "Replugging finished, but car unplugged\n"); + 800bbd4: 4924 ldr r1, [pc, #144] @ (800bc68 ) + 800bbd6: 2007 movs r0, #7 + 800bbd8: f7fe fc0e bl 800a3f8 + CCS_ConnectorState = CCS_UNPLUGGED; + 800bbdc: 4b1b ldr r3, [pc, #108] @ (800bc4c ) + 800bbde: 2201 movs r2, #1 + 800bbe0: 701a strb r2, [r3, #0] + } + } + + if(REPLUG == 0){ + 800bbe2: 4b1e ldr r3, [pc, #120] @ (800bc5c ) + 800bbe4: 781b ldrb r3, [r3, #0] + 800bbe6: 2b00 cmp r3, #0 + 800bbe8: d142 bne.n 800bc70 + if(cp_state_buffer == EV_STATE_B_CONN_PREP){ + 800bbea: 4b0d ldr r3, [pc, #52] @ (800bc20 ) + 800bbec: 781b ldrb r3, [r3, #0] + 800bbee: 2b01 cmp r3, #1 + 800bbf0: d13e bne.n 800bc70 + log_printf(LOG_INFO, "Replugging finished, car plugged, state -> auth required\n"); + 800bbf2: 491e ldr r1, [pc, #120] @ (800bc6c ) + 800bbf4: 2007 movs r0, #7 + 800bbf6: f7fe fbff bl 800a3f8 + CCS_ConnectorState = CCS_AUTH_REQUIRED; + 800bbfa: 4b14 ldr r3, [pc, #80] @ (800bc4c ) + 800bbfc: 2202 movs r2, #2 + 800bbfe: 701a strb r2, [r3, #0] + } + } + break; + 800bc00: e036 b.n 800bc70 + break; + 800bc02: bf00 nop + 800bc04: e035 b.n 800bc72 + break; + 800bc06: bf00 nop + 800bc08: e033 b.n 800bc72 + break; + 800bc0a: bf00 nop + 800bc0c: e031 b.n 800bc72 + break; + 800bc0e: bf00 nop + 800bc10: e02f b.n 800bc72 + 800bc12: bf00 nop + 800bc14: 20000b2c .word 0x20000b2c + 800bc18: 20001188 .word 0x20001188 + 800bc1c: 2000092c .word 0x2000092c + 800bc20: 2000004f .word 0x2000004f + 800bc24: 2000033c .word 0x2000033c + 800bc28: 20000928 .word 0x20000928 + 800bc2c: 20000920 .word 0x20000920 + 800bc30: 20000b88 .word 0x20000b88 + 800bc34: 20000b2d .word 0x20000b2d + 800bc38: 08015dec .word 0x08015dec + 800bc3c: 20000924 .word 0x20000924 + 800bc40: 08015e00 .word 0x08015e00 + 800bc44: 20000b84 .word 0x20000b84 + 800bc48: 08015e18 .word 0x08015e18 + 800bc4c: 20000050 .word 0x20000050 + 800bc50: 08015e34 .word 0x08015e34 + 800bc54: 08015e5c .word 0x08015e5c + 800bc58: 08015e80 .word 0x08015e80 + 800bc5c: 20000b2e .word 0x20000b2e + 800bc60: 08015e90 .word 0x08015e90 + 800bc64: 20000b8c .word 0x20000b8c + 800bc68: 08015ea0 .word 0x08015ea0 + 800bc6c: 08015ec8 .word 0x08015ec8 + break; + 800bc70: bf00 nop + } + + if (last_host_seen > 0 && (HAL_GetTick() - last_host_seen) > 500) { + 800bc72: 4b27 ldr r3, [pc, #156] @ (800bd10 ) + 800bc74: 681b ldr r3, [r3, #0] + 800bc76: 2b00 cmp r3, #0 + 800bc78: d016 beq.n 800bca8 + 800bc7a: f001 fe2d bl 800d8d8 + 800bc7e: 4602 mov r2, r0 + 800bc80: 4b23 ldr r3, [pc, #140] @ (800bd10 ) + 800bc82: 681b ldr r3, [r3, #0] + 800bc84: 1ad3 subs r3, r2, r3 + 800bc86: f5b3 7ffa cmp.w r3, #500 @ 0x1f4 + 800bc8a: d90d bls.n 800bca8 + CONN.EnableOutput = 0; + 800bc8c: 4b21 ldr r3, [pc, #132] @ (800bd14 ) + 800bc8e: 2200 movs r2, #0 + 800bc90: 75da strb r2, [r3, #23] + CCS_EvseState = Unknown; + 800bc92: 4b21 ldr r3, [pc, #132] @ (800bd18 ) + 800bc94: 2200 movs r2, #0 + 800bc96: 701a strb r2, [r3, #0] + CP_SetDuty(100); + 800bc98: 2064 movs r0, #100 @ 0x64 + 800bc9a: f7fe f9ef bl 800a07c + log_printf(LOG_ERR, "Everest timeout\n"); + 800bc9e: 491f ldr r1, [pc, #124] @ (800bd1c ) + 800bca0: 2004 movs r0, #4 + 800bca2: f7fe fba9 bl 800a3f8 + 800bca6: e01c b.n 800bce2 + } else { + if (last_cmd == CMD_STOP) { + 800bca8: 4b1d ldr r3, [pc, #116] @ (800bd20 ) + 800bcaa: 781b ldrb r3, [r3, #0] + 800bcac: 2b01 cmp r3, #1 + 800bcae: d103 bne.n 800bcb8 + CONN.EnableOutput = 0; + 800bcb0: 4b18 ldr r3, [pc, #96] @ (800bd14 ) + 800bcb2: 2200 movs r2, #0 + 800bcb4: 75da strb r2, [r3, #23] + 800bcb6: e014 b.n 800bce2 + } else { + CONN.EnableOutput = ev_enable_output ? 1 : 0; + 800bcb8: 4b1a ldr r3, [pc, #104] @ (800bd24 ) + 800bcba: 781b ldrb r3, [r3, #0] + 800bcbc: 2b00 cmp r3, #0 + 800bcbe: bf14 ite ne + 800bcc0: 2301 movne r3, #1 + 800bcc2: 2300 moveq r3, #0 + 800bcc4: b2db uxtb r3, r3 + 800bcc6: 461a mov r2, r3 + 800bcc8: 4b12 ldr r3, [pc, #72] @ (800bd14 ) + 800bcca: 75da strb r2, [r3, #23] + if((CONN.EnableOutput == 0) && (CONN.connState == Preparing)){ + 800bccc: 4b11 ldr r3, [pc, #68] @ (800bd14 ) + 800bcce: 7ddb ldrb r3, [r3, #23] + 800bcd0: 2b00 cmp r3, #0 + 800bcd2: d106 bne.n 800bce2 + 800bcd4: 4b0f ldr r3, [pc, #60] @ (800bd14 ) + 800bcd6: 785b ldrb r3, [r3, #1] + 800bcd8: 2b03 cmp r3, #3 + 800bcda: d102 bne.n 800bce2 + CONN.EnableOutput = 0; + 800bcdc: 4b0d ldr r3, [pc, #52] @ (800bd14 ) + 800bcde: 2200 movs r2, #0 + 800bce0: 75da strb r2, [r3, #23] + } + } + } + + if ((cp_state_buffer == EV_STATE_B_CONN_PREP) || + 800bce2: 4b11 ldr r3, [pc, #68] @ (800bd28 ) + 800bce4: 781b ldrb r3, [r3, #0] + 800bce6: 2b01 cmp r3, #1 + 800bce8: d007 beq.n 800bcfa + (cp_state_buffer == EV_STATE_C_CONN_ACTIVE) || + 800bcea: 4b0f ldr r3, [pc, #60] @ (800bd28 ) + 800bcec: 781b ldrb r3, [r3, #0] + if ((cp_state_buffer == EV_STATE_B_CONN_PREP) || + 800bcee: 2b02 cmp r3, #2 + 800bcf0: d003 beq.n 800bcfa + (cp_state_buffer == EV_STATE_D_CONN_ACT_VENT)) { + 800bcf2: 4b0d ldr r3, [pc, #52] @ (800bd28 ) + 800bcf4: 781b ldrb r3, [r3, #0] + (cp_state_buffer == EV_STATE_C_CONN_ACTIVE) || + 800bcf6: 2b03 cmp r3, #3 + 800bcf8: d103 bne.n 800bd02 + CONN.EvConnected = 1; + 800bcfa: 4b06 ldr r3, [pc, #24] @ (800bd14 ) + 800bcfc: 2201 movs r2, #1 + 800bcfe: 779a strb r2, [r3, #30] + 800bd00: e003 b.n 800bd0a + } else { + CONN.EvConnected = 0; + 800bd02: 4b04 ldr r3, [pc, #16] @ (800bd14 ) + 800bd04: 2200 movs r2, #0 + 800bd06: 779a strb r2, [r3, #30] + } +} + 800bd08: bf00 nop + 800bd0a: bf00 nop + 800bd0c: bd80 pop {r7, pc} + 800bd0e: bf00 nop + 800bd10: 20000b34 .word 0x20000b34 + 800bd14: 2000033c .word 0x2000033c + 800bd18: 20000b84 .word 0x20000b84 + 800bd1c: 08015f04 .word 0x08015f04 + 800bd20: 20000928 .word 0x20000928 + 800bd24: 20000929 .word 0x20000929 + 800bd28: 2000004f .word 0x2000004f + +0800bd2c : + +void CCS_Init(void){ + 800bd2c: b580 push {r7, lr} + 800bd2e: af00 add r7, sp, #0 + CP_Init(); + 800bd30: f7fe f982 bl 800a038 + CP_SetDuty(100); + 800bd34: 2064 movs r0, #100 @ 0x64 + 800bd36: f7fe f9a1 bl 800a07c + CCS_MaxLoad.maxVoltage = PSU_MAX_VOLTAGE; // 1000V + 800bd3a: 4b0d ldr r3, [pc, #52] @ (800bd70 ) + 800bd3c: f44f 727a mov.w r2, #1000 @ 0x3e8 + 800bd40: 801a strh r2, [r3, #0] + CCS_MaxLoad.minVoltage = PSU_MIN_VOLTAGE; //150V + 800bd42: 4b0b ldr r3, [pc, #44] @ (800bd70 ) + 800bd44: 2296 movs r2, #150 @ 0x96 + 800bd46: 805a strh r2, [r3, #2] + CCS_MaxLoad.maxCurrent = PSU_MAX_CURRENT*10; //100A + 800bd48: 4b09 ldr r3, [pc, #36] @ (800bd70 ) + 800bd4a: f240 5232 movw r2, #1330 @ 0x532 + 800bd4e: 809a strh r2, [r3, #4] + CCS_MaxLoad.minCurrent = PSU_MIN_CURRENT*10; //1A + 800bd50: 4b07 ldr r3, [pc, #28] @ (800bd70 ) + 800bd52: 220a movs r2, #10 + 800bd54: 80da strh r2, [r3, #6] + CCS_MaxLoad.maxPower = PSU_MAX_POWER; //30000W + 800bd56: 4b06 ldr r3, [pc, #24] @ (800bd70 ) + 800bd58: f247 5230 movw r2, #30000 @ 0x7530 + 800bd5c: 609a str r2, [r3, #8] + CCS_SendResetReason(); + 800bd5e: f000 f8b3 bl 800bec8 + log_printf(LOG_INFO, "CCS init\n"); + 800bd62: 4904 ldr r1, [pc, #16] @ (800bd74 ) + 800bd64: 2007 movs r0, #7 + 800bd66: f7fe fb47 bl 800a3f8 +} + 800bd6a: bf00 nop + 800bd6c: bd80 pop {r7, pc} + 800bd6e: bf00 nop + 800bd70: 20000908 .word 0x20000908 + 800bd74: 08015f18 .word 0x08015f18 + +0800bd78 : + +static uint16_t crc16_ibm(const uint8_t* data, uint16_t length) { + 800bd78: b480 push {r7} + 800bd7a: b085 sub sp, #20 + 800bd7c: af00 add r7, sp, #0 + 800bd7e: 6078 str r0, [r7, #4] + 800bd80: 460b mov r3, r1 + 800bd82: 807b strh r3, [r7, #2] + uint16_t crc = 0xFFFFu; + 800bd84: f64f 73ff movw r3, #65535 @ 0xffff + 800bd88: 81fb strh r3, [r7, #14] + for (uint16_t i = 0; i < length; i++) { + 800bd8a: 2300 movs r3, #0 + 800bd8c: 81bb strh r3, [r7, #12] + 800bd8e: e022 b.n 800bdd6 + crc ^= data[i]; + 800bd90: 89bb ldrh r3, [r7, #12] + 800bd92: 687a ldr r2, [r7, #4] + 800bd94: 4413 add r3, r2 + 800bd96: 781b ldrb r3, [r3, #0] + 800bd98: 461a mov r2, r3 + 800bd9a: 89fb ldrh r3, [r7, #14] + 800bd9c: 4053 eors r3, r2 + 800bd9e: 81fb strh r3, [r7, #14] + for (uint8_t j = 0; j < 8; j++) { + 800bda0: 2300 movs r3, #0 + 800bda2: 72fb strb r3, [r7, #11] + 800bda4: e011 b.n 800bdca + if (crc & 1u) { + 800bda6: 89fb ldrh r3, [r7, #14] + 800bda8: f003 0301 and.w r3, r3, #1 + 800bdac: 2b00 cmp r3, #0 + 800bdae: d006 beq.n 800bdbe + crc = (crc >> 1) ^ 0xA001u; + 800bdb0: 89fb ldrh r3, [r7, #14] + 800bdb2: 085b lsrs r3, r3, #1 + 800bdb4: b29a uxth r2, r3 + 800bdb6: 4b0d ldr r3, [pc, #52] @ (800bdec ) + 800bdb8: 4053 eors r3, r2 + 800bdba: 81fb strh r3, [r7, #14] + 800bdbc: e002 b.n 800bdc4 + } else { + crc >>= 1; + 800bdbe: 89fb ldrh r3, [r7, #14] + 800bdc0: 085b lsrs r3, r3, #1 + 800bdc2: 81fb strh r3, [r7, #14] + for (uint8_t j = 0; j < 8; j++) { + 800bdc4: 7afb ldrb r3, [r7, #11] + 800bdc6: 3301 adds r3, #1 + 800bdc8: 72fb strb r3, [r7, #11] + 800bdca: 7afb ldrb r3, [r7, #11] + 800bdcc: 2b07 cmp r3, #7 + 800bdce: d9ea bls.n 800bda6 + for (uint16_t i = 0; i < length; i++) { + 800bdd0: 89bb ldrh r3, [r7, #12] + 800bdd2: 3301 adds r3, #1 + 800bdd4: 81bb strh r3, [r7, #12] + 800bdd6: 89ba ldrh r2, [r7, #12] + 800bdd8: 887b ldrh r3, [r7, #2] + 800bdda: 429a cmp r2, r3 + 800bddc: d3d8 bcc.n 800bd90 + } + } + } + return crc; + 800bdde: 89fb ldrh r3, [r7, #14] +} + 800bde0: 4618 mov r0, r3 + 800bde2: 3714 adds r7, #20 + 800bde4: 46bd mov sp, r7 + 800bde6: bc80 pop {r7} + 800bde8: 4770 bx lr + 800bdea: bf00 nop + 800bdec: ffffa001 .word 0xffffa001 + +0800bdf0 : + +static uint16_t CCS_BuildPacket(uint8_t cmd, const void* payload, uint16_t payload_len, uint8_t* out, uint16_t out_max) { + 800bdf0: b580 push {r7, lr} + 800bdf2: b086 sub sp, #24 + 800bdf4: af00 add r7, sp, #0 + 800bdf6: 60b9 str r1, [r7, #8] + 800bdf8: 607b str r3, [r7, #4] + 800bdfa: 4603 mov r3, r0 + 800bdfc: 73fb strb r3, [r7, #15] + 800bdfe: 4613 mov r3, r2 + 800be00: 81bb strh r3, [r7, #12] + uint16_t total_len = (uint16_t)(1u + payload_len + 2u); + 800be02: 89bb ldrh r3, [r7, #12] + 800be04: 3303 adds r3, #3 + 800be06: 82fb strh r3, [r7, #22] + if (total_len > out_max) return 0; + 800be08: 8afa ldrh r2, [r7, #22] + 800be0a: 8c3b ldrh r3, [r7, #32] + 800be0c: 429a cmp r2, r3 + 800be0e: d901 bls.n 800be14 + 800be10: 2300 movs r3, #0 + 800be12: e029 b.n 800be68 + + out[0] = cmd; + 800be14: 687b ldr r3, [r7, #4] + 800be16: 7bfa ldrb r2, [r7, #15] + 800be18: 701a strb r2, [r3, #0] + if (payload_len && payload != NULL) { + 800be1a: 89bb ldrh r3, [r7, #12] + 800be1c: 2b00 cmp r3, #0 + 800be1e: d009 beq.n 800be34 + 800be20: 68bb ldr r3, [r7, #8] + 800be22: 2b00 cmp r3, #0 + 800be24: d006 beq.n 800be34 + memcpy(&out[1], payload, payload_len); + 800be26: 687b ldr r3, [r7, #4] + 800be28: 3301 adds r3, #1 + 800be2a: 89ba ldrh r2, [r7, #12] + 800be2c: 68b9 ldr r1, [r7, #8] + 800be2e: 4618 mov r0, r3 + 800be30: f007 fdd6 bl 80139e0 + } + + uint16_t crc = crc16_ibm(out, (uint16_t)(1u + payload_len)); + 800be34: 89bb ldrh r3, [r7, #12] + 800be36: 3301 adds r3, #1 + 800be38: b29b uxth r3, r3 + 800be3a: 4619 mov r1, r3 + 800be3c: 6878 ldr r0, [r7, #4] + 800be3e: f7ff ff9b bl 800bd78 + 800be42: 4603 mov r3, r0 + 800be44: 82bb strh r3, [r7, #20] + out[1u + payload_len] = (uint8_t)(crc & 0xFFu); + 800be46: 89bb ldrh r3, [r7, #12] + 800be48: 3301 adds r3, #1 + 800be4a: 687a ldr r2, [r7, #4] + 800be4c: 4413 add r3, r2 + 800be4e: 8aba ldrh r2, [r7, #20] + 800be50: b2d2 uxtb r2, r2 + 800be52: 701a strb r2, [r3, #0] + out[1u + payload_len + 1u] = (uint8_t)((crc >> 8) & 0xFFu); + 800be54: 8abb ldrh r3, [r7, #20] + 800be56: 0a1b lsrs r3, r3, #8 + 800be58: b299 uxth r1, r3 + 800be5a: 89bb ldrh r3, [r7, #12] + 800be5c: 3302 adds r3, #2 + 800be5e: 687a ldr r2, [r7, #4] + 800be60: 4413 add r3, r2 + 800be62: b2ca uxtb r2, r1 + 800be64: 701a strb r2, [r3, #0] + + return total_len; + 800be66: 8afb ldrh r3, [r7, #22] +} + 800be68: 4618 mov r0, r3 + 800be6a: 3718 adds r7, #24 + 800be6c: 46bd mov sp, r7 + 800be6e: bd80 pop {r7, pc} + +0800be70 : + +static void CCS_SendPacket(uint8_t cmd, const void* payload, uint16_t payload_len) { + 800be70: b580 push {r7, lr} + 800be72: b086 sub sp, #24 + 800be74: af02 add r7, sp, #8 + 800be76: 4603 mov r3, r0 + 800be78: 6039 str r1, [r7, #0] + 800be7a: 71fb strb r3, [r7, #7] + 800be7c: 4613 mov r3, r2 + 800be7e: 80bb strh r3, [r7, #4] + uint16_t len = CCS_BuildPacket(cmd, payload, payload_len, tx_buffer, sizeof(tx_buffer)); + 800be80: 88ba ldrh r2, [r7, #4] + 800be82: 79f8 ldrb r0, [r7, #7] + 800be84: f44f 7380 mov.w r3, #256 @ 0x100 + 800be88: 9300 str r3, [sp, #0] + 800be8a: 4b0c ldr r3, [pc, #48] @ (800bebc ) + 800be8c: 6839 ldr r1, [r7, #0] + 800be8e: f7ff ffaf bl 800bdf0 + 800be92: 4603 mov r3, r0 + 800be94: 81fb strh r3, [r7, #14] + if (len > 0) { + 800be96: 89fb ldrh r3, [r7, #14] + 800be98: 2b00 cmp r3, #0 + 800be9a: d006 beq.n 800beaa + HAL_UART_Transmit(&huart3, tx_buffer, len, 1000); + 800be9c: 89fa ldrh r2, [r7, #14] + 800be9e: f44f 737a mov.w r3, #1000 @ 0x3e8 + 800bea2: 4906 ldr r1, [pc, #24] @ (800bebc ) + 800bea4: 4806 ldr r0, [pc, #24] @ (800bec0 ) + 800bea6: f005 ffd1 bl 8011e4c + } + last_cmd_sent = HAL_GetTick(); + 800beaa: f001 fd15 bl 800d8d8 + 800beae: 4603 mov r3, r0 + 800beb0: 4a04 ldr r2, [pc, #16] @ (800bec4 ) + 800beb2: 6013 str r3, [r2, #0] +} + 800beb4: bf00 nop + 800beb6: 3710 adds r7, #16 + 800beb8: 46bd mov sp, r7 + 800beba: bd80 pop {r7, pc} + 800bebc: 20000a2c .word 0x20000a2c + 800bec0: 20001188 .word 0x20001188 + 800bec4: 20000920 .word 0x20000920 + +0800bec8 : + +static void CCS_SendResetReason(void) { + 800bec8: b580 push {r7, lr} + 800beca: af00 add r7, sp, #0 + CCS_SendPacket(CMD_M2E_RESET, NULL, 0); + 800becc: 2200 movs r2, #0 + 800bece: 2100 movs r1, #0 + 800bed0: 2052 movs r0, #82 @ 0x52 + 800bed2: f7ff ffcd bl 800be70 +} + 800bed6: bf00 nop + 800bed8: bd80 pop {r7, pc} + +0800beda : + +void CCS_SendEmergencyStop(void) { + 800beda: b580 push {r7, lr} + 800bedc: af00 add r7, sp, #0 + CCS_SendPacket(CMD_M2E_ESTOP, NULL, 0); + 800bede: 2200 movs r2, #0 + 800bee0: 2100 movs r1, #0 + 800bee2: 2053 movs r0, #83 @ 0x53 + 800bee4: f7ff ffc4 bl 800be70 +} + 800bee8: bf00 nop + 800beea: bd80 pop {r7, pc} + +0800beec : + +void CCS_SendStart(void) { + CCS_SendPacket(CMD_M2E_START, NULL, 0); +} + +static void CCS_CalculateEnergy(void) { + 800beec: b580 push {r7, lr} + 800beee: b082 sub sp, #8 + 800bef0: af00 add r7, sp, #0 + static uint32_t lastTick = 0; + uint32_t currentTick = HAL_GetTick(); + 800bef2: f001 fcf1 bl 800d8d8 + 800bef6: 6078 str r0, [r7, #4] + uint32_t elapsedTimeMs = currentTick - lastTick; + 800bef8: 4b1e ldr r3, [pc, #120] @ (800bf74 ) + 800befa: 681b ldr r3, [r3, #0] + 800befc: 687a ldr r2, [r7, #4] + 800befe: 1ad3 subs r3, r2, r3 + 800bf00: 603b str r3, [r7, #0] + lastTick = currentTick; + 800bf02: 4a1c ldr r2, [pc, #112] @ (800bf74 ) + 800bf04: 687b ldr r3, [r7, #4] + 800bf06: 6013 str r3, [r2, #0] + + CCS_Power = CONN.MeasuredVoltage * CONN.MeasuredCurrent / 10; + 800bf08: 4b1b ldr r3, [pc, #108] @ (800bf78 ) + 800bf0a: f8b3 3013 ldrh.w r3, [r3, #19] + 800bf0e: b29b uxth r3, r3 + 800bf10: 461a mov r2, r3 + 800bf12: 4b19 ldr r3, [pc, #100] @ (800bf78 ) + 800bf14: f8b3 3015 ldrh.w r3, [r3, #21] + 800bf18: b29b uxth r3, r3 + 800bf1a: fb02 f303 mul.w r3, r2, r3 + 800bf1e: 4a17 ldr r2, [pc, #92] @ (800bf7c ) + 800bf20: fb82 1203 smull r1, r2, r2, r3 + 800bf24: 1092 asrs r2, r2, #2 + 800bf26: 17db asrs r3, r3, #31 + 800bf28: 1ad3 subs r3, r2, r3 + 800bf2a: 461a mov r2, r3 + 800bf2c: 4b14 ldr r3, [pc, #80] @ (800bf80 ) + 800bf2e: 601a str r2, [r3, #0] + CCS_EnergyWs += (CCS_Power * elapsedTimeMs) / 1000; + 800bf30: 4b13 ldr r3, [pc, #76] @ (800bf80 ) + 800bf32: 681b ldr r3, [r3, #0] + 800bf34: 683a ldr r2, [r7, #0] + 800bf36: fb02 f303 mul.w r3, r2, r3 + 800bf3a: 4a12 ldr r2, [pc, #72] @ (800bf84 ) + 800bf3c: fba2 2303 umull r2, r3, r2, r3 + 800bf40: 099a lsrs r2, r3, #6 + 800bf42: 4b11 ldr r3, [pc, #68] @ (800bf88 ) + 800bf44: 681b ldr r3, [r3, #0] + 800bf46: 4413 add r3, r2 + 800bf48: 4a0f ldr r2, [pc, #60] @ (800bf88 ) + 800bf4a: 6013 str r3, [r2, #0] + + if(CCS_EvseState == Unplugged) { + 800bf4c: 4b0f ldr r3, [pc, #60] @ (800bf8c ) + 800bf4e: 781b ldrb r3, [r3, #0] + 800bf50: 2b01 cmp r3, #1 + 800bf52: d102 bne.n 800bf5a + CCS_EnergyWs = 0; + 800bf54: 4b0c ldr r3, [pc, #48] @ (800bf88 ) + 800bf56: 2200 movs r2, #0 + 800bf58: 601a str r2, [r3, #0] + } + CCS_Energy = CCS_EnergyWs / 3600; + 800bf5a: 4b0b ldr r3, [pc, #44] @ (800bf88 ) + 800bf5c: 681b ldr r3, [r3, #0] + 800bf5e: 4a0c ldr r2, [pc, #48] @ (800bf90 ) + 800bf60: fba2 2303 umull r2, r3, r2, r3 + 800bf64: 0adb lsrs r3, r3, #11 + 800bf66: 4a0b ldr r2, [pc, #44] @ (800bf94 ) + 800bf68: 6013 str r3, [r2, #0] +} + 800bf6a: bf00 nop + 800bf6c: 3708 adds r7, #8 + 800bf6e: 46bd mov sp, r7 + 800bf70: bd80 pop {r7, pc} + 800bf72: bf00 nop + 800bf74: 20000b90 .word 0x20000b90 + 800bf78: 2000033c .word 0x2000033c + 800bf7c: 66666667 .word 0x66666667 + 800bf80: 20000914 .word 0x20000914 + 800bf84: 10624dd3 .word 0x10624dd3 + 800bf88: 20000918 .word 0x20000918 + 800bf8c: 20000b84 .word 0x20000b84 + 800bf90: 91a2b3c5 .word 0x91a2b3c5 + 800bf94: 2000091c .word 0x2000091c + +0800bf98 : + +static void send_state(void) { + 800bf98: b580 push {r7, lr} + 800bf9a: af00 add r7, sp, #0 + CCS_CalculateEnergy(); + 800bf9c: f7ff ffa6 bl 800beec + + CCS_State.DutyCycle = CP_GetDuty(); + 800bfa0: f7fe f894 bl 800a0cc + 800bfa4: 4603 mov r3, r0 + 800bfa6: 461a mov r2, r3 + 800bfa8: 4b2a ldr r3, [pc, #168] @ (800c054 ) + 800bfaa: 701a strb r2, [r3, #0] + CCS_State.OutputEnabled = PSU0.CONT_enabled; + 800bfac: 4b2a ldr r3, [pc, #168] @ (800c058 ) + 800bfae: 7ada ldrb r2, [r3, #11] + 800bfb0: 4b28 ldr r3, [pc, #160] @ (800c054 ) + 800bfb2: 705a strb r2, [r3, #1] + CCS_State.MeasuredVoltage = (uint16_t)CONN.MeasuredVoltage; + 800bfb4: 4b29 ldr r3, [pc, #164] @ (800c05c ) + 800bfb6: f8b3 3013 ldrh.w r3, [r3, #19] + 800bfba: b29a uxth r2, r3 + 800bfbc: 4b25 ldr r3, [pc, #148] @ (800c054 ) + 800bfbe: 805a strh r2, [r3, #2] + CCS_State.MeasuredCurrent = (uint16_t)CONN.MeasuredCurrent; + 800bfc0: 4b26 ldr r3, [pc, #152] @ (800c05c ) + 800bfc2: f8b3 3015 ldrh.w r3, [r3, #21] + 800bfc6: b29a uxth r2, r3 + 800bfc8: 4b22 ldr r3, [pc, #136] @ (800c054 ) + 800bfca: 809a strh r2, [r3, #4] + CCS_State.Power = CCS_Power; + 800bfcc: 4b24 ldr r3, [pc, #144] @ (800c060 ) + 800bfce: 681b ldr r3, [r3, #0] + 800bfd0: 4a20 ldr r2, [pc, #128] @ (800c054 ) + 800bfd2: f8c2 3006 str.w r3, [r2, #6] + CCS_State.Energy = CCS_Energy; + 800bfd6: 4b23 ldr r3, [pc, #140] @ (800c064 ) + 800bfd8: 681b ldr r3, [r3, #0] + 800bfda: 4a1e ldr r2, [pc, #120] @ (800c054 ) + 800bfdc: f8c2 300a str.w r3, [r2, #10] + + if(CCS_ConnectorState == CCS_CONNECTED){ + 800bfe0: 4b21 ldr r3, [pc, #132] @ (800c068 ) + 800bfe2: 781b ldrb r3, [r3, #0] + 800bfe4: 2b03 cmp r3, #3 + 800bfe6: d104 bne.n 800bff2 + CCS_State.CpState = cp_state_buffer; + 800bfe8: 4b20 ldr r3, [pc, #128] @ (800c06c ) + 800bfea: 781a ldrb r2, [r3, #0] + 800bfec: 4b19 ldr r3, [pc, #100] @ (800c054 ) + 800bfee: 74da strb r2, [r3, #19] + 800bff0: e002 b.n 800bff8 + } else { + CCS_State.CpState = EV_STATE_A_IDLE; + 800bff2: 4b18 ldr r3, [pc, #96] @ (800c054 ) + 800bff4: 2200 movs r2, #0 + 800bff6: 74da strb r2, [r3, #19] + } + + CCS_State.MaxVoltage = CCS_MaxLoad.maxVoltage; + 800bff8: 4b1d ldr r3, [pc, #116] @ (800c070 ) + 800bffa: 881a ldrh r2, [r3, #0] + 800bffc: 4b15 ldr r3, [pc, #84] @ (800c054 ) + 800bffe: 829a strh r2, [r3, #20] + CCS_State.MinVoltage = CCS_MaxLoad.minVoltage; + 800c000: 4b1b ldr r3, [pc, #108] @ (800c070 ) + 800c002: 885a ldrh r2, [r3, #2] + 800c004: 4b13 ldr r3, [pc, #76] @ (800c054 ) + 800c006: 82da strh r2, [r3, #22] + CCS_State.MaxCurrent = CCS_MaxLoad.maxCurrent; + 800c008: 4b19 ldr r3, [pc, #100] @ (800c070 ) + 800c00a: 889a ldrh r2, [r3, #4] + 800c00c: 4b11 ldr r3, [pc, #68] @ (800c054 ) + 800c00e: 831a strh r2, [r3, #24] + CCS_State.MinCurrent = CCS_MaxLoad.minCurrent; + 800c010: 4b17 ldr r3, [pc, #92] @ (800c070 ) + 800c012: 88da ldrh r2, [r3, #6] + 800c014: 4b0f ldr r3, [pc, #60] @ (800c054 ) + 800c016: 835a strh r2, [r3, #26] + CCS_State.MaxPower = CCS_MaxLoad.maxPower; + 800c018: 4b15 ldr r3, [pc, #84] @ (800c070 ) + 800c01a: 689b ldr r3, [r3, #8] + 800c01c: 4a0d ldr r2, [pc, #52] @ (800c054 ) + 800c01e: 61d3 str r3, [r2, #28] + CCS_State.IsolationValid = isolation_enable; + 800c020: 4b14 ldr r3, [pc, #80] @ (800c074 ) + 800c022: 781a ldrb r2, [r3, #0] + 800c024: 4b0b ldr r3, [pc, #44] @ (800c054 ) + 800c026: 749a strb r2, [r3, #18] + CCS_State.IsolationResistance = 900000; + 800c028: 4a0a ldr r2, [pc, #40] @ (800c054 ) + 800c02a: 2300 movs r3, #0 + 800c02c: f043 437f orr.w r3, r3, #4278190080 @ 0xff000000 + 800c030: f443 037f orr.w r3, r3, #16711680 @ 0xff0000 + 800c034: f443 433b orr.w r3, r3, #47872 @ 0xbb00 + 800c038: f043 03a0 orr.w r3, r3, #160 @ 0xa0 + 800c03c: 81d3 strh r3, [r2, #14] + 800c03e: 2300 movs r3, #0 + 800c040: f043 030d orr.w r3, r3, #13 + 800c044: 8213 strh r3, [r2, #16] + + CCS_SendPacket(CMD_M2E_STATE, &CCS_State, sizeof(CCS_State)); + 800c046: 2220 movs r2, #32 + 800c048: 4902 ldr r1, [pc, #8] @ (800c054 ) + 800c04a: 2050 movs r0, #80 @ 0x50 + 800c04c: f7ff ff10 bl 800be70 +} + 800c050: bf00 nop + 800c052: bd80 pop {r7, pc} + 800c054: 20000b38 .word 0x20000b38 + 800c058: 20000884 .word 0x20000884 + 800c05c: 2000033c .word 0x2000033c + 800c060: 20000914 .word 0x20000914 + 800c064: 2000091c .word 0x2000091c + 800c068: 20000050 .word 0x20000050 + 800c06c: 2000004f .word 0x2000004f + 800c070: 20000908 .word 0x20000908 + 800c074: 20000b30 .word 0x20000b30 + +0800c078 : + +static uint16_t expected_payload_len(uint8_t cmd) { + 800c078: b480 push {r7} + 800c07a: b083 sub sp, #12 + 800c07c: af00 add r7, sp, #0 + 800c07e: 4603 mov r3, r0 + 800c080: 71fb strb r3, [r7, #7] + switch (cmd) { + 800c082: 79fb ldrb r3, [r7, #7] + 800c084: 3b40 subs r3, #64 @ 0x40 + 800c086: 2b09 cmp r3, #9 + 800c088: d82a bhi.n 800c0e0 + 800c08a: a201 add r2, pc, #4 @ (adr r2, 800c090 ) + 800c08c: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800c090: 0800c0b9 .word 0x0800c0b9 + 800c094: 0800c0bd .word 0x0800c0bd + 800c098: 0800c0c1 .word 0x0800c0c1 + 800c09c: 0800c0c5 .word 0x0800c0c5 + 800c0a0: 0800c0c9 .word 0x0800c0c9 + 800c0a4: 0800c0cd .word 0x0800c0cd + 800c0a8: 0800c0d1 .word 0x0800c0d1 + 800c0ac: 0800c0d5 .word 0x0800c0d5 + 800c0b0: 0800c0d9 .word 0x0800c0d9 + 800c0b4: 0800c0dd .word 0x0800c0dd + case CMD_E2M_PWM_DUTY: return sizeof(e2m_pwm_duty_t); + 800c0b8: 2301 movs r3, #1 + 800c0ba: e013 b.n 800c0e4 + case CMD_E2M_ENABLE_OUTPUT: return sizeof(e2m_enable_output_t); + 800c0bc: 2301 movs r3, #1 + 800c0be: e011 b.n 800c0e4 + case CMD_E2M_RESET: return sizeof(e2m_reset_t); + 800c0c0: 2301 movs r3, #1 + 800c0c2: e00f b.n 800c0e4 + case CMD_E2M_ENABLE: return sizeof(e2m_enable_t); + 800c0c4: 2301 movs r3, #1 + 800c0c6: e00d b.n 800c0e4 + case CMD_E2M_REPLUG: return sizeof(e2m_replug_t); + 800c0c8: 2301 movs r3, #1 + 800c0ca: e00b b.n 800c0e4 + case CMD_E2M_SET_OUTPUT_VOLTAGE: return sizeof(e2m_set_output_t); + 800c0cc: 2304 movs r3, #4 + 800c0ce: e009 b.n 800c0e4 + case CMD_E2M_ISOLATION_CONTROL: return sizeof(e2m_isolation_control_t); + 800c0d0: 2301 movs r3, #1 + 800c0d2: e007 b.n 800c0e4 + case CMD_E2M_EV_INFO: return sizeof(CCS_EvInfo_t); + 800c0d4: 232c movs r3, #44 @ 0x2c + 800c0d6: e005 b.n 800c0e4 + case CMD_E2M_EVSE_STATE: return sizeof(CONN_State_t); + 800c0d8: 2301 movs r3, #1 + 800c0da: e003 b.n 800c0e4 + case CMD_E2M_KEEP_ALIVE: return 0; + 800c0dc: 2300 movs r3, #0 + 800c0de: e001 b.n 800c0e4 + default: return 0xFFFFu; + 800c0e0: f64f 73ff movw r3, #65535 @ 0xffff + } +} + 800c0e4: 4618 mov r0, r3 + 800c0e6: 370c adds r7, #12 + 800c0e8: 46bd mov sp, r7 + 800c0ea: bc80 pop {r7} + 800c0ec: 4770 bx lr + 800c0ee: bf00 nop + +0800c0f0 : + +static void apply_command(uint8_t cmd, const uint8_t* payload, uint16_t payload_len) { + 800c0f0: b5f0 push {r4, r5, r6, r7, lr} + 800c0f2: b08b sub sp, #44 @ 0x2c + 800c0f4: af00 add r7, sp, #0 + 800c0f6: 4603 mov r3, r0 + 800c0f8: 6039 str r1, [r7, #0] + 800c0fa: 71fb strb r3, [r7, #7] + 800c0fc: 4613 mov r3, r2 + 800c0fe: 80bb strh r3, [r7, #4] + (void)payload_len; + last_host_seen = HAL_GetTick(); + 800c100: f001 fbea bl 800d8d8 + 800c104: 4603 mov r3, r0 + 800c106: 4a58 ldr r2, [pc, #352] @ (800c268 ) + 800c108: 6013 str r3, [r2, #0] + switch (cmd) { + 800c10a: 79fb ldrb r3, [r7, #7] + 800c10c: 3b40 subs r3, #64 @ 0x40 + 800c10e: 2b09 cmp r3, #9 + 800c110: f200 80a3 bhi.w 800c25a + 800c114: a201 add r2, pc, #4 @ (adr r2, 800c11c ) + 800c116: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800c11a: bf00 nop + 800c11c: 0800c145 .word 0x0800c145 + 800c120: 0800c173 .word 0x0800c173 + 800c124: 0800c18d .word 0x0800c18d + 800c128: 0800c1af .word 0x0800c1af + 800c12c: 0800c243 .word 0x0800c243 + 800c130: 0800c1c9 .word 0x0800c1c9 + 800c134: 0800c1e7 .word 0x0800c1e7 + 800c138: 0800c1f5 .word 0x0800c1f5 + 800c13c: 0800c239 .word 0x0800c239 + 800c140: 0800c24f .word 0x0800c24f + case CMD_E2M_PWM_DUTY: { + const e2m_pwm_duty_t* p = (const e2m_pwm_duty_t*)payload; + 800c144: 683b ldr r3, [r7, #0] + 800c146: 60fb str r3, [r7, #12] + uint8_t duty = p->pwm_duty_percent; + 800c148: 68fb ldr r3, [r7, #12] + 800c14a: 781b ldrb r3, [r3, #0] + 800c14c: f887 3027 strb.w r3, [r7, #39] @ 0x27 + if (duty > 100) duty = 100; + 800c150: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 + 800c154: 2b64 cmp r3, #100 @ 0x64 + 800c156: d902 bls.n 800c15e + 800c158: 2364 movs r3, #100 @ 0x64 + 800c15a: f887 3027 strb.w r3, [r7, #39] @ 0x27 + pwm_duty_percent = duty; + 800c15e: 4a43 ldr r2, [pc, #268] @ (800c26c ) + 800c160: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 + 800c164: 7013 strb r3, [r2, #0] + CP_SetDuty(duty); + 800c166: f897 3027 ldrb.w r3, [r7, #39] @ 0x27 + 800c16a: 4618 mov r0, r3 + 800c16c: f7fd ff86 bl 800a07c + break; + 800c170: e076 b.n 800c260 + } + case CMD_E2M_ENABLE_OUTPUT: { + const e2m_enable_output_t* p = (const e2m_enable_output_t*)payload; + 800c172: 683b ldr r3, [r7, #0] + 800c174: 613b str r3, [r7, #16] + ev_enable_output = (p->enable_output != 0); + 800c176: 693b ldr r3, [r7, #16] + 800c178: 781b ldrb r3, [r3, #0] + 800c17a: 2b00 cmp r3, #0 + 800c17c: bf14 ite ne + 800c17e: 2301 movne r3, #1 + 800c180: 2300 moveq r3, #0 + 800c182: b2db uxtb r3, r3 + 800c184: 461a mov r2, r3 + 800c186: 4b3a ldr r3, [pc, #232] @ (800c270 ) + 800c188: 701a strb r2, [r3, #0] + break; + 800c18a: e069 b.n 800c260 + } + case CMD_E2M_RESET: { + const e2m_reset_t* p = (const e2m_reset_t*)payload; + 800c18c: 683b ldr r3, [r7, #0] + 800c18e: 617b str r3, [r7, #20] + if (p->reset) { + 800c190: 697b ldr r3, [r7, #20] + 800c192: 781b ldrb r3, [r3, #0] + 800c194: 2b00 cmp r3, #0 + 800c196: d062 beq.n 800c25e + log_printf(LOG_WARN, "Everest reset command\n"); + 800c198: 4936 ldr r1, [pc, #216] @ (800c274 ) + 800c19a: 2005 movs r0, #5 + 800c19c: f7fe f92c bl 800a3f8 + CCS_SendResetReason(); + 800c1a0: f7ff fe92 bl 800bec8 + HAL_Delay(10); + 800c1a4: 200a movs r0, #10 + 800c1a6: f001 fba1 bl 800d8ec + NVIC_SystemReset(); + 800c1aa: f7ff fba9 bl 800b900 <__NVIC_SystemReset> + } + break; + } + case CMD_E2M_ENABLE: { + const e2m_enable_t* p = (const e2m_enable_t*)payload; + 800c1ae: 683b ldr r3, [r7, #0] + 800c1b0: 61bb str r3, [r7, #24] + enabled = (p->enable != 0); + 800c1b2: 69bb ldr r3, [r7, #24] + 800c1b4: 781b ldrb r3, [r3, #0] + 800c1b6: 2b00 cmp r3, #0 + 800c1b8: bf14 ite ne + 800c1ba: 2301 movne r3, #1 + 800c1bc: 2300 moveq r3, #0 + 800c1be: b2db uxtb r3, r3 + 800c1c0: 461a mov r2, r3 + 800c1c2: 4b2d ldr r3, [pc, #180] @ (800c278 ) + 800c1c4: 701a strb r2, [r3, #0] + (void)enabled; + break; + 800c1c6: e04b b.n 800c260 + } + case CMD_E2M_SET_OUTPUT_VOLTAGE: { + const e2m_set_output_t* p = (const e2m_set_output_t*)payload; + 800c1c8: 683b ldr r3, [r7, #0] + 800c1ca: 61fb str r3, [r7, #28] + CONN.RequestedVoltage = p->voltage_V; + 800c1cc: 69fb ldr r3, [r7, #28] + 800c1ce: 881b ldrh r3, [r3, #0] + 800c1d0: b29a uxth r2, r3 + 800c1d2: 4b2a ldr r3, [pc, #168] @ (800c27c ) + 800c1d4: f8a3 200f strh.w r2, [r3, #15] + CONN.WantedCurrent = p->current_0p1A; + 800c1d8: 69fb ldr r3, [r7, #28] + 800c1da: 885b ldrh r3, [r3, #2] + 800c1dc: b29a uxth r2, r3 + 800c1de: 4b27 ldr r3, [pc, #156] @ (800c27c ) + 800c1e0: f8a3 201b strh.w r2, [r3, #27] + break; + 800c1e4: e03c b.n 800c260 + } + case CMD_E2M_ISOLATION_CONTROL: { + const e2m_isolation_control_t* p = (const e2m_isolation_control_t*)payload; + 800c1e6: 683b ldr r3, [r7, #0] + 800c1e8: 623b str r3, [r7, #32] + isolation_enable = p->command; + 800c1ea: 6a3b ldr r3, [r7, #32] + 800c1ec: 781a ldrb r2, [r3, #0] + 800c1ee: 4b24 ldr r3, [pc, #144] @ (800c280 ) + 800c1f0: 701a strb r2, [r3, #0] + break; + 800c1f2: e035 b.n 800c260 + } + case CMD_E2M_EV_INFO: { + memcpy(&CCS_EvInfo, payload, sizeof(CCS_EvInfo_t)); + 800c1f4: 4a23 ldr r2, [pc, #140] @ (800c284 ) + 800c1f6: 683b ldr r3, [r7, #0] + 800c1f8: 461c mov r4, r3 + 800c1fa: 4616 mov r6, r2 + 800c1fc: f104 0c20 add.w ip, r4, #32 + 800c200: 4635 mov r5, r6 + 800c202: 4623 mov r3, r4 + 800c204: 6818 ldr r0, [r3, #0] + 800c206: 6859 ldr r1, [r3, #4] + 800c208: 689a ldr r2, [r3, #8] + 800c20a: 68db ldr r3, [r3, #12] + 800c20c: c50f stmia r5!, {r0, r1, r2, r3} + 800c20e: 3410 adds r4, #16 + 800c210: 3610 adds r6, #16 + 800c212: 4564 cmp r4, ip + 800c214: d1f4 bne.n 800c200 + 800c216: 4633 mov r3, r6 + 800c218: 4622 mov r2, r4 + 800c21a: 6810 ldr r0, [r2, #0] + 800c21c: 6851 ldr r1, [r2, #4] + 800c21e: 6892 ldr r2, [r2, #8] + 800c220: c307 stmia r3!, {r0, r1, r2} + CONN.SOC = (uint8_t)(CCS_EvInfo.soc / 10); + 800c222: 4b18 ldr r3, [pc, #96] @ (800c284 ) + 800c224: 885b ldrh r3, [r3, #2] + 800c226: 4a18 ldr r2, [pc, #96] @ (800c288 ) + 800c228: fba2 2303 umull r2, r3, r2, r3 + 800c22c: 08db lsrs r3, r3, #3 + 800c22e: b29b uxth r3, r3 + 800c230: b2da uxtb r2, r3 + 800c232: 4b12 ldr r3, [pc, #72] @ (800c27c ) + 800c234: 709a strb r2, [r3, #2] + break; + 800c236: e013 b.n 800c260 + } + case CMD_E2M_EVSE_STATE: { + CCS_EvseState = (CONN_State_t)payload[0]; + 800c238: 683b ldr r3, [r7, #0] + 800c23a: 781a ldrb r2, [r3, #0] + 800c23c: 4b13 ldr r3, [pc, #76] @ (800c28c ) + 800c23e: 701a strb r2, [r3, #0] + break; + 800c240: e00e b.n 800c260 + } + case CMD_E2M_REPLUG: { + (void)payload; + CP_SetDuty(pwm_duty_percent); + 800c242: 4b0a ldr r3, [pc, #40] @ (800c26c ) + 800c244: 781b ldrb r3, [r3, #0] + 800c246: 4618 mov r0, r3 + 800c248: f7fd ff18 bl 800a07c + break; + 800c24c: e008 b.n 800c260 + } + case CMD_E2M_KEEP_ALIVE: { + last_host_seen = HAL_GetTick(); + 800c24e: f001 fb43 bl 800d8d8 + 800c252: 4603 mov r3, r0 + 800c254: 4a04 ldr r2, [pc, #16] @ (800c268 ) + 800c256: 6013 str r3, [r2, #0] + break; + 800c258: e002 b.n 800c260 + } + default: + break; + 800c25a: bf00 nop + 800c25c: e000 b.n 800c260 + break; + 800c25e: bf00 nop + } +} + 800c260: bf00 nop + 800c262: 372c adds r7, #44 @ 0x2c + 800c264: 46bd mov sp, r7 + 800c266: bdf0 pop {r4, r5, r6, r7, pc} + 800c268: 20000b34 .word 0x20000b34 + 800c26c: 2000004e .word 0x2000004e + 800c270: 20000929 .word 0x20000929 + 800c274: 08015f24 .word 0x08015f24 + 800c278: 20000b2f .word 0x20000b2f + 800c27c: 2000033c .word 0x2000033c + 800c280: 20000b30 .word 0x20000b30 + 800c284: 20000b58 .word 0x20000b58 + 800c288: cccccccd .word 0xcccccccd + 800c28c: 20000b84 .word 0x20000b84 + +0800c290 : + +static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len) { + 800c290: b580 push {r7, lr} + 800c292: b086 sub sp, #24 + 800c294: af00 add r7, sp, #0 + 800c296: 6078 str r0, [r7, #4] + 800c298: 460b mov r3, r1 + 800c29a: 807b strh r3, [r7, #2] + if (packet_len < 3) return 0; + 800c29c: 887b ldrh r3, [r7, #2] + 800c29e: 2b02 cmp r3, #2 + 800c2a0: d801 bhi.n 800c2a6 + 800c2a2: 2300 movs r3, #0 + 800c2a4: e05a b.n 800c35c + + uint8_t cmd = packet[0]; + 800c2a6: 687b ldr r3, [r7, #4] + 800c2a8: 781b ldrb r3, [r3, #0] + 800c2aa: 75fb strb r3, [r7, #23] + uint16_t payload_len = (uint16_t)(packet_len - 3); + 800c2ac: 887b ldrh r3, [r7, #2] + 800c2ae: 3b03 subs r3, #3 + 800c2b0: 82bb strh r3, [r7, #20] + + uint16_t received_crc = (uint16_t)packet[packet_len - 2u] | + 800c2b2: 887b ldrh r3, [r7, #2] + 800c2b4: 3b02 subs r3, #2 + 800c2b6: 687a ldr r2, [r7, #4] + 800c2b8: 4413 add r3, r2 + 800c2ba: 781b ldrb r3, [r3, #0] + 800c2bc: b21a sxth r2, r3 + (uint16_t)packet[packet_len - 1u] << 8; + 800c2be: 887b ldrh r3, [r7, #2] + 800c2c0: 3b01 subs r3, #1 + 800c2c2: 6879 ldr r1, [r7, #4] + 800c2c4: 440b add r3, r1 + 800c2c6: 781b ldrb r3, [r3, #0] + uint16_t received_crc = (uint16_t)packet[packet_len - 2u] | + 800c2c8: b21b sxth r3, r3 + 800c2ca: 021b lsls r3, r3, #8 + 800c2cc: b21b sxth r3, r3 + 800c2ce: 4313 orrs r3, r2 + 800c2d0: b21b sxth r3, r3 + 800c2d2: 827b strh r3, [r7, #18] + + uint16_t calculated_crc = crc16_ibm(packet, (uint16_t)(1 + payload_len)); + 800c2d4: 8abb ldrh r3, [r7, #20] + 800c2d6: 3301 adds r3, #1 + 800c2d8: b29b uxth r3, r3 + 800c2da: 4619 mov r1, r3 + 800c2dc: 6878 ldr r0, [r7, #4] + 800c2de: f7ff fd4b bl 800bd78 + 800c2e2: 4603 mov r3, r0 + 800c2e4: 823b strh r3, [r7, #16] + if (received_crc != calculated_crc) { + 800c2e6: 8a7a ldrh r2, [r7, #18] + 800c2e8: 8a3b ldrh r3, [r7, #16] + 800c2ea: 429a cmp r2, r3 + 800c2ec: d005 beq.n 800c2fa + log_printf(LOG_ERR, "Packet CRC error\n"); + 800c2ee: 491d ldr r1, [pc, #116] @ (800c364 ) + 800c2f0: 2004 movs r0, #4 + 800c2f2: f7fe f881 bl 800a3f8 + return 0; + 800c2f6: 2300 movs r3, #0 + 800c2f8: e030 b.n 800c35c + } + + uint16_t expected_len = expected_payload_len(cmd); + 800c2fa: 7dfb ldrb r3, [r7, #23] + 800c2fc: 4618 mov r0, r3 + 800c2fe: f7ff febb bl 800c078 + 800c302: 4603 mov r3, r0 + 800c304: 81fb strh r3, [r7, #14] + if (expected_len == 0xFFFF) { + 800c306: 89fb ldrh r3, [r7, #14] + 800c308: f64f 72ff movw r2, #65535 @ 0xffff + 800c30c: 4293 cmp r3, r2 + 800c30e: d107 bne.n 800c320 + log_printf(LOG_WARN, "Unknown cmd 0x%02x\n", cmd); + 800c310: 7dfb ldrb r3, [r7, #23] + 800c312: 461a mov r2, r3 + 800c314: 4914 ldr r1, [pc, #80] @ (800c368 ) + 800c316: 2005 movs r0, #5 + 800c318: f7fe f86e bl 800a3f8 + return 0; + 800c31c: 2300 movs r3, #0 + 800c31e: e01d b.n 800c35c + } + if (expected_len != payload_len) { + 800c320: 89fa ldrh r2, [r7, #14] + 800c322: 8abb ldrh r3, [r7, #20] + 800c324: 429a cmp r2, r3 + 800c326: d007 beq.n 800c338 + log_printf(LOG_ERR, "Packet len mismatch cmd=0x%02x\n", cmd); + 800c328: 7dfb ldrb r3, [r7, #23] + 800c32a: 461a mov r2, r3 + 800c32c: 490f ldr r1, [pc, #60] @ (800c36c ) + 800c32e: 2004 movs r0, #4 + 800c330: f7fe f862 bl 800a3f8 + return 0; + 800c334: 2300 movs r3, #0 + 800c336: e011 b.n 800c35c + } + + if (payload_len > 0) { + 800c338: 8abb ldrh r3, [r7, #20] + 800c33a: 2b00 cmp r3, #0 + 800c33c: d007 beq.n 800c34e + apply_command(cmd, &packet[1], payload_len); + 800c33e: 687b ldr r3, [r7, #4] + 800c340: 1c59 adds r1, r3, #1 + 800c342: 8aba ldrh r2, [r7, #20] + 800c344: 7dfb ldrb r3, [r7, #23] + 800c346: 4618 mov r0, r3 + 800c348: f7ff fed2 bl 800c0f0 + 800c34c: e005 b.n 800c35a + } else { + apply_command(cmd, NULL, 0); + 800c34e: 7dfb ldrb r3, [r7, #23] + 800c350: 2200 movs r2, #0 + 800c352: 2100 movs r1, #0 + 800c354: 4618 mov r0, r3 + 800c356: f7ff fecb bl 800c0f0 + } + + return 1; + 800c35a: 2301 movs r3, #1 +} + 800c35c: 4618 mov r0, r3 + 800c35e: 3718 adds r7, #24 + 800c360: 46bd mov sp, r7 + 800c362: bd80 pop {r7, pc} + 800c364: 08015f3c .word 0x08015f3c + 800c368: 08015f50 .word 0x08015f50 + 800c36c: 08015f64 .word 0x08015f64 + +0800c370 : + .fw_version_major = 0, + .fw_version_minor = 0, + .fw_version_patch = 0, +}; + +void ReadVersion(){ + 800c370: b480 push {r7} + 800c372: af00 add r7, sp, #0 + infoPacket.serialNumber = InfoBlock->serialNumber; + 800c374: 4b0e ldr r3, [pc, #56] @ (800c3b0 ) + 800c376: 681b ldr r3, [r3, #0] + 800c378: 681b ldr r3, [r3, #0] + 800c37a: b29a uxth r2, r3 + 800c37c: 4b0d ldr r3, [pc, #52] @ (800c3b4 ) + 800c37e: 801a strh r2, [r3, #0] + infoPacket.boardVersion = InfoBlock->boardVersion; + 800c380: 4b0b ldr r3, [pc, #44] @ (800c3b0 ) + 800c382: 681b ldr r3, [r3, #0] + 800c384: 795a ldrb r2, [r3, #5] + 800c386: 4b0b ldr r3, [pc, #44] @ (800c3b4 ) + 800c388: 709a strb r2, [r3, #2] + infoPacket.stationType = InfoBlock->stationType; + 800c38a: 4b09 ldr r3, [pc, #36] @ (800c3b0 ) + 800c38c: 681b ldr r3, [r3, #0] + 800c38e: 791a ldrb r2, [r3, #4] + 800c390: 4b08 ldr r3, [pc, #32] @ (800c3b4 ) + 800c392: 70da strb r2, [r3, #3] + infoPacket.fw_version_major = FW_VERSION_MAJOR; + 800c394: 4b07 ldr r3, [pc, #28] @ (800c3b4 ) + 800c396: 2201 movs r2, #1 + 800c398: 809a strh r2, [r3, #4] + infoPacket.fw_version_minor = FW_VERSION_MINOR; + 800c39a: 4b06 ldr r3, [pc, #24] @ (800c3b4 ) + 800c39c: 2200 movs r2, #0 + 800c39e: 80da strh r2, [r3, #6] + infoPacket.fw_version_patch = FW_VERSION_PATCH; + 800c3a0: 4b04 ldr r3, [pc, #16] @ (800c3b4 ) + 800c3a2: 2202 movs r2, #2 + 800c3a4: 811a strh r2, [r3, #8] +} + 800c3a6: bf00 nop + 800c3a8: 46bd mov sp, r7 + 800c3aa: bc80 pop {r7} + 800c3ac: 4770 bx lr + 800c3ae: bf00 nop + 800c3b0: 20000000 .word 0x20000000 + 800c3b4: 20001010 .word 0x20001010 + +0800c3b8 : + +// Внешняя функция обработки команд (определена в serial_handler.c) +extern void SC_CommandHandler(ReceivedCommand_t* cmd); + +void SC_Init() { + 800c3b8: b580 push {r7, lr} + 800c3ba: af00 add r7, sp, #0 + // Обнуляем структуру + memset(&serial_control, 0, sizeof(SerialControl_t)); + 800c3bc: f44f 7204 mov.w r2, #528 @ 0x210 + 800c3c0: 2100 movs r1, #0 + 800c3c2: 4805 ldr r0, [pc, #20] @ (800c3d8 ) + 800c3c4: f007 fac4 bl 8013950 + memset(&serial_iso, 0, sizeof(serial_iso)); + 800c3c8: f44f 7204 mov.w r2, #528 @ 0x210 + 800c3cc: 2100 movs r1, #0 + 800c3ce: 4803 ldr r0, [pc, #12] @ (800c3dc ) + 800c3d0: f007 fabe bl 8013950 +} + 800c3d4: bf00 nop + 800c3d6: bd80 pop {r7, pc} + 800c3d8: 20000b94 .word 0x20000b94 + 800c3dc: 20000da4 .word 0x20000da4 + +0800c3e0 : + +void SC_Task() { + 800c3e0: b580 push {r7, lr} + 800c3e2: af00 add r7, sp, #0 + // Запуск приема в режиме прерывания с ожиданием idle + if((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + 800c3e4: 4b2a ldr r3, [pc, #168] @ (800c490 ) + 800c3e6: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 800c3ea: b2db uxtb r3, r3 + 800c3ec: 2b20 cmp r3, #32 + 800c3ee: d10a bne.n 800c406 + 800c3f0: 4b28 ldr r3, [pc, #160] @ (800c494 ) + 800c3f2: f893 3208 ldrb.w r3, [r3, #520] @ 0x208 + 800c3f6: b2db uxtb r3, r3 + 800c3f8: 2b00 cmp r3, #0 + 800c3fa: d104 bne.n 800c406 + 800c3fc: 22ff movs r2, #255 @ 0xff + 800c3fe: 4926 ldr r1, [pc, #152] @ (800c498 ) + 800c400: 4823 ldr r0, [pc, #140] @ (800c490 ) + 800c402: f005 fde3 bl 8011fcc + if((huart5.RxState == HAL_UART_STATE_READY)) HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + 800c406: 4b25 ldr r3, [pc, #148] @ (800c49c ) + 800c408: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 800c40c: b2db uxtb r3, r3 + 800c40e: 2b20 cmp r3, #32 + 800c410: d104 bne.n 800c41c + 800c412: 22ff movs r2, #255 @ 0xff + 800c414: 4922 ldr r1, [pc, #136] @ (800c4a0 ) + 800c416: 4821 ldr r0, [pc, #132] @ (800c49c ) + 800c418: f005 fdd8 bl 8011fcc + + // Проверка таймаута отправки пакета (больше 100 мс) + if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) { + 800c41c: 4b1c ldr r3, [pc, #112] @ (800c490 ) + 800c41e: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800c422: b2db uxtb r3, r3 + 800c424: 2b21 cmp r3, #33 @ 0x21 + 800c426: d119 bne.n 800c45c + 800c428: 4b1a ldr r3, [pc, #104] @ (800c494 ) + 800c42a: f8d3 320c ldr.w r3, [r3, #524] @ 0x20c + 800c42e: 2b00 cmp r3, #0 + 800c430: d014 beq.n 800c45c + if ((HAL_GetTick() - serial_control.tx_tick) > 100) { + 800c432: f001 fa51 bl 800d8d8 + 800c436: 4602 mov r2, r0 + 800c438: 4b16 ldr r3, [pc, #88] @ (800c494 ) + 800c43a: f8d3 320c ldr.w r3, [r3, #524] @ 0x20c + 800c43e: 1ad3 subs r3, r2, r3 + 800c440: 2b64 cmp r3, #100 @ 0x64 + 800c442: d90b bls.n 800c45c + // Таймаут: принудительно сбрасываем передачу + HAL_UART_Abort_IT(&huart2); + 800c444: 4812 ldr r0, [pc, #72] @ (800c490 ) + 800c446: f005 fe1f bl 8012088 + // Выключаем DIR при сбросе передачи + HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); + 800c44a: 2200 movs r2, #0 + 800c44c: 2110 movs r1, #16 + 800c44e: 4815 ldr r0, [pc, #84] @ (800c4a4 ) + 800c450: f003 fa53 bl 800f8fa + serial_control.tx_tick = 0; // Сбрасываем tick + 800c454: 4b0f ldr r3, [pc, #60] @ (800c494 ) + 800c456: 2200 movs r2, #0 + 800c458: f8c3 220c str.w r2, [r3, #524] @ 0x20c + } + } + + // Проверка наличия принятой команды для обработки + if (serial_control.command_ready && (huart2.gState != HAL_UART_STATE_BUSY_TX)) { + 800c45c: 4b0d ldr r3, [pc, #52] @ (800c494 ) + 800c45e: f893 3208 ldrb.w r3, [r3, #520] @ 0x208 + 800c462: b2db uxtb r3, r3 + 800c464: 2b00 cmp r3, #0 + 800c466: d011 beq.n 800c48c + 800c468: 4b09 ldr r3, [pc, #36] @ (800c490 ) + 800c46a: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800c46e: b2db uxtb r3, r3 + 800c470: 2b21 cmp r3, #33 @ 0x21 + 800c472: d00b beq.n 800c48c +// HAL_Delay(2); + SC_CommandHandler(&serial_control.received_command); + 800c474: 480c ldr r0, [pc, #48] @ (800c4a8 ) + 800c476: f000 f9ed bl 800c854 + HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + 800c47a: 22ff movs r2, #255 @ 0xff + 800c47c: 4906 ldr r1, [pc, #24] @ (800c498 ) + 800c47e: 4804 ldr r0, [pc, #16] @ (800c490 ) + 800c480: f005 fda4 bl 8011fcc + serial_control.command_ready = 0; // Сбрасываем флаг + 800c484: 4b03 ldr r3, [pc, #12] @ (800c494 ) + 800c486: 2200 movs r2, #0 + 800c488: f883 2208 strb.w r2, [r3, #520] @ 0x208 + } +} + 800c48c: bf00 nop + 800c48e: bd80 pop {r7, pc} + 800c490: 20001140 .word 0x20001140 + 800c494: 20000b94 .word 0x20000b94 + 800c498: 20000c94 .word 0x20000c94 + 800c49c: 200010b0 .word 0x200010b0 + 800c4a0: 20000ea4 .word 0x20000ea4 + 800c4a4: 40011400 .word 0x40011400 + 800c4a8: 20000d94 .word 0x20000d94 + +0800c4ac : + +void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { + 800c4ac: b580 push {r7, lr} + 800c4ae: b082 sub sp, #8 + 800c4b0: af00 add r7, sp, #0 + 800c4b2: 6078 str r0, [r7, #4] + 800c4b4: 460b mov r3, r1 + 800c4b6: 807b strh r3, [r7, #2] + if (huart->Instance == huart2.Instance) { + 800c4b8: 687b ldr r3, [r7, #4] + 800c4ba: 681a ldr r2, [r3, #0] + 800c4bc: 4b22 ldr r3, [pc, #136] @ (800c548 ) + 800c4be: 681b ldr r3, [r3, #0] + 800c4c0: 429a cmp r2, r3 + 800c4c2: d116 bne.n 800c4f2 + if(!process_received_packet(&serial_control, serial_control.rx_buffer, Size)){ + 800c4c4: 887b ldrh r3, [r7, #2] + 800c4c6: 461a mov r2, r3 + 800c4c8: 4920 ldr r1, [pc, #128] @ (800c54c ) + 800c4ca: 4821 ldr r0, [pc, #132] @ (800c550 ) + 800c4cc: f000 f98e bl 800c7ec + 800c4d0: 4603 mov r3, r0 + 800c4d2: 2b00 cmp r3, #0 + 800c4d4: d104 bne.n 800c4e0 + SC_SendPacket(NULL, 0, RESP_INVALID); + 800c4d6: 2214 movs r2, #20 + 800c4d8: 2100 movs r1, #0 + 800c4da: 2000 movs r0, #0 + 800c4dc: f000 f8fa bl 800c6d4 + } + g_sc_command_source = SC_SOURCE_UART2; + 800c4e0: 4b1c ldr r3, [pc, #112] @ (800c554 ) + 800c4e2: 2200 movs r2, #0 + 800c4e4: 701a strb r2, [r3, #0] + HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + 800c4e6: 22ff movs r2, #255 @ 0xff + 800c4e8: 4918 ldr r1, [pc, #96] @ (800c54c ) + 800c4ea: 4817 ldr r0, [pc, #92] @ (800c548 ) + 800c4ec: f005 fd6e bl 8011fcc + } + HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + } else if (huart->Instance == huart3.Instance) { + CCS_RxEventCallback(huart, Size); + } +} + 800c4f0: e025 b.n 800c53e + } else if (huart->Instance == huart5.Instance) { + 800c4f2: 687b ldr r3, [r7, #4] + 800c4f4: 681a ldr r2, [r3, #0] + 800c4f6: 4b18 ldr r3, [pc, #96] @ (800c558 ) + 800c4f8: 681b ldr r3, [r3, #0] + 800c4fa: 429a cmp r2, r3 + 800c4fc: d114 bne.n 800c528 + if (process_received_packet(&serial_iso, serial_iso.rx_buffer, Size)) { + 800c4fe: 887b ldrh r3, [r7, #2] + 800c500: 461a mov r2, r3 + 800c502: 4916 ldr r1, [pc, #88] @ (800c55c ) + 800c504: 4816 ldr r0, [pc, #88] @ (800c560 ) + 800c506: f000 f971 bl 800c7ec + 800c50a: 4603 mov r3, r0 + 800c50c: 2b00 cmp r3, #0 + 800c50e: d005 beq.n 800c51c + g_sc_command_source = SC_SOURCE_UART5; + 800c510: 4b10 ldr r3, [pc, #64] @ (800c554 ) + 800c512: 2201 movs r2, #1 + 800c514: 701a strb r2, [r3, #0] + SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command); + 800c516: 4813 ldr r0, [pc, #76] @ (800c564 ) + 800c518: f000 f99c bl 800c854 + HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); + 800c51c: 22ff movs r2, #255 @ 0xff + 800c51e: 490f ldr r1, [pc, #60] @ (800c55c ) + 800c520: 480d ldr r0, [pc, #52] @ (800c558 ) + 800c522: f005 fd53 bl 8011fcc +} + 800c526: e00a b.n 800c53e + } else if (huart->Instance == huart3.Instance) { + 800c528: 687b ldr r3, [r7, #4] + 800c52a: 681a ldr r2, [r3, #0] + 800c52c: 4b0e ldr r3, [pc, #56] @ (800c568 ) + 800c52e: 681b ldr r3, [r3, #0] + 800c530: 429a cmp r2, r3 + 800c532: d104 bne.n 800c53e + CCS_RxEventCallback(huart, Size); + 800c534: 887b ldrh r3, [r7, #2] + 800c536: 4619 mov r1, r3 + 800c538: 6878 ldr r0, [r7, #4] + 800c53a: f7ff f9f7 bl 800b92c +} + 800c53e: bf00 nop + 800c540: 3708 adds r7, #8 + 800c542: 46bd mov sp, r7 + 800c544: bd80 pop {r7, pc} + 800c546: bf00 nop + 800c548: 20001140 .word 0x20001140 + 800c54c: 20000c94 .word 0x20000c94 + 800c550: 20000b94 .word 0x20000b94 + 800c554: 20000fb4 .word 0x20000fb4 + 800c558: 200010b0 .word 0x200010b0 + 800c55c: 20000ea4 .word 0x20000ea4 + 800c560: 20000da4 .word 0x20000da4 + 800c564: 20000fa4 .word 0x20000fa4 + 800c568: 20001188 .word 0x20001188 + +0800c56c : + +void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { + 800c56c: b580 push {r7, lr} + 800c56e: b082 sub sp, #8 + 800c570: af00 add r7, sp, #0 + 800c572: 6078 str r0, [r7, #4] + if (huart->Instance == huart2.Instance) { + 800c574: 687b ldr r3, [r7, #4] + 800c576: 681a ldr r2, [r3, #0] + 800c578: 4b08 ldr r3, [pc, #32] @ (800c59c ) + 800c57a: 681b ldr r3, [r3, #0] + 800c57c: 429a cmp r2, r3 + 800c57e: d108 bne.n 800c592 + HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); + 800c580: 2200 movs r2, #0 + 800c582: 2110 movs r1, #16 + 800c584: 4806 ldr r0, [pc, #24] @ (800c5a0 ) + 800c586: f003 f9b8 bl 800f8fa + serial_control.tx_tick = 0; + 800c58a: 4b06 ldr r3, [pc, #24] @ (800c5a4 ) + 800c58c: 2200 movs r2, #0 + 800c58e: f8c3 220c str.w r2, [r3, #524] @ 0x20c + } +} + 800c592: bf00 nop + 800c594: 3708 adds r7, #8 + 800c596: 46bd mov sp, r7 + 800c598: bd80 pop {r7, pc} + 800c59a: bf00 nop + 800c59c: 20001140 .word 0x20001140 + 800c5a0: 40011400 .word 0x40011400 + 800c5a4: 20000b94 .word 0x20000b94 + +0800c5a8 : + +// Приватные функции реализации + +// Полностью программная реализация CRC-32 (полином CRC32_POLYNOMIAL, порядок little-endian) +static uint32_t calculate_crc32(const uint8_t* data, uint16_t length) { + 800c5a8: b480 push {r7} + 800c5aa: b085 sub sp, #20 + 800c5ac: af00 add r7, sp, #0 + 800c5ae: 6078 str r0, [r7, #4] + 800c5b0: 460b mov r3, r1 + 800c5b2: 807b strh r3, [r7, #2] + uint32_t crc = 0xFFFFFFFFu; + 800c5b4: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff + 800c5b8: 60fb str r3, [r7, #12] + + for (uint16_t i = 0; i < length; i++) { + 800c5ba: 2300 movs r3, #0 + 800c5bc: 817b strh r3, [r7, #10] + 800c5be: e021 b.n 800c604 + crc ^= data[i]; + 800c5c0: 897b ldrh r3, [r7, #10] + 800c5c2: 687a ldr r2, [r7, #4] + 800c5c4: 4413 add r3, r2 + 800c5c6: 781b ldrb r3, [r3, #0] + 800c5c8: 461a mov r2, r3 + 800c5ca: 68fb ldr r3, [r7, #12] + 800c5cc: 4053 eors r3, r2 + 800c5ce: 60fb str r3, [r7, #12] + for (uint8_t bit = 0; bit < 8; bit++) { + 800c5d0: 2300 movs r3, #0 + 800c5d2: 727b strb r3, [r7, #9] + 800c5d4: e010 b.n 800c5f8 + if (crc & 0x1u) { + 800c5d6: 68fb ldr r3, [r7, #12] + 800c5d8: f003 0301 and.w r3, r3, #1 + 800c5dc: 2b00 cmp r3, #0 + 800c5de: d005 beq.n 800c5ec + crc = (crc >> 1) ^ CRC32_POLYNOMIAL; + 800c5e0: 68fb ldr r3, [r7, #12] + 800c5e2: 085a lsrs r2, r3, #1 + 800c5e4: 4b0d ldr r3, [pc, #52] @ (800c61c ) + 800c5e6: 4053 eors r3, r2 + 800c5e8: 60fb str r3, [r7, #12] + 800c5ea: e002 b.n 800c5f2 + } else { + crc >>= 1; + 800c5ec: 68fb ldr r3, [r7, #12] + 800c5ee: 085b lsrs r3, r3, #1 + 800c5f0: 60fb str r3, [r7, #12] + for (uint8_t bit = 0; bit < 8; bit++) { + 800c5f2: 7a7b ldrb r3, [r7, #9] + 800c5f4: 3301 adds r3, #1 + 800c5f6: 727b strb r3, [r7, #9] + 800c5f8: 7a7b ldrb r3, [r7, #9] + 800c5fa: 2b07 cmp r3, #7 + 800c5fc: d9eb bls.n 800c5d6 + for (uint16_t i = 0; i < length; i++) { + 800c5fe: 897b ldrh r3, [r7, #10] + 800c600: 3301 adds r3, #1 + 800c602: 817b strh r3, [r7, #10] + 800c604: 897a ldrh r2, [r7, #10] + 800c606: 887b ldrh r3, [r7, #2] + 800c608: 429a cmp r2, r3 + 800c60a: d3d9 bcc.n 800c5c0 + } + } + } + + return crc ^ 0xFFFFFFFFu; + 800c60c: 68fb ldr r3, [r7, #12] + 800c60e: 43db mvns r3, r3 +} + 800c610: 4618 mov r0, r3 + 800c612: 3714 adds r7, #20 + 800c614: 46bd mov sp, r7 + 800c616: bc80 pop {r7} + 800c618: 4770 bx lr + 800c61a: bf00 nop + 800c61c: edb88320 .word 0xedb88320 + +0800c620 : + +static uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code) { + 800c620: b580 push {r7, lr} + 800c622: b088 sub sp, #32 + 800c624: af00 add r7, sp, #0 + 800c626: 60f8 str r0, [r7, #12] + 800c628: 607a str r2, [r7, #4] + 800c62a: 461a mov r2, r3 + 800c62c: 460b mov r3, r1 + 800c62e: 817b strh r3, [r7, #10] + 800c630: 4613 mov r3, r2 + 800c632: 727b strb r3, [r7, #9] + uint16_t out_index = 0; + 800c634: 2300 movs r3, #0 + 800c636: 83fb strh r3, [r7, #30] + + output[out_index++] = response_code; + 800c638: 8bfb ldrh r3, [r7, #30] + 800c63a: 1c5a adds r2, r3, #1 + 800c63c: 83fa strh r2, [r7, #30] + 800c63e: 461a mov r2, r3 + 800c640: 687b ldr r3, [r7, #4] + 800c642: 4413 add r3, r2 + 800c644: 7a7a ldrb r2, [r7, #9] + 800c646: 701a strb r2, [r3, #0] + + if (payload != NULL) { + 800c648: 68fb ldr r3, [r7, #12] + 800c64a: 2b00 cmp r3, #0 + 800c64c: d019 beq.n 800c682 + // Просто копируем полезную нагрузку без какого‑либо экранирования + for (uint16_t i = 0; i < payload_len; i++) { + 800c64e: 2300 movs r3, #0 + 800c650: 83bb strh r3, [r7, #28] + 800c652: e012 b.n 800c67a + output[out_index++] = payload[i]; + 800c654: 8bbb ldrh r3, [r7, #28] + 800c656: 68fa ldr r2, [r7, #12] + 800c658: 441a add r2, r3 + 800c65a: 8bfb ldrh r3, [r7, #30] + 800c65c: 1c59 adds r1, r3, #1 + 800c65e: 83f9 strh r1, [r7, #30] + 800c660: 4619 mov r1, r3 + 800c662: 687b ldr r3, [r7, #4] + 800c664: 440b add r3, r1 + 800c666: 7812 ldrb r2, [r2, #0] + 800c668: 701a strb r2, [r3, #0] + + // Проверка переполнения + if (out_index >= MAX_TX_BUFFER_SIZE - 5) { // 4 байта CRC + END_BYTE + 800c66a: 8bfb ldrh r3, [r7, #30] + 800c66c: 2bfa cmp r3, #250 @ 0xfa + 800c66e: d901 bls.n 800c674 + return 0; + 800c670: 2300 movs r3, #0 + 800c672: e02a b.n 800c6ca + for (uint16_t i = 0; i < payload_len; i++) { + 800c674: 8bbb ldrh r3, [r7, #28] + 800c676: 3301 adds r3, #1 + 800c678: 83bb strh r3, [r7, #28] + 800c67a: 8bba ldrh r2, [r7, #28] + 800c67c: 897b ldrh r3, [r7, #10] + 800c67e: 429a cmp r2, r3 + 800c680: d3e8 bcc.n 800c654 + } + } + } + + // Вычисляем CRC для всего содержимого (код ответа + полезная нагрузка) + uint32_t crc = calculate_crc32(output, out_index); + 800c682: 8bfb ldrh r3, [r7, #30] + 800c684: 4619 mov r1, r3 + 800c686: 6878 ldr r0, [r7, #4] + 800c688: f7ff ff8e bl 800c5a8 + 800c68c: 4603 mov r3, r0 + 800c68e: 613b str r3, [r7, #16] + uint8_t* crc_bytes = (uint8_t*)&crc; + 800c690: f107 0310 add.w r3, r7, #16 + 800c694: 617b str r3, [r7, #20] + + // Добавляем CRC без экранирования + for (int i = 0; i < 4; i++) { + 800c696: 2300 movs r3, #0 + 800c698: 61bb str r3, [r7, #24] + 800c69a: e012 b.n 800c6c2 + output[out_index++] = crc_bytes[i]; + 800c69c: 69bb ldr r3, [r7, #24] + 800c69e: 697a ldr r2, [r7, #20] + 800c6a0: 441a add r2, r3 + 800c6a2: 8bfb ldrh r3, [r7, #30] + 800c6a4: 1c59 adds r1, r3, #1 + 800c6a6: 83f9 strh r1, [r7, #30] + 800c6a8: 4619 mov r1, r3 + 800c6aa: 687b ldr r3, [r7, #4] + 800c6ac: 440b add r3, r1 + 800c6ae: 7812 ldrb r2, [r2, #0] + 800c6b0: 701a strb r2, [r3, #0] + + if (out_index >= MAX_TX_BUFFER_SIZE - 1) { // место для END_BYTE + 800c6b2: 8bfb ldrh r3, [r7, #30] + 800c6b4: 2bfe cmp r3, #254 @ 0xfe + 800c6b6: d901 bls.n 800c6bc + return 0; + 800c6b8: 2300 movs r3, #0 + 800c6ba: e006 b.n 800c6ca + for (int i = 0; i < 4; i++) { + 800c6bc: 69bb ldr r3, [r7, #24] + 800c6be: 3301 adds r3, #1 + 800c6c0: 61bb str r3, [r7, #24] + 800c6c2: 69bb ldr r3, [r7, #24] + 800c6c4: 2b03 cmp r3, #3 + 800c6c6: dde9 ble.n 800c69c + } + } + + return out_index; + 800c6c8: 8bfb ldrh r3, [r7, #30] +} + 800c6ca: 4618 mov r0, r3 + 800c6cc: 3720 adds r7, #32 + 800c6ce: 46bd mov sp, r7 + 800c6d0: bd80 pop {r7, pc} + ... + +0800c6d4 : + +void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_t response_code) { + 800c6d4: b580 push {r7, lr} + 800c6d6: b084 sub sp, #16 + 800c6d8: af00 add r7, sp, #0 + 800c6da: 6078 str r0, [r7, #4] + 800c6dc: 460b mov r3, r1 + 800c6de: 807b strh r3, [r7, #2] + 800c6e0: 4613 mov r3, r2 + 800c6e2: 707b strb r3, [r7, #1] + uint16_t packet_len = encode_packet(payload, payload_len, serial_control.tx_buffer, response_code); + 800c6e4: 787b ldrb r3, [r7, #1] + 800c6e6: 8879 ldrh r1, [r7, #2] + 800c6e8: 4a15 ldr r2, [pc, #84] @ (800c740 ) + 800c6ea: 6878 ldr r0, [r7, #4] + 800c6ec: f7ff ff98 bl 800c620 + 800c6f0: 4603 mov r3, r0 + 800c6f2: 81fb strh r3, [r7, #14] + + if (packet_len > 0) { + 800c6f4: 89fb ldrh r3, [r7, #14] + 800c6f6: 2b00 cmp r3, #0 + 800c6f8: d01e beq.n 800c738 + if (huart2.gState == HAL_UART_STATE_BUSY_TX) { + 800c6fa: 4b12 ldr r3, [pc, #72] @ (800c744 ) + 800c6fc: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800c700: b2db uxtb r3, r3 + 800c702: 2b21 cmp r3, #33 @ 0x21 + 800c704: d107 bne.n 800c716 + HAL_UART_Abort_IT(&huart2); + 800c706: 480f ldr r0, [pc, #60] @ (800c744 ) + 800c708: f005 fcbe bl 8012088 + HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); + 800c70c: 2200 movs r2, #0 + 800c70e: 2110 movs r1, #16 + 800c710: 480d ldr r0, [pc, #52] @ (800c748 ) + 800c712: f003 f8f2 bl 800f8fa + } + + HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_SET); + 800c716: 2201 movs r2, #1 + 800c718: 2110 movs r1, #16 + 800c71a: 480b ldr r0, [pc, #44] @ (800c748 ) + 800c71c: f003 f8ed bl 800f8fa + + HAL_UART_Transmit_IT(&huart2, serial_control.tx_buffer, packet_len); + 800c720: 89fb ldrh r3, [r7, #14] + 800c722: 461a mov r2, r3 + 800c724: 4906 ldr r1, [pc, #24] @ (800c740 ) + 800c726: 4807 ldr r0, [pc, #28] @ (800c744 ) + 800c728: f005 fc1b bl 8011f62 + + serial_control.tx_tick = HAL_GetTick(); + 800c72c: f001 f8d4 bl 800d8d8 + 800c730: 4603 mov r3, r0 + 800c732: 4a03 ldr r2, [pc, #12] @ (800c740 ) + 800c734: f8c2 320c str.w r3, [r2, #524] @ 0x20c + } +} + 800c738: bf00 nop + 800c73a: 3710 adds r7, #16 + 800c73c: 46bd mov sp, r7 + 800c73e: bd80 pop {r7, pc} + 800c740: 20000b94 .word 0x20000b94 + 800c744: 20001140 .word 0x20001140 + 800c748: 40011400 .word 0x40011400 + +0800c74c : + +static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd) { + 800c74c: b580 push {r7, lr} + 800c74e: b088 sub sp, #32 + 800c750: af00 add r7, sp, #0 + 800c752: 60f8 str r0, [r7, #12] + 800c754: 460b mov r3, r1 + 800c756: 607a str r2, [r7, #4] + 800c758: 817b strh r3, [r7, #10] + // }else{ + // test_crc_invalid = 5; + // } + + // Минимальный размер: 1 байт команды + 4 байта CRC + if (packet_len < 5) return 0; + 800c75a: 897b ldrh r3, [r7, #10] + 800c75c: 2b04 cmp r3, #4 + 800c75e: d801 bhi.n 800c764 + 800c760: 2300 movs r3, #0 + 800c762: e03f b.n 800c7e4 + if (packet_len > MAX_RX_BUFFER_SIZE) return 0; + 800c764: 897b ldrh r3, [r7, #10] + 800c766: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 800c76a: d901 bls.n 800c770 + 800c76c: 2300 movs r3, #0 + 800c76e: e039 b.n 800c7e4 + + uint16_t payload_length = packet_len - 4; + 800c770: 897b ldrh r3, [r7, #10] + 800c772: 3b04 subs r3, #4 + 800c774: 83fb strh r3, [r7, #30] + + // Извлекаем принятую CRC (последние 4 байта, little-endian) + uint32_t received_checksum = + ((uint32_t)packet_data[payload_length] << 0) | + 800c776: 8bfb ldrh r3, [r7, #30] + 800c778: 68fa ldr r2, [r7, #12] + 800c77a: 4413 add r3, r2 + 800c77c: 781b ldrb r3, [r3, #0] + 800c77e: 4619 mov r1, r3 + ((uint32_t)packet_data[payload_length + 1] << 8) | + 800c780: 8bfb ldrh r3, [r7, #30] + 800c782: 3301 adds r3, #1 + 800c784: 68fa ldr r2, [r7, #12] + 800c786: 4413 add r3, r2 + 800c788: 781b ldrb r3, [r3, #0] + 800c78a: 021b lsls r3, r3, #8 + ((uint32_t)packet_data[payload_length] << 0) | + 800c78c: ea41 0203 orr.w r2, r1, r3 + ((uint32_t)packet_data[payload_length + 2] << 16) | + 800c790: 8bfb ldrh r3, [r7, #30] + 800c792: 3302 adds r3, #2 + 800c794: 68f9 ldr r1, [r7, #12] + 800c796: 440b add r3, r1 + 800c798: 781b ldrb r3, [r3, #0] + 800c79a: 041b lsls r3, r3, #16 + ((uint32_t)packet_data[payload_length + 1] << 8) | + 800c79c: 431a orrs r2, r3 + ((uint32_t)packet_data[payload_length + 3] << 24); + 800c79e: 8bfb ldrh r3, [r7, #30] + 800c7a0: 3303 adds r3, #3 + 800c7a2: 68f9 ldr r1, [r7, #12] + 800c7a4: 440b add r3, r1 + 800c7a6: 781b ldrb r3, [r3, #0] + 800c7a8: 061b lsls r3, r3, #24 + uint32_t received_checksum = + 800c7aa: 4313 orrs r3, r2 + 800c7ac: 61bb str r3, [r7, #24] + + // Вычисляем CRC для полезной нагрузки + uint32_t calculated_checksum = calculate_crc32(packet_data, payload_length); + 800c7ae: 8bfb ldrh r3, [r7, #30] + 800c7b0: 4619 mov r1, r3 + 800c7b2: 68f8 ldr r0, [r7, #12] + 800c7b4: f7ff fef8 bl 800c5a8 + 800c7b8: 6178 str r0, [r7, #20] + + if (received_checksum != calculated_checksum) return 0; // CRC не совпадает + 800c7ba: 69ba ldr r2, [r7, #24] + 800c7bc: 697b ldr r3, [r7, #20] + 800c7be: 429a cmp r2, r3 + 800c7c0: d001 beq.n 800c7c6 + 800c7c2: 2300 movs r3, #0 + 800c7c4: e00e b.n 800c7e4 + + out_cmd->argument = (void *)&packet_data[1]; + 800c7c6: 68fb ldr r3, [r7, #12] + 800c7c8: 1c5a adds r2, r3, #1 + 800c7ca: 687b ldr r3, [r7, #4] + 800c7cc: 605a str r2, [r3, #4] + out_cmd->command = packet_data[0]; + 800c7ce: 68fb ldr r3, [r7, #12] + 800c7d0: 781a ldrb r2, [r3, #0] + 800c7d2: 687b ldr r3, [r7, #4] + 800c7d4: 701a strb r2, [r3, #0] + out_cmd->argument_length = (uint8_t)(payload_length - 1); + 800c7d6: 8bfb ldrh r3, [r7, #30] + 800c7d8: b2db uxtb r3, r3 + 800c7da: 3b01 subs r3, #1 + 800c7dc: b2da uxtb r2, r3 + 800c7de: 687b ldr r3, [r7, #4] + 800c7e0: 705a strb r2, [r3, #1] + + return 1; + 800c7e2: 2301 movs r3, #1 +} + 800c7e4: 4618 mov r0, r3 + 800c7e6: 3720 adds r7, #32 + 800c7e8: 46bd mov sp, r7 + 800c7ea: bd80 pop {r7, pc} + +0800c7ec : + +static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len) { + 800c7ec: b580 push {r7, lr} + 800c7ee: b084 sub sp, #16 + 800c7f0: af00 add r7, sp, #0 + 800c7f2: 60f8 str r0, [r7, #12] + 800c7f4: 60b9 str r1, [r7, #8] + 800c7f6: 4613 mov r3, r2 + 800c7f8: 80fb strh r3, [r7, #6] + if (!parse_packet(packet_data, packet_len, (ReceivedCommand_t *)&ctx->received_command)) { + 800c7fa: 68fb ldr r3, [r7, #12] + 800c7fc: f503 7200 add.w r2, r3, #512 @ 0x200 + 800c800: 88fb ldrh r3, [r7, #6] + 800c802: 4619 mov r1, r3 + 800c804: 68b8 ldr r0, [r7, #8] + 800c806: f7ff ffa1 bl 800c74c + 800c80a: 4603 mov r3, r0 + 800c80c: 2b00 cmp r3, #0 + 800c80e: d101 bne.n 800c814 + return 0; + 800c810: 2300 movs r3, #0 + 800c812: e004 b.n 800c81e + } + + ctx->command_ready = 1; + 800c814: 68fb ldr r3, [r7, #12] + 800c816: 2201 movs r2, #1 + 800c818: f883 2208 strb.w r2, [r3, #520] @ 0x208 + return 1; + 800c81c: 2301 movs r3, #1 +} + 800c81e: 4618 mov r0, r3 + 800c820: 3710 adds r7, #16 + 800c822: 46bd mov sp, r7 + 800c824: bd80 pop {r7, pc} + ... + +0800c828 <__NVIC_SystemReset>: +{ + 800c828: b480 push {r7} + 800c82a: af00 add r7, sp, #0 + __ASM volatile ("dsb 0xF":::"memory"); + 800c82c: f3bf 8f4f dsb sy +} + 800c830: bf00 nop + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + 800c832: 4b06 ldr r3, [pc, #24] @ (800c84c <__NVIC_SystemReset+0x24>) + 800c834: 68db ldr r3, [r3, #12] + 800c836: f403 62e0 and.w r2, r3, #1792 @ 0x700 + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 800c83a: 4904 ldr r1, [pc, #16] @ (800c84c <__NVIC_SystemReset+0x24>) + 800c83c: 4b04 ldr r3, [pc, #16] @ (800c850 <__NVIC_SystemReset+0x28>) + 800c83e: 4313 orrs r3, r2 + 800c840: 60cb str r3, [r1, #12] + __ASM volatile ("dsb 0xF":::"memory"); + 800c842: f3bf 8f4f dsb sy +} + 800c846: bf00 nop + __NOP(); + 800c848: bf00 nop + 800c84a: e7fd b.n 800c848 <__NVIC_SystemReset+0x20> + 800c84c: e000ed00 .word 0xe000ed00 + 800c850: 05fa0004 .word 0x05fa0004 + +0800c854 : + .chargerNumber = 00001, + .unixTime = 1721651966, +}; + +// Единая функция-обработчик всех команд со switch-case +void SC_CommandHandler(ReceivedCommand_t* cmd) { + 800c854: b580 push {r7, lr} + 800c856: b084 sub sp, #16 + 800c858: af00 add r7, sp, #0 + 800c85a: 6078 str r0, [r7, #4] + + uint8_t response_code = RESP_FAILED; + 800c85c: 2313 movs r3, #19 + 800c85e: 73fb strb r3, [r7, #15] + + switch (cmd->command) { + 800c860: 687b ldr r3, [r7, #4] + 800c862: 781b ldrb r3, [r3, #0] + 800c864: 2bc2 cmp r3, #194 @ 0xc2 + 800c866: f300 80cc bgt.w 800ca02 + 800c86a: 2bb0 cmp r3, #176 @ 0xb0 + 800c86c: da0f bge.n 800c88e + 800c86e: 2b60 cmp r3, #96 @ 0x60 + 800c870: d042 beq.n 800c8f8 + 800c872: 2b60 cmp r3, #96 @ 0x60 + 800c874: f300 80c5 bgt.w 800ca02 + 800c878: 2b50 cmp r3, #80 @ 0x50 + 800c87a: d043 beq.n 800c904 + 800c87c: 2b50 cmp r3, #80 @ 0x50 + 800c87e: f300 80c0 bgt.w 800ca02 + 800c882: 2b01 cmp r3, #1 + 800c884: f000 80a6 beq.w 800c9d4 + 800c888: 2b40 cmp r3, #64 @ 0x40 + 800c88a: d02d beq.n 800c8e8 + 800c88c: e0b9 b.n 800ca02 + 800c88e: 3bb0 subs r3, #176 @ 0xb0 + 800c890: 2b12 cmp r3, #18 + 800c892: f200 80b6 bhi.w 800ca02 + 800c896: a201 add r2, pc, #4 @ (adr r2, 800c89c ) + 800c898: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800c89c: 0800c90b .word 0x0800c90b + 800c8a0: 0800ca03 .word 0x0800ca03 + 800c8a4: 0800ca03 .word 0x0800ca03 + 800c8a8: 0800ca03 .word 0x0800ca03 + 800c8ac: 0800ca03 .word 0x0800ca03 + 800c8b0: 0800c9b3 .word 0x0800c9b3 + 800c8b4: 0800ca03 .word 0x0800ca03 + 800c8b8: 0800ca03 .word 0x0800ca03 + 800c8bc: 0800ca03 .word 0x0800ca03 + 800c8c0: 0800ca03 .word 0x0800ca03 + 800c8c4: 0800ca03 .word 0x0800ca03 + 800c8c8: 0800ca03 .word 0x0800ca03 + 800c8cc: 0800ca03 .word 0x0800ca03 + 800c8d0: 0800ca03 .word 0x0800ca03 + 800c8d4: 0800ca03 .word 0x0800ca03 + 800c8d8: 0800ca03 .word 0x0800ca03 + 800c8dc: 0800c949 .word 0x0800c949 + 800c8e0: 0800c9ad .word 0x0800c9ad + 800c8e4: 0800c981 .word 0x0800c981 + // Команды БЕЗ аргументов + case CMD_GET_STATUS: + // Логика получения информации + monitoring_data_callback(); + 800c8e8: f000 f8b2 bl 800ca50 + + // Отправляем с нормальным приоритетом + SC_SendPacket((uint8_t*)&statusPacket, sizeof(statusPacket), CMD_GET_STATUS); + 800c8ec: 2240 movs r2, #64 @ 0x40 + 800c8ee: 2158 movs r1, #88 @ 0x58 + 800c8f0: 484b ldr r0, [pc, #300] @ (800ca20 ) + 800c8f2: f7ff feef bl 800c6d4 + return; // Специальный ответ уже отправлен + 800c8f6: e08f b.n 800ca18 + + case CMD_GET_INFO: + SC_SendPacket((uint8_t*)&infoPacket, sizeof(infoPacket), CMD_GET_INFO); + 800c8f8: 2260 movs r2, #96 @ 0x60 + 800c8fa: 210a movs r1, #10 + 800c8fc: 4849 ldr r0, [pc, #292] @ (800ca24 ) + 800c8fe: f7ff fee9 bl 800c6d4 + return; + 800c902: e089 b.n 800ca18 + + case CMD_GET_LOG: + debug_buffer_send(); + 800c904: f7fd fd16 bl 800a334 + return; // Ответ формируется внутри debug_buffer_send + 800c908: e086 b.n 800ca18 + + // Команды С аргументами + + case CMD_SET_CONFIG: + if (cmd->argument_length == sizeof(ConfigBlock_t)) { + 800c90a: 687b ldr r3, [r7, #4] + 800c90c: 785b ldrb r3, [r3, #1] + 800c90e: 2b0b cmp r3, #11 + 800c910: d117 bne.n 800c942 + memcpy(&config, cmd->argument, sizeof(ConfigBlock_t)); + 800c912: 687b ldr r3, [r7, #4] + 800c914: 685a ldr r2, [r3, #4] + 800c916: 4b44 ldr r3, [pc, #272] @ (800ca28 ) + 800c918: 6810 ldr r0, [r2, #0] + 800c91a: 6851 ldr r1, [r2, #4] + 800c91c: c303 stmia r3!, {r0, r1} + 800c91e: 8911 ldrh r1, [r2, #8] + 800c920: 7a92 ldrb r2, [r2, #10] + 800c922: 8019 strh r1, [r3, #0] + 800c924: 709a strb r2, [r3, #2] + config_initialized = 1; + 800c926: 4b41 ldr r3, [pc, #260] @ (800ca2c ) + 800c928: 2201 movs r2, #1 + 800c92a: 701a strb r2, [r3, #0] + log_printf(LOG_INFO, "Set Config: %s %d\n", config.location, config.chargerNumber); + 800c92c: 4b3e ldr r3, [pc, #248] @ (800ca28 ) + 800c92e: f8d3 3003 ldr.w r3, [r3, #3] + 800c932: 4a3d ldr r2, [pc, #244] @ (800ca28 ) + 800c934: 493e ldr r1, [pc, #248] @ (800ca30 ) + 800c936: 2007 movs r0, #7 + 800c938: f7fd fd5e bl 800a3f8 + response_code = RESP_SUCCESS; + 800c93c: 2312 movs r3, #18 + 800c93e: 73fb strb r3, [r7, #15] + break; + 800c940: e062 b.n 800ca08 + } + response_code = RESP_FAILED; + 800c942: 2313 movs r3, #19 + 800c944: 73fb strb r3, [r7, #15] + break; + 800c946: e05f b.n 800ca08 + case CMD_SET_POWER_LIMIT: + if (cmd->argument_length == 1) { + 800c948: 687b ldr r3, [r7, #4] + 800c94a: 785b ldrb r3, [r3, #1] + 800c94c: 2b01 cmp r3, #1 + 800c94e: d114 bne.n 800c97a + PSU0.power_limit = ((uint8_t*)cmd->argument)[0] * 1000; + 800c950: 687b ldr r3, [r7, #4] + 800c952: 685b ldr r3, [r3, #4] + 800c954: 781b ldrb r3, [r3, #0] + 800c956: 461a mov r2, r3 + 800c958: f44f 737a mov.w r3, #1000 @ 0x3e8 + 800c95c: fb02 f303 mul.w r3, r2, r3 + 800c960: 461a mov r2, r3 + 800c962: 4b34 ldr r3, [pc, #208] @ (800ca34 ) + 800c964: 615a str r2, [r3, #20] + log_printf(LOG_INFO, "Power limit: %d\n", PSU0.power_limit); + 800c966: 4b33 ldr r3, [pc, #204] @ (800ca34 ) + 800c968: 695b ldr r3, [r3, #20] + 800c96a: 461a mov r2, r3 + 800c96c: 4932 ldr r1, [pc, #200] @ (800ca38 ) + 800c96e: 2007 movs r0, #7 + 800c970: f7fd fd42 bl 800a3f8 + //CONN.connState = (((uint8_t*)cmd->argument)[0])/4; + response_code = RESP_SUCCESS; + 800c974: 2312 movs r3, #18 + 800c976: 73fb strb r3, [r7, #15] + break; + 800c978: e046 b.n 800ca08 + } + response_code = RESP_FAILED; + 800c97a: 2313 movs r3, #19 + 800c97c: 73fb strb r3, [r7, #15] + break; + 800c97e: e043 b.n 800ca08 + case CMD_CHARGE_PERMIT: + if (cmd->argument_length == 1) { + 800c980: 687b ldr r3, [r7, #4] + 800c982: 785b ldrb r3, [r3, #1] + 800c984: 2b01 cmp r3, #1 + 800c986: d10e bne.n 800c9a6 + CONN.connControl = ((uint8_t*)cmd->argument)[0]; + 800c988: 687b ldr r3, [r7, #4] + 800c98a: 685b ldr r3, [r3, #4] + 800c98c: 781a ldrb r2, [r3, #0] + 800c98e: 4b2b ldr r3, [pc, #172] @ (800ca3c ) + 800c990: 701a strb r2, [r3, #0] + log_printf(LOG_INFO, "Charge permit: %d\n", CONN.connControl); + 800c992: 4b2a ldr r3, [pc, #168] @ (800ca3c ) + 800c994: 781b ldrb r3, [r3, #0] + 800c996: 461a mov r2, r3 + 800c998: 4929 ldr r1, [pc, #164] @ (800ca40 ) + 800c99a: 2007 movs r0, #7 + 800c99c: f7fd fd2c bl 800a3f8 + response_code = RESP_SUCCESS; + 800c9a0: 2312 movs r3, #18 + 800c9a2: 73fb strb r3, [r7, #15] + break; + 800c9a4: e030 b.n 800ca08 + } + response_code = RESP_FAILED; + 800c9a6: 2313 movs r3, #19 + 800c9a8: 73fb strb r3, [r7, #15] + break; + 800c9aa: e02d b.n 800ca08 + // memcpy(&PSU_TestMode, cmd->argument, sizeof(PSU_TestMode_t)); + // log_printf(LOG_INFO, "Test PSU: %d %d %d\n", PSU_TestMode.enable, PSU_TestMode.voltage, PSU_TestMode.current); + // response_code = RESP_SUCCESS; + // break; + // } + response_code = RESP_FAILED; + 800c9ac: 2313 movs r3, #19 + 800c9ae: 73fb strb r3, [r7, #15] + break; + 800c9b0: e02a b.n 800ca08 + case CMD_DEVICE_RESET: + // 2. Отправляем SUCCESS (хост может успеть получить его перед ребутом) + SC_SendPacket(NULL, 0, RESP_SUCCESS); + 800c9b2: 2212 movs r2, #18 + 800c9b4: 2100 movs r1, #0 + 800c9b6: 2000 movs r0, #0 + 800c9b8: f7ff fe8c bl 800c6d4 + + while(huart2.gState == HAL_UART_STATE_BUSY_TX); // Ожидание завершения передачи + 800c9bc: bf00 nop + 800c9be: 4b21 ldr r3, [pc, #132] @ (800ca44 ) + 800c9c0: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 800c9c4: b2db uxtb r3, r3 + 800c9c6: 2b21 cmp r3, #33 @ 0x21 + 800c9c8: d0f9 beq.n 800c9be + + HAL_Delay(10); + 800c9ca: 200a movs r0, #10 + 800c9cc: f000 ff8e bl 800d8ec + // 3. Выполняем программный сброс + NVIC_SystemReset(); + 800c9d0: f7ff ff2a bl 800c828 <__NVIC_SystemReset> + return; // Сюда код уже не дойдет, но для компилятора нxужно + + case CMD_ISOLATION_STATUS: + if (cmd->argument_length == sizeof(IsolationStatusPacket_t)) { + 800c9d4: 687b ldr r3, [r7, #4] + 800c9d6: 785b ldrb r3, [r3, #1] + 800c9d8: 2b09 cmp r3, #9 + 800c9da: d10f bne.n 800c9fc + memcpy(&ISO, cmd->argument, sizeof(IsolationStatusPacket_t)); + 800c9dc: 687b ldr r3, [r7, #4] + 800c9de: 685a ldr r2, [r3, #4] + 800c9e0: 4b19 ldr r3, [pc, #100] @ (800ca48 ) + 800c9e2: 6810 ldr r0, [r2, #0] + 800c9e4: 6851 ldr r1, [r2, #4] + 800c9e6: c303 stmia r3!, {r0, r1} + 800c9e8: 7a12 ldrb r2, [r2, #8] + 800c9ea: 701a strb r2, [r3, #0] + // Для однонаправленного UART5 ответ не нужен + if (g_sc_command_source == SC_SOURCE_UART5) { + 800c9ec: 4b17 ldr r3, [pc, #92] @ (800ca4c ) + 800c9ee: 781b ldrb r3, [r3, #0] + 800c9f0: b2db uxtb r3, r3 + 800c9f2: 2b01 cmp r3, #1 + 800c9f4: d00f beq.n 800ca16 + return; + } + response_code = RESP_SUCCESS; + 800c9f6: 2312 movs r3, #18 + 800c9f8: 73fb strb r3, [r7, #15] + break; + 800c9fa: e005 b.n 800ca08 + } + response_code = RESP_FAILED; + 800c9fc: 2313 movs r3, #19 + 800c9fe: 73fb strb r3, [r7, #15] + break; + 800ca00: e002 b.n 800ca08 + + default: + // Неизвестная команда + response_code = RESP_FAILED; + 800ca02: 2313 movs r3, #19 + 800ca04: 73fb strb r3, [r7, #15] + break; + 800ca06: bf00 nop + } + + // Отправляем финальный ответ (для команд без собственного ответа) + SC_SendPacket(NULL, 0, response_code); + 800ca08: 7bfb ldrb r3, [r7, #15] + 800ca0a: 461a mov r2, r3 + 800ca0c: 2100 movs r1, #0 + 800ca0e: 2000 movs r0, #0 + 800ca10: f7ff fe60 bl 800c6d4 + 800ca14: e000 b.n 800ca18 + return; + 800ca16: bf00 nop +} + 800ca18: 3710 adds r7, #16 + 800ca1a: 46bd mov sp, r7 + 800ca1c: bd80 pop {r7, pc} + 800ca1e: bf00 nop + 800ca20: 20000fb8 .word 0x20000fb8 + 800ca24: 20001010 .word 0x20001010 + 800ca28: 20000060 .word 0x20000060 + 800ca2c: 2000101a .word 0x2000101a + 800ca30: 08015f84 .word 0x08015f84 + 800ca34: 20000884 .word 0x20000884 + 800ca38: 08015f98 .word 0x08015f98 + 800ca3c: 2000033c .word 0x2000033c + 800ca40: 08015fac .word 0x08015fac + 800ca44: 20001140 .word 0x20001140 + 800ca48: 20000054 .word 0x20000054 + 800ca4c: 20000fb4 .word 0x20000fb4 + +0800ca50 : + + +// Колбэк для заполнения данных мониторинга +void monitoring_data_callback() { + 800ca50: b580 push {r7, lr} + 800ca52: af00 add r7, sp, #0 + + // Информация о зарядной сессии + statusPacket.SOC = CONN.SOC; + 800ca54: 4b8f ldr r3, [pc, #572] @ (800cc94 ) + 800ca56: 789a ldrb r2, [r3, #2] + 800ca58: 4b8f ldr r3, [pc, #572] @ (800cc98 ) + 800ca5a: 709a strb r2, [r3, #2] + statusPacket.Energy = CONN.Energy; + 800ca5c: 4b8d ldr r3, [pc, #564] @ (800cc94 ) + 800ca5e: f8d3 3007 ldr.w r3, [r3, #7] + 800ca62: 4a8d ldr r2, [pc, #564] @ (800cc98 ) + 800ca64: f8c2 3003 str.w r3, [r2, #3] + statusPacket.RequestedVoltage = CONN.RequestedVoltage; + 800ca68: 4b8a ldr r3, [pc, #552] @ (800cc94 ) + 800ca6a: f8b3 300f ldrh.w r3, [r3, #15] + 800ca6e: b29a uxth r2, r3 + 800ca70: 4b89 ldr r3, [pc, #548] @ (800cc98 ) + 800ca72: f8a3 2007 strh.w r2, [r3, #7] + statusPacket.RequestedCurrent = CONN.WantedCurrent; + 800ca76: 4b87 ldr r3, [pc, #540] @ (800cc94 ) + 800ca78: f8b3 301b ldrh.w r3, [r3, #27] + 800ca7c: b29a uxth r2, r3 + 800ca7e: 4b86 ldr r3, [pc, #536] @ (800cc98 ) + 800ca80: f8a3 2009 strh.w r2, [r3, #9] + statusPacket.MeasuredVoltage = CONN.MeasuredVoltage; + 800ca84: 4b83 ldr r3, [pc, #524] @ (800cc94 ) + 800ca86: f8b3 3013 ldrh.w r3, [r3, #19] + 800ca8a: b29a uxth r2, r3 + 800ca8c: 4b82 ldr r3, [pc, #520] @ (800cc98 ) + 800ca8e: f8a3 200b strh.w r2, [r3, #11] + statusPacket.MeasuredCurrent = CONN.MeasuredCurrent; + 800ca92: 4b80 ldr r3, [pc, #512] @ (800cc94 ) + 800ca94: f8b3 3015 ldrh.w r3, [r3, #21] + 800ca98: b29a uxth r2, r3 + 800ca9a: 4b7f ldr r3, [pc, #508] @ (800cc98 ) + 800ca9c: f8a3 200d strh.w r2, [r3, #13] + statusPacket.outputEnabled = CONN.outputEnabled; + 800caa0: 4b7c ldr r3, [pc, #496] @ (800cc94 ) + 800caa2: 7e1a ldrb r2, [r3, #24] + 800caa4: 4b7c ldr r3, [pc, #496] @ (800cc98 ) + 800caa6: 73da strb r2, [r3, #15] + statusPacket.chargingError = CONN.chargingError; + 800caa8: 4b7a ldr r3, [pc, #488] @ (800cc94 ) + 800caaa: 7f5a ldrb r2, [r3, #29] + 800caac: 4b7a ldr r3, [pc, #488] @ (800cc98 ) + 800caae: 705a strb r2, [r3, #1] + statusPacket.connState = CONN.connState; + 800cab0: 4b78 ldr r3, [pc, #480] @ (800cc94 ) + 800cab2: 785a ldrb r2, [r3, #1] + 800cab4: 4b78 ldr r3, [pc, #480] @ (800cc98 ) + 800cab6: 701a strb r2, [r3, #0] + statusPacket.chargingElapsedTimeMin = 0; + 800cab8: 4b77 ldr r3, [pc, #476] @ (800cc98 ) + 800caba: 2200 movs r2, #0 + 800cabc: 741a strb r2, [r3, #16] + 800cabe: 2200 movs r2, #0 + 800cac0: 745a strb r2, [r3, #17] + statusPacket.chargingElapsedTimeSec = 0; + 800cac2: 4b75 ldr r3, [pc, #468] @ (800cc98 ) + 800cac4: 2200 movs r2, #0 + 800cac6: 749a strb r2, [r3, #18] + statusPacket.estimatedRemainingChargingTime = 0; + 800cac8: 4b73 ldr r3, [pc, #460] @ (800cc98 ) + 800caca: 2200 movs r2, #0 + 800cacc: 74da strb r2, [r3, #19] + 800cace: 2200 movs r2, #0 + 800cad0: 751a strb r2, [r3, #20] + + // состояние зарядной станции + statusPacket.relayAC = RELAY_Read(RELAY_AC); + 800cad2: 2004 movs r0, #4 + 800cad4: f7fc fe2a bl 800972c + 800cad8: 4603 mov r3, r0 + 800cada: f003 0301 and.w r3, r3, #1 + 800cade: b2d9 uxtb r1, r3 + 800cae0: 4a6d ldr r2, [pc, #436] @ (800cc98 ) + 800cae2: 7d53 ldrb r3, [r2, #21] + 800cae4: f361 0300 bfi r3, r1, #0, #1 + 800cae8: 7553 strb r3, [r2, #21] + statusPacket.relayDC = RELAY_Read(RELAY_DC); + 800caea: 2003 movs r0, #3 + 800caec: f7fc fe1e bl 800972c + 800caf0: 4603 mov r3, r0 + 800caf2: f003 0301 and.w r3, r3, #1 + 800caf6: b2d9 uxtb r1, r3 + 800caf8: 4a67 ldr r2, [pc, #412] @ (800cc98 ) + 800cafa: 7d53 ldrb r3, [r2, #21] + 800cafc: f361 0341 bfi r3, r1, #1, #1 + 800cb00: 7553 strb r3, [r2, #21] + statusPacket.relayAUX = RELAY_Read(RELAY_AUX0); + 800cb02: 2000 movs r0, #0 + 800cb04: f7fc fe12 bl 800972c + 800cb08: 4603 mov r3, r0 + 800cb0a: f003 0301 and.w r3, r3, #1 + 800cb0e: b2d9 uxtb r1, r3 + 800cb10: 4a61 ldr r2, [pc, #388] @ (800cc98 ) + 800cb12: 7d53 ldrb r3, [r2, #21] + 800cb14: f361 0382 bfi r3, r1, #2, #1 + 800cb18: 7553 strb r3, [r2, #21] + statusPacket.lockState = 0; + 800cb1a: 4a5f ldr r2, [pc, #380] @ (800cc98 ) + 800cb1c: 7d53 ldrb r3, [r2, #21] + 800cb1e: f023 0308 bic.w r3, r3, #8 + 800cb22: 7553 strb r3, [r2, #21] + statusPacket.stopButton = !IN_ReadInput(IN_ESTOP); + 800cb24: 2003 movs r0, #3 + 800cb26: f7fc fe11 bl 800974c + 800cb2a: 4603 mov r3, r0 + 800cb2c: 2b00 cmp r3, #0 + 800cb2e: bf0c ite eq + 800cb30: 2301 moveq r3, #1 + 800cb32: 2300 movne r3, #0 + 800cb34: b2d9 uxtb r1, r3 + 800cb36: 4a58 ldr r2, [pc, #352] @ (800cc98 ) + 800cb38: 7d53 ldrb r3, [r2, #21] + 800cb3a: f361 1304 bfi r3, r1, #4, #1 + 800cb3e: 7553 strb r3, [r2, #21] + statusPacket.logAvailable = (debug_buffer_available()>0)?1:0; + 800cb40: f7fd fbe4 bl 800a30c + 800cb44: 4603 mov r3, r0 + 800cb46: 2b00 cmp r3, #0 + 800cb48: bf14 ite ne + 800cb4a: 2301 movne r3, #1 + 800cb4c: 2300 moveq r3, #0 + 800cb4e: b2d9 uxtb r1, r3 + 800cb50: 4a51 ldr r2, [pc, #324] @ (800cc98 ) + 800cb52: 7d53 ldrb r3, [r2, #21] + 800cb54: f361 1345 bfi r3, r1, #5, #1 + 800cb58: 7553 strb r3, [r2, #21] + statusPacket.evInfoAvailable = 0; + 800cb5a: 4a4f ldr r2, [pc, #316] @ (800cc98 ) + 800cb5c: 7d53 ldrb r3, [r2, #21] + 800cb5e: f023 0340 bic.w r3, r3, #64 @ 0x40 + 800cb62: 7553 strb r3, [r2, #21] + statusPacket.psuOnline = PSU0.online; + 800cb64: 4b4d ldr r3, [pc, #308] @ (800cc9c ) + 800cb66: 7a1b ldrb r3, [r3, #8] + 800cb68: f003 0301 and.w r3, r3, #1 + 800cb6c: b2d9 uxtb r1, r3 + 800cb6e: 4a4a ldr r2, [pc, #296] @ (800cc98 ) + 800cb70: 7d53 ldrb r3, [r2, #21] + 800cb72: f361 13c7 bfi r3, r1, #7, #1 + 800cb76: 7553 strb r3, [r2, #21] + + statusPacket.tempConnector0 = CONN_ReadTemp(0); // температура коннектора + 800cb78: 2000 movs r0, #0 + 800cb7a: f7fc fedb bl 8009934 + 800cb7e: 4603 mov r3, r0 + 800cb80: b25a sxtb r2, r3 + 800cb82: 4b45 ldr r3, [pc, #276] @ (800cc98 ) + 800cb84: 765a strb r2, [r3, #25] + statusPacket.tempConnector1 = CONN_ReadTemp(1); + 800cb86: 2001 movs r0, #1 + 800cb88: f7fc fed4 bl 8009934 + 800cb8c: 4603 mov r3, r0 + 800cb8e: b25a sxtb r2, r3 + 800cb90: 4b41 ldr r3, [pc, #260] @ (800cc98 ) + 800cb92: 769a strb r2, [r3, #26] + statusPacket.tempAmbient = PSU0.tempAmbient; // температура окружающего воздуха + 800cb94: 4b41 ldr r3, [pc, #260] @ (800cc9c ) + 800cb96: 69db ldr r3, [r3, #28] + 800cb98: b25a sxtb r2, r3 + 800cb9a: 4b3f ldr r3, [pc, #252] @ (800cc98 ) + 800cb9c: 76da strb r2, [r3, #27] + statusPacket.tempBatteryMax = 0; + 800cb9e: 4b3e ldr r3, [pc, #248] @ (800cc98 ) + 800cba0: 2200 movs r2, #0 + 800cba2: 771a strb r2, [r3, #28] + statusPacket.tempBatteryMin = 0; + 800cba4: 4b3c ldr r3, [pc, #240] @ (800cc98 ) + 800cba6: 2200 movs r2, #0 + 800cba8: 775a strb r2, [r3, #29] + + statusPacket.highestVoltageOfBatteryCell = 0; + 800cbaa: 4b3b ldr r3, [pc, #236] @ (800cc98 ) + 800cbac: 2200 movs r2, #0 + 800cbae: 779a strb r2, [r3, #30] + 800cbb0: 2200 movs r2, #0 + 800cbb2: 77da strb r2, [r3, #31] + statusPacket.batteryStatus = 0; + 800cbb4: 4b38 ldr r3, [pc, #224] @ (800cc98 ) + 800cbb6: 2200 movs r2, #0 + 800cbb8: f883 2020 strb.w r2, [r3, #32] + + statusPacket.phaseVoltageAB = PSU_06.VAB; + 800cbbc: 4b38 ldr r3, [pc, #224] @ (800cca0 ) + 800cbbe: 689b ldr r3, [r3, #8] + 800cbc0: b29a uxth r2, r3 + 800cbc2: 4b35 ldr r3, [pc, #212] @ (800cc98 ) + 800cbc4: f8a3 2021 strh.w r2, [r3, #33] @ 0x21 + statusPacket.phaseVoltageBC = PSU_06.VBC; + 800cbc8: 4b35 ldr r3, [pc, #212] @ (800cca0 ) + 800cbca: 68db ldr r3, [r3, #12] + 800cbcc: b29a uxth r2, r3 + 800cbce: 4b32 ldr r3, [pc, #200] @ (800cc98 ) + 800cbd0: f8a3 2023 strh.w r2, [r3, #35] @ 0x23 + statusPacket.phaseVoltageCA = PSU_06.VCA; + 800cbd4: 4b32 ldr r3, [pc, #200] @ (800cca0 ) + 800cbd6: 691b ldr r3, [r3, #16] + 800cbd8: b29a uxth r2, r3 + 800cbda: 4b2f ldr r3, [pc, #188] @ (800cc98 ) + 800cbdc: f8a3 2025 strh.w r2, [r3, #37] @ 0x25 + + // GBT TODO + memset(statusPacket.VIN, 0, sizeof(statusPacket.VIN)); + 800cbe0: 2211 movs r2, #17 + 800cbe2: 2100 movs r1, #0 + 800cbe4: 482f ldr r0, [pc, #188] @ (800cca4 ) + 800cbe6: f006 feb3 bl 8013950 + + // GBT TODO + statusPacket.batteryType = 0; + 800cbea: 4b2b ldr r3, [pc, #172] @ (800cc98 ) + 800cbec: 2200 movs r2, #0 + 800cbee: f883 2038 strb.w r2, [r3, #56] @ 0x38 + statusPacket.batteryCapacity = 0; + 800cbf2: 4b29 ldr r3, [pc, #164] @ (800cc98 ) + 800cbf4: 2200 movs r2, #0 + 800cbf6: f883 2039 strb.w r2, [r3, #57] @ 0x39 + 800cbfa: 2200 movs r2, #0 + 800cbfc: f883 203a strb.w r2, [r3, #58] @ 0x3a + statusPacket.batteryVoltage = 0; + 800cc00: 4b25 ldr r3, [pc, #148] @ (800cc98 ) + 800cc02: 2200 movs r2, #0 + 800cc04: f883 203b strb.w r2, [r3, #59] @ 0x3b + 800cc08: 2200 movs r2, #0 + 800cc0a: f883 203c strb.w r2, [r3, #60] @ 0x3c + memset(statusPacket.batteryVendor, 0, sizeof(statusPacket.batteryVendor)); + 800cc0e: 2204 movs r2, #4 + 800cc10: 2100 movs r1, #0 + 800cc12: 4825 ldr r0, [pc, #148] @ (800cca8 ) + 800cc14: f006 fe9c bl 8013950 + statusPacket.batterySN = 0; + 800cc18: 4b1f ldr r3, [pc, #124] @ (800cc98 ) + 800cc1a: 2200 movs r2, #0 + 800cc1c: f883 2041 strb.w r2, [r3, #65] @ 0x41 + 800cc20: 2200 movs r2, #0 + 800cc22: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 800cc26: 2200 movs r2, #0 + 800cc28: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 800cc2c: 2200 movs r2, #0 + 800cc2e: f883 2044 strb.w r2, [r3, #68] @ 0x44 + statusPacket.batteryManuD = 0; + 800cc32: 4b19 ldr r3, [pc, #100] @ (800cc98 ) + 800cc34: 2200 movs r2, #0 + 800cc36: f883 2047 strb.w r2, [r3, #71] @ 0x47 + statusPacket.batteryManuM = 0; + 800cc3a: 4b17 ldr r3, [pc, #92] @ (800cc98 ) + 800cc3c: 2200 movs r2, #0 + 800cc3e: f883 2046 strb.w r2, [r3, #70] @ 0x46 + statusPacket.batteryManuY = 0; + 800cc42: 4b15 ldr r3, [pc, #84] @ (800cc98 ) + 800cc44: 2200 movs r2, #0 + 800cc46: f883 2045 strb.w r2, [r3, #69] @ 0x45 + statusPacket.batteryCycleCount = 0; + 800cc4a: 4b13 ldr r3, [pc, #76] @ (800cc98 ) + 800cc4c: 2200 movs r2, #0 + 800cc4e: f883 2048 strb.w r2, [r3, #72] @ 0x48 + 800cc52: 2200 movs r2, #0 + 800cc54: f883 2049 strb.w r2, [r3, #73] @ 0x49 + statusPacket.ownAuto = 0; + 800cc58: 4b0f ldr r3, [pc, #60] @ (800cc98 ) + 800cc5a: 2200 movs r2, #0 + 800cc5c: f883 204a strb.w r2, [r3, #74] @ 0x4a + memset(statusPacket.EV_SW_VER, 0, sizeof(statusPacket.EV_SW_VER)); + 800cc60: 2208 movs r2, #8 + 800cc62: 2100 movs r1, #0 + 800cc64: 4811 ldr r0, [pc, #68] @ (800ccac ) + 800cc66: f006 fe73 bl 8013950 + + statusPacket.testMode = 0; + 800cc6a: 4b0b ldr r3, [pc, #44] @ (800cc98 ) + 800cc6c: 2200 movs r2, #0 + 800cc6e: f883 2053 strb.w r2, [r3, #83] @ 0x53 + statusPacket.testVoltage = 0; + 800cc72: 4b09 ldr r3, [pc, #36] @ (800cc98 ) + 800cc74: 2200 movs r2, #0 + 800cc76: f883 2054 strb.w r2, [r3, #84] @ 0x54 + 800cc7a: 2200 movs r2, #0 + 800cc7c: f883 2055 strb.w r2, [r3, #85] @ 0x55 + statusPacket.testCurrent = 0; + 800cc80: 4b05 ldr r3, [pc, #20] @ (800cc98 ) + 800cc82: 2200 movs r2, #0 + 800cc84: f883 2056 strb.w r2, [r3, #86] @ 0x56 + 800cc88: 2200 movs r2, #0 + 800cc8a: f883 2057 strb.w r2, [r3, #87] @ 0x57 + // В debug.c есть CONN_SetState, предполагаем наличие CONN_GetState() + // Если такой функции нет, закомментируйте следующую строку: + // statusPacket.connState = CONN_GetState(); + + +} + 800cc8e: bf00 nop + 800cc90: bd80 pop {r7, pc} + 800cc92: bf00 nop + 800cc94: 2000033c .word 0x2000033c + 800cc98: 20000fb8 .word 0x20000fb8 + 800cc9c: 20000884 .word 0x20000884 + 800cca0: 20000858 .word 0x20000858 + 800cca4: 20000fdf .word 0x20000fdf + 800cca8: 20000ff5 .word 0x20000ff5 + 800ccac: 20001003 .word 0x20001003 + +0800ccb0 : +#include "sma_filter.h" + +void SMAFilter_Init(SMAFilter_t* f) +{ + 800ccb0: b480 push {r7} + 800ccb2: b085 sub sp, #20 + 800ccb4: af00 add r7, sp, #0 + 800ccb6: 6078 str r0, [r7, #4] + if (f == 0) return; + 800ccb8: 687b ldr r3, [r7, #4] + 800ccba: 2b00 cmp r3, #0 + 800ccbc: d018 beq.n 800ccf0 + + f->sum = 0; + 800ccbe: 687b ldr r3, [r7, #4] + 800ccc0: 2200 movs r2, #0 + 800ccc2: 601a str r2, [r3, #0] + f->idx = 0; + 800ccc4: 687b ldr r3, [r7, #4] + 800ccc6: 2200 movs r2, #0 + 800ccc8: 809a strh r2, [r3, #4] + f->count = 0; + 800ccca: 687b ldr r3, [r7, #4] + 800cccc: 2200 movs r2, #0 + 800ccce: 80da strh r2, [r3, #6] + + for (uint16_t i = 0; i < SMA_FILTER_WINDOW; i++) { + 800ccd0: 2300 movs r3, #0 + 800ccd2: 81fb strh r3, [r7, #14] + 800ccd4: e008 b.n 800cce8 + f->buffer[i] = 0; + 800ccd6: 89fa ldrh r2, [r7, #14] + 800ccd8: 687b ldr r3, [r7, #4] + 800ccda: 3202 adds r2, #2 + 800ccdc: 2100 movs r1, #0 + 800ccde: f843 1022 str.w r1, [r3, r2, lsl #2] + for (uint16_t i = 0; i < SMA_FILTER_WINDOW; i++) { + 800cce2: 89fb ldrh r3, [r7, #14] + 800cce4: 3301 adds r3, #1 + 800cce6: 81fb strh r3, [r7, #14] + 800cce8: 89fb ldrh r3, [r7, #14] + 800ccea: 2b07 cmp r3, #7 + 800ccec: d9f3 bls.n 800ccd6 + 800ccee: e000 b.n 800ccf2 + if (f == 0) return; + 800ccf0: bf00 nop + } +} + 800ccf2: 3714 adds r7, #20 + 800ccf4: 46bd mov sp, r7 + 800ccf6: bc80 pop {r7} + 800ccf8: 4770 bx lr + +0800ccfa : + +int32_t SMAFilter_Update(SMAFilter_t* f, int32_t x) +{ + 800ccfa: b480 push {r7} + 800ccfc: b085 sub sp, #20 + 800ccfe: af00 add r7, sp, #0 + 800cd00: 6078 str r0, [r7, #4] + 800cd02: 6039 str r1, [r7, #0] + if (f == 0) return x; + 800cd04: 687b ldr r3, [r7, #4] + 800cd06: 2b00 cmp r3, #0 + 800cd08: d101 bne.n 800cd0e + 800cd0a: 683b ldr r3, [r7, #0] + 800cd0c: e056 b.n 800cdbc + + // Пока окно не заполнено полностью, делим по фактическому count. + if (f->count < SMA_FILTER_WINDOW) { + 800cd0e: 687b ldr r3, [r7, #4] + 800cd10: 88db ldrh r3, [r3, #6] + 800cd12: 2b07 cmp r3, #7 + 800cd14: d827 bhi.n 800cd66 + f->buffer[f->idx] = x; + 800cd16: 687b ldr r3, [r7, #4] + 800cd18: 889b ldrh r3, [r3, #4] + 800cd1a: 461a mov r2, r3 + 800cd1c: 687b ldr r3, [r7, #4] + 800cd1e: 3202 adds r2, #2 + 800cd20: 6839 ldr r1, [r7, #0] + 800cd22: f843 1022 str.w r1, [r3, r2, lsl #2] + f->sum += x; + 800cd26: 687b ldr r3, [r7, #4] + 800cd28: 681a ldr r2, [r3, #0] + 800cd2a: 683b ldr r3, [r7, #0] + 800cd2c: 441a add r2, r3 + 800cd2e: 687b ldr r3, [r7, #4] + 800cd30: 601a str r2, [r3, #0] + f->idx++; + 800cd32: 687b ldr r3, [r7, #4] + 800cd34: 889b ldrh r3, [r3, #4] + 800cd36: 3301 adds r3, #1 + 800cd38: b29a uxth r2, r3 + 800cd3a: 687b ldr r3, [r7, #4] + 800cd3c: 809a strh r2, [r3, #4] + if (f->idx >= SMA_FILTER_WINDOW) f->idx = 0; + 800cd3e: 687b ldr r3, [r7, #4] + 800cd40: 889b ldrh r3, [r3, #4] + 800cd42: 2b07 cmp r3, #7 + 800cd44: d902 bls.n 800cd4c + 800cd46: 687b ldr r3, [r7, #4] + 800cd48: 2200 movs r2, #0 + 800cd4a: 809a strh r2, [r3, #4] + f->count++; + 800cd4c: 687b ldr r3, [r7, #4] + 800cd4e: 88db ldrh r3, [r3, #6] + 800cd50: 3301 adds r3, #1 + 800cd52: b29a uxth r2, r3 + 800cd54: 687b ldr r3, [r7, #4] + 800cd56: 80da strh r2, [r3, #6] + return (int32_t)(f->sum / (int32_t)f->count); + 800cd58: 687b ldr r3, [r7, #4] + 800cd5a: 681b ldr r3, [r3, #0] + 800cd5c: 687a ldr r2, [r7, #4] + 800cd5e: 88d2 ldrh r2, [r2, #6] + 800cd60: fb93 f3f2 sdiv r3, r3, r2 + 800cd64: e02a b.n 800cdbc + } + + // Окно заполнено: "вычитаем старое + добавляем новое". + int32_t old = f->buffer[f->idx]; + 800cd66: 687b ldr r3, [r7, #4] + 800cd68: 889b ldrh r3, [r3, #4] + 800cd6a: 461a mov r2, r3 + 800cd6c: 687b ldr r3, [r7, #4] + 800cd6e: 3202 adds r2, #2 + 800cd70: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 800cd74: 60fb str r3, [r7, #12] + f->buffer[f->idx] = x; + 800cd76: 687b ldr r3, [r7, #4] + 800cd78: 889b ldrh r3, [r3, #4] + 800cd7a: 461a mov r2, r3 + 800cd7c: 687b ldr r3, [r7, #4] + 800cd7e: 3202 adds r2, #2 + 800cd80: 6839 ldr r1, [r7, #0] + 800cd82: f843 1022 str.w r1, [r3, r2, lsl #2] + f->sum += (x - old); + 800cd86: 687b ldr r3, [r7, #4] + 800cd88: 681a ldr r2, [r3, #0] + 800cd8a: 6839 ldr r1, [r7, #0] + 800cd8c: 68fb ldr r3, [r7, #12] + 800cd8e: 1acb subs r3, r1, r3 + 800cd90: 441a add r2, r3 + 800cd92: 687b ldr r3, [r7, #4] + 800cd94: 601a str r2, [r3, #0] + + f->idx++; + 800cd96: 687b ldr r3, [r7, #4] + 800cd98: 889b ldrh r3, [r3, #4] + 800cd9a: 3301 adds r3, #1 + 800cd9c: b29a uxth r2, r3 + 800cd9e: 687b ldr r3, [r7, #4] + 800cda0: 809a strh r2, [r3, #4] + if (f->idx >= SMA_FILTER_WINDOW) f->idx = 0; + 800cda2: 687b ldr r3, [r7, #4] + 800cda4: 889b ldrh r3, [r3, #4] + 800cda6: 2b07 cmp r3, #7 + 800cda8: d902 bls.n 800cdb0 + 800cdaa: 687b ldr r3, [r7, #4] + 800cdac: 2200 movs r2, #0 + 800cdae: 809a strh r2, [r3, #4] + + return (int32_t)(f->sum / (int32_t)SMA_FILTER_WINDOW); + 800cdb0: 687b ldr r3, [r7, #4] + 800cdb2: 681b ldr r3, [r3, #0] + 800cdb4: 2b00 cmp r3, #0 + 800cdb6: da00 bge.n 800cdba + 800cdb8: 3307 adds r3, #7 + 800cdba: 10db asrs r3, r3, #3 +} + 800cdbc: 4618 mov r0, r3 + 800cdbe: 3714 adds r7, #20 + 800cdc0: 46bd mov sp, r7 + 800cdc2: bc80 pop {r7} + 800cdc4: 4770 bx lr + ... + +0800cdc8 : +/* USER CODE END 0 */ +/** + * Initializes the Global MSP. + */ +void HAL_MspInit(void) +{ + 800cdc8: b480 push {r7} + 800cdca: b085 sub sp, #20 + 800cdcc: af00 add r7, sp, #0 + + /* USER CODE BEGIN MspInit 0 */ + + /* USER CODE END MspInit 0 */ + + __HAL_RCC_AFIO_CLK_ENABLE(); + 800cdce: 4b15 ldr r3, [pc, #84] @ (800ce24 ) + 800cdd0: 699b ldr r3, [r3, #24] + 800cdd2: 4a14 ldr r2, [pc, #80] @ (800ce24 ) + 800cdd4: f043 0301 orr.w r3, r3, #1 + 800cdd8: 6193 str r3, [r2, #24] + 800cdda: 4b12 ldr r3, [pc, #72] @ (800ce24 ) + 800cddc: 699b ldr r3, [r3, #24] + 800cdde: f003 0301 and.w r3, r3, #1 + 800cde2: 60bb str r3, [r7, #8] + 800cde4: 68bb ldr r3, [r7, #8] + __HAL_RCC_PWR_CLK_ENABLE(); + 800cde6: 4b0f ldr r3, [pc, #60] @ (800ce24 ) + 800cde8: 69db ldr r3, [r3, #28] + 800cdea: 4a0e ldr r2, [pc, #56] @ (800ce24 ) + 800cdec: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 800cdf0: 61d3 str r3, [r2, #28] + 800cdf2: 4b0c ldr r3, [pc, #48] @ (800ce24 ) + 800cdf4: 69db ldr r3, [r3, #28] + 800cdf6: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800cdfa: 607b str r3, [r7, #4] + 800cdfc: 687b ldr r3, [r7, #4] + + /* System interrupt init*/ + + /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled + */ + __HAL_AFIO_REMAP_SWJ_NOJTAG(); + 800cdfe: 4b0a ldr r3, [pc, #40] @ (800ce28 ) + 800ce00: 685b ldr r3, [r3, #4] + 800ce02: 60fb str r3, [r7, #12] + 800ce04: 68fb ldr r3, [r7, #12] + 800ce06: f023 63e0 bic.w r3, r3, #117440512 @ 0x7000000 + 800ce0a: 60fb str r3, [r7, #12] + 800ce0c: 68fb ldr r3, [r7, #12] + 800ce0e: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 + 800ce12: 60fb str r3, [r7, #12] + 800ce14: 4a04 ldr r2, [pc, #16] @ (800ce28 ) + 800ce16: 68fb ldr r3, [r7, #12] + 800ce18: 6053 str r3, [r2, #4] + + /* USER CODE BEGIN MspInit 1 */ + + /* USER CODE END MspInit 1 */ +} + 800ce1a: bf00 nop + 800ce1c: 3714 adds r7, #20 + 800ce1e: 46bd mov sp, r7 + 800ce20: bc80 pop {r7} + 800ce22: 4770 bx lr + 800ce24: 40021000 .word 0x40021000 + 800ce28: 40010000 .word 0x40010000 + +0800ce2c : +/******************************************************************************/ +/** + * @brief This function handles Non maskable interrupt. + */ +void NMI_Handler(void) +{ + 800ce2c: b480 push {r7} + 800ce2e: 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) + 800ce30: bf00 nop + 800ce32: e7fd b.n 800ce30 + +0800ce34 : + +/** + * @brief This function handles Hard fault interrupt. + */ +void HardFault_Handler(void) +{ + 800ce34: b480 push {r7} + 800ce36: af00 add r7, sp, #0 + /* USER CODE BEGIN HardFault_IRQn 0 */ + + /* USER CODE END HardFault_IRQn 0 */ + while (1) + 800ce38: bf00 nop + 800ce3a: e7fd b.n 800ce38 + +0800ce3c : + +/** + * @brief This function handles Memory management fault. + */ +void MemManage_Handler(void) +{ + 800ce3c: b480 push {r7} + 800ce3e: af00 add r7, sp, #0 + /* USER CODE BEGIN MemoryManagement_IRQn 0 */ + + /* USER CODE END MemoryManagement_IRQn 0 */ + while (1) + 800ce40: bf00 nop + 800ce42: e7fd b.n 800ce40 + +0800ce44 : + +/** + * @brief This function handles Prefetch fault, memory access fault. + */ +void BusFault_Handler(void) +{ + 800ce44: b480 push {r7} + 800ce46: af00 add r7, sp, #0 + /* USER CODE BEGIN BusFault_IRQn 0 */ + + /* USER CODE END BusFault_IRQn 0 */ + while (1) + 800ce48: bf00 nop + 800ce4a: e7fd b.n 800ce48 + +0800ce4c : + +/** + * @brief This function handles Undefined instruction or illegal state. + */ +void UsageFault_Handler(void) +{ + 800ce4c: b480 push {r7} + 800ce4e: af00 add r7, sp, #0 + /* USER CODE BEGIN UsageFault_IRQn 0 */ + + /* USER CODE END UsageFault_IRQn 0 */ + while (1) + 800ce50: bf00 nop + 800ce52: e7fd b.n 800ce50 + +0800ce54 : + +/** + * @brief This function handles System service call via SWI instruction. + */ +void SVC_Handler(void) +{ + 800ce54: b480 push {r7} + 800ce56: af00 add r7, sp, #0 + + /* USER CODE END SVCall_IRQn 0 */ + /* USER CODE BEGIN SVCall_IRQn 1 */ + + /* USER CODE END SVCall_IRQn 1 */ +} + 800ce58: bf00 nop + 800ce5a: 46bd mov sp, r7 + 800ce5c: bc80 pop {r7} + 800ce5e: 4770 bx lr + +0800ce60 : + +/** + * @brief This function handles Debug monitor. + */ +void DebugMon_Handler(void) +{ + 800ce60: b480 push {r7} + 800ce62: af00 add r7, sp, #0 + + /* USER CODE END DebugMonitor_IRQn 0 */ + /* USER CODE BEGIN DebugMonitor_IRQn 1 */ + + /* USER CODE END DebugMonitor_IRQn 1 */ +} + 800ce64: bf00 nop + 800ce66: 46bd mov sp, r7 + 800ce68: bc80 pop {r7} + 800ce6a: 4770 bx lr + +0800ce6c : + +/** + * @brief This function handles Pendable request for system service. + */ +void PendSV_Handler(void) +{ + 800ce6c: b480 push {r7} + 800ce6e: af00 add r7, sp, #0 + + /* USER CODE END PendSV_IRQn 0 */ + /* USER CODE BEGIN PendSV_IRQn 1 */ + + /* USER CODE END PendSV_IRQn 1 */ +} + 800ce70: bf00 nop + 800ce72: 46bd mov sp, r7 + 800ce74: bc80 pop {r7} + 800ce76: 4770 bx lr + +0800ce78 : + +/** + * @brief This function handles System tick timer. + */ +void SysTick_Handler(void) +{ + 800ce78: b580 push {r7, lr} + 800ce7a: af00 add r7, sp, #0 + /* USER CODE BEGIN SysTick_IRQn 0 */ + + /* USER CODE END SysTick_IRQn 0 */ + HAL_IncTick(); + 800ce7c: f000 fd1a bl 800d8b4 + /* USER CODE BEGIN SysTick_IRQn 1 */ + + /* USER CODE END SysTick_IRQn 1 */ +} + 800ce80: bf00 nop + 800ce82: bd80 pop {r7, pc} + +0800ce84 : + +/** + * @brief This function handles CAN1 RX0 interrupt. + */ +void CAN1_RX0_IRQHandler(void) +{ + 800ce84: b580 push {r7, lr} + 800ce86: af00 add r7, sp, #0 + /* USER CODE BEGIN CAN1_RX0_IRQn 0 */ + + /* USER CODE END CAN1_RX0_IRQn 0 */ + HAL_CAN_IRQHandler(&hcan1); + 800ce88: 4802 ldr r0, [pc, #8] @ (800ce94 ) + 800ce8a: f001 ff0b bl 800eca4 + /* USER CODE BEGIN CAN1_RX0_IRQn 1 */ + + /* USER CODE END CAN1_RX0_IRQn 1 */ +} + 800ce8e: bf00 nop + 800ce90: bd80 pop {r7, pc} + 800ce92: bf00 nop + 800ce94: 200002e8 .word 0x200002e8 + +0800ce98 : + +/** + * @brief This function handles TIM3 global interrupt. + */ +void TIM3_IRQHandler(void) +{ + 800ce98: b580 push {r7, lr} + 800ce9a: af00 add r7, sp, #0 + /* USER CODE BEGIN TIM3_IRQn 0 */ + + /* USER CODE END TIM3_IRQn 0 */ + HAL_TIM_IRQHandler(&htim3); + 800ce9c: 4802 ldr r0, [pc, #8] @ (800cea8 ) + 800ce9e: f004 f959 bl 8011154 + /* USER CODE BEGIN TIM3_IRQn 1 */ + + /* USER CODE END TIM3_IRQn 1 */ +} + 800cea2: bf00 nop + 800cea4: bd80 pop {r7, pc} + 800cea6: bf00 nop + 800cea8: 20001020 .word 0x20001020 + +0800ceac : + +/** + * @brief This function handles USART1 global interrupt. + */ +void USART1_IRQHandler(void) +{ + 800ceac: b580 push {r7, lr} + 800ceae: af00 add r7, sp, #0 + /* USER CODE BEGIN USART1_IRQn 0 */ + + /* USER CODE END USART1_IRQn 0 */ + HAL_UART_IRQHandler(&huart1); + 800ceb0: 4802 ldr r0, [pc, #8] @ (800cebc ) + 800ceb2: f005 f9fd bl 80122b0 + /* USER CODE BEGIN USART1_IRQn 1 */ + + /* USER CODE END USART1_IRQn 1 */ +} + 800ceb6: bf00 nop + 800ceb8: bd80 pop {r7, pc} + 800ceba: bf00 nop + 800cebc: 200010f8 .word 0x200010f8 + +0800cec0 : + +/** + * @brief This function handles USART2 global interrupt. + */ +void USART2_IRQHandler(void) +{ + 800cec0: b580 push {r7, lr} + 800cec2: af00 add r7, sp, #0 + /* USER CODE BEGIN USART2_IRQn 0 */ + + /* USER CODE END USART2_IRQn 0 */ + HAL_UART_IRQHandler(&huart2); + 800cec4: 4802 ldr r0, [pc, #8] @ (800ced0 ) + 800cec6: f005 f9f3 bl 80122b0 + /* USER CODE BEGIN USART2_IRQn 1 */ + + /* USER CODE END USART2_IRQn 1 */ +} + 800ceca: bf00 nop + 800cecc: bd80 pop {r7, pc} + 800cece: bf00 nop + 800ced0: 20001140 .word 0x20001140 + +0800ced4 : + +/** + * @brief This function handles USART3 global interrupt. + */ +void USART3_IRQHandler(void) +{ + 800ced4: b580 push {r7, lr} + 800ced6: af00 add r7, sp, #0 + /* USER CODE BEGIN USART3_IRQn 0 */ + + /* USER CODE END USART3_IRQn 0 */ + HAL_UART_IRQHandler(&huart3); + 800ced8: 4802 ldr r0, [pc, #8] @ (800cee4 ) + 800ceda: f005 f9e9 bl 80122b0 + /* USER CODE BEGIN USART3_IRQn 1 */ + + /* USER CODE END USART3_IRQn 1 */ +} + 800cede: bf00 nop + 800cee0: bd80 pop {r7, pc} + 800cee2: bf00 nop + 800cee4: 20001188 .word 0x20001188 + +0800cee8 : + +/** + * @brief This function handles UART5 global interrupt. + */ +void UART5_IRQHandler(void) +{ + 800cee8: b580 push {r7, lr} + 800ceea: af00 add r7, sp, #0 + /* USER CODE BEGIN UART5_IRQn 0 */ + + /* USER CODE END UART5_IRQn 0 */ + HAL_UART_IRQHandler(&huart5); + 800ceec: 4802 ldr r0, [pc, #8] @ (800cef8 ) + 800ceee: f005 f9df bl 80122b0 + /* USER CODE BEGIN UART5_IRQn 1 */ + + /* USER CODE END UART5_IRQn 1 */ +} + 800cef2: bf00 nop + 800cef4: bd80 pop {r7, pc} + 800cef6: bf00 nop + 800cef8: 200010b0 .word 0x200010b0 + +0800cefc : + +/** + * @brief This function handles CAN2 TX interrupt. + */ +void CAN2_TX_IRQHandler(void) +{ + 800cefc: b580 push {r7, lr} + 800cefe: af00 add r7, sp, #0 + /* USER CODE BEGIN CAN2_TX_IRQn 0 */ + + /* USER CODE END CAN2_TX_IRQn 0 */ + HAL_CAN_IRQHandler(&hcan2); + 800cf00: 4802 ldr r0, [pc, #8] @ (800cf0c ) + 800cf02: f001 fecf bl 800eca4 + /* USER CODE BEGIN CAN2_TX_IRQn 1 */ + + /* USER CODE END CAN2_TX_IRQn 1 */ +} + 800cf06: bf00 nop + 800cf08: bd80 pop {r7, pc} + 800cf0a: bf00 nop + 800cf0c: 20000310 .word 0x20000310 + +0800cf10 : + +/** + * @brief This function handles CAN2 RX1 interrupt. + */ +void CAN2_RX1_IRQHandler(void) +{ + 800cf10: b580 push {r7, lr} + 800cf12: af00 add r7, sp, #0 + /* USER CODE BEGIN CAN2_RX1_IRQn 0 */ + + /* USER CODE END CAN2_RX1_IRQn 0 */ + HAL_CAN_IRQHandler(&hcan2); + 800cf14: 4802 ldr r0, [pc, #8] @ (800cf20 ) + 800cf16: f001 fec5 bl 800eca4 + /* USER CODE BEGIN CAN2_RX1_IRQn 1 */ + + /* USER CODE END CAN2_RX1_IRQn 1 */ +} + 800cf1a: bf00 nop + 800cf1c: bd80 pop {r7, pc} + 800cf1e: bf00 nop + 800cf20: 20000310 .word 0x20000310 + +0800cf24 <_getpid>: +void initialise_monitor_handles() +{ +} + +int _getpid(void) +{ + 800cf24: b480 push {r7} + 800cf26: af00 add r7, sp, #0 + return 1; + 800cf28: 2301 movs r3, #1 +} + 800cf2a: 4618 mov r0, r3 + 800cf2c: 46bd mov sp, r7 + 800cf2e: bc80 pop {r7} + 800cf30: 4770 bx lr + +0800cf32 <_kill>: + +int _kill(int pid, int sig) +{ + 800cf32: b580 push {r7, lr} + 800cf34: b082 sub sp, #8 + 800cf36: af00 add r7, sp, #0 + 800cf38: 6078 str r0, [r7, #4] + 800cf3a: 6039 str r1, [r7, #0] + (void)pid; + (void)sig; + errno = EINVAL; + 800cf3c: f006 fd10 bl 8013960 <__errno> + 800cf40: 4603 mov r3, r0 + 800cf42: 2216 movs r2, #22 + 800cf44: 601a str r2, [r3, #0] + return -1; + 800cf46: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff +} + 800cf4a: 4618 mov r0, r3 + 800cf4c: 3708 adds r7, #8 + 800cf4e: 46bd mov sp, r7 + 800cf50: bd80 pop {r7, pc} + +0800cf52 <_exit>: + +void _exit (int status) +{ + 800cf52: b580 push {r7, lr} + 800cf54: b082 sub sp, #8 + 800cf56: af00 add r7, sp, #0 + 800cf58: 6078 str r0, [r7, #4] + _kill(status, -1); + 800cf5a: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 800cf5e: 6878 ldr r0, [r7, #4] + 800cf60: f7ff ffe7 bl 800cf32 <_kill> + while (1) {} /* Make sure we hang here */ + 800cf64: bf00 nop + 800cf66: e7fd b.n 800cf64 <_exit+0x12> + +0800cf68 <_read>: +} + +__attribute__((weak)) int _read(int file, char *ptr, int len) +{ + 800cf68: b580 push {r7, lr} + 800cf6a: b086 sub sp, #24 + 800cf6c: af00 add r7, sp, #0 + 800cf6e: 60f8 str r0, [r7, #12] + 800cf70: 60b9 str r1, [r7, #8] + 800cf72: 607a str r2, [r7, #4] + (void)file; + int DataIdx; + + for (DataIdx = 0; DataIdx < len; DataIdx++) + 800cf74: 2300 movs r3, #0 + 800cf76: 617b str r3, [r7, #20] + 800cf78: e00a b.n 800cf90 <_read+0x28> + { + *ptr++ = __io_getchar(); + 800cf7a: f3af 8000 nop.w + 800cf7e: 4601 mov r1, r0 + 800cf80: 68bb ldr r3, [r7, #8] + 800cf82: 1c5a adds r2, r3, #1 + 800cf84: 60ba str r2, [r7, #8] + 800cf86: b2ca uxtb r2, r1 + 800cf88: 701a strb r2, [r3, #0] + for (DataIdx = 0; DataIdx < len; DataIdx++) + 800cf8a: 697b ldr r3, [r7, #20] + 800cf8c: 3301 adds r3, #1 + 800cf8e: 617b str r3, [r7, #20] + 800cf90: 697a ldr r2, [r7, #20] + 800cf92: 687b ldr r3, [r7, #4] + 800cf94: 429a cmp r2, r3 + 800cf96: dbf0 blt.n 800cf7a <_read+0x12> + } + + return len; + 800cf98: 687b ldr r3, [r7, #4] +} + 800cf9a: 4618 mov r0, r3 + 800cf9c: 3718 adds r7, #24 + 800cf9e: 46bd mov sp, r7 + 800cfa0: bd80 pop {r7, pc} + +0800cfa2 <_close>: + } + return len; +} + +int _close(int file) +{ + 800cfa2: b480 push {r7} + 800cfa4: b083 sub sp, #12 + 800cfa6: af00 add r7, sp, #0 + 800cfa8: 6078 str r0, [r7, #4] + (void)file; + return -1; + 800cfaa: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff +} + 800cfae: 4618 mov r0, r3 + 800cfb0: 370c adds r7, #12 + 800cfb2: 46bd mov sp, r7 + 800cfb4: bc80 pop {r7} + 800cfb6: 4770 bx lr + +0800cfb8 <_fstat>: + + +int _fstat(int file, struct stat *st) +{ + 800cfb8: b480 push {r7} + 800cfba: b083 sub sp, #12 + 800cfbc: af00 add r7, sp, #0 + 800cfbe: 6078 str r0, [r7, #4] + 800cfc0: 6039 str r1, [r7, #0] + (void)file; + st->st_mode = S_IFCHR; + 800cfc2: 683b ldr r3, [r7, #0] + 800cfc4: f44f 5200 mov.w r2, #8192 @ 0x2000 + 800cfc8: 605a str r2, [r3, #4] + return 0; + 800cfca: 2300 movs r3, #0 +} + 800cfcc: 4618 mov r0, r3 + 800cfce: 370c adds r7, #12 + 800cfd0: 46bd mov sp, r7 + 800cfd2: bc80 pop {r7} + 800cfd4: 4770 bx lr + +0800cfd6 <_isatty>: + +int _isatty(int file) +{ + 800cfd6: b480 push {r7} + 800cfd8: b083 sub sp, #12 + 800cfda: af00 add r7, sp, #0 + 800cfdc: 6078 str r0, [r7, #4] + (void)file; + return 1; + 800cfde: 2301 movs r3, #1 +} + 800cfe0: 4618 mov r0, r3 + 800cfe2: 370c adds r7, #12 + 800cfe4: 46bd mov sp, r7 + 800cfe6: bc80 pop {r7} + 800cfe8: 4770 bx lr + +0800cfea <_lseek>: + +int _lseek(int file, int ptr, int dir) +{ + 800cfea: b480 push {r7} + 800cfec: b085 sub sp, #20 + 800cfee: af00 add r7, sp, #0 + 800cff0: 60f8 str r0, [r7, #12] + 800cff2: 60b9 str r1, [r7, #8] + 800cff4: 607a str r2, [r7, #4] + (void)file; + (void)ptr; + (void)dir; + return 0; + 800cff6: 2300 movs r3, #0 +} + 800cff8: 4618 mov r0, r3 + 800cffa: 3714 adds r7, #20 + 800cffc: 46bd mov sp, r7 + 800cffe: bc80 pop {r7} + 800d000: 4770 bx lr + ... + +0800d004 <_sbrk>: + * + * @param incr Memory size + * @return Pointer to allocated memory + */ +void *_sbrk(ptrdiff_t incr) +{ + 800d004: b580 push {r7, lr} + 800d006: b086 sub sp, #24 + 800d008: af00 add r7, sp, #0 + 800d00a: 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; + 800d00c: 4a14 ldr r2, [pc, #80] @ (800d060 <_sbrk+0x5c>) + 800d00e: 4b15 ldr r3, [pc, #84] @ (800d064 <_sbrk+0x60>) + 800d010: 1ad3 subs r3, r2, r3 + 800d012: 617b str r3, [r7, #20] + const uint8_t *max_heap = (uint8_t *)stack_limit; + 800d014: 697b ldr r3, [r7, #20] + 800d016: 613b str r3, [r7, #16] + uint8_t *prev_heap_end; + + /* Initialize heap end at first call */ + if (NULL == __sbrk_heap_end) + 800d018: 4b13 ldr r3, [pc, #76] @ (800d068 <_sbrk+0x64>) + 800d01a: 681b ldr r3, [r3, #0] + 800d01c: 2b00 cmp r3, #0 + 800d01e: d102 bne.n 800d026 <_sbrk+0x22> + { + __sbrk_heap_end = &_end; + 800d020: 4b11 ldr r3, [pc, #68] @ (800d068 <_sbrk+0x64>) + 800d022: 4a12 ldr r2, [pc, #72] @ (800d06c <_sbrk+0x68>) + 800d024: 601a str r2, [r3, #0] + } + + /* Protect heap from growing into the reserved MSP stack */ + if (__sbrk_heap_end + incr > max_heap) + 800d026: 4b10 ldr r3, [pc, #64] @ (800d068 <_sbrk+0x64>) + 800d028: 681a ldr r2, [r3, #0] + 800d02a: 687b ldr r3, [r7, #4] + 800d02c: 4413 add r3, r2 + 800d02e: 693a ldr r2, [r7, #16] + 800d030: 429a cmp r2, r3 + 800d032: d207 bcs.n 800d044 <_sbrk+0x40> + { + errno = ENOMEM; + 800d034: f006 fc94 bl 8013960 <__errno> + 800d038: 4603 mov r3, r0 + 800d03a: 220c movs r2, #12 + 800d03c: 601a str r2, [r3, #0] + return (void *)-1; + 800d03e: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff + 800d042: e009 b.n 800d058 <_sbrk+0x54> + } + + prev_heap_end = __sbrk_heap_end; + 800d044: 4b08 ldr r3, [pc, #32] @ (800d068 <_sbrk+0x64>) + 800d046: 681b ldr r3, [r3, #0] + 800d048: 60fb str r3, [r7, #12] + __sbrk_heap_end += incr; + 800d04a: 4b07 ldr r3, [pc, #28] @ (800d068 <_sbrk+0x64>) + 800d04c: 681a ldr r2, [r3, #0] + 800d04e: 687b ldr r3, [r7, #4] + 800d050: 4413 add r3, r2 + 800d052: 4a05 ldr r2, [pc, #20] @ (800d068 <_sbrk+0x64>) + 800d054: 6013 str r3, [r2, #0] + + return (void *)prev_heap_end; + 800d056: 68fb ldr r3, [r7, #12] +} + 800d058: 4618 mov r0, r3 + 800d05a: 3718 adds r7, #24 + 800d05c: 46bd mov sp, r7 + 800d05e: bd80 pop {r7, pc} + 800d060: 20010000 .word 0x20010000 + 800d064: 00000400 .word 0x00000400 + 800d068: 2000101c .word 0x2000101c + 800d06c: 20001320 .word 0x20001320 + +0800d070 : + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit (void) +{ + 800d070: b480 push {r7} + 800d072: 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 */ +} + 800d074: bf00 nop + 800d076: 46bd mov sp, r7 + 800d078: bc80 pop {r7} + 800d07a: 4770 bx lr + +0800d07c : +TIM_HandleTypeDef htim3; +TIM_HandleTypeDef htim4; + +/* TIM3 init function */ +void MX_TIM3_Init(void) +{ + 800d07c: b580 push {r7, lr} + 800d07e: b08e sub sp, #56 @ 0x38 + 800d080: af00 add r7, sp, #0 + + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 800d082: f107 0328 add.w r3, r7, #40 @ 0x28 + 800d086: 2200 movs r2, #0 + 800d088: 601a str r2, [r3, #0] + 800d08a: 605a str r2, [r3, #4] + 800d08c: 609a str r2, [r3, #8] + 800d08e: 60da str r2, [r3, #12] + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 800d090: f107 0320 add.w r3, r7, #32 + 800d094: 2200 movs r2, #0 + 800d096: 601a str r2, [r3, #0] + 800d098: 605a str r2, [r3, #4] + TIM_OC_InitTypeDef sConfigOC = {0}; + 800d09a: 1d3b adds r3, r7, #4 + 800d09c: 2200 movs r2, #0 + 800d09e: 601a str r2, [r3, #0] + 800d0a0: 605a str r2, [r3, #4] + 800d0a2: 609a str r2, [r3, #8] + 800d0a4: 60da str r2, [r3, #12] + 800d0a6: 611a str r2, [r3, #16] + 800d0a8: 615a str r2, [r3, #20] + 800d0aa: 619a str r2, [r3, #24] + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + 800d0ac: 4b38 ldr r3, [pc, #224] @ (800d190 ) + 800d0ae: 4a39 ldr r2, [pc, #228] @ (800d194 ) + 800d0b0: 601a str r2, [r3, #0] + htim3.Init.Prescaler = 0; + 800d0b2: 4b37 ldr r3, [pc, #220] @ (800d190 ) + 800d0b4: 2200 movs r2, #0 + 800d0b6: 605a str r2, [r3, #4] + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + 800d0b8: 4b35 ldr r3, [pc, #212] @ (800d190 ) + 800d0ba: 2200 movs r2, #0 + 800d0bc: 609a str r2, [r3, #8] + htim3.Init.Period = 65535; + 800d0be: 4b34 ldr r3, [pc, #208] @ (800d190 ) + 800d0c0: f64f 72ff movw r2, #65535 @ 0xffff + 800d0c4: 60da str r2, [r3, #12] + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 800d0c6: 4b32 ldr r3, [pc, #200] @ (800d190 ) + 800d0c8: 2200 movs r2, #0 + 800d0ca: 611a str r2, [r3, #16] + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 800d0cc: 4b30 ldr r3, [pc, #192] @ (800d190 ) + 800d0ce: 2200 movs r2, #0 + 800d0d0: 619a str r2, [r3, #24] + if (HAL_TIM_Base_Init(&htim3) != HAL_OK) + 800d0d2: 482f ldr r0, [pc, #188] @ (800d190 ) + 800d0d4: f003 fd9f bl 8010c16 + 800d0d8: 4603 mov r3, r0 + 800d0da: 2b00 cmp r3, #0 + 800d0dc: d001 beq.n 800d0e2 + { + Error_Handler(); + 800d0de: f7fd fc4b bl 800a978 + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 800d0e2: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800d0e6: 62bb str r3, [r7, #40] @ 0x28 + if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) + 800d0e8: f107 0328 add.w r3, r7, #40 @ 0x28 + 800d0ec: 4619 mov r1, r3 + 800d0ee: 4828 ldr r0, [pc, #160] @ (800d190 ) + 800d0f0: f004 fa3e bl 8011570 + 800d0f4: 4603 mov r3, r0 + 800d0f6: 2b00 cmp r3, #0 + 800d0f8: d001 beq.n 800d0fe + { + Error_Handler(); + 800d0fa: f7fd fc3d bl 800a978 + } + if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) + 800d0fe: 4824 ldr r0, [pc, #144] @ (800d190 ) + 800d100: f003 ff26 bl 8010f50 + 800d104: 4603 mov r3, r0 + 800d106: 2b00 cmp r3, #0 + 800d108: d001 beq.n 800d10e + { + Error_Handler(); + 800d10a: f7fd fc35 bl 800a978 + } + if (HAL_TIM_OC_Init(&htim3) != HAL_OK) + 800d10e: 4820 ldr r0, [pc, #128] @ (800d190 ) + 800d110: f003 fdd0 bl 8010cb4 + 800d114: 4603 mov r3, r0 + 800d116: 2b00 cmp r3, #0 + 800d118: d001 beq.n 800d11e + { + Error_Handler(); + 800d11a: f7fd fc2d bl 800a978 + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 800d11e: 2300 movs r3, #0 + 800d120: 623b str r3, [r7, #32] + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 800d122: 2300 movs r3, #0 + 800d124: 627b str r3, [r7, #36] @ 0x24 + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) + 800d126: f107 0320 add.w r3, r7, #32 + 800d12a: 4619 mov r1, r3 + 800d12c: 4818 ldr r0, [pc, #96] @ (800d190 ) + 800d12e: f004 fdc5 bl 8011cbc + 800d132: 4603 mov r3, r0 + 800d134: 2b00 cmp r3, #0 + 800d136: d001 beq.n 800d13c + { + Error_Handler(); + 800d138: f7fd fc1e bl 800a978 + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + 800d13c: 2360 movs r3, #96 @ 0x60 + 800d13e: 607b str r3, [r7, #4] + sConfigOC.Pulse = 0; + 800d140: 2300 movs r3, #0 + 800d142: 60bb str r3, [r7, #8] + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 800d144: 2300 movs r3, #0 + 800d146: 60fb str r3, [r7, #12] + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 800d148: 2300 movs r3, #0 + 800d14a: 617b str r3, [r7, #20] + if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + 800d14c: 1d3b adds r3, r7, #4 + 800d14e: 2204 movs r2, #4 + 800d150: 4619 mov r1, r3 + 800d152: 480f ldr r0, [pc, #60] @ (800d190 ) + 800d154: f004 f94a bl 80113ec + 800d158: 4603 mov r3, r0 + 800d15a: 2b00 cmp r3, #0 + 800d15c: d001 beq.n 800d162 + { + Error_Handler(); + 800d15e: f7fd fc0b bl 800a978 + } + sConfigOC.OCMode = TIM_OCMODE_TIMING; + 800d162: 2300 movs r3, #0 + 800d164: 607b str r3, [r7, #4] + sConfigOC.Pulse = 1; + 800d166: 2301 movs r3, #1 + 800d168: 60bb str r3, [r7, #8] + if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + 800d16a: 1d3b adds r3, r7, #4 + 800d16c: 2200 movs r2, #0 + 800d16e: 4619 mov r1, r3 + 800d170: 4807 ldr r0, [pc, #28] @ (800d190 ) + 800d172: f004 f8df bl 8011334 + 800d176: 4603 mov r3, r0 + 800d178: 2b00 cmp r3, #0 + 800d17a: d001 beq.n 800d180 + { + Error_Handler(); + 800d17c: f7fd fbfc bl 800a978 + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + HAL_TIM_MspPostInit(&htim3); + 800d180: 4803 ldr r0, [pc, #12] @ (800d190 ) + 800d182: f000 f8cf bl 800d324 + +} + 800d186: bf00 nop + 800d188: 3738 adds r7, #56 @ 0x38 + 800d18a: 46bd mov sp, r7 + 800d18c: bd80 pop {r7, pc} + 800d18e: bf00 nop + 800d190: 20001020 .word 0x20001020 + 800d194: 40000400 .word 0x40000400 + +0800d198 : +/* TIM4 init function */ +void MX_TIM4_Init(void) +{ + 800d198: b580 push {r7, lr} + 800d19a: b08e sub sp, #56 @ 0x38 + 800d19c: af00 add r7, sp, #0 + + /* USER CODE BEGIN TIM4_Init 0 */ + + /* USER CODE END TIM4_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + 800d19e: f107 0328 add.w r3, r7, #40 @ 0x28 + 800d1a2: 2200 movs r2, #0 + 800d1a4: 601a str r2, [r3, #0] + 800d1a6: 605a str r2, [r3, #4] + 800d1a8: 609a str r2, [r3, #8] + 800d1aa: 60da str r2, [r3, #12] + TIM_MasterConfigTypeDef sMasterConfig = {0}; + 800d1ac: f107 0320 add.w r3, r7, #32 + 800d1b0: 2200 movs r2, #0 + 800d1b2: 601a str r2, [r3, #0] + 800d1b4: 605a str r2, [r3, #4] + TIM_OC_InitTypeDef sConfigOC = {0}; + 800d1b6: 1d3b adds r3, r7, #4 + 800d1b8: 2200 movs r2, #0 + 800d1ba: 601a str r2, [r3, #0] + 800d1bc: 605a str r2, [r3, #4] + 800d1be: 609a str r2, [r3, #8] + 800d1c0: 60da str r2, [r3, #12] + 800d1c2: 611a str r2, [r3, #16] + 800d1c4: 615a str r2, [r3, #20] + 800d1c6: 619a str r2, [r3, #24] + + /* USER CODE BEGIN TIM4_Init 1 */ + + /* USER CODE END TIM4_Init 1 */ + htim4.Instance = TIM4; + 800d1c8: 4b37 ldr r3, [pc, #220] @ (800d2a8 ) + 800d1ca: 4a38 ldr r2, [pc, #224] @ (800d2ac ) + 800d1cc: 601a str r2, [r3, #0] + htim4.Init.Prescaler = 720; + 800d1ce: 4b36 ldr r3, [pc, #216] @ (800d2a8 ) + 800d1d0: f44f 7234 mov.w r2, #720 @ 0x2d0 + 800d1d4: 605a str r2, [r3, #4] + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + 800d1d6: 4b34 ldr r3, [pc, #208] @ (800d2a8 ) + 800d1d8: 2200 movs r2, #0 + 800d1da: 609a str r2, [r3, #8] + htim4.Init.Period = 100; + 800d1dc: 4b32 ldr r3, [pc, #200] @ (800d2a8 ) + 800d1de: 2264 movs r2, #100 @ 0x64 + 800d1e0: 60da str r2, [r3, #12] + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + 800d1e2: 4b31 ldr r3, [pc, #196] @ (800d2a8 ) + 800d1e4: 2200 movs r2, #0 + 800d1e6: 611a str r2, [r3, #16] + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + 800d1e8: 4b2f ldr r3, [pc, #188] @ (800d2a8 ) + 800d1ea: 2200 movs r2, #0 + 800d1ec: 619a str r2, [r3, #24] + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + 800d1ee: 482e ldr r0, [pc, #184] @ (800d2a8 ) + 800d1f0: f003 fd11 bl 8010c16 + 800d1f4: 4603 mov r3, r0 + 800d1f6: 2b00 cmp r3, #0 + 800d1f8: d001 beq.n 800d1fe + { + Error_Handler(); + 800d1fa: f7fd fbbd bl 800a978 + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + 800d1fe: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800d202: 62bb str r3, [r7, #40] @ 0x28 + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + 800d204: f107 0328 add.w r3, r7, #40 @ 0x28 + 800d208: 4619 mov r1, r3 + 800d20a: 4827 ldr r0, [pc, #156] @ (800d2a8 ) + 800d20c: f004 f9b0 bl 8011570 + 800d210: 4603 mov r3, r0 + 800d212: 2b00 cmp r3, #0 + 800d214: d001 beq.n 800d21a + { + Error_Handler(); + 800d216: f7fd fbaf bl 800a978 + } + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + 800d21a: 4823 ldr r0, [pc, #140] @ (800d2a8 ) + 800d21c: f003 fe98 bl 8010f50 + 800d220: 4603 mov r3, r0 + 800d222: 2b00 cmp r3, #0 + 800d224: d001 beq.n 800d22a + { + Error_Handler(); + 800d226: f7fd fba7 bl 800a978 + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + 800d22a: 2300 movs r3, #0 + 800d22c: 623b str r3, [r7, #32] + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + 800d22e: 2300 movs r3, #0 + 800d230: 627b str r3, [r7, #36] @ 0x24 + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + 800d232: f107 0320 add.w r3, r7, #32 + 800d236: 4619 mov r1, r3 + 800d238: 481b ldr r0, [pc, #108] @ (800d2a8 ) + 800d23a: f004 fd3f bl 8011cbc + 800d23e: 4603 mov r3, r0 + 800d240: 2b00 cmp r3, #0 + 800d242: d001 beq.n 800d248 + { + Error_Handler(); + 800d244: f7fd fb98 bl 800a978 + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + 800d248: 2360 movs r3, #96 @ 0x60 + 800d24a: 607b str r3, [r7, #4] + sConfigOC.Pulse = 0; + 800d24c: 2300 movs r3, #0 + 800d24e: 60bb str r3, [r7, #8] + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + 800d250: 2300 movs r3, #0 + 800d252: 60fb str r3, [r7, #12] + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + 800d254: 2300 movs r3, #0 + 800d256: 617b str r3, [r7, #20] + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + 800d258: 1d3b adds r3, r7, #4 + 800d25a: 2204 movs r2, #4 + 800d25c: 4619 mov r1, r3 + 800d25e: 4812 ldr r0, [pc, #72] @ (800d2a8 ) + 800d260: f004 f8c4 bl 80113ec + 800d264: 4603 mov r3, r0 + 800d266: 2b00 cmp r3, #0 + 800d268: d001 beq.n 800d26e + { + Error_Handler(); + 800d26a: f7fd fb85 bl 800a978 + } + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + 800d26e: 1d3b adds r3, r7, #4 + 800d270: 2208 movs r2, #8 + 800d272: 4619 mov r1, r3 + 800d274: 480c ldr r0, [pc, #48] @ (800d2a8 ) + 800d276: f004 f8b9 bl 80113ec + 800d27a: 4603 mov r3, r0 + 800d27c: 2b00 cmp r3, #0 + 800d27e: d001 beq.n 800d284 + { + Error_Handler(); + 800d280: f7fd fb7a bl 800a978 + } + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + 800d284: 1d3b adds r3, r7, #4 + 800d286: 220c movs r2, #12 + 800d288: 4619 mov r1, r3 + 800d28a: 4807 ldr r0, [pc, #28] @ (800d2a8 ) + 800d28c: f004 f8ae bl 80113ec + 800d290: 4603 mov r3, r0 + 800d292: 2b00 cmp r3, #0 + 800d294: d001 beq.n 800d29a + { + Error_Handler(); + 800d296: f7fd fb6f bl 800a978 + } + /* USER CODE BEGIN TIM4_Init 2 */ + + /* USER CODE END TIM4_Init 2 */ + HAL_TIM_MspPostInit(&htim4); + 800d29a: 4803 ldr r0, [pc, #12] @ (800d2a8 ) + 800d29c: f000 f842 bl 800d324 + +} + 800d2a0: bf00 nop + 800d2a2: 3738 adds r7, #56 @ 0x38 + 800d2a4: 46bd mov sp, r7 + 800d2a6: bd80 pop {r7, pc} + 800d2a8: 20001068 .word 0x20001068 + 800d2ac: 40000800 .word 0x40000800 + +0800d2b0 : + +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) +{ + 800d2b0: b580 push {r7, lr} + 800d2b2: b084 sub sp, #16 + 800d2b4: af00 add r7, sp, #0 + 800d2b6: 6078 str r0, [r7, #4] + + if(tim_baseHandle->Instance==TIM3) + 800d2b8: 687b ldr r3, [r7, #4] + 800d2ba: 681b ldr r3, [r3, #0] + 800d2bc: 4a16 ldr r2, [pc, #88] @ (800d318 ) + 800d2be: 4293 cmp r3, r2 + 800d2c0: d114 bne.n 800d2ec + { + /* USER CODE BEGIN TIM3_MspInit 0 */ + + /* USER CODE END TIM3_MspInit 0 */ + /* TIM3 clock enable */ + __HAL_RCC_TIM3_CLK_ENABLE(); + 800d2c2: 4b16 ldr r3, [pc, #88] @ (800d31c ) + 800d2c4: 69db ldr r3, [r3, #28] + 800d2c6: 4a15 ldr r2, [pc, #84] @ (800d31c ) + 800d2c8: f043 0302 orr.w r3, r3, #2 + 800d2cc: 61d3 str r3, [r2, #28] + 800d2ce: 4b13 ldr r3, [pc, #76] @ (800d31c ) + 800d2d0: 69db ldr r3, [r3, #28] + 800d2d2: f003 0302 and.w r3, r3, #2 + 800d2d6: 60fb str r3, [r7, #12] + 800d2d8: 68fb ldr r3, [r7, #12] + + /* TIM3 interrupt Init */ + HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0); + 800d2da: 2200 movs r2, #0 + 800d2dc: 2100 movs r1, #0 + 800d2de: 201d movs r0, #29 + 800d2e0: f001 ffdb bl 800f29a + HAL_NVIC_EnableIRQ(TIM3_IRQn); + 800d2e4: 201d movs r0, #29 + 800d2e6: f001 fff4 bl 800f2d2 + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } +} + 800d2ea: e010 b.n 800d30e + else if(tim_baseHandle->Instance==TIM4) + 800d2ec: 687b ldr r3, [r7, #4] + 800d2ee: 681b ldr r3, [r3, #0] + 800d2f0: 4a0b ldr r2, [pc, #44] @ (800d320 ) + 800d2f2: 4293 cmp r3, r2 + 800d2f4: d10b bne.n 800d30e + __HAL_RCC_TIM4_CLK_ENABLE(); + 800d2f6: 4b09 ldr r3, [pc, #36] @ (800d31c ) + 800d2f8: 69db ldr r3, [r3, #28] + 800d2fa: 4a08 ldr r2, [pc, #32] @ (800d31c ) + 800d2fc: f043 0304 orr.w r3, r3, #4 + 800d300: 61d3 str r3, [r2, #28] + 800d302: 4b06 ldr r3, [pc, #24] @ (800d31c ) + 800d304: 69db ldr r3, [r3, #28] + 800d306: f003 0304 and.w r3, r3, #4 + 800d30a: 60bb str r3, [r7, #8] + 800d30c: 68bb ldr r3, [r7, #8] +} + 800d30e: bf00 nop + 800d310: 3710 adds r7, #16 + 800d312: 46bd mov sp, r7 + 800d314: bd80 pop {r7, pc} + 800d316: bf00 nop + 800d318: 40000400 .word 0x40000400 + 800d31c: 40021000 .word 0x40021000 + 800d320: 40000800 .word 0x40000800 + +0800d324 : +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) +{ + 800d324: b580 push {r7, lr} + 800d326: b08a sub sp, #40 @ 0x28 + 800d328: af00 add r7, sp, #0 + 800d32a: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800d32c: f107 0314 add.w r3, r7, #20 + 800d330: 2200 movs r2, #0 + 800d332: 601a str r2, [r3, #0] + 800d334: 605a str r2, [r3, #4] + 800d336: 609a str r2, [r3, #8] + 800d338: 60da str r2, [r3, #12] + if(timHandle->Instance==TIM3) + 800d33a: 687b ldr r3, [r7, #4] + 800d33c: 681b ldr r3, [r3, #0] + 800d33e: 4a26 ldr r2, [pc, #152] @ (800d3d8 ) + 800d340: 4293 cmp r3, r2 + 800d342: d118 bne.n 800d376 + { + /* USER CODE BEGIN TIM3_MspPostInit 0 */ + + /* USER CODE END TIM3_MspPostInit 0 */ + __HAL_RCC_GPIOA_CLK_ENABLE(); + 800d344: 4b25 ldr r3, [pc, #148] @ (800d3dc ) + 800d346: 699b ldr r3, [r3, #24] + 800d348: 4a24 ldr r2, [pc, #144] @ (800d3dc ) + 800d34a: f043 0304 orr.w r3, r3, #4 + 800d34e: 6193 str r3, [r2, #24] + 800d350: 4b22 ldr r3, [pc, #136] @ (800d3dc ) + 800d352: 699b ldr r3, [r3, #24] + 800d354: f003 0304 and.w r3, r3, #4 + 800d358: 613b str r3, [r7, #16] + 800d35a: 693b ldr r3, [r7, #16] + /**TIM3 GPIO Configuration + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = CP_PWM_Pin; + 800d35c: 2380 movs r3, #128 @ 0x80 + 800d35e: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d360: 2302 movs r3, #2 + 800d362: 61bb str r3, [r7, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800d364: 2302 movs r3, #2 + 800d366: 623b str r3, [r7, #32] + HAL_GPIO_Init(CP_PWM_GPIO_Port, &GPIO_InitStruct); + 800d368: f107 0314 add.w r3, r7, #20 + 800d36c: 4619 mov r1, r3 + 800d36e: 481c ldr r0, [pc, #112] @ (800d3e0 ) + 800d370: f002 f928 bl 800f5c4 + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } + +} + 800d374: e02b b.n 800d3ce + else if(timHandle->Instance==TIM4) + 800d376: 687b ldr r3, [r7, #4] + 800d378: 681b ldr r3, [r3, #0] + 800d37a: 4a1a ldr r2, [pc, #104] @ (800d3e4 ) + 800d37c: 4293 cmp r3, r2 + 800d37e: d126 bne.n 800d3ce + __HAL_RCC_GPIOD_CLK_ENABLE(); + 800d380: 4b16 ldr r3, [pc, #88] @ (800d3dc ) + 800d382: 699b ldr r3, [r3, #24] + 800d384: 4a15 ldr r2, [pc, #84] @ (800d3dc ) + 800d386: f043 0320 orr.w r3, r3, #32 + 800d38a: 6193 str r3, [r2, #24] + 800d38c: 4b13 ldr r3, [pc, #76] @ (800d3dc ) + 800d38e: 699b ldr r3, [r3, #24] + 800d390: f003 0320 and.w r3, r3, #32 + 800d394: 60fb str r3, [r7, #12] + 800d396: 68fb ldr r3, [r7, #12] + GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + 800d398: f44f 4360 mov.w r3, #57344 @ 0xe000 + 800d39c: 617b str r3, [r7, #20] + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d39e: 2302 movs r3, #2 + 800d3a0: 61bb str r3, [r7, #24] + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + 800d3a2: 2302 movs r3, #2 + 800d3a4: 623b str r3, [r7, #32] + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 800d3a6: f107 0314 add.w r3, r7, #20 + 800d3aa: 4619 mov r1, r3 + 800d3ac: 480e ldr r0, [pc, #56] @ (800d3e8 ) + 800d3ae: f002 f909 bl 800f5c4 + __HAL_AFIO_REMAP_TIM4_ENABLE(); + 800d3b2: 4b0e ldr r3, [pc, #56] @ (800d3ec ) + 800d3b4: 685b ldr r3, [r3, #4] + 800d3b6: 627b str r3, [r7, #36] @ 0x24 + 800d3b8: 6a7b ldr r3, [r7, #36] @ 0x24 + 800d3ba: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 800d3be: 627b str r3, [r7, #36] @ 0x24 + 800d3c0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800d3c2: f443 5380 orr.w r3, r3, #4096 @ 0x1000 + 800d3c6: 627b str r3, [r7, #36] @ 0x24 + 800d3c8: 4a08 ldr r2, [pc, #32] @ (800d3ec ) + 800d3ca: 6a7b ldr r3, [r7, #36] @ 0x24 + 800d3cc: 6053 str r3, [r2, #4] +} + 800d3ce: bf00 nop + 800d3d0: 3728 adds r7, #40 @ 0x28 + 800d3d2: 46bd mov sp, r7 + 800d3d4: bd80 pop {r7, pc} + 800d3d6: bf00 nop + 800d3d8: 40000400 .word 0x40000400 + 800d3dc: 40021000 .word 0x40021000 + 800d3e0: 40010800 .word 0x40010800 + 800d3e4: 40000800 .word 0x40000800 + 800d3e8: 40011400 .word 0x40011400 + 800d3ec: 40010000 .word 0x40010000 + +0800d3f0 : +UART_HandleTypeDef huart2; +UART_HandleTypeDef huart3; + +/* UART5 init function */ +void MX_UART5_Init(void) +{ + 800d3f0: b580 push {r7, lr} + 800d3f2: af00 add r7, sp, #0 + /* USER CODE END UART5_Init 0 */ + + /* USER CODE BEGIN UART5_Init 1 */ + + /* USER CODE END UART5_Init 1 */ + huart5.Instance = UART5; + 800d3f4: 4b11 ldr r3, [pc, #68] @ (800d43c ) + 800d3f6: 4a12 ldr r2, [pc, #72] @ (800d440 ) + 800d3f8: 601a str r2, [r3, #0] + huart5.Init.BaudRate = 9600; + 800d3fa: 4b10 ldr r3, [pc, #64] @ (800d43c ) + 800d3fc: f44f 5216 mov.w r2, #9600 @ 0x2580 + 800d400: 605a str r2, [r3, #4] + huart5.Init.WordLength = UART_WORDLENGTH_8B; + 800d402: 4b0e ldr r3, [pc, #56] @ (800d43c ) + 800d404: 2200 movs r2, #0 + 800d406: 609a str r2, [r3, #8] + huart5.Init.StopBits = UART_STOPBITS_1; + 800d408: 4b0c ldr r3, [pc, #48] @ (800d43c ) + 800d40a: 2200 movs r2, #0 + 800d40c: 60da str r2, [r3, #12] + huart5.Init.Parity = UART_PARITY_NONE; + 800d40e: 4b0b ldr r3, [pc, #44] @ (800d43c ) + 800d410: 2200 movs r2, #0 + 800d412: 611a str r2, [r3, #16] + huart5.Init.Mode = UART_MODE_TX_RX; + 800d414: 4b09 ldr r3, [pc, #36] @ (800d43c ) + 800d416: 220c movs r2, #12 + 800d418: 615a str r2, [r3, #20] + huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800d41a: 4b08 ldr r3, [pc, #32] @ (800d43c ) + 800d41c: 2200 movs r2, #0 + 800d41e: 619a str r2, [r3, #24] + huart5.Init.OverSampling = UART_OVERSAMPLING_16; + 800d420: 4b06 ldr r3, [pc, #24] @ (800d43c ) + 800d422: 2200 movs r2, #0 + 800d424: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart5) != HAL_OK) + 800d426: 4805 ldr r0, [pc, #20] @ (800d43c ) + 800d428: f004 fcc0 bl 8011dac + 800d42c: 4603 mov r3, r0 + 800d42e: 2b00 cmp r3, #0 + 800d430: d001 beq.n 800d436 + { + Error_Handler(); + 800d432: f7fd faa1 bl 800a978 + } + /* USER CODE BEGIN UART5_Init 2 */ + + /* USER CODE END UART5_Init 2 */ + +} + 800d436: bf00 nop + 800d438: bd80 pop {r7, pc} + 800d43a: bf00 nop + 800d43c: 200010b0 .word 0x200010b0 + 800d440: 40005000 .word 0x40005000 + +0800d444 : +/* USART1 init function */ + +void MX_USART1_UART_Init(void) +{ + 800d444: b580 push {r7, lr} + 800d446: af00 add r7, sp, #0 + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + 800d448: 4b11 ldr r3, [pc, #68] @ (800d490 ) + 800d44a: 4a12 ldr r2, [pc, #72] @ (800d494 ) + 800d44c: 601a str r2, [r3, #0] + huart1.Init.BaudRate = 115200; + 800d44e: 4b10 ldr r3, [pc, #64] @ (800d490 ) + 800d450: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 800d454: 605a str r2, [r3, #4] + huart1.Init.WordLength = UART_WORDLENGTH_8B; + 800d456: 4b0e ldr r3, [pc, #56] @ (800d490 ) + 800d458: 2200 movs r2, #0 + 800d45a: 609a str r2, [r3, #8] + huart1.Init.StopBits = UART_STOPBITS_1; + 800d45c: 4b0c ldr r3, [pc, #48] @ (800d490 ) + 800d45e: 2200 movs r2, #0 + 800d460: 60da str r2, [r3, #12] + huart1.Init.Parity = UART_PARITY_NONE; + 800d462: 4b0b ldr r3, [pc, #44] @ (800d490 ) + 800d464: 2200 movs r2, #0 + 800d466: 611a str r2, [r3, #16] + huart1.Init.Mode = UART_MODE_TX_RX; + 800d468: 4b09 ldr r3, [pc, #36] @ (800d490 ) + 800d46a: 220c movs r2, #12 + 800d46c: 615a str r2, [r3, #20] + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800d46e: 4b08 ldr r3, [pc, #32] @ (800d490 ) + 800d470: 2200 movs r2, #0 + 800d472: 619a str r2, [r3, #24] + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + 800d474: 4b06 ldr r3, [pc, #24] @ (800d490 ) + 800d476: 2200 movs r2, #0 + 800d478: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart1) != HAL_OK) + 800d47a: 4805 ldr r0, [pc, #20] @ (800d490 ) + 800d47c: f004 fc96 bl 8011dac + 800d480: 4603 mov r3, r0 + 800d482: 2b00 cmp r3, #0 + 800d484: d001 beq.n 800d48a + { + Error_Handler(); + 800d486: f7fd fa77 bl 800a978 + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + 800d48a: bf00 nop + 800d48c: bd80 pop {r7, pc} + 800d48e: bf00 nop + 800d490: 200010f8 .word 0x200010f8 + 800d494: 40013800 .word 0x40013800 + +0800d498 : +/* USART2 init function */ + +void MX_USART2_UART_Init(void) +{ + 800d498: b580 push {r7, lr} + 800d49a: af00 add r7, sp, #0 + /* USER CODE END USART2_Init 0 */ + + /* USER CODE BEGIN USART2_Init 1 */ + + /* USER CODE END USART2_Init 1 */ + huart2.Instance = USART2; + 800d49c: 4b11 ldr r3, [pc, #68] @ (800d4e4 ) + 800d49e: 4a12 ldr r2, [pc, #72] @ (800d4e8 ) + 800d4a0: 601a str r2, [r3, #0] + huart2.Init.BaudRate = 115200; + 800d4a2: 4b10 ldr r3, [pc, #64] @ (800d4e4 ) + 800d4a4: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 800d4a8: 605a str r2, [r3, #4] + huart2.Init.WordLength = UART_WORDLENGTH_8B; + 800d4aa: 4b0e ldr r3, [pc, #56] @ (800d4e4 ) + 800d4ac: 2200 movs r2, #0 + 800d4ae: 609a str r2, [r3, #8] + huart2.Init.StopBits = UART_STOPBITS_1; + 800d4b0: 4b0c ldr r3, [pc, #48] @ (800d4e4 ) + 800d4b2: 2200 movs r2, #0 + 800d4b4: 60da str r2, [r3, #12] + huart2.Init.Parity = UART_PARITY_NONE; + 800d4b6: 4b0b ldr r3, [pc, #44] @ (800d4e4 ) + 800d4b8: 2200 movs r2, #0 + 800d4ba: 611a str r2, [r3, #16] + huart2.Init.Mode = UART_MODE_TX_RX; + 800d4bc: 4b09 ldr r3, [pc, #36] @ (800d4e4 ) + 800d4be: 220c movs r2, #12 + 800d4c0: 615a str r2, [r3, #20] + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800d4c2: 4b08 ldr r3, [pc, #32] @ (800d4e4 ) + 800d4c4: 2200 movs r2, #0 + 800d4c6: 619a str r2, [r3, #24] + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + 800d4c8: 4b06 ldr r3, [pc, #24] @ (800d4e4 ) + 800d4ca: 2200 movs r2, #0 + 800d4cc: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart2) != HAL_OK) + 800d4ce: 4805 ldr r0, [pc, #20] @ (800d4e4 ) + 800d4d0: f004 fc6c bl 8011dac + 800d4d4: 4603 mov r3, r0 + 800d4d6: 2b00 cmp r3, #0 + 800d4d8: d001 beq.n 800d4de + { + Error_Handler(); + 800d4da: f7fd fa4d bl 800a978 + } + /* USER CODE BEGIN USART2_Init 2 */ + + /* USER CODE END USART2_Init 2 */ + +} + 800d4de: bf00 nop + 800d4e0: bd80 pop {r7, pc} + 800d4e2: bf00 nop + 800d4e4: 20001140 .word 0x20001140 + 800d4e8: 40004400 .word 0x40004400 + +0800d4ec : +/* USART3 init function */ + +void MX_USART3_UART_Init(void) +{ + 800d4ec: b580 push {r7, lr} + 800d4ee: af00 add r7, sp, #0 + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + 800d4f0: 4b11 ldr r3, [pc, #68] @ (800d538 ) + 800d4f2: 4a12 ldr r2, [pc, #72] @ (800d53c ) + 800d4f4: 601a str r2, [r3, #0] + huart3.Init.BaudRate = 115200; + 800d4f6: 4b10 ldr r3, [pc, #64] @ (800d538 ) + 800d4f8: f44f 32e1 mov.w r2, #115200 @ 0x1c200 + 800d4fc: 605a str r2, [r3, #4] + huart3.Init.WordLength = UART_WORDLENGTH_8B; + 800d4fe: 4b0e ldr r3, [pc, #56] @ (800d538 ) + 800d500: 2200 movs r2, #0 + 800d502: 609a str r2, [r3, #8] + huart3.Init.StopBits = UART_STOPBITS_1; + 800d504: 4b0c ldr r3, [pc, #48] @ (800d538 ) + 800d506: 2200 movs r2, #0 + 800d508: 60da str r2, [r3, #12] + huart3.Init.Parity = UART_PARITY_NONE; + 800d50a: 4b0b ldr r3, [pc, #44] @ (800d538 ) + 800d50c: 2200 movs r2, #0 + 800d50e: 611a str r2, [r3, #16] + huart3.Init.Mode = UART_MODE_TX_RX; + 800d510: 4b09 ldr r3, [pc, #36] @ (800d538 ) + 800d512: 220c movs r2, #12 + 800d514: 615a str r2, [r3, #20] + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + 800d516: 4b08 ldr r3, [pc, #32] @ (800d538 ) + 800d518: 2200 movs r2, #0 + 800d51a: 619a str r2, [r3, #24] + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + 800d51c: 4b06 ldr r3, [pc, #24] @ (800d538 ) + 800d51e: 2200 movs r2, #0 + 800d520: 61da str r2, [r3, #28] + if (HAL_UART_Init(&huart3) != HAL_OK) + 800d522: 4805 ldr r0, [pc, #20] @ (800d538 ) + 800d524: f004 fc42 bl 8011dac + 800d528: 4603 mov r3, r0 + 800d52a: 2b00 cmp r3, #0 + 800d52c: d001 beq.n 800d532 + { + Error_Handler(); + 800d52e: f7fd fa23 bl 800a978 + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + 800d532: bf00 nop + 800d534: bd80 pop {r7, pc} + 800d536: bf00 nop + 800d538: 20001188 .word 0x20001188 + 800d53c: 40004800 .word 0x40004800 + +0800d540 : + +void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) +{ + 800d540: b580 push {r7, lr} + 800d542: b092 sub sp, #72 @ 0x48 + 800d544: af00 add r7, sp, #0 + 800d546: 6078 str r0, [r7, #4] + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + 800d548: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d54c: 2200 movs r2, #0 + 800d54e: 601a str r2, [r3, #0] + 800d550: 605a str r2, [r3, #4] + 800d552: 609a str r2, [r3, #8] + 800d554: 60da str r2, [r3, #12] + if(uartHandle->Instance==UART5) + 800d556: 687b ldr r3, [r7, #4] + 800d558: 681b ldr r3, [r3, #0] + 800d55a: 4a95 ldr r2, [pc, #596] @ (800d7b0 ) + 800d55c: 4293 cmp r3, r2 + 800d55e: d145 bne.n 800d5ec + { + /* USER CODE BEGIN UART5_MspInit 0 */ + + /* USER CODE END UART5_MspInit 0 */ + /* UART5 clock enable */ + __HAL_RCC_UART5_CLK_ENABLE(); + 800d560: 4b94 ldr r3, [pc, #592] @ (800d7b4 ) + 800d562: 69db ldr r3, [r3, #28] + 800d564: 4a93 ldr r2, [pc, #588] @ (800d7b4 ) + 800d566: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 + 800d56a: 61d3 str r3, [r2, #28] + 800d56c: 4b91 ldr r3, [pc, #580] @ (800d7b4 ) + 800d56e: 69db ldr r3, [r3, #28] + 800d570: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 800d574: 62fb str r3, [r7, #44] @ 0x2c + 800d576: 6afb ldr r3, [r7, #44] @ 0x2c + + __HAL_RCC_GPIOC_CLK_ENABLE(); + 800d578: 4b8e ldr r3, [pc, #568] @ (800d7b4 ) + 800d57a: 699b ldr r3, [r3, #24] + 800d57c: 4a8d ldr r2, [pc, #564] @ (800d7b4 ) + 800d57e: f043 0310 orr.w r3, r3, #16 + 800d582: 6193 str r3, [r2, #24] + 800d584: 4b8b ldr r3, [pc, #556] @ (800d7b4 ) + 800d586: 699b ldr r3, [r3, #24] + 800d588: f003 0310 and.w r3, r3, #16 + 800d58c: 62bb str r3, [r7, #40] @ 0x28 + 800d58e: 6abb ldr r3, [r7, #40] @ 0x28 + __HAL_RCC_GPIOD_CLK_ENABLE(); + 800d590: 4b88 ldr r3, [pc, #544] @ (800d7b4 ) + 800d592: 699b ldr r3, [r3, #24] + 800d594: 4a87 ldr r2, [pc, #540] @ (800d7b4 ) + 800d596: f043 0320 orr.w r3, r3, #32 + 800d59a: 6193 str r3, [r2, #24] + 800d59c: 4b85 ldr r3, [pc, #532] @ (800d7b4 ) + 800d59e: 699b ldr r3, [r3, #24] + 800d5a0: f003 0320 and.w r3, r3, #32 + 800d5a4: 627b str r3, [r7, #36] @ 0x24 + 800d5a6: 6a7b ldr r3, [r7, #36] @ 0x24 + /**UART5 GPIO Configuration + PC12 ------> UART5_TX + PD2 ------> UART5_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_12; + 800d5a8: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800d5ac: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d5ae: 2302 movs r3, #2 + 800d5b0: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 800d5b2: 2303 movs r3, #3 + 800d5b4: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800d5b6: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d5ba: 4619 mov r1, r3 + 800d5bc: 487e ldr r0, [pc, #504] @ (800d7b8 ) + 800d5be: f002 f801 bl 800f5c4 + + GPIO_InitStruct.Pin = GPIO_PIN_2; + 800d5c2: 2304 movs r3, #4 + 800d5c4: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800d5c6: 2300 movs r3, #0 + 800d5c8: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800d5ca: 2300 movs r3, #0 + 800d5cc: 63bb str r3, [r7, #56] @ 0x38 + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 800d5ce: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d5d2: 4619 mov r1, r3 + 800d5d4: 4879 ldr r0, [pc, #484] @ (800d7bc ) + 800d5d6: f001 fff5 bl 800f5c4 + + /* UART5 interrupt Init */ + HAL_NVIC_SetPriority(UART5_IRQn, 0, 0); + 800d5da: 2200 movs r2, #0 + 800d5dc: 2100 movs r1, #0 + 800d5de: 2035 movs r0, #53 @ 0x35 + 800d5e0: f001 fe5b bl 800f29a + HAL_NVIC_EnableIRQ(UART5_IRQn); + 800d5e4: 2035 movs r0, #53 @ 0x35 + 800d5e6: f001 fe74 bl 800f2d2 + HAL_NVIC_EnableIRQ(USART3_IRQn); + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_MspInit 1 */ + } +} + 800d5ea: e0dc b.n 800d7a6 + else if(uartHandle->Instance==USART1) + 800d5ec: 687b ldr r3, [r7, #4] + 800d5ee: 681b ldr r3, [r3, #0] + 800d5f0: 4a73 ldr r2, [pc, #460] @ (800d7c0 ) + 800d5f2: 4293 cmp r3, r2 + 800d5f4: d13a bne.n 800d66c + __HAL_RCC_USART1_CLK_ENABLE(); + 800d5f6: 4b6f ldr r3, [pc, #444] @ (800d7b4 ) + 800d5f8: 699b ldr r3, [r3, #24] + 800d5fa: 4a6e ldr r2, [pc, #440] @ (800d7b4 ) + 800d5fc: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 800d600: 6193 str r3, [r2, #24] + 800d602: 4b6c ldr r3, [pc, #432] @ (800d7b4 ) + 800d604: 699b ldr r3, [r3, #24] + 800d606: f403 4380 and.w r3, r3, #16384 @ 0x4000 + 800d60a: 623b str r3, [r7, #32] + 800d60c: 6a3b ldr r3, [r7, #32] + __HAL_RCC_GPIOA_CLK_ENABLE(); + 800d60e: 4b69 ldr r3, [pc, #420] @ (800d7b4 ) + 800d610: 699b ldr r3, [r3, #24] + 800d612: 4a68 ldr r2, [pc, #416] @ (800d7b4 ) + 800d614: f043 0304 orr.w r3, r3, #4 + 800d618: 6193 str r3, [r2, #24] + 800d61a: 4b66 ldr r3, [pc, #408] @ (800d7b4 ) + 800d61c: 699b ldr r3, [r3, #24] + 800d61e: f003 0304 and.w r3, r3, #4 + 800d622: 61fb str r3, [r7, #28] + 800d624: 69fb ldr r3, [r7, #28] + GPIO_InitStruct.Pin = GPIO_PIN_9; + 800d626: f44f 7300 mov.w r3, #512 @ 0x200 + 800d62a: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d62c: 2302 movs r3, #2 + 800d62e: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 800d630: 2303 movs r3, #3 + 800d632: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 800d634: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d638: 4619 mov r1, r3 + 800d63a: 4862 ldr r0, [pc, #392] @ (800d7c4 ) + 800d63c: f001 ffc2 bl 800f5c4 + GPIO_InitStruct.Pin = GPIO_PIN_10; + 800d640: f44f 6380 mov.w r3, #1024 @ 0x400 + 800d644: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800d646: 2300 movs r3, #0 + 800d648: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800d64a: 2300 movs r3, #0 + 800d64c: 63bb str r3, [r7, #56] @ 0x38 + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + 800d64e: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d652: 4619 mov r1, r3 + 800d654: 485b ldr r0, [pc, #364] @ (800d7c4 ) + 800d656: f001 ffb5 bl 800f5c4 + HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); + 800d65a: 2200 movs r2, #0 + 800d65c: 2100 movs r1, #0 + 800d65e: 2025 movs r0, #37 @ 0x25 + 800d660: f001 fe1b bl 800f29a + HAL_NVIC_EnableIRQ(USART1_IRQn); + 800d664: 2025 movs r0, #37 @ 0x25 + 800d666: f001 fe34 bl 800f2d2 +} + 800d66a: e09c b.n 800d7a6 + else if(uartHandle->Instance==USART2) + 800d66c: 687b ldr r3, [r7, #4] + 800d66e: 681b ldr r3, [r3, #0] + 800d670: 4a55 ldr r2, [pc, #340] @ (800d7c8 ) + 800d672: 4293 cmp r3, r2 + 800d674: d146 bne.n 800d704 + __HAL_RCC_USART2_CLK_ENABLE(); + 800d676: 4b4f ldr r3, [pc, #316] @ (800d7b4 ) + 800d678: 69db ldr r3, [r3, #28] + 800d67a: 4a4e ldr r2, [pc, #312] @ (800d7b4 ) + 800d67c: f443 3300 orr.w r3, r3, #131072 @ 0x20000 + 800d680: 61d3 str r3, [r2, #28] + 800d682: 4b4c ldr r3, [pc, #304] @ (800d7b4 ) + 800d684: 69db ldr r3, [r3, #28] + 800d686: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800d68a: 61bb str r3, [r7, #24] + 800d68c: 69bb ldr r3, [r7, #24] + __HAL_RCC_GPIOD_CLK_ENABLE(); + 800d68e: 4b49 ldr r3, [pc, #292] @ (800d7b4 ) + 800d690: 699b ldr r3, [r3, #24] + 800d692: 4a48 ldr r2, [pc, #288] @ (800d7b4 ) + 800d694: f043 0320 orr.w r3, r3, #32 + 800d698: 6193 str r3, [r2, #24] + 800d69a: 4b46 ldr r3, [pc, #280] @ (800d7b4 ) + 800d69c: 699b ldr r3, [r3, #24] + 800d69e: f003 0320 and.w r3, r3, #32 + 800d6a2: 617b str r3, [r7, #20] + 800d6a4: 697b ldr r3, [r7, #20] + GPIO_InitStruct.Pin = GPIO_PIN_5; + 800d6a6: 2320 movs r3, #32 + 800d6a8: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d6aa: 2302 movs r3, #2 + 800d6ac: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 800d6ae: 2303 movs r3, #3 + 800d6b0: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 800d6b2: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d6b6: 4619 mov r1, r3 + 800d6b8: 4840 ldr r0, [pc, #256] @ (800d7bc ) + 800d6ba: f001 ff83 bl 800f5c4 + GPIO_InitStruct.Pin = GPIO_PIN_6; + 800d6be: 2340 movs r3, #64 @ 0x40 + 800d6c0: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800d6c2: 2300 movs r3, #0 + 800d6c4: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800d6c6: 2300 movs r3, #0 + 800d6c8: 63bb str r3, [r7, #56] @ 0x38 + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + 800d6ca: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d6ce: 4619 mov r1, r3 + 800d6d0: 483a ldr r0, [pc, #232] @ (800d7bc ) + 800d6d2: f001 ff77 bl 800f5c4 + __HAL_AFIO_REMAP_USART2_ENABLE(); + 800d6d6: 4b3d ldr r3, [pc, #244] @ (800d7cc ) + 800d6d8: 685b ldr r3, [r3, #4] + 800d6da: 643b str r3, [r7, #64] @ 0x40 + 800d6dc: 6c3b ldr r3, [r7, #64] @ 0x40 + 800d6de: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 800d6e2: 643b str r3, [r7, #64] @ 0x40 + 800d6e4: 6c3b ldr r3, [r7, #64] @ 0x40 + 800d6e6: f043 0308 orr.w r3, r3, #8 + 800d6ea: 643b str r3, [r7, #64] @ 0x40 + 800d6ec: 4a37 ldr r2, [pc, #220] @ (800d7cc ) + 800d6ee: 6c3b ldr r3, [r7, #64] @ 0x40 + 800d6f0: 6053 str r3, [r2, #4] + HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); + 800d6f2: 2200 movs r2, #0 + 800d6f4: 2100 movs r1, #0 + 800d6f6: 2026 movs r0, #38 @ 0x26 + 800d6f8: f001 fdcf bl 800f29a + HAL_NVIC_EnableIRQ(USART2_IRQn); + 800d6fc: 2026 movs r0, #38 @ 0x26 + 800d6fe: f001 fde8 bl 800f2d2 +} + 800d702: e050 b.n 800d7a6 + else if(uartHandle->Instance==USART3) + 800d704: 687b ldr r3, [r7, #4] + 800d706: 681b ldr r3, [r3, #0] + 800d708: 4a31 ldr r2, [pc, #196] @ (800d7d0 ) + 800d70a: 4293 cmp r3, r2 + 800d70c: d14b bne.n 800d7a6 + __HAL_RCC_USART3_CLK_ENABLE(); + 800d70e: 4b29 ldr r3, [pc, #164] @ (800d7b4 ) + 800d710: 69db ldr r3, [r3, #28] + 800d712: 4a28 ldr r2, [pc, #160] @ (800d7b4 ) + 800d714: f443 2380 orr.w r3, r3, #262144 @ 0x40000 + 800d718: 61d3 str r3, [r2, #28] + 800d71a: 4b26 ldr r3, [pc, #152] @ (800d7b4 ) + 800d71c: 69db ldr r3, [r3, #28] + 800d71e: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 800d722: 613b str r3, [r7, #16] + 800d724: 693b ldr r3, [r7, #16] + __HAL_RCC_GPIOC_CLK_ENABLE(); + 800d726: 4b23 ldr r3, [pc, #140] @ (800d7b4 ) + 800d728: 699b ldr r3, [r3, #24] + 800d72a: 4a22 ldr r2, [pc, #136] @ (800d7b4 ) + 800d72c: f043 0310 orr.w r3, r3, #16 + 800d730: 6193 str r3, [r2, #24] + 800d732: 4b20 ldr r3, [pc, #128] @ (800d7b4 ) + 800d734: 699b ldr r3, [r3, #24] + 800d736: f003 0310 and.w r3, r3, #16 + 800d73a: 60fb str r3, [r7, #12] + 800d73c: 68fb ldr r3, [r7, #12] + GPIO_InitStruct.Pin = GPIO_PIN_10; + 800d73e: f44f 6380 mov.w r3, #1024 @ 0x400 + 800d742: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + 800d744: 2302 movs r3, #2 + 800d746: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; + 800d748: 2303 movs r3, #3 + 800d74a: 63fb str r3, [r7, #60] @ 0x3c + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800d74c: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d750: 4619 mov r1, r3 + 800d752: 4819 ldr r0, [pc, #100] @ (800d7b8 ) + 800d754: f001 ff36 bl 800f5c4 + GPIO_InitStruct.Pin = GPIO_PIN_11; + 800d758: f44f 6300 mov.w r3, #2048 @ 0x800 + 800d75c: 633b str r3, [r7, #48] @ 0x30 + GPIO_InitStruct.Mode = GPIO_MODE_INPUT; + 800d75e: 2300 movs r3, #0 + 800d760: 637b str r3, [r7, #52] @ 0x34 + GPIO_InitStruct.Pull = GPIO_NOPULL; + 800d762: 2300 movs r3, #0 + 800d764: 63bb str r3, [r7, #56] @ 0x38 + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + 800d766: f107 0330 add.w r3, r7, #48 @ 0x30 + 800d76a: 4619 mov r1, r3 + 800d76c: 4812 ldr r0, [pc, #72] @ (800d7b8 ) + 800d76e: f001 ff29 bl 800f5c4 + __HAL_AFIO_REMAP_USART3_PARTIAL(); + 800d772: 4b16 ldr r3, [pc, #88] @ (800d7cc ) + 800d774: 685b ldr r3, [r3, #4] + 800d776: 647b str r3, [r7, #68] @ 0x44 + 800d778: 6c7b ldr r3, [r7, #68] @ 0x44 + 800d77a: f023 0330 bic.w r3, r3, #48 @ 0x30 + 800d77e: 647b str r3, [r7, #68] @ 0x44 + 800d780: 6c7b ldr r3, [r7, #68] @ 0x44 + 800d782: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 + 800d786: 647b str r3, [r7, #68] @ 0x44 + 800d788: 6c7b ldr r3, [r7, #68] @ 0x44 + 800d78a: f043 0310 orr.w r3, r3, #16 + 800d78e: 647b str r3, [r7, #68] @ 0x44 + 800d790: 4a0e ldr r2, [pc, #56] @ (800d7cc ) + 800d792: 6c7b ldr r3, [r7, #68] @ 0x44 + 800d794: 6053 str r3, [r2, #4] + HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); + 800d796: 2200 movs r2, #0 + 800d798: 2100 movs r1, #0 + 800d79a: 2027 movs r0, #39 @ 0x27 + 800d79c: f001 fd7d bl 800f29a + HAL_NVIC_EnableIRQ(USART3_IRQn); + 800d7a0: 2027 movs r0, #39 @ 0x27 + 800d7a2: f001 fd96 bl 800f2d2 +} + 800d7a6: bf00 nop + 800d7a8: 3748 adds r7, #72 @ 0x48 + 800d7aa: 46bd mov sp, r7 + 800d7ac: bd80 pop {r7, pc} + 800d7ae: bf00 nop + 800d7b0: 40005000 .word 0x40005000 + 800d7b4: 40021000 .word 0x40021000 + 800d7b8: 40011000 .word 0x40011000 + 800d7bc: 40011400 .word 0x40011400 + 800d7c0: 40013800 .word 0x40013800 + 800d7c4: 40010800 .word 0x40010800 + 800d7c8: 40004400 .word 0x40004400 + 800d7cc: 40010000 .word 0x40010000 + 800d7d0: 40004800 .word 0x40004800 + +0800d7d4 : + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + ldr sp, =_estack /* set stack pointer */ + 800d7d4: f8df d034 ldr.w sp, [pc, #52] @ 800d80c + +/* Call the clock system initialization function.*/ + bl SystemInit + 800d7d8: f7ff fc4a bl 800d070 + +/* Copy the data segment initializers from flash to SRAM */ + ldr r0, =_sdata + 800d7dc: 480c ldr r0, [pc, #48] @ (800d810 ) + ldr r1, =_edata + 800d7de: 490d ldr r1, [pc, #52] @ (800d814 ) + ldr r2, =_sidata + 800d7e0: 4a0d ldr r2, [pc, #52] @ (800d818 ) + movs r3, #0 + 800d7e2: 2300 movs r3, #0 + b LoopCopyDataInit + 800d7e4: e002 b.n 800d7ec + +0800d7e6 : + +CopyDataInit: + ldr r4, [r2, r3] + 800d7e6: 58d4 ldr r4, [r2, r3] + str r4, [r0, r3] + 800d7e8: 50c4 str r4, [r0, r3] + adds r3, r3, #4 + 800d7ea: 3304 adds r3, #4 + +0800d7ec : + +LoopCopyDataInit: + adds r4, r0, r3 + 800d7ec: 18c4 adds r4, r0, r3 + cmp r4, r1 + 800d7ee: 428c cmp r4, r1 + bcc CopyDataInit + 800d7f0: d3f9 bcc.n 800d7e6 + +/* Zero fill the bss segment. */ + ldr r2, =_sbss + 800d7f2: 4a0a ldr r2, [pc, #40] @ (800d81c ) + ldr r4, =_ebss + 800d7f4: 4c0a ldr r4, [pc, #40] @ (800d820 ) + movs r3, #0 + 800d7f6: 2300 movs r3, #0 + b LoopFillZerobss + 800d7f8: e001 b.n 800d7fe + +0800d7fa : + +FillZerobss: + str r3, [r2] + 800d7fa: 6013 str r3, [r2, #0] + adds r2, r2, #4 + 800d7fc: 3204 adds r2, #4 + +0800d7fe : + +LoopFillZerobss: + cmp r2, r4 + 800d7fe: 42a2 cmp r2, r4 + bcc FillZerobss + 800d800: d3fb bcc.n 800d7fa + + +/* Call static constructors */ + bl __libc_init_array + 800d802: f006 f8b3 bl 801396c <__libc_init_array> +/* Call the application's entry point.*/ + bl main + 800d806: f7fc ffcb bl 800a7a0
+ bx lr + 800d80a: 4770 bx lr + ldr sp, =_estack /* set stack pointer */ + 800d80c: 20010000 .word 0x20010000 + ldr r0, =_sdata + 800d810: 20000000 .word 0x20000000 + ldr r1, =_edata + 800d814: 20000240 .word 0x20000240 + ldr r2, =_sidata + 800d818: 0801639c .word 0x0801639c + ldr r2, =_sbss + 800d81c: 20000240 .word 0x20000240 + ldr r4, =_ebss + 800d820: 20001320 .word 0x20001320 + +0800d824 : + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + 800d824: e7fe b.n 800d824 + ... + +0800d828 : + * 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) +{ + 800d828: b580 push {r7, lr} + 800d82a: 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(); + 800d82c: 4b08 ldr r3, [pc, #32] @ (800d850 ) + 800d82e: 681b ldr r3, [r3, #0] + 800d830: 4a07 ldr r2, [pc, #28] @ (800d850 ) + 800d832: f043 0310 orr.w r3, r3, #16 + 800d836: 6013 str r3, [r2, #0] +#endif +#endif /* PREFETCH_ENABLE */ + + /* Set Interrupt Group Priority */ + HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); + 800d838: 2003 movs r0, #3 + 800d83a: f001 fd23 bl 800f284 + + /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ + HAL_InitTick(TICK_INT_PRIORITY); + 800d83e: 200f movs r0, #15 + 800d840: f000 f808 bl 800d854 + + /* Init the low level hardware */ + HAL_MspInit(); + 800d844: f7ff fac0 bl 800cdc8 + + /* Return function status */ + return HAL_OK; + 800d848: 2300 movs r3, #0 +} + 800d84a: 4618 mov r0, r3 + 800d84c: bd80 pop {r7, pc} + 800d84e: bf00 nop + 800d850: 40022000 .word 0x40022000 + +0800d854 : + * implementation in user file. + * @param TickPriority Tick interrupt priority. + * @retval HAL status + */ +__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) +{ + 800d854: b580 push {r7, lr} + 800d856: b082 sub sp, #8 + 800d858: af00 add r7, sp, #0 + 800d85a: 6078 str r0, [r7, #4] + /* Configure the SysTick to have interrupt in 1ms time basis*/ + if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) + 800d85c: 4b12 ldr r3, [pc, #72] @ (800d8a8 ) + 800d85e: 681a ldr r2, [r3, #0] + 800d860: 4b12 ldr r3, [pc, #72] @ (800d8ac ) + 800d862: 781b ldrb r3, [r3, #0] + 800d864: 4619 mov r1, r3 + 800d866: f44f 737a mov.w r3, #1000 @ 0x3e8 + 800d86a: fbb3 f3f1 udiv r3, r3, r1 + 800d86e: fbb2 f3f3 udiv r3, r2, r3 + 800d872: 4618 mov r0, r3 + 800d874: f001 fd3b bl 800f2ee + 800d878: 4603 mov r3, r0 + 800d87a: 2b00 cmp r3, #0 + 800d87c: d001 beq.n 800d882 + { + return HAL_ERROR; + 800d87e: 2301 movs r3, #1 + 800d880: e00e b.n 800d8a0 + } + + /* Configure the SysTick IRQ priority */ + if (TickPriority < (1UL << __NVIC_PRIO_BITS)) + 800d882: 687b ldr r3, [r7, #4] + 800d884: 2b0f cmp r3, #15 + 800d886: d80a bhi.n 800d89e + { + HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); + 800d888: 2200 movs r2, #0 + 800d88a: 6879 ldr r1, [r7, #4] + 800d88c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800d890: f001 fd03 bl 800f29a + uwTickPrio = TickPriority; + 800d894: 4a06 ldr r2, [pc, #24] @ (800d8b0 ) + 800d896: 687b ldr r3, [r7, #4] + 800d898: 6013 str r3, [r2, #0] + { + return HAL_ERROR; + } + + /* Return function status */ + return HAL_OK; + 800d89a: 2300 movs r3, #0 + 800d89c: e000 b.n 800d8a0 + return HAL_ERROR; + 800d89e: 2301 movs r3, #1 +} + 800d8a0: 4618 mov r0, r3 + 800d8a2: 3708 adds r7, #8 + 800d8a4: 46bd mov sp, r7 + 800d8a6: bd80 pop {r7, pc} + 800d8a8: 2000006c .word 0x2000006c + 800d8ac: 20000074 .word 0x20000074 + 800d8b0: 20000070 .word 0x20000070 + +0800d8b4 : + * @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) +{ + 800d8b4: b480 push {r7} + 800d8b6: af00 add r7, sp, #0 + uwTick += uwTickFreq; + 800d8b8: 4b05 ldr r3, [pc, #20] @ (800d8d0 ) + 800d8ba: 781b ldrb r3, [r3, #0] + 800d8bc: 461a mov r2, r3 + 800d8be: 4b05 ldr r3, [pc, #20] @ (800d8d4 ) + 800d8c0: 681b ldr r3, [r3, #0] + 800d8c2: 4413 add r3, r2 + 800d8c4: 4a03 ldr r2, [pc, #12] @ (800d8d4 ) + 800d8c6: 6013 str r3, [r2, #0] +} + 800d8c8: bf00 nop + 800d8ca: 46bd mov sp, r7 + 800d8cc: bc80 pop {r7} + 800d8ce: 4770 bx lr + 800d8d0: 20000074 .word 0x20000074 + 800d8d4: 200011d0 .word 0x200011d0 + +0800d8d8 : + * @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) +{ + 800d8d8: b480 push {r7} + 800d8da: af00 add r7, sp, #0 + return uwTick; + 800d8dc: 4b02 ldr r3, [pc, #8] @ (800d8e8 ) + 800d8de: 681b ldr r3, [r3, #0] +} + 800d8e0: 4618 mov r0, r3 + 800d8e2: 46bd mov sp, r7 + 800d8e4: bc80 pop {r7} + 800d8e6: 4770 bx lr + 800d8e8: 200011d0 .word 0x200011d0 + +0800d8ec : + * implementations in user file. + * @param Delay specifies the delay time length, in milliseconds. + * @retval None + */ +__weak void HAL_Delay(uint32_t Delay) +{ + 800d8ec: b580 push {r7, lr} + 800d8ee: b084 sub sp, #16 + 800d8f0: af00 add r7, sp, #0 + 800d8f2: 6078 str r0, [r7, #4] + uint32_t tickstart = HAL_GetTick(); + 800d8f4: f7ff fff0 bl 800d8d8 + 800d8f8: 60b8 str r0, [r7, #8] + uint32_t wait = Delay; + 800d8fa: 687b ldr r3, [r7, #4] + 800d8fc: 60fb str r3, [r7, #12] + + /* Add a freq to guarantee minimum wait */ + if (wait < HAL_MAX_DELAY) + 800d8fe: 68fb ldr r3, [r7, #12] + 800d900: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 800d904: d005 beq.n 800d912 + { + wait += (uint32_t)(uwTickFreq); + 800d906: 4b0a ldr r3, [pc, #40] @ (800d930 ) + 800d908: 781b ldrb r3, [r3, #0] + 800d90a: 461a mov r2, r3 + 800d90c: 68fb ldr r3, [r7, #12] + 800d90e: 4413 add r3, r2 + 800d910: 60fb str r3, [r7, #12] + } + + while ((HAL_GetTick() - tickstart) < wait) + 800d912: bf00 nop + 800d914: f7ff ffe0 bl 800d8d8 + 800d918: 4602 mov r2, r0 + 800d91a: 68bb ldr r3, [r7, #8] + 800d91c: 1ad3 subs r3, r2, r3 + 800d91e: 68fa ldr r2, [r7, #12] + 800d920: 429a cmp r2, r3 + 800d922: d8f7 bhi.n 800d914 + { + } +} + 800d924: bf00 nop + 800d926: bf00 nop + 800d928: 3710 adds r7, #16 + 800d92a: 46bd mov sp, r7 + 800d92c: bd80 pop {r7, pc} + 800d92e: bf00 nop + 800d930: 20000074 .word 0x20000074 + +0800d934 : + * of structure "ADC_InitTypeDef". + * @param hadc: ADC handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) +{ + 800d934: b580 push {r7, lr} + 800d936: b086 sub sp, #24 + 800d938: af00 add r7, sp, #0 + 800d93a: 6078 str r0, [r7, #4] + HAL_StatusTypeDef tmp_hal_status = HAL_OK; + 800d93c: 2300 movs r3, #0 + 800d93e: 75fb strb r3, [r7, #23] + uint32_t tmp_cr1 = 0U; + 800d940: 2300 movs r3, #0 + 800d942: 613b str r3, [r7, #16] + uint32_t tmp_cr2 = 0U; + 800d944: 2300 movs r3, #0 + 800d946: 60bb str r3, [r7, #8] + uint32_t tmp_sqr1 = 0U; + 800d948: 2300 movs r3, #0 + 800d94a: 60fb str r3, [r7, #12] + + /* Check ADC handle */ + if(hadc == NULL) + 800d94c: 687b ldr r3, [r7, #4] + 800d94e: 2b00 cmp r3, #0 + 800d950: d101 bne.n 800d956 + { + return HAL_ERROR; + 800d952: 2301 movs r3, #1 + 800d954: e0be b.n 800dad4 + assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign)); + assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode)); + assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode)); + assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv)); + + if(hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) + 800d956: 687b ldr r3, [r7, #4] + 800d958: 689b ldr r3, [r3, #8] + 800d95a: 2b00 cmp r3, #0 + /* Refer to header of this file for more details on clock enabling */ + /* procedure. */ + + /* Actions performed only if ADC is coming from state reset: */ + /* - Initialization of ADC MSP */ + if (hadc->State == HAL_ADC_STATE_RESET) + 800d95c: 687b ldr r3, [r7, #4] + 800d95e: 6a9b ldr r3, [r3, #40] @ 0x28 + 800d960: 2b00 cmp r3, #0 + 800d962: d109 bne.n 800d978 + { + /* Initialize ADC error code */ + ADC_CLEAR_ERRORCODE(hadc); + 800d964: 687b ldr r3, [r7, #4] + 800d966: 2200 movs r2, #0 + 800d968: 62da str r2, [r3, #44] @ 0x2c + + /* Allocate lock resource and initialize it */ + hadc->Lock = HAL_UNLOCKED; + 800d96a: 687b ldr r3, [r7, #4] + 800d96c: 2200 movs r2, #0 + 800d96e: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Init the low level hardware */ + hadc->MspInitCallback(hadc); +#else + /* Init the low level hardware */ + HAL_ADC_MspInit(hadc); + 800d972: 6878 ldr r0, [r7, #4] + 800d974: f7fb fe16 bl 80095a4 + /* Stop potential conversion on going, on regular and injected groups */ + /* Disable ADC peripheral */ + /* Note: In case of ADC already enabled, precaution to not launch an */ + /* unwanted conversion while modifying register CR2 by writing 1 to */ + /* bit ADON. */ + tmp_hal_status = ADC_ConversionStop_Disable(hadc); + 800d978: 6878 ldr r0, [r7, #4] + 800d97a: f000 fbf1 bl 800e160 + 800d97e: 4603 mov r3, r0 + 800d980: 75fb strb r3, [r7, #23] + + + /* Configuration of ADC parameters if previous preliminary actions are */ + /* correctly completed. */ + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && + 800d982: 687b ldr r3, [r7, #4] + 800d984: 6a9b ldr r3, [r3, #40] @ 0x28 + 800d986: f003 0310 and.w r3, r3, #16 + 800d98a: 2b00 cmp r3, #0 + 800d98c: f040 8099 bne.w 800dac2 + 800d990: 7dfb ldrb r3, [r7, #23] + 800d992: 2b00 cmp r3, #0 + 800d994: f040 8095 bne.w 800dac2 + (tmp_hal_status == HAL_OK) ) + { + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + 800d998: 687b ldr r3, [r7, #4] + 800d99a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800d99c: f423 5388 bic.w r3, r3, #4352 @ 0x1100 + 800d9a0: f023 0302 bic.w r3, r3, #2 + 800d9a4: f043 0202 orr.w r2, r3, #2 + 800d9a8: 687b ldr r3, [r7, #4] + 800d9aa: 629a str r2, [r3, #40] @ 0x28 + /* - continuous conversion mode */ + /* Note: External trigger polarity (ADC_CR2_EXTTRIG) is set into */ + /* HAL_ADC_Start_xxx functions because if set in this function, */ + /* a conversion on injected group would start a conversion also on */ + /* regular group after ADC enabling. */ + tmp_cr2 |= (hadc->Init.DataAlign | + 800d9ac: 687b ldr r3, [r7, #4] + 800d9ae: 685a ldr r2, [r3, #4] + ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | + 800d9b0: 687b ldr r3, [r7, #4] + 800d9b2: 69db ldr r3, [r3, #28] + tmp_cr2 |= (hadc->Init.DataAlign | + 800d9b4: 431a orrs r2, r3 + ADC_CR2_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) ); + 800d9b6: 687b ldr r3, [r7, #4] + 800d9b8: 7b1b ldrb r3, [r3, #12] + 800d9ba: 005b lsls r3, r3, #1 + ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | + 800d9bc: 4313 orrs r3, r2 + tmp_cr2 |= (hadc->Init.DataAlign | + 800d9be: 68ba ldr r2, [r7, #8] + 800d9c0: 4313 orrs r3, r2 + 800d9c2: 60bb str r3, [r7, #8] + + /* Configuration of ADC: */ + /* - scan mode */ + /* - discontinuous mode disable/enable */ + /* - discontinuous mode number of conversions */ + tmp_cr1 |= (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode)); + 800d9c4: 687b ldr r3, [r7, #4] + 800d9c6: 689b ldr r3, [r3, #8] + 800d9c8: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 800d9cc: d003 beq.n 800d9d6 + 800d9ce: 687b ldr r3, [r7, #4] + 800d9d0: 689b ldr r3, [r3, #8] + 800d9d2: 2b01 cmp r3, #1 + 800d9d4: d102 bne.n 800d9dc + 800d9d6: f44f 7380 mov.w r3, #256 @ 0x100 + 800d9da: e000 b.n 800d9de + 800d9dc: 2300 movs r3, #0 + 800d9de: 693a ldr r2, [r7, #16] + 800d9e0: 4313 orrs r3, r2 + 800d9e2: 613b str r3, [r7, #16] + + /* Enable discontinuous mode only if continuous mode is disabled */ + /* Note: If parameter "Init.ScanConvMode" is set to disable, parameter */ + /* discontinuous is set anyway, but will have no effect on ADC HW. */ + if (hadc->Init.DiscontinuousConvMode == ENABLE) + 800d9e4: 687b ldr r3, [r7, #4] + 800d9e6: 7d1b ldrb r3, [r3, #20] + 800d9e8: 2b01 cmp r3, #1 + 800d9ea: d119 bne.n 800da20 + { + if (hadc->Init.ContinuousConvMode == DISABLE) + 800d9ec: 687b ldr r3, [r7, #4] + 800d9ee: 7b1b ldrb r3, [r3, #12] + 800d9f0: 2b00 cmp r3, #0 + 800d9f2: d109 bne.n 800da08 + { + /* Enable the selected ADC regular discontinuous mode */ + /* Set the number of channels to be converted in discontinuous mode */ + SET_BIT(tmp_cr1, ADC_CR1_DISCEN | + 800d9f4: 687b ldr r3, [r7, #4] + 800d9f6: 699b ldr r3, [r3, #24] + 800d9f8: 3b01 subs r3, #1 + 800d9fa: 035a lsls r2, r3, #13 + 800d9fc: 693b ldr r3, [r7, #16] + 800d9fe: 4313 orrs r3, r2 + 800da00: f443 6300 orr.w r3, r3, #2048 @ 0x800 + 800da04: 613b str r3, [r7, #16] + 800da06: e00b b.n 800da20 + { + /* ADC regular group settings continuous and sequencer discontinuous*/ + /* cannot be enabled simultaneously. */ + + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); + 800da08: 687b ldr r3, [r7, #4] + 800da0a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800da0c: f043 0220 orr.w r2, r3, #32 + 800da10: 687b ldr r3, [r7, #4] + 800da12: 629a str r2, [r3, #40] @ 0x28 + + /* Set ADC error code to ADC IP internal error */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + 800da14: 687b ldr r3, [r7, #4] + 800da16: 6adb ldr r3, [r3, #44] @ 0x2c + 800da18: f043 0201 orr.w r2, r3, #1 + 800da1c: 687b ldr r3, [r7, #4] + 800da1e: 62da str r2, [r3, #44] @ 0x2c + } + } + + /* Update ADC configuration register CR1 with previous settings */ + MODIFY_REG(hadc->Instance->CR1, + 800da20: 687b ldr r3, [r7, #4] + 800da22: 681b ldr r3, [r3, #0] + 800da24: 685b ldr r3, [r3, #4] + 800da26: f423 4169 bic.w r1, r3, #59648 @ 0xe900 + 800da2a: 687b ldr r3, [r7, #4] + 800da2c: 681b ldr r3, [r3, #0] + 800da2e: 693a ldr r2, [r7, #16] + 800da30: 430a orrs r2, r1 + 800da32: 605a str r2, [r3, #4] + ADC_CR1_DISCEN | + ADC_CR1_DISCNUM , + tmp_cr1 ); + + /* Update ADC configuration register CR2 with previous settings */ + MODIFY_REG(hadc->Instance->CR2, + 800da34: 687b ldr r3, [r7, #4] + 800da36: 681b ldr r3, [r3, #0] + 800da38: 689a ldr r2, [r3, #8] + 800da3a: 4b28 ldr r3, [pc, #160] @ (800dadc ) + 800da3c: 4013 ands r3, r2 + 800da3e: 687a ldr r2, [r7, #4] + 800da40: 6812 ldr r2, [r2, #0] + 800da42: 68b9 ldr r1, [r7, #8] + 800da44: 430b orrs r3, r1 + 800da46: 6093 str r3, [r2, #8] + /* Note: Scan mode is present by hardware on this device and, if */ + /* disabled, discards automatically nb of conversions. Anyway, nb of */ + /* conversions is forced to 0x00 for alignment over all STM32 devices. */ + /* - if scan mode is enabled, regular channels sequence length is set to */ + /* parameter "NbrOfConversion" */ + if (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode) == ADC_SCAN_ENABLE) + 800da48: 687b ldr r3, [r7, #4] + 800da4a: 689b ldr r3, [r3, #8] + 800da4c: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 800da50: d003 beq.n 800da5a + 800da52: 687b ldr r3, [r7, #4] + 800da54: 689b ldr r3, [r3, #8] + 800da56: 2b01 cmp r3, #1 + 800da58: d104 bne.n 800da64 + { + tmp_sqr1 = ADC_SQR1_L_SHIFT(hadc->Init.NbrOfConversion); + 800da5a: 687b ldr r3, [r7, #4] + 800da5c: 691b ldr r3, [r3, #16] + 800da5e: 3b01 subs r3, #1 + 800da60: 051b lsls r3, r3, #20 + 800da62: 60fb str r3, [r7, #12] + } + + MODIFY_REG(hadc->Instance->SQR1, + 800da64: 687b ldr r3, [r7, #4] + 800da66: 681b ldr r3, [r3, #0] + 800da68: 6adb ldr r3, [r3, #44] @ 0x2c + 800da6a: f423 0170 bic.w r1, r3, #15728640 @ 0xf00000 + 800da6e: 687b ldr r3, [r7, #4] + 800da70: 681b ldr r3, [r3, #0] + 800da72: 68fa ldr r2, [r7, #12] + 800da74: 430a orrs r2, r1 + 800da76: 62da str r2, [r3, #44] @ 0x2c + /* ensure of no potential problem of ADC core IP clocking. */ + /* Check through register CR2 (excluding bits set in other functions: */ + /* execution control bits (ADON, JSWSTART, SWSTART), regular group bits */ + /* (DMA), injected group bits (JEXTTRIG and JEXTSEL), channel internal */ + /* measurement path bit (TSVREFE). */ + if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | + 800da78: 687b ldr r3, [r7, #4] + 800da7a: 681b ldr r3, [r3, #0] + 800da7c: 689a ldr r2, [r3, #8] + 800da7e: 4b18 ldr r3, [pc, #96] @ (800dae0 ) + 800da80: 4013 ands r3, r2 + 800da82: 68ba ldr r2, [r7, #8] + 800da84: 429a cmp r2, r3 + 800da86: d10b bne.n 800daa0 + ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | + ADC_CR2_TSVREFE )) + == tmp_cr2) + { + /* Set ADC error code to none */ + ADC_CLEAR_ERRORCODE(hadc); + 800da88: 687b ldr r3, [r7, #4] + 800da8a: 2200 movs r2, #0 + 800da8c: 62da str r2, [r3, #44] @ 0x2c + + /* Set the ADC state */ + ADC_STATE_CLR_SET(hadc->State, + 800da8e: 687b ldr r3, [r7, #4] + 800da90: 6a9b ldr r3, [r3, #40] @ 0x28 + 800da92: f023 0303 bic.w r3, r3, #3 + 800da96: f043 0201 orr.w r2, r3, #1 + 800da9a: 687b ldr r3, [r7, #4] + 800da9c: 629a str r2, [r3, #40] @ 0x28 + if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | + 800da9e: e018 b.n 800dad2 + HAL_ADC_STATE_READY); + } + else + { + /* Update ADC state machine to error */ + ADC_STATE_CLR_SET(hadc->State, + 800daa0: 687b ldr r3, [r7, #4] + 800daa2: 6a9b ldr r3, [r3, #40] @ 0x28 + 800daa4: f023 0312 bic.w r3, r3, #18 + 800daa8: f043 0210 orr.w r2, r3, #16 + 800daac: 687b ldr r3, [r7, #4] + 800daae: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_ERROR_INTERNAL); + + /* Set ADC error code to ADC IP internal error */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + 800dab0: 687b ldr r3, [r7, #4] + 800dab2: 6adb ldr r3, [r3, #44] @ 0x2c + 800dab4: f043 0201 orr.w r2, r3, #1 + 800dab8: 687b ldr r3, [r7, #4] + 800daba: 62da str r2, [r3, #44] @ 0x2c + + tmp_hal_status = HAL_ERROR; + 800dabc: 2301 movs r3, #1 + 800dabe: 75fb strb r3, [r7, #23] + if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | + 800dac0: e007 b.n 800dad2 + + } + else + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); + 800dac2: 687b ldr r3, [r7, #4] + 800dac4: 6a9b ldr r3, [r3, #40] @ 0x28 + 800dac6: f043 0210 orr.w r2, r3, #16 + 800daca: 687b ldr r3, [r7, #4] + 800dacc: 629a str r2, [r3, #40] @ 0x28 + + tmp_hal_status = HAL_ERROR; + 800dace: 2301 movs r3, #1 + 800dad0: 75fb strb r3, [r7, #23] + } + + /* Return function status */ + return tmp_hal_status; + 800dad2: 7dfb ldrb r3, [r7, #23] +} + 800dad4: 4618 mov r0, r3 + 800dad6: 3718 adds r7, #24 + 800dad8: 46bd mov sp, r7 + 800dada: bd80 pop {r7, pc} + 800dadc: ffe1f7fd .word 0xffe1f7fd + 800dae0: ff1f0efe .word 0xff1f0efe + +0800dae4 : + * Interruptions enabled in this function: None. + * @param hadc: ADC handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) +{ + 800dae4: b580 push {r7, lr} + 800dae6: b084 sub sp, #16 + 800dae8: af00 add r7, sp, #0 + 800daea: 6078 str r0, [r7, #4] + HAL_StatusTypeDef tmp_hal_status = HAL_OK; + 800daec: 2300 movs r3, #0 + 800daee: 73fb strb r3, [r7, #15] + + /* Check the parameters */ + assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); + + /* Process locked */ + __HAL_LOCK(hadc); + 800daf0: 687b ldr r3, [r7, #4] + 800daf2: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 + 800daf6: 2b01 cmp r3, #1 + 800daf8: d101 bne.n 800dafe + 800dafa: 2302 movs r3, #2 + 800dafc: e098 b.n 800dc30 + 800dafe: 687b ldr r3, [r7, #4] + 800db00: 2201 movs r2, #1 + 800db02: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Enable the ADC peripheral */ + tmp_hal_status = ADC_Enable(hadc); + 800db06: 6878 ldr r0, [r7, #4] + 800db08: f000 fad0 bl 800e0ac + 800db0c: 4603 mov r3, r0 + 800db0e: 73fb strb r3, [r7, #15] + + /* Start conversion if ADC is effectively enabled */ + if (tmp_hal_status == HAL_OK) + 800db10: 7bfb ldrb r3, [r7, #15] + 800db12: 2b00 cmp r3, #0 + 800db14: f040 8087 bne.w 800dc26 + { + /* Set ADC state */ + /* - Clear state bitfield related to regular group conversion results */ + /* - Set state bitfield related to regular operation */ + ADC_STATE_CLR_SET(hadc->State, + 800db18: 687b ldr r3, [r7, #4] + 800db1a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800db1c: f423 7340 bic.w r3, r3, #768 @ 0x300 + 800db20: f023 0301 bic.w r3, r3, #1 + 800db24: f443 7280 orr.w r2, r3, #256 @ 0x100 + 800db28: 687b ldr r3, [r7, #4] + 800db2a: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_REG_BUSY); + + /* Set group injected state (from auto-injection) and multimode state */ + /* for all cases of multimode: independent mode, multimode ADC master */ + /* or multimode ADC slave (for devices with several ADCs): */ + if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) + 800db2c: 687b ldr r3, [r7, #4] + 800db2e: 681b ldr r3, [r3, #0] + 800db30: 4a41 ldr r2, [pc, #260] @ (800dc38 ) + 800db32: 4293 cmp r3, r2 + 800db34: d105 bne.n 800db42 + 800db36: 4b41 ldr r3, [pc, #260] @ (800dc3c ) + 800db38: 685b ldr r3, [r3, #4] + 800db3a: f403 2370 and.w r3, r3, #983040 @ 0xf0000 + 800db3e: 2b00 cmp r3, #0 + 800db40: d115 bne.n 800db6e + { + /* Set ADC state (ADC independent or master) */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); + 800db42: 687b ldr r3, [r7, #4] + 800db44: 6a9b ldr r3, [r3, #40] @ 0x28 + 800db46: f423 1280 bic.w r2, r3, #1048576 @ 0x100000 + 800db4a: 687b ldr r3, [r7, #4] + 800db4c: 629a str r2, [r3, #40] @ 0x28 + + /* If conversions on group regular are also triggering group injected, */ + /* update ADC state. */ + if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) + 800db4e: 687b ldr r3, [r7, #4] + 800db50: 681b ldr r3, [r3, #0] + 800db52: 685b ldr r3, [r3, #4] + 800db54: f403 6380 and.w r3, r3, #1024 @ 0x400 + 800db58: 2b00 cmp r3, #0 + 800db5a: d026 beq.n 800dbaa + { + ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); + 800db5c: 687b ldr r3, [r7, #4] + 800db5e: 6a9b ldr r3, [r3, #40] @ 0x28 + 800db60: f423 5340 bic.w r3, r3, #12288 @ 0x3000 + 800db64: f443 5280 orr.w r2, r3, #4096 @ 0x1000 + 800db68: 687b ldr r3, [r7, #4] + 800db6a: 629a str r2, [r3, #40] @ 0x28 + if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) + 800db6c: e01d b.n 800dbaa + } + } + else + { + /* Set ADC state (ADC slave) */ + SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); + 800db6e: 687b ldr r3, [r7, #4] + 800db70: 6a9b ldr r3, [r3, #40] @ 0x28 + 800db72: f443 1280 orr.w r2, r3, #1048576 @ 0x100000 + 800db76: 687b ldr r3, [r7, #4] + 800db78: 629a str r2, [r3, #40] @ 0x28 + + /* If conversions on group regular are also triggering group injected, */ + /* update ADC state. */ + if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) + 800db7a: 687b ldr r3, [r7, #4] + 800db7c: 681b ldr r3, [r3, #0] + 800db7e: 4a2f ldr r2, [pc, #188] @ (800dc3c ) + 800db80: 4293 cmp r3, r2 + 800db82: d004 beq.n 800db8e + 800db84: 687b ldr r3, [r7, #4] + 800db86: 681b ldr r3, [r3, #0] + 800db88: 4a2b ldr r2, [pc, #172] @ (800dc38 ) + 800db8a: 4293 cmp r3, r2 + 800db8c: d10d bne.n 800dbaa + 800db8e: 4b2b ldr r3, [pc, #172] @ (800dc3c ) + 800db90: 685b ldr r3, [r3, #4] + 800db92: f403 6380 and.w r3, r3, #1024 @ 0x400 + 800db96: 2b00 cmp r3, #0 + 800db98: d007 beq.n 800dbaa + { + ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); + 800db9a: 687b ldr r3, [r7, #4] + 800db9c: 6a9b ldr r3, [r3, #40] @ 0x28 + 800db9e: f423 5340 bic.w r3, r3, #12288 @ 0x3000 + 800dba2: f443 5280 orr.w r2, r3, #4096 @ 0x1000 + 800dba6: 687b ldr r3, [r7, #4] + 800dba8: 629a str r2, [r3, #40] @ 0x28 + } + } + + /* State machine update: Check if an injected conversion is ongoing */ + if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + 800dbaa: 687b ldr r3, [r7, #4] + 800dbac: 6a9b ldr r3, [r3, #40] @ 0x28 + 800dbae: f403 5380 and.w r3, r3, #4096 @ 0x1000 + 800dbb2: 2b00 cmp r3, #0 + 800dbb4: d006 beq.n 800dbc4 + { + /* Reset ADC error code fields related to conversions on group regular */ + CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); + 800dbb6: 687b ldr r3, [r7, #4] + 800dbb8: 6adb ldr r3, [r3, #44] @ 0x2c + 800dbba: f023 0206 bic.w r2, r3, #6 + 800dbbe: 687b ldr r3, [r7, #4] + 800dbc0: 62da str r2, [r3, #44] @ 0x2c + 800dbc2: e002 b.n 800dbca + } + else + { + /* Reset ADC all error code fields */ + ADC_CLEAR_ERRORCODE(hadc); + 800dbc4: 687b ldr r3, [r7, #4] + 800dbc6: 2200 movs r2, #0 + 800dbc8: 62da str r2, [r3, #44] @ 0x2c + } + + /* Process unlocked */ + /* Unlock before starting ADC conversions: in case of potential */ + /* interruption, to let the process to ADC IRQ Handler. */ + __HAL_UNLOCK(hadc); + 800dbca: 687b ldr r3, [r7, #4] + 800dbcc: 2200 movs r2, #0 + 800dbce: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Clear regular group conversion flag */ + /* (To ensure of no unknown state from potential previous ADC operations) */ + __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC); + 800dbd2: 687b ldr r3, [r7, #4] + 800dbd4: 681b ldr r3, [r3, #0] + 800dbd6: f06f 0202 mvn.w r2, #2 + 800dbda: 601a str r2, [r3, #0] + /* - if ADC is slave, ADC is enabled only (conversion is not started). */ + /* - if ADC is master, ADC is enabled and conversion is started. */ + /* If ADC is master, ADC is enabled and conversion is started. */ + /* Note: Alternate trigger for single conversion could be to force an */ + /* additional set of bit ADON "hadc->Instance->CR2 |= ADC_CR2_ADON;"*/ + if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && + 800dbdc: 687b ldr r3, [r7, #4] + 800dbde: 681b ldr r3, [r3, #0] + 800dbe0: 689b ldr r3, [r3, #8] + 800dbe2: f403 2360 and.w r3, r3, #917504 @ 0xe0000 + 800dbe6: f5b3 2f60 cmp.w r3, #917504 @ 0xe0000 + 800dbea: d113 bne.n 800dc14 + ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc) ) + 800dbec: 687b ldr r3, [r7, #4] + 800dbee: 681b ldr r3, [r3, #0] + if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && + 800dbf0: 4a11 ldr r2, [pc, #68] @ (800dc38 ) + 800dbf2: 4293 cmp r3, r2 + 800dbf4: d105 bne.n 800dc02 + ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc) ) + 800dbf6: 4b11 ldr r3, [pc, #68] @ (800dc3c ) + 800dbf8: 685b ldr r3, [r3, #4] + 800dbfa: f403 2370 and.w r3, r3, #983040 @ 0xf0000 + if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && + 800dbfe: 2b00 cmp r3, #0 + 800dc00: d108 bne.n 800dc14 + { + /* Start ADC conversion on regular group with SW start */ + SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG)); + 800dc02: 687b ldr r3, [r7, #4] + 800dc04: 681b ldr r3, [r3, #0] + 800dc06: 689a ldr r2, [r3, #8] + 800dc08: 687b ldr r3, [r7, #4] + 800dc0a: 681b ldr r3, [r3, #0] + 800dc0c: f442 02a0 orr.w r2, r2, #5242880 @ 0x500000 + 800dc10: 609a str r2, [r3, #8] + 800dc12: e00c b.n 800dc2e + } + else + { + /* Start ADC conversion on regular group with external trigger */ + SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG); + 800dc14: 687b ldr r3, [r7, #4] + 800dc16: 681b ldr r3, [r3, #0] + 800dc18: 689a ldr r2, [r3, #8] + 800dc1a: 687b ldr r3, [r7, #4] + 800dc1c: 681b ldr r3, [r3, #0] + 800dc1e: f442 1280 orr.w r2, r2, #1048576 @ 0x100000 + 800dc22: 609a str r2, [r3, #8] + 800dc24: e003 b.n 800dc2e + } + } + else + { + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800dc26: 687b ldr r3, [r7, #4] + 800dc28: 2200 movs r2, #0 + 800dc2a: f883 2024 strb.w r2, [r3, #36] @ 0x24 + } + + /* Return function status */ + return tmp_hal_status; + 800dc2e: 7bfb ldrb r3, [r7, #15] +} + 800dc30: 4618 mov r0, r3 + 800dc32: 3710 adds r7, #16 + 800dc34: 46bd mov sp, r7 + 800dc36: bd80 pop {r7, pc} + 800dc38: 40012800 .word 0x40012800 + 800dc3c: 40012400 .word 0x40012400 + +0800dc40 : + * should be preliminarily stopped using HAL_ADCEx_InjectedStop function. + * @param hadc: ADC handle + * @retval HAL status. + */ +HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc) +{ + 800dc40: b580 push {r7, lr} + 800dc42: b084 sub sp, #16 + 800dc44: af00 add r7, sp, #0 + 800dc46: 6078 str r0, [r7, #4] + HAL_StatusTypeDef tmp_hal_status = HAL_OK; + 800dc48: 2300 movs r3, #0 + 800dc4a: 73fb strb r3, [r7, #15] + + /* Check the parameters */ + assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); + + /* Process locked */ + __HAL_LOCK(hadc); + 800dc4c: 687b ldr r3, [r7, #4] + 800dc4e: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 + 800dc52: 2b01 cmp r3, #1 + 800dc54: d101 bne.n 800dc5a + 800dc56: 2302 movs r3, #2 + 800dc58: e01a b.n 800dc90 + 800dc5a: 687b ldr r3, [r7, #4] + 800dc5c: 2201 movs r2, #1 + 800dc5e: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Stop potential conversion on going, on regular and injected groups */ + /* Disable ADC peripheral */ + tmp_hal_status = ADC_ConversionStop_Disable(hadc); + 800dc62: 6878 ldr r0, [r7, #4] + 800dc64: f000 fa7c bl 800e160 + 800dc68: 4603 mov r3, r0 + 800dc6a: 73fb strb r3, [r7, #15] + + /* Check if ADC is effectively disabled */ + if (tmp_hal_status == HAL_OK) + 800dc6c: 7bfb ldrb r3, [r7, #15] + 800dc6e: 2b00 cmp r3, #0 + 800dc70: d109 bne.n 800dc86 + { + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + 800dc72: 687b ldr r3, [r7, #4] + 800dc74: 6a9b ldr r3, [r3, #40] @ 0x28 + 800dc76: f423 5388 bic.w r3, r3, #4352 @ 0x1100 + 800dc7a: f023 0301 bic.w r3, r3, #1 + 800dc7e: f043 0201 orr.w r2, r3, #1 + 800dc82: 687b ldr r3, [r7, #4] + 800dc84: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, + HAL_ADC_STATE_READY); + } + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800dc86: 687b ldr r3, [r7, #4] + 800dc88: 2200 movs r2, #0 + 800dc8a: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Return function status */ + return tmp_hal_status; + 800dc8e: 7bfb ldrb r3, [r7, #15] +} + 800dc90: 4618 mov r0, r3 + 800dc92: 3710 adds r7, #16 + 800dc94: 46bd mov sp, r7 + 800dc96: bd80 pop {r7, pc} + +0800dc98 : + * @param hadc: ADC handle + * @param Timeout: Timeout value in millisecond. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) +{ + 800dc98: b590 push {r4, r7, lr} + 800dc9a: b087 sub sp, #28 + 800dc9c: af00 add r7, sp, #0 + 800dc9e: 6078 str r0, [r7, #4] + 800dca0: 6039 str r1, [r7, #0] + uint32_t tickstart = 0U; + 800dca2: 2300 movs r3, #0 + 800dca4: 617b str r3, [r7, #20] + + /* Variables for polling in case of scan mode enabled and polling for each */ + /* conversion. */ + __IO uint32_t Conversion_Timeout_CPU_cycles = 0U; + 800dca6: 2300 movs r3, #0 + 800dca8: 60fb str r3, [r7, #12] + uint32_t Conversion_Timeout_CPU_cycles_max = 0U; + 800dcaa: 2300 movs r3, #0 + 800dcac: 613b str r3, [r7, #16] + + /* Check the parameters */ + assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); + + /* Get tick count */ + tickstart = HAL_GetTick(); + 800dcae: f7ff fe13 bl 800d8d8 + 800dcb2: 6178 str r0, [r7, #20] + + /* Verification that ADC configuration is compliant with polling for */ + /* each conversion: */ + /* Particular case is ADC configured in DMA mode */ + if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA)) + 800dcb4: 687b ldr r3, [r7, #4] + 800dcb6: 681b ldr r3, [r3, #0] + 800dcb8: 689b ldr r3, [r3, #8] + 800dcba: f403 7380 and.w r3, r3, #256 @ 0x100 + 800dcbe: 2b00 cmp r3, #0 + 800dcc0: d00b beq.n 800dcda + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); + 800dcc2: 687b ldr r3, [r7, #4] + 800dcc4: 6a9b ldr r3, [r3, #40] @ 0x28 + 800dcc6: f043 0220 orr.w r2, r3, #32 + 800dcca: 687b ldr r3, [r7, #4] + 800dccc: 629a str r2, [r3, #40] @ 0x28 + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800dcce: 687b ldr r3, [r7, #4] + 800dcd0: 2200 movs r2, #0 + 800dcd2: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800dcd6: 2301 movs r3, #1 + 800dcd8: e0d3 b.n 800de82 + /* from ADC conversion time (selected sampling time + conversion time of */ + /* 12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on */ + /* settings, conversion time range can be from 28 to 32256 CPU cycles). */ + /* As flag EOC is not set after each conversion, no timeout status can */ + /* be set. */ + if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && + 800dcda: 687b ldr r3, [r7, #4] + 800dcdc: 681b ldr r3, [r3, #0] + 800dcde: 685b ldr r3, [r3, #4] + 800dce0: f403 7380 and.w r3, r3, #256 @ 0x100 + 800dce4: 2b00 cmp r3, #0 + 800dce6: d131 bne.n 800dd4c + HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L) ) + 800dce8: 687b ldr r3, [r7, #4] + 800dcea: 681b ldr r3, [r3, #0] + 800dcec: 6adb ldr r3, [r3, #44] @ 0x2c + 800dcee: f403 0370 and.w r3, r3, #15728640 @ 0xf00000 + if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && + 800dcf2: 2b00 cmp r3, #0 + 800dcf4: d12a bne.n 800dd4c + { + /* Wait until End of Conversion flag is raised */ + while(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) + 800dcf6: e021 b.n 800dd3c + { + /* Check if timeout is disabled (set to infinite wait) */ + if(Timeout != HAL_MAX_DELAY) + 800dcf8: 683b ldr r3, [r7, #0] + 800dcfa: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 800dcfe: d01d beq.n 800dd3c + { + if((Timeout == 0U) || ((HAL_GetTick() - tickstart ) > Timeout)) + 800dd00: 683b ldr r3, [r7, #0] + 800dd02: 2b00 cmp r3, #0 + 800dd04: d007 beq.n 800dd16 + 800dd06: f7ff fde7 bl 800d8d8 + 800dd0a: 4602 mov r2, r0 + 800dd0c: 697b ldr r3, [r7, #20] + 800dd0e: 1ad3 subs r3, r2, r3 + 800dd10: 683a ldr r2, [r7, #0] + 800dd12: 429a cmp r2, r3 + 800dd14: d212 bcs.n 800dd3c + { + /* New check to avoid false timeout detection in case of preemption */ + if(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) + 800dd16: 687b ldr r3, [r7, #4] + 800dd18: 681b ldr r3, [r3, #0] + 800dd1a: 681b ldr r3, [r3, #0] + 800dd1c: f003 0302 and.w r3, r3, #2 + 800dd20: 2b00 cmp r3, #0 + 800dd22: d10b bne.n 800dd3c + { + /* Update ADC state machine to timeout */ + SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); + 800dd24: 687b ldr r3, [r7, #4] + 800dd26: 6a9b ldr r3, [r3, #40] @ 0x28 + 800dd28: f043 0204 orr.w r2, r3, #4 + 800dd2c: 687b ldr r3, [r7, #4] + 800dd2e: 629a str r2, [r3, #40] @ 0x28 + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800dd30: 687b ldr r3, [r7, #4] + 800dd32: 2200 movs r2, #0 + 800dd34: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_TIMEOUT; + 800dd38: 2303 movs r3, #3 + 800dd3a: e0a2 b.n 800de82 + while(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) + 800dd3c: 687b ldr r3, [r7, #4] + 800dd3e: 681b ldr r3, [r3, #0] + 800dd40: 681b ldr r3, [r3, #0] + 800dd42: f003 0302 and.w r3, r3, #2 + 800dd46: 2b00 cmp r3, #0 + 800dd48: d0d6 beq.n 800dcf8 + if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && + 800dd4a: e070 b.n 800de2e + /* Replace polling by wait for maximum conversion time */ + /* - Computation of CPU clock cycles corresponding to ADC clock cycles */ + /* and ADC maximum conversion cycles on all channels. */ + /* - Wait for the expected ADC clock cycles delay */ + Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock + / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) + 800dd4c: 4b4f ldr r3, [pc, #316] @ (800de8c ) + 800dd4e: 681c ldr r4, [r3, #0] + 800dd50: 2002 movs r0, #2 + 800dd52: f002 fd05 bl 8010760 + 800dd56: 4603 mov r3, r0 + 800dd58: fbb4 f2f3 udiv r2, r4, r3 + * ADC_CONVCYCLES_MAX_RANGE(hadc) ); + 800dd5c: 687b ldr r3, [r7, #4] + 800dd5e: 681b ldr r3, [r3, #0] + 800dd60: 6919 ldr r1, [r3, #16] + 800dd62: 4b4b ldr r3, [pc, #300] @ (800de90 ) + 800dd64: 400b ands r3, r1 + 800dd66: 2b00 cmp r3, #0 + 800dd68: d118 bne.n 800dd9c + 800dd6a: 687b ldr r3, [r7, #4] + 800dd6c: 681b ldr r3, [r3, #0] + 800dd6e: 68d9 ldr r1, [r3, #12] + 800dd70: 4b48 ldr r3, [pc, #288] @ (800de94 ) + 800dd72: 400b ands r3, r1 + 800dd74: 2b00 cmp r3, #0 + 800dd76: d111 bne.n 800dd9c + 800dd78: 687b ldr r3, [r7, #4] + 800dd7a: 681b ldr r3, [r3, #0] + 800dd7c: 6919 ldr r1, [r3, #16] + 800dd7e: 4b46 ldr r3, [pc, #280] @ (800de98 ) + 800dd80: 400b ands r3, r1 + 800dd82: 2b00 cmp r3, #0 + 800dd84: d108 bne.n 800dd98 + 800dd86: 687b ldr r3, [r7, #4] + 800dd88: 681b ldr r3, [r3, #0] + 800dd8a: 68d9 ldr r1, [r3, #12] + 800dd8c: 4b43 ldr r3, [pc, #268] @ (800de9c ) + 800dd8e: 400b ands r3, r1 + 800dd90: 2b00 cmp r3, #0 + 800dd92: d101 bne.n 800dd98 + 800dd94: 2314 movs r3, #20 + 800dd96: e020 b.n 800ddda + 800dd98: 2329 movs r3, #41 @ 0x29 + 800dd9a: e01e b.n 800ddda + 800dd9c: 687b ldr r3, [r7, #4] + 800dd9e: 681b ldr r3, [r3, #0] + 800dda0: 6919 ldr r1, [r3, #16] + 800dda2: 4b3d ldr r3, [pc, #244] @ (800de98 ) + 800dda4: 400b ands r3, r1 + 800dda6: 2b00 cmp r3, #0 + 800dda8: d106 bne.n 800ddb8 + 800ddaa: 687b ldr r3, [r7, #4] + 800ddac: 681b ldr r3, [r3, #0] + 800ddae: 68d9 ldr r1, [r3, #12] + 800ddb0: 4b3a ldr r3, [pc, #232] @ (800de9c ) + 800ddb2: 400b ands r3, r1 + 800ddb4: 2b00 cmp r3, #0 + 800ddb6: d00d beq.n 800ddd4 + 800ddb8: 687b ldr r3, [r7, #4] + 800ddba: 681b ldr r3, [r3, #0] + 800ddbc: 6919 ldr r1, [r3, #16] + 800ddbe: 4b38 ldr r3, [pc, #224] @ (800dea0 ) + 800ddc0: 400b ands r3, r1 + 800ddc2: 2b00 cmp r3, #0 + 800ddc4: d108 bne.n 800ddd8 + 800ddc6: 687b ldr r3, [r7, #4] + 800ddc8: 681b ldr r3, [r3, #0] + 800ddca: 68d9 ldr r1, [r3, #12] + 800ddcc: 4b34 ldr r3, [pc, #208] @ (800dea0 ) + 800ddce: 400b ands r3, r1 + 800ddd0: 2b00 cmp r3, #0 + 800ddd2: d101 bne.n 800ddd8 + 800ddd4: 2354 movs r3, #84 @ 0x54 + 800ddd6: e000 b.n 800ddda + 800ddd8: 23fc movs r3, #252 @ 0xfc + Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock + 800ddda: fb02 f303 mul.w r3, r2, r3 + 800ddde: 613b str r3, [r7, #16] + + while(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) + 800dde0: e021 b.n 800de26 + { + /* Check if timeout is disabled (set to infinite wait) */ + if(Timeout != HAL_MAX_DELAY) + 800dde2: 683b ldr r3, [r7, #0] + 800dde4: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 800dde8: d01a beq.n 800de20 + { + if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) + 800ddea: 683b ldr r3, [r7, #0] + 800ddec: 2b00 cmp r3, #0 + 800ddee: d007 beq.n 800de00 + 800ddf0: f7ff fd72 bl 800d8d8 + 800ddf4: 4602 mov r2, r0 + 800ddf6: 697b ldr r3, [r7, #20] + 800ddf8: 1ad3 subs r3, r2, r3 + 800ddfa: 683a ldr r2, [r7, #0] + 800ddfc: 429a cmp r2, r3 + 800ddfe: d20f bcs.n 800de20 + { + /* New check to avoid false timeout detection in case of preemption */ + if(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) + 800de00: 68fb ldr r3, [r7, #12] + 800de02: 693a ldr r2, [r7, #16] + 800de04: 429a cmp r2, r3 + 800de06: d90b bls.n 800de20 + { + /* Update ADC state machine to timeout */ + SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); + 800de08: 687b ldr r3, [r7, #4] + 800de0a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800de0c: f043 0204 orr.w r2, r3, #4 + 800de10: 687b ldr r3, [r7, #4] + 800de12: 629a str r2, [r3, #40] @ 0x28 + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800de14: 687b ldr r3, [r7, #4] + 800de16: 2200 movs r2, #0 + 800de18: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_TIMEOUT; + 800de1c: 2303 movs r3, #3 + 800de1e: e030 b.n 800de82 + } + } + } + Conversion_Timeout_CPU_cycles ++; + 800de20: 68fb ldr r3, [r7, #12] + 800de22: 3301 adds r3, #1 + 800de24: 60fb str r3, [r7, #12] + while(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) + 800de26: 68fb ldr r3, [r7, #12] + 800de28: 693a ldr r2, [r7, #16] + 800de2a: 429a cmp r2, r3 + 800de2c: d8d9 bhi.n 800dde2 + } + } + + /* Clear regular group conversion flag */ + __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC); + 800de2e: 687b ldr r3, [r7, #4] + 800de30: 681b ldr r3, [r3, #0] + 800de32: f06f 0212 mvn.w r2, #18 + 800de36: 601a str r2, [r3, #0] + + /* Update ADC state machine */ + SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); + 800de38: 687b ldr r3, [r7, #4] + 800de3a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800de3c: f443 7200 orr.w r2, r3, #512 @ 0x200 + 800de40: 687b ldr r3, [r7, #4] + 800de42: 629a str r2, [r3, #40] @ 0x28 + /* Determine whether any further conversion upcoming on group regular */ + /* by external trigger, continuous mode or scan sequence on going. */ + /* Note: On STM32F1 devices, in case of sequencer enabled */ + /* (several ranks selected), end of conversion flag is raised */ + /* at the end of the sequence. */ + if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && + 800de44: 687b ldr r3, [r7, #4] + 800de46: 681b ldr r3, [r3, #0] + 800de48: 689b ldr r3, [r3, #8] + 800de4a: f403 2360 and.w r3, r3, #917504 @ 0xe0000 + 800de4e: f5b3 2f60 cmp.w r3, #917504 @ 0xe0000 + 800de52: d115 bne.n 800de80 + (hadc->Init.ContinuousConvMode == DISABLE) ) + 800de54: 687b ldr r3, [r7, #4] + 800de56: 7b1b ldrb r3, [r3, #12] + if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && + 800de58: 2b00 cmp r3, #0 + 800de5a: d111 bne.n 800de80 + { + /* Set ADC state */ + CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); + 800de5c: 687b ldr r3, [r7, #4] + 800de5e: 6a9b ldr r3, [r3, #40] @ 0x28 + 800de60: f423 7280 bic.w r2, r3, #256 @ 0x100 + 800de64: 687b ldr r3, [r7, #4] + 800de66: 629a str r2, [r3, #40] @ 0x28 + + if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) + 800de68: 687b ldr r3, [r7, #4] + 800de6a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800de6c: f403 5380 and.w r3, r3, #4096 @ 0x1000 + 800de70: 2b00 cmp r3, #0 + 800de72: d105 bne.n 800de80 + { + SET_BIT(hadc->State, HAL_ADC_STATE_READY); + 800de74: 687b ldr r3, [r7, #4] + 800de76: 6a9b ldr r3, [r3, #40] @ 0x28 + 800de78: f043 0201 orr.w r2, r3, #1 + 800de7c: 687b ldr r3, [r7, #4] + 800de7e: 629a str r2, [r3, #40] @ 0x28 + } + } + + /* Return ADC state */ + return HAL_OK; + 800de80: 2300 movs r3, #0 +} + 800de82: 4618 mov r0, r3 + 800de84: 371c adds r7, #28 + 800de86: 46bd mov sp, r7 + 800de88: bd90 pop {r4, r7, pc} + 800de8a: bf00 nop + 800de8c: 2000006c .word 0x2000006c + 800de90: 24924924 .word 0x24924924 + 800de94: 00924924 .word 0x00924924 + 800de98: 12492492 .word 0x12492492 + 800de9c: 00492492 .word 0x00492492 + 800dea0: 00249249 .word 0x00249249 + +0800dea4 : + * or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS). + * @param hadc: ADC handle + * @retval ADC group regular conversion data + */ +uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) +{ + 800dea4: b480 push {r7} + 800dea6: b083 sub sp, #12 + 800dea8: af00 add r7, sp, #0 + 800deaa: 6078 str r0, [r7, #4] + + /* Note: EOC flag is not cleared here by software because automatically */ + /* cleared by hardware when reading register DR. */ + + /* Return ADC converted value */ + return hadc->Instance->DR; + 800deac: 687b ldr r3, [r7, #4] + 800deae: 681b ldr r3, [r3, #0] + 800deb0: 6cdb ldr r3, [r3, #76] @ 0x4c +} + 800deb2: 4618 mov r0, r3 + 800deb4: 370c adds r7, #12 + 800deb6: 46bd mov sp, r7 + 800deb8: bc80 pop {r7} + 800deba: 4770 bx lr + +0800debc : + * @param hadc: ADC handle + * @param sConfig: Structure of ADC channel for regular group. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig) +{ + 800debc: b480 push {r7} + 800debe: b085 sub sp, #20 + 800dec0: af00 add r7, sp, #0 + 800dec2: 6078 str r0, [r7, #4] + 800dec4: 6039 str r1, [r7, #0] + HAL_StatusTypeDef tmp_hal_status = HAL_OK; + 800dec6: 2300 movs r3, #0 + 800dec8: 73fb strb r3, [r7, #15] + __IO uint32_t wait_loop_index = 0U; + 800deca: 2300 movs r3, #0 + 800decc: 60bb str r3, [r7, #8] + assert_param(IS_ADC_CHANNEL(sConfig->Channel)); + assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank)); + assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime)); + + /* Process locked */ + __HAL_LOCK(hadc); + 800dece: 687b ldr r3, [r7, #4] + 800ded0: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 + 800ded4: 2b01 cmp r3, #1 + 800ded6: d101 bne.n 800dedc + 800ded8: 2302 movs r3, #2 + 800deda: e0dc b.n 800e096 + 800dedc: 687b ldr r3, [r7, #4] + 800dede: 2201 movs r2, #1 + 800dee0: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + + /* Regular sequence configuration */ + /* For Rank 1 to 6 */ + if (sConfig->Rank < 7U) + 800dee4: 683b ldr r3, [r7, #0] + 800dee6: 685b ldr r3, [r3, #4] + 800dee8: 2b06 cmp r3, #6 + 800deea: d81c bhi.n 800df26 + { + MODIFY_REG(hadc->Instance->SQR3 , + 800deec: 687b ldr r3, [r7, #4] + 800deee: 681b ldr r3, [r3, #0] + 800def0: 6b59 ldr r1, [r3, #52] @ 0x34 + 800def2: 683b ldr r3, [r7, #0] + 800def4: 685a ldr r2, [r3, #4] + 800def6: 4613 mov r3, r2 + 800def8: 009b lsls r3, r3, #2 + 800defa: 4413 add r3, r2 + 800defc: 3b05 subs r3, #5 + 800defe: 221f movs r2, #31 + 800df00: fa02 f303 lsl.w r3, r2, r3 + 800df04: 43db mvns r3, r3 + 800df06: 4019 ands r1, r3 + 800df08: 683b ldr r3, [r7, #0] + 800df0a: 6818 ldr r0, [r3, #0] + 800df0c: 683b ldr r3, [r7, #0] + 800df0e: 685a ldr r2, [r3, #4] + 800df10: 4613 mov r3, r2 + 800df12: 009b lsls r3, r3, #2 + 800df14: 4413 add r3, r2 + 800df16: 3b05 subs r3, #5 + 800df18: fa00 f203 lsl.w r2, r0, r3 + 800df1c: 687b ldr r3, [r7, #4] + 800df1e: 681b ldr r3, [r3, #0] + 800df20: 430a orrs r2, r1 + 800df22: 635a str r2, [r3, #52] @ 0x34 + 800df24: e03c b.n 800dfa0 + ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank) , + ADC_SQR3_RK(sConfig->Channel, sConfig->Rank) ); + } + /* For Rank 7 to 12 */ + else if (sConfig->Rank < 13U) + 800df26: 683b ldr r3, [r7, #0] + 800df28: 685b ldr r3, [r3, #4] + 800df2a: 2b0c cmp r3, #12 + 800df2c: d81c bhi.n 800df68 + { + MODIFY_REG(hadc->Instance->SQR2 , + 800df2e: 687b ldr r3, [r7, #4] + 800df30: 681b ldr r3, [r3, #0] + 800df32: 6b19 ldr r1, [r3, #48] @ 0x30 + 800df34: 683b ldr r3, [r7, #0] + 800df36: 685a ldr r2, [r3, #4] + 800df38: 4613 mov r3, r2 + 800df3a: 009b lsls r3, r3, #2 + 800df3c: 4413 add r3, r2 + 800df3e: 3b23 subs r3, #35 @ 0x23 + 800df40: 221f movs r2, #31 + 800df42: fa02 f303 lsl.w r3, r2, r3 + 800df46: 43db mvns r3, r3 + 800df48: 4019 ands r1, r3 + 800df4a: 683b ldr r3, [r7, #0] + 800df4c: 6818 ldr r0, [r3, #0] + 800df4e: 683b ldr r3, [r7, #0] + 800df50: 685a ldr r2, [r3, #4] + 800df52: 4613 mov r3, r2 + 800df54: 009b lsls r3, r3, #2 + 800df56: 4413 add r3, r2 + 800df58: 3b23 subs r3, #35 @ 0x23 + 800df5a: fa00 f203 lsl.w r2, r0, r3 + 800df5e: 687b ldr r3, [r7, #4] + 800df60: 681b ldr r3, [r3, #0] + 800df62: 430a orrs r2, r1 + 800df64: 631a str r2, [r3, #48] @ 0x30 + 800df66: e01b b.n 800dfa0 + ADC_SQR2_RK(sConfig->Channel, sConfig->Rank) ); + } + /* For Rank 13 to 16 */ + else + { + MODIFY_REG(hadc->Instance->SQR1 , + 800df68: 687b ldr r3, [r7, #4] + 800df6a: 681b ldr r3, [r3, #0] + 800df6c: 6ad9 ldr r1, [r3, #44] @ 0x2c + 800df6e: 683b ldr r3, [r7, #0] + 800df70: 685a ldr r2, [r3, #4] + 800df72: 4613 mov r3, r2 + 800df74: 009b lsls r3, r3, #2 + 800df76: 4413 add r3, r2 + 800df78: 3b41 subs r3, #65 @ 0x41 + 800df7a: 221f movs r2, #31 + 800df7c: fa02 f303 lsl.w r3, r2, r3 + 800df80: 43db mvns r3, r3 + 800df82: 4019 ands r1, r3 + 800df84: 683b ldr r3, [r7, #0] + 800df86: 6818 ldr r0, [r3, #0] + 800df88: 683b ldr r3, [r7, #0] + 800df8a: 685a ldr r2, [r3, #4] + 800df8c: 4613 mov r3, r2 + 800df8e: 009b lsls r3, r3, #2 + 800df90: 4413 add r3, r2 + 800df92: 3b41 subs r3, #65 @ 0x41 + 800df94: fa00 f203 lsl.w r2, r0, r3 + 800df98: 687b ldr r3, [r7, #4] + 800df9a: 681b ldr r3, [r3, #0] + 800df9c: 430a orrs r2, r1 + 800df9e: 62da str r2, [r3, #44] @ 0x2c + } + + + /* Channel sampling time configuration */ + /* For channels 10 to 17 */ + if (sConfig->Channel >= ADC_CHANNEL_10) + 800dfa0: 683b ldr r3, [r7, #0] + 800dfa2: 681b ldr r3, [r3, #0] + 800dfa4: 2b09 cmp r3, #9 + 800dfa6: d91c bls.n 800dfe2 + { + MODIFY_REG(hadc->Instance->SMPR1 , + 800dfa8: 687b ldr r3, [r7, #4] + 800dfaa: 681b ldr r3, [r3, #0] + 800dfac: 68d9 ldr r1, [r3, #12] + 800dfae: 683b ldr r3, [r7, #0] + 800dfb0: 681a ldr r2, [r3, #0] + 800dfb2: 4613 mov r3, r2 + 800dfb4: 005b lsls r3, r3, #1 + 800dfb6: 4413 add r3, r2 + 800dfb8: 3b1e subs r3, #30 + 800dfba: 2207 movs r2, #7 + 800dfbc: fa02 f303 lsl.w r3, r2, r3 + 800dfc0: 43db mvns r3, r3 + 800dfc2: 4019 ands r1, r3 + 800dfc4: 683b ldr r3, [r7, #0] + 800dfc6: 6898 ldr r0, [r3, #8] + 800dfc8: 683b ldr r3, [r7, #0] + 800dfca: 681a ldr r2, [r3, #0] + 800dfcc: 4613 mov r3, r2 + 800dfce: 005b lsls r3, r3, #1 + 800dfd0: 4413 add r3, r2 + 800dfd2: 3b1e subs r3, #30 + 800dfd4: fa00 f203 lsl.w r2, r0, r3 + 800dfd8: 687b ldr r3, [r7, #4] + 800dfda: 681b ldr r3, [r3, #0] + 800dfdc: 430a orrs r2, r1 + 800dfde: 60da str r2, [r3, #12] + 800dfe0: e019 b.n 800e016 + ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel) , + ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel) ); + } + else /* For channels 0 to 9 */ + { + MODIFY_REG(hadc->Instance->SMPR2 , + 800dfe2: 687b ldr r3, [r7, #4] + 800dfe4: 681b ldr r3, [r3, #0] + 800dfe6: 6919 ldr r1, [r3, #16] + 800dfe8: 683b ldr r3, [r7, #0] + 800dfea: 681a ldr r2, [r3, #0] + 800dfec: 4613 mov r3, r2 + 800dfee: 005b lsls r3, r3, #1 + 800dff0: 4413 add r3, r2 + 800dff2: 2207 movs r2, #7 + 800dff4: fa02 f303 lsl.w r3, r2, r3 + 800dff8: 43db mvns r3, r3 + 800dffa: 4019 ands r1, r3 + 800dffc: 683b ldr r3, [r7, #0] + 800dffe: 6898 ldr r0, [r3, #8] + 800e000: 683b ldr r3, [r7, #0] + 800e002: 681a ldr r2, [r3, #0] + 800e004: 4613 mov r3, r2 + 800e006: 005b lsls r3, r3, #1 + 800e008: 4413 add r3, r2 + 800e00a: fa00 f203 lsl.w r2, r0, r3 + 800e00e: 687b ldr r3, [r7, #4] + 800e010: 681b ldr r3, [r3, #0] + 800e012: 430a orrs r2, r1 + 800e014: 611a str r2, [r3, #16] + ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel) ); + } + + /* If ADC1 Channel_16 or Channel_17 is selected, enable Temperature sensor */ + /* and VREFINT measurement path. */ + if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || + 800e016: 683b ldr r3, [r7, #0] + 800e018: 681b ldr r3, [r3, #0] + 800e01a: 2b10 cmp r3, #16 + 800e01c: d003 beq.n 800e026 + (sConfig->Channel == ADC_CHANNEL_VREFINT) ) + 800e01e: 683b ldr r3, [r7, #0] + 800e020: 681b ldr r3, [r3, #0] + if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || + 800e022: 2b11 cmp r3, #17 + 800e024: d132 bne.n 800e08c + { + /* For STM32F1 devices with several ADC: Only ADC1 can access internal */ + /* measurement channels (VrefInt/TempSensor). If these channels are */ + /* intended to be set on other ADC instances, an error is reported. */ + if (hadc->Instance == ADC1) + 800e026: 687b ldr r3, [r7, #4] + 800e028: 681b ldr r3, [r3, #0] + 800e02a: 4a1d ldr r2, [pc, #116] @ (800e0a0 ) + 800e02c: 4293 cmp r3, r2 + 800e02e: d125 bne.n 800e07c + { + if (READ_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE) == RESET) + 800e030: 687b ldr r3, [r7, #4] + 800e032: 681b ldr r3, [r3, #0] + 800e034: 689b ldr r3, [r3, #8] + 800e036: f403 0300 and.w r3, r3, #8388608 @ 0x800000 + 800e03a: 2b00 cmp r3, #0 + 800e03c: d126 bne.n 800e08c + { + SET_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE); + 800e03e: 687b ldr r3, [r7, #4] + 800e040: 681b ldr r3, [r3, #0] + 800e042: 689a ldr r2, [r3, #8] + 800e044: 687b ldr r3, [r7, #4] + 800e046: 681b ldr r3, [r3, #0] + 800e048: f442 0200 orr.w r2, r2, #8388608 @ 0x800000 + 800e04c: 609a str r2, [r3, #8] + + if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) + 800e04e: 683b ldr r3, [r7, #0] + 800e050: 681b ldr r3, [r3, #0] + 800e052: 2b10 cmp r3, #16 + 800e054: d11a bne.n 800e08c + { + /* Delay for temperature sensor stabilization time */ + /* Compute number of CPU cycles to wait for */ + wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U)); + 800e056: 4b13 ldr r3, [pc, #76] @ (800e0a4 ) + 800e058: 681b ldr r3, [r3, #0] + 800e05a: 4a13 ldr r2, [pc, #76] @ (800e0a8 ) + 800e05c: fba2 2303 umull r2, r3, r2, r3 + 800e060: 0c9a lsrs r2, r3, #18 + 800e062: 4613 mov r3, r2 + 800e064: 009b lsls r3, r3, #2 + 800e066: 4413 add r3, r2 + 800e068: 005b lsls r3, r3, #1 + 800e06a: 60bb str r3, [r7, #8] + while(wait_loop_index != 0U) + 800e06c: e002 b.n 800e074 + { + wait_loop_index--; + 800e06e: 68bb ldr r3, [r7, #8] + 800e070: 3b01 subs r3, #1 + 800e072: 60bb str r3, [r7, #8] + while(wait_loop_index != 0U) + 800e074: 68bb ldr r3, [r7, #8] + 800e076: 2b00 cmp r3, #0 + 800e078: d1f9 bne.n 800e06e + 800e07a: e007 b.n 800e08c + } + } + else + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); + 800e07c: 687b ldr r3, [r7, #4] + 800e07e: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e080: f043 0220 orr.w r2, r3, #32 + 800e084: 687b ldr r3, [r7, #4] + 800e086: 629a str r2, [r3, #40] @ 0x28 + + tmp_hal_status = HAL_ERROR; + 800e088: 2301 movs r3, #1 + 800e08a: 73fb strb r3, [r7, #15] + } + } + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800e08c: 687b ldr r3, [r7, #4] + 800e08e: 2200 movs r2, #0 + 800e090: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Return function status */ + return tmp_hal_status; + 800e094: 7bfb ldrb r3, [r7, #15] +} + 800e096: 4618 mov r0, r3 + 800e098: 3714 adds r7, #20 + 800e09a: 46bd mov sp, r7 + 800e09c: bc80 pop {r7} + 800e09e: 4770 bx lr + 800e0a0: 40012400 .word 0x40012400 + 800e0a4: 2000006c .word 0x2000006c + 800e0a8: 431bde83 .word 0x431bde83 + +0800e0ac : + * and voltage regulator must be enabled (done into HAL_ADC_Init()). + * @param hadc: ADC handle + * @retval HAL status. + */ +HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc) +{ + 800e0ac: b580 push {r7, lr} + 800e0ae: b084 sub sp, #16 + 800e0b0: af00 add r7, sp, #0 + 800e0b2: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 800e0b4: 2300 movs r3, #0 + 800e0b6: 60fb str r3, [r7, #12] + __IO uint32_t wait_loop_index = 0U; + 800e0b8: 2300 movs r3, #0 + 800e0ba: 60bb str r3, [r7, #8] + + /* ADC enable and wait for ADC ready (in case of ADC is disabled or */ + /* enabling phase not yet completed: flag ADC ready not yet set). */ + /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */ + /* causes: ADC clock not running, ...). */ + if (ADC_IS_ENABLE(hadc) == RESET) + 800e0bc: 687b ldr r3, [r7, #4] + 800e0be: 681b ldr r3, [r3, #0] + 800e0c0: 689b ldr r3, [r3, #8] + 800e0c2: f003 0301 and.w r3, r3, #1 + 800e0c6: 2b01 cmp r3, #1 + 800e0c8: d040 beq.n 800e14c + { + /* Enable the Peripheral */ + __HAL_ADC_ENABLE(hadc); + 800e0ca: 687b ldr r3, [r7, #4] + 800e0cc: 681b ldr r3, [r3, #0] + 800e0ce: 689a ldr r2, [r3, #8] + 800e0d0: 687b ldr r3, [r7, #4] + 800e0d2: 681b ldr r3, [r3, #0] + 800e0d4: f042 0201 orr.w r2, r2, #1 + 800e0d8: 609a str r2, [r3, #8] + + /* Delay for ADC stabilization time */ + /* Compute number of CPU cycles to wait for */ + wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); + 800e0da: 4b1f ldr r3, [pc, #124] @ (800e158 ) + 800e0dc: 681b ldr r3, [r3, #0] + 800e0de: 4a1f ldr r2, [pc, #124] @ (800e15c ) + 800e0e0: fba2 2303 umull r2, r3, r2, r3 + 800e0e4: 0c9b lsrs r3, r3, #18 + 800e0e6: 60bb str r3, [r7, #8] + while(wait_loop_index != 0U) + 800e0e8: e002 b.n 800e0f0 + { + wait_loop_index--; + 800e0ea: 68bb ldr r3, [r7, #8] + 800e0ec: 3b01 subs r3, #1 + 800e0ee: 60bb str r3, [r7, #8] + while(wait_loop_index != 0U) + 800e0f0: 68bb ldr r3, [r7, #8] + 800e0f2: 2b00 cmp r3, #0 + 800e0f4: d1f9 bne.n 800e0ea + } + + /* Get tick count */ + tickstart = HAL_GetTick(); + 800e0f6: f7ff fbef bl 800d8d8 + 800e0fa: 60f8 str r0, [r7, #12] + + /* Wait for ADC effectively enabled */ + while(ADC_IS_ENABLE(hadc) == RESET) + 800e0fc: e01f b.n 800e13e + { + if((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) + 800e0fe: f7ff fbeb bl 800d8d8 + 800e102: 4602 mov r2, r0 + 800e104: 68fb ldr r3, [r7, #12] + 800e106: 1ad3 subs r3, r2, r3 + 800e108: 2b02 cmp r3, #2 + 800e10a: d918 bls.n 800e13e + { + /* New check to avoid false timeout detection in case of preemption */ + if(ADC_IS_ENABLE(hadc) == RESET) + 800e10c: 687b ldr r3, [r7, #4] + 800e10e: 681b ldr r3, [r3, #0] + 800e110: 689b ldr r3, [r3, #8] + 800e112: f003 0301 and.w r3, r3, #1 + 800e116: 2b01 cmp r3, #1 + 800e118: d011 beq.n 800e13e + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); + 800e11a: 687b ldr r3, [r7, #4] + 800e11c: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e11e: f043 0210 orr.w r2, r3, #16 + 800e122: 687b ldr r3, [r7, #4] + 800e124: 629a str r2, [r3, #40] @ 0x28 + + /* Set ADC error code to ADC IP internal error */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + 800e126: 687b ldr r3, [r7, #4] + 800e128: 6adb ldr r3, [r3, #44] @ 0x2c + 800e12a: f043 0201 orr.w r2, r3, #1 + 800e12e: 687b ldr r3, [r7, #4] + 800e130: 62da str r2, [r3, #44] @ 0x2c + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800e132: 687b ldr r3, [r7, #4] + 800e134: 2200 movs r2, #0 + 800e136: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e13a: 2301 movs r3, #1 + 800e13c: e007 b.n 800e14e + while(ADC_IS_ENABLE(hadc) == RESET) + 800e13e: 687b ldr r3, [r7, #4] + 800e140: 681b ldr r3, [r3, #0] + 800e142: 689b ldr r3, [r3, #8] + 800e144: f003 0301 and.w r3, r3, #1 + 800e148: 2b01 cmp r3, #1 + 800e14a: d1d8 bne.n 800e0fe + } + } + } + + /* Return HAL status */ + return HAL_OK; + 800e14c: 2300 movs r3, #0 +} + 800e14e: 4618 mov r0, r3 + 800e150: 3710 adds r7, #16 + 800e152: 46bd mov sp, r7 + 800e154: bd80 pop {r7, pc} + 800e156: bf00 nop + 800e158: 2000006c .word 0x2000006c + 800e15c: 431bde83 .word 0x431bde83 + +0800e160 : + * stopped to disable the ADC. + * @param hadc: ADC handle + * @retval HAL status. + */ +HAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef* hadc) +{ + 800e160: b580 push {r7, lr} + 800e162: b084 sub sp, #16 + 800e164: af00 add r7, sp, #0 + 800e166: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 800e168: 2300 movs r3, #0 + 800e16a: 60fb str r3, [r7, #12] + + /* Verification if ADC is not already disabled */ + if (ADC_IS_ENABLE(hadc) != RESET) + 800e16c: 687b ldr r3, [r7, #4] + 800e16e: 681b ldr r3, [r3, #0] + 800e170: 689b ldr r3, [r3, #8] + 800e172: f003 0301 and.w r3, r3, #1 + 800e176: 2b01 cmp r3, #1 + 800e178: d12e bne.n 800e1d8 + { + /* Disable the ADC peripheral */ + __HAL_ADC_DISABLE(hadc); + 800e17a: 687b ldr r3, [r7, #4] + 800e17c: 681b ldr r3, [r3, #0] + 800e17e: 689a ldr r2, [r3, #8] + 800e180: 687b ldr r3, [r7, #4] + 800e182: 681b ldr r3, [r3, #0] + 800e184: f022 0201 bic.w r2, r2, #1 + 800e188: 609a str r2, [r3, #8] + + /* Get tick count */ + tickstart = HAL_GetTick(); + 800e18a: f7ff fba5 bl 800d8d8 + 800e18e: 60f8 str r0, [r7, #12] + + /* Wait for ADC effectively disabled */ + while(ADC_IS_ENABLE(hadc) != RESET) + 800e190: e01b b.n 800e1ca + { + if((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT) + 800e192: f7ff fba1 bl 800d8d8 + 800e196: 4602 mov r2, r0 + 800e198: 68fb ldr r3, [r7, #12] + 800e19a: 1ad3 subs r3, r2, r3 + 800e19c: 2b02 cmp r3, #2 + 800e19e: d914 bls.n 800e1ca + { + /* New check to avoid false timeout detection in case of preemption */ + if(ADC_IS_ENABLE(hadc) != RESET) + 800e1a0: 687b ldr r3, [r7, #4] + 800e1a2: 681b ldr r3, [r3, #0] + 800e1a4: 689b ldr r3, [r3, #8] + 800e1a6: f003 0301 and.w r3, r3, #1 + 800e1aa: 2b01 cmp r3, #1 + 800e1ac: d10d bne.n 800e1ca + { + /* Update ADC state machine to error */ + SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); + 800e1ae: 687b ldr r3, [r7, #4] + 800e1b0: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e1b2: f043 0210 orr.w r2, r3, #16 + 800e1b6: 687b ldr r3, [r7, #4] + 800e1b8: 629a str r2, [r3, #40] @ 0x28 + + /* Set ADC error code to ADC IP internal error */ + SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); + 800e1ba: 687b ldr r3, [r7, #4] + 800e1bc: 6adb ldr r3, [r3, #44] @ 0x2c + 800e1be: f043 0201 orr.w r2, r3, #1 + 800e1c2: 687b ldr r3, [r7, #4] + 800e1c4: 62da str r2, [r3, #44] @ 0x2c + + return HAL_ERROR; + 800e1c6: 2301 movs r3, #1 + 800e1c8: e007 b.n 800e1da + while(ADC_IS_ENABLE(hadc) != RESET) + 800e1ca: 687b ldr r3, [r7, #4] + 800e1cc: 681b ldr r3, [r3, #0] + 800e1ce: 689b ldr r3, [r3, #8] + 800e1d0: f003 0301 and.w r3, r3, #1 + 800e1d4: 2b01 cmp r3, #1 + 800e1d6: d0dc beq.n 800e192 + } + } + } + + /* Return HAL status */ + return HAL_OK; + 800e1d8: 2300 movs r3, #0 +} + 800e1da: 4618 mov r0, r3 + 800e1dc: 3710 adds r7, #16 + 800e1de: 46bd mov sp, r7 + 800e1e0: bd80 pop {r7, pc} + ... + +0800e1e4 : + * the completion of this function. + * @param hadc: ADC handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc) +{ + 800e1e4: b590 push {r4, r7, lr} + 800e1e6: b087 sub sp, #28 + 800e1e8: af00 add r7, sp, #0 + 800e1ea: 6078 str r0, [r7, #4] + HAL_StatusTypeDef tmp_hal_status = HAL_OK; + 800e1ec: 2300 movs r3, #0 + 800e1ee: 75fb strb r3, [r7, #23] + uint32_t tickstart; + __IO uint32_t wait_loop_index = 0U; + 800e1f0: 2300 movs r3, #0 + 800e1f2: 60fb str r3, [r7, #12] + + /* Check the parameters */ + assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); + + /* Process locked */ + __HAL_LOCK(hadc); + 800e1f4: 687b ldr r3, [r7, #4] + 800e1f6: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 + 800e1fa: 2b01 cmp r3, #1 + 800e1fc: d101 bne.n 800e202 + 800e1fe: 2302 movs r3, #2 + 800e200: e097 b.n 800e332 + 800e202: 687b ldr r3, [r7, #4] + 800e204: 2201 movs r2, #1 + 800e206: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* 1. Disable ADC peripheral */ + tmp_hal_status = ADC_ConversionStop_Disable(hadc); + 800e20a: 6878 ldr r0, [r7, #4] + 800e20c: f7ff ffa8 bl 800e160 + 800e210: 4603 mov r3, r0 + 800e212: 75fb strb r3, [r7, #23] + + /* 2. Calibration prerequisite delay before starting the calibration. */ + /* - ADC must be enabled for at least two ADC clock cycles */ + tmp_hal_status = ADC_Enable(hadc); + 800e214: 6878 ldr r0, [r7, #4] + 800e216: f7ff ff49 bl 800e0ac + 800e21a: 4603 mov r3, r0 + 800e21c: 75fb strb r3, [r7, #23] + + /* Check if ADC is effectively enabled */ + if (tmp_hal_status == HAL_OK) + 800e21e: 7dfb ldrb r3, [r7, #23] + 800e220: 2b00 cmp r3, #0 + 800e222: f040 8081 bne.w 800e328 + { + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + 800e226: 687b ldr r3, [r7, #4] + 800e228: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e22a: f423 5388 bic.w r3, r3, #4352 @ 0x1100 + 800e22e: f023 0302 bic.w r3, r3, #2 + 800e232: f043 0202 orr.w r2, r3, #2 + 800e236: 687b ldr r3, [r7, #4] + 800e238: 629a str r2, [r3, #40] @ 0x28 + + /* Hardware prerequisite: delay before starting the calibration. */ + /* - Computation of CPU clock cycles corresponding to ADC clock cycles. */ + /* - Wait for the expected ADC clock cycles delay */ + wait_loop_index = ((SystemCoreClock + / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) + 800e23a: 4b40 ldr r3, [pc, #256] @ (800e33c ) + 800e23c: 681c ldr r4, [r3, #0] + 800e23e: 2002 movs r0, #2 + 800e240: f002 fa8e bl 8010760 + 800e244: 4603 mov r3, r0 + 800e246: fbb4 f3f3 udiv r3, r4, r3 + * ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES ); + 800e24a: 005b lsls r3, r3, #1 + wait_loop_index = ((SystemCoreClock + 800e24c: 60fb str r3, [r7, #12] + + while(wait_loop_index != 0U) + 800e24e: e002 b.n 800e256 + { + wait_loop_index--; + 800e250: 68fb ldr r3, [r7, #12] + 800e252: 3b01 subs r3, #1 + 800e254: 60fb str r3, [r7, #12] + while(wait_loop_index != 0U) + 800e256: 68fb ldr r3, [r7, #12] + 800e258: 2b00 cmp r3, #0 + 800e25a: d1f9 bne.n 800e250 + } + + /* 3. Resets ADC calibration registers */ + SET_BIT(hadc->Instance->CR2, ADC_CR2_RSTCAL); + 800e25c: 687b ldr r3, [r7, #4] + 800e25e: 681b ldr r3, [r3, #0] + 800e260: 689a ldr r2, [r3, #8] + 800e262: 687b ldr r3, [r7, #4] + 800e264: 681b ldr r3, [r3, #0] + 800e266: f042 0208 orr.w r2, r2, #8 + 800e26a: 609a str r2, [r3, #8] + + tickstart = HAL_GetTick(); + 800e26c: f7ff fb34 bl 800d8d8 + 800e270: 6138 str r0, [r7, #16] + + /* Wait for calibration reset completion */ + while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) + 800e272: e01b b.n 800e2ac + { + if((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) + 800e274: f7ff fb30 bl 800d8d8 + 800e278: 4602 mov r2, r0 + 800e27a: 693b ldr r3, [r7, #16] + 800e27c: 1ad3 subs r3, r2, r3 + 800e27e: 2b0a cmp r3, #10 + 800e280: d914 bls.n 800e2ac + { + /* New check to avoid false timeout detection in case of preemption */ + if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) + 800e282: 687b ldr r3, [r7, #4] + 800e284: 681b ldr r3, [r3, #0] + 800e286: 689b ldr r3, [r3, #8] + 800e288: f003 0308 and.w r3, r3, #8 + 800e28c: 2b00 cmp r3, #0 + 800e28e: d00d beq.n 800e2ac + { + /* Update ADC state machine to error */ + ADC_STATE_CLR_SET(hadc->State, + 800e290: 687b ldr r3, [r7, #4] + 800e292: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e294: f023 0312 bic.w r3, r3, #18 + 800e298: f043 0210 orr.w r2, r3, #16 + 800e29c: 687b ldr r3, [r7, #4] + 800e29e: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_ERROR_INTERNAL); + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800e2a0: 687b ldr r3, [r7, #4] + 800e2a2: 2200 movs r2, #0 + 800e2a4: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e2a8: 2301 movs r3, #1 + 800e2aa: e042 b.n 800e332 + while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) + 800e2ac: 687b ldr r3, [r7, #4] + 800e2ae: 681b ldr r3, [r3, #0] + 800e2b0: 689b ldr r3, [r3, #8] + 800e2b2: f003 0308 and.w r3, r3, #8 + 800e2b6: 2b00 cmp r3, #0 + 800e2b8: d1dc bne.n 800e274 + } + } + } + + /* 4. Start ADC calibration */ + SET_BIT(hadc->Instance->CR2, ADC_CR2_CAL); + 800e2ba: 687b ldr r3, [r7, #4] + 800e2bc: 681b ldr r3, [r3, #0] + 800e2be: 689a ldr r2, [r3, #8] + 800e2c0: 687b ldr r3, [r7, #4] + 800e2c2: 681b ldr r3, [r3, #0] + 800e2c4: f042 0204 orr.w r2, r2, #4 + 800e2c8: 609a str r2, [r3, #8] + + tickstart = HAL_GetTick(); + 800e2ca: f7ff fb05 bl 800d8d8 + 800e2ce: 6138 str r0, [r7, #16] + + /* Wait for calibration completion */ + while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) + 800e2d0: e01b b.n 800e30a + { + if((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) + 800e2d2: f7ff fb01 bl 800d8d8 + 800e2d6: 4602 mov r2, r0 + 800e2d8: 693b ldr r3, [r7, #16] + 800e2da: 1ad3 subs r3, r2, r3 + 800e2dc: 2b0a cmp r3, #10 + 800e2de: d914 bls.n 800e30a + { + /* New check to avoid false timeout detection in case of preemption */ + if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) + 800e2e0: 687b ldr r3, [r7, #4] + 800e2e2: 681b ldr r3, [r3, #0] + 800e2e4: 689b ldr r3, [r3, #8] + 800e2e6: f003 0304 and.w r3, r3, #4 + 800e2ea: 2b00 cmp r3, #0 + 800e2ec: d00d beq.n 800e30a + { + /* Update ADC state machine to error */ + ADC_STATE_CLR_SET(hadc->State, + 800e2ee: 687b ldr r3, [r7, #4] + 800e2f0: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e2f2: f023 0312 bic.w r3, r3, #18 + 800e2f6: f043 0210 orr.w r2, r3, #16 + 800e2fa: 687b ldr r3, [r7, #4] + 800e2fc: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_ERROR_INTERNAL); + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800e2fe: 687b ldr r3, [r7, #4] + 800e300: 2200 movs r2, #0 + 800e302: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e306: 2301 movs r3, #1 + 800e308: e013 b.n 800e332 + while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) + 800e30a: 687b ldr r3, [r7, #4] + 800e30c: 681b ldr r3, [r3, #0] + 800e30e: 689b ldr r3, [r3, #8] + 800e310: f003 0304 and.w r3, r3, #4 + 800e314: 2b00 cmp r3, #0 + 800e316: d1dc bne.n 800e2d2 + } + } + } + + /* Set ADC state */ + ADC_STATE_CLR_SET(hadc->State, + 800e318: 687b ldr r3, [r7, #4] + 800e31a: 6a9b ldr r3, [r3, #40] @ 0x28 + 800e31c: f023 0303 bic.w r3, r3, #3 + 800e320: f043 0201 orr.w r2, r3, #1 + 800e324: 687b ldr r3, [r7, #4] + 800e326: 629a str r2, [r3, #40] @ 0x28 + HAL_ADC_STATE_BUSY_INTERNAL, + HAL_ADC_STATE_READY); + } + + /* Process unlocked */ + __HAL_UNLOCK(hadc); + 800e328: 687b ldr r3, [r7, #4] + 800e32a: 2200 movs r2, #0 + 800e32c: f883 2024 strb.w r2, [r3, #36] @ 0x24 + + /* Return function status */ + return tmp_hal_status; + 800e330: 7dfb ldrb r3, [r7, #23] +} + 800e332: 4618 mov r0, r3 + 800e334: 371c adds r7, #28 + 800e336: 46bd mov sp, r7 + 800e338: bd90 pop {r4, r7, pc} + 800e33a: bf00 nop + 800e33c: 2000006c .word 0x2000006c + +0800e340 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) +{ + 800e340: b580 push {r7, lr} + 800e342: b084 sub sp, #16 + 800e344: af00 add r7, sp, #0 + 800e346: 6078 str r0, [r7, #4] + uint32_t tickstart; + + /* Check CAN handle */ + if (hcan == NULL) + 800e348: 687b ldr r3, [r7, #4] + 800e34a: 2b00 cmp r3, #0 + 800e34c: d101 bne.n 800e352 + { + return HAL_ERROR; + 800e34e: 2301 movs r3, #1 + 800e350: e0ed b.n 800e52e + /* Init the low level hardware: CLOCK, NVIC */ + hcan->MspInitCallback(hcan); + } + +#else + if (hcan->State == HAL_CAN_STATE_RESET) + 800e352: 687b ldr r3, [r7, #4] + 800e354: f893 3020 ldrb.w r3, [r3, #32] + 800e358: b2db uxtb r3, r3 + 800e35a: 2b00 cmp r3, #0 + 800e35c: d102 bne.n 800e364 + { + /* Init the low level hardware: CLOCK, NVIC */ + HAL_CAN_MspInit(hcan); + 800e35e: 6878 ldr r0, [r7, #4] + 800e360: f7fb fc1c bl 8009b9c + } +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + 800e364: 687b ldr r3, [r7, #4] + 800e366: 681b ldr r3, [r3, #0] + 800e368: 681a ldr r2, [r3, #0] + 800e36a: 687b ldr r3, [r7, #4] + 800e36c: 681b ldr r3, [r3, #0] + 800e36e: f042 0201 orr.w r2, r2, #1 + 800e372: 601a str r2, [r3, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + 800e374: f7ff fab0 bl 800d8d8 + 800e378: 60f8 str r0, [r7, #12] + + /* Wait initialisation acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) + 800e37a: e012 b.n 800e3a2 + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + 800e37c: f7ff faac bl 800d8d8 + 800e380: 4602 mov r2, r0 + 800e382: 68fb ldr r3, [r7, #12] + 800e384: 1ad3 subs r3, r2, r3 + 800e386: 2b0a cmp r3, #10 + 800e388: d90b bls.n 800e3a2 + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + 800e38a: 687b ldr r3, [r7, #4] + 800e38c: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e38e: f443 3200 orr.w r2, r3, #131072 @ 0x20000 + 800e392: 687b ldr r3, [r7, #4] + 800e394: 625a str r2, [r3, #36] @ 0x24 + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + 800e396: 687b ldr r3, [r7, #4] + 800e398: 2205 movs r2, #5 + 800e39a: f883 2020 strb.w r2, [r3, #32] + + return HAL_ERROR; + 800e39e: 2301 movs r3, #1 + 800e3a0: e0c5 b.n 800e52e + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) + 800e3a2: 687b ldr r3, [r7, #4] + 800e3a4: 681b ldr r3, [r3, #0] + 800e3a6: 685b ldr r3, [r3, #4] + 800e3a8: f003 0301 and.w r3, r3, #1 + 800e3ac: 2b00 cmp r3, #0 + 800e3ae: d0e5 beq.n 800e37c + } + } + + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + 800e3b0: 687b ldr r3, [r7, #4] + 800e3b2: 681b ldr r3, [r3, #0] + 800e3b4: 681a ldr r2, [r3, #0] + 800e3b6: 687b ldr r3, [r7, #4] + 800e3b8: 681b ldr r3, [r3, #0] + 800e3ba: f022 0202 bic.w r2, r2, #2 + 800e3be: 601a str r2, [r3, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + 800e3c0: f7ff fa8a bl 800d8d8 + 800e3c4: 60f8 str r0, [r7, #12] + + /* Check Sleep mode leave acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + 800e3c6: e012 b.n 800e3ee + { + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + 800e3c8: f7ff fa86 bl 800d8d8 + 800e3cc: 4602 mov r2, r0 + 800e3ce: 68fb ldr r3, [r7, #12] + 800e3d0: 1ad3 subs r3, r2, r3 + 800e3d2: 2b0a cmp r3, #10 + 800e3d4: d90b bls.n 800e3ee + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + 800e3d6: 687b ldr r3, [r7, #4] + 800e3d8: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e3da: f443 3200 orr.w r2, r3, #131072 @ 0x20000 + 800e3de: 687b ldr r3, [r7, #4] + 800e3e0: 625a str r2, [r3, #36] @ 0x24 + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + 800e3e2: 687b ldr r3, [r7, #4] + 800e3e4: 2205 movs r2, #5 + 800e3e6: f883 2020 strb.w r2, [r3, #32] + + return HAL_ERROR; + 800e3ea: 2301 movs r3, #1 + 800e3ec: e09f b.n 800e52e + while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) + 800e3ee: 687b ldr r3, [r7, #4] + 800e3f0: 681b ldr r3, [r3, #0] + 800e3f2: 685b ldr r3, [r3, #4] + 800e3f4: f003 0302 and.w r3, r3, #2 + 800e3f8: 2b00 cmp r3, #0 + 800e3fa: d1e5 bne.n 800e3c8 + } + } + + /* Set the time triggered communication mode */ + if (hcan->Init.TimeTriggeredMode == ENABLE) + 800e3fc: 687b ldr r3, [r7, #4] + 800e3fe: 7e1b ldrb r3, [r3, #24] + 800e400: 2b01 cmp r3, #1 + 800e402: d108 bne.n 800e416 + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); + 800e404: 687b ldr r3, [r7, #4] + 800e406: 681b ldr r3, [r3, #0] + 800e408: 681a ldr r2, [r3, #0] + 800e40a: 687b ldr r3, [r7, #4] + 800e40c: 681b ldr r3, [r3, #0] + 800e40e: f042 0280 orr.w r2, r2, #128 @ 0x80 + 800e412: 601a str r2, [r3, #0] + 800e414: e007 b.n 800e426 + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); + 800e416: 687b ldr r3, [r7, #4] + 800e418: 681b ldr r3, [r3, #0] + 800e41a: 681a ldr r2, [r3, #0] + 800e41c: 687b ldr r3, [r7, #4] + 800e41e: 681b ldr r3, [r3, #0] + 800e420: f022 0280 bic.w r2, r2, #128 @ 0x80 + 800e424: 601a str r2, [r3, #0] + } + + /* Set the automatic bus-off management */ + if (hcan->Init.AutoBusOff == ENABLE) + 800e426: 687b ldr r3, [r7, #4] + 800e428: 7e5b ldrb r3, [r3, #25] + 800e42a: 2b01 cmp r3, #1 + 800e42c: d108 bne.n 800e440 + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); + 800e42e: 687b ldr r3, [r7, #4] + 800e430: 681b ldr r3, [r3, #0] + 800e432: 681a ldr r2, [r3, #0] + 800e434: 687b ldr r3, [r7, #4] + 800e436: 681b ldr r3, [r3, #0] + 800e438: f042 0240 orr.w r2, r2, #64 @ 0x40 + 800e43c: 601a str r2, [r3, #0] + 800e43e: e007 b.n 800e450 + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); + 800e440: 687b ldr r3, [r7, #4] + 800e442: 681b ldr r3, [r3, #0] + 800e444: 681a ldr r2, [r3, #0] + 800e446: 687b ldr r3, [r7, #4] + 800e448: 681b ldr r3, [r3, #0] + 800e44a: f022 0240 bic.w r2, r2, #64 @ 0x40 + 800e44e: 601a str r2, [r3, #0] + } + + /* Set the automatic wake-up mode */ + if (hcan->Init.AutoWakeUp == ENABLE) + 800e450: 687b ldr r3, [r7, #4] + 800e452: 7e9b ldrb r3, [r3, #26] + 800e454: 2b01 cmp r3, #1 + 800e456: d108 bne.n 800e46a + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + 800e458: 687b ldr r3, [r7, #4] + 800e45a: 681b ldr r3, [r3, #0] + 800e45c: 681a ldr r2, [r3, #0] + 800e45e: 687b ldr r3, [r7, #4] + 800e460: 681b ldr r3, [r3, #0] + 800e462: f042 0220 orr.w r2, r2, #32 + 800e466: 601a str r2, [r3, #0] + 800e468: e007 b.n 800e47a + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); + 800e46a: 687b ldr r3, [r7, #4] + 800e46c: 681b ldr r3, [r3, #0] + 800e46e: 681a ldr r2, [r3, #0] + 800e470: 687b ldr r3, [r7, #4] + 800e472: 681b ldr r3, [r3, #0] + 800e474: f022 0220 bic.w r2, r2, #32 + 800e478: 601a str r2, [r3, #0] + } + + /* Set the automatic retransmission */ + if (hcan->Init.AutoRetransmission == ENABLE) + 800e47a: 687b ldr r3, [r7, #4] + 800e47c: 7edb ldrb r3, [r3, #27] + 800e47e: 2b01 cmp r3, #1 + 800e480: d108 bne.n 800e494 + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); + 800e482: 687b ldr r3, [r7, #4] + 800e484: 681b ldr r3, [r3, #0] + 800e486: 681a ldr r2, [r3, #0] + 800e488: 687b ldr r3, [r7, #4] + 800e48a: 681b ldr r3, [r3, #0] + 800e48c: f022 0210 bic.w r2, r2, #16 + 800e490: 601a str r2, [r3, #0] + 800e492: e007 b.n 800e4a4 + } + else + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); + 800e494: 687b ldr r3, [r7, #4] + 800e496: 681b ldr r3, [r3, #0] + 800e498: 681a ldr r2, [r3, #0] + 800e49a: 687b ldr r3, [r7, #4] + 800e49c: 681b ldr r3, [r3, #0] + 800e49e: f042 0210 orr.w r2, r2, #16 + 800e4a2: 601a str r2, [r3, #0] + } + + /* Set the receive FIFO locked mode */ + if (hcan->Init.ReceiveFifoLocked == ENABLE) + 800e4a4: 687b ldr r3, [r7, #4] + 800e4a6: 7f1b ldrb r3, [r3, #28] + 800e4a8: 2b01 cmp r3, #1 + 800e4aa: d108 bne.n 800e4be + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + 800e4ac: 687b ldr r3, [r7, #4] + 800e4ae: 681b ldr r3, [r3, #0] + 800e4b0: 681a ldr r2, [r3, #0] + 800e4b2: 687b ldr r3, [r7, #4] + 800e4b4: 681b ldr r3, [r3, #0] + 800e4b6: f042 0208 orr.w r2, r2, #8 + 800e4ba: 601a str r2, [r3, #0] + 800e4bc: e007 b.n 800e4ce + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); + 800e4be: 687b ldr r3, [r7, #4] + 800e4c0: 681b ldr r3, [r3, #0] + 800e4c2: 681a ldr r2, [r3, #0] + 800e4c4: 687b ldr r3, [r7, #4] + 800e4c6: 681b ldr r3, [r3, #0] + 800e4c8: f022 0208 bic.w r2, r2, #8 + 800e4cc: 601a str r2, [r3, #0] + } + + /* Set the transmit FIFO priority */ + if (hcan->Init.TransmitFifoPriority == ENABLE) + 800e4ce: 687b ldr r3, [r7, #4] + 800e4d0: 7f5b ldrb r3, [r3, #29] + 800e4d2: 2b01 cmp r3, #1 + 800e4d4: d108 bne.n 800e4e8 + { + SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + 800e4d6: 687b ldr r3, [r7, #4] + 800e4d8: 681b ldr r3, [r3, #0] + 800e4da: 681a ldr r2, [r3, #0] + 800e4dc: 687b ldr r3, [r7, #4] + 800e4de: 681b ldr r3, [r3, #0] + 800e4e0: f042 0204 orr.w r2, r2, #4 + 800e4e4: 601a str r2, [r3, #0] + 800e4e6: e007 b.n 800e4f8 + } + else + { + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); + 800e4e8: 687b ldr r3, [r7, #4] + 800e4ea: 681b ldr r3, [r3, #0] + 800e4ec: 681a ldr r2, [r3, #0] + 800e4ee: 687b ldr r3, [r7, #4] + 800e4f0: 681b ldr r3, [r3, #0] + 800e4f2: f022 0204 bic.w r2, r2, #4 + 800e4f6: 601a str r2, [r3, #0] + } + + /* Set the bit timing register */ + WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | + 800e4f8: 687b ldr r3, [r7, #4] + 800e4fa: 689a ldr r2, [r3, #8] + 800e4fc: 687b ldr r3, [r7, #4] + 800e4fe: 68db ldr r3, [r3, #12] + 800e500: 431a orrs r2, r3 + 800e502: 687b ldr r3, [r7, #4] + 800e504: 691b ldr r3, [r3, #16] + 800e506: 431a orrs r2, r3 + 800e508: 687b ldr r3, [r7, #4] + 800e50a: 695b ldr r3, [r3, #20] + 800e50c: ea42 0103 orr.w r1, r2, r3 + 800e510: 687b ldr r3, [r7, #4] + 800e512: 685b ldr r3, [r3, #4] + 800e514: 1e5a subs r2, r3, #1 + 800e516: 687b ldr r3, [r7, #4] + 800e518: 681b ldr r3, [r3, #0] + 800e51a: 430a orrs r2, r1 + 800e51c: 61da str r2, [r3, #28] + hcan->Init.TimeSeg1 | + hcan->Init.TimeSeg2 | + (hcan->Init.Prescaler - 1U))); + + /* Initialize the error code */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + 800e51e: 687b ldr r3, [r7, #4] + 800e520: 2200 movs r2, #0 + 800e522: 625a str r2, [r3, #36] @ 0x24 + + /* Initialize the CAN state */ + hcan->State = HAL_CAN_STATE_READY; + 800e524: 687b ldr r3, [r7, #4] + 800e526: 2201 movs r2, #1 + 800e528: f883 2020 strb.w r2, [r3, #32] + + /* Return function status */ + return HAL_OK; + 800e52c: 2300 movs r3, #0 +} + 800e52e: 4618 mov r0, r3 + 800e530: 3710 adds r7, #16 + 800e532: 46bd mov sp, r7 + 800e534: bd80 pop {r7, pc} + ... + +0800e538 : + * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that + * contains the filter configuration information. + * @retval None + */ +HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, const CAN_FilterTypeDef *sFilterConfig) +{ + 800e538: b480 push {r7} + 800e53a: b087 sub sp, #28 + 800e53c: af00 add r7, sp, #0 + 800e53e: 6078 str r0, [r7, #4] + 800e540: 6039 str r1, [r7, #0] + uint32_t filternbrbitpos; + CAN_TypeDef *can_ip = hcan->Instance; + 800e542: 687b ldr r3, [r7, #4] + 800e544: 681b ldr r3, [r3, #0] + 800e546: 617b str r3, [r7, #20] + HAL_CAN_StateTypeDef state = hcan->State; + 800e548: 687b ldr r3, [r7, #4] + 800e54a: f893 3020 ldrb.w r3, [r3, #32] + 800e54e: 74fb strb r3, [r7, #19] + + if ((state == HAL_CAN_STATE_READY) || + 800e550: 7cfb ldrb r3, [r7, #19] + 800e552: 2b01 cmp r3, #1 + 800e554: d003 beq.n 800e55e + 800e556: 7cfb ldrb r3, [r7, #19] + 800e558: 2b02 cmp r3, #2 + 800e55a: f040 80be bne.w 800e6da + assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); + +#if defined(CAN2) + /* CAN1 and CAN2 are dual instances with 28 common filters banks */ + /* Select master instance to access the filter banks */ + can_ip = CAN1; + 800e55e: 4b65 ldr r3, [pc, #404] @ (800e6f4 ) + 800e560: 617b str r3, [r7, #20] + /* Check the parameters */ + assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); +#endif /* CAN3 */ + + /* Initialisation mode for the filter */ + SET_BIT(can_ip->FMR, CAN_FMR_FINIT); + 800e562: 697b ldr r3, [r7, #20] + 800e564: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 + 800e568: f043 0201 orr.w r2, r3, #1 + 800e56c: 697b ldr r3, [r7, #20] + 800e56e: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + +#if defined(CAN2) + /* Select the start filter number of CAN2 slave instance */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB); + 800e572: 697b ldr r3, [r7, #20] + 800e574: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 + 800e578: f423 527c bic.w r2, r3, #16128 @ 0x3f00 + 800e57c: 697b ldr r3, [r7, #20] + 800e57e: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos); + 800e582: 697b ldr r3, [r7, #20] + 800e584: f8d3 2200 ldr.w r2, [r3, #512] @ 0x200 + 800e588: 683b ldr r3, [r7, #0] + 800e58a: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e58c: 021b lsls r3, r3, #8 + 800e58e: 431a orrs r2, r3 + 800e590: 697b ldr r3, [r7, #20] + 800e592: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + +#endif /* CAN3 */ + /* Convert filter number into bit position */ + filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); + 800e596: 683b ldr r3, [r7, #0] + 800e598: 695b ldr r3, [r3, #20] + 800e59a: f003 031f and.w r3, r3, #31 + 800e59e: 2201 movs r2, #1 + 800e5a0: fa02 f303 lsl.w r3, r2, r3 + 800e5a4: 60fb str r3, [r7, #12] + + /* Filter Deactivation */ + CLEAR_BIT(can_ip->FA1R, filternbrbitpos); + 800e5a6: 697b ldr r3, [r7, #20] + 800e5a8: f8d3 221c ldr.w r2, [r3, #540] @ 0x21c + 800e5ac: 68fb ldr r3, [r7, #12] + 800e5ae: 43db mvns r3, r3 + 800e5b0: 401a ands r2, r3 + 800e5b2: 697b ldr r3, [r7, #20] + 800e5b4: f8c3 221c str.w r2, [r3, #540] @ 0x21c + + /* Filter Scale */ + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) + 800e5b8: 683b ldr r3, [r7, #0] + 800e5ba: 69db ldr r3, [r3, #28] + 800e5bc: 2b00 cmp r3, #0 + 800e5be: d123 bne.n 800e608 + { + /* 16-bit scale for the filter */ + CLEAR_BIT(can_ip->FS1R, filternbrbitpos); + 800e5c0: 697b ldr r3, [r7, #20] + 800e5c2: f8d3 220c ldr.w r2, [r3, #524] @ 0x20c + 800e5c6: 68fb ldr r3, [r7, #12] + 800e5c8: 43db mvns r3, r3 + 800e5ca: 401a ands r2, r3 + 800e5cc: 697b ldr r3, [r7, #20] + 800e5ce: f8c3 220c str.w r2, [r3, #524] @ 0x20c + + /* First 16-bit identifier and First 16-bit mask */ + /* Or First 16-bit identifier and Second 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + 800e5d2: 683b ldr r3, [r7, #0] + 800e5d4: 68db ldr r3, [r3, #12] + 800e5d6: 0419 lsls r1, r3, #16 + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + 800e5d8: 683b ldr r3, [r7, #0] + 800e5da: 685b ldr r3, [r3, #4] + 800e5dc: b29b uxth r3, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + 800e5de: 683a ldr r2, [r7, #0] + 800e5e0: 6952 ldr r2, [r2, #20] + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | + 800e5e2: 4319 orrs r1, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + 800e5e4: 697b ldr r3, [r7, #20] + 800e5e6: 3248 adds r2, #72 @ 0x48 + 800e5e8: f843 1032 str.w r1, [r3, r2, lsl #3] + + /* Second 16-bit identifier and Second 16-bit mask */ + /* Or Third 16-bit identifier and Fourth 16-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + 800e5ec: 683b ldr r3, [r7, #0] + 800e5ee: 689b ldr r3, [r3, #8] + 800e5f0: 0419 lsls r1, r3, #16 + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); + 800e5f2: 683b ldr r3, [r7, #0] + 800e5f4: 681b ldr r3, [r3, #0] + 800e5f6: b29a uxth r2, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + 800e5f8: 683b ldr r3, [r7, #0] + 800e5fa: 695b ldr r3, [r3, #20] + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + 800e5fc: 430a orrs r2, r1 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + 800e5fe: 6979 ldr r1, [r7, #20] + 800e600: 3348 adds r3, #72 @ 0x48 + 800e602: 00db lsls r3, r3, #3 + 800e604: 440b add r3, r1 + 800e606: 605a str r2, [r3, #4] + } + + if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) + 800e608: 683b ldr r3, [r7, #0] + 800e60a: 69db ldr r3, [r3, #28] + 800e60c: 2b01 cmp r3, #1 + 800e60e: d122 bne.n 800e656 + { + /* 32-bit scale for the filter */ + SET_BIT(can_ip->FS1R, filternbrbitpos); + 800e610: 697b ldr r3, [r7, #20] + 800e612: f8d3 220c ldr.w r2, [r3, #524] @ 0x20c + 800e616: 68fb ldr r3, [r7, #12] + 800e618: 431a orrs r2, r3 + 800e61a: 697b ldr r3, [r7, #20] + 800e61c: f8c3 220c str.w r2, [r3, #524] @ 0x20c + + /* 32-bit identifier or First 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + 800e620: 683b ldr r3, [r7, #0] + 800e622: 681b ldr r3, [r3, #0] + 800e624: 0419 lsls r1, r3, #16 + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); + 800e626: 683b ldr r3, [r7, #0] + 800e628: 685b ldr r3, [r3, #4] + 800e62a: b29b uxth r3, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + 800e62c: 683a ldr r2, [r7, #0] + 800e62e: 6952 ldr r2, [r2, #20] + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | + 800e630: 4319 orrs r1, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = + 800e632: 697b ldr r3, [r7, #20] + 800e634: 3248 adds r2, #72 @ 0x48 + 800e636: f843 1032 str.w r1, [r3, r2, lsl #3] + + /* 32-bit mask or Second 32-bit identifier */ + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + 800e63a: 683b ldr r3, [r7, #0] + 800e63c: 689b ldr r3, [r3, #8] + 800e63e: 0419 lsls r1, r3, #16 + (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); + 800e640: 683b ldr r3, [r7, #0] + 800e642: 68db ldr r3, [r3, #12] + 800e644: b29a uxth r2, r3 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + 800e646: 683b ldr r3, [r7, #0] + 800e648: 695b ldr r3, [r3, #20] + ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | + 800e64a: 430a orrs r2, r1 + can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = + 800e64c: 6979 ldr r1, [r7, #20] + 800e64e: 3348 adds r3, #72 @ 0x48 + 800e650: 00db lsls r3, r3, #3 + 800e652: 440b add r3, r1 + 800e654: 605a str r2, [r3, #4] + } + + /* Filter Mode */ + if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) + 800e656: 683b ldr r3, [r7, #0] + 800e658: 699b ldr r3, [r3, #24] + 800e65a: 2b00 cmp r3, #0 + 800e65c: d109 bne.n 800e672 + { + /* Id/Mask mode for the filter*/ + CLEAR_BIT(can_ip->FM1R, filternbrbitpos); + 800e65e: 697b ldr r3, [r7, #20] + 800e660: f8d3 2204 ldr.w r2, [r3, #516] @ 0x204 + 800e664: 68fb ldr r3, [r7, #12] + 800e666: 43db mvns r3, r3 + 800e668: 401a ands r2, r3 + 800e66a: 697b ldr r3, [r7, #20] + 800e66c: f8c3 2204 str.w r2, [r3, #516] @ 0x204 + 800e670: e007 b.n 800e682 + } + else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ + { + /* Identifier list mode for the filter*/ + SET_BIT(can_ip->FM1R, filternbrbitpos); + 800e672: 697b ldr r3, [r7, #20] + 800e674: f8d3 2204 ldr.w r2, [r3, #516] @ 0x204 + 800e678: 68fb ldr r3, [r7, #12] + 800e67a: 431a orrs r2, r3 + 800e67c: 697b ldr r3, [r7, #20] + 800e67e: f8c3 2204 str.w r2, [r3, #516] @ 0x204 + } + + /* Filter FIFO assignment */ + if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) + 800e682: 683b ldr r3, [r7, #0] + 800e684: 691b ldr r3, [r3, #16] + 800e686: 2b00 cmp r3, #0 + 800e688: d109 bne.n 800e69e + { + /* FIFO 0 assignation for the filter */ + CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); + 800e68a: 697b ldr r3, [r7, #20] + 800e68c: f8d3 2214 ldr.w r2, [r3, #532] @ 0x214 + 800e690: 68fb ldr r3, [r7, #12] + 800e692: 43db mvns r3, r3 + 800e694: 401a ands r2, r3 + 800e696: 697b ldr r3, [r7, #20] + 800e698: f8c3 2214 str.w r2, [r3, #532] @ 0x214 + 800e69c: e007 b.n 800e6ae + } + else + { + /* FIFO 1 assignation for the filter */ + SET_BIT(can_ip->FFA1R, filternbrbitpos); + 800e69e: 697b ldr r3, [r7, #20] + 800e6a0: f8d3 2214 ldr.w r2, [r3, #532] @ 0x214 + 800e6a4: 68fb ldr r3, [r7, #12] + 800e6a6: 431a orrs r2, r3 + 800e6a8: 697b ldr r3, [r7, #20] + 800e6aa: f8c3 2214 str.w r2, [r3, #532] @ 0x214 + } + + /* Filter activation */ + if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) + 800e6ae: 683b ldr r3, [r7, #0] + 800e6b0: 6a1b ldr r3, [r3, #32] + 800e6b2: 2b01 cmp r3, #1 + 800e6b4: d107 bne.n 800e6c6 + { + SET_BIT(can_ip->FA1R, filternbrbitpos); + 800e6b6: 697b ldr r3, [r7, #20] + 800e6b8: f8d3 221c ldr.w r2, [r3, #540] @ 0x21c + 800e6bc: 68fb ldr r3, [r7, #12] + 800e6be: 431a orrs r2, r3 + 800e6c0: 697b ldr r3, [r7, #20] + 800e6c2: f8c3 221c str.w r2, [r3, #540] @ 0x21c + } + + /* Leave the initialisation mode for the filter */ + CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); + 800e6c6: 697b ldr r3, [r7, #20] + 800e6c8: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 + 800e6cc: f023 0201 bic.w r2, r3, #1 + 800e6d0: 697b ldr r3, [r7, #20] + 800e6d2: f8c3 2200 str.w r2, [r3, #512] @ 0x200 + + /* Return function status */ + return HAL_OK; + 800e6d6: 2300 movs r3, #0 + 800e6d8: e006 b.n 800e6e8 + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + 800e6da: 687b ldr r3, [r7, #4] + 800e6dc: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e6de: f443 2280 orr.w r2, r3, #262144 @ 0x40000 + 800e6e2: 687b ldr r3, [r7, #4] + 800e6e4: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e6e6: 2301 movs r3, #1 + } +} + 800e6e8: 4618 mov r0, r3 + 800e6ea: 371c adds r7, #28 + 800e6ec: 46bd mov sp, r7 + 800e6ee: bc80 pop {r7} + 800e6f0: 4770 bx lr + 800e6f2: bf00 nop + 800e6f4: 40006400 .word 0x40006400 + +0800e6f8 : + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) +{ + 800e6f8: b580 push {r7, lr} + 800e6fa: b084 sub sp, #16 + 800e6fc: af00 add r7, sp, #0 + 800e6fe: 6078 str r0, [r7, #4] + uint32_t tickstart; + + if (hcan->State == HAL_CAN_STATE_READY) + 800e700: 687b ldr r3, [r7, #4] + 800e702: f893 3020 ldrb.w r3, [r3, #32] + 800e706: b2db uxtb r3, r3 + 800e708: 2b01 cmp r3, #1 + 800e70a: d12e bne.n 800e76a + { + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_LISTENING; + 800e70c: 687b ldr r3, [r7, #4] + 800e70e: 2202 movs r2, #2 + 800e710: f883 2020 strb.w r2, [r3, #32] + + /* Request leave initialisation */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + 800e714: 687b ldr r3, [r7, #4] + 800e716: 681b ldr r3, [r3, #0] + 800e718: 681a ldr r2, [r3, #0] + 800e71a: 687b ldr r3, [r7, #4] + 800e71c: 681b ldr r3, [r3, #0] + 800e71e: f022 0201 bic.w r2, r2, #1 + 800e722: 601a str r2, [r3, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + 800e724: f7ff f8d8 bl 800d8d8 + 800e728: 60f8 str r0, [r7, #12] + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) + 800e72a: e012 b.n 800e752 + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + 800e72c: f7ff f8d4 bl 800d8d8 + 800e730: 4602 mov r2, r0 + 800e732: 68fb ldr r3, [r7, #12] + 800e734: 1ad3 subs r3, r2, r3 + 800e736: 2b0a cmp r3, #10 + 800e738: d90b bls.n 800e752 + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + 800e73a: 687b ldr r3, [r7, #4] + 800e73c: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e73e: f443 3200 orr.w r2, r3, #131072 @ 0x20000 + 800e742: 687b ldr r3, [r7, #4] + 800e744: 625a str r2, [r3, #36] @ 0x24 + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + 800e746: 687b ldr r3, [r7, #4] + 800e748: 2205 movs r2, #5 + 800e74a: f883 2020 strb.w r2, [r3, #32] + + return HAL_ERROR; + 800e74e: 2301 movs r3, #1 + 800e750: e012 b.n 800e778 + while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) + 800e752: 687b ldr r3, [r7, #4] + 800e754: 681b ldr r3, [r3, #0] + 800e756: 685b ldr r3, [r3, #4] + 800e758: f003 0301 and.w r3, r3, #1 + 800e75c: 2b00 cmp r3, #0 + 800e75e: d1e5 bne.n 800e72c + } + } + + /* Reset the CAN ErrorCode */ + hcan->ErrorCode = HAL_CAN_ERROR_NONE; + 800e760: 687b ldr r3, [r7, #4] + 800e762: 2200 movs r2, #0 + 800e764: 625a str r2, [r3, #36] @ 0x24 + + /* Return function status */ + return HAL_OK; + 800e766: 2300 movs r3, #0 + 800e768: e006 b.n 800e778 + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; + 800e76a: 687b ldr r3, [r7, #4] + 800e76c: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e76e: f443 2200 orr.w r2, r3, #524288 @ 0x80000 + 800e772: 687b ldr r3, [r7, #4] + 800e774: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e776: 2301 movs r3, #1 + } +} + 800e778: 4618 mov r0, r3 + 800e77a: 3710 adds r7, #16 + 800e77c: 46bd mov sp, r7 + 800e77e: bd80 pop {r7, pc} + +0800e780 : + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) +{ + 800e780: b580 push {r7, lr} + 800e782: b084 sub sp, #16 + 800e784: af00 add r7, sp, #0 + 800e786: 6078 str r0, [r7, #4] + uint32_t tickstart; + + if (hcan->State == HAL_CAN_STATE_LISTENING) + 800e788: 687b ldr r3, [r7, #4] + 800e78a: f893 3020 ldrb.w r3, [r3, #32] + 800e78e: b2db uxtb r3, r3 + 800e790: 2b02 cmp r3, #2 + 800e792: d133 bne.n 800e7fc + { + /* Request initialisation */ + SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); + 800e794: 687b ldr r3, [r7, #4] + 800e796: 681b ldr r3, [r3, #0] + 800e798: 681a ldr r2, [r3, #0] + 800e79a: 687b ldr r3, [r7, #4] + 800e79c: 681b ldr r3, [r3, #0] + 800e79e: f042 0201 orr.w r2, r2, #1 + 800e7a2: 601a str r2, [r3, #0] + + /* Get tick */ + tickstart = HAL_GetTick(); + 800e7a4: f7ff f898 bl 800d8d8 + 800e7a8: 60f8 str r0, [r7, #12] + + /* Wait the acknowledge */ + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) + 800e7aa: e012 b.n 800e7d2 + { + /* Check for the Timeout */ + if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) + 800e7ac: f7ff f894 bl 800d8d8 + 800e7b0: 4602 mov r2, r0 + 800e7b2: 68fb ldr r3, [r7, #12] + 800e7b4: 1ad3 subs r3, r2, r3 + 800e7b6: 2b0a cmp r3, #10 + 800e7b8: d90b bls.n 800e7d2 + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; + 800e7ba: 687b ldr r3, [r7, #4] + 800e7bc: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e7be: f443 3200 orr.w r2, r3, #131072 @ 0x20000 + 800e7c2: 687b ldr r3, [r7, #4] + 800e7c4: 625a str r2, [r3, #36] @ 0x24 + + /* Change CAN state */ + hcan->State = HAL_CAN_STATE_ERROR; + 800e7c6: 687b ldr r3, [r7, #4] + 800e7c8: 2205 movs r2, #5 + 800e7ca: f883 2020 strb.w r2, [r3, #32] + + return HAL_ERROR; + 800e7ce: 2301 movs r3, #1 + 800e7d0: e01b b.n 800e80a + while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) + 800e7d2: 687b ldr r3, [r7, #4] + 800e7d4: 681b ldr r3, [r3, #0] + 800e7d6: 685b ldr r3, [r3, #4] + 800e7d8: f003 0301 and.w r3, r3, #1 + 800e7dc: 2b00 cmp r3, #0 + 800e7de: d0e5 beq.n 800e7ac + } + } + + /* Exit from sleep mode */ + CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); + 800e7e0: 687b ldr r3, [r7, #4] + 800e7e2: 681b ldr r3, [r3, #0] + 800e7e4: 681a ldr r2, [r3, #0] + 800e7e6: 687b ldr r3, [r7, #4] + 800e7e8: 681b ldr r3, [r3, #0] + 800e7ea: f022 0202 bic.w r2, r2, #2 + 800e7ee: 601a str r2, [r3, #0] + + /* Change CAN peripheral state */ + hcan->State = HAL_CAN_STATE_READY; + 800e7f0: 687b ldr r3, [r7, #4] + 800e7f2: 2201 movs r2, #1 + 800e7f4: f883 2020 strb.w r2, [r3, #32] + + /* Return function status */ + return HAL_OK; + 800e7f8: 2300 movs r3, #0 + 800e7fa: e006 b.n 800e80a + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; + 800e7fc: 687b ldr r3, [r7, #4] + 800e7fe: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e800: f443 1280 orr.w r2, r3, #1048576 @ 0x100000 + 800e804: 687b ldr r3, [r7, #4] + 800e806: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e808: 2301 movs r3, #1 + } +} + 800e80a: 4618 mov r0, r3 + 800e80c: 3710 adds r7, #16 + 800e80e: 46bd mov sp, r7 + 800e810: bd80 pop {r7, pc} + +0800e812 : + * This parameter can be a value of @arg CAN_Tx_Mailboxes. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, const CAN_TxHeaderTypeDef *pHeader, + const uint8_t aData[], uint32_t *pTxMailbox) +{ + 800e812: b480 push {r7} + 800e814: b089 sub sp, #36 @ 0x24 + 800e816: af00 add r7, sp, #0 + 800e818: 60f8 str r0, [r7, #12] + 800e81a: 60b9 str r1, [r7, #8] + 800e81c: 607a str r2, [r7, #4] + 800e81e: 603b str r3, [r7, #0] + uint32_t transmitmailbox; + HAL_CAN_StateTypeDef state = hcan->State; + 800e820: 68fb ldr r3, [r7, #12] + 800e822: f893 3020 ldrb.w r3, [r3, #32] + 800e826: 77fb strb r3, [r7, #31] + uint32_t tsr = READ_REG(hcan->Instance->TSR); + 800e828: 68fb ldr r3, [r7, #12] + 800e82a: 681b ldr r3, [r3, #0] + 800e82c: 689b ldr r3, [r3, #8] + 800e82e: 61bb str r3, [r7, #24] + { + assert_param(IS_CAN_EXTID(pHeader->ExtId)); + } + assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); + + if ((state == HAL_CAN_STATE_READY) || + 800e830: 7ffb ldrb r3, [r7, #31] + 800e832: 2b01 cmp r3, #1 + 800e834: d003 beq.n 800e83e + 800e836: 7ffb ldrb r3, [r7, #31] + 800e838: 2b02 cmp r3, #2 + 800e83a: f040 80ad bne.w 800e998 + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check that all the Tx mailboxes are not full */ + if (((tsr & CAN_TSR_TME0) != 0U) || + 800e83e: 69bb ldr r3, [r7, #24] + 800e840: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 + 800e844: 2b00 cmp r3, #0 + 800e846: d10a bne.n 800e85e + ((tsr & CAN_TSR_TME1) != 0U) || + 800e848: 69bb ldr r3, [r7, #24] + 800e84a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + if (((tsr & CAN_TSR_TME0) != 0U) || + 800e84e: 2b00 cmp r3, #0 + 800e850: d105 bne.n 800e85e + ((tsr & CAN_TSR_TME2) != 0U)) + 800e852: 69bb ldr r3, [r7, #24] + 800e854: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + ((tsr & CAN_TSR_TME1) != 0U) || + 800e858: 2b00 cmp r3, #0 + 800e85a: f000 8095 beq.w 800e988 + { + /* Select an empty transmit mailbox */ + transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; + 800e85e: 69bb ldr r3, [r7, #24] + 800e860: 0e1b lsrs r3, r3, #24 + 800e862: f003 0303 and.w r3, r3, #3 + 800e866: 617b str r3, [r7, #20] + + /* Store the Tx mailbox */ + *pTxMailbox = (uint32_t)1 << transmitmailbox; + 800e868: 2201 movs r2, #1 + 800e86a: 697b ldr r3, [r7, #20] + 800e86c: 409a lsls r2, r3 + 800e86e: 683b ldr r3, [r7, #0] + 800e870: 601a str r2, [r3, #0] + + /* Set up the Id */ + if (pHeader->IDE == CAN_ID_STD) + 800e872: 68bb ldr r3, [r7, #8] + 800e874: 689b ldr r3, [r3, #8] + 800e876: 2b00 cmp r3, #0 + 800e878: d10d bne.n 800e896 + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + 800e87a: 68bb ldr r3, [r7, #8] + 800e87c: 681b ldr r3, [r3, #0] + 800e87e: 055a lsls r2, r3, #21 + pHeader->RTR); + 800e880: 68bb ldr r3, [r7, #8] + 800e882: 68db ldr r3, [r3, #12] + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | + 800e884: 68f9 ldr r1, [r7, #12] + 800e886: 6809 ldr r1, [r1, #0] + 800e888: 431a orrs r2, r3 + 800e88a: 697b ldr r3, [r7, #20] + 800e88c: 3318 adds r3, #24 + 800e88e: 011b lsls r3, r3, #4 + 800e890: 440b add r3, r1 + 800e892: 601a str r2, [r3, #0] + 800e894: e00f b.n 800e8b6 + } + else + { + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + 800e896: 68bb ldr r3, [r7, #8] + 800e898: 685b ldr r3, [r3, #4] + 800e89a: 00da lsls r2, r3, #3 + pHeader->IDE | + 800e89c: 68bb ldr r3, [r7, #8] + 800e89e: 689b ldr r3, [r3, #8] + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + 800e8a0: 431a orrs r2, r3 + pHeader->RTR); + 800e8a2: 68bb ldr r3, [r7, #8] + 800e8a4: 68db ldr r3, [r3, #12] + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + 800e8a6: 68f9 ldr r1, [r7, #12] + 800e8a8: 6809 ldr r1, [r1, #0] + pHeader->IDE | + 800e8aa: 431a orrs r2, r3 + hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | + 800e8ac: 697b ldr r3, [r7, #20] + 800e8ae: 3318 adds r3, #24 + 800e8b0: 011b lsls r3, r3, #4 + 800e8b2: 440b add r3, r1 + 800e8b4: 601a str r2, [r3, #0] + } + + /* Set up the DLC */ + hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); + 800e8b6: 68fb ldr r3, [r7, #12] + 800e8b8: 6819 ldr r1, [r3, #0] + 800e8ba: 68bb ldr r3, [r7, #8] + 800e8bc: 691a ldr r2, [r3, #16] + 800e8be: 697b ldr r3, [r7, #20] + 800e8c0: 3318 adds r3, #24 + 800e8c2: 011b lsls r3, r3, #4 + 800e8c4: 440b add r3, r1 + 800e8c6: 3304 adds r3, #4 + 800e8c8: 601a str r2, [r3, #0] + + /* Set up the Transmit Global Time mode */ + if (pHeader->TransmitGlobalTime == ENABLE) + 800e8ca: 68bb ldr r3, [r7, #8] + 800e8cc: 7d1b ldrb r3, [r3, #20] + 800e8ce: 2b01 cmp r3, #1 + 800e8d0: d111 bne.n 800e8f6 + { + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); + 800e8d2: 68fb ldr r3, [r7, #12] + 800e8d4: 681a ldr r2, [r3, #0] + 800e8d6: 697b ldr r3, [r7, #20] + 800e8d8: 3318 adds r3, #24 + 800e8da: 011b lsls r3, r3, #4 + 800e8dc: 4413 add r3, r2 + 800e8de: 3304 adds r3, #4 + 800e8e0: 681b ldr r3, [r3, #0] + 800e8e2: 68fa ldr r2, [r7, #12] + 800e8e4: 6811 ldr r1, [r2, #0] + 800e8e6: f443 7280 orr.w r2, r3, #256 @ 0x100 + 800e8ea: 697b ldr r3, [r7, #20] + 800e8ec: 3318 adds r3, #24 + 800e8ee: 011b lsls r3, r3, #4 + 800e8f0: 440b add r3, r1 + 800e8f2: 3304 adds r3, #4 + 800e8f4: 601a str r2, [r3, #0] + } + + /* Set up the data field */ + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, + 800e8f6: 687b ldr r3, [r7, #4] + 800e8f8: 3307 adds r3, #7 + 800e8fa: 781b ldrb r3, [r3, #0] + 800e8fc: 061a lsls r2, r3, #24 + 800e8fe: 687b ldr r3, [r7, #4] + 800e900: 3306 adds r3, #6 + 800e902: 781b ldrb r3, [r3, #0] + 800e904: 041b lsls r3, r3, #16 + 800e906: 431a orrs r2, r3 + 800e908: 687b ldr r3, [r7, #4] + 800e90a: 3305 adds r3, #5 + 800e90c: 781b ldrb r3, [r3, #0] + 800e90e: 021b lsls r3, r3, #8 + 800e910: 4313 orrs r3, r2 + 800e912: 687a ldr r2, [r7, #4] + 800e914: 3204 adds r2, #4 + 800e916: 7812 ldrb r2, [r2, #0] + 800e918: 4610 mov r0, r2 + 800e91a: 68fa ldr r2, [r7, #12] + 800e91c: 6811 ldr r1, [r2, #0] + 800e91e: ea43 0200 orr.w r2, r3, r0 + 800e922: 697b ldr r3, [r7, #20] + 800e924: 011b lsls r3, r3, #4 + 800e926: 440b add r3, r1 + 800e928: f503 73c6 add.w r3, r3, #396 @ 0x18c + 800e92c: 601a str r2, [r3, #0] + ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | + ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | + ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | + ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); + WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, + 800e92e: 687b ldr r3, [r7, #4] + 800e930: 3303 adds r3, #3 + 800e932: 781b ldrb r3, [r3, #0] + 800e934: 061a lsls r2, r3, #24 + 800e936: 687b ldr r3, [r7, #4] + 800e938: 3302 adds r3, #2 + 800e93a: 781b ldrb r3, [r3, #0] + 800e93c: 041b lsls r3, r3, #16 + 800e93e: 431a orrs r2, r3 + 800e940: 687b ldr r3, [r7, #4] + 800e942: 3301 adds r3, #1 + 800e944: 781b ldrb r3, [r3, #0] + 800e946: 021b lsls r3, r3, #8 + 800e948: 4313 orrs r3, r2 + 800e94a: 687a ldr r2, [r7, #4] + 800e94c: 7812 ldrb r2, [r2, #0] + 800e94e: 4610 mov r0, r2 + 800e950: 68fa ldr r2, [r7, #12] + 800e952: 6811 ldr r1, [r2, #0] + 800e954: ea43 0200 orr.w r2, r3, r0 + 800e958: 697b ldr r3, [r7, #20] + 800e95a: 011b lsls r3, r3, #4 + 800e95c: 440b add r3, r1 + 800e95e: f503 73c4 add.w r3, r3, #392 @ 0x188 + 800e962: 601a str r2, [r3, #0] + ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | + ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | + ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); + + /* Request transmission */ + SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); + 800e964: 68fb ldr r3, [r7, #12] + 800e966: 681a ldr r2, [r3, #0] + 800e968: 697b ldr r3, [r7, #20] + 800e96a: 3318 adds r3, #24 + 800e96c: 011b lsls r3, r3, #4 + 800e96e: 4413 add r3, r2 + 800e970: 681b ldr r3, [r3, #0] + 800e972: 68fa ldr r2, [r7, #12] + 800e974: 6811 ldr r1, [r2, #0] + 800e976: f043 0201 orr.w r2, r3, #1 + 800e97a: 697b ldr r3, [r7, #20] + 800e97c: 3318 adds r3, #24 + 800e97e: 011b lsls r3, r3, #4 + 800e980: 440b add r3, r1 + 800e982: 601a str r2, [r3, #0] + + /* Return function status */ + return HAL_OK; + 800e984: 2300 movs r3, #0 + 800e986: e00e b.n 800e9a6 + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + 800e988: 68fb ldr r3, [r7, #12] + 800e98a: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e98c: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 + 800e990: 68fb ldr r3, [r7, #12] + 800e992: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e994: 2301 movs r3, #1 + 800e996: e006 b.n 800e9a6 + } + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + 800e998: 68fb ldr r3, [r7, #12] + 800e99a: 6a5b ldr r3, [r3, #36] @ 0x24 + 800e99c: f443 2280 orr.w r2, r3, #262144 @ 0x40000 + 800e9a0: 68fb ldr r3, [r7, #12] + 800e9a2: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800e9a4: 2301 movs r3, #1 + } +} + 800e9a6: 4618 mov r0, r3 + 800e9a8: 3724 adds r7, #36 @ 0x24 + 800e9aa: 46bd mov sp, r7 + 800e9ac: bc80 pop {r7} + 800e9ae: 4770 bx lr + +0800e9b0 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval Number of free Tx Mailboxes. + */ +uint32_t HAL_CAN_GetTxMailboxesFreeLevel(const CAN_HandleTypeDef *hcan) +{ + 800e9b0: b480 push {r7} + 800e9b2: b085 sub sp, #20 + 800e9b4: af00 add r7, sp, #0 + 800e9b6: 6078 str r0, [r7, #4] + uint32_t freelevel = 0U; + 800e9b8: 2300 movs r3, #0 + 800e9ba: 60fb str r3, [r7, #12] + HAL_CAN_StateTypeDef state = hcan->State; + 800e9bc: 687b ldr r3, [r7, #4] + 800e9be: f893 3020 ldrb.w r3, [r3, #32] + 800e9c2: 72fb strb r3, [r7, #11] + + if ((state == HAL_CAN_STATE_READY) || + 800e9c4: 7afb ldrb r3, [r7, #11] + 800e9c6: 2b01 cmp r3, #1 + 800e9c8: d002 beq.n 800e9d0 + 800e9ca: 7afb ldrb r3, [r7, #11] + 800e9cc: 2b02 cmp r3, #2 + 800e9ce: d11d bne.n 800ea0c + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check Tx Mailbox 0 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) + 800e9d0: 687b ldr r3, [r7, #4] + 800e9d2: 681b ldr r3, [r3, #0] + 800e9d4: 689b ldr r3, [r3, #8] + 800e9d6: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 + 800e9da: 2b00 cmp r3, #0 + 800e9dc: d002 beq.n 800e9e4 + { + freelevel++; + 800e9de: 68fb ldr r3, [r7, #12] + 800e9e0: 3301 adds r3, #1 + 800e9e2: 60fb str r3, [r7, #12] + } + + /* Check Tx Mailbox 1 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) + 800e9e4: 687b ldr r3, [r7, #4] + 800e9e6: 681b ldr r3, [r3, #0] + 800e9e8: 689b ldr r3, [r3, #8] + 800e9ea: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800e9ee: 2b00 cmp r3, #0 + 800e9f0: d002 beq.n 800e9f8 + { + freelevel++; + 800e9f2: 68fb ldr r3, [r7, #12] + 800e9f4: 3301 adds r3, #1 + 800e9f6: 60fb str r3, [r7, #12] + } + + /* Check Tx Mailbox 2 status */ + if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) + 800e9f8: 687b ldr r3, [r7, #4] + 800e9fa: 681b ldr r3, [r3, #0] + 800e9fc: 689b ldr r3, [r3, #8] + 800e9fe: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800ea02: 2b00 cmp r3, #0 + 800ea04: d002 beq.n 800ea0c + { + freelevel++; + 800ea06: 68fb ldr r3, [r7, #12] + 800ea08: 3301 adds r3, #1 + 800ea0a: 60fb str r3, [r7, #12] + } + } + + /* Return Tx Mailboxes free level */ + return freelevel; + 800ea0c: 68fb ldr r3, [r7, #12] +} + 800ea0e: 4618 mov r0, r3 + 800ea10: 3714 adds r7, #20 + 800ea12: 46bd mov sp, r7 + 800ea14: bc80 pop {r7} + 800ea16: 4770 bx lr + +0800ea18 : + * @param aData array where the payload of the Rx frame will be stored. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, + CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) +{ + 800ea18: b480 push {r7} + 800ea1a: b087 sub sp, #28 + 800ea1c: af00 add r7, sp, #0 + 800ea1e: 60f8 str r0, [r7, #12] + 800ea20: 60b9 str r1, [r7, #8] + 800ea22: 607a str r2, [r7, #4] + 800ea24: 603b str r3, [r7, #0] + HAL_CAN_StateTypeDef state = hcan->State; + 800ea26: 68fb ldr r3, [r7, #12] + 800ea28: f893 3020 ldrb.w r3, [r3, #32] + 800ea2c: 75fb strb r3, [r7, #23] + + assert_param(IS_CAN_RX_FIFO(RxFifo)); + + if ((state == HAL_CAN_STATE_READY) || + 800ea2e: 7dfb ldrb r3, [r7, #23] + 800ea30: 2b01 cmp r3, #1 + 800ea32: d003 beq.n 800ea3c + 800ea34: 7dfb ldrb r3, [r7, #23] + 800ea36: 2b02 cmp r3, #2 + 800ea38: f040 8103 bne.w 800ec42 + (state == HAL_CAN_STATE_LISTENING)) + { + /* Check the Rx FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + 800ea3c: 68bb ldr r3, [r7, #8] + 800ea3e: 2b00 cmp r3, #0 + 800ea40: d10e bne.n 800ea60 + { + /* Check that the Rx FIFO 0 is not empty */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) + 800ea42: 68fb ldr r3, [r7, #12] + 800ea44: 681b ldr r3, [r3, #0] + 800ea46: 68db ldr r3, [r3, #12] + 800ea48: f003 0303 and.w r3, r3, #3 + 800ea4c: 2b00 cmp r3, #0 + 800ea4e: d116 bne.n 800ea7e + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + 800ea50: 68fb ldr r3, [r7, #12] + 800ea52: 6a5b ldr r3, [r3, #36] @ 0x24 + 800ea54: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 + 800ea58: 68fb ldr r3, [r7, #12] + 800ea5a: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800ea5c: 2301 movs r3, #1 + 800ea5e: e0f7 b.n 800ec50 + } + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Check that the Rx FIFO 1 is not empty */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) + 800ea60: 68fb ldr r3, [r7, #12] + 800ea62: 681b ldr r3, [r3, #0] + 800ea64: 691b ldr r3, [r3, #16] + 800ea66: f003 0303 and.w r3, r3, #3 + 800ea6a: 2b00 cmp r3, #0 + 800ea6c: d107 bne.n 800ea7e + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; + 800ea6e: 68fb ldr r3, [r7, #12] + 800ea70: 6a5b ldr r3, [r3, #36] @ 0x24 + 800ea72: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 + 800ea76: 68fb ldr r3, [r7, #12] + 800ea78: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800ea7a: 2301 movs r3, #1 + 800ea7c: e0e8 b.n 800ec50 + } + } + + /* Get the header */ + pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; + 800ea7e: 68fb ldr r3, [r7, #12] + 800ea80: 681a ldr r2, [r3, #0] + 800ea82: 68bb ldr r3, [r7, #8] + 800ea84: 331b adds r3, #27 + 800ea86: 011b lsls r3, r3, #4 + 800ea88: 4413 add r3, r2 + 800ea8a: 681b ldr r3, [r3, #0] + 800ea8c: f003 0204 and.w r2, r3, #4 + 800ea90: 687b ldr r3, [r7, #4] + 800ea92: 609a str r2, [r3, #8] + if (pHeader->IDE == CAN_ID_STD) + 800ea94: 687b ldr r3, [r7, #4] + 800ea96: 689b ldr r3, [r3, #8] + 800ea98: 2b00 cmp r3, #0 + 800ea9a: d10c bne.n 800eab6 + { + pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; + 800ea9c: 68fb ldr r3, [r7, #12] + 800ea9e: 681a ldr r2, [r3, #0] + 800eaa0: 68bb ldr r3, [r7, #8] + 800eaa2: 331b adds r3, #27 + 800eaa4: 011b lsls r3, r3, #4 + 800eaa6: 4413 add r3, r2 + 800eaa8: 681b ldr r3, [r3, #0] + 800eaaa: 0d5b lsrs r3, r3, #21 + 800eaac: f3c3 020a ubfx r2, r3, #0, #11 + 800eab0: 687b ldr r3, [r7, #4] + 800eab2: 601a str r2, [r3, #0] + 800eab4: e00b b.n 800eace + } + else + { + pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & + hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos; + 800eab6: 68fb ldr r3, [r7, #12] + 800eab8: 681a ldr r2, [r3, #0] + 800eaba: 68bb ldr r3, [r7, #8] + 800eabc: 331b adds r3, #27 + 800eabe: 011b lsls r3, r3, #4 + 800eac0: 4413 add r3, r2 + 800eac2: 681b ldr r3, [r3, #0] + 800eac4: 08db lsrs r3, r3, #3 + 800eac6: f023 4260 bic.w r2, r3, #3758096384 @ 0xe0000000 + pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & + 800eaca: 687b ldr r3, [r7, #4] + 800eacc: 605a str r2, [r3, #4] + } + pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR); + 800eace: 68fb ldr r3, [r7, #12] + 800ead0: 681a ldr r2, [r3, #0] + 800ead2: 68bb ldr r3, [r7, #8] + 800ead4: 331b adds r3, #27 + 800ead6: 011b lsls r3, r3, #4 + 800ead8: 4413 add r3, r2 + 800eada: 681b ldr r3, [r3, #0] + 800eadc: f003 0202 and.w r2, r3, #2 + 800eae0: 687b ldr r3, [r7, #4] + 800eae2: 60da str r2, [r3, #12] + if (((CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos) >= 8U) + 800eae4: 68fb ldr r3, [r7, #12] + 800eae6: 681a ldr r2, [r3, #0] + 800eae8: 68bb ldr r3, [r7, #8] + 800eaea: 331b adds r3, #27 + 800eaec: 011b lsls r3, r3, #4 + 800eaee: 4413 add r3, r2 + 800eaf0: 3304 adds r3, #4 + 800eaf2: 681b ldr r3, [r3, #0] + 800eaf4: f003 0308 and.w r3, r3, #8 + 800eaf8: 2b00 cmp r3, #0 + 800eafa: d003 beq.n 800eb04 + { + /* Truncate DLC to 8 if received field is over range */ + pHeader->DLC = 8U; + 800eafc: 687b ldr r3, [r7, #4] + 800eafe: 2208 movs r2, #8 + 800eb00: 611a str r2, [r3, #16] + 800eb02: e00b b.n 800eb1c + } + else + { + pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos; + 800eb04: 68fb ldr r3, [r7, #12] + 800eb06: 681a ldr r2, [r3, #0] + 800eb08: 68bb ldr r3, [r7, #8] + 800eb0a: 331b adds r3, #27 + 800eb0c: 011b lsls r3, r3, #4 + 800eb0e: 4413 add r3, r2 + 800eb10: 3304 adds r3, #4 + 800eb12: 681b ldr r3, [r3, #0] + 800eb14: f003 020f and.w r2, r3, #15 + 800eb18: 687b ldr r3, [r7, #4] + 800eb1a: 611a str r2, [r3, #16] + } + pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos; + 800eb1c: 68fb ldr r3, [r7, #12] + 800eb1e: 681a ldr r2, [r3, #0] + 800eb20: 68bb ldr r3, [r7, #8] + 800eb22: 331b adds r3, #27 + 800eb24: 011b lsls r3, r3, #4 + 800eb26: 4413 add r3, r2 + 800eb28: 3304 adds r3, #4 + 800eb2a: 681b ldr r3, [r3, #0] + 800eb2c: 0a1b lsrs r3, r3, #8 + 800eb2e: b2da uxtb r2, r3 + 800eb30: 687b ldr r3, [r7, #4] + 800eb32: 619a str r2, [r3, #24] + pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos; + 800eb34: 68fb ldr r3, [r7, #12] + 800eb36: 681a ldr r2, [r3, #0] + 800eb38: 68bb ldr r3, [r7, #8] + 800eb3a: 331b adds r3, #27 + 800eb3c: 011b lsls r3, r3, #4 + 800eb3e: 4413 add r3, r2 + 800eb40: 3304 adds r3, #4 + 800eb42: 681b ldr r3, [r3, #0] + 800eb44: 0c1b lsrs r3, r3, #16 + 800eb46: b29a uxth r2, r3 + 800eb48: 687b ldr r3, [r7, #4] + 800eb4a: 615a str r2, [r3, #20] + + /* Get the data */ + aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); + 800eb4c: 68fb ldr r3, [r7, #12] + 800eb4e: 681a ldr r2, [r3, #0] + 800eb50: 68bb ldr r3, [r7, #8] + 800eb52: 011b lsls r3, r3, #4 + 800eb54: 4413 add r3, r2 + 800eb56: f503 73dc add.w r3, r3, #440 @ 0x1b8 + 800eb5a: 681b ldr r3, [r3, #0] + 800eb5c: b2da uxtb r2, r3 + 800eb5e: 683b ldr r3, [r7, #0] + 800eb60: 701a strb r2, [r3, #0] + aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); + 800eb62: 68fb ldr r3, [r7, #12] + 800eb64: 681a ldr r2, [r3, #0] + 800eb66: 68bb ldr r3, [r7, #8] + 800eb68: 011b lsls r3, r3, #4 + 800eb6a: 4413 add r3, r2 + 800eb6c: f503 73dc add.w r3, r3, #440 @ 0x1b8 + 800eb70: 681b ldr r3, [r3, #0] + 800eb72: 0a1a lsrs r2, r3, #8 + 800eb74: 683b ldr r3, [r7, #0] + 800eb76: 3301 adds r3, #1 + 800eb78: b2d2 uxtb r2, r2 + 800eb7a: 701a strb r2, [r3, #0] + aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); + 800eb7c: 68fb ldr r3, [r7, #12] + 800eb7e: 681a ldr r2, [r3, #0] + 800eb80: 68bb ldr r3, [r7, #8] + 800eb82: 011b lsls r3, r3, #4 + 800eb84: 4413 add r3, r2 + 800eb86: f503 73dc add.w r3, r3, #440 @ 0x1b8 + 800eb8a: 681b ldr r3, [r3, #0] + 800eb8c: 0c1a lsrs r2, r3, #16 + 800eb8e: 683b ldr r3, [r7, #0] + 800eb90: 3302 adds r3, #2 + 800eb92: b2d2 uxtb r2, r2 + 800eb94: 701a strb r2, [r3, #0] + aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); + 800eb96: 68fb ldr r3, [r7, #12] + 800eb98: 681a ldr r2, [r3, #0] + 800eb9a: 68bb ldr r3, [r7, #8] + 800eb9c: 011b lsls r3, r3, #4 + 800eb9e: 4413 add r3, r2 + 800eba0: f503 73dc add.w r3, r3, #440 @ 0x1b8 + 800eba4: 681b ldr r3, [r3, #0] + 800eba6: 0e1a lsrs r2, r3, #24 + 800eba8: 683b ldr r3, [r7, #0] + 800ebaa: 3303 adds r3, #3 + 800ebac: b2d2 uxtb r2, r2 + 800ebae: 701a strb r2, [r3, #0] + aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); + 800ebb0: 68fb ldr r3, [r7, #12] + 800ebb2: 681a ldr r2, [r3, #0] + 800ebb4: 68bb ldr r3, [r7, #8] + 800ebb6: 011b lsls r3, r3, #4 + 800ebb8: 4413 add r3, r2 + 800ebba: f503 73de add.w r3, r3, #444 @ 0x1bc + 800ebbe: 681a ldr r2, [r3, #0] + 800ebc0: 683b ldr r3, [r7, #0] + 800ebc2: 3304 adds r3, #4 + 800ebc4: b2d2 uxtb r2, r2 + 800ebc6: 701a strb r2, [r3, #0] + aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); + 800ebc8: 68fb ldr r3, [r7, #12] + 800ebca: 681a ldr r2, [r3, #0] + 800ebcc: 68bb ldr r3, [r7, #8] + 800ebce: 011b lsls r3, r3, #4 + 800ebd0: 4413 add r3, r2 + 800ebd2: f503 73de add.w r3, r3, #444 @ 0x1bc + 800ebd6: 681b ldr r3, [r3, #0] + 800ebd8: 0a1a lsrs r2, r3, #8 + 800ebda: 683b ldr r3, [r7, #0] + 800ebdc: 3305 adds r3, #5 + 800ebde: b2d2 uxtb r2, r2 + 800ebe0: 701a strb r2, [r3, #0] + aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); + 800ebe2: 68fb ldr r3, [r7, #12] + 800ebe4: 681a ldr r2, [r3, #0] + 800ebe6: 68bb ldr r3, [r7, #8] + 800ebe8: 011b lsls r3, r3, #4 + 800ebea: 4413 add r3, r2 + 800ebec: f503 73de add.w r3, r3, #444 @ 0x1bc + 800ebf0: 681b ldr r3, [r3, #0] + 800ebf2: 0c1a lsrs r2, r3, #16 + 800ebf4: 683b ldr r3, [r7, #0] + 800ebf6: 3306 adds r3, #6 + 800ebf8: b2d2 uxtb r2, r2 + 800ebfa: 701a strb r2, [r3, #0] + aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); + 800ebfc: 68fb ldr r3, [r7, #12] + 800ebfe: 681a ldr r2, [r3, #0] + 800ec00: 68bb ldr r3, [r7, #8] + 800ec02: 011b lsls r3, r3, #4 + 800ec04: 4413 add r3, r2 + 800ec06: f503 73de add.w r3, r3, #444 @ 0x1bc + 800ec0a: 681b ldr r3, [r3, #0] + 800ec0c: 0e1a lsrs r2, r3, #24 + 800ec0e: 683b ldr r3, [r7, #0] + 800ec10: 3307 adds r3, #7 + 800ec12: b2d2 uxtb r2, r2 + 800ec14: 701a strb r2, [r3, #0] + + /* Release the FIFO */ + if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ + 800ec16: 68bb ldr r3, [r7, #8] + 800ec18: 2b00 cmp r3, #0 + 800ec1a: d108 bne.n 800ec2e + { + /* Release RX FIFO 0 */ + SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); + 800ec1c: 68fb ldr r3, [r7, #12] + 800ec1e: 681b ldr r3, [r3, #0] + 800ec20: 68da ldr r2, [r3, #12] + 800ec22: 68fb ldr r3, [r7, #12] + 800ec24: 681b ldr r3, [r3, #0] + 800ec26: f042 0220 orr.w r2, r2, #32 + 800ec2a: 60da str r2, [r3, #12] + 800ec2c: e007 b.n 800ec3e + } + else /* Rx element is assigned to Rx FIFO 1 */ + { + /* Release RX FIFO 1 */ + SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); + 800ec2e: 68fb ldr r3, [r7, #12] + 800ec30: 681b ldr r3, [r3, #0] + 800ec32: 691a ldr r2, [r3, #16] + 800ec34: 68fb ldr r3, [r7, #12] + 800ec36: 681b ldr r3, [r3, #0] + 800ec38: f042 0220 orr.w r2, r2, #32 + 800ec3c: 611a str r2, [r3, #16] + } + + /* Return function status */ + return HAL_OK; + 800ec3e: 2300 movs r3, #0 + 800ec40: e006 b.n 800ec50 + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + 800ec42: 68fb ldr r3, [r7, #12] + 800ec44: 6a5b ldr r3, [r3, #36] @ 0x24 + 800ec46: f443 2280 orr.w r2, r3, #262144 @ 0x40000 + 800ec4a: 68fb ldr r3, [r7, #12] + 800ec4c: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800ec4e: 2301 movs r3, #1 + } +} + 800ec50: 4618 mov r0, r3 + 800ec52: 371c adds r7, #28 + 800ec54: 46bd mov sp, r7 + 800ec56: bc80 pop {r7} + 800ec58: 4770 bx lr + +0800ec5a : + * @param ActiveITs indicates which interrupts will be enabled. + * This parameter can be any combination of @arg CAN_Interrupts. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) +{ + 800ec5a: b480 push {r7} + 800ec5c: b085 sub sp, #20 + 800ec5e: af00 add r7, sp, #0 + 800ec60: 6078 str r0, [r7, #4] + 800ec62: 6039 str r1, [r7, #0] + HAL_CAN_StateTypeDef state = hcan->State; + 800ec64: 687b ldr r3, [r7, #4] + 800ec66: f893 3020 ldrb.w r3, [r3, #32] + 800ec6a: 73fb strb r3, [r7, #15] + + /* Check function parameters */ + assert_param(IS_CAN_IT(ActiveITs)); + + if ((state == HAL_CAN_STATE_READY) || + 800ec6c: 7bfb ldrb r3, [r7, #15] + 800ec6e: 2b01 cmp r3, #1 + 800ec70: d002 beq.n 800ec78 + 800ec72: 7bfb ldrb r3, [r7, #15] + 800ec74: 2b02 cmp r3, #2 + 800ec76: d109 bne.n 800ec8c + (state == HAL_CAN_STATE_LISTENING)) + { + /* Enable the selected interrupts */ + __HAL_CAN_ENABLE_IT(hcan, ActiveITs); + 800ec78: 687b ldr r3, [r7, #4] + 800ec7a: 681b ldr r3, [r3, #0] + 800ec7c: 6959 ldr r1, [r3, #20] + 800ec7e: 687b ldr r3, [r7, #4] + 800ec80: 681b ldr r3, [r3, #0] + 800ec82: 683a ldr r2, [r7, #0] + 800ec84: 430a orrs r2, r1 + 800ec86: 615a str r2, [r3, #20] + + /* Return function status */ + return HAL_OK; + 800ec88: 2300 movs r3, #0 + 800ec8a: e006 b.n 800ec9a + } + else + { + /* Update error code */ + hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; + 800ec8c: 687b ldr r3, [r7, #4] + 800ec8e: 6a5b ldr r3, [r3, #36] @ 0x24 + 800ec90: f443 2280 orr.w r2, r3, #262144 @ 0x40000 + 800ec94: 687b ldr r3, [r7, #4] + 800ec96: 625a str r2, [r3, #36] @ 0x24 + + return HAL_ERROR; + 800ec98: 2301 movs r3, #1 + } +} + 800ec9a: 4618 mov r0, r3 + 800ec9c: 3714 adds r7, #20 + 800ec9e: 46bd mov sp, r7 + 800eca0: bc80 pop {r7} + 800eca2: 4770 bx lr + +0800eca4 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) +{ + 800eca4: b580 push {r7, lr} + 800eca6: b08a sub sp, #40 @ 0x28 + 800eca8: af00 add r7, sp, #0 + 800ecaa: 6078 str r0, [r7, #4] + uint32_t errorcode = HAL_CAN_ERROR_NONE; + 800ecac: 2300 movs r3, #0 + 800ecae: 627b str r3, [r7, #36] @ 0x24 + uint32_t interrupts = READ_REG(hcan->Instance->IER); + 800ecb0: 687b ldr r3, [r7, #4] + 800ecb2: 681b ldr r3, [r3, #0] + 800ecb4: 695b ldr r3, [r3, #20] + 800ecb6: 623b str r3, [r7, #32] + uint32_t msrflags = READ_REG(hcan->Instance->MSR); + 800ecb8: 687b ldr r3, [r7, #4] + 800ecba: 681b ldr r3, [r3, #0] + 800ecbc: 685b ldr r3, [r3, #4] + 800ecbe: 61fb str r3, [r7, #28] + uint32_t tsrflags = READ_REG(hcan->Instance->TSR); + 800ecc0: 687b ldr r3, [r7, #4] + 800ecc2: 681b ldr r3, [r3, #0] + 800ecc4: 689b ldr r3, [r3, #8] + 800ecc6: 61bb str r3, [r7, #24] + uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); + 800ecc8: 687b ldr r3, [r7, #4] + 800ecca: 681b ldr r3, [r3, #0] + 800eccc: 68db ldr r3, [r3, #12] + 800ecce: 617b str r3, [r7, #20] + uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); + 800ecd0: 687b ldr r3, [r7, #4] + 800ecd2: 681b ldr r3, [r3, #0] + 800ecd4: 691b ldr r3, [r3, #16] + 800ecd6: 613b str r3, [r7, #16] + uint32_t esrflags = READ_REG(hcan->Instance->ESR); + 800ecd8: 687b ldr r3, [r7, #4] + 800ecda: 681b ldr r3, [r3, #0] + 800ecdc: 699b ldr r3, [r3, #24] + 800ecde: 60fb str r3, [r7, #12] + + /* Transmit Mailbox empty interrupt management *****************************/ + if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) + 800ece0: 6a3b ldr r3, [r7, #32] + 800ece2: f003 0301 and.w r3, r3, #1 + 800ece6: 2b00 cmp r3, #0 + 800ece8: d07c beq.n 800ede4 + { + /* Transmit Mailbox 0 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP0) != 0U) + 800ecea: 69bb ldr r3, [r7, #24] + 800ecec: f003 0301 and.w r3, r3, #1 + 800ecf0: 2b00 cmp r3, #0 + 800ecf2: d023 beq.n 800ed3c + { + /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); + 800ecf4: 687b ldr r3, [r7, #4] + 800ecf6: 681b ldr r3, [r3, #0] + 800ecf8: 2201 movs r2, #1 + 800ecfa: 609a str r2, [r3, #8] + + if ((tsrflags & CAN_TSR_TXOK0) != 0U) + 800ecfc: 69bb ldr r3, [r7, #24] + 800ecfe: f003 0302 and.w r3, r3, #2 + 800ed02: 2b00 cmp r3, #0 + 800ed04: d003 beq.n 800ed0e +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox0CompleteCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0CompleteCallback(hcan); + 800ed06: 6878 ldr r0, [r7, #4] + 800ed08: f000 f983 bl 800f012 + 800ed0c: e016 b.n 800ed3c +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + else + { + if ((tsrflags & CAN_TSR_ALST0) != 0U) + 800ed0e: 69bb ldr r3, [r7, #24] + 800ed10: f003 0304 and.w r3, r3, #4 + 800ed14: 2b00 cmp r3, #0 + 800ed16: d004 beq.n 800ed22 + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST0; + 800ed18: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ed1a: f443 6300 orr.w r3, r3, #2048 @ 0x800 + 800ed1e: 627b str r3, [r7, #36] @ 0x24 + 800ed20: e00c b.n 800ed3c + } + else if ((tsrflags & CAN_TSR_TERR0) != 0U) + 800ed22: 69bb ldr r3, [r7, #24] + 800ed24: f003 0308 and.w r3, r3, #8 + 800ed28: 2b00 cmp r3, #0 + 800ed2a: d004 beq.n 800ed36 + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR0; + 800ed2c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ed2e: f443 5380 orr.w r3, r3, #4096 @ 0x1000 + 800ed32: 627b str r3, [r7, #36] @ 0x24 + 800ed34: e002 b.n 800ed3c +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox0AbortCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox0AbortCallback(hcan); + 800ed36: 6878 ldr r0, [r7, #4] + 800ed38: f000 f986 bl 800f048 + } + } + } + + /* Transmit Mailbox 1 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP1) != 0U) + 800ed3c: 69bb ldr r3, [r7, #24] + 800ed3e: f403 7380 and.w r3, r3, #256 @ 0x100 + 800ed42: 2b00 cmp r3, #0 + 800ed44: d024 beq.n 800ed90 + { + /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); + 800ed46: 687b ldr r3, [r7, #4] + 800ed48: 681b ldr r3, [r3, #0] + 800ed4a: f44f 7280 mov.w r2, #256 @ 0x100 + 800ed4e: 609a str r2, [r3, #8] + + if ((tsrflags & CAN_TSR_TXOK1) != 0U) + 800ed50: 69bb ldr r3, [r7, #24] + 800ed52: f403 7300 and.w r3, r3, #512 @ 0x200 + 800ed56: 2b00 cmp r3, #0 + 800ed58: d003 beq.n 800ed62 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox1CompleteCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1CompleteCallback(hcan); + 800ed5a: 6878 ldr r0, [r7, #4] + 800ed5c: f000 f962 bl 800f024 + 800ed60: e016 b.n 800ed90 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + else + { + if ((tsrflags & CAN_TSR_ALST1) != 0U) + 800ed62: 69bb ldr r3, [r7, #24] + 800ed64: f403 6380 and.w r3, r3, #1024 @ 0x400 + 800ed68: 2b00 cmp r3, #0 + 800ed6a: d004 beq.n 800ed76 + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST1; + 800ed6c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ed6e: f443 5300 orr.w r3, r3, #8192 @ 0x2000 + 800ed72: 627b str r3, [r7, #36] @ 0x24 + 800ed74: e00c b.n 800ed90 + } + else if ((tsrflags & CAN_TSR_TERR1) != 0U) + 800ed76: 69bb ldr r3, [r7, #24] + 800ed78: f403 6300 and.w r3, r3, #2048 @ 0x800 + 800ed7c: 2b00 cmp r3, #0 + 800ed7e: d004 beq.n 800ed8a + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR1; + 800ed80: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ed82: f443 4380 orr.w r3, r3, #16384 @ 0x4000 + 800ed86: 627b str r3, [r7, #36] @ 0x24 + 800ed88: e002 b.n 800ed90 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox1AbortCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox1AbortCallback(hcan); + 800ed8a: 6878 ldr r0, [r7, #4] + 800ed8c: f000 f965 bl 800f05a + } + } + } + + /* Transmit Mailbox 2 management *****************************************/ + if ((tsrflags & CAN_TSR_RQCP2) != 0U) + 800ed90: 69bb ldr r3, [r7, #24] + 800ed92: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800ed96: 2b00 cmp r3, #0 + 800ed98: d024 beq.n 800ede4 + { + /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); + 800ed9a: 687b ldr r3, [r7, #4] + 800ed9c: 681b ldr r3, [r3, #0] + 800ed9e: f44f 3280 mov.w r2, #65536 @ 0x10000 + 800eda2: 609a str r2, [r3, #8] + + if ((tsrflags & CAN_TSR_TXOK2) != 0U) + 800eda4: 69bb ldr r3, [r7, #24] + 800eda6: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800edaa: 2b00 cmp r3, #0 + 800edac: d003 beq.n 800edb6 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox2CompleteCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2CompleteCallback(hcan); + 800edae: 6878 ldr r0, [r7, #4] + 800edb0: f000 f941 bl 800f036 + 800edb4: e016 b.n 800ede4 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + else + { + if ((tsrflags & CAN_TSR_ALST2) != 0U) + 800edb6: 69bb ldr r3, [r7, #24] + 800edb8: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 800edbc: 2b00 cmp r3, #0 + 800edbe: d004 beq.n 800edca + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_ALST2; + 800edc0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800edc2: f443 4300 orr.w r3, r3, #32768 @ 0x8000 + 800edc6: 627b str r3, [r7, #36] @ 0x24 + 800edc8: e00c b.n 800ede4 + } + else if ((tsrflags & CAN_TSR_TERR2) != 0U) + 800edca: 69bb ldr r3, [r7, #24] + 800edcc: f403 2300 and.w r3, r3, #524288 @ 0x80000 + 800edd0: 2b00 cmp r3, #0 + 800edd2: d004 beq.n 800edde + { + /* Update error code */ + errorcode |= HAL_CAN_ERROR_TX_TERR2; + 800edd4: 6a7b ldr r3, [r7, #36] @ 0x24 + 800edd6: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 800edda: 627b str r3, [r7, #36] @ 0x24 + 800eddc: e002 b.n 800ede4 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->TxMailbox2AbortCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_TxMailbox2AbortCallback(hcan); + 800edde: 6878 ldr r0, [r7, #4] + 800ede0: f000 f944 bl 800f06c + } + } + } + + /* Receive FIFO 0 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) + 800ede4: 6a3b ldr r3, [r7, #32] + 800ede6: f003 0308 and.w r3, r3, #8 + 800edea: 2b00 cmp r3, #0 + 800edec: d00c beq.n 800ee08 + { + if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) + 800edee: 697b ldr r3, [r7, #20] + 800edf0: f003 0310 and.w r3, r3, #16 + 800edf4: 2b00 cmp r3, #0 + 800edf6: d007 beq.n 800ee08 + { + /* Set CAN error code to Rx Fifo 0 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV0; + 800edf8: 6a7b ldr r3, [r7, #36] @ 0x24 + 800edfa: f443 7300 orr.w r3, r3, #512 @ 0x200 + 800edfe: 627b str r3, [r7, #36] @ 0x24 + + /* Clear FIFO0 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); + 800ee00: 687b ldr r3, [r7, #4] + 800ee02: 681b ldr r3, [r3, #0] + 800ee04: 2210 movs r2, #16 + 800ee06: 60da str r2, [r3, #12] + } + } + + /* Receive FIFO 0 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) + 800ee08: 6a3b ldr r3, [r7, #32] + 800ee0a: f003 0304 and.w r3, r3, #4 + 800ee0e: 2b00 cmp r3, #0 + 800ee10: d00b beq.n 800ee2a + { + if ((rf0rflags & CAN_RF0R_FULL0) != 0U) + 800ee12: 697b ldr r3, [r7, #20] + 800ee14: f003 0308 and.w r3, r3, #8 + 800ee18: 2b00 cmp r3, #0 + 800ee1a: d006 beq.n 800ee2a + { + /* Clear FIFO 0 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); + 800ee1c: 687b ldr r3, [r7, #4] + 800ee1e: 681b ldr r3, [r3, #0] + 800ee20: 2208 movs r2, #8 + 800ee22: 60da str r2, [r3, #12] +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->RxFifo0FullCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0FullCallback(hcan); + 800ee24: 6878 ldr r0, [r7, #4] + 800ee26: f000 f933 bl 800f090 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* Receive FIFO 0 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) + 800ee2a: 6a3b ldr r3, [r7, #32] + 800ee2c: f003 0302 and.w r3, r3, #2 + 800ee30: 2b00 cmp r3, #0 + 800ee32: d009 beq.n 800ee48 + { + /* Check if message is still pending */ + if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) + 800ee34: 687b ldr r3, [r7, #4] + 800ee36: 681b ldr r3, [r3, #0] + 800ee38: 68db ldr r3, [r3, #12] + 800ee3a: f003 0303 and.w r3, r3, #3 + 800ee3e: 2b00 cmp r3, #0 + 800ee40: d002 beq.n 800ee48 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->RxFifo0MsgPendingCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo0MsgPendingCallback(hcan); + 800ee42: 6878 ldr r0, [r7, #4] + 800ee44: f000 f91b bl 800f07e +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* Receive FIFO 1 overrun interrupt management *****************************/ + if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) + 800ee48: 6a3b ldr r3, [r7, #32] + 800ee4a: f003 0340 and.w r3, r3, #64 @ 0x40 + 800ee4e: 2b00 cmp r3, #0 + 800ee50: d00c beq.n 800ee6c + { + if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) + 800ee52: 693b ldr r3, [r7, #16] + 800ee54: f003 0310 and.w r3, r3, #16 + 800ee58: 2b00 cmp r3, #0 + 800ee5a: d007 beq.n 800ee6c + { + /* Set CAN error code to Rx Fifo 1 overrun error */ + errorcode |= HAL_CAN_ERROR_RX_FOV1; + 800ee5c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ee5e: f443 6380 orr.w r3, r3, #1024 @ 0x400 + 800ee62: 627b str r3, [r7, #36] @ 0x24 + + /* Clear FIFO1 Overrun Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); + 800ee64: 687b ldr r3, [r7, #4] + 800ee66: 681b ldr r3, [r3, #0] + 800ee68: 2210 movs r2, #16 + 800ee6a: 611a str r2, [r3, #16] + } + } + + /* Receive FIFO 1 full interrupt management ********************************/ + if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) + 800ee6c: 6a3b ldr r3, [r7, #32] + 800ee6e: f003 0320 and.w r3, r3, #32 + 800ee72: 2b00 cmp r3, #0 + 800ee74: d00b beq.n 800ee8e + { + if ((rf1rflags & CAN_RF1R_FULL1) != 0U) + 800ee76: 693b ldr r3, [r7, #16] + 800ee78: f003 0308 and.w r3, r3, #8 + 800ee7c: 2b00 cmp r3, #0 + 800ee7e: d006 beq.n 800ee8e + { + /* Clear FIFO 1 full Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); + 800ee80: 687b ldr r3, [r7, #4] + 800ee82: 681b ldr r3, [r3, #0] + 800ee84: 2208 movs r2, #8 + 800ee86: 611a str r2, [r3, #16] +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->RxFifo1FullCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1FullCallback(hcan); + 800ee88: 6878 ldr r0, [r7, #4] + 800ee8a: f000 f90a bl 800f0a2 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* Receive FIFO 1 message pending interrupt management *********************/ + if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) + 800ee8e: 6a3b ldr r3, [r7, #32] + 800ee90: f003 0310 and.w r3, r3, #16 + 800ee94: 2b00 cmp r3, #0 + 800ee96: d009 beq.n 800eeac + { + /* Check if message is still pending */ + if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) + 800ee98: 687b ldr r3, [r7, #4] + 800ee9a: 681b ldr r3, [r3, #0] + 800ee9c: 691b ldr r3, [r3, #16] + 800ee9e: f003 0303 and.w r3, r3, #3 + 800eea2: 2b00 cmp r3, #0 + 800eea4: d002 beq.n 800eeac +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->RxFifo1MsgPendingCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_RxFifo1MsgPendingCallback(hcan); + 800eea6: 6878 ldr r0, [r7, #4] + 800eea8: f7fb fdf6 bl 800aa98 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* Sleep interrupt management *********************************************/ + if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) + 800eeac: 6a3b ldr r3, [r7, #32] + 800eeae: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800eeb2: 2b00 cmp r3, #0 + 800eeb4: d00b beq.n 800eece + { + if ((msrflags & CAN_MSR_SLAKI) != 0U) + 800eeb6: 69fb ldr r3, [r7, #28] + 800eeb8: f003 0310 and.w r3, r3, #16 + 800eebc: 2b00 cmp r3, #0 + 800eebe: d006 beq.n 800eece + { + /* Clear Sleep interrupt Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); + 800eec0: 687b ldr r3, [r7, #4] + 800eec2: 681b ldr r3, [r3, #0] + 800eec4: 2210 movs r2, #16 + 800eec6: 605a str r2, [r3, #4] +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->SleepCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_SleepCallback(hcan); + 800eec8: 6878 ldr r0, [r7, #4] + 800eeca: f000 f8f3 bl 800f0b4 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* WakeUp interrupt management *********************************************/ + if ((interrupts & CAN_IT_WAKEUP) != 0U) + 800eece: 6a3b ldr r3, [r7, #32] + 800eed0: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800eed4: 2b00 cmp r3, #0 + 800eed6: d00b beq.n 800eef0 + { + if ((msrflags & CAN_MSR_WKUI) != 0U) + 800eed8: 69fb ldr r3, [r7, #28] + 800eeda: f003 0308 and.w r3, r3, #8 + 800eede: 2b00 cmp r3, #0 + 800eee0: d006 beq.n 800eef0 + { + /* Clear WakeUp Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); + 800eee2: 687b ldr r3, [r7, #4] + 800eee4: 681b ldr r3, [r3, #0] + 800eee6: 2208 movs r2, #8 + 800eee8: 605a str r2, [r3, #4] +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->WakeUpFromRxMsgCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_WakeUpFromRxMsgCallback(hcan); + 800eeea: 6878 ldr r0, [r7, #4] + 800eeec: f000 f8eb bl 800f0c6 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } + } + + /* Error interrupts management *********************************************/ + if ((interrupts & CAN_IT_ERROR) != 0U) + 800eef0: 6a3b ldr r3, [r7, #32] + 800eef2: f403 4300 and.w r3, r3, #32768 @ 0x8000 + 800eef6: 2b00 cmp r3, #0 + 800eef8: d07b beq.n 800eff2 + { + if ((msrflags & CAN_MSR_ERRI) != 0U) + 800eefa: 69fb ldr r3, [r7, #28] + 800eefc: f003 0304 and.w r3, r3, #4 + 800ef00: 2b00 cmp r3, #0 + 800ef02: d072 beq.n 800efea + { + /* Check Error Warning Flag */ + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + 800ef04: 6a3b ldr r3, [r7, #32] + 800ef06: f403 7380 and.w r3, r3, #256 @ 0x100 + 800ef0a: 2b00 cmp r3, #0 + 800ef0c: d008 beq.n 800ef20 + ((esrflags & CAN_ESR_EWGF) != 0U)) + 800ef0e: 68fb ldr r3, [r7, #12] + 800ef10: f003 0301 and.w r3, r3, #1 + if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && + 800ef14: 2b00 cmp r3, #0 + 800ef16: d003 beq.n 800ef20 + { + /* Set CAN error code to Error Warning */ + errorcode |= HAL_CAN_ERROR_EWG; + 800ef18: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ef1a: f043 0301 orr.w r3, r3, #1 + 800ef1e: 627b str r3, [r7, #36] @ 0x24 + + /* No need for clear of Error Warning Flag as read-only */ + } + + /* Check Error Passive Flag */ + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + 800ef20: 6a3b ldr r3, [r7, #32] + 800ef22: f403 7300 and.w r3, r3, #512 @ 0x200 + 800ef26: 2b00 cmp r3, #0 + 800ef28: d008 beq.n 800ef3c + ((esrflags & CAN_ESR_EPVF) != 0U)) + 800ef2a: 68fb ldr r3, [r7, #12] + 800ef2c: f003 0302 and.w r3, r3, #2 + if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && + 800ef30: 2b00 cmp r3, #0 + 800ef32: d003 beq.n 800ef3c + { + /* Set CAN error code to Error Passive */ + errorcode |= HAL_CAN_ERROR_EPV; + 800ef34: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ef36: f043 0302 orr.w r3, r3, #2 + 800ef3a: 627b str r3, [r7, #36] @ 0x24 + + /* No need for clear of Error Passive Flag as read-only */ + } + + /* Check Bus-off Flag */ + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + 800ef3c: 6a3b ldr r3, [r7, #32] + 800ef3e: f403 6380 and.w r3, r3, #1024 @ 0x400 + 800ef42: 2b00 cmp r3, #0 + 800ef44: d008 beq.n 800ef58 + ((esrflags & CAN_ESR_BOFF) != 0U)) + 800ef46: 68fb ldr r3, [r7, #12] + 800ef48: f003 0304 and.w r3, r3, #4 + if (((interrupts & CAN_IT_BUSOFF) != 0U) && + 800ef4c: 2b00 cmp r3, #0 + 800ef4e: d003 beq.n 800ef58 + { + /* Set CAN error code to Bus-Off */ + errorcode |= HAL_CAN_ERROR_BOF; + 800ef50: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ef52: f043 0304 orr.w r3, r3, #4 + 800ef56: 627b str r3, [r7, #36] @ 0x24 + + /* No need for clear of Error Bus-Off as read-only */ + } + + /* Check Last Error Code Flag */ + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + 800ef58: 6a3b ldr r3, [r7, #32] + 800ef5a: f403 6300 and.w r3, r3, #2048 @ 0x800 + 800ef5e: 2b00 cmp r3, #0 + 800ef60: d043 beq.n 800efea + ((esrflags & CAN_ESR_LEC) != 0U)) + 800ef62: 68fb ldr r3, [r7, #12] + 800ef64: f003 0370 and.w r3, r3, #112 @ 0x70 + if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && + 800ef68: 2b00 cmp r3, #0 + 800ef6a: d03e beq.n 800efea + { + switch (esrflags & CAN_ESR_LEC) + 800ef6c: 68fb ldr r3, [r7, #12] + 800ef6e: f003 0370 and.w r3, r3, #112 @ 0x70 + 800ef72: 2b60 cmp r3, #96 @ 0x60 + 800ef74: d02b beq.n 800efce + 800ef76: 2b60 cmp r3, #96 @ 0x60 + 800ef78: d82e bhi.n 800efd8 + 800ef7a: 2b50 cmp r3, #80 @ 0x50 + 800ef7c: d022 beq.n 800efc4 + 800ef7e: 2b50 cmp r3, #80 @ 0x50 + 800ef80: d82a bhi.n 800efd8 + 800ef82: 2b40 cmp r3, #64 @ 0x40 + 800ef84: d019 beq.n 800efba + 800ef86: 2b40 cmp r3, #64 @ 0x40 + 800ef88: d826 bhi.n 800efd8 + 800ef8a: 2b30 cmp r3, #48 @ 0x30 + 800ef8c: d010 beq.n 800efb0 + 800ef8e: 2b30 cmp r3, #48 @ 0x30 + 800ef90: d822 bhi.n 800efd8 + 800ef92: 2b10 cmp r3, #16 + 800ef94: d002 beq.n 800ef9c + 800ef96: 2b20 cmp r3, #32 + 800ef98: d005 beq.n 800efa6 + case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): + /* Set CAN error code to CRC error */ + errorcode |= HAL_CAN_ERROR_CRC; + break; + default: + break; + 800ef9a: e01d b.n 800efd8 + errorcode |= HAL_CAN_ERROR_STF; + 800ef9c: 6a7b ldr r3, [r7, #36] @ 0x24 + 800ef9e: f043 0308 orr.w r3, r3, #8 + 800efa2: 627b str r3, [r7, #36] @ 0x24 + break; + 800efa4: e019 b.n 800efda + errorcode |= HAL_CAN_ERROR_FOR; + 800efa6: 6a7b ldr r3, [r7, #36] @ 0x24 + 800efa8: f043 0310 orr.w r3, r3, #16 + 800efac: 627b str r3, [r7, #36] @ 0x24 + break; + 800efae: e014 b.n 800efda + errorcode |= HAL_CAN_ERROR_ACK; + 800efb0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800efb2: f043 0320 orr.w r3, r3, #32 + 800efb6: 627b str r3, [r7, #36] @ 0x24 + break; + 800efb8: e00f b.n 800efda + errorcode |= HAL_CAN_ERROR_BR; + 800efba: 6a7b ldr r3, [r7, #36] @ 0x24 + 800efbc: f043 0340 orr.w r3, r3, #64 @ 0x40 + 800efc0: 627b str r3, [r7, #36] @ 0x24 + break; + 800efc2: e00a b.n 800efda + errorcode |= HAL_CAN_ERROR_BD; + 800efc4: 6a7b ldr r3, [r7, #36] @ 0x24 + 800efc6: f043 0380 orr.w r3, r3, #128 @ 0x80 + 800efca: 627b str r3, [r7, #36] @ 0x24 + break; + 800efcc: e005 b.n 800efda + errorcode |= HAL_CAN_ERROR_CRC; + 800efce: 6a7b ldr r3, [r7, #36] @ 0x24 + 800efd0: f443 7380 orr.w r3, r3, #256 @ 0x100 + 800efd4: 627b str r3, [r7, #36] @ 0x24 + break; + 800efd6: e000 b.n 800efda + break; + 800efd8: bf00 nop + } + + /* Clear Last error code Flag */ + CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); + 800efda: 687b ldr r3, [r7, #4] + 800efdc: 681b ldr r3, [r3, #0] + 800efde: 699a ldr r2, [r3, #24] + 800efe0: 687b ldr r3, [r7, #4] + 800efe2: 681b ldr r3, [r3, #0] + 800efe4: f022 0270 bic.w r2, r2, #112 @ 0x70 + 800efe8: 619a str r2, [r3, #24] + } + } + + /* Clear ERRI Flag */ + __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); + 800efea: 687b ldr r3, [r7, #4] + 800efec: 681b ldr r3, [r3, #0] + 800efee: 2204 movs r2, #4 + 800eff0: 605a str r2, [r3, #4] + } + + /* Call the Error call Back in case of Errors */ + if (errorcode != HAL_CAN_ERROR_NONE) + 800eff2: 6a7b ldr r3, [r7, #36] @ 0x24 + 800eff4: 2b00 cmp r3, #0 + 800eff6: d008 beq.n 800f00a + { + /* Update error code in handle */ + hcan->ErrorCode |= errorcode; + 800eff8: 687b ldr r3, [r7, #4] + 800effa: 6a5a ldr r2, [r3, #36] @ 0x24 + 800effc: 6a7b ldr r3, [r7, #36] @ 0x24 + 800effe: 431a orrs r2, r3 + 800f000: 687b ldr r3, [r7, #4] + 800f002: 625a str r2, [r3, #36] @ 0x24 +#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 + /* Call registered callback*/ + hcan->ErrorCallback(hcan); +#else + /* Call weak (surcharged) callback */ + HAL_CAN_ErrorCallback(hcan); + 800f004: 6878 ldr r0, [r7, #4] + 800f006: f000 f867 bl 800f0d8 +#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ + } +} + 800f00a: bf00 nop + 800f00c: 3728 adds r7, #40 @ 0x28 + 800f00e: 46bd mov sp, r7 + 800f010: bd80 pop {r7, pc} + +0800f012 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) +{ + 800f012: b480 push {r7} + 800f014: b083 sub sp, #12 + 800f016: af00 add r7, sp, #0 + 800f018: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the + user file + */ +} + 800f01a: bf00 nop + 800f01c: 370c adds r7, #12 + 800f01e: 46bd mov sp, r7 + 800f020: bc80 pop {r7} + 800f022: 4770 bx lr + +0800f024 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) +{ + 800f024: b480 push {r7} + 800f026: b083 sub sp, #12 + 800f028: af00 add r7, sp, #0 + 800f02a: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the + user file + */ +} + 800f02c: bf00 nop + 800f02e: 370c adds r7, #12 + 800f030: 46bd mov sp, r7 + 800f032: bc80 pop {r7} + 800f034: 4770 bx lr + +0800f036 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) +{ + 800f036: b480 push {r7} + 800f038: b083 sub sp, #12 + 800f03a: af00 add r7, sp, #0 + 800f03c: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the + user file + */ +} + 800f03e: bf00 nop + 800f040: 370c adds r7, #12 + 800f042: 46bd mov sp, r7 + 800f044: bc80 pop {r7} + 800f046: 4770 bx lr + +0800f048 : + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) +{ + 800f048: b480 push {r7} + 800f04a: b083 sub sp, #12 + 800f04c: af00 add r7, sp, #0 + 800f04e: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox0AbortCallback could be implemented in the + user file + */ +} + 800f050: bf00 nop + 800f052: 370c adds r7, #12 + 800f054: 46bd mov sp, r7 + 800f056: bc80 pop {r7} + 800f058: 4770 bx lr + +0800f05a : + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) +{ + 800f05a: b480 push {r7} + 800f05c: b083 sub sp, #12 + 800f05e: af00 add r7, sp, #0 + 800f060: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox1AbortCallback could be implemented in the + user file + */ +} + 800f062: bf00 nop + 800f064: 370c adds r7, #12 + 800f066: 46bd mov sp, r7 + 800f068: bc80 pop {r7} + 800f06a: 4770 bx lr + +0800f06c : + * @param hcan pointer to an CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) +{ + 800f06c: b480 push {r7} + 800f06e: b083 sub sp, #12 + 800f070: af00 add r7, sp, #0 + 800f072: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_TxMailbox2AbortCallback could be implemented in the + user file + */ +} + 800f074: bf00 nop + 800f076: 370c adds r7, #12 + 800f078: 46bd mov sp, r7 + 800f07a: bc80 pop {r7} + 800f07c: 4770 bx lr + +0800f07e : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) +{ + 800f07e: b480 push {r7} + 800f080: b083 sub sp, #12 + 800f082: af00 add r7, sp, #0 + 800f084: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0MsgPendingCallback could be implemented in the + user file + */ +} + 800f086: bf00 nop + 800f088: 370c adds r7, #12 + 800f08a: 46bd mov sp, r7 + 800f08c: bc80 pop {r7} + 800f08e: 4770 bx lr + +0800f090 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) +{ + 800f090: b480 push {r7} + 800f092: b083 sub sp, #12 + 800f094: af00 add r7, sp, #0 + 800f096: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo0FullCallback could be implemented in the user + file + */ +} + 800f098: bf00 nop + 800f09a: 370c adds r7, #12 + 800f09c: 46bd mov sp, r7 + 800f09e: bc80 pop {r7} + 800f0a0: 4770 bx lr + +0800f0a2 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) +{ + 800f0a2: b480 push {r7} + 800f0a4: b083 sub sp, #12 + 800f0a6: af00 add r7, sp, #0 + 800f0a8: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_RxFifo1FullCallback could be implemented in the user + file + */ +} + 800f0aa: bf00 nop + 800f0ac: 370c adds r7, #12 + 800f0ae: 46bd mov sp, r7 + 800f0b0: bc80 pop {r7} + 800f0b2: 4770 bx lr + +0800f0b4 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) +{ + 800f0b4: b480 push {r7} + 800f0b6: b083 sub sp, #12 + 800f0b8: af00 add r7, sp, #0 + 800f0ba: 6078 str r0, [r7, #4] + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_SleepCallback could be implemented in the user file + */ +} + 800f0bc: bf00 nop + 800f0be: 370c adds r7, #12 + 800f0c0: 46bd mov sp, r7 + 800f0c2: bc80 pop {r7} + 800f0c4: 4770 bx lr + +0800f0c6 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) +{ + 800f0c6: b480 push {r7} + 800f0c8: b083 sub sp, #12 + 800f0ca: af00 add r7, sp, #0 + 800f0cc: 6078 str r0, [r7, #4] + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the + user file + */ +} + 800f0ce: bf00 nop + 800f0d0: 370c adds r7, #12 + 800f0d2: 46bd mov sp, r7 + 800f0d4: bc80 pop {r7} + 800f0d6: 4770 bx lr + +0800f0d8 : + * @param hcan pointer to a CAN_HandleTypeDef structure that contains + * the configuration information for the specified CAN. + * @retval None + */ +__weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) +{ + 800f0d8: b480 push {r7} + 800f0da: b083 sub sp, #12 + 800f0dc: af00 add r7, sp, #0 + 800f0de: 6078 str r0, [r7, #4] + UNUSED(hcan); + + /* NOTE : This function Should not be modified, when the callback is needed, + the HAL_CAN_ErrorCallback could be implemented in the user file + */ +} + 800f0e0: bf00 nop + 800f0e2: 370c adds r7, #12 + 800f0e4: 46bd mov sp, r7 + 800f0e6: bc80 pop {r7} + 800f0e8: 4770 bx lr + ... + +0800f0ec <__NVIC_SetPriorityGrouping>: +{ + 800f0ec: b480 push {r7} + 800f0ee: b085 sub sp, #20 + 800f0f0: af00 add r7, sp, #0 + 800f0f2: 6078 str r0, [r7, #4] + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + 800f0f4: 687b ldr r3, [r7, #4] + 800f0f6: f003 0307 and.w r3, r3, #7 + 800f0fa: 60fb str r3, [r7, #12] + reg_value = SCB->AIRCR; /* read old register configuration */ + 800f0fc: 4b0c ldr r3, [pc, #48] @ (800f130 <__NVIC_SetPriorityGrouping+0x44>) + 800f0fe: 68db ldr r3, [r3, #12] + 800f100: 60bb str r3, [r7, #8] + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + 800f102: 68ba ldr r2, [r7, #8] + 800f104: f64f 03ff movw r3, #63743 @ 0xf8ff + 800f108: 4013 ands r3, r2 + 800f10a: 60bb str r3, [r7, #8] + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + 800f10c: 68fb ldr r3, [r7, #12] + 800f10e: 021a lsls r2, r3, #8 + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 800f110: 68bb ldr r3, [r7, #8] + 800f112: 4313 orrs r3, r2 + reg_value = (reg_value | + 800f114: f043 63bf orr.w r3, r3, #100139008 @ 0x5f80000 + 800f118: f443 3300 orr.w r3, r3, #131072 @ 0x20000 + 800f11c: 60bb str r3, [r7, #8] + SCB->AIRCR = reg_value; + 800f11e: 4a04 ldr r2, [pc, #16] @ (800f130 <__NVIC_SetPriorityGrouping+0x44>) + 800f120: 68bb ldr r3, [r7, #8] + 800f122: 60d3 str r3, [r2, #12] +} + 800f124: bf00 nop + 800f126: 3714 adds r7, #20 + 800f128: 46bd mov sp, r7 + 800f12a: bc80 pop {r7} + 800f12c: 4770 bx lr + 800f12e: bf00 nop + 800f130: e000ed00 .word 0xe000ed00 + +0800f134 <__NVIC_GetPriorityGrouping>: +{ + 800f134: b480 push {r7} + 800f136: af00 add r7, sp, #0 + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); + 800f138: 4b04 ldr r3, [pc, #16] @ (800f14c <__NVIC_GetPriorityGrouping+0x18>) + 800f13a: 68db ldr r3, [r3, #12] + 800f13c: 0a1b lsrs r3, r3, #8 + 800f13e: f003 0307 and.w r3, r3, #7 +} + 800f142: 4618 mov r0, r3 + 800f144: 46bd mov sp, r7 + 800f146: bc80 pop {r7} + 800f148: 4770 bx lr + 800f14a: bf00 nop + 800f14c: e000ed00 .word 0xe000ed00 + +0800f150 <__NVIC_EnableIRQ>: +{ + 800f150: b480 push {r7} + 800f152: b083 sub sp, #12 + 800f154: af00 add r7, sp, #0 + 800f156: 4603 mov r3, r0 + 800f158: 71fb strb r3, [r7, #7] + if ((int32_t)(IRQn) >= 0) + 800f15a: f997 3007 ldrsb.w r3, [r7, #7] + 800f15e: 2b00 cmp r3, #0 + 800f160: db0b blt.n 800f17a <__NVIC_EnableIRQ+0x2a> + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + 800f162: 79fb ldrb r3, [r7, #7] + 800f164: f003 021f and.w r2, r3, #31 + 800f168: 4906 ldr r1, [pc, #24] @ (800f184 <__NVIC_EnableIRQ+0x34>) + 800f16a: f997 3007 ldrsb.w r3, [r7, #7] + 800f16e: 095b lsrs r3, r3, #5 + 800f170: 2001 movs r0, #1 + 800f172: fa00 f202 lsl.w r2, r0, r2 + 800f176: f841 2023 str.w r2, [r1, r3, lsl #2] +} + 800f17a: bf00 nop + 800f17c: 370c adds r7, #12 + 800f17e: 46bd mov sp, r7 + 800f180: bc80 pop {r7} + 800f182: 4770 bx lr + 800f184: e000e100 .word 0xe000e100 + +0800f188 <__NVIC_SetPriority>: +{ + 800f188: b480 push {r7} + 800f18a: b083 sub sp, #12 + 800f18c: af00 add r7, sp, #0 + 800f18e: 4603 mov r3, r0 + 800f190: 6039 str r1, [r7, #0] + 800f192: 71fb strb r3, [r7, #7] + if ((int32_t)(IRQn) >= 0) + 800f194: f997 3007 ldrsb.w r3, [r7, #7] + 800f198: 2b00 cmp r3, #0 + 800f19a: db0a blt.n 800f1b2 <__NVIC_SetPriority+0x2a> + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 800f19c: 683b ldr r3, [r7, #0] + 800f19e: b2da uxtb r2, r3 + 800f1a0: 490c ldr r1, [pc, #48] @ (800f1d4 <__NVIC_SetPriority+0x4c>) + 800f1a2: f997 3007 ldrsb.w r3, [r7, #7] + 800f1a6: 0112 lsls r2, r2, #4 + 800f1a8: b2d2 uxtb r2, r2 + 800f1aa: 440b add r3, r1 + 800f1ac: f883 2300 strb.w r2, [r3, #768] @ 0x300 +} + 800f1b0: e00a b.n 800f1c8 <__NVIC_SetPriority+0x40> + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + 800f1b2: 683b ldr r3, [r7, #0] + 800f1b4: b2da uxtb r2, r3 + 800f1b6: 4908 ldr r1, [pc, #32] @ (800f1d8 <__NVIC_SetPriority+0x50>) + 800f1b8: 79fb ldrb r3, [r7, #7] + 800f1ba: f003 030f and.w r3, r3, #15 + 800f1be: 3b04 subs r3, #4 + 800f1c0: 0112 lsls r2, r2, #4 + 800f1c2: b2d2 uxtb r2, r2 + 800f1c4: 440b add r3, r1 + 800f1c6: 761a strb r2, [r3, #24] +} + 800f1c8: bf00 nop + 800f1ca: 370c adds r7, #12 + 800f1cc: 46bd mov sp, r7 + 800f1ce: bc80 pop {r7} + 800f1d0: 4770 bx lr + 800f1d2: bf00 nop + 800f1d4: e000e100 .word 0xe000e100 + 800f1d8: e000ed00 .word 0xe000ed00 + +0800f1dc : +{ + 800f1dc: b480 push {r7} + 800f1de: b089 sub sp, #36 @ 0x24 + 800f1e0: af00 add r7, sp, #0 + 800f1e2: 60f8 str r0, [r7, #12] + 800f1e4: 60b9 str r1, [r7, #8] + 800f1e6: 607a str r2, [r7, #4] + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + 800f1e8: 68fb ldr r3, [r7, #12] + 800f1ea: f003 0307 and.w r3, r3, #7 + 800f1ee: 61fb str r3, [r7, #28] + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + 800f1f0: 69fb ldr r3, [r7, #28] + 800f1f2: f1c3 0307 rsb r3, r3, #7 + 800f1f6: 2b04 cmp r3, #4 + 800f1f8: bf28 it cs + 800f1fa: 2304 movcs r3, #4 + 800f1fc: 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)); + 800f1fe: 69fb ldr r3, [r7, #28] + 800f200: 3304 adds r3, #4 + 800f202: 2b06 cmp r3, #6 + 800f204: d902 bls.n 800f20c + 800f206: 69fb ldr r3, [r7, #28] + 800f208: 3b03 subs r3, #3 + 800f20a: e000 b.n 800f20e + 800f20c: 2300 movs r3, #0 + 800f20e: 617b str r3, [r7, #20] + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 800f210: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 800f214: 69bb ldr r3, [r7, #24] + 800f216: fa02 f303 lsl.w r3, r2, r3 + 800f21a: 43da mvns r2, r3 + 800f21c: 68bb ldr r3, [r7, #8] + 800f21e: 401a ands r2, r3 + 800f220: 697b ldr r3, [r7, #20] + 800f222: 409a lsls r2, r3 + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + 800f224: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff + 800f228: 697b ldr r3, [r7, #20] + 800f22a: fa01 f303 lsl.w r3, r1, r3 + 800f22e: 43d9 mvns r1, r3 + 800f230: 687b ldr r3, [r7, #4] + 800f232: 400b ands r3, r1 + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + 800f234: 4313 orrs r3, r2 +} + 800f236: 4618 mov r0, r3 + 800f238: 3724 adds r7, #36 @ 0x24 + 800f23a: 46bd mov sp, r7 + 800f23c: bc80 pop {r7} + 800f23e: 4770 bx lr + +0800f240 : + \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) +{ + 800f240: b580 push {r7, lr} + 800f242: b082 sub sp, #8 + 800f244: af00 add r7, sp, #0 + 800f246: 6078 str r0, [r7, #4] + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + 800f248: 687b ldr r3, [r7, #4] + 800f24a: 3b01 subs r3, #1 + 800f24c: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 + 800f250: d301 bcc.n 800f256 + { + return (1UL); /* Reload value impossible */ + 800f252: 2301 movs r3, #1 + 800f254: e00f b.n 800f276 + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + 800f256: 4a0a ldr r2, [pc, #40] @ (800f280 ) + 800f258: 687b ldr r3, [r7, #4] + 800f25a: 3b01 subs r3, #1 + 800f25c: 6053 str r3, [r2, #4] + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + 800f25e: 210f movs r1, #15 + 800f260: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 800f264: f7ff ff90 bl 800f188 <__NVIC_SetPriority> + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + 800f268: 4b05 ldr r3, [pc, #20] @ (800f280 ) + 800f26a: 2200 movs r2, #0 + 800f26c: 609a str r2, [r3, #8] + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + 800f26e: 4b04 ldr r3, [pc, #16] @ (800f280 ) + 800f270: 2207 movs r2, #7 + 800f272: 601a str r2, [r3, #0] + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ + 800f274: 2300 movs r3, #0 +} + 800f276: 4618 mov r0, r3 + 800f278: 3708 adds r7, #8 + 800f27a: 46bd mov sp, r7 + 800f27c: bd80 pop {r7, pc} + 800f27e: bf00 nop + 800f280: e000e010 .word 0xe000e010 + +0800f284 : + * @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) +{ + 800f284: b580 push {r7, lr} + 800f286: b082 sub sp, #8 + 800f288: af00 add r7, sp, #0 + 800f28a: 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); + 800f28c: 6878 ldr r0, [r7, #4] + 800f28e: f7ff ff2d bl 800f0ec <__NVIC_SetPriorityGrouping> +} + 800f292: bf00 nop + 800f294: 3708 adds r7, #8 + 800f296: 46bd mov sp, r7 + 800f298: bd80 pop {r7, pc} + +0800f29a : + * 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) +{ + 800f29a: b580 push {r7, lr} + 800f29c: b086 sub sp, #24 + 800f29e: af00 add r7, sp, #0 + 800f2a0: 4603 mov r3, r0 + 800f2a2: 60b9 str r1, [r7, #8] + 800f2a4: 607a str r2, [r7, #4] + 800f2a6: 73fb strb r3, [r7, #15] + uint32_t prioritygroup = 0x00U; + 800f2a8: 2300 movs r3, #0 + 800f2aa: 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(); + 800f2ac: f7ff ff42 bl 800f134 <__NVIC_GetPriorityGrouping> + 800f2b0: 6178 str r0, [r7, #20] + + NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); + 800f2b2: 687a ldr r2, [r7, #4] + 800f2b4: 68b9 ldr r1, [r7, #8] + 800f2b6: 6978 ldr r0, [r7, #20] + 800f2b8: f7ff ff90 bl 800f1dc + 800f2bc: 4602 mov r2, r0 + 800f2be: f997 300f ldrsb.w r3, [r7, #15] + 800f2c2: 4611 mov r1, r2 + 800f2c4: 4618 mov r0, r3 + 800f2c6: f7ff ff5f bl 800f188 <__NVIC_SetPriority> +} + 800f2ca: bf00 nop + 800f2cc: 3718 adds r7, #24 + 800f2ce: 46bd mov sp, r7 + 800f2d0: bd80 pop {r7, pc} + +0800f2d2 : + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) + * @retval None + */ +void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + 800f2d2: b580 push {r7, lr} + 800f2d4: b082 sub sp, #8 + 800f2d6: af00 add r7, sp, #0 + 800f2d8: 4603 mov r3, r0 + 800f2da: 71fb strb r3, [r7, #7] + /* Check the parameters */ + assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); + + /* Enable interrupt */ + NVIC_EnableIRQ(IRQn); + 800f2dc: f997 3007 ldrsb.w r3, [r7, #7] + 800f2e0: 4618 mov r0, r3 + 800f2e2: f7ff ff35 bl 800f150 <__NVIC_EnableIRQ> +} + 800f2e6: bf00 nop + 800f2e8: 3708 adds r7, #8 + 800f2ea: 46bd mov sp, r7 + 800f2ec: bd80 pop {r7, pc} + +0800f2ee : + * @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) +{ + 800f2ee: b580 push {r7, lr} + 800f2f0: b082 sub sp, #8 + 800f2f2: af00 add r7, sp, #0 + 800f2f4: 6078 str r0, [r7, #4] + return SysTick_Config(TicksNumb); + 800f2f6: 6878 ldr r0, [r7, #4] + 800f2f8: f7ff ffa2 bl 800f240 + 800f2fc: 4603 mov r3, r0 +} + 800f2fe: 4618 mov r0, r3 + 800f300: 3708 adds r7, #8 + 800f302: 46bd mov sp, r7 + 800f304: bd80 pop {r7, pc} + +0800f306 : + * parameters in the CRC_InitTypeDef and create the associated handle. + * @param hcrc CRC handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) +{ + 800f306: b580 push {r7, lr} + 800f308: b082 sub sp, #8 + 800f30a: af00 add r7, sp, #0 + 800f30c: 6078 str r0, [r7, #4] + /* Check the CRC handle allocation */ + if (hcrc == NULL) + 800f30e: 687b ldr r3, [r7, #4] + 800f310: 2b00 cmp r3, #0 + 800f312: d101 bne.n 800f318 + { + return HAL_ERROR; + 800f314: 2301 movs r3, #1 + 800f316: e00e b.n 800f336 + } + + /* Check the parameters */ + assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); + + if (hcrc->State == HAL_CRC_STATE_RESET) + 800f318: 687b ldr r3, [r7, #4] + 800f31a: 795b ldrb r3, [r3, #5] + 800f31c: b2db uxtb r3, r3 + 800f31e: 2b00 cmp r3, #0 + 800f320: d105 bne.n 800f32e + { + /* Allocate lock resource and initialize it */ + hcrc->Lock = HAL_UNLOCKED; + 800f322: 687b ldr r3, [r7, #4] + 800f324: 2200 movs r2, #0 + 800f326: 711a strb r2, [r3, #4] + /* Init the low level hardware */ + HAL_CRC_MspInit(hcrc); + 800f328: 6878 ldr r0, [r7, #4] + 800f32a: f7fa ff61 bl 800a1f0 + } + + /* Change CRC peripheral state */ + hcrc->State = HAL_CRC_STATE_READY; + 800f32e: 687b ldr r3, [r7, #4] + 800f330: 2201 movs r2, #1 + 800f332: 715a strb r2, [r3, #5] + + /* Return function status */ + return HAL_OK; + 800f334: 2300 movs r3, #0 +} + 800f336: 4618 mov r0, r3 + 800f338: 3708 adds r7, #8 + 800f33a: 46bd mov sp, r7 + 800f33c: bd80 pop {r7, pc} + +0800f33e : + * @param hdma: pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) +{ + 800f33e: b480 push {r7} + 800f340: b085 sub sp, #20 + 800f342: af00 add r7, sp, #0 + 800f344: 6078 str r0, [r7, #4] + HAL_StatusTypeDef status = HAL_OK; + 800f346: 2300 movs r3, #0 + 800f348: 73fb strb r3, [r7, #15] + + if(hdma->State != HAL_DMA_STATE_BUSY) + 800f34a: 687b ldr r3, [r7, #4] + 800f34c: f893 3021 ldrb.w r3, [r3, #33] @ 0x21 + 800f350: b2db uxtb r3, r3 + 800f352: 2b02 cmp r3, #2 + 800f354: d008 beq.n 800f368 + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + 800f356: 687b ldr r3, [r7, #4] + 800f358: 2204 movs r2, #4 + 800f35a: 639a str r2, [r3, #56] @ 0x38 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + 800f35c: 687b ldr r3, [r7, #4] + 800f35e: 2200 movs r2, #0 + 800f360: f883 2020 strb.w r2, [r3, #32] + + return HAL_ERROR; + 800f364: 2301 movs r3, #1 + 800f366: e020 b.n 800f3aa + } + else + + { + /* Disable DMA IT */ + __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); + 800f368: 687b ldr r3, [r7, #4] + 800f36a: 681b ldr r3, [r3, #0] + 800f36c: 681a ldr r2, [r3, #0] + 800f36e: 687b ldr r3, [r7, #4] + 800f370: 681b ldr r3, [r3, #0] + 800f372: f022 020e bic.w r2, r2, #14 + 800f376: 601a str r2, [r3, #0] + + /* Disable the channel */ + __HAL_DMA_DISABLE(hdma); + 800f378: 687b ldr r3, [r7, #4] + 800f37a: 681b ldr r3, [r3, #0] + 800f37c: 681a ldr r2, [r3, #0] + 800f37e: 687b ldr r3, [r7, #4] + 800f380: 681b ldr r3, [r3, #0] + 800f382: f022 0201 bic.w r2, r2, #1 + 800f386: 601a str r2, [r3, #0] + + /* Clear all flags */ + hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); + 800f388: 687b ldr r3, [r7, #4] + 800f38a: 6c1a ldr r2, [r3, #64] @ 0x40 + 800f38c: 687b ldr r3, [r7, #4] + 800f38e: 6bdb ldr r3, [r3, #60] @ 0x3c + 800f390: 2101 movs r1, #1 + 800f392: fa01 f202 lsl.w r2, r1, r2 + 800f396: 605a str r2, [r3, #4] + } + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + 800f398: 687b ldr r3, [r7, #4] + 800f39a: 2201 movs r2, #1 + 800f39c: f883 2021 strb.w r2, [r3, #33] @ 0x21 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + 800f3a0: 687b ldr r3, [r7, #4] + 800f3a2: 2200 movs r2, #0 + 800f3a4: f883 2020 strb.w r2, [r3, #32] + + return status; + 800f3a8: 7bfb ldrb r3, [r7, #15] +} + 800f3aa: 4618 mov r0, r3 + 800f3ac: 3714 adds r7, #20 + 800f3ae: 46bd mov sp, r7 + 800f3b0: bc80 pop {r7} + 800f3b2: 4770 bx lr + +0800f3b4 : + * @param hdma : pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA Channel. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) +{ + 800f3b4: b580 push {r7, lr} + 800f3b6: b084 sub sp, #16 + 800f3b8: af00 add r7, sp, #0 + 800f3ba: 6078 str r0, [r7, #4] + HAL_StatusTypeDef status = HAL_OK; + 800f3bc: 2300 movs r3, #0 + 800f3be: 73fb strb r3, [r7, #15] + + if(HAL_DMA_STATE_BUSY != hdma->State) + 800f3c0: 687b ldr r3, [r7, #4] + 800f3c2: f893 3021 ldrb.w r3, [r3, #33] @ 0x21 + 800f3c6: b2db uxtb r3, r3 + 800f3c8: 2b02 cmp r3, #2 + 800f3ca: d005 beq.n 800f3d8 + { + /* no transfer ongoing */ + hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; + 800f3cc: 687b ldr r3, [r7, #4] + 800f3ce: 2204 movs r2, #4 + 800f3d0: 639a str r2, [r3, #56] @ 0x38 + + status = HAL_ERROR; + 800f3d2: 2301 movs r3, #1 + 800f3d4: 73fb strb r3, [r7, #15] + 800f3d6: e0d6 b.n 800f586 + } + else + { + /* Disable DMA IT */ + __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); + 800f3d8: 687b ldr r3, [r7, #4] + 800f3da: 681b ldr r3, [r3, #0] + 800f3dc: 681a ldr r2, [r3, #0] + 800f3de: 687b ldr r3, [r7, #4] + 800f3e0: 681b ldr r3, [r3, #0] + 800f3e2: f022 020e bic.w r2, r2, #14 + 800f3e6: 601a str r2, [r3, #0] + + /* Disable the channel */ + __HAL_DMA_DISABLE(hdma); + 800f3e8: 687b ldr r3, [r7, #4] + 800f3ea: 681b ldr r3, [r3, #0] + 800f3ec: 681a ldr r2, [r3, #0] + 800f3ee: 687b ldr r3, [r7, #4] + 800f3f0: 681b ldr r3, [r3, #0] + 800f3f2: f022 0201 bic.w r2, r2, #1 + 800f3f6: 601a str r2, [r3, #0] + + /* Clear all flags */ + __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma)); + 800f3f8: 687b ldr r3, [r7, #4] + 800f3fa: 681b ldr r3, [r3, #0] + 800f3fc: 461a mov r2, r3 + 800f3fe: 4b64 ldr r3, [pc, #400] @ (800f590 ) + 800f400: 429a cmp r2, r3 + 800f402: d958 bls.n 800f4b6 + 800f404: 687b ldr r3, [r7, #4] + 800f406: 681b ldr r3, [r3, #0] + 800f408: 4a62 ldr r2, [pc, #392] @ (800f594 ) + 800f40a: 4293 cmp r3, r2 + 800f40c: d04f beq.n 800f4ae + 800f40e: 687b ldr r3, [r7, #4] + 800f410: 681b ldr r3, [r3, #0] + 800f412: 4a61 ldr r2, [pc, #388] @ (800f598 ) + 800f414: 4293 cmp r3, r2 + 800f416: d048 beq.n 800f4aa + 800f418: 687b ldr r3, [r7, #4] + 800f41a: 681b ldr r3, [r3, #0] + 800f41c: 4a5f ldr r2, [pc, #380] @ (800f59c ) + 800f41e: 4293 cmp r3, r2 + 800f420: d040 beq.n 800f4a4 + 800f422: 687b ldr r3, [r7, #4] + 800f424: 681b ldr r3, [r3, #0] + 800f426: 4a5e ldr r2, [pc, #376] @ (800f5a0 ) + 800f428: 4293 cmp r3, r2 + 800f42a: d038 beq.n 800f49e + 800f42c: 687b ldr r3, [r7, #4] + 800f42e: 681b ldr r3, [r3, #0] + 800f430: 4a5c ldr r2, [pc, #368] @ (800f5a4 ) + 800f432: 4293 cmp r3, r2 + 800f434: d030 beq.n 800f498 + 800f436: 687b ldr r3, [r7, #4] + 800f438: 681b ldr r3, [r3, #0] + 800f43a: 4a5b ldr r2, [pc, #364] @ (800f5a8 ) + 800f43c: 4293 cmp r3, r2 + 800f43e: d028 beq.n 800f492 + 800f440: 687b ldr r3, [r7, #4] + 800f442: 681b ldr r3, [r3, #0] + 800f444: 4a52 ldr r2, [pc, #328] @ (800f590 ) + 800f446: 4293 cmp r3, r2 + 800f448: d020 beq.n 800f48c + 800f44a: 687b ldr r3, [r7, #4] + 800f44c: 681b ldr r3, [r3, #0] + 800f44e: 4a57 ldr r2, [pc, #348] @ (800f5ac ) + 800f450: 4293 cmp r3, r2 + 800f452: d019 beq.n 800f488 + 800f454: 687b ldr r3, [r7, #4] + 800f456: 681b ldr r3, [r3, #0] + 800f458: 4a55 ldr r2, [pc, #340] @ (800f5b0 ) + 800f45a: 4293 cmp r3, r2 + 800f45c: d012 beq.n 800f484 + 800f45e: 687b ldr r3, [r7, #4] + 800f460: 681b ldr r3, [r3, #0] + 800f462: 4a54 ldr r2, [pc, #336] @ (800f5b4 ) + 800f464: 4293 cmp r3, r2 + 800f466: d00a beq.n 800f47e + 800f468: 687b ldr r3, [r7, #4] + 800f46a: 681b ldr r3, [r3, #0] + 800f46c: 4a52 ldr r2, [pc, #328] @ (800f5b8 ) + 800f46e: 4293 cmp r3, r2 + 800f470: d102 bne.n 800f478 + 800f472: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800f476: e01b b.n 800f4b0 + 800f478: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800f47c: e018 b.n 800f4b0 + 800f47e: f44f 7380 mov.w r3, #256 @ 0x100 + 800f482: e015 b.n 800f4b0 + 800f484: 2310 movs r3, #16 + 800f486: e013 b.n 800f4b0 + 800f488: 2301 movs r3, #1 + 800f48a: e011 b.n 800f4b0 + 800f48c: f04f 7380 mov.w r3, #16777216 @ 0x1000000 + 800f490: e00e b.n 800f4b0 + 800f492: f44f 1380 mov.w r3, #1048576 @ 0x100000 + 800f496: e00b b.n 800f4b0 + 800f498: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800f49c: e008 b.n 800f4b0 + 800f49e: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800f4a2: e005 b.n 800f4b0 + 800f4a4: f44f 7380 mov.w r3, #256 @ 0x100 + 800f4a8: e002 b.n 800f4b0 + 800f4aa: 2310 movs r3, #16 + 800f4ac: e000 b.n 800f4b0 + 800f4ae: 2301 movs r3, #1 + 800f4b0: 4a42 ldr r2, [pc, #264] @ (800f5bc ) + 800f4b2: 6053 str r3, [r2, #4] + 800f4b4: e057 b.n 800f566 + 800f4b6: 687b ldr r3, [r7, #4] + 800f4b8: 681b ldr r3, [r3, #0] + 800f4ba: 4a36 ldr r2, [pc, #216] @ (800f594 ) + 800f4bc: 4293 cmp r3, r2 + 800f4be: d04f beq.n 800f560 + 800f4c0: 687b ldr r3, [r7, #4] + 800f4c2: 681b ldr r3, [r3, #0] + 800f4c4: 4a34 ldr r2, [pc, #208] @ (800f598 ) + 800f4c6: 4293 cmp r3, r2 + 800f4c8: d048 beq.n 800f55c + 800f4ca: 687b ldr r3, [r7, #4] + 800f4cc: 681b ldr r3, [r3, #0] + 800f4ce: 4a33 ldr r2, [pc, #204] @ (800f59c ) + 800f4d0: 4293 cmp r3, r2 + 800f4d2: d040 beq.n 800f556 + 800f4d4: 687b ldr r3, [r7, #4] + 800f4d6: 681b ldr r3, [r3, #0] + 800f4d8: 4a31 ldr r2, [pc, #196] @ (800f5a0 ) + 800f4da: 4293 cmp r3, r2 + 800f4dc: d038 beq.n 800f550 + 800f4de: 687b ldr r3, [r7, #4] + 800f4e0: 681b ldr r3, [r3, #0] + 800f4e2: 4a30 ldr r2, [pc, #192] @ (800f5a4 ) + 800f4e4: 4293 cmp r3, r2 + 800f4e6: d030 beq.n 800f54a + 800f4e8: 687b ldr r3, [r7, #4] + 800f4ea: 681b ldr r3, [r3, #0] + 800f4ec: 4a2e ldr r2, [pc, #184] @ (800f5a8 ) + 800f4ee: 4293 cmp r3, r2 + 800f4f0: d028 beq.n 800f544 + 800f4f2: 687b ldr r3, [r7, #4] + 800f4f4: 681b ldr r3, [r3, #0] + 800f4f6: 4a26 ldr r2, [pc, #152] @ (800f590 ) + 800f4f8: 4293 cmp r3, r2 + 800f4fa: d020 beq.n 800f53e + 800f4fc: 687b ldr r3, [r7, #4] + 800f4fe: 681b ldr r3, [r3, #0] + 800f500: 4a2a ldr r2, [pc, #168] @ (800f5ac ) + 800f502: 4293 cmp r3, r2 + 800f504: d019 beq.n 800f53a + 800f506: 687b ldr r3, [r7, #4] + 800f508: 681b ldr r3, [r3, #0] + 800f50a: 4a29 ldr r2, [pc, #164] @ (800f5b0 ) + 800f50c: 4293 cmp r3, r2 + 800f50e: d012 beq.n 800f536 + 800f510: 687b ldr r3, [r7, #4] + 800f512: 681b ldr r3, [r3, #0] + 800f514: 4a27 ldr r2, [pc, #156] @ (800f5b4 ) + 800f516: 4293 cmp r3, r2 + 800f518: d00a beq.n 800f530 + 800f51a: 687b ldr r3, [r7, #4] + 800f51c: 681b ldr r3, [r3, #0] + 800f51e: 4a26 ldr r2, [pc, #152] @ (800f5b8 ) + 800f520: 4293 cmp r3, r2 + 800f522: d102 bne.n 800f52a + 800f524: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800f528: e01b b.n 800f562 + 800f52a: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800f52e: e018 b.n 800f562 + 800f530: f44f 7380 mov.w r3, #256 @ 0x100 + 800f534: e015 b.n 800f562 + 800f536: 2310 movs r3, #16 + 800f538: e013 b.n 800f562 + 800f53a: 2301 movs r3, #1 + 800f53c: e011 b.n 800f562 + 800f53e: f04f 7380 mov.w r3, #16777216 @ 0x1000000 + 800f542: e00e b.n 800f562 + 800f544: f44f 1380 mov.w r3, #1048576 @ 0x100000 + 800f548: e00b b.n 800f562 + 800f54a: f44f 3380 mov.w r3, #65536 @ 0x10000 + 800f54e: e008 b.n 800f562 + 800f550: f44f 5380 mov.w r3, #4096 @ 0x1000 + 800f554: e005 b.n 800f562 + 800f556: f44f 7380 mov.w r3, #256 @ 0x100 + 800f55a: e002 b.n 800f562 + 800f55c: 2310 movs r3, #16 + 800f55e: e000 b.n 800f562 + 800f560: 2301 movs r3, #1 + 800f562: 4a17 ldr r2, [pc, #92] @ (800f5c0 ) + 800f564: 6053 str r3, [r2, #4] + + /* Change the DMA state */ + hdma->State = HAL_DMA_STATE_READY; + 800f566: 687b ldr r3, [r7, #4] + 800f568: 2201 movs r2, #1 + 800f56a: f883 2021 strb.w r2, [r3, #33] @ 0x21 + + /* Process Unlocked */ + __HAL_UNLOCK(hdma); + 800f56e: 687b ldr r3, [r7, #4] + 800f570: 2200 movs r2, #0 + 800f572: f883 2020 strb.w r2, [r3, #32] + + /* Call User Abort callback */ + if(hdma->XferAbortCallback != NULL) + 800f576: 687b ldr r3, [r7, #4] + 800f578: 6b5b ldr r3, [r3, #52] @ 0x34 + 800f57a: 2b00 cmp r3, #0 + 800f57c: d003 beq.n 800f586 + { + hdma->XferAbortCallback(hdma); + 800f57e: 687b ldr r3, [r7, #4] + 800f580: 6b5b ldr r3, [r3, #52] @ 0x34 + 800f582: 6878 ldr r0, [r7, #4] + 800f584: 4798 blx r3 + } + } + return status; + 800f586: 7bfb ldrb r3, [r7, #15] +} + 800f588: 4618 mov r0, r3 + 800f58a: 3710 adds r7, #16 + 800f58c: 46bd mov sp, r7 + 800f58e: bd80 pop {r7, pc} + 800f590: 40020080 .word 0x40020080 + 800f594: 40020008 .word 0x40020008 + 800f598: 4002001c .word 0x4002001c + 800f59c: 40020030 .word 0x40020030 + 800f5a0: 40020044 .word 0x40020044 + 800f5a4: 40020058 .word 0x40020058 + 800f5a8: 4002006c .word 0x4002006c + 800f5ac: 40020408 .word 0x40020408 + 800f5b0: 4002041c .word 0x4002041c + 800f5b4: 40020430 .word 0x40020430 + 800f5b8: 40020444 .word 0x40020444 + 800f5bc: 40020400 .word 0x40020400 + 800f5c0: 40020000 .word 0x40020000 + +0800f5c4 : + * @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) +{ + 800f5c4: b480 push {r7} + 800f5c6: b08b sub sp, #44 @ 0x2c + 800f5c8: af00 add r7, sp, #0 + 800f5ca: 6078 str r0, [r7, #4] + 800f5cc: 6039 str r1, [r7, #0] + uint32_t position = 0x00u; + 800f5ce: 2300 movs r3, #0 + 800f5d0: 627b str r3, [r7, #36] @ 0x24 + uint32_t ioposition; + uint32_t iocurrent; + uint32_t temp; + uint32_t config = 0x00u; + 800f5d2: 2300 movs r3, #0 + 800f5d4: 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) + 800f5d6: e169 b.n 800f8ac + { + /* Get the IO position */ + ioposition = (0x01uL << position); + 800f5d8: 2201 movs r2, #1 + 800f5da: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f5dc: fa02 f303 lsl.w r3, r2, r3 + 800f5e0: 61fb str r3, [r7, #28] + + /* Get the current IO position */ + iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; + 800f5e2: 683b ldr r3, [r7, #0] + 800f5e4: 681b ldr r3, [r3, #0] + 800f5e6: 69fa ldr r2, [r7, #28] + 800f5e8: 4013 ands r3, r2 + 800f5ea: 61bb str r3, [r7, #24] + + if (iocurrent == ioposition) + 800f5ec: 69ba ldr r2, [r7, #24] + 800f5ee: 69fb ldr r3, [r7, #28] + 800f5f0: 429a cmp r2, r3 + 800f5f2: f040 8158 bne.w 800f8a6 + { + /* 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) + 800f5f6: 683b ldr r3, [r7, #0] + 800f5f8: 685b ldr r3, [r3, #4] + 800f5fa: 4a9a ldr r2, [pc, #616] @ (800f864 ) + 800f5fc: 4293 cmp r3, r2 + 800f5fe: d05e beq.n 800f6be + 800f600: 4a98 ldr r2, [pc, #608] @ (800f864 ) + 800f602: 4293 cmp r3, r2 + 800f604: d875 bhi.n 800f6f2 + 800f606: 4a98 ldr r2, [pc, #608] @ (800f868 ) + 800f608: 4293 cmp r3, r2 + 800f60a: d058 beq.n 800f6be + 800f60c: 4a96 ldr r2, [pc, #600] @ (800f868 ) + 800f60e: 4293 cmp r3, r2 + 800f610: d86f bhi.n 800f6f2 + 800f612: 4a96 ldr r2, [pc, #600] @ (800f86c ) + 800f614: 4293 cmp r3, r2 + 800f616: d052 beq.n 800f6be + 800f618: 4a94 ldr r2, [pc, #592] @ (800f86c ) + 800f61a: 4293 cmp r3, r2 + 800f61c: d869 bhi.n 800f6f2 + 800f61e: 4a94 ldr r2, [pc, #592] @ (800f870 ) + 800f620: 4293 cmp r3, r2 + 800f622: d04c beq.n 800f6be + 800f624: 4a92 ldr r2, [pc, #584] @ (800f870 ) + 800f626: 4293 cmp r3, r2 + 800f628: d863 bhi.n 800f6f2 + 800f62a: 4a92 ldr r2, [pc, #584] @ (800f874 ) + 800f62c: 4293 cmp r3, r2 + 800f62e: d046 beq.n 800f6be + 800f630: 4a90 ldr r2, [pc, #576] @ (800f874 ) + 800f632: 4293 cmp r3, r2 + 800f634: d85d bhi.n 800f6f2 + 800f636: 2b12 cmp r3, #18 + 800f638: d82a bhi.n 800f690 + 800f63a: 2b12 cmp r3, #18 + 800f63c: d859 bhi.n 800f6f2 + 800f63e: a201 add r2, pc, #4 @ (adr r2, 800f644 ) + 800f640: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800f644: 0800f6bf .word 0x0800f6bf + 800f648: 0800f699 .word 0x0800f699 + 800f64c: 0800f6ab .word 0x0800f6ab + 800f650: 0800f6ed .word 0x0800f6ed + 800f654: 0800f6f3 .word 0x0800f6f3 + 800f658: 0800f6f3 .word 0x0800f6f3 + 800f65c: 0800f6f3 .word 0x0800f6f3 + 800f660: 0800f6f3 .word 0x0800f6f3 + 800f664: 0800f6f3 .word 0x0800f6f3 + 800f668: 0800f6f3 .word 0x0800f6f3 + 800f66c: 0800f6f3 .word 0x0800f6f3 + 800f670: 0800f6f3 .word 0x0800f6f3 + 800f674: 0800f6f3 .word 0x0800f6f3 + 800f678: 0800f6f3 .word 0x0800f6f3 + 800f67c: 0800f6f3 .word 0x0800f6f3 + 800f680: 0800f6f3 .word 0x0800f6f3 + 800f684: 0800f6f3 .word 0x0800f6f3 + 800f688: 0800f6a1 .word 0x0800f6a1 + 800f68c: 0800f6b5 .word 0x0800f6b5 + 800f690: 4a79 ldr r2, [pc, #484] @ (800f878 ) + 800f692: 4293 cmp r3, r2 + 800f694: d013 beq.n 800f6be + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; + break; + + /* Parameters are checked with assert_param */ + default: + break; + 800f696: e02c b.n 800f6f2 + config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; + 800f698: 683b ldr r3, [r7, #0] + 800f69a: 68db ldr r3, [r3, #12] + 800f69c: 623b str r3, [r7, #32] + break; + 800f69e: e029 b.n 800f6f4 + config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; + 800f6a0: 683b ldr r3, [r7, #0] + 800f6a2: 68db ldr r3, [r3, #12] + 800f6a4: 3304 adds r3, #4 + 800f6a6: 623b str r3, [r7, #32] + break; + 800f6a8: e024 b.n 800f6f4 + config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; + 800f6aa: 683b ldr r3, [r7, #0] + 800f6ac: 68db ldr r3, [r3, #12] + 800f6ae: 3308 adds r3, #8 + 800f6b0: 623b str r3, [r7, #32] + break; + 800f6b2: e01f b.n 800f6f4 + config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; + 800f6b4: 683b ldr r3, [r7, #0] + 800f6b6: 68db ldr r3, [r3, #12] + 800f6b8: 330c adds r3, #12 + 800f6ba: 623b str r3, [r7, #32] + break; + 800f6bc: e01a b.n 800f6f4 + if (GPIO_Init->Pull == GPIO_NOPULL) + 800f6be: 683b ldr r3, [r7, #0] + 800f6c0: 689b ldr r3, [r3, #8] + 800f6c2: 2b00 cmp r3, #0 + 800f6c4: d102 bne.n 800f6cc + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; + 800f6c6: 2304 movs r3, #4 + 800f6c8: 623b str r3, [r7, #32] + break; + 800f6ca: e013 b.n 800f6f4 + else if (GPIO_Init->Pull == GPIO_PULLUP) + 800f6cc: 683b ldr r3, [r7, #0] + 800f6ce: 689b ldr r3, [r3, #8] + 800f6d0: 2b01 cmp r3, #1 + 800f6d2: d105 bne.n 800f6e0 + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; + 800f6d4: 2308 movs r3, #8 + 800f6d6: 623b str r3, [r7, #32] + GPIOx->BSRR = ioposition; + 800f6d8: 687b ldr r3, [r7, #4] + 800f6da: 69fa ldr r2, [r7, #28] + 800f6dc: 611a str r2, [r3, #16] + break; + 800f6de: e009 b.n 800f6f4 + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; + 800f6e0: 2308 movs r3, #8 + 800f6e2: 623b str r3, [r7, #32] + GPIOx->BRR = ioposition; + 800f6e4: 687b ldr r3, [r7, #4] + 800f6e6: 69fa ldr r2, [r7, #28] + 800f6e8: 615a str r2, [r3, #20] + break; + 800f6ea: e003 b.n 800f6f4 + config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; + 800f6ec: 2300 movs r3, #0 + 800f6ee: 623b str r3, [r7, #32] + break; + 800f6f0: e000 b.n 800f6f4 + break; + 800f6f2: 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; + 800f6f4: 69bb ldr r3, [r7, #24] + 800f6f6: 2bff cmp r3, #255 @ 0xff + 800f6f8: d801 bhi.n 800f6fe + 800f6fa: 687b ldr r3, [r7, #4] + 800f6fc: e001 b.n 800f702 + 800f6fe: 687b ldr r3, [r7, #4] + 800f700: 3304 adds r3, #4 + 800f702: 617b str r3, [r7, #20] + registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); + 800f704: 69bb ldr r3, [r7, #24] + 800f706: 2bff cmp r3, #255 @ 0xff + 800f708: d802 bhi.n 800f710 + 800f70a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f70c: 009b lsls r3, r3, #2 + 800f70e: e002 b.n 800f716 + 800f710: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f712: 3b08 subs r3, #8 + 800f714: 009b lsls r3, r3, #2 + 800f716: 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)); + 800f718: 697b ldr r3, [r7, #20] + 800f71a: 681a ldr r2, [r3, #0] + 800f71c: 210f movs r1, #15 + 800f71e: 693b ldr r3, [r7, #16] + 800f720: fa01 f303 lsl.w r3, r1, r3 + 800f724: 43db mvns r3, r3 + 800f726: 401a ands r2, r3 + 800f728: 6a39 ldr r1, [r7, #32] + 800f72a: 693b ldr r3, [r7, #16] + 800f72c: fa01 f303 lsl.w r3, r1, r3 + 800f730: 431a orrs r2, r3 + 800f732: 697b ldr r3, [r7, #20] + 800f734: 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) + 800f736: 683b ldr r3, [r7, #0] + 800f738: 685b ldr r3, [r3, #4] + 800f73a: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800f73e: 2b00 cmp r3, #0 + 800f740: f000 80b1 beq.w 800f8a6 + { + /* Enable AFIO Clock */ + __HAL_RCC_AFIO_CLK_ENABLE(); + 800f744: 4b4d ldr r3, [pc, #308] @ (800f87c ) + 800f746: 699b ldr r3, [r3, #24] + 800f748: 4a4c ldr r2, [pc, #304] @ (800f87c ) + 800f74a: f043 0301 orr.w r3, r3, #1 + 800f74e: 6193 str r3, [r2, #24] + 800f750: 4b4a ldr r3, [pc, #296] @ (800f87c ) + 800f752: 699b ldr r3, [r3, #24] + 800f754: f003 0301 and.w r3, r3, #1 + 800f758: 60bb str r3, [r7, #8] + 800f75a: 68bb ldr r3, [r7, #8] + temp = AFIO->EXTICR[position >> 2u]; + 800f75c: 4a48 ldr r2, [pc, #288] @ (800f880 ) + 800f75e: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f760: 089b lsrs r3, r3, #2 + 800f762: 3302 adds r3, #2 + 800f764: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 800f768: 60fb str r3, [r7, #12] + CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); + 800f76a: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f76c: f003 0303 and.w r3, r3, #3 + 800f770: 009b lsls r3, r3, #2 + 800f772: 220f movs r2, #15 + 800f774: fa02 f303 lsl.w r3, r2, r3 + 800f778: 43db mvns r3, r3 + 800f77a: 68fa ldr r2, [r7, #12] + 800f77c: 4013 ands r3, r2 + 800f77e: 60fb str r3, [r7, #12] + SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); + 800f780: 687b ldr r3, [r7, #4] + 800f782: 4a40 ldr r2, [pc, #256] @ (800f884 ) + 800f784: 4293 cmp r3, r2 + 800f786: d013 beq.n 800f7b0 + 800f788: 687b ldr r3, [r7, #4] + 800f78a: 4a3f ldr r2, [pc, #252] @ (800f888 ) + 800f78c: 4293 cmp r3, r2 + 800f78e: d00d beq.n 800f7ac + 800f790: 687b ldr r3, [r7, #4] + 800f792: 4a3e ldr r2, [pc, #248] @ (800f88c ) + 800f794: 4293 cmp r3, r2 + 800f796: d007 beq.n 800f7a8 + 800f798: 687b ldr r3, [r7, #4] + 800f79a: 4a3d ldr r2, [pc, #244] @ (800f890 ) + 800f79c: 4293 cmp r3, r2 + 800f79e: d101 bne.n 800f7a4 + 800f7a0: 2303 movs r3, #3 + 800f7a2: e006 b.n 800f7b2 + 800f7a4: 2304 movs r3, #4 + 800f7a6: e004 b.n 800f7b2 + 800f7a8: 2302 movs r3, #2 + 800f7aa: e002 b.n 800f7b2 + 800f7ac: 2301 movs r3, #1 + 800f7ae: e000 b.n 800f7b2 + 800f7b0: 2300 movs r3, #0 + 800f7b2: 6a7a ldr r2, [r7, #36] @ 0x24 + 800f7b4: f002 0203 and.w r2, r2, #3 + 800f7b8: 0092 lsls r2, r2, #2 + 800f7ba: 4093 lsls r3, r2 + 800f7bc: 68fa ldr r2, [r7, #12] + 800f7be: 4313 orrs r3, r2 + 800f7c0: 60fb str r3, [r7, #12] + AFIO->EXTICR[position >> 2u] = temp; + 800f7c2: 492f ldr r1, [pc, #188] @ (800f880 ) + 800f7c4: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f7c6: 089b lsrs r3, r3, #2 + 800f7c8: 3302 adds r3, #2 + 800f7ca: 68fa ldr r2, [r7, #12] + 800f7cc: f841 2023 str.w r2, [r1, r3, lsl #2] + + + /* Enable or disable the rising trigger */ + if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) + 800f7d0: 683b ldr r3, [r7, #0] + 800f7d2: 685b ldr r3, [r3, #4] + 800f7d4: f403 1380 and.w r3, r3, #1048576 @ 0x100000 + 800f7d8: 2b00 cmp r3, #0 + 800f7da: d006 beq.n 800f7ea + { + SET_BIT(EXTI->RTSR, iocurrent); + 800f7dc: 4b2d ldr r3, [pc, #180] @ (800f894 ) + 800f7de: 689a ldr r2, [r3, #8] + 800f7e0: 492c ldr r1, [pc, #176] @ (800f894 ) + 800f7e2: 69bb ldr r3, [r7, #24] + 800f7e4: 4313 orrs r3, r2 + 800f7e6: 608b str r3, [r1, #8] + 800f7e8: e006 b.n 800f7f8 + } + else + { + CLEAR_BIT(EXTI->RTSR, iocurrent); + 800f7ea: 4b2a ldr r3, [pc, #168] @ (800f894 ) + 800f7ec: 689a ldr r2, [r3, #8] + 800f7ee: 69bb ldr r3, [r7, #24] + 800f7f0: 43db mvns r3, r3 + 800f7f2: 4928 ldr r1, [pc, #160] @ (800f894 ) + 800f7f4: 4013 ands r3, r2 + 800f7f6: 608b str r3, [r1, #8] + } + + /* Enable or disable the falling trigger */ + if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) + 800f7f8: 683b ldr r3, [r7, #0] + 800f7fa: 685b ldr r3, [r3, #4] + 800f7fc: f403 1300 and.w r3, r3, #2097152 @ 0x200000 + 800f800: 2b00 cmp r3, #0 + 800f802: d006 beq.n 800f812 + { + SET_BIT(EXTI->FTSR, iocurrent); + 800f804: 4b23 ldr r3, [pc, #140] @ (800f894 ) + 800f806: 68da ldr r2, [r3, #12] + 800f808: 4922 ldr r1, [pc, #136] @ (800f894 ) + 800f80a: 69bb ldr r3, [r7, #24] + 800f80c: 4313 orrs r3, r2 + 800f80e: 60cb str r3, [r1, #12] + 800f810: e006 b.n 800f820 + } + else + { + CLEAR_BIT(EXTI->FTSR, iocurrent); + 800f812: 4b20 ldr r3, [pc, #128] @ (800f894 ) + 800f814: 68da ldr r2, [r3, #12] + 800f816: 69bb ldr r3, [r7, #24] + 800f818: 43db mvns r3, r3 + 800f81a: 491e ldr r1, [pc, #120] @ (800f894 ) + 800f81c: 4013 ands r3, r2 + 800f81e: 60cb str r3, [r1, #12] + } + + /* Configure the event mask */ + if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) + 800f820: 683b ldr r3, [r7, #0] + 800f822: 685b ldr r3, [r3, #4] + 800f824: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800f828: 2b00 cmp r3, #0 + 800f82a: d006 beq.n 800f83a + { + SET_BIT(EXTI->EMR, iocurrent); + 800f82c: 4b19 ldr r3, [pc, #100] @ (800f894 ) + 800f82e: 685a ldr r2, [r3, #4] + 800f830: 4918 ldr r1, [pc, #96] @ (800f894 ) + 800f832: 69bb ldr r3, [r7, #24] + 800f834: 4313 orrs r3, r2 + 800f836: 604b str r3, [r1, #4] + 800f838: e006 b.n 800f848 + } + else + { + CLEAR_BIT(EXTI->EMR, iocurrent); + 800f83a: 4b16 ldr r3, [pc, #88] @ (800f894 ) + 800f83c: 685a ldr r2, [r3, #4] + 800f83e: 69bb ldr r3, [r7, #24] + 800f840: 43db mvns r3, r3 + 800f842: 4914 ldr r1, [pc, #80] @ (800f894 ) + 800f844: 4013 ands r3, r2 + 800f846: 604b str r3, [r1, #4] + } + + /* Configure the interrupt mask */ + if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) + 800f848: 683b ldr r3, [r7, #0] + 800f84a: 685b ldr r3, [r3, #4] + 800f84c: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800f850: 2b00 cmp r3, #0 + 800f852: d021 beq.n 800f898 + { + SET_BIT(EXTI->IMR, iocurrent); + 800f854: 4b0f ldr r3, [pc, #60] @ (800f894 ) + 800f856: 681a ldr r2, [r3, #0] + 800f858: 490e ldr r1, [pc, #56] @ (800f894 ) + 800f85a: 69bb ldr r3, [r7, #24] + 800f85c: 4313 orrs r3, r2 + 800f85e: 600b str r3, [r1, #0] + 800f860: e021 b.n 800f8a6 + 800f862: bf00 nop + 800f864: 10320000 .word 0x10320000 + 800f868: 10310000 .word 0x10310000 + 800f86c: 10220000 .word 0x10220000 + 800f870: 10210000 .word 0x10210000 + 800f874: 10120000 .word 0x10120000 + 800f878: 10110000 .word 0x10110000 + 800f87c: 40021000 .word 0x40021000 + 800f880: 40010000 .word 0x40010000 + 800f884: 40010800 .word 0x40010800 + 800f888: 40010c00 .word 0x40010c00 + 800f88c: 40011000 .word 0x40011000 + 800f890: 40011400 .word 0x40011400 + 800f894: 40010400 .word 0x40010400 + } + else + { + CLEAR_BIT(EXTI->IMR, iocurrent); + 800f898: 4b0b ldr r3, [pc, #44] @ (800f8c8 ) + 800f89a: 681a ldr r2, [r3, #0] + 800f89c: 69bb ldr r3, [r7, #24] + 800f89e: 43db mvns r3, r3 + 800f8a0: 4909 ldr r1, [pc, #36] @ (800f8c8 ) + 800f8a2: 4013 ands r3, r2 + 800f8a4: 600b str r3, [r1, #0] + } + } + } + + position++; + 800f8a6: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f8a8: 3301 adds r3, #1 + 800f8aa: 627b str r3, [r7, #36] @ 0x24 + while (((GPIO_Init->Pin) >> position) != 0x00u) + 800f8ac: 683b ldr r3, [r7, #0] + 800f8ae: 681a ldr r2, [r3, #0] + 800f8b0: 6a7b ldr r3, [r7, #36] @ 0x24 + 800f8b2: fa22 f303 lsr.w r3, r2, r3 + 800f8b6: 2b00 cmp r3, #0 + 800f8b8: f47f ae8e bne.w 800f5d8 + } +} + 800f8bc: bf00 nop + 800f8be: bf00 nop + 800f8c0: 372c adds r7, #44 @ 0x2c + 800f8c2: 46bd mov sp, r7 + 800f8c4: bc80 pop {r7} + 800f8c6: 4770 bx lr + 800f8c8: 40010400 .word 0x40010400 + +0800f8cc : + * @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) +{ + 800f8cc: b480 push {r7} + 800f8ce: b085 sub sp, #20 + 800f8d0: af00 add r7, sp, #0 + 800f8d2: 6078 str r0, [r7, #4] + 800f8d4: 460b mov r3, r1 + 800f8d6: 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) + 800f8d8: 687b ldr r3, [r7, #4] + 800f8da: 689a ldr r2, [r3, #8] + 800f8dc: 887b ldrh r3, [r7, #2] + 800f8de: 4013 ands r3, r2 + 800f8e0: 2b00 cmp r3, #0 + 800f8e2: d002 beq.n 800f8ea + { + bitstatus = GPIO_PIN_SET; + 800f8e4: 2301 movs r3, #1 + 800f8e6: 73fb strb r3, [r7, #15] + 800f8e8: e001 b.n 800f8ee + } + else + { + bitstatus = GPIO_PIN_RESET; + 800f8ea: 2300 movs r3, #0 + 800f8ec: 73fb strb r3, [r7, #15] + } + return bitstatus; + 800f8ee: 7bfb ldrb r3, [r7, #15] +} + 800f8f0: 4618 mov r0, r3 + 800f8f2: 3714 adds r7, #20 + 800f8f4: 46bd mov sp, r7 + 800f8f6: bc80 pop {r7} + 800f8f8: 4770 bx lr + +0800f8fa : + * @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) +{ + 800f8fa: b480 push {r7} + 800f8fc: b083 sub sp, #12 + 800f8fe: af00 add r7, sp, #0 + 800f900: 6078 str r0, [r7, #4] + 800f902: 460b mov r3, r1 + 800f904: 807b strh r3, [r7, #2] + 800f906: 4613 mov r3, r2 + 800f908: 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) + 800f90a: 787b ldrb r3, [r7, #1] + 800f90c: 2b00 cmp r3, #0 + 800f90e: d003 beq.n 800f918 + { + GPIOx->BSRR = GPIO_Pin; + 800f910: 887a ldrh r2, [r7, #2] + 800f912: 687b ldr r3, [r7, #4] + 800f914: 611a str r2, [r3, #16] + } + else + { + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; + } +} + 800f916: e003 b.n 800f920 + GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; + 800f918: 887b ldrh r3, [r7, #2] + 800f91a: 041a lsls r2, r3, #16 + 800f91c: 687b ldr r3, [r7, #4] + 800f91e: 611a str r2, [r3, #16] +} + 800f920: bf00 nop + 800f922: 370c adds r7, #12 + 800f924: 46bd mov sp, r7 + 800f926: bc80 pop {r7} + 800f928: 4770 bx lr + ... + +0800f92c : + * @note If the HSE divided by 128 is used as the RTC clock, the + * Backup Domain Access should be kept enabled. + * @retval None + */ +void HAL_PWR_EnableBkUpAccess(void) +{ + 800f92c: b480 push {r7} + 800f92e: af00 add r7, sp, #0 + /* Enable access to RTC and backup registers */ + *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE; + 800f930: 4b03 ldr r3, [pc, #12] @ (800f940 ) + 800f932: 2201 movs r2, #1 + 800f934: 601a str r2, [r3, #0] +} + 800f936: bf00 nop + 800f938: 46bd mov sp, r7 + 800f93a: bc80 pop {r7} + 800f93c: 4770 bx lr + 800f93e: bf00 nop + 800f940: 420e0020 .word 0x420e0020 + +0800f944 : + * - Peripheral clocks + * - LSI, LSE and RTC clocks + * @retval HAL_StatusTypeDef + */ +HAL_StatusTypeDef HAL_RCC_DeInit(void) +{ + 800f944: b580 push {r7, lr} + 800f946: b082 sub sp, #8 + 800f948: af00 add r7, sp, #0 + uint32_t tickstart; + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800f94a: f7fd ffc5 bl 800d8d8 + 800f94e: 6078 str r0, [r7, #4] + + /* Set HSION bit */ + SET_BIT(RCC->CR, RCC_CR_HSION); + 800f950: 4b60 ldr r3, [pc, #384] @ (800fad4 ) + 800f952: 681b ldr r3, [r3, #0] + 800f954: 4a5f ldr r2, [pc, #380] @ (800fad4 ) + 800f956: f043 0301 orr.w r3, r3, #1 + 800f95a: 6013 str r3, [r2, #0] + + /* Wait till HSI is ready */ + while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + 800f95c: e008 b.n 800f970 + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + 800f95e: f7fd ffbb bl 800d8d8 + 800f962: 4602 mov r2, r0 + 800f964: 687b ldr r3, [r7, #4] + 800f966: 1ad3 subs r3, r2, r3 + 800f968: 2b02 cmp r3, #2 + 800f96a: d901 bls.n 800f970 + { + return HAL_TIMEOUT; + 800f96c: 2303 movs r3, #3 + 800f96e: e0ac b.n 800faca + while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) + 800f970: 4b58 ldr r3, [pc, #352] @ (800fad4 ) + 800f972: 681b ldr r3, [r3, #0] + 800f974: f003 0302 and.w r3, r3, #2 + 800f978: 2b00 cmp r3, #0 + 800f97a: d0f0 beq.n 800f95e + } + } + + /* Set HSITRIM bits to the reset value */ + MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (0x10U << RCC_CR_HSITRIM_Pos)); + 800f97c: 4b55 ldr r3, [pc, #340] @ (800fad4 ) + 800f97e: 681b ldr r3, [r3, #0] + 800f980: f023 03f8 bic.w r3, r3, #248 @ 0xf8 + 800f984: 4a53 ldr r2, [pc, #332] @ (800fad4 ) + 800f986: f043 0380 orr.w r3, r3, #128 @ 0x80 + 800f98a: 6013 str r3, [r2, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800f98c: f7fd ffa4 bl 800d8d8 + 800f990: 6078 str r0, [r7, #4] + + /* Reset CFGR register */ + CLEAR_REG(RCC->CFGR); + 800f992: 4b50 ldr r3, [pc, #320] @ (800fad4 ) + 800f994: 2200 movs r2, #0 + 800f996: 605a str r2, [r3, #4] + + /* Wait till clock switch is ready */ + while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) + 800f998: e00a b.n 800f9b0 + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + 800f99a: f7fd ff9d bl 800d8d8 + 800f99e: 4602 mov r2, r0 + 800f9a0: 687b ldr r3, [r7, #4] + 800f9a2: 1ad3 subs r3, r2, r3 + 800f9a4: f241 3288 movw r2, #5000 @ 0x1388 + 800f9a8: 4293 cmp r3, r2 + 800f9aa: d901 bls.n 800f9b0 + { + return HAL_TIMEOUT; + 800f9ac: 2303 movs r3, #3 + 800f9ae: e08c b.n 800faca + while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) + 800f9b0: 4b48 ldr r3, [pc, #288] @ (800fad4 ) + 800f9b2: 685b ldr r3, [r3, #4] + 800f9b4: f003 030c and.w r3, r3, #12 + 800f9b8: 2b00 cmp r3, #0 + 800f9ba: d1ee bne.n 800f99a + } + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HSI_VALUE; + 800f9bc: 4b46 ldr r3, [pc, #280] @ (800fad8 ) + 800f9be: 4a47 ldr r2, [pc, #284] @ (800fadc ) + 800f9c0: 601a str r2, [r3, #0] + + /* Adapt Systick interrupt period */ + if (HAL_InitTick(uwTickPrio) != HAL_OK) + 800f9c2: 4b47 ldr r3, [pc, #284] @ (800fae0 ) + 800f9c4: 681b ldr r3, [r3, #0] + 800f9c6: 4618 mov r0, r3 + 800f9c8: f7fd ff44 bl 800d854 + 800f9cc: 4603 mov r3, r0 + 800f9ce: 2b00 cmp r3, #0 + 800f9d0: d001 beq.n 800f9d6 + { + return HAL_ERROR; + 800f9d2: 2301 movs r3, #1 + 800f9d4: e079 b.n 800faca + } + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800f9d6: f7fd ff7f bl 800d8d8 + 800f9da: 6078 str r0, [r7, #4] + + /* Second step is to clear PLLON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLLON); + 800f9dc: 4b3d ldr r3, [pc, #244] @ (800fad4 ) + 800f9de: 681b ldr r3, [r3, #0] + 800f9e0: 4a3c ldr r2, [pc, #240] @ (800fad4 ) + 800f9e2: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000 + 800f9e6: 6013 str r3, [r2, #0] + + /* Wait till PLL is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) + 800f9e8: e008 b.n 800f9fc + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 800f9ea: f7fd ff75 bl 800d8d8 + 800f9ee: 4602 mov r2, r0 + 800f9f0: 687b ldr r3, [r7, #4] + 800f9f2: 1ad3 subs r3, r2, r3 + 800f9f4: 2b02 cmp r3, #2 + 800f9f6: d901 bls.n 800f9fc + { + return HAL_TIMEOUT; + 800f9f8: 2303 movs r3, #3 + 800f9fa: e066 b.n 800faca + while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) + 800f9fc: 4b35 ldr r3, [pc, #212] @ (800fad4 ) + 800f9fe: 681b ldr r3, [r3, #0] + 800fa00: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 800fa04: 2b00 cmp r3, #0 + 800fa06: d1f0 bne.n 800f9ea + } + } + + /* Ensure to reset PLLSRC and PLLMUL bits */ + CLEAR_REG(RCC->CFGR); + 800fa08: 4b32 ldr r3, [pc, #200] @ (800fad4 ) + 800fa0a: 2200 movs r2, #0 + 800fa0c: 605a str r2, [r3, #4] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fa0e: f7fd ff63 bl 800d8d8 + 800fa12: 6078 str r0, [r7, #4] + + /* Reset HSEON & CSSON bits */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON); + 800fa14: 4b2f ldr r3, [pc, #188] @ (800fad4 ) + 800fa16: 681b ldr r3, [r3, #0] + 800fa18: 4a2e ldr r2, [pc, #184] @ (800fad4 ) + 800fa1a: f423 2310 bic.w r3, r3, #589824 @ 0x90000 + 800fa1e: 6013 str r3, [r2, #0] + + /* Wait till HSE is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) + 800fa20: e008 b.n 800fa34 + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + 800fa22: f7fd ff59 bl 800d8d8 + 800fa26: 4602 mov r2, r0 + 800fa28: 687b ldr r3, [r7, #4] + 800fa2a: 1ad3 subs r3, r2, r3 + 800fa2c: 2b64 cmp r3, #100 @ 0x64 + 800fa2e: d901 bls.n 800fa34 + { + return HAL_TIMEOUT; + 800fa30: 2303 movs r3, #3 + 800fa32: e04a b.n 800faca + while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) + 800fa34: 4b27 ldr r3, [pc, #156] @ (800fad4 ) + 800fa36: 681b ldr r3, [r3, #0] + 800fa38: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800fa3c: 2b00 cmp r3, #0 + 800fa3e: d1f0 bne.n 800fa22 + } + } + + /* Reset HSEBYP bit */ + CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); + 800fa40: 4b24 ldr r3, [pc, #144] @ (800fad4 ) + 800fa42: 681b ldr r3, [r3, #0] + 800fa44: 4a23 ldr r2, [pc, #140] @ (800fad4 ) + 800fa46: f423 2380 bic.w r3, r3, #262144 @ 0x40000 + 800fa4a: 6013 str r3, [r2, #0] + +#if defined(RCC_PLL2_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fa4c: f7fd ff44 bl 800d8d8 + 800fa50: 6078 str r0, [r7, #4] + + /* Clear PLL2ON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON); + 800fa52: 4b20 ldr r3, [pc, #128] @ (800fad4 ) + 800fa54: 681b ldr r3, [r3, #0] + 800fa56: 4a1f ldr r2, [pc, #124] @ (800fad4 ) + 800fa58: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000 + 800fa5c: 6013 str r3, [r2, #0] + + /* Wait till PLL2 is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) + 800fa5e: e008 b.n 800fa72 + { + if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) + 800fa60: f7fd ff3a bl 800d8d8 + 800fa64: 4602 mov r2, r0 + 800fa66: 687b ldr r3, [r7, #4] + 800fa68: 1ad3 subs r3, r2, r3 + 800fa6a: 2b64 cmp r3, #100 @ 0x64 + 800fa6c: d901 bls.n 800fa72 + { + return HAL_TIMEOUT; + 800fa6e: 2303 movs r3, #3 + 800fa70: e02b b.n 800faca + while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) + 800fa72: 4b18 ldr r3, [pc, #96] @ (800fad4 ) + 800fa74: 681b ldr r3, [r3, #0] + 800fa76: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800fa7a: 2b00 cmp r3, #0 + 800fa7c: d1f0 bne.n 800fa60 + } +#endif /* RCC_PLL2_SUPPORT */ + +#if defined(RCC_PLLI2S_SUPPORT) + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fa7e: f7fd ff2b bl 800d8d8 + 800fa82: 6078 str r0, [r7, #4] + + /* Clear PLL3ON bit */ + CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON); + 800fa84: 4b13 ldr r3, [pc, #76] @ (800fad4 ) + 800fa86: 681b ldr r3, [r3, #0] + 800fa88: 4a12 ldr r2, [pc, #72] @ (800fad4 ) + 800fa8a: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 + 800fa8e: 6013 str r3, [r2, #0] + + /* Wait till PLL3 is disabled */ + while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) + 800fa90: e008 b.n 800faa4 + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + 800fa92: f7fd ff21 bl 800d8d8 + 800fa96: 4602 mov r2, r0 + 800fa98: 687b ldr r3, [r7, #4] + 800fa9a: 1ad3 subs r3, r2, r3 + 800fa9c: 2b64 cmp r3, #100 @ 0x64 + 800fa9e: d901 bls.n 800faa4 + { + return HAL_TIMEOUT; + 800faa0: 2303 movs r3, #3 + 800faa2: e012 b.n 800faca + while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) + 800faa4: 4b0b ldr r3, [pc, #44] @ (800fad4 ) + 800faa6: 681b ldr r3, [r3, #0] + 800faa8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 + 800faac: 2b00 cmp r3, #0 + 800faae: d1f0 bne.n 800fa92 + } +#endif /* RCC_PLLI2S_SUPPORT */ + +#if defined(RCC_CFGR2_PREDIV1) + /* Reset CFGR2 register */ + CLEAR_REG(RCC->CFGR2); + 800fab0: 4b08 ldr r3, [pc, #32] @ (800fad4 ) + 800fab2: 2200 movs r2, #0 + 800fab4: 62da str r2, [r3, #44] @ 0x2c +#endif /* RCC_CFGR2_PREDIV1 */ + + /* Reset all CSR flags */ + SET_BIT(RCC->CSR, RCC_CSR_RMVF); + 800fab6: 4b07 ldr r3, [pc, #28] @ (800fad4 ) + 800fab8: 6a5b ldr r3, [r3, #36] @ 0x24 + 800faba: 4a06 ldr r2, [pc, #24] @ (800fad4 ) + 800fabc: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000 + 800fac0: 6253 str r3, [r2, #36] @ 0x24 + + /* Disable all interrupts */ + CLEAR_REG(RCC->CIR); + 800fac2: 4b04 ldr r3, [pc, #16] @ (800fad4 ) + 800fac4: 2200 movs r2, #0 + 800fac6: 609a str r2, [r3, #8] + + return HAL_OK; + 800fac8: 2300 movs r3, #0 +} + 800faca: 4618 mov r0, r3 + 800facc: 3708 adds r7, #8 + 800face: 46bd mov sp, r7 + 800fad0: bd80 pop {r7, pc} + 800fad2: bf00 nop + 800fad4: 40021000 .word 0x40021000 + 800fad8: 2000006c .word 0x2000006c + 800fadc: 007a1200 .word 0x007a1200 + 800fae0: 20000070 .word 0x20000070 + +0800fae4 : + * 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) +{ + 800fae4: b580 push {r7, lr} + 800fae6: b086 sub sp, #24 + 800fae8: af00 add r7, sp, #0 + 800faea: 6078 str r0, [r7, #4] + uint32_t tickstart; + uint32_t pll_config; + + /* Check Null pointer */ + if (RCC_OscInitStruct == NULL) + 800faec: 687b ldr r3, [r7, #4] + 800faee: 2b00 cmp r3, #0 + 800faf0: d101 bne.n 800faf6 + { + return HAL_ERROR; + 800faf2: 2301 movs r3, #1 + 800faf4: e304 b.n 8010100 + + /* Check the parameters */ + assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); + + /*------------------------------- HSE Configuration ------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) + 800faf6: 687b ldr r3, [r7, #4] + 800faf8: 681b ldr r3, [r3, #0] + 800fafa: f003 0301 and.w r3, r3, #1 + 800fafe: 2b00 cmp r3, #0 + 800fb00: f000 8087 beq.w 800fc12 + { + /* 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) + 800fb04: 4b92 ldr r3, [pc, #584] @ (800fd50 ) + 800fb06: 685b ldr r3, [r3, #4] + 800fb08: f003 030c and.w r3, r3, #12 + 800fb0c: 2b04 cmp r3, #4 + 800fb0e: d00c beq.n 800fb2a + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) + 800fb10: 4b8f ldr r3, [pc, #572] @ (800fd50 ) + 800fb12: 685b ldr r3, [r3, #4] + 800fb14: f003 030c and.w r3, r3, #12 + 800fb18: 2b08 cmp r3, #8 + 800fb1a: d112 bne.n 800fb42 + 800fb1c: 4b8c ldr r3, [pc, #560] @ (800fd50 ) + 800fb1e: 685b ldr r3, [r3, #4] + 800fb20: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800fb24: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800fb28: d10b bne.n 800fb42 + { + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 800fb2a: 4b89 ldr r3, [pc, #548] @ (800fd50 ) + 800fb2c: 681b ldr r3, [r3, #0] + 800fb2e: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800fb32: 2b00 cmp r3, #0 + 800fb34: d06c beq.n 800fc10 + 800fb36: 687b ldr r3, [r7, #4] + 800fb38: 689b ldr r3, [r3, #8] + 800fb3a: 2b00 cmp r3, #0 + 800fb3c: d168 bne.n 800fc10 + { + return HAL_ERROR; + 800fb3e: 2301 movs r3, #1 + 800fb40: e2de b.n 8010100 + } + } + else + { + /* Set the new HSE configuration ---------------------------------------*/ + __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); + 800fb42: 687b ldr r3, [r7, #4] + 800fb44: 689b ldr r3, [r3, #8] + 800fb46: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800fb4a: d106 bne.n 800fb5a + 800fb4c: 4b80 ldr r3, [pc, #512] @ (800fd50 ) + 800fb4e: 681b ldr r3, [r3, #0] + 800fb50: 4a7f ldr r2, [pc, #508] @ (800fd50 ) + 800fb52: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 800fb56: 6013 str r3, [r2, #0] + 800fb58: e02e b.n 800fbb8 + 800fb5a: 687b ldr r3, [r7, #4] + 800fb5c: 689b ldr r3, [r3, #8] + 800fb5e: 2b00 cmp r3, #0 + 800fb60: d10c bne.n 800fb7c + 800fb62: 4b7b ldr r3, [pc, #492] @ (800fd50 ) + 800fb64: 681b ldr r3, [r3, #0] + 800fb66: 4a7a ldr r2, [pc, #488] @ (800fd50 ) + 800fb68: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 800fb6c: 6013 str r3, [r2, #0] + 800fb6e: 4b78 ldr r3, [pc, #480] @ (800fd50 ) + 800fb70: 681b ldr r3, [r3, #0] + 800fb72: 4a77 ldr r2, [pc, #476] @ (800fd50 ) + 800fb74: f423 2380 bic.w r3, r3, #262144 @ 0x40000 + 800fb78: 6013 str r3, [r2, #0] + 800fb7a: e01d b.n 800fbb8 + 800fb7c: 687b ldr r3, [r7, #4] + 800fb7e: 689b ldr r3, [r3, #8] + 800fb80: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000 + 800fb84: d10c bne.n 800fba0 + 800fb86: 4b72 ldr r3, [pc, #456] @ (800fd50 ) + 800fb88: 681b ldr r3, [r3, #0] + 800fb8a: 4a71 ldr r2, [pc, #452] @ (800fd50 ) + 800fb8c: f443 2380 orr.w r3, r3, #262144 @ 0x40000 + 800fb90: 6013 str r3, [r2, #0] + 800fb92: 4b6f ldr r3, [pc, #444] @ (800fd50 ) + 800fb94: 681b ldr r3, [r3, #0] + 800fb96: 4a6e ldr r2, [pc, #440] @ (800fd50 ) + 800fb98: f443 3380 orr.w r3, r3, #65536 @ 0x10000 + 800fb9c: 6013 str r3, [r2, #0] + 800fb9e: e00b b.n 800fbb8 + 800fba0: 4b6b ldr r3, [pc, #428] @ (800fd50 ) + 800fba2: 681b ldr r3, [r3, #0] + 800fba4: 4a6a ldr r2, [pc, #424] @ (800fd50 ) + 800fba6: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 800fbaa: 6013 str r3, [r2, #0] + 800fbac: 4b68 ldr r3, [pc, #416] @ (800fd50 ) + 800fbae: 681b ldr r3, [r3, #0] + 800fbb0: 4a67 ldr r2, [pc, #412] @ (800fd50 ) + 800fbb2: f423 2380 bic.w r3, r3, #262144 @ 0x40000 + 800fbb6: 6013 str r3, [r2, #0] + + + /* Check the HSE State */ + if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF) + 800fbb8: 687b ldr r3, [r7, #4] + 800fbba: 689b ldr r3, [r3, #8] + 800fbbc: 2b00 cmp r3, #0 + 800fbbe: d013 beq.n 800fbe8 + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fbc0: f7fd fe8a bl 800d8d8 + 800fbc4: 6138 str r0, [r7, #16] + + /* Wait till HSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 800fbc6: e008 b.n 800fbda + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + 800fbc8: f7fd fe86 bl 800d8d8 + 800fbcc: 4602 mov r2, r0 + 800fbce: 693b ldr r3, [r7, #16] + 800fbd0: 1ad3 subs r3, r2, r3 + 800fbd2: 2b64 cmp r3, #100 @ 0x64 + 800fbd4: d901 bls.n 800fbda + { + return HAL_TIMEOUT; + 800fbd6: 2303 movs r3, #3 + 800fbd8: e292 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 800fbda: 4b5d ldr r3, [pc, #372] @ (800fd50 ) + 800fbdc: 681b ldr r3, [r3, #0] + 800fbde: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800fbe2: 2b00 cmp r3, #0 + 800fbe4: d0f0 beq.n 800fbc8 + 800fbe6: e014 b.n 800fc12 + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fbe8: f7fd fe76 bl 800d8d8 + 800fbec: 6138 str r0, [r7, #16] + + /* Wait till HSE is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 800fbee: e008 b.n 800fc02 + { + if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) + 800fbf0: f7fd fe72 bl 800d8d8 + 800fbf4: 4602 mov r2, r0 + 800fbf6: 693b ldr r3, [r7, #16] + 800fbf8: 1ad3 subs r3, r2, r3 + 800fbfa: 2b64 cmp r3, #100 @ 0x64 + 800fbfc: d901 bls.n 800fc02 + { + return HAL_TIMEOUT; + 800fbfe: 2303 movs r3, #3 + 800fc00: e27e b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) + 800fc02: 4b53 ldr r3, [pc, #332] @ (800fd50 ) + 800fc04: 681b ldr r3, [r3, #0] + 800fc06: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 800fc0a: 2b00 cmp r3, #0 + 800fc0c: d1f0 bne.n 800fbf0 + 800fc0e: e000 b.n 800fc12 + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) + 800fc10: bf00 nop + } + } + } + } + /*----------------------------- HSI Configuration --------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) + 800fc12: 687b ldr r3, [r7, #4] + 800fc14: 681b ldr r3, [r3, #0] + 800fc16: f003 0302 and.w r3, r3, #2 + 800fc1a: 2b00 cmp r3, #0 + 800fc1c: d063 beq.n 800fce6 + /* 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) + 800fc1e: 4b4c ldr r3, [pc, #304] @ (800fd50 ) + 800fc20: 685b ldr r3, [r3, #4] + 800fc22: f003 030c and.w r3, r3, #12 + 800fc26: 2b00 cmp r3, #0 + 800fc28: d00b beq.n 800fc42 + || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) + 800fc2a: 4b49 ldr r3, [pc, #292] @ (800fd50 ) + 800fc2c: 685b ldr r3, [r3, #4] + 800fc2e: f003 030c and.w r3, r3, #12 + 800fc32: 2b08 cmp r3, #8 + 800fc34: d11c bne.n 800fc70 + 800fc36: 4b46 ldr r3, [pc, #280] @ (800fd50 ) + 800fc38: 685b ldr r3, [r3, #4] + 800fc3a: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800fc3e: 2b00 cmp r3, #0 + 800fc40: d116 bne.n 800fc70 + { + /* 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)) + 800fc42: 4b43 ldr r3, [pc, #268] @ (800fd50 ) + 800fc44: 681b ldr r3, [r3, #0] + 800fc46: f003 0302 and.w r3, r3, #2 + 800fc4a: 2b00 cmp r3, #0 + 800fc4c: d005 beq.n 800fc5a + 800fc4e: 687b ldr r3, [r7, #4] + 800fc50: 695b ldr r3, [r3, #20] + 800fc52: 2b01 cmp r3, #1 + 800fc54: d001 beq.n 800fc5a + { + return HAL_ERROR; + 800fc56: 2301 movs r3, #1 + 800fc58: e252 b.n 8010100 + } + /* Otherwise, just the calibration is allowed */ + else + { + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 800fc5a: 4b3d ldr r3, [pc, #244] @ (800fd50 ) + 800fc5c: 681b ldr r3, [r3, #0] + 800fc5e: f023 02f8 bic.w r2, r3, #248 @ 0xf8 + 800fc62: 687b ldr r3, [r7, #4] + 800fc64: 699b ldr r3, [r3, #24] + 800fc66: 00db lsls r3, r3, #3 + 800fc68: 4939 ldr r1, [pc, #228] @ (800fd50 ) + 800fc6a: 4313 orrs r3, r2 + 800fc6c: 600b str r3, [r1, #0] + if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) + 800fc6e: e03a b.n 800fce6 + } + } + else + { + /* Check the HSI State */ + if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) + 800fc70: 687b ldr r3, [r7, #4] + 800fc72: 695b ldr r3, [r3, #20] + 800fc74: 2b00 cmp r3, #0 + 800fc76: d020 beq.n 800fcba + { + /* Enable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_ENABLE(); + 800fc78: 4b36 ldr r3, [pc, #216] @ (800fd54 ) + 800fc7a: 2201 movs r2, #1 + 800fc7c: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fc7e: f7fd fe2b bl 800d8d8 + 800fc82: 6138 str r0, [r7, #16] + + /* Wait till HSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 800fc84: e008 b.n 800fc98 + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + 800fc86: f7fd fe27 bl 800d8d8 + 800fc8a: 4602 mov r2, r0 + 800fc8c: 693b ldr r3, [r7, #16] + 800fc8e: 1ad3 subs r3, r2, r3 + 800fc90: 2b02 cmp r3, #2 + 800fc92: d901 bls.n 800fc98 + { + return HAL_TIMEOUT; + 800fc94: 2303 movs r3, #3 + 800fc96: e233 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 800fc98: 4b2d ldr r3, [pc, #180] @ (800fd50 ) + 800fc9a: 681b ldr r3, [r3, #0] + 800fc9c: f003 0302 and.w r3, r3, #2 + 800fca0: 2b00 cmp r3, #0 + 800fca2: d0f0 beq.n 800fc86 + } + } + + /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ + __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); + 800fca4: 4b2a ldr r3, [pc, #168] @ (800fd50 ) + 800fca6: 681b ldr r3, [r3, #0] + 800fca8: f023 02f8 bic.w r2, r3, #248 @ 0xf8 + 800fcac: 687b ldr r3, [r7, #4] + 800fcae: 699b ldr r3, [r3, #24] + 800fcb0: 00db lsls r3, r3, #3 + 800fcb2: 4927 ldr r1, [pc, #156] @ (800fd50 ) + 800fcb4: 4313 orrs r3, r2 + 800fcb6: 600b str r3, [r1, #0] + 800fcb8: e015 b.n 800fce6 + } + else + { + /* Disable the Internal High Speed oscillator (HSI). */ + __HAL_RCC_HSI_DISABLE(); + 800fcba: 4b26 ldr r3, [pc, #152] @ (800fd54 ) + 800fcbc: 2200 movs r2, #0 + 800fcbe: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fcc0: f7fd fe0a bl 800d8d8 + 800fcc4: 6138 str r0, [r7, #16] + + /* Wait till HSI is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 800fcc6: e008 b.n 800fcda + { + if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) + 800fcc8: f7fd fe06 bl 800d8d8 + 800fccc: 4602 mov r2, r0 + 800fcce: 693b ldr r3, [r7, #16] + 800fcd0: 1ad3 subs r3, r2, r3 + 800fcd2: 2b02 cmp r3, #2 + 800fcd4: d901 bls.n 800fcda + { + return HAL_TIMEOUT; + 800fcd6: 2303 movs r3, #3 + 800fcd8: e212 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) + 800fcda: 4b1d ldr r3, [pc, #116] @ (800fd50 ) + 800fcdc: 681b ldr r3, [r3, #0] + 800fcde: f003 0302 and.w r3, r3, #2 + 800fce2: 2b00 cmp r3, #0 + 800fce4: d1f0 bne.n 800fcc8 + } + } + } + } + /*------------------------------ LSI Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) + 800fce6: 687b ldr r3, [r7, #4] + 800fce8: 681b ldr r3, [r3, #0] + 800fcea: f003 0308 and.w r3, r3, #8 + 800fcee: 2b00 cmp r3, #0 + 800fcf0: d03a beq.n 800fd68 + { + /* Check the parameters */ + assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); + + /* Check the LSI State */ + if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF) + 800fcf2: 687b ldr r3, [r7, #4] + 800fcf4: 69db ldr r3, [r3, #28] + 800fcf6: 2b00 cmp r3, #0 + 800fcf8: d019 beq.n 800fd2e + { + /* Enable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_ENABLE(); + 800fcfa: 4b17 ldr r3, [pc, #92] @ (800fd58 ) + 800fcfc: 2201 movs r2, #1 + 800fcfe: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fd00: f7fd fdea bl 800d8d8 + 800fd04: 6138 str r0, [r7, #16] + + /* Wait till LSI is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 800fd06: e008 b.n 800fd1a + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + 800fd08: f7fd fde6 bl 800d8d8 + 800fd0c: 4602 mov r2, r0 + 800fd0e: 693b ldr r3, [r7, #16] + 800fd10: 1ad3 subs r3, r2, r3 + 800fd12: 2b02 cmp r3, #2 + 800fd14: d901 bls.n 800fd1a + { + return HAL_TIMEOUT; + 800fd16: 2303 movs r3, #3 + 800fd18: e1f2 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) + 800fd1a: 4b0d ldr r3, [pc, #52] @ (800fd50 ) + 800fd1c: 6a5b ldr r3, [r3, #36] @ 0x24 + 800fd1e: f003 0302 and.w r3, r3, #2 + 800fd22: 2b00 cmp r3, #0 + 800fd24: d0f0 beq.n 800fd08 + } + } + /* To have a fully stabilized clock in the specified range, a software delay of 1ms + should be added.*/ + RCC_Delay(1); + 800fd26: 2001 movs r0, #1 + 800fd28: f000 fbca bl 80104c0 + 800fd2c: e01c b.n 800fd68 + } + else + { + /* Disable the Internal Low Speed oscillator (LSI). */ + __HAL_RCC_LSI_DISABLE(); + 800fd2e: 4b0a ldr r3, [pc, #40] @ (800fd58 ) + 800fd30: 2200 movs r2, #0 + 800fd32: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fd34: f7fd fdd0 bl 800d8d8 + 800fd38: 6138 str r0, [r7, #16] + + /* Wait till LSI is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 800fd3a: e00f b.n 800fd5c + { + if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) + 800fd3c: f7fd fdcc bl 800d8d8 + 800fd40: 4602 mov r2, r0 + 800fd42: 693b ldr r3, [r7, #16] + 800fd44: 1ad3 subs r3, r2, r3 + 800fd46: 2b02 cmp r3, #2 + 800fd48: d908 bls.n 800fd5c + { + return HAL_TIMEOUT; + 800fd4a: 2303 movs r3, #3 + 800fd4c: e1d8 b.n 8010100 + 800fd4e: bf00 nop + 800fd50: 40021000 .word 0x40021000 + 800fd54: 42420000 .word 0x42420000 + 800fd58: 42420480 .word 0x42420480 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) + 800fd5c: 4b9b ldr r3, [pc, #620] @ (800ffcc ) + 800fd5e: 6a5b ldr r3, [r3, #36] @ 0x24 + 800fd60: f003 0302 and.w r3, r3, #2 + 800fd64: 2b00 cmp r3, #0 + 800fd66: d1e9 bne.n 800fd3c + } + } + } + } + /*------------------------------ LSE Configuration -------------------------*/ + if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) + 800fd68: 687b ldr r3, [r7, #4] + 800fd6a: 681b ldr r3, [r3, #0] + 800fd6c: f003 0304 and.w r3, r3, #4 + 800fd70: 2b00 cmp r3, #0 + 800fd72: f000 80a6 beq.w 800fec2 + { + FlagStatus pwrclkchanged = RESET; + 800fd76: 2300 movs r3, #0 + 800fd78: 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()) + 800fd7a: 4b94 ldr r3, [pc, #592] @ (800ffcc ) + 800fd7c: 69db ldr r3, [r3, #28] + 800fd7e: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800fd82: 2b00 cmp r3, #0 + 800fd84: d10d bne.n 800fda2 + { + __HAL_RCC_PWR_CLK_ENABLE(); + 800fd86: 4b91 ldr r3, [pc, #580] @ (800ffcc ) + 800fd88: 69db ldr r3, [r3, #28] + 800fd8a: 4a90 ldr r2, [pc, #576] @ (800ffcc ) + 800fd8c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 800fd90: 61d3 str r3, [r2, #28] + 800fd92: 4b8e ldr r3, [pc, #568] @ (800ffcc ) + 800fd94: 69db ldr r3, [r3, #28] + 800fd96: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800fd9a: 60bb str r3, [r7, #8] + 800fd9c: 68bb ldr r3, [r7, #8] + pwrclkchanged = SET; + 800fd9e: 2301 movs r3, #1 + 800fda0: 75fb strb r3, [r7, #23] + } + + if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 800fda2: 4b8b ldr r3, [pc, #556] @ (800ffd0 ) + 800fda4: 681b ldr r3, [r3, #0] + 800fda6: f403 7380 and.w r3, r3, #256 @ 0x100 + 800fdaa: 2b00 cmp r3, #0 + 800fdac: d118 bne.n 800fde0 + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + 800fdae: 4b88 ldr r3, [pc, #544] @ (800ffd0 ) + 800fdb0: 681b ldr r3, [r3, #0] + 800fdb2: 4a87 ldr r2, [pc, #540] @ (800ffd0 ) + 800fdb4: f443 7380 orr.w r3, r3, #256 @ 0x100 + 800fdb8: 6013 str r3, [r2, #0] + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + 800fdba: f7fd fd8d bl 800d8d8 + 800fdbe: 6138 str r0, [r7, #16] + + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 800fdc0: e008 b.n 800fdd4 + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 800fdc2: f7fd fd89 bl 800d8d8 + 800fdc6: 4602 mov r2, r0 + 800fdc8: 693b ldr r3, [r7, #16] + 800fdca: 1ad3 subs r3, r2, r3 + 800fdcc: 2b64 cmp r3, #100 @ 0x64 + 800fdce: d901 bls.n 800fdd4 + { + return HAL_TIMEOUT; + 800fdd0: 2303 movs r3, #3 + 800fdd2: e195 b.n 8010100 + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 800fdd4: 4b7e ldr r3, [pc, #504] @ (800ffd0 ) + 800fdd6: 681b ldr r3, [r3, #0] + 800fdd8: f403 7380 and.w r3, r3, #256 @ 0x100 + 800fddc: 2b00 cmp r3, #0 + 800fdde: d0f0 beq.n 800fdc2 + } + } + } + + /* Set the new LSE configuration -----------------------------------------*/ + __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); + 800fde0: 687b ldr r3, [r7, #4] + 800fde2: 691b ldr r3, [r3, #16] + 800fde4: 2b01 cmp r3, #1 + 800fde6: d106 bne.n 800fdf6 + 800fde8: 4b78 ldr r3, [pc, #480] @ (800ffcc ) + 800fdea: 6a1b ldr r3, [r3, #32] + 800fdec: 4a77 ldr r2, [pc, #476] @ (800ffcc ) + 800fdee: f043 0301 orr.w r3, r3, #1 + 800fdf2: 6213 str r3, [r2, #32] + 800fdf4: e02d b.n 800fe52 + 800fdf6: 687b ldr r3, [r7, #4] + 800fdf8: 691b ldr r3, [r3, #16] + 800fdfa: 2b00 cmp r3, #0 + 800fdfc: d10c bne.n 800fe18 + 800fdfe: 4b73 ldr r3, [pc, #460] @ (800ffcc ) + 800fe00: 6a1b ldr r3, [r3, #32] + 800fe02: 4a72 ldr r2, [pc, #456] @ (800ffcc ) + 800fe04: f023 0301 bic.w r3, r3, #1 + 800fe08: 6213 str r3, [r2, #32] + 800fe0a: 4b70 ldr r3, [pc, #448] @ (800ffcc ) + 800fe0c: 6a1b ldr r3, [r3, #32] + 800fe0e: 4a6f ldr r2, [pc, #444] @ (800ffcc ) + 800fe10: f023 0304 bic.w r3, r3, #4 + 800fe14: 6213 str r3, [r2, #32] + 800fe16: e01c b.n 800fe52 + 800fe18: 687b ldr r3, [r7, #4] + 800fe1a: 691b ldr r3, [r3, #16] + 800fe1c: 2b05 cmp r3, #5 + 800fe1e: d10c bne.n 800fe3a + 800fe20: 4b6a ldr r3, [pc, #424] @ (800ffcc ) + 800fe22: 6a1b ldr r3, [r3, #32] + 800fe24: 4a69 ldr r2, [pc, #420] @ (800ffcc ) + 800fe26: f043 0304 orr.w r3, r3, #4 + 800fe2a: 6213 str r3, [r2, #32] + 800fe2c: 4b67 ldr r3, [pc, #412] @ (800ffcc ) + 800fe2e: 6a1b ldr r3, [r3, #32] + 800fe30: 4a66 ldr r2, [pc, #408] @ (800ffcc ) + 800fe32: f043 0301 orr.w r3, r3, #1 + 800fe36: 6213 str r3, [r2, #32] + 800fe38: e00b b.n 800fe52 + 800fe3a: 4b64 ldr r3, [pc, #400] @ (800ffcc ) + 800fe3c: 6a1b ldr r3, [r3, #32] + 800fe3e: 4a63 ldr r2, [pc, #396] @ (800ffcc ) + 800fe40: f023 0301 bic.w r3, r3, #1 + 800fe44: 6213 str r3, [r2, #32] + 800fe46: 4b61 ldr r3, [pc, #388] @ (800ffcc ) + 800fe48: 6a1b ldr r3, [r3, #32] + 800fe4a: 4a60 ldr r2, [pc, #384] @ (800ffcc ) + 800fe4c: f023 0304 bic.w r3, r3, #4 + 800fe50: 6213 str r3, [r2, #32] + /* Check the LSE State */ + if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF) + 800fe52: 687b ldr r3, [r7, #4] + 800fe54: 691b ldr r3, [r3, #16] + 800fe56: 2b00 cmp r3, #0 + 800fe58: d015 beq.n 800fe86 + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fe5a: f7fd fd3d bl 800d8d8 + 800fe5e: 6138 str r0, [r7, #16] + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 800fe60: e00a b.n 800fe78 + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 800fe62: f7fd fd39 bl 800d8d8 + 800fe66: 4602 mov r2, r0 + 800fe68: 693b ldr r3, [r7, #16] + 800fe6a: 1ad3 subs r3, r2, r3 + 800fe6c: f241 3288 movw r2, #5000 @ 0x1388 + 800fe70: 4293 cmp r3, r2 + 800fe72: d901 bls.n 800fe78 + { + return HAL_TIMEOUT; + 800fe74: 2303 movs r3, #3 + 800fe76: e143 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 800fe78: 4b54 ldr r3, [pc, #336] @ (800ffcc ) + 800fe7a: 6a1b ldr r3, [r3, #32] + 800fe7c: f003 0302 and.w r3, r3, #2 + 800fe80: 2b00 cmp r3, #0 + 800fe82: d0ee beq.n 800fe62 + 800fe84: e014 b.n 800feb0 + } + } + else + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800fe86: f7fd fd27 bl 800d8d8 + 800fe8a: 6138 str r0, [r7, #16] + + /* Wait till LSE is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 800fe8c: e00a b.n 800fea4 + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 800fe8e: f7fd fd23 bl 800d8d8 + 800fe92: 4602 mov r2, r0 + 800fe94: 693b ldr r3, [r7, #16] + 800fe96: 1ad3 subs r3, r2, r3 + 800fe98: f241 3288 movw r2, #5000 @ 0x1388 + 800fe9c: 4293 cmp r3, r2 + 800fe9e: d901 bls.n 800fea4 + { + return HAL_TIMEOUT; + 800fea0: 2303 movs r3, #3 + 800fea2: e12d b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) + 800fea4: 4b49 ldr r3, [pc, #292] @ (800ffcc ) + 800fea6: 6a1b ldr r3, [r3, #32] + 800fea8: f003 0302 and.w r3, r3, #2 + 800feac: 2b00 cmp r3, #0 + 800feae: d1ee bne.n 800fe8e + } + } + } + + /* Require to disable power clock if necessary */ + if (pwrclkchanged == SET) + 800feb0: 7dfb ldrb r3, [r7, #23] + 800feb2: 2b01 cmp r3, #1 + 800feb4: d105 bne.n 800fec2 + { + __HAL_RCC_PWR_CLK_DISABLE(); + 800feb6: 4b45 ldr r3, [pc, #276] @ (800ffcc ) + 800feb8: 69db ldr r3, [r3, #28] + 800feba: 4a44 ldr r2, [pc, #272] @ (800ffcc ) + 800febc: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 + 800fec0: 61d3 str r3, [r2, #28] + +#if defined(RCC_CR_PLL2ON) + /*-------------------------------- PLL2 Configuration -----------------------*/ + /* Check the parameters */ + assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State)); + if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) + 800fec2: 687b ldr r3, [r7, #4] + 800fec4: 6adb ldr r3, [r3, #44] @ 0x2c + 800fec6: 2b00 cmp r3, #0 + 800fec8: f000 808c beq.w 800ffe4 + { + /* This bit can not be cleared if the PLL2 clock is used indirectly as system + clock (i.e. it is used as PLL clock entry that is used as system clock). */ + if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ + 800fecc: 4b3f ldr r3, [pc, #252] @ (800ffcc ) + 800fece: 685b ldr r3, [r3, #4] + 800fed0: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 800fed4: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800fed8: d10e bne.n 800fef8 + (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ + 800feda: 4b3c ldr r3, [pc, #240] @ (800ffcc ) + 800fedc: 685b ldr r3, [r3, #4] + 800fede: f003 030c and.w r3, r3, #12 + if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ + 800fee2: 2b08 cmp r3, #8 + 800fee4: d108 bne.n 800fef8 + ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) + 800fee6: 4b39 ldr r3, [pc, #228] @ (800ffcc ) + 800fee8: 6adb ldr r3, [r3, #44] @ 0x2c + 800feea: f403 3380 and.w r3, r3, #65536 @ 0x10000 + (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ + 800feee: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 800fef2: d101 bne.n 800fef8 + { + return HAL_ERROR; + 800fef4: 2301 movs r3, #1 + 800fef6: e103 b.n 8010100 + } + else + { + if ((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) + 800fef8: 687b ldr r3, [r7, #4] + 800fefa: 6adb ldr r3, [r3, #44] @ 0x2c + 800fefc: 2b02 cmp r3, #2 + 800fefe: d14e bne.n 800ff9e + assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL)); + assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLLI2S is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && \ + 800ff00: 4b32 ldr r3, [pc, #200] @ (800ffcc ) + 800ff02: 681b ldr r3, [r3, #0] + 800ff04: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 800ff08: 2b00 cmp r3, #0 + 800ff0a: d009 beq.n 800ff20 + (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) + 800ff0c: 4b2f ldr r3, [pc, #188] @ (800ffcc ) + 800ff0e: 6adb ldr r3, [r3, #44] @ 0x2c + 800ff10: f003 02f0 and.w r2, r3, #240 @ 0xf0 + 800ff14: 687b ldr r3, [r7, #4] + 800ff16: 6b5b ldr r3, [r3, #52] @ 0x34 + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && \ + 800ff18: 429a cmp r2, r3 + 800ff1a: d001 beq.n 800ff20 + { + return HAL_ERROR; + 800ff1c: 2301 movs r3, #1 + 800ff1e: e0ef b.n 8010100 + } + + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + 800ff20: 4b2c ldr r3, [pc, #176] @ (800ffd4 ) + 800ff22: 2200 movs r2, #0 + 800ff24: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800ff26: f7fd fcd7 bl 800d8d8 + 800ff2a: 6138 str r0, [r7, #16] + + /* Wait till PLL2 is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + 800ff2c: e008 b.n 800ff40 + { + if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) + 800ff2e: f7fd fcd3 bl 800d8d8 + 800ff32: 4602 mov r2, r0 + 800ff34: 693b ldr r3, [r7, #16] + 800ff36: 1ad3 subs r3, r2, r3 + 800ff38: 2b64 cmp r3, #100 @ 0x64 + 800ff3a: d901 bls.n 800ff40 + { + return HAL_TIMEOUT; + 800ff3c: 2303 movs r3, #3 + 800ff3e: e0df b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + 800ff40: 4b22 ldr r3, [pc, #136] @ (800ffcc ) + 800ff42: 681b ldr r3, [r3, #0] + 800ff44: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800ff48: 2b00 cmp r3, #0 + 800ff4a: d1f0 bne.n 800ff2e + } + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value); + 800ff4c: 4b1f ldr r3, [pc, #124] @ (800ffcc ) + 800ff4e: 6adb ldr r3, [r3, #44] @ 0x2c + 800ff50: f023 02f0 bic.w r2, r3, #240 @ 0xf0 + 800ff54: 687b ldr r3, [r7, #4] + 800ff56: 6b5b ldr r3, [r3, #52] @ 0x34 + 800ff58: 491c ldr r1, [pc, #112] @ (800ffcc ) + 800ff5a: 4313 orrs r3, r2 + 800ff5c: 62cb str r3, [r1, #44] @ 0x2c + + /* Configure the main PLL2 multiplication factors. */ + __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL); + 800ff5e: 4b1b ldr r3, [pc, #108] @ (800ffcc ) + 800ff60: 6adb ldr r3, [r3, #44] @ 0x2c + 800ff62: f423 6270 bic.w r2, r3, #3840 @ 0xf00 + 800ff66: 687b ldr r3, [r7, #4] + 800ff68: 6b1b ldr r3, [r3, #48] @ 0x30 + 800ff6a: 4918 ldr r1, [pc, #96] @ (800ffcc ) + 800ff6c: 4313 orrs r3, r2 + 800ff6e: 62cb str r3, [r1, #44] @ 0x2c + + /* Enable the main PLL2. */ + __HAL_RCC_PLL2_ENABLE(); + 800ff70: 4b18 ldr r3, [pc, #96] @ (800ffd4 ) + 800ff72: 2201 movs r2, #1 + 800ff74: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800ff76: f7fd fcaf bl 800d8d8 + 800ff7a: 6138 str r0, [r7, #16] + + /* Wait till PLL2 is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) + 800ff7c: e008 b.n 800ff90 + { + if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) + 800ff7e: f7fd fcab bl 800d8d8 + 800ff82: 4602 mov r2, r0 + 800ff84: 693b ldr r3, [r7, #16] + 800ff86: 1ad3 subs r3, r2, r3 + 800ff88: 2b64 cmp r3, #100 @ 0x64 + 800ff8a: d901 bls.n 800ff90 + { + return HAL_TIMEOUT; + 800ff8c: 2303 movs r3, #3 + 800ff8e: e0b7 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) + 800ff90: 4b0e ldr r3, [pc, #56] @ (800ffcc ) + 800ff92: 681b ldr r3, [r3, #0] + 800ff94: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800ff98: 2b00 cmp r3, #0 + 800ff9a: d0f0 beq.n 800ff7e + 800ff9c: e022 b.n 800ffe4 + } + } + else + { + /* Set PREDIV1 source to HSE */ + CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC); + 800ff9e: 4b0b ldr r3, [pc, #44] @ (800ffcc ) + 800ffa0: 6adb ldr r3, [r3, #44] @ 0x2c + 800ffa2: 4a0a ldr r2, [pc, #40] @ (800ffcc ) + 800ffa4: f423 3380 bic.w r3, r3, #65536 @ 0x10000 + 800ffa8: 62d3 str r3, [r2, #44] @ 0x2c + + /* Disable the main PLL2. */ + __HAL_RCC_PLL2_DISABLE(); + 800ffaa: 4b0a ldr r3, [pc, #40] @ (800ffd4 ) + 800ffac: 2200 movs r2, #0 + 800ffae: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 800ffb0: f7fd fc92 bl 800d8d8 + 800ffb4: 6138 str r0, [r7, #16] + + /* Wait till PLL2 is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + 800ffb6: e00f b.n 800ffd8 + { + if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) + 800ffb8: f7fd fc8e bl 800d8d8 + 800ffbc: 4602 mov r2, r0 + 800ffbe: 693b ldr r3, [r7, #16] + 800ffc0: 1ad3 subs r3, r2, r3 + 800ffc2: 2b64 cmp r3, #100 @ 0x64 + 800ffc4: d908 bls.n 800ffd8 + { + return HAL_TIMEOUT; + 800ffc6: 2303 movs r3, #3 + 800ffc8: e09a b.n 8010100 + 800ffca: bf00 nop + 800ffcc: 40021000 .word 0x40021000 + 800ffd0: 40007000 .word 0x40007000 + 800ffd4: 42420068 .word 0x42420068 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) + 800ffd8: 4b4b ldr r3, [pc, #300] @ (8010108 ) + 800ffda: 681b ldr r3, [r3, #0] + 800ffdc: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 + 800ffe0: 2b00 cmp r3, #0 + 800ffe2: d1e9 bne.n 800ffb8 + +#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) + 800ffe4: 687b ldr r3, [r7, #4] + 800ffe6: 6a1b ldr r3, [r3, #32] + 800ffe8: 2b00 cmp r3, #0 + 800ffea: f000 8088 beq.w 80100fe + { + /* Check if the PLL is used as system clock or not */ + if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) + 800ffee: 4b46 ldr r3, [pc, #280] @ (8010108 ) + 800fff0: 685b ldr r3, [r3, #4] + 800fff2: f003 030c and.w r3, r3, #12 + 800fff6: 2b08 cmp r3, #8 + 800fff8: d068 beq.n 80100cc + { + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) + 800fffa: 687b ldr r3, [r7, #4] + 800fffc: 6a1b ldr r3, [r3, #32] + 800fffe: 2b02 cmp r3, #2 + 8010000: d14d bne.n 801009e + /* 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(); + 8010002: 4b42 ldr r3, [pc, #264] @ (801010c ) + 8010004: 2200 movs r2, #0 + 8010006: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8010008: f7fd fc66 bl 800d8d8 + 801000c: 6138 str r0, [r7, #16] + + /* Wait till PLL is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 801000e: e008 b.n 8010022 + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 8010010: f7fd fc62 bl 800d8d8 + 8010014: 4602 mov r2, r0 + 8010016: 693b ldr r3, [r7, #16] + 8010018: 1ad3 subs r3, r2, r3 + 801001a: 2b02 cmp r3, #2 + 801001c: d901 bls.n 8010022 + { + return HAL_TIMEOUT; + 801001e: 2303 movs r3, #3 + 8010020: e06e b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 8010022: 4b39 ldr r3, [pc, #228] @ (8010108 ) + 8010024: 681b ldr r3, [r3, #0] + 8010026: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 801002a: 2b00 cmp r3, #0 + 801002c: d1f0 bne.n 8010010 + } + } + + /* 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) + 801002e: 687b ldr r3, [r7, #4] + 8010030: 6a5b ldr r3, [r3, #36] @ 0x24 + 8010032: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 + 8010036: d10f bne.n 8010058 + assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue)); +#if defined(RCC_CFGR2_PREDIV1SRC) + assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source)); + + /* Set PREDIV1 source */ + SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source); + 8010038: 4b33 ldr r3, [pc, #204] @ (8010108 ) + 801003a: 6ada ldr r2, [r3, #44] @ 0x2c + 801003c: 687b ldr r3, [r7, #4] + 801003e: 685b ldr r3, [r3, #4] + 8010040: 4931 ldr r1, [pc, #196] @ (8010108 ) + 8010042: 4313 orrs r3, r2 + 8010044: 62cb str r3, [r1, #44] @ 0x2c +#endif /* RCC_CFGR2_PREDIV1SRC */ + + /* Set PREDIV1 Value */ + __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); + 8010046: 4b30 ldr r3, [pc, #192] @ (8010108 ) + 8010048: 6adb ldr r3, [r3, #44] @ 0x2c + 801004a: f023 020f bic.w r2, r3, #15 + 801004e: 687b ldr r3, [r7, #4] + 8010050: 68db ldr r3, [r3, #12] + 8010052: 492d ldr r1, [pc, #180] @ (8010108 ) + 8010054: 4313 orrs r3, r2 + 8010056: 62cb str r3, [r1, #44] @ 0x2c + } + + /* Configure the main PLL clock source and multiplication factors. */ + __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, + 8010058: 4b2b ldr r3, [pc, #172] @ (8010108 ) + 801005a: 685b ldr r3, [r3, #4] + 801005c: f423 1274 bic.w r2, r3, #3997696 @ 0x3d0000 + 8010060: 687b ldr r3, [r7, #4] + 8010062: 6a59 ldr r1, [r3, #36] @ 0x24 + 8010064: 687b ldr r3, [r7, #4] + 8010066: 6a9b ldr r3, [r3, #40] @ 0x28 + 8010068: 430b orrs r3, r1 + 801006a: 4927 ldr r1, [pc, #156] @ (8010108 ) + 801006c: 4313 orrs r3, r2 + 801006e: 604b str r3, [r1, #4] + RCC_OscInitStruct->PLL.PLLMUL); + /* Enable the main PLL. */ + __HAL_RCC_PLL_ENABLE(); + 8010070: 4b26 ldr r3, [pc, #152] @ (801010c ) + 8010072: 2201 movs r2, #1 + 8010074: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8010076: f7fd fc2f bl 800d8d8 + 801007a: 6138 str r0, [r7, #16] + + /* Wait till PLL is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 801007c: e008 b.n 8010090 + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 801007e: f7fd fc2b bl 800d8d8 + 8010082: 4602 mov r2, r0 + 8010084: 693b ldr r3, [r7, #16] + 8010086: 1ad3 subs r3, r2, r3 + 8010088: 2b02 cmp r3, #2 + 801008a: d901 bls.n 8010090 + { + return HAL_TIMEOUT; + 801008c: 2303 movs r3, #3 + 801008e: e037 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 8010090: 4b1d ldr r3, [pc, #116] @ (8010108 ) + 8010092: 681b ldr r3, [r3, #0] + 8010094: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 8010098: 2b00 cmp r3, #0 + 801009a: d0f0 beq.n 801007e + 801009c: e02f b.n 80100fe + } + } + else + { + /* Disable the main PLL. */ + __HAL_RCC_PLL_DISABLE(); + 801009e: 4b1b ldr r3, [pc, #108] @ (801010c ) + 80100a0: 2200 movs r2, #0 + 80100a2: 601a str r2, [r3, #0] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 80100a4: f7fd fc18 bl 800d8d8 + 80100a8: 6138 str r0, [r7, #16] + + /* Wait till PLL is disabled */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 80100aa: e008 b.n 80100be + { + if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) + 80100ac: f7fd fc14 bl 800d8d8 + 80100b0: 4602 mov r2, r0 + 80100b2: 693b ldr r3, [r7, #16] + 80100b4: 1ad3 subs r3, r2, r3 + 80100b6: 2b02 cmp r3, #2 + 80100b8: d901 bls.n 80100be + { + return HAL_TIMEOUT; + 80100ba: 2303 movs r3, #3 + 80100bc: e020 b.n 8010100 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) + 80100be: 4b12 ldr r3, [pc, #72] @ (8010108 ) + 80100c0: 681b ldr r3, [r3, #0] + 80100c2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 80100c6: 2b00 cmp r3, #0 + 80100c8: d1f0 bne.n 80100ac + 80100ca: e018 b.n 80100fe + } + } + else + { + /* Check if there is a request to disable the PLL used as System clock source */ + if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) + 80100cc: 687b ldr r3, [r7, #4] + 80100ce: 6a1b ldr r3, [r3, #32] + 80100d0: 2b01 cmp r3, #1 + 80100d2: d101 bne.n 80100d8 + { + return HAL_ERROR; + 80100d4: 2301 movs r3, #1 + 80100d6: e013 b.n 8010100 + } + else + { + /* Do not return HAL_ERROR if request repeats the current configuration */ + pll_config = RCC->CFGR; + 80100d8: 4b0b ldr r3, [pc, #44] @ (8010108 ) + 80100da: 685b ldr r3, [r3, #4] + 80100dc: 60fb str r3, [r7, #12] + if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 80100de: 68fb ldr r3, [r7, #12] + 80100e0: f403 3280 and.w r2, r3, #65536 @ 0x10000 + 80100e4: 687b ldr r3, [r7, #4] + 80100e6: 6a5b ldr r3, [r3, #36] @ 0x24 + 80100e8: 429a cmp r2, r3 + 80100ea: d106 bne.n 80100fa + (READ_BIT(pll_config, RCC_CFGR_PLLMULL) != RCC_OscInitStruct->PLL.PLLMUL)) + 80100ec: 68fb ldr r3, [r7, #12] + 80100ee: f403 1270 and.w r2, r3, #3932160 @ 0x3c0000 + 80100f2: 687b ldr r3, [r7, #4] + 80100f4: 6a9b ldr r3, [r3, #40] @ 0x28 + if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || + 80100f6: 429a cmp r2, r3 + 80100f8: d001 beq.n 80100fe + { + return HAL_ERROR; + 80100fa: 2301 movs r3, #1 + 80100fc: e000 b.n 8010100 + } + } + } + } + + return HAL_OK; + 80100fe: 2300 movs r3, #0 +} + 8010100: 4618 mov r0, r3 + 8010102: 3718 adds r7, #24 + 8010104: 46bd mov sp, r7 + 8010106: bd80 pop {r7, pc} + 8010108: 40021000 .word 0x40021000 + 801010c: 42420060 .word 0x42420060 + +08010110 : + * 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) +{ + 8010110: b580 push {r7, lr} + 8010112: b084 sub sp, #16 + 8010114: af00 add r7, sp, #0 + 8010116: 6078 str r0, [r7, #4] + 8010118: 6039 str r1, [r7, #0] + uint32_t tickstart; + + /* Check Null pointer */ + if (RCC_ClkInitStruct == NULL) + 801011a: 687b ldr r3, [r7, #4] + 801011c: 2b00 cmp r3, #0 + 801011e: d101 bne.n 8010124 + { + return HAL_ERROR; + 8010120: 2301 movs r3, #1 + 8010122: e0d0 b.n 80102c6 + 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()) + 8010124: 4b6a ldr r3, [pc, #424] @ (80102d0 ) + 8010126: 681b ldr r3, [r3, #0] + 8010128: f003 0307 and.w r3, r3, #7 + 801012c: 683a ldr r2, [r7, #0] + 801012e: 429a cmp r2, r3 + 8010130: d910 bls.n 8010154 + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 8010132: 4b67 ldr r3, [pc, #412] @ (80102d0 ) + 8010134: 681b ldr r3, [r3, #0] + 8010136: f023 0207 bic.w r2, r3, #7 + 801013a: 4965 ldr r1, [pc, #404] @ (80102d0 ) + 801013c: 683b ldr r3, [r7, #0] + 801013e: 4313 orrs r3, r2 + 8010140: 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) + 8010142: 4b63 ldr r3, [pc, #396] @ (80102d0 ) + 8010144: 681b ldr r3, [r3, #0] + 8010146: f003 0307 and.w r3, r3, #7 + 801014a: 683a ldr r2, [r7, #0] + 801014c: 429a cmp r2, r3 + 801014e: d001 beq.n 8010154 + { + return HAL_ERROR; + 8010150: 2301 movs r3, #1 + 8010152: e0b8 b.n 80102c6 + } +} + +#endif /* FLASH_ACR_LATENCY */ +/*-------------------------- HCLK Configuration --------------------------*/ +if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) + 8010154: 687b ldr r3, [r7, #4] + 8010156: 681b ldr r3, [r3, #0] + 8010158: f003 0302 and.w r3, r3, #2 + 801015c: 2b00 cmp r3, #0 + 801015e: d020 beq.n 80101a2 + { + /* 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) + 8010160: 687b ldr r3, [r7, #4] + 8010162: 681b ldr r3, [r3, #0] + 8010164: f003 0304 and.w r3, r3, #4 + 8010168: 2b00 cmp r3, #0 + 801016a: d005 beq.n 8010178 + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); + 801016c: 4b59 ldr r3, [pc, #356] @ (80102d4 ) + 801016e: 685b ldr r3, [r3, #4] + 8010170: 4a58 ldr r2, [pc, #352] @ (80102d4 ) + 8010172: f443 63e0 orr.w r3, r3, #1792 @ 0x700 + 8010176: 6053 str r3, [r2, #4] + } + + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 8010178: 687b ldr r3, [r7, #4] + 801017a: 681b ldr r3, [r3, #0] + 801017c: f003 0308 and.w r3, r3, #8 + 8010180: 2b00 cmp r3, #0 + 8010182: d005 beq.n 8010190 + { + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); + 8010184: 4b53 ldr r3, [pc, #332] @ (80102d4 ) + 8010186: 685b ldr r3, [r3, #4] + 8010188: 4a52 ldr r2, [pc, #328] @ (80102d4 ) + 801018a: f443 5360 orr.w r3, r3, #14336 @ 0x3800 + 801018e: 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); + 8010190: 4b50 ldr r3, [pc, #320] @ (80102d4 ) + 8010192: 685b ldr r3, [r3, #4] + 8010194: f023 02f0 bic.w r2, r3, #240 @ 0xf0 + 8010198: 687b ldr r3, [r7, #4] + 801019a: 689b ldr r3, [r3, #8] + 801019c: 494d ldr r1, [pc, #308] @ (80102d4 ) + 801019e: 4313 orrs r3, r2 + 80101a0: 604b str r3, [r1, #4] + } + + /*------------------------- SYSCLK Configuration ---------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) + 80101a2: 687b ldr r3, [r7, #4] + 80101a4: 681b ldr r3, [r3, #0] + 80101a6: f003 0301 and.w r3, r3, #1 + 80101aa: 2b00 cmp r3, #0 + 80101ac: d040 beq.n 8010230 + { + assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); + + /* HSE is selected as System Clock Source */ + if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) + 80101ae: 687b ldr r3, [r7, #4] + 80101b0: 685b ldr r3, [r3, #4] + 80101b2: 2b01 cmp r3, #1 + 80101b4: d107 bne.n 80101c6 + { + /* Check the HSE ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) + 80101b6: 4b47 ldr r3, [pc, #284] @ (80102d4 ) + 80101b8: 681b ldr r3, [r3, #0] + 80101ba: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 80101be: 2b00 cmp r3, #0 + 80101c0: d115 bne.n 80101ee + { + return HAL_ERROR; + 80101c2: 2301 movs r3, #1 + 80101c4: e07f b.n 80102c6 + } + } + /* PLL is selected as System Clock Source */ + else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) + 80101c6: 687b ldr r3, [r7, #4] + 80101c8: 685b ldr r3, [r3, #4] + 80101ca: 2b02 cmp r3, #2 + 80101cc: d107 bne.n 80101de + { + /* Check the PLL ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) + 80101ce: 4b41 ldr r3, [pc, #260] @ (80102d4 ) + 80101d0: 681b ldr r3, [r3, #0] + 80101d2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 + 80101d6: 2b00 cmp r3, #0 + 80101d8: d109 bne.n 80101ee + { + return HAL_ERROR; + 80101da: 2301 movs r3, #1 + 80101dc: e073 b.n 80102c6 + } + /* HSI is selected as System Clock Source */ + else + { + /* Check the HSI ready flag */ + if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) + 80101de: 4b3d ldr r3, [pc, #244] @ (80102d4 ) + 80101e0: 681b ldr r3, [r3, #0] + 80101e2: f003 0302 and.w r3, r3, #2 + 80101e6: 2b00 cmp r3, #0 + 80101e8: d101 bne.n 80101ee + { + return HAL_ERROR; + 80101ea: 2301 movs r3, #1 + 80101ec: e06b b.n 80102c6 + } + } + __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); + 80101ee: 4b39 ldr r3, [pc, #228] @ (80102d4 ) + 80101f0: 685b ldr r3, [r3, #4] + 80101f2: f023 0203 bic.w r2, r3, #3 + 80101f6: 687b ldr r3, [r7, #4] + 80101f8: 685b ldr r3, [r3, #4] + 80101fa: 4936 ldr r1, [pc, #216] @ (80102d4 ) + 80101fc: 4313 orrs r3, r2 + 80101fe: 604b str r3, [r1, #4] + + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 8010200: f7fd fb6a bl 800d8d8 + 8010204: 60f8 str r0, [r7, #12] + + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 8010206: e00a b.n 801021e + { + if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) + 8010208: f7fd fb66 bl 800d8d8 + 801020c: 4602 mov r2, r0 + 801020e: 68fb ldr r3, [r7, #12] + 8010210: 1ad3 subs r3, r2, r3 + 8010212: f241 3288 movw r2, #5000 @ 0x1388 + 8010216: 4293 cmp r3, r2 + 8010218: d901 bls.n 801021e + { + return HAL_TIMEOUT; + 801021a: 2303 movs r3, #3 + 801021c: e053 b.n 80102c6 + while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) + 801021e: 4b2d ldr r3, [pc, #180] @ (80102d4 ) + 8010220: 685b ldr r3, [r3, #4] + 8010222: f003 020c and.w r2, r3, #12 + 8010226: 687b ldr r3, [r7, #4] + 8010228: 685b ldr r3, [r3, #4] + 801022a: 009b lsls r3, r3, #2 + 801022c: 429a cmp r2, r3 + 801022e: d1eb bne.n 8010208 + } + } + +#if defined(FLASH_ACR_LATENCY) + /* Decreasing the number of wait states because of lower CPU frequency */ + if (FLatency < __HAL_FLASH_GET_LATENCY()) + 8010230: 4b27 ldr r3, [pc, #156] @ (80102d0 ) + 8010232: 681b ldr r3, [r3, #0] + 8010234: f003 0307 and.w r3, r3, #7 + 8010238: 683a ldr r2, [r7, #0] + 801023a: 429a cmp r2, r3 + 801023c: d210 bcs.n 8010260 + { + /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ + __HAL_FLASH_SET_LATENCY(FLatency); + 801023e: 4b24 ldr r3, [pc, #144] @ (80102d0 ) + 8010240: 681b ldr r3, [r3, #0] + 8010242: f023 0207 bic.w r2, r3, #7 + 8010246: 4922 ldr r1, [pc, #136] @ (80102d0 ) + 8010248: 683b ldr r3, [r7, #0] + 801024a: 4313 orrs r3, r2 + 801024c: 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) + 801024e: 4b20 ldr r3, [pc, #128] @ (80102d0 ) + 8010250: 681b ldr r3, [r3, #0] + 8010252: f003 0307 and.w r3, r3, #7 + 8010256: 683a ldr r2, [r7, #0] + 8010258: 429a cmp r2, r3 + 801025a: d001 beq.n 8010260 + { + return HAL_ERROR; + 801025c: 2301 movs r3, #1 + 801025e: e032 b.n 80102c6 + } +} +#endif /* FLASH_ACR_LATENCY */ + +/*-------------------------- PCLK1 Configuration ---------------------------*/ +if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) + 8010260: 687b ldr r3, [r7, #4] + 8010262: 681b ldr r3, [r3, #0] + 8010264: f003 0304 and.w r3, r3, #4 + 8010268: 2b00 cmp r3, #0 + 801026a: d008 beq.n 801027e + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); + 801026c: 4b19 ldr r3, [pc, #100] @ (80102d4 ) + 801026e: 685b ldr r3, [r3, #4] + 8010270: f423 62e0 bic.w r2, r3, #1792 @ 0x700 + 8010274: 687b ldr r3, [r7, #4] + 8010276: 68db ldr r3, [r3, #12] + 8010278: 4916 ldr r1, [pc, #88] @ (80102d4 ) + 801027a: 4313 orrs r3, r2 + 801027c: 604b str r3, [r1, #4] + } + + /*-------------------------- PCLK2 Configuration ---------------------------*/ + if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) + 801027e: 687b ldr r3, [r7, #4] + 8010280: 681b ldr r3, [r3, #0] + 8010282: f003 0308 and.w r3, r3, #8 + 8010286: 2b00 cmp r3, #0 + 8010288: d009 beq.n 801029e + { + assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); + MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); + 801028a: 4b12 ldr r3, [pc, #72] @ (80102d4 ) + 801028c: 685b ldr r3, [r3, #4] + 801028e: f423 5260 bic.w r2, r3, #14336 @ 0x3800 + 8010292: 687b ldr r3, [r7, #4] + 8010294: 691b ldr r3, [r3, #16] + 8010296: 00db lsls r3, r3, #3 + 8010298: 490e ldr r1, [pc, #56] @ (80102d4 ) + 801029a: 4313 orrs r3, r2 + 801029c: 604b str r3, [r1, #4] + } + + /* Update the SystemCoreClock global variable */ + SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; + 801029e: f000 f821 bl 80102e4 + 80102a2: 4602 mov r2, r0 + 80102a4: 4b0b ldr r3, [pc, #44] @ (80102d4 ) + 80102a6: 685b ldr r3, [r3, #4] + 80102a8: 091b lsrs r3, r3, #4 + 80102aa: f003 030f and.w r3, r3, #15 + 80102ae: 490a ldr r1, [pc, #40] @ (80102d8 ) + 80102b0: 5ccb ldrb r3, [r1, r3] + 80102b2: fa22 f303 lsr.w r3, r2, r3 + 80102b6: 4a09 ldr r2, [pc, #36] @ (80102dc ) + 80102b8: 6013 str r3, [r2, #0] + + /* Configure the source of time base considering new system clocks settings*/ + HAL_InitTick(uwTickPrio); + 80102ba: 4b09 ldr r3, [pc, #36] @ (80102e0 ) + 80102bc: 681b ldr r3, [r3, #0] + 80102be: 4618 mov r0, r3 + 80102c0: f7fd fac8 bl 800d854 + + return HAL_OK; + 80102c4: 2300 movs r3, #0 +} + 80102c6: 4618 mov r0, r3 + 80102c8: 3710 adds r7, #16 + 80102ca: 46bd mov sp, r7 + 80102cc: bd80 pop {r7, pc} + 80102ce: bf00 nop + 80102d0: 40022000 .word 0x40022000 + 80102d4: 40021000 .word 0x40021000 + 80102d8: 08015fc0 .word 0x08015fc0 + 80102dc: 2000006c .word 0x2000006c + 80102e0: 20000070 .word 0x20000070 + +080102e4 : + * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. + * + * @retval SYSCLK frequency + */ +uint32_t HAL_RCC_GetSysClockFreq(void) +{ + 80102e4: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} + 80102e8: b08e sub sp, #56 @ 0x38 + 80102ea: af00 add r7, sp, #0 +#else + static const uint8_t aPredivFactorTable[2U] = {1, 2}; +#endif /*RCC_CFGR2_PREDIV1*/ + +#endif + uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; + 80102ec: 2300 movs r3, #0 + 80102ee: 62fb str r3, [r7, #44] @ 0x2c + 80102f0: 2300 movs r3, #0 + 80102f2: 62bb str r3, [r7, #40] @ 0x28 + 80102f4: 2300 movs r3, #0 + 80102f6: 637b str r3, [r7, #52] @ 0x34 + 80102f8: 2300 movs r3, #0 + 80102fa: 627b str r3, [r7, #36] @ 0x24 + uint32_t sysclockfreq = 0U; + 80102fc: 2300 movs r3, #0 + 80102fe: 633b str r3, [r7, #48] @ 0x30 +#if defined(RCC_CFGR2_PREDIV1SRC) + uint32_t prediv2 = 0U, pll2mul = 0U; + 8010300: 2300 movs r3, #0 + 8010302: 623b str r3, [r7, #32] + 8010304: 2300 movs r3, #0 + 8010306: 61fb str r3, [r7, #28] +#endif /*RCC_CFGR2_PREDIV1SRC*/ + + tmpreg = RCC->CFGR; + 8010308: 4b4e ldr r3, [pc, #312] @ (8010444 ) + 801030a: 685b ldr r3, [r3, #4] + 801030c: 62fb str r3, [r7, #44] @ 0x2c + + /* Get SYSCLK source -------------------------------------------------------*/ + switch (tmpreg & RCC_CFGR_SWS) + 801030e: 6afb ldr r3, [r7, #44] @ 0x2c + 8010310: f003 030c and.w r3, r3, #12 + 8010314: 2b04 cmp r3, #4 + 8010316: d002 beq.n 801031e + 8010318: 2b08 cmp r3, #8 + 801031a: d003 beq.n 8010324 + 801031c: e089 b.n 8010432 + { + case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ + { + sysclockfreq = HSE_VALUE; + 801031e: 4b4a ldr r3, [pc, #296] @ (8010448 ) + 8010320: 633b str r3, [r7, #48] @ 0x30 + break; + 8010322: e089 b.n 8010438 + } + case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ + { + pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; + 8010324: 6afb ldr r3, [r7, #44] @ 0x2c + 8010326: 0c9b lsrs r3, r3, #18 + 8010328: f003 020f and.w r2, r3, #15 + 801032c: 4b47 ldr r3, [pc, #284] @ (801044c ) + 801032e: 5c9b ldrb r3, [r3, r2] + 8010330: 627b str r3, [r7, #36] @ 0x24 + if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) + 8010332: 6afb ldr r3, [r7, #44] @ 0x2c + 8010334: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 8010338: 2b00 cmp r3, #0 + 801033a: d072 beq.n 8010422 + { +#if defined(RCC_CFGR2_PREDIV1) + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; + 801033c: 4b41 ldr r3, [pc, #260] @ (8010444 ) + 801033e: 6adb ldr r3, [r3, #44] @ 0x2c + 8010340: f003 020f and.w r2, r3, #15 + 8010344: 4b42 ldr r3, [pc, #264] @ (8010450 ) + 8010346: 5c9b ldrb r3, [r3, r2] + 8010348: 62bb str r3, [r7, #40] @ 0x28 +#else + prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; +#endif /*RCC_CFGR2_PREDIV1*/ +#if defined(RCC_CFGR2_PREDIV1SRC) + + if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) + 801034a: 4b3e ldr r3, [pc, #248] @ (8010444 ) + 801034c: 6adb ldr r3, [r3, #44] @ 0x2c + 801034e: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 8010352: 2b00 cmp r3, #0 + 8010354: d053 beq.n 80103fe + { + /* PLL2 selected as Prediv1 source */ + /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; + 8010356: 4b3b ldr r3, [pc, #236] @ (8010444 ) + 8010358: 6adb ldr r3, [r3, #44] @ 0x2c + 801035a: 091b lsrs r3, r3, #4 + 801035c: f003 030f and.w r3, r3, #15 + 8010360: 3301 adds r3, #1 + 8010362: 623b str r3, [r7, #32] + pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2; + 8010364: 4b37 ldr r3, [pc, #220] @ (8010444 ) + 8010366: 6adb ldr r3, [r3, #44] @ 0x2c + 8010368: 0a1b lsrs r3, r3, #8 + 801036a: f003 030f and.w r3, r3, #15 + 801036e: 3302 adds r3, #2 + 8010370: 61fb str r3, [r7, #28] + pllclk = (uint32_t)(((uint64_t)HSE_VALUE * (uint64_t)pll2mul * (uint64_t)pllmul) / ((uint64_t)prediv2 * (uint64_t)prediv)); + 8010372: 69fb ldr r3, [r7, #28] + 8010374: 2200 movs r2, #0 + 8010376: 469a mov sl, r3 + 8010378: 4693 mov fp, r2 + 801037a: 6a7b ldr r3, [r7, #36] @ 0x24 + 801037c: 2200 movs r2, #0 + 801037e: 613b str r3, [r7, #16] + 8010380: 617a str r2, [r7, #20] + 8010382: 693b ldr r3, [r7, #16] + 8010384: fb03 f20b mul.w r2, r3, fp + 8010388: 697b ldr r3, [r7, #20] + 801038a: fb0a f303 mul.w r3, sl, r3 + 801038e: 4413 add r3, r2 + 8010390: 693a ldr r2, [r7, #16] + 8010392: fbaa 0102 umull r0, r1, sl, r2 + 8010396: 440b add r3, r1 + 8010398: 4619 mov r1, r3 + 801039a: 4b2b ldr r3, [pc, #172] @ (8010448 ) + 801039c: fb03 f201 mul.w r2, r3, r1 + 80103a0: 2300 movs r3, #0 + 80103a2: fb00 f303 mul.w r3, r0, r3 + 80103a6: 4413 add r3, r2 + 80103a8: 4a27 ldr r2, [pc, #156] @ (8010448 ) + 80103aa: fba0 4502 umull r4, r5, r0, r2 + 80103ae: 442b add r3, r5 + 80103b0: 461d mov r5, r3 + 80103b2: 6a3b ldr r3, [r7, #32] + 80103b4: 2200 movs r2, #0 + 80103b6: 60bb str r3, [r7, #8] + 80103b8: 60fa str r2, [r7, #12] + 80103ba: 6abb ldr r3, [r7, #40] @ 0x28 + 80103bc: 2200 movs r2, #0 + 80103be: 603b str r3, [r7, #0] + 80103c0: 607a str r2, [r7, #4] + 80103c2: e9d7 0102 ldrd r0, r1, [r7, #8] + 80103c6: 460b mov r3, r1 + 80103c8: e9d7 ab00 ldrd sl, fp, [r7] + 80103cc: 4652 mov r2, sl + 80103ce: fb02 f203 mul.w r2, r2, r3 + 80103d2: 465b mov r3, fp + 80103d4: 4684 mov ip, r0 + 80103d6: fb0c f303 mul.w r3, ip, r3 + 80103da: 4413 add r3, r2 + 80103dc: 4602 mov r2, r0 + 80103de: 4651 mov r1, sl + 80103e0: fba2 8901 umull r8, r9, r2, r1 + 80103e4: 444b add r3, r9 + 80103e6: 4699 mov r9, r3 + 80103e8: 4642 mov r2, r8 + 80103ea: 464b mov r3, r9 + 80103ec: 4620 mov r0, r4 + 80103ee: 4629 mov r1, r5 + 80103f0: f7f8 ff00 bl 80091f4 <__aeabi_uldivmod> + 80103f4: 4602 mov r2, r0 + 80103f6: 460b mov r3, r1 + 80103f8: 4613 mov r3, r2 + 80103fa: 637b str r3, [r7, #52] @ 0x34 + 80103fc: e007 b.n 801040e + } + else + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv); + 80103fe: 6a7b ldr r3, [r7, #36] @ 0x24 + 8010400: 4a11 ldr r2, [pc, #68] @ (8010448 ) + 8010402: fb03 f202 mul.w r2, r3, r2 + 8010406: 6abb ldr r3, [r7, #40] @ 0x28 + 8010408: fbb2 f3f3 udiv r3, r2, r3 + 801040c: 637b str r3, [r7, #52] @ 0x34 + } + + /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ + /* In this case need to divide pllclk by 2 */ + if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) + 801040e: 4b0f ldr r3, [pc, #60] @ (801044c ) + 8010410: 7b5b ldrb r3, [r3, #13] + 8010412: 461a mov r2, r3 + 8010414: 6a7b ldr r3, [r7, #36] @ 0x24 + 8010416: 4293 cmp r3, r2 + 8010418: d108 bne.n 801042c + { + pllclk = pllclk / 2; + 801041a: 6b7b ldr r3, [r7, #52] @ 0x34 + 801041c: 085b lsrs r3, r3, #1 + 801041e: 637b str r3, [r7, #52] @ 0x34 + 8010420: e004 b.n 801042c +#endif /*RCC_CFGR2_PREDIV1SRC*/ + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); + 8010422: 6a7b ldr r3, [r7, #36] @ 0x24 + 8010424: 4a0b ldr r2, [pc, #44] @ (8010454 ) + 8010426: fb02 f303 mul.w r3, r2, r3 + 801042a: 637b str r3, [r7, #52] @ 0x34 + } + sysclockfreq = pllclk; + 801042c: 6b7b ldr r3, [r7, #52] @ 0x34 + 801042e: 633b str r3, [r7, #48] @ 0x30 + break; + 8010430: e002 b.n 8010438 + } + case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ + default: /* HSI used as system clock */ + { + sysclockfreq = HSI_VALUE; + 8010432: 4b09 ldr r3, [pc, #36] @ (8010458 ) + 8010434: 633b str r3, [r7, #48] @ 0x30 + break; + 8010436: bf00 nop + } + } + return sysclockfreq; + 8010438: 6b3b ldr r3, [r7, #48] @ 0x30 +} + 801043a: 4618 mov r0, r3 + 801043c: 3738 adds r7, #56 @ 0x38 + 801043e: 46bd mov sp, r7 + 8010440: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} + 8010444: 40021000 .word 0x40021000 + 8010448: 017d7840 .word 0x017d7840 + 801044c: 08015fd8 .word 0x08015fd8 + 8010450: 08015fe8 .word 0x08015fe8 + 8010454: 003d0900 .word 0x003d0900 + 8010458: 007a1200 .word 0x007a1200 + +0801045c : + * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency + * and updated within this function + * @retval HCLK frequency + */ +uint32_t HAL_RCC_GetHCLKFreq(void) +{ + 801045c: b480 push {r7} + 801045e: af00 add r7, sp, #0 + return SystemCoreClock; + 8010460: 4b02 ldr r3, [pc, #8] @ (801046c ) + 8010462: 681b ldr r3, [r3, #0] +} + 8010464: 4618 mov r0, r3 + 8010466: 46bd mov sp, r7 + 8010468: bc80 pop {r7} + 801046a: 4770 bx lr + 801046c: 2000006c .word 0x2000006c + +08010470 : + * @note Each time PCLK1 changes, this function must be called to update the + * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK1 frequency + */ +uint32_t HAL_RCC_GetPCLK1Freq(void) +{ + 8010470: b580 push {r7, lr} + 8010472: af00 add r7, sp, #0 + /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]); + 8010474: f7ff fff2 bl 801045c + 8010478: 4602 mov r2, r0 + 801047a: 4b05 ldr r3, [pc, #20] @ (8010490 ) + 801047c: 685b ldr r3, [r3, #4] + 801047e: 0a1b lsrs r3, r3, #8 + 8010480: f003 0307 and.w r3, r3, #7 + 8010484: 4903 ldr r1, [pc, #12] @ (8010494 ) + 8010486: 5ccb ldrb r3, [r1, r3] + 8010488: fa22 f303 lsr.w r3, r2, r3 +} + 801048c: 4618 mov r0, r3 + 801048e: bd80 pop {r7, pc} + 8010490: 40021000 .word 0x40021000 + 8010494: 08015fd0 .word 0x08015fd0 + +08010498 : + * @note Each time PCLK2 changes, this function must be called to update the + * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. + * @retval PCLK2 frequency + */ +uint32_t HAL_RCC_GetPCLK2Freq(void) +{ + 8010498: b580 push {r7, lr} + 801049a: af00 add r7, sp, #0 + /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ + return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]); + 801049c: f7ff ffde bl 801045c + 80104a0: 4602 mov r2, r0 + 80104a2: 4b05 ldr r3, [pc, #20] @ (80104b8 ) + 80104a4: 685b ldr r3, [r3, #4] + 80104a6: 0adb lsrs r3, r3, #11 + 80104a8: f003 0307 and.w r3, r3, #7 + 80104ac: 4903 ldr r1, [pc, #12] @ (80104bc ) + 80104ae: 5ccb ldrb r3, [r1, r3] + 80104b0: fa22 f303 lsr.w r3, r2, r3 +} + 80104b4: 4618 mov r0, r3 + 80104b6: bd80 pop {r7, pc} + 80104b8: 40021000 .word 0x40021000 + 80104bc: 08015fd0 .word 0x08015fd0 + +080104c0 : + * @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) +{ + 80104c0: b480 push {r7} + 80104c2: b085 sub sp, #20 + 80104c4: af00 add r7, sp, #0 + 80104c6: 6078 str r0, [r7, #4] + __IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U); + 80104c8: 4b0a ldr r3, [pc, #40] @ (80104f4 ) + 80104ca: 681b ldr r3, [r3, #0] + 80104cc: 4a0a ldr r2, [pc, #40] @ (80104f8 ) + 80104ce: fba2 2303 umull r2, r3, r2, r3 + 80104d2: 0a5b lsrs r3, r3, #9 + 80104d4: 687a ldr r2, [r7, #4] + 80104d6: fb02 f303 mul.w r3, r2, r3 + 80104da: 60fb str r3, [r7, #12] + do + { + __NOP(); + 80104dc: bf00 nop + } + while (Delay --); + 80104de: 68fb ldr r3, [r7, #12] + 80104e0: 1e5a subs r2, r3, #1 + 80104e2: 60fa str r2, [r7, #12] + 80104e4: 2b00 cmp r3, #0 + 80104e6: d1f9 bne.n 80104dc +} + 80104e8: bf00 nop + 80104ea: bf00 nop + 80104ec: 3714 adds r7, #20 + 80104ee: 46bd mov sp, r7 + 80104f0: bc80 pop {r7} + 80104f2: 4770 bx lr + 80104f4: 2000006c .word 0x2000006c + 80104f8: 10624dd3 .word 0x10624dd3 + +080104fc : + * manually disable it. + * + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) +{ + 80104fc: b580 push {r7, lr} + 80104fe: b088 sub sp, #32 + 8010500: af00 add r7, sp, #0 + 8010502: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U, temp_reg = 0U; + 8010504: 2300 movs r3, #0 + 8010506: 617b str r3, [r7, #20] + 8010508: 2300 movs r3, #0 + 801050a: 613b str r3, [r7, #16] +#if defined(STM32F105xC) || defined(STM32F107xC) + uint32_t pllactive = 0U; + 801050c: 2300 movs r3, #0 + 801050e: 61fb str r3, [r7, #28] + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); + + /*------------------------------- RTC/LCD Configuration ------------------------*/ + if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) + 8010510: 687b ldr r3, [r7, #4] + 8010512: 681b ldr r3, [r3, #0] + 8010514: f003 0301 and.w r3, r3, #1 + 8010518: 2b00 cmp r3, #0 + 801051a: d07d beq.n 8010618 + { + FlagStatus pwrclkchanged = RESET; + 801051c: 2300 movs r3, #0 + 801051e: 76fb strb r3, [r7, #27] + assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); + + /* As soon as function is called to change RTC clock source, activation of the + power domain is done. */ + /* Requires to enable write access to Backup Domain of necessary */ + if (__HAL_RCC_PWR_IS_CLK_DISABLED()) + 8010520: 4b8b ldr r3, [pc, #556] @ (8010750 ) + 8010522: 69db ldr r3, [r3, #28] + 8010524: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 8010528: 2b00 cmp r3, #0 + 801052a: d10d bne.n 8010548 + { + __HAL_RCC_PWR_CLK_ENABLE(); + 801052c: 4b88 ldr r3, [pc, #544] @ (8010750 ) + 801052e: 69db ldr r3, [r3, #28] + 8010530: 4a87 ldr r2, [pc, #540] @ (8010750 ) + 8010532: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 + 8010536: 61d3 str r3, [r2, #28] + 8010538: 4b85 ldr r3, [pc, #532] @ (8010750 ) + 801053a: 69db ldr r3, [r3, #28] + 801053c: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 8010540: 60fb str r3, [r7, #12] + 8010542: 68fb ldr r3, [r7, #12] + pwrclkchanged = SET; + 8010544: 2301 movs r3, #1 + 8010546: 76fb strb r3, [r7, #27] + } + + if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8010548: 4b82 ldr r3, [pc, #520] @ (8010754 ) + 801054a: 681b ldr r3, [r3, #0] + 801054c: f403 7380 and.w r3, r3, #256 @ 0x100 + 8010550: 2b00 cmp r3, #0 + 8010552: d118 bne.n 8010586 + { + /* Enable write access to Backup domain */ + SET_BIT(PWR->CR, PWR_CR_DBP); + 8010554: 4b7f ldr r3, [pc, #508] @ (8010754 ) + 8010556: 681b ldr r3, [r3, #0] + 8010558: 4a7e ldr r2, [pc, #504] @ (8010754 ) + 801055a: f443 7380 orr.w r3, r3, #256 @ 0x100 + 801055e: 6013 str r3, [r2, #0] + + /* Wait for Backup domain Write protection disable */ + tickstart = HAL_GetTick(); + 8010560: f7fd f9ba bl 800d8d8 + 8010564: 6178 str r0, [r7, #20] + + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 8010566: e008 b.n 801057a + { + if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) + 8010568: f7fd f9b6 bl 800d8d8 + 801056c: 4602 mov r2, r0 + 801056e: 697b ldr r3, [r7, #20] + 8010570: 1ad3 subs r3, r2, r3 + 8010572: 2b64 cmp r3, #100 @ 0x64 + 8010574: d901 bls.n 801057a + { + return HAL_TIMEOUT; + 8010576: 2303 movs r3, #3 + 8010578: e0e5 b.n 8010746 + while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) + 801057a: 4b76 ldr r3, [pc, #472] @ (8010754 ) + 801057c: 681b ldr r3, [r3, #0] + 801057e: f403 7380 and.w r3, r3, #256 @ 0x100 + 8010582: 2b00 cmp r3, #0 + 8010584: d0f0 beq.n 8010568 + } + } + } + + /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ + temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); + 8010586: 4b72 ldr r3, [pc, #456] @ (8010750 ) + 8010588: 6a1b ldr r3, [r3, #32] + 801058a: f403 7340 and.w r3, r3, #768 @ 0x300 + 801058e: 613b str r3, [r7, #16] + if ((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) + 8010590: 693b ldr r3, [r7, #16] + 8010592: 2b00 cmp r3, #0 + 8010594: d02e beq.n 80105f4 + 8010596: 687b ldr r3, [r7, #4] + 8010598: 685b ldr r3, [r3, #4] + 801059a: f403 7340 and.w r3, r3, #768 @ 0x300 + 801059e: 693a ldr r2, [r7, #16] + 80105a0: 429a cmp r2, r3 + 80105a2: d027 beq.n 80105f4 + { + /* Store the content of BDCR register before the reset of Backup Domain */ + temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); + 80105a4: 4b6a ldr r3, [pc, #424] @ (8010750 ) + 80105a6: 6a1b ldr r3, [r3, #32] + 80105a8: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80105ac: 613b str r3, [r7, #16] + /* RTC Clock selection can be changed only if the Backup Domain is reset */ + __HAL_RCC_BACKUPRESET_FORCE(); + 80105ae: 4b6a ldr r3, [pc, #424] @ (8010758 ) + 80105b0: 2201 movs r2, #1 + 80105b2: 601a str r2, [r3, #0] + __HAL_RCC_BACKUPRESET_RELEASE(); + 80105b4: 4b68 ldr r3, [pc, #416] @ (8010758 ) + 80105b6: 2200 movs r2, #0 + 80105b8: 601a str r2, [r3, #0] + /* Restore the Content of BDCR register */ + RCC->BDCR = temp_reg; + 80105ba: 4a65 ldr r2, [pc, #404] @ (8010750 ) + 80105bc: 693b ldr r3, [r7, #16] + 80105be: 6213 str r3, [r2, #32] + + /* Wait for LSERDY if LSE was enabled */ + if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) + 80105c0: 693b ldr r3, [r7, #16] + 80105c2: f003 0301 and.w r3, r3, #1 + 80105c6: 2b00 cmp r3, #0 + 80105c8: d014 beq.n 80105f4 + { + /* Get Start Tick */ + tickstart = HAL_GetTick(); + 80105ca: f7fd f985 bl 800d8d8 + 80105ce: 6178 str r0, [r7, #20] + + /* Wait till LSE is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 80105d0: e00a b.n 80105e8 + { + if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) + 80105d2: f7fd f981 bl 800d8d8 + 80105d6: 4602 mov r2, r0 + 80105d8: 697b ldr r3, [r7, #20] + 80105da: 1ad3 subs r3, r2, r3 + 80105dc: f241 3288 movw r2, #5000 @ 0x1388 + 80105e0: 4293 cmp r3, r2 + 80105e2: d901 bls.n 80105e8 + { + return HAL_TIMEOUT; + 80105e4: 2303 movs r3, #3 + 80105e6: e0ae b.n 8010746 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) + 80105e8: 4b59 ldr r3, [pc, #356] @ (8010750 ) + 80105ea: 6a1b ldr r3, [r3, #32] + 80105ec: f003 0302 and.w r3, r3, #2 + 80105f0: 2b00 cmp r3, #0 + 80105f2: d0ee beq.n 80105d2 + } + } + } + } + __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); + 80105f4: 4b56 ldr r3, [pc, #344] @ (8010750 ) + 80105f6: 6a1b ldr r3, [r3, #32] + 80105f8: f423 7240 bic.w r2, r3, #768 @ 0x300 + 80105fc: 687b ldr r3, [r7, #4] + 80105fe: 685b ldr r3, [r3, #4] + 8010600: 4953 ldr r1, [pc, #332] @ (8010750 ) + 8010602: 4313 orrs r3, r2 + 8010604: 620b str r3, [r1, #32] + + /* Require to disable power clock if necessary */ + if (pwrclkchanged == SET) + 8010606: 7efb ldrb r3, [r7, #27] + 8010608: 2b01 cmp r3, #1 + 801060a: d105 bne.n 8010618 + { + __HAL_RCC_PWR_CLK_DISABLE(); + 801060c: 4b50 ldr r3, [pc, #320] @ (8010750 ) + 801060e: 69db ldr r3, [r3, #28] + 8010610: 4a4f ldr r2, [pc, #316] @ (8010750 ) + 8010612: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 + 8010616: 61d3 str r3, [r2, #28] + } + } + + /*------------------------------ ADC clock Configuration ------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) + 8010618: 687b ldr r3, [r7, #4] + 801061a: 681b ldr r3, [r3, #0] + 801061c: f003 0302 and.w r3, r3, #2 + 8010620: 2b00 cmp r3, #0 + 8010622: d008 beq.n 8010636 + { + /* Check the parameters */ + assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection)); + + /* Configure the ADC clock source */ + __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection); + 8010624: 4b4a ldr r3, [pc, #296] @ (8010750 ) + 8010626: 685b ldr r3, [r3, #4] + 8010628: f423 4240 bic.w r2, r3, #49152 @ 0xc000 + 801062c: 687b ldr r3, [r7, #4] + 801062e: 689b ldr r3, [r3, #8] + 8010630: 4947 ldr r1, [pc, #284] @ (8010750 ) + 8010632: 4313 orrs r3, r2 + 8010634: 604b str r3, [r1, #4] + } + +#if defined(STM32F105xC) || defined(STM32F107xC) + /*------------------------------ I2S2 Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) + 8010636: 687b ldr r3, [r7, #4] + 8010638: 681b ldr r3, [r3, #0] + 801063a: f003 0304 and.w r3, r3, #4 + 801063e: 2b00 cmp r3, #0 + 8010640: d008 beq.n 8010654 + { + /* Check the parameters */ + assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection)); + + /* Configure the I2S2 clock source */ + __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection); + 8010642: 4b43 ldr r3, [pc, #268] @ (8010750 ) + 8010644: 6adb ldr r3, [r3, #44] @ 0x2c + 8010646: f423 3200 bic.w r2, r3, #131072 @ 0x20000 + 801064a: 687b ldr r3, [r7, #4] + 801064c: 68db ldr r3, [r3, #12] + 801064e: 4940 ldr r1, [pc, #256] @ (8010750 ) + 8010650: 4313 orrs r3, r2 + 8010652: 62cb str r3, [r1, #44] @ 0x2c + } + + /*------------------------------ I2S3 Configuration ------------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) + 8010654: 687b ldr r3, [r7, #4] + 8010656: 681b ldr r3, [r3, #0] + 8010658: f003 0308 and.w r3, r3, #8 + 801065c: 2b00 cmp r3, #0 + 801065e: d008 beq.n 8010672 + { + /* Check the parameters */ + assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection)); + + /* Configure the I2S3 clock source */ + __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection); + 8010660: 4b3b ldr r3, [pc, #236] @ (8010750 ) + 8010662: 6adb ldr r3, [r3, #44] @ 0x2c + 8010664: f423 2280 bic.w r2, r3, #262144 @ 0x40000 + 8010668: 687b ldr r3, [r7, #4] + 801066a: 691b ldr r3, [r3, #16] + 801066c: 4938 ldr r1, [pc, #224] @ (8010750 ) + 801066e: 4313 orrs r3, r2 + 8010670: 62cb str r3, [r1, #44] @ 0x2c + } + + /*------------------------------ PLL I2S Configuration ----------------------*/ + /* Check that PLLI2S need to be enabled */ + if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) + 8010672: 4b37 ldr r3, [pc, #220] @ (8010750 ) + 8010674: 6adb ldr r3, [r3, #44] @ 0x2c + 8010676: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 801067a: 2b00 cmp r3, #0 + 801067c: d105 bne.n 801068a + 801067e: 4b34 ldr r3, [pc, #208] @ (8010750 ) + 8010680: 6adb ldr r3, [r3, #44] @ 0x2c + 8010682: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 8010686: 2b00 cmp r3, #0 + 8010688: d001 beq.n 801068e + { + /* Update flag to indicate that PLL I2S should be active */ + pllactive = 1; + 801068a: 2301 movs r3, #1 + 801068c: 61fb str r3, [r7, #28] + } + + /* Check if PLL I2S need to be enabled */ + if (pllactive == 1) + 801068e: 69fb ldr r3, [r7, #28] + 8010690: 2b01 cmp r3, #1 + 8010692: d148 bne.n 8010726 + { + /* Enable PLL I2S only if not active */ + if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) + 8010694: 4b2e ldr r3, [pc, #184] @ (8010750 ) + 8010696: 681b ldr r3, [r3, #0] + 8010698: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 801069c: 2b00 cmp r3, #0 + 801069e: d138 bne.n 8010712 + assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL)); + assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value)); + + /* Prediv2 can be written only when the PLL2 is disabled. */ + /* Return an error only if new value is different from the programmed value */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && \ + 80106a0: 4b2b ldr r3, [pc, #172] @ (8010750 ) + 80106a2: 681b ldr r3, [r3, #0] + 80106a4: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 + 80106a8: 2b00 cmp r3, #0 + 80106aa: d009 beq.n 80106c0 + (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) + 80106ac: 4b28 ldr r3, [pc, #160] @ (8010750 ) + 80106ae: 6adb ldr r3, [r3, #44] @ 0x2c + 80106b0: f003 02f0 and.w r2, r3, #240 @ 0xf0 + 80106b4: 687b ldr r3, [r7, #4] + 80106b6: 699b ldr r3, [r3, #24] + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && \ + 80106b8: 429a cmp r2, r3 + 80106ba: d001 beq.n 80106c0 + { + return HAL_ERROR; + 80106bc: 2301 movs r3, #1 + 80106be: e042 b.n 8010746 + } + + /* Configure the HSE prediv2 factor --------------------------------*/ + __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value); + 80106c0: 4b23 ldr r3, [pc, #140] @ (8010750 ) + 80106c2: 6adb ldr r3, [r3, #44] @ 0x2c + 80106c4: f023 02f0 bic.w r2, r3, #240 @ 0xf0 + 80106c8: 687b ldr r3, [r7, #4] + 80106ca: 699b ldr r3, [r3, #24] + 80106cc: 4920 ldr r1, [pc, #128] @ (8010750 ) + 80106ce: 4313 orrs r3, r2 + 80106d0: 62cb str r3, [r1, #44] @ 0x2c + + /* Configure the main PLLI2S multiplication factors. */ + __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL); + 80106d2: 4b1f ldr r3, [pc, #124] @ (8010750 ) + 80106d4: 6adb ldr r3, [r3, #44] @ 0x2c + 80106d6: f423 4270 bic.w r2, r3, #61440 @ 0xf000 + 80106da: 687b ldr r3, [r7, #4] + 80106dc: 695b ldr r3, [r3, #20] + 80106de: 491c ldr r1, [pc, #112] @ (8010750 ) + 80106e0: 4313 orrs r3, r2 + 80106e2: 62cb str r3, [r1, #44] @ 0x2c + + /* Enable the main PLLI2S. */ + __HAL_RCC_PLLI2S_ENABLE(); + 80106e4: 4b1d ldr r3, [pc, #116] @ (801075c ) + 80106e6: 2201 movs r2, #1 + 80106e8: 601a str r2, [r3, #0] + + /* Get Start Tick*/ + tickstart = HAL_GetTick(); + 80106ea: f7fd f8f5 bl 800d8d8 + 80106ee: 6178 str r0, [r7, #20] + + /* Wait till PLLI2S is ready */ + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + 80106f0: e008 b.n 8010704 + { + if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) + 80106f2: f7fd f8f1 bl 800d8d8 + 80106f6: 4602 mov r2, r0 + 80106f8: 697b ldr r3, [r7, #20] + 80106fa: 1ad3 subs r3, r2, r3 + 80106fc: 2b64 cmp r3, #100 @ 0x64 + 80106fe: d901 bls.n 8010704 + { + return HAL_TIMEOUT; + 8010700: 2303 movs r3, #3 + 8010702: e020 b.n 8010746 + while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) + 8010704: 4b12 ldr r3, [pc, #72] @ (8010750 ) + 8010706: 681b ldr r3, [r3, #0] + 8010708: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 + 801070c: 2b00 cmp r3, #0 + 801070e: d0f0 beq.n 80106f2 + 8010710: e009 b.n 8010726 + } + } + else + { + /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */ + if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) + 8010712: 4b0f ldr r3, [pc, #60] @ (8010750 ) + 8010714: 6adb ldr r3, [r3, #44] @ 0x2c + 8010716: f403 4270 and.w r2, r3, #61440 @ 0xf000 + 801071a: 687b ldr r3, [r7, #4] + 801071c: 695b ldr r3, [r3, #20] + 801071e: 429a cmp r2, r3 + 8010720: d001 beq.n 8010726 + { + return HAL_ERROR; + 8010722: 2301 movs r3, #1 + 8010724: e00f b.n 8010746 + +#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + /*------------------------------ USB clock Configuration ------------------*/ + if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) + 8010726: 687b ldr r3, [r7, #4] + 8010728: 681b ldr r3, [r3, #0] + 801072a: f003 0310 and.w r3, r3, #16 + 801072e: 2b00 cmp r3, #0 + 8010730: d008 beq.n 8010744 + { + /* Check the parameters */ + assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection)); + + /* Configure the USB clock source */ + __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection); + 8010732: 4b07 ldr r3, [pc, #28] @ (8010750 ) + 8010734: 685b ldr r3, [r3, #4] + 8010736: f423 0280 bic.w r2, r3, #4194304 @ 0x400000 + 801073a: 687b ldr r3, [r7, #4] + 801073c: 69db ldr r3, [r3, #28] + 801073e: 4904 ldr r1, [pc, #16] @ (8010750 ) + 8010740: 4313 orrs r3, r2 + 8010742: 604b str r3, [r1, #4] + } +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + + return HAL_OK; + 8010744: 2300 movs r3, #0 +} + 8010746: 4618 mov r0, r3 + 8010748: 3720 adds r7, #32 + 801074a: 46bd mov sp, r7 + 801074c: bd80 pop {r7, pc} + 801074e: bf00 nop + 8010750: 40021000 .word 0x40021000 + 8010754: 40007000 .word 0x40007000 + 8010758: 42420440 .word 0x42420440 + 801075c: 42420070 .word 0x42420070 + +08010760 : + * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock + @endif + * @retval Frequency in Hz (0: means that no available frequency for the peripheral) + */ +uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) +{ + 8010760: b580 push {r7, lr} + 8010762: b08a sub sp, #40 @ 0x28 + 8010764: af00 add r7, sp, #0 + 8010766: 6078 str r0, [r7, #4] +#if defined(STM32F105xC) || defined(STM32F107xC) + static const uint8_t aPLLMULFactorTable[14U] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13}; + static const uint8_t aPredivFactorTable[16U] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; + + uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U; + 8010768: 2300 movs r3, #0 + 801076a: 61fb str r3, [r7, #28] + 801076c: 2300 movs r3, #0 + 801076e: 627b str r3, [r7, #36] @ 0x24 + 8010770: 2300 movs r3, #0 + 8010772: 61bb str r3, [r7, #24] + uint32_t pll2mul = 0U, pll3mul = 0U, prediv2 = 0U; + 8010774: 2300 movs r3, #0 + 8010776: 617b str r3, [r7, #20] + 8010778: 2300 movs r3, #0 + 801077a: 613b str r3, [r7, #16] + 801077c: 2300 movs r3, #0 + 801077e: 60fb str r3, [r7, #12] + static const uint8_t aPLLMULFactorTable[16U] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; + static const uint8_t aPredivFactorTable[2U] = {1, 2}; + + uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U; +#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ + uint32_t temp_reg = 0U, frequency = 0U; + 8010780: 2300 movs r3, #0 + 8010782: 60bb str r3, [r7, #8] + 8010784: 2300 movs r3, #0 + 8010786: 623b str r3, [r7, #32] + + /* Check the parameters */ + assert_param(IS_RCC_PERIPHCLOCK(PeriphClk)); + + switch (PeriphClk) + 8010788: 687b ldr r3, [r7, #4] + 801078a: 3b01 subs r3, #1 + 801078c: 2b0f cmp r3, #15 + 801078e: f200 811d bhi.w 80109cc + 8010792: a201 add r2, pc, #4 @ (adr r2, 8010798 ) + 8010794: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8010798: 0801094d .word 0x0801094d + 801079c: 080109b1 .word 0x080109b1 + 80107a0: 080109cd .word 0x080109cd + 80107a4: 080108ab .word 0x080108ab + 80107a8: 080109cd .word 0x080109cd + 80107ac: 080109cd .word 0x080109cd + 80107b0: 080109cd .word 0x080109cd + 80107b4: 080108fd .word 0x080108fd + 80107b8: 080109cd .word 0x080109cd + 80107bc: 080109cd .word 0x080109cd + 80107c0: 080109cd .word 0x080109cd + 80107c4: 080109cd .word 0x080109cd + 80107c8: 080109cd .word 0x080109cd + 80107cc: 080109cd .word 0x080109cd + 80107d0: 080109cd .word 0x080109cd + 80107d4: 080107d9 .word 0x080107d9 + || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ + || defined(STM32F105xC) || defined(STM32F107xC) + case RCC_PERIPHCLK_USB: + { + /* Get RCC configuration ------------------------------------------------------*/ + temp_reg = RCC->CFGR; + 80107d8: 4b83 ldr r3, [pc, #524] @ (80109e8 ) + 80107da: 685b ldr r3, [r3, #4] + 80107dc: 60bb str r3, [r7, #8] + + /* Check if PLL is enabled */ + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLON)) + 80107de: 4b82 ldr r3, [pc, #520] @ (80109e8 ) + 80107e0: 681b ldr r3, [r3, #0] + 80107e2: f003 7380 and.w r3, r3, #16777216 @ 0x1000000 + 80107e6: 2b00 cmp r3, #0 + 80107e8: f000 80f2 beq.w 80109d0 + { + pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; + 80107ec: 68bb ldr r3, [r7, #8] + 80107ee: 0c9b lsrs r3, r3, #18 + 80107f0: f003 030f and.w r3, r3, #15 + 80107f4: 4a7d ldr r2, [pc, #500] @ (80109ec ) + 80107f6: 5cd3 ldrb r3, [r2, r3] + 80107f8: 61bb str r3, [r7, #24] + if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) + 80107fa: 68bb ldr r3, [r7, #8] + 80107fc: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 8010800: 2b00 cmp r3, #0 + 8010802: d03b beq.n 801087c + { +#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ + || defined(STM32F100xE) + prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; + 8010804: 4b78 ldr r3, [pc, #480] @ (80109e8 ) + 8010806: 6adb ldr r3, [r3, #44] @ 0x2c + 8010808: f003 030f and.w r3, r3, #15 + 801080c: 4a78 ldr r2, [pc, #480] @ (80109f0 ) + 801080e: 5cd3 ldrb r3, [r2, r3] + 8010810: 61fb str r3, [r7, #28] +#else + prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; +#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ + +#if defined(STM32F105xC) || defined(STM32F107xC) + if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) + 8010812: 4b75 ldr r3, [pc, #468] @ (80109e8 ) + 8010814: 6adb ldr r3, [r3, #44] @ 0x2c + 8010816: f403 3380 and.w r3, r3, #65536 @ 0x10000 + 801081a: 2b00 cmp r3, #0 + 801081c: d01c beq.n 8010858 + { + /* PLL2 selected as Prediv1 source */ + /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; + 801081e: 4b72 ldr r3, [pc, #456] @ (80109e8 ) + 8010820: 6adb ldr r3, [r3, #44] @ 0x2c + 8010822: 091b lsrs r3, r3, #4 + 8010824: f003 030f and.w r3, r3, #15 + 8010828: 3301 adds r3, #1 + 801082a: 60fb str r3, [r7, #12] + pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2; + 801082c: 4b6e ldr r3, [pc, #440] @ (80109e8 ) + 801082e: 6adb ldr r3, [r3, #44] @ 0x2c + 8010830: 0a1b lsrs r3, r3, #8 + 8010832: f003 030f and.w r3, r3, #15 + 8010836: 3302 adds r3, #2 + 8010838: 617b str r3, [r7, #20] + pllclk = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul); + 801083a: 4a6e ldr r2, [pc, #440] @ (80109f4 ) + 801083c: 68fb ldr r3, [r7, #12] + 801083e: fbb2 f3f3 udiv r3, r2, r3 + 8010842: 697a ldr r2, [r7, #20] + 8010844: fb03 f202 mul.w r2, r3, r2 + 8010848: 69fb ldr r3, [r7, #28] + 801084a: fbb2 f2f3 udiv r2, r2, r3 + 801084e: 69bb ldr r3, [r7, #24] + 8010850: fb02 f303 mul.w r3, r2, r3 + 8010854: 627b str r3, [r7, #36] @ 0x24 + 8010856: e007 b.n 8010868 + } + else + { + /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ + pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul); + 8010858: 4a66 ldr r2, [pc, #408] @ (80109f4 ) + 801085a: 69fb ldr r3, [r7, #28] + 801085c: fbb2 f2f3 udiv r2, r2, r3 + 8010860: 69bb ldr r3, [r7, #24] + 8010862: fb02 f303 mul.w r3, r2, r3 + 8010866: 627b str r3, [r7, #36] @ 0x24 + } + + /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ + /* In this case need to divide pllclk by 2 */ + if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) + 8010868: 4b60 ldr r3, [pc, #384] @ (80109ec ) + 801086a: 7b5b ldrb r3, [r3, #13] + 801086c: 461a mov r2, r3 + 801086e: 69bb ldr r3, [r7, #24] + 8010870: 4293 cmp r3, r2 + 8010872: d108 bne.n 8010886 + { + pllclk = pllclk / 2; + 8010874: 6a7b ldr r3, [r7, #36] @ 0x24 + 8010876: 085b lsrs r3, r3, #1 + 8010878: 627b str r3, [r7, #36] @ 0x24 + 801087a: e004 b.n 8010886 +#endif /* STM32F105xC || STM32F107xC */ + } + else + { + /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ + pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); + 801087c: 69bb ldr r3, [r7, #24] + 801087e: 4a5e ldr r2, [pc, #376] @ (80109f8 ) + 8010880: fb02 f303 mul.w r3, r2, r3 + 8010884: 627b str r3, [r7, #36] @ 0x24 + } + + /* Calcul of the USB frequency*/ +#if defined(STM32F105xC) || defined(STM32F107xC) + /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */ + if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) + 8010886: 4b58 ldr r3, [pc, #352] @ (80109e8 ) + 8010888: 685b ldr r3, [r3, #4] + 801088a: f403 0380 and.w r3, r3, #4194304 @ 0x400000 + 801088e: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 + 8010892: d102 bne.n 801089a + { + /* Prescaler of 2 selected for USB */ + frequency = pllclk; + 8010894: 6a7b ldr r3, [r7, #36] @ 0x24 + 8010896: 623b str r3, [r7, #32] + /* Prescaler of 1.5 selected for USB */ + frequency = (pllclk * 2) / 3; + } +#endif + } + break; + 8010898: e09a b.n 80109d0 + frequency = (2 * pllclk) / 3; + 801089a: 6a7b ldr r3, [r7, #36] @ 0x24 + 801089c: 005b lsls r3, r3, #1 + 801089e: 4a57 ldr r2, [pc, #348] @ (80109fc ) + 80108a0: fba2 2303 umull r2, r3, r2, r3 + 80108a4: 085b lsrs r3, r3, #1 + 80108a6: 623b str r3, [r7, #32] + break; + 80108a8: e092 b.n 80109d0 + { +#if defined(STM32F103xE) || defined(STM32F103xG) + /* SYSCLK used as source clock for I2S2 */ + frequency = HAL_RCC_GetSysClockFreq(); +#else + if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) + 80108aa: 4b4f ldr r3, [pc, #316] @ (80109e8 ) + 80108ac: 6adb ldr r3, [r3, #44] @ 0x2c + 80108ae: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 80108b2: 2b00 cmp r3, #0 + 80108b4: d103 bne.n 80108be + { + /* SYSCLK used as source clock for I2S2 */ + frequency = HAL_RCC_GetSysClockFreq(); + 80108b6: f7ff fd15 bl 80102e4 + 80108ba: 6238 str r0, [r7, #32] + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + } + } +#endif /* STM32F103xE || STM32F103xG */ + break; + 80108bc: e08a b.n 80109d4 + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) + 80108be: 4b4a ldr r3, [pc, #296] @ (80109e8 ) + 80108c0: 681b ldr r3, [r3, #0] + 80108c2: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 80108c6: 2b00 cmp r3, #0 + 80108c8: f000 8084 beq.w 80109d4 + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; + 80108cc: 4b46 ldr r3, [pc, #280] @ (80109e8 ) + 80108ce: 6adb ldr r3, [r3, #44] @ 0x2c + 80108d0: 091b lsrs r3, r3, #4 + 80108d2: f003 030f and.w r3, r3, #15 + 80108d6: 3301 adds r3, #1 + 80108d8: 60fb str r3, [r7, #12] + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; + 80108da: 4b43 ldr r3, [pc, #268] @ (80109e8 ) + 80108dc: 6adb ldr r3, [r3, #44] @ 0x2c + 80108de: 0b1b lsrs r3, r3, #12 + 80108e0: f003 030f and.w r3, r3, #15 + 80108e4: 3302 adds r3, #2 + 80108e6: 613b str r3, [r7, #16] + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + 80108e8: 4a42 ldr r2, [pc, #264] @ (80109f4 ) + 80108ea: 68fb ldr r3, [r7, #12] + 80108ec: fbb2 f3f3 udiv r3, r2, r3 + 80108f0: 693a ldr r2, [r7, #16] + 80108f2: fb02 f303 mul.w r3, r2, r3 + 80108f6: 005b lsls r3, r3, #1 + 80108f8: 623b str r3, [r7, #32] + break; + 80108fa: e06b b.n 80109d4 + { +#if defined(STM32F103xE) || defined(STM32F103xG) + /* SYSCLK used as source clock for I2S3 */ + frequency = HAL_RCC_GetSysClockFreq(); +#else + if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) + 80108fc: 4b3a ldr r3, [pc, #232] @ (80109e8 ) + 80108fe: 6adb ldr r3, [r3, #44] @ 0x2c + 8010900: f403 2380 and.w r3, r3, #262144 @ 0x40000 + 8010904: 2b00 cmp r3, #0 + 8010906: d103 bne.n 8010910 + { + /* SYSCLK used as source clock for I2S3 */ + frequency = HAL_RCC_GetSysClockFreq(); + 8010908: f7ff fcec bl 80102e4 + 801090c: 6238 str r0, [r7, #32] + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + } + } +#endif /* STM32F103xE || STM32F103xG */ + break; + 801090e: e063 b.n 80109d8 + if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) + 8010910: 4b35 ldr r3, [pc, #212] @ (80109e8 ) + 8010912: 681b ldr r3, [r3, #0] + 8010914: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 + 8010918: 2b00 cmp r3, #0 + 801091a: d05d beq.n 80109d8 + prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; + 801091c: 4b32 ldr r3, [pc, #200] @ (80109e8 ) + 801091e: 6adb ldr r3, [r3, #44] @ 0x2c + 8010920: 091b lsrs r3, r3, #4 + 8010922: f003 030f and.w r3, r3, #15 + 8010926: 3301 adds r3, #1 + 8010928: 60fb str r3, [r7, #12] + pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; + 801092a: 4b2f ldr r3, [pc, #188] @ (80109e8 ) + 801092c: 6adb ldr r3, [r3, #44] @ 0x2c + 801092e: 0b1b lsrs r3, r3, #12 + 8010930: f003 030f and.w r3, r3, #15 + 8010934: 3302 adds r3, #2 + 8010936: 613b str r3, [r7, #16] + frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); + 8010938: 4a2e ldr r2, [pc, #184] @ (80109f4 ) + 801093a: 68fb ldr r3, [r7, #12] + 801093c: fbb2 f3f3 udiv r3, r2, r3 + 8010940: 693a ldr r2, [r7, #16] + 8010942: fb02 f303 mul.w r3, r2, r3 + 8010946: 005b lsls r3, r3, #1 + 8010948: 623b str r3, [r7, #32] + break; + 801094a: e045 b.n 80109d8 + } +#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ + case RCC_PERIPHCLK_RTC: + { + /* Get RCC BDCR configuration ------------------------------------------------------*/ + temp_reg = RCC->BDCR; + 801094c: 4b26 ldr r3, [pc, #152] @ (80109e8 ) + 801094e: 6a1b ldr r3, [r3, #32] + 8010950: 60bb str r3, [r7, #8] + + /* Check if LSE is ready if RTC clock selection is LSE */ + if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) + 8010952: 68bb ldr r3, [r7, #8] + 8010954: f403 7340 and.w r3, r3, #768 @ 0x300 + 8010958: f5b3 7f80 cmp.w r3, #256 @ 0x100 + 801095c: d108 bne.n 8010970 + 801095e: 68bb ldr r3, [r7, #8] + 8010960: f003 0302 and.w r3, r3, #2 + 8010964: 2b00 cmp r3, #0 + 8010966: d003 beq.n 8010970 + { + frequency = LSE_VALUE; + 8010968: f44f 4300 mov.w r3, #32768 @ 0x8000 + 801096c: 623b str r3, [r7, #32] + 801096e: e01e b.n 80109ae + } + /* Check if LSI is ready if RTC clock selection is LSI */ + else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) + 8010970: 68bb ldr r3, [r7, #8] + 8010972: f403 7340 and.w r3, r3, #768 @ 0x300 + 8010976: f5b3 7f00 cmp.w r3, #512 @ 0x200 + 801097a: d109 bne.n 8010990 + 801097c: 4b1a ldr r3, [pc, #104] @ (80109e8 ) + 801097e: 6a5b ldr r3, [r3, #36] @ 0x24 + 8010980: f003 0302 and.w r3, r3, #2 + 8010984: 2b00 cmp r3, #0 + 8010986: d003 beq.n 8010990 + { + frequency = LSI_VALUE; + 8010988: f649 4340 movw r3, #40000 @ 0x9c40 + 801098c: 623b str r3, [r7, #32] + 801098e: e00e b.n 80109ae + } + else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) + 8010990: 68bb ldr r3, [r7, #8] + 8010992: f403 7340 and.w r3, r3, #768 @ 0x300 + 8010996: f5b3 7f40 cmp.w r3, #768 @ 0x300 + 801099a: d11f bne.n 80109dc + 801099c: 4b12 ldr r3, [pc, #72] @ (80109e8 ) + 801099e: 681b ldr r3, [r3, #0] + 80109a0: f403 3300 and.w r3, r3, #131072 @ 0x20000 + 80109a4: 2b00 cmp r3, #0 + 80109a6: d019 beq.n 80109dc + { + frequency = HSE_VALUE / 128U; + 80109a8: 4b15 ldr r3, [pc, #84] @ (8010a00 ) + 80109aa: 623b str r3, [r7, #32] + /* Clock not enabled for RTC*/ + else + { + /* nothing to do: frequency already initialized to 0U */ + } + break; + 80109ac: e016 b.n 80109dc + 80109ae: e015 b.n 80109dc + } + case RCC_PERIPHCLK_ADC: + { + frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> RCC_CFGR_ADCPRE_Pos) + 1) * 2); + 80109b0: f7ff fd72 bl 8010498 + 80109b4: 4602 mov r2, r0 + 80109b6: 4b0c ldr r3, [pc, #48] @ (80109e8 ) + 80109b8: 685b ldr r3, [r3, #4] + 80109ba: 0b9b lsrs r3, r3, #14 + 80109bc: f003 0303 and.w r3, r3, #3 + 80109c0: 3301 adds r3, #1 + 80109c2: 005b lsls r3, r3, #1 + 80109c4: fbb2 f3f3 udiv r3, r2, r3 + 80109c8: 623b str r3, [r7, #32] + break; + 80109ca: e008 b.n 80109de + } + default: + { + break; + 80109cc: bf00 nop + 80109ce: e006 b.n 80109de + break; + 80109d0: bf00 nop + 80109d2: e004 b.n 80109de + break; + 80109d4: bf00 nop + 80109d6: e002 b.n 80109de + break; + 80109d8: bf00 nop + 80109da: e000 b.n 80109de + break; + 80109dc: bf00 nop + } + } + return (frequency); + 80109de: 6a3b ldr r3, [r7, #32] +} + 80109e0: 4618 mov r0, r3 + 80109e2: 3728 adds r7, #40 @ 0x28 + 80109e4: 46bd mov sp, r7 + 80109e6: bd80 pop {r7, pc} + 80109e8: 40021000 .word 0x40021000 + 80109ec: 08015ff8 .word 0x08015ff8 + 80109f0: 08016008 .word 0x08016008 + 80109f4: 017d7840 .word 0x017d7840 + 80109f8: 003d0900 .word 0x003d0900 + 80109fc: aaaaaaab .word 0xaaaaaaab + 8010a00: 0002faf0 .word 0x0002faf0 + +08010a04 : + * @param hrtc pointer to a RTC_HandleTypeDef structure that contains + * the configuration information for RTC. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc) +{ + 8010a04: b580 push {r7, lr} + 8010a06: b084 sub sp, #16 + 8010a08: af00 add r7, sp, #0 + 8010a0a: 6078 str r0, [r7, #4] + uint32_t prescaler = 0U; + 8010a0c: 2300 movs r3, #0 + 8010a0e: 60fb str r3, [r7, #12] + /* Check input parameters */ + if (hrtc == NULL) + 8010a10: 687b ldr r3, [r7, #4] + 8010a12: 2b00 cmp r3, #0 + 8010a14: d101 bne.n 8010a1a + { + return HAL_ERROR; + 8010a16: 2301 movs r3, #1 + 8010a18: e07a b.n 8010b10 + { + hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; + } + } +#else + if (hrtc->State == HAL_RTC_STATE_RESET) + 8010a1a: 687b ldr r3, [r7, #4] + 8010a1c: 7c5b ldrb r3, [r3, #17] + 8010a1e: b2db uxtb r3, r3 + 8010a20: 2b00 cmp r3, #0 + 8010a22: d105 bne.n 8010a30 + { + /* Allocate lock resource and initialize it */ + hrtc->Lock = HAL_UNLOCKED; + 8010a24: 687b ldr r3, [r7, #4] + 8010a26: 2200 movs r2, #0 + 8010a28: 741a strb r2, [r3, #16] + + /* Initialize RTC MSP */ + HAL_RTC_MspInit(hrtc); + 8010a2a: 6878 ldr r0, [r7, #4] + 8010a2c: f7fa ff44 bl 800b8b8 + } +#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ + + /* Set RTC state */ + hrtc->State = HAL_RTC_STATE_BUSY; + 8010a30: 687b ldr r3, [r7, #4] + 8010a32: 2202 movs r2, #2 + 8010a34: 745a strb r2, [r3, #17] + + /* Waiting for synchro */ + if (HAL_RTC_WaitForSynchro(hrtc) != HAL_OK) + 8010a36: 6878 ldr r0, [r7, #4] + 8010a38: f000 f870 bl 8010b1c + 8010a3c: 4603 mov r3, r0 + 8010a3e: 2b00 cmp r3, #0 + 8010a40: d004 beq.n 8010a4c + { + /* Set RTC state */ + hrtc->State = HAL_RTC_STATE_ERROR; + 8010a42: 687b ldr r3, [r7, #4] + 8010a44: 2204 movs r2, #4 + 8010a46: 745a strb r2, [r3, #17] + + return HAL_ERROR; + 8010a48: 2301 movs r3, #1 + 8010a4a: e061 b.n 8010b10 + } + + /* Set Initialization mode */ + if (RTC_EnterInitMode(hrtc) != HAL_OK) + 8010a4c: 6878 ldr r0, [r7, #4] + 8010a4e: f000 f892 bl 8010b76 + 8010a52: 4603 mov r3, r0 + 8010a54: 2b00 cmp r3, #0 + 8010a56: d004 beq.n 8010a62 + { + /* Set RTC state */ + hrtc->State = HAL_RTC_STATE_ERROR; + 8010a58: 687b ldr r3, [r7, #4] + 8010a5a: 2204 movs r2, #4 + 8010a5c: 745a strb r2, [r3, #17] + + return HAL_ERROR; + 8010a5e: 2301 movs r3, #1 + 8010a60: e056 b.n 8010b10 + } + else + { + /* Clear Flags Bits */ + CLEAR_BIT(hrtc->Instance->CRL, (RTC_FLAG_OW | RTC_FLAG_ALRAF | RTC_FLAG_SEC)); + 8010a62: 687b ldr r3, [r7, #4] + 8010a64: 681b ldr r3, [r3, #0] + 8010a66: 685a ldr r2, [r3, #4] + 8010a68: 687b ldr r3, [r7, #4] + 8010a6a: 681b ldr r3, [r3, #0] + 8010a6c: f022 0207 bic.w r2, r2, #7 + 8010a70: 605a str r2, [r3, #4] + + if (hrtc->Init.OutPut != RTC_OUTPUTSOURCE_NONE) + 8010a72: 687b ldr r3, [r7, #4] + 8010a74: 689b ldr r3, [r3, #8] + 8010a76: 2b00 cmp r3, #0 + 8010a78: d005 beq.n 8010a86 + { + /* Disable the selected Tamper pin */ + CLEAR_BIT(BKP->CR, BKP_CR_TPE); + 8010a7a: 4b27 ldr r3, [pc, #156] @ (8010b18 ) + 8010a7c: 6b1b ldr r3, [r3, #48] @ 0x30 + 8010a7e: 4a26 ldr r2, [pc, #152] @ (8010b18 ) + 8010a80: f023 0301 bic.w r3, r3, #1 + 8010a84: 6313 str r3, [r2, #48] @ 0x30 + } + + /* Set the signal which will be routed to RTC Tamper pin*/ + MODIFY_REG(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS), hrtc->Init.OutPut); + 8010a86: 4b24 ldr r3, [pc, #144] @ (8010b18 ) + 8010a88: 6adb ldr r3, [r3, #44] @ 0x2c + 8010a8a: f423 7260 bic.w r2, r3, #896 @ 0x380 + 8010a8e: 687b ldr r3, [r7, #4] + 8010a90: 689b ldr r3, [r3, #8] + 8010a92: 4921 ldr r1, [pc, #132] @ (8010b18 ) + 8010a94: 4313 orrs r3, r2 + 8010a96: 62cb str r3, [r1, #44] @ 0x2c + + if (hrtc->Init.AsynchPrediv != RTC_AUTO_1_SECOND) + 8010a98: 687b ldr r3, [r7, #4] + 8010a9a: 685b ldr r3, [r3, #4] + 8010a9c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 8010aa0: d003 beq.n 8010aaa + { + /* RTC Prescaler provided directly by end-user*/ + prescaler = hrtc->Init.AsynchPrediv; + 8010aa2: 687b ldr r3, [r7, #4] + 8010aa4: 685b ldr r3, [r3, #4] + 8010aa6: 60fb str r3, [r7, #12] + 8010aa8: e00e b.n 8010ac8 + } + else + { + /* RTC Prescaler will be automatically calculated to get 1 second timebase */ + /* Get the RTCCLK frequency */ + prescaler = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_RTC); + 8010aaa: 2001 movs r0, #1 + 8010aac: f7ff fe58 bl 8010760 + 8010ab0: 60f8 str r0, [r7, #12] + + /* Check that RTC clock is enabled*/ + if (prescaler == 0U) + 8010ab2: 68fb ldr r3, [r7, #12] + 8010ab4: 2b00 cmp r3, #0 + 8010ab6: d104 bne.n 8010ac2 + { + /* Should not happen. Frequency is not available*/ + hrtc->State = HAL_RTC_STATE_ERROR; + 8010ab8: 687b ldr r3, [r7, #4] + 8010aba: 2204 movs r2, #4 + 8010abc: 745a strb r2, [r3, #17] + return HAL_ERROR; + 8010abe: 2301 movs r3, #1 + 8010ac0: e026 b.n 8010b10 + } + else + { + /* RTC period = RTCCLK/(RTC_PR + 1) */ + prescaler = prescaler - 1U; + 8010ac2: 68fb ldr r3, [r7, #12] + 8010ac4: 3b01 subs r3, #1 + 8010ac6: 60fb str r3, [r7, #12] + } + } + + /* Configure the RTC_PRLH / RTC_PRLL */ + WRITE_REG(hrtc->Instance->PRLH, ((prescaler >> 16U) & RTC_PRLH_PRL)); + 8010ac8: 68fb ldr r3, [r7, #12] + 8010aca: 0c1a lsrs r2, r3, #16 + 8010acc: 687b ldr r3, [r7, #4] + 8010ace: 681b ldr r3, [r3, #0] + 8010ad0: f002 020f and.w r2, r2, #15 + 8010ad4: 609a str r2, [r3, #8] + WRITE_REG(hrtc->Instance->PRLL, (prescaler & RTC_PRLL_PRL)); + 8010ad6: 687b ldr r3, [r7, #4] + 8010ad8: 681b ldr r3, [r3, #0] + 8010ada: 68fa ldr r2, [r7, #12] + 8010adc: b292 uxth r2, r2 + 8010ade: 60da str r2, [r3, #12] + + /* Wait for synchro */ + if (RTC_ExitInitMode(hrtc) != HAL_OK) + 8010ae0: 6878 ldr r0, [r7, #4] + 8010ae2: f000 f870 bl 8010bc6 + 8010ae6: 4603 mov r3, r0 + 8010ae8: 2b00 cmp r3, #0 + 8010aea: d004 beq.n 8010af6 + { + hrtc->State = HAL_RTC_STATE_ERROR; + 8010aec: 687b ldr r3, [r7, #4] + 8010aee: 2204 movs r2, #4 + 8010af0: 745a strb r2, [r3, #17] + + return HAL_ERROR; + 8010af2: 2301 movs r3, #1 + 8010af4: e00c b.n 8010b10 + } + + /* Initialize date to 1st of January 2000 */ + hrtc->DateToUpdate.Year = 0x00U; + 8010af6: 687b ldr r3, [r7, #4] + 8010af8: 2200 movs r2, #0 + 8010afa: 73da strb r2, [r3, #15] + hrtc->DateToUpdate.Month = RTC_MONTH_JANUARY; + 8010afc: 687b ldr r3, [r7, #4] + 8010afe: 2201 movs r2, #1 + 8010b00: 735a strb r2, [r3, #13] + hrtc->DateToUpdate.Date = 0x01U; + 8010b02: 687b ldr r3, [r7, #4] + 8010b04: 2201 movs r2, #1 + 8010b06: 739a strb r2, [r3, #14] + + /* Set RTC state */ + hrtc->State = HAL_RTC_STATE_READY; + 8010b08: 687b ldr r3, [r7, #4] + 8010b0a: 2201 movs r2, #1 + 8010b0c: 745a strb r2, [r3, #17] + + return HAL_OK; + 8010b0e: 2300 movs r3, #0 + } +} + 8010b10: 4618 mov r0, r3 + 8010b12: 3710 adds r7, #16 + 8010b14: 46bd mov sp, r7 + 8010b16: bd80 pop {r7, pc} + 8010b18: 40006c00 .word 0x40006c00 + +08010b1c : + * @param hrtc pointer to a RTC_HandleTypeDef structure that contains + * the configuration information for RTC. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc) +{ + 8010b1c: b580 push {r7, lr} + 8010b1e: b084 sub sp, #16 + 8010b20: af00 add r7, sp, #0 + 8010b22: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 8010b24: 2300 movs r3, #0 + 8010b26: 60fb str r3, [r7, #12] + + /* Check input parameters */ + if (hrtc == NULL) + 8010b28: 687b ldr r3, [r7, #4] + 8010b2a: 2b00 cmp r3, #0 + 8010b2c: d101 bne.n 8010b32 + { + return HAL_ERROR; + 8010b2e: 2301 movs r3, #1 + 8010b30: e01d b.n 8010b6e + } + + /* Clear RSF flag */ + CLEAR_BIT(hrtc->Instance->CRL, RTC_FLAG_RSF); + 8010b32: 687b ldr r3, [r7, #4] + 8010b34: 681b ldr r3, [r3, #0] + 8010b36: 685a ldr r2, [r3, #4] + 8010b38: 687b ldr r3, [r7, #4] + 8010b3a: 681b ldr r3, [r3, #0] + 8010b3c: f022 0208 bic.w r2, r2, #8 + 8010b40: 605a str r2, [r3, #4] + + tickstart = HAL_GetTick(); + 8010b42: f7fc fec9 bl 800d8d8 + 8010b46: 60f8 str r0, [r7, #12] + + /* Wait the registers to be synchronised */ + while ((hrtc->Instance->CRL & RTC_FLAG_RSF) == (uint32_t)RESET) + 8010b48: e009 b.n 8010b5e + { + if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) + 8010b4a: f7fc fec5 bl 800d8d8 + 8010b4e: 4602 mov r2, r0 + 8010b50: 68fb ldr r3, [r7, #12] + 8010b52: 1ad3 subs r3, r2, r3 + 8010b54: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 8010b58: d901 bls.n 8010b5e + { + return HAL_TIMEOUT; + 8010b5a: 2303 movs r3, #3 + 8010b5c: e007 b.n 8010b6e + while ((hrtc->Instance->CRL & RTC_FLAG_RSF) == (uint32_t)RESET) + 8010b5e: 687b ldr r3, [r7, #4] + 8010b60: 681b ldr r3, [r3, #0] + 8010b62: 685b ldr r3, [r3, #4] + 8010b64: f003 0308 and.w r3, r3, #8 + 8010b68: 2b00 cmp r3, #0 + 8010b6a: d0ee beq.n 8010b4a + } + } + + return HAL_OK; + 8010b6c: 2300 movs r3, #0 +} + 8010b6e: 4618 mov r0, r3 + 8010b70: 3710 adds r7, #16 + 8010b72: 46bd mov sp, r7 + 8010b74: bd80 pop {r7, pc} + +08010b76 : + * @param hrtc pointer to a RTC_HandleTypeDef structure that contains + * the configuration information for RTC. + * @retval HAL status + */ +static HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc) +{ + 8010b76: b580 push {r7, lr} + 8010b78: b084 sub sp, #16 + 8010b7a: af00 add r7, sp, #0 + 8010b7c: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 8010b7e: 2300 movs r3, #0 + 8010b80: 60fb str r3, [r7, #12] + + tickstart = HAL_GetTick(); + 8010b82: f7fc fea9 bl 800d8d8 + 8010b86: 60f8 str r0, [r7, #12] + /* Wait till RTC is in INIT state and if Time out is reached exit */ + while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) + 8010b88: e009 b.n 8010b9e + { + if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) + 8010b8a: f7fc fea5 bl 800d8d8 + 8010b8e: 4602 mov r2, r0 + 8010b90: 68fb ldr r3, [r7, #12] + 8010b92: 1ad3 subs r3, r2, r3 + 8010b94: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 8010b98: d901 bls.n 8010b9e + { + return HAL_TIMEOUT; + 8010b9a: 2303 movs r3, #3 + 8010b9c: e00f b.n 8010bbe + while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) + 8010b9e: 687b ldr r3, [r7, #4] + 8010ba0: 681b ldr r3, [r3, #0] + 8010ba2: 685b ldr r3, [r3, #4] + 8010ba4: f003 0320 and.w r3, r3, #32 + 8010ba8: 2b00 cmp r3, #0 + 8010baa: d0ee beq.n 8010b8a + } + } + + /* Disable the write protection for RTC registers */ + __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc); + 8010bac: 687b ldr r3, [r7, #4] + 8010bae: 681b ldr r3, [r3, #0] + 8010bb0: 685a ldr r2, [r3, #4] + 8010bb2: 687b ldr r3, [r7, #4] + 8010bb4: 681b ldr r3, [r3, #0] + 8010bb6: f042 0210 orr.w r2, r2, #16 + 8010bba: 605a str r2, [r3, #4] + + + return HAL_OK; + 8010bbc: 2300 movs r3, #0 +} + 8010bbe: 4618 mov r0, r3 + 8010bc0: 3710 adds r7, #16 + 8010bc2: 46bd mov sp, r7 + 8010bc4: bd80 pop {r7, pc} + +08010bc6 : + * @param hrtc pointer to a RTC_HandleTypeDef structure that contains + * the configuration information for RTC. + * @retval HAL status + */ +static HAL_StatusTypeDef RTC_ExitInitMode(RTC_HandleTypeDef *hrtc) +{ + 8010bc6: b580 push {r7, lr} + 8010bc8: b084 sub sp, #16 + 8010bca: af00 add r7, sp, #0 + 8010bcc: 6078 str r0, [r7, #4] + uint32_t tickstart = 0U; + 8010bce: 2300 movs r3, #0 + 8010bd0: 60fb str r3, [r7, #12] + + /* Disable the write protection for RTC registers */ + __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc); + 8010bd2: 687b ldr r3, [r7, #4] + 8010bd4: 681b ldr r3, [r3, #0] + 8010bd6: 685a ldr r2, [r3, #4] + 8010bd8: 687b ldr r3, [r7, #4] + 8010bda: 681b ldr r3, [r3, #0] + 8010bdc: f022 0210 bic.w r2, r2, #16 + 8010be0: 605a str r2, [r3, #4] + + tickstart = HAL_GetTick(); + 8010be2: f7fc fe79 bl 800d8d8 + 8010be6: 60f8 str r0, [r7, #12] + /* Wait till RTC is in INIT state and if Time out is reached exit */ + while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) + 8010be8: e009 b.n 8010bfe + { + if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) + 8010bea: f7fc fe75 bl 800d8d8 + 8010bee: 4602 mov r2, r0 + 8010bf0: 68fb ldr r3, [r7, #12] + 8010bf2: 1ad3 subs r3, r2, r3 + 8010bf4: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 + 8010bf8: d901 bls.n 8010bfe + { + return HAL_TIMEOUT; + 8010bfa: 2303 movs r3, #3 + 8010bfc: e007 b.n 8010c0e + while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) + 8010bfe: 687b ldr r3, [r7, #4] + 8010c00: 681b ldr r3, [r3, #0] + 8010c02: 685b ldr r3, [r3, #4] + 8010c04: f003 0320 and.w r3, r3, #32 + 8010c08: 2b00 cmp r3, #0 + 8010c0a: d0ee beq.n 8010bea + } + } + + return HAL_OK; + 8010c0c: 2300 movs r3, #0 +} + 8010c0e: 4618 mov r0, r3 + 8010c10: 3710 adds r7, #16 + 8010c12: 46bd mov sp, r7 + 8010c14: bd80 pop {r7, pc} + +08010c16 : + * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() + * @param htim TIM Base handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) +{ + 8010c16: b580 push {r7, lr} + 8010c18: b082 sub sp, #8 + 8010c1a: af00 add r7, sp, #0 + 8010c1c: 6078 str r0, [r7, #4] + /* Check the TIM handle allocation */ + if (htim == NULL) + 8010c1e: 687b ldr r3, [r7, #4] + 8010c20: 2b00 cmp r3, #0 + 8010c22: d101 bne.n 8010c28 + { + return HAL_ERROR; + 8010c24: 2301 movs r3, #1 + 8010c26: e041 b.n 8010cac + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + 8010c28: 687b ldr r3, [r7, #4] + 8010c2a: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 8010c2e: b2db uxtb r3, r3 + 8010c30: 2b00 cmp r3, #0 + 8010c32: d106 bne.n 8010c42 + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + 8010c34: 687b ldr r3, [r7, #4] + 8010c36: 2200 movs r2, #0 + 8010c38: f883 203c strb.w r2, [r3, #60] @ 0x3c + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->Base_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + HAL_TIM_Base_MspInit(htim); + 8010c3c: 6878 ldr r0, [r7, #4] + 8010c3e: f7fc fb37 bl 800d2b0 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + 8010c42: 687b ldr r3, [r7, #4] + 8010c44: 2202 movs r2, #2 + 8010c46: f883 203d strb.w r2, [r3, #61] @ 0x3d + + /* Set the Time Base configuration */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8010c4a: 687b ldr r3, [r7, #4] + 8010c4c: 681a ldr r2, [r3, #0] + 8010c4e: 687b ldr r3, [r7, #4] + 8010c50: 3304 adds r3, #4 + 8010c52: 4619 mov r1, r3 + 8010c54: 4610 mov r0, r2 + 8010c56: f000 fd77 bl 8011748 + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8010c5a: 687b ldr r3, [r7, #4] + 8010c5c: 2201 movs r2, #1 + 8010c5e: f883 2046 strb.w r2, [r3, #70] @ 0x46 + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010c62: 687b ldr r3, [r7, #4] + 8010c64: 2201 movs r2, #1 + 8010c66: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8010c6a: 687b ldr r3, [r7, #4] + 8010c6c: 2201 movs r2, #1 + 8010c6e: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8010c72: 687b ldr r3, [r7, #4] + 8010c74: 2201 movs r2, #1 + 8010c76: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 8010c7a: 687b ldr r3, [r7, #4] + 8010c7c: 2201 movs r2, #1 + 8010c7e: f883 2041 strb.w r2, [r3, #65] @ 0x41 + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010c82: 687b ldr r3, [r7, #4] + 8010c84: 2201 movs r2, #1 + 8010c86: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8010c8a: 687b ldr r3, [r7, #4] + 8010c8c: 2201 movs r2, #1 + 8010c8e: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8010c92: 687b ldr r3, [r7, #4] + 8010c94: 2201 movs r2, #1 + 8010c96: f883 2044 strb.w r2, [r3, #68] @ 0x44 + 8010c9a: 687b ldr r3, [r7, #4] + 8010c9c: 2201 movs r2, #1 + 8010c9e: f883 2045 strb.w r2, [r3, #69] @ 0x45 + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + 8010ca2: 687b ldr r3, [r7, #4] + 8010ca4: 2201 movs r2, #1 + 8010ca6: f883 203d strb.w r2, [r3, #61] @ 0x3d + + return HAL_OK; + 8010caa: 2300 movs r3, #0 +} + 8010cac: 4618 mov r0, r3 + 8010cae: 3708 adds r7, #8 + 8010cb0: 46bd mov sp, r7 + 8010cb2: bd80 pop {r7, pc} + +08010cb4 : + * Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init() + * @param htim TIM Output Compare handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) +{ + 8010cb4: b580 push {r7, lr} + 8010cb6: b082 sub sp, #8 + 8010cb8: af00 add r7, sp, #0 + 8010cba: 6078 str r0, [r7, #4] + /* Check the TIM handle allocation */ + if (htim == NULL) + 8010cbc: 687b ldr r3, [r7, #4] + 8010cbe: 2b00 cmp r3, #0 + 8010cc0: d101 bne.n 8010cc6 + { + return HAL_ERROR; + 8010cc2: 2301 movs r3, #1 + 8010cc4: e041 b.n 8010d4a + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + 8010cc6: 687b ldr r3, [r7, #4] + 8010cc8: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 8010ccc: b2db uxtb r3, r3 + 8010cce: 2b00 cmp r3, #0 + 8010cd0: d106 bne.n 8010ce0 + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + 8010cd2: 687b ldr r3, [r7, #4] + 8010cd4: 2200 movs r2, #0 + 8010cd6: f883 203c strb.w r2, [r3, #60] @ 0x3c + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->OC_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_OC_MspInit(htim); + 8010cda: 6878 ldr r0, [r7, #4] + 8010cdc: f000 f839 bl 8010d52 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + 8010ce0: 687b ldr r3, [r7, #4] + 8010ce2: 2202 movs r2, #2 + 8010ce4: f883 203d strb.w r2, [r3, #61] @ 0x3d + + /* Init the base time for the Output Compare */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8010ce8: 687b ldr r3, [r7, #4] + 8010cea: 681a ldr r2, [r3, #0] + 8010cec: 687b ldr r3, [r7, #4] + 8010cee: 3304 adds r3, #4 + 8010cf0: 4619 mov r1, r3 + 8010cf2: 4610 mov r0, r2 + 8010cf4: f000 fd28 bl 8011748 + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8010cf8: 687b ldr r3, [r7, #4] + 8010cfa: 2201 movs r2, #1 + 8010cfc: f883 2046 strb.w r2, [r3, #70] @ 0x46 + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010d00: 687b ldr r3, [r7, #4] + 8010d02: 2201 movs r2, #1 + 8010d04: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8010d08: 687b ldr r3, [r7, #4] + 8010d0a: 2201 movs r2, #1 + 8010d0c: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8010d10: 687b ldr r3, [r7, #4] + 8010d12: 2201 movs r2, #1 + 8010d14: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 8010d18: 687b ldr r3, [r7, #4] + 8010d1a: 2201 movs r2, #1 + 8010d1c: f883 2041 strb.w r2, [r3, #65] @ 0x41 + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010d20: 687b ldr r3, [r7, #4] + 8010d22: 2201 movs r2, #1 + 8010d24: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8010d28: 687b ldr r3, [r7, #4] + 8010d2a: 2201 movs r2, #1 + 8010d2c: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8010d30: 687b ldr r3, [r7, #4] + 8010d32: 2201 movs r2, #1 + 8010d34: f883 2044 strb.w r2, [r3, #68] @ 0x44 + 8010d38: 687b ldr r3, [r7, #4] + 8010d3a: 2201 movs r2, #1 + 8010d3c: f883 2045 strb.w r2, [r3, #69] @ 0x45 + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + 8010d40: 687b ldr r3, [r7, #4] + 8010d42: 2201 movs r2, #1 + 8010d44: f883 203d strb.w r2, [r3, #61] @ 0x3d + + return HAL_OK; + 8010d48: 2300 movs r3, #0 +} + 8010d4a: 4618 mov r0, r3 + 8010d4c: 3708 adds r7, #8 + 8010d4e: 46bd mov sp, r7 + 8010d50: bd80 pop {r7, pc} + +08010d52 : + * @brief Initializes the TIM Output Compare MSP. + * @param htim TIM Output Compare handle + * @retval None + */ +__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) +{ + 8010d52: b480 push {r7} + 8010d54: b083 sub sp, #12 + 8010d56: af00 add r7, sp, #0 + 8010d58: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_OC_MspInit could be implemented in the user file + */ +} + 8010d5a: bf00 nop + 8010d5c: 370c adds r7, #12 + 8010d5e: 46bd mov sp, r7 + 8010d60: bc80 pop {r7} + 8010d62: 4770 bx lr + +08010d64 : + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + 8010d64: b580 push {r7, lr} + 8010d66: b084 sub sp, #16 + 8010d68: af00 add r7, sp, #0 + 8010d6a: 6078 str r0, [r7, #4] + 8010d6c: 6039 str r1, [r7, #0] + HAL_StatusTypeDef status = HAL_OK; + 8010d6e: 2300 movs r3, #0 + 8010d70: 73fb strb r3, [r7, #15] + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 8010d72: 683b ldr r3, [r7, #0] + 8010d74: 2b00 cmp r3, #0 + 8010d76: d109 bne.n 8010d8c + 8010d78: 687b ldr r3, [r7, #4] + 8010d7a: f893 303e ldrb.w r3, [r3, #62] @ 0x3e + 8010d7e: b2db uxtb r3, r3 + 8010d80: 2b01 cmp r3, #1 + 8010d82: bf14 ite ne + 8010d84: 2301 movne r3, #1 + 8010d86: 2300 moveq r3, #0 + 8010d88: b2db uxtb r3, r3 + 8010d8a: e022 b.n 8010dd2 + 8010d8c: 683b ldr r3, [r7, #0] + 8010d8e: 2b04 cmp r3, #4 + 8010d90: d109 bne.n 8010da6 + 8010d92: 687b ldr r3, [r7, #4] + 8010d94: f893 303f ldrb.w r3, [r3, #63] @ 0x3f + 8010d98: b2db uxtb r3, r3 + 8010d9a: 2b01 cmp r3, #1 + 8010d9c: bf14 ite ne + 8010d9e: 2301 movne r3, #1 + 8010da0: 2300 moveq r3, #0 + 8010da2: b2db uxtb r3, r3 + 8010da4: e015 b.n 8010dd2 + 8010da6: 683b ldr r3, [r7, #0] + 8010da8: 2b08 cmp r3, #8 + 8010daa: d109 bne.n 8010dc0 + 8010dac: 687b ldr r3, [r7, #4] + 8010dae: f893 3040 ldrb.w r3, [r3, #64] @ 0x40 + 8010db2: b2db uxtb r3, r3 + 8010db4: 2b01 cmp r3, #1 + 8010db6: bf14 ite ne + 8010db8: 2301 movne r3, #1 + 8010dba: 2300 moveq r3, #0 + 8010dbc: b2db uxtb r3, r3 + 8010dbe: e008 b.n 8010dd2 + 8010dc0: 687b ldr r3, [r7, #4] + 8010dc2: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8010dc6: b2db uxtb r3, r3 + 8010dc8: 2b01 cmp r3, #1 + 8010dca: bf14 ite ne + 8010dcc: 2301 movne r3, #1 + 8010dce: 2300 moveq r3, #0 + 8010dd0: b2db uxtb r3, r3 + 8010dd2: 2b00 cmp r3, #0 + 8010dd4: d001 beq.n 8010dda + { + return HAL_ERROR; + 8010dd6: 2301 movs r3, #1 + 8010dd8: e0ae b.n 8010f38 + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8010dda: 683b ldr r3, [r7, #0] + 8010ddc: 2b00 cmp r3, #0 + 8010dde: d104 bne.n 8010dea + 8010de0: 687b ldr r3, [r7, #4] + 8010de2: 2202 movs r2, #2 + 8010de4: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8010de8: e013 b.n 8010e12 + 8010dea: 683b ldr r3, [r7, #0] + 8010dec: 2b04 cmp r3, #4 + 8010dee: d104 bne.n 8010dfa + 8010df0: 687b ldr r3, [r7, #4] + 8010df2: 2202 movs r2, #2 + 8010df4: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8010df8: e00b b.n 8010e12 + 8010dfa: 683b ldr r3, [r7, #0] + 8010dfc: 2b08 cmp r3, #8 + 8010dfe: d104 bne.n 8010e0a + 8010e00: 687b ldr r3, [r7, #4] + 8010e02: 2202 movs r2, #2 + 8010e04: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 8010e08: e003 b.n 8010e12 + 8010e0a: 687b ldr r3, [r7, #4] + 8010e0c: 2202 movs r2, #2 + 8010e0e: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + switch (Channel) + 8010e12: 683b ldr r3, [r7, #0] + 8010e14: 2b0c cmp r3, #12 + 8010e16: d841 bhi.n 8010e9c + 8010e18: a201 add r2, pc, #4 @ (adr r2, 8010e20 ) + 8010e1a: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8010e1e: bf00 nop + 8010e20: 08010e55 .word 0x08010e55 + 8010e24: 08010e9d .word 0x08010e9d + 8010e28: 08010e9d .word 0x08010e9d + 8010e2c: 08010e9d .word 0x08010e9d + 8010e30: 08010e67 .word 0x08010e67 + 8010e34: 08010e9d .word 0x08010e9d + 8010e38: 08010e9d .word 0x08010e9d + 8010e3c: 08010e9d .word 0x08010e9d + 8010e40: 08010e79 .word 0x08010e79 + 8010e44: 08010e9d .word 0x08010e9d + 8010e48: 08010e9d .word 0x08010e9d + 8010e4c: 08010e9d .word 0x08010e9d + 8010e50: 08010e8b .word 0x08010e8b + { + case TIM_CHANNEL_1: + { + /* Enable the TIM Capture/Compare 1 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1); + 8010e54: 687b ldr r3, [r7, #4] + 8010e56: 681b ldr r3, [r3, #0] + 8010e58: 68da ldr r2, [r3, #12] + 8010e5a: 687b ldr r3, [r7, #4] + 8010e5c: 681b ldr r3, [r3, #0] + 8010e5e: f042 0202 orr.w r2, r2, #2 + 8010e62: 60da str r2, [r3, #12] + break; + 8010e64: e01d b.n 8010ea2 + } + + case TIM_CHANNEL_2: + { + /* Enable the TIM Capture/Compare 2 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2); + 8010e66: 687b ldr r3, [r7, #4] + 8010e68: 681b ldr r3, [r3, #0] + 8010e6a: 68da ldr r2, [r3, #12] + 8010e6c: 687b ldr r3, [r7, #4] + 8010e6e: 681b ldr r3, [r3, #0] + 8010e70: f042 0204 orr.w r2, r2, #4 + 8010e74: 60da str r2, [r3, #12] + break; + 8010e76: e014 b.n 8010ea2 + } + + case TIM_CHANNEL_3: + { + /* Enable the TIM Capture/Compare 3 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3); + 8010e78: 687b ldr r3, [r7, #4] + 8010e7a: 681b ldr r3, [r3, #0] + 8010e7c: 68da ldr r2, [r3, #12] + 8010e7e: 687b ldr r3, [r7, #4] + 8010e80: 681b ldr r3, [r3, #0] + 8010e82: f042 0208 orr.w r2, r2, #8 + 8010e86: 60da str r2, [r3, #12] + break; + 8010e88: e00b b.n 8010ea2 + } + + case TIM_CHANNEL_4: + { + /* Enable the TIM Capture/Compare 4 interrupt */ + __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4); + 8010e8a: 687b ldr r3, [r7, #4] + 8010e8c: 681b ldr r3, [r3, #0] + 8010e8e: 68da ldr r2, [r3, #12] + 8010e90: 687b ldr r3, [r7, #4] + 8010e92: 681b ldr r3, [r3, #0] + 8010e94: f042 0210 orr.w r2, r2, #16 + 8010e98: 60da str r2, [r3, #12] + break; + 8010e9a: e002 b.n 8010ea2 + } + + default: + status = HAL_ERROR; + 8010e9c: 2301 movs r3, #1 + 8010e9e: 73fb strb r3, [r7, #15] + break; + 8010ea0: bf00 nop + } + + if (status == HAL_OK) + 8010ea2: 7bfb ldrb r3, [r7, #15] + 8010ea4: 2b00 cmp r3, #0 + 8010ea6: d146 bne.n 8010f36 + { + /* Enable the Output compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + 8010ea8: 687b ldr r3, [r7, #4] + 8010eaa: 681b ldr r3, [r3, #0] + 8010eac: 2201 movs r2, #1 + 8010eae: 6839 ldr r1, [r7, #0] + 8010eb0: 4618 mov r0, r3 + 8010eb2: f000 fedf bl 8011c74 + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + 8010eb6: 687b ldr r3, [r7, #4] + 8010eb8: 681b ldr r3, [r3, #0] + 8010eba: 4a21 ldr r2, [pc, #132] @ (8010f40 ) + 8010ebc: 4293 cmp r3, r2 + 8010ebe: d107 bne.n 8010ed0 + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + 8010ec0: 687b ldr r3, [r7, #4] + 8010ec2: 681b ldr r3, [r3, #0] + 8010ec4: 6c5a ldr r2, [r3, #68] @ 0x44 + 8010ec6: 687b ldr r3, [r7, #4] + 8010ec8: 681b ldr r3, [r3, #0] + 8010eca: f442 4200 orr.w r2, r2, #32768 @ 0x8000 + 8010ece: 645a str r2, [r3, #68] @ 0x44 + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8010ed0: 687b ldr r3, [r7, #4] + 8010ed2: 681b ldr r3, [r3, #0] + 8010ed4: 4a1a ldr r2, [pc, #104] @ (8010f40 ) + 8010ed6: 4293 cmp r3, r2 + 8010ed8: d013 beq.n 8010f02 + 8010eda: 687b ldr r3, [r7, #4] + 8010edc: 681b ldr r3, [r3, #0] + 8010ede: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8010ee2: d00e beq.n 8010f02 + 8010ee4: 687b ldr r3, [r7, #4] + 8010ee6: 681b ldr r3, [r3, #0] + 8010ee8: 4a16 ldr r2, [pc, #88] @ (8010f44 ) + 8010eea: 4293 cmp r3, r2 + 8010eec: d009 beq.n 8010f02 + 8010eee: 687b ldr r3, [r7, #4] + 8010ef0: 681b ldr r3, [r3, #0] + 8010ef2: 4a15 ldr r2, [pc, #84] @ (8010f48 ) + 8010ef4: 4293 cmp r3, r2 + 8010ef6: d004 beq.n 8010f02 + 8010ef8: 687b ldr r3, [r7, #4] + 8010efa: 681b ldr r3, [r3, #0] + 8010efc: 4a13 ldr r2, [pc, #76] @ (8010f4c ) + 8010efe: 4293 cmp r3, r2 + 8010f00: d111 bne.n 8010f26 + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + 8010f02: 687b ldr r3, [r7, #4] + 8010f04: 681b ldr r3, [r3, #0] + 8010f06: 689b ldr r3, [r3, #8] + 8010f08: f003 0307 and.w r3, r3, #7 + 8010f0c: 60bb str r3, [r7, #8] + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8010f0e: 68bb ldr r3, [r7, #8] + 8010f10: 2b06 cmp r3, #6 + 8010f12: d010 beq.n 8010f36 + { + __HAL_TIM_ENABLE(htim); + 8010f14: 687b ldr r3, [r7, #4] + 8010f16: 681b ldr r3, [r3, #0] + 8010f18: 681a ldr r2, [r3, #0] + 8010f1a: 687b ldr r3, [r7, #4] + 8010f1c: 681b ldr r3, [r3, #0] + 8010f1e: f042 0201 orr.w r2, r2, #1 + 8010f22: 601a str r2, [r3, #0] + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8010f24: e007 b.n 8010f36 + } + } + else + { + __HAL_TIM_ENABLE(htim); + 8010f26: 687b ldr r3, [r7, #4] + 8010f28: 681b ldr r3, [r3, #0] + 8010f2a: 681a ldr r2, [r3, #0] + 8010f2c: 687b ldr r3, [r7, #4] + 8010f2e: 681b ldr r3, [r3, #0] + 8010f30: f042 0201 orr.w r2, r2, #1 + 8010f34: 601a str r2, [r3, #0] + } + } + + /* Return function status */ + return status; + 8010f36: 7bfb ldrb r3, [r7, #15] +} + 8010f38: 4618 mov r0, r3 + 8010f3a: 3710 adds r7, #16 + 8010f3c: 46bd mov sp, r7 + 8010f3e: bd80 pop {r7, pc} + 8010f40: 40012c00 .word 0x40012c00 + 8010f44: 40000400 .word 0x40000400 + 8010f48: 40000800 .word 0x40000800 + 8010f4c: 40000c00 .word 0x40000c00 + +08010f50 : + * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() + * @param htim TIM PWM handle + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) +{ + 8010f50: b580 push {r7, lr} + 8010f52: b082 sub sp, #8 + 8010f54: af00 add r7, sp, #0 + 8010f56: 6078 str r0, [r7, #4] + /* Check the TIM handle allocation */ + if (htim == NULL) + 8010f58: 687b ldr r3, [r7, #4] + 8010f5a: 2b00 cmp r3, #0 + 8010f5c: d101 bne.n 8010f62 + { + return HAL_ERROR; + 8010f5e: 2301 movs r3, #1 + 8010f60: e041 b.n 8010fe6 + assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); + assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); + assert_param(IS_TIM_PERIOD(htim->Init.Period)); + assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); + + if (htim->State == HAL_TIM_STATE_RESET) + 8010f62: 687b ldr r3, [r7, #4] + 8010f64: f893 303d ldrb.w r3, [r3, #61] @ 0x3d + 8010f68: b2db uxtb r3, r3 + 8010f6a: 2b00 cmp r3, #0 + 8010f6c: d106 bne.n 8010f7c + { + /* Allocate lock resource and initialize it */ + htim->Lock = HAL_UNLOCKED; + 8010f6e: 687b ldr r3, [r7, #4] + 8010f70: 2200 movs r2, #0 + 8010f72: f883 203c strb.w r2, [r3, #60] @ 0x3c + } + /* Init the low level hardware : GPIO, CLOCK, NVIC */ + htim->PWM_MspInitCallback(htim); +#else + /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ + HAL_TIM_PWM_MspInit(htim); + 8010f76: 6878 ldr r0, [r7, #4] + 8010f78: f000 f839 bl 8010fee +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + + /* Set the TIM state */ + htim->State = HAL_TIM_STATE_BUSY; + 8010f7c: 687b ldr r3, [r7, #4] + 8010f7e: 2202 movs r2, #2 + 8010f80: f883 203d strb.w r2, [r3, #61] @ 0x3d + + /* Init the base time for the PWM */ + TIM_Base_SetConfig(htim->Instance, &htim->Init); + 8010f84: 687b ldr r3, [r7, #4] + 8010f86: 681a ldr r2, [r3, #0] + 8010f88: 687b ldr r3, [r7, #4] + 8010f8a: 3304 adds r3, #4 + 8010f8c: 4619 mov r1, r3 + 8010f8e: 4610 mov r0, r2 + 8010f90: f000 fbda bl 8011748 + + /* Initialize the DMA burst operation state */ + htim->DMABurstState = HAL_DMA_BURST_STATE_READY; + 8010f94: 687b ldr r3, [r7, #4] + 8010f96: 2201 movs r2, #1 + 8010f98: f883 2046 strb.w r2, [r3, #70] @ 0x46 + + /* Initialize the TIM channels state */ + TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010f9c: 687b ldr r3, [r7, #4] + 8010f9e: 2201 movs r2, #1 + 8010fa0: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8010fa4: 687b ldr r3, [r7, #4] + 8010fa6: 2201 movs r2, #1 + 8010fa8: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8010fac: 687b ldr r3, [r7, #4] + 8010fae: 2201 movs r2, #1 + 8010fb0: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 8010fb4: 687b ldr r3, [r7, #4] + 8010fb6: 2201 movs r2, #1 + 8010fb8: f883 2041 strb.w r2, [r3, #65] @ 0x41 + TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); + 8010fbc: 687b ldr r3, [r7, #4] + 8010fbe: 2201 movs r2, #1 + 8010fc0: f883 2042 strb.w r2, [r3, #66] @ 0x42 + 8010fc4: 687b ldr r3, [r7, #4] + 8010fc6: 2201 movs r2, #1 + 8010fc8: f883 2043 strb.w r2, [r3, #67] @ 0x43 + 8010fcc: 687b ldr r3, [r7, #4] + 8010fce: 2201 movs r2, #1 + 8010fd0: f883 2044 strb.w r2, [r3, #68] @ 0x44 + 8010fd4: 687b ldr r3, [r7, #4] + 8010fd6: 2201 movs r2, #1 + 8010fd8: f883 2045 strb.w r2, [r3, #69] @ 0x45 + + /* Initialize the TIM state*/ + htim->State = HAL_TIM_STATE_READY; + 8010fdc: 687b ldr r3, [r7, #4] + 8010fde: 2201 movs r2, #1 + 8010fe0: f883 203d strb.w r2, [r3, #61] @ 0x3d + + return HAL_OK; + 8010fe4: 2300 movs r3, #0 +} + 8010fe6: 4618 mov r0, r3 + 8010fe8: 3708 adds r7, #8 + 8010fea: 46bd mov sp, r7 + 8010fec: bd80 pop {r7, pc} + +08010fee : + * @brief Initializes the TIM PWM MSP. + * @param htim TIM PWM handle + * @retval None + */ +__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) +{ + 8010fee: b480 push {r7} + 8010ff0: b083 sub sp, #12 + 8010ff2: af00 add r7, sp, #0 + 8010ff4: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_MspInit could be implemented in the user file + */ +} + 8010ff6: bf00 nop + 8010ff8: 370c adds r7, #12 + 8010ffa: 46bd mov sp, r7 + 8010ffc: bc80 pop {r7} + 8010ffe: 4770 bx lr + +08011000 : + * @arg TIM_CHANNEL_3: TIM Channel 3 selected + * @arg TIM_CHANNEL_4: TIM Channel 4 selected + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) +{ + 8011000: b580 push {r7, lr} + 8011002: b084 sub sp, #16 + 8011004: af00 add r7, sp, #0 + 8011006: 6078 str r0, [r7, #4] + 8011008: 6039 str r1, [r7, #0] + + /* Check the parameters */ + assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); + + /* Check the TIM channel state */ + if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) + 801100a: 683b ldr r3, [r7, #0] + 801100c: 2b00 cmp r3, #0 + 801100e: d109 bne.n 8011024 + 8011010: 687b ldr r3, [r7, #4] + 8011012: f893 303e ldrb.w r3, [r3, #62] @ 0x3e + 8011016: b2db uxtb r3, r3 + 8011018: 2b01 cmp r3, #1 + 801101a: bf14 ite ne + 801101c: 2301 movne r3, #1 + 801101e: 2300 moveq r3, #0 + 8011020: b2db uxtb r3, r3 + 8011022: e022 b.n 801106a + 8011024: 683b ldr r3, [r7, #0] + 8011026: 2b04 cmp r3, #4 + 8011028: d109 bne.n 801103e + 801102a: 687b ldr r3, [r7, #4] + 801102c: f893 303f ldrb.w r3, [r3, #63] @ 0x3f + 8011030: b2db uxtb r3, r3 + 8011032: 2b01 cmp r3, #1 + 8011034: bf14 ite ne + 8011036: 2301 movne r3, #1 + 8011038: 2300 moveq r3, #0 + 801103a: b2db uxtb r3, r3 + 801103c: e015 b.n 801106a + 801103e: 683b ldr r3, [r7, #0] + 8011040: 2b08 cmp r3, #8 + 8011042: d109 bne.n 8011058 + 8011044: 687b ldr r3, [r7, #4] + 8011046: f893 3040 ldrb.w r3, [r3, #64] @ 0x40 + 801104a: b2db uxtb r3, r3 + 801104c: 2b01 cmp r3, #1 + 801104e: bf14 ite ne + 8011050: 2301 movne r3, #1 + 8011052: 2300 moveq r3, #0 + 8011054: b2db uxtb r3, r3 + 8011056: e008 b.n 801106a + 8011058: 687b ldr r3, [r7, #4] + 801105a: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 801105e: b2db uxtb r3, r3 + 8011060: 2b01 cmp r3, #1 + 8011062: bf14 ite ne + 8011064: 2301 movne r3, #1 + 8011066: 2300 moveq r3, #0 + 8011068: b2db uxtb r3, r3 + 801106a: 2b00 cmp r3, #0 + 801106c: d001 beq.n 8011072 + { + return HAL_ERROR; + 801106e: 2301 movs r3, #1 + 8011070: e063 b.n 801113a + } + + /* Set the TIM channel state */ + TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); + 8011072: 683b ldr r3, [r7, #0] + 8011074: 2b00 cmp r3, #0 + 8011076: d104 bne.n 8011082 + 8011078: 687b ldr r3, [r7, #4] + 801107a: 2202 movs r2, #2 + 801107c: f883 203e strb.w r2, [r3, #62] @ 0x3e + 8011080: e013 b.n 80110aa + 8011082: 683b ldr r3, [r7, #0] + 8011084: 2b04 cmp r3, #4 + 8011086: d104 bne.n 8011092 + 8011088: 687b ldr r3, [r7, #4] + 801108a: 2202 movs r2, #2 + 801108c: f883 203f strb.w r2, [r3, #63] @ 0x3f + 8011090: e00b b.n 80110aa + 8011092: 683b ldr r3, [r7, #0] + 8011094: 2b08 cmp r3, #8 + 8011096: d104 bne.n 80110a2 + 8011098: 687b ldr r3, [r7, #4] + 801109a: 2202 movs r2, #2 + 801109c: f883 2040 strb.w r2, [r3, #64] @ 0x40 + 80110a0: e003 b.n 80110aa + 80110a2: 687b ldr r3, [r7, #4] + 80110a4: 2202 movs r2, #2 + 80110a6: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + /* Enable the Capture compare channel */ + TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); + 80110aa: 687b ldr r3, [r7, #4] + 80110ac: 681b ldr r3, [r3, #0] + 80110ae: 2201 movs r2, #1 + 80110b0: 6839 ldr r1, [r7, #0] + 80110b2: 4618 mov r0, r3 + 80110b4: f000 fdde bl 8011c74 + + if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) + 80110b8: 687b ldr r3, [r7, #4] + 80110ba: 681b ldr r3, [r3, #0] + 80110bc: 4a21 ldr r2, [pc, #132] @ (8011144 ) + 80110be: 4293 cmp r3, r2 + 80110c0: d107 bne.n 80110d2 + { + /* Enable the main output */ + __HAL_TIM_MOE_ENABLE(htim); + 80110c2: 687b ldr r3, [r7, #4] + 80110c4: 681b ldr r3, [r3, #0] + 80110c6: 6c5a ldr r2, [r3, #68] @ 0x44 + 80110c8: 687b ldr r3, [r7, #4] + 80110ca: 681b ldr r3, [r3, #0] + 80110cc: f442 4200 orr.w r2, r2, #32768 @ 0x8000 + 80110d0: 645a str r2, [r3, #68] @ 0x44 + } + + /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 80110d2: 687b ldr r3, [r7, #4] + 80110d4: 681b ldr r3, [r3, #0] + 80110d6: 4a1b ldr r2, [pc, #108] @ (8011144 ) + 80110d8: 4293 cmp r3, r2 + 80110da: d013 beq.n 8011104 + 80110dc: 687b ldr r3, [r7, #4] + 80110de: 681b ldr r3, [r3, #0] + 80110e0: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 80110e4: d00e beq.n 8011104 + 80110e6: 687b ldr r3, [r7, #4] + 80110e8: 681b ldr r3, [r3, #0] + 80110ea: 4a17 ldr r2, [pc, #92] @ (8011148 ) + 80110ec: 4293 cmp r3, r2 + 80110ee: d009 beq.n 8011104 + 80110f0: 687b ldr r3, [r7, #4] + 80110f2: 681b ldr r3, [r3, #0] + 80110f4: 4a15 ldr r2, [pc, #84] @ (801114c ) + 80110f6: 4293 cmp r3, r2 + 80110f8: d004 beq.n 8011104 + 80110fa: 687b ldr r3, [r7, #4] + 80110fc: 681b ldr r3, [r3, #0] + 80110fe: 4a14 ldr r2, [pc, #80] @ (8011150 ) + 8011100: 4293 cmp r3, r2 + 8011102: d111 bne.n 8011128 + { + tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; + 8011104: 687b ldr r3, [r7, #4] + 8011106: 681b ldr r3, [r3, #0] + 8011108: 689b ldr r3, [r3, #8] + 801110a: f003 0307 and.w r3, r3, #7 + 801110e: 60fb str r3, [r7, #12] + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8011110: 68fb ldr r3, [r7, #12] + 8011112: 2b06 cmp r3, #6 + 8011114: d010 beq.n 8011138 + { + __HAL_TIM_ENABLE(htim); + 8011116: 687b ldr r3, [r7, #4] + 8011118: 681b ldr r3, [r3, #0] + 801111a: 681a ldr r2, [r3, #0] + 801111c: 687b ldr r3, [r7, #4] + 801111e: 681b ldr r3, [r3, #0] + 8011120: f042 0201 orr.w r2, r2, #1 + 8011124: 601a str r2, [r3, #0] + if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) + 8011126: e007 b.n 8011138 + } + } + else + { + __HAL_TIM_ENABLE(htim); + 8011128: 687b ldr r3, [r7, #4] + 801112a: 681b ldr r3, [r3, #0] + 801112c: 681a ldr r2, [r3, #0] + 801112e: 687b ldr r3, [r7, #4] + 8011130: 681b ldr r3, [r3, #0] + 8011132: f042 0201 orr.w r2, r2, #1 + 8011136: 601a str r2, [r3, #0] + } + + /* Return function status */ + return HAL_OK; + 8011138: 2300 movs r3, #0 +} + 801113a: 4618 mov r0, r3 + 801113c: 3710 adds r7, #16 + 801113e: 46bd mov sp, r7 + 8011140: bd80 pop {r7, pc} + 8011142: bf00 nop + 8011144: 40012c00 .word 0x40012c00 + 8011148: 40000400 .word 0x40000400 + 801114c: 40000800 .word 0x40000800 + 8011150: 40000c00 .word 0x40000c00 + +08011154 : + * @brief This function handles TIM interrupts requests. + * @param htim TIM handle + * @retval None + */ +void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) +{ + 8011154: b580 push {r7, lr} + 8011156: b084 sub sp, #16 + 8011158: af00 add r7, sp, #0 + 801115a: 6078 str r0, [r7, #4] + uint32_t itsource = htim->Instance->DIER; + 801115c: 687b ldr r3, [r7, #4] + 801115e: 681b ldr r3, [r3, #0] + 8011160: 68db ldr r3, [r3, #12] + 8011162: 60fb str r3, [r7, #12] + uint32_t itflag = htim->Instance->SR; + 8011164: 687b ldr r3, [r7, #4] + 8011166: 681b ldr r3, [r3, #0] + 8011168: 691b ldr r3, [r3, #16] + 801116a: 60bb str r3, [r7, #8] + + /* Capture compare 1 event */ + if ((itflag & (TIM_FLAG_CC1)) == (TIM_FLAG_CC1)) + 801116c: 68bb ldr r3, [r7, #8] + 801116e: f003 0302 and.w r3, r3, #2 + 8011172: 2b00 cmp r3, #0 + 8011174: d020 beq.n 80111b8 + { + if ((itsource & (TIM_IT_CC1)) == (TIM_IT_CC1)) + 8011176: 68fb ldr r3, [r7, #12] + 8011178: f003 0302 and.w r3, r3, #2 + 801117c: 2b00 cmp r3, #0 + 801117e: d01b beq.n 80111b8 + { + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC1); + 8011180: 687b ldr r3, [r7, #4] + 8011182: 681b ldr r3, [r3, #0] + 8011184: f06f 0202 mvn.w r2, #2 + 8011188: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1; + 801118a: 687b ldr r3, [r7, #4] + 801118c: 2201 movs r2, #1 + 801118e: 771a strb r2, [r3, #28] + + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) + 8011190: 687b ldr r3, [r7, #4] + 8011192: 681b ldr r3, [r3, #0] + 8011194: 699b ldr r3, [r3, #24] + 8011196: f003 0303 and.w r3, r3, #3 + 801119a: 2b00 cmp r3, #0 + 801119c: d003 beq.n 80111a6 + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); + 801119e: 6878 ldr r0, [r7, #4] + 80111a0: f000 fab6 bl 8011710 + 80111a4: e005 b.n 80111b2 + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + 80111a6: 6878 ldr r0, [r7, #4] + 80111a8: f7f8 ffec bl 800a184 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 80111ac: 6878 ldr r0, [r7, #4] + 80111ae: f000 fab8 bl 8011722 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 80111b2: 687b ldr r3, [r7, #4] + 80111b4: 2200 movs r2, #0 + 80111b6: 771a strb r2, [r3, #28] + } + } + } + /* Capture compare 2 event */ + if ((itflag & (TIM_FLAG_CC2)) == (TIM_FLAG_CC2)) + 80111b8: 68bb ldr r3, [r7, #8] + 80111ba: f003 0304 and.w r3, r3, #4 + 80111be: 2b00 cmp r3, #0 + 80111c0: d020 beq.n 8011204 + { + if ((itsource & (TIM_IT_CC2)) == (TIM_IT_CC2)) + 80111c2: 68fb ldr r3, [r7, #12] + 80111c4: f003 0304 and.w r3, r3, #4 + 80111c8: 2b00 cmp r3, #0 + 80111ca: d01b beq.n 8011204 + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC2); + 80111cc: 687b ldr r3, [r7, #4] + 80111ce: 681b ldr r3, [r3, #0] + 80111d0: f06f 0204 mvn.w r2, #4 + 80111d4: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2; + 80111d6: 687b ldr r3, [r7, #4] + 80111d8: 2202 movs r2, #2 + 80111da: 771a strb r2, [r3, #28] + /* Input capture event */ + if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) + 80111dc: 687b ldr r3, [r7, #4] + 80111de: 681b ldr r3, [r3, #0] + 80111e0: 699b ldr r3, [r3, #24] + 80111e2: f403 7340 and.w r3, r3, #768 @ 0x300 + 80111e6: 2b00 cmp r3, #0 + 80111e8: d003 beq.n 80111f2 + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); + 80111ea: 6878 ldr r0, [r7, #4] + 80111ec: f000 fa90 bl 8011710 + 80111f0: e005 b.n 80111fe + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + 80111f2: 6878 ldr r0, [r7, #4] + 80111f4: f7f8 ffc6 bl 800a184 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 80111f8: 6878 ldr r0, [r7, #4] + 80111fa: f000 fa92 bl 8011722 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 80111fe: 687b ldr r3, [r7, #4] + 8011200: 2200 movs r2, #0 + 8011202: 771a strb r2, [r3, #28] + } + } + /* Capture compare 3 event */ + if ((itflag & (TIM_FLAG_CC3)) == (TIM_FLAG_CC3)) + 8011204: 68bb ldr r3, [r7, #8] + 8011206: f003 0308 and.w r3, r3, #8 + 801120a: 2b00 cmp r3, #0 + 801120c: d020 beq.n 8011250 + { + if ((itsource & (TIM_IT_CC3)) == (TIM_IT_CC3)) + 801120e: 68fb ldr r3, [r7, #12] + 8011210: f003 0308 and.w r3, r3, #8 + 8011214: 2b00 cmp r3, #0 + 8011216: d01b beq.n 8011250 + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC3); + 8011218: 687b ldr r3, [r7, #4] + 801121a: 681b ldr r3, [r3, #0] + 801121c: f06f 0208 mvn.w r2, #8 + 8011220: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3; + 8011222: 687b ldr r3, [r7, #4] + 8011224: 2204 movs r2, #4 + 8011226: 771a strb r2, [r3, #28] + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) + 8011228: 687b ldr r3, [r7, #4] + 801122a: 681b ldr r3, [r3, #0] + 801122c: 69db ldr r3, [r3, #28] + 801122e: f003 0303 and.w r3, r3, #3 + 8011232: 2b00 cmp r3, #0 + 8011234: d003 beq.n 801123e + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); + 8011236: 6878 ldr r0, [r7, #4] + 8011238: f000 fa6a bl 8011710 + 801123c: e005 b.n 801124a + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + 801123e: 6878 ldr r0, [r7, #4] + 8011240: f7f8 ffa0 bl 800a184 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 8011244: 6878 ldr r0, [r7, #4] + 8011246: f000 fa6c bl 8011722 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 801124a: 687b ldr r3, [r7, #4] + 801124c: 2200 movs r2, #0 + 801124e: 771a strb r2, [r3, #28] + } + } + /* Capture compare 4 event */ + if ((itflag & (TIM_FLAG_CC4)) == (TIM_FLAG_CC4)) + 8011250: 68bb ldr r3, [r7, #8] + 8011252: f003 0310 and.w r3, r3, #16 + 8011256: 2b00 cmp r3, #0 + 8011258: d020 beq.n 801129c + { + if ((itsource & (TIM_IT_CC4)) == (TIM_IT_CC4)) + 801125a: 68fb ldr r3, [r7, #12] + 801125c: f003 0310 and.w r3, r3, #16 + 8011260: 2b00 cmp r3, #0 + 8011262: d01b beq.n 801129c + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_CC4); + 8011264: 687b ldr r3, [r7, #4] + 8011266: 681b ldr r3, [r3, #0] + 8011268: f06f 0210 mvn.w r2, #16 + 801126c: 611a str r2, [r3, #16] + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4; + 801126e: 687b ldr r3, [r7, #4] + 8011270: 2208 movs r2, #8 + 8011272: 771a strb r2, [r3, #28] + /* Input capture event */ + if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) + 8011274: 687b ldr r3, [r7, #4] + 8011276: 681b ldr r3, [r3, #0] + 8011278: 69db ldr r3, [r3, #28] + 801127a: f403 7340 and.w r3, r3, #768 @ 0x300 + 801127e: 2b00 cmp r3, #0 + 8011280: d003 beq.n 801128a + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->IC_CaptureCallback(htim); +#else + HAL_TIM_IC_CaptureCallback(htim); + 8011282: 6878 ldr r0, [r7, #4] + 8011284: f000 fa44 bl 8011710 + 8011288: e005 b.n 8011296 + { +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->OC_DelayElapsedCallback(htim); + htim->PWM_PulseFinishedCallback(htim); +#else + HAL_TIM_OC_DelayElapsedCallback(htim); + 801128a: 6878 ldr r0, [r7, #4] + 801128c: f7f8 ff7a bl 800a184 + HAL_TIM_PWM_PulseFinishedCallback(htim); + 8011290: 6878 ldr r0, [r7, #4] + 8011292: f000 fa46 bl 8011722 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED; + 8011296: 687b ldr r3, [r7, #4] + 8011298: 2200 movs r2, #0 + 801129a: 771a strb r2, [r3, #28] + } + } + /* TIM Update event */ + if ((itflag & (TIM_FLAG_UPDATE)) == (TIM_FLAG_UPDATE)) + 801129c: 68bb ldr r3, [r7, #8] + 801129e: f003 0301 and.w r3, r3, #1 + 80112a2: 2b00 cmp r3, #0 + 80112a4: d00c beq.n 80112c0 + { + if ((itsource & (TIM_IT_UPDATE)) == (TIM_IT_UPDATE)) + 80112a6: 68fb ldr r3, [r7, #12] + 80112a8: f003 0301 and.w r3, r3, #1 + 80112ac: 2b00 cmp r3, #0 + 80112ae: d007 beq.n 80112c0 + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_UPDATE); + 80112b0: 687b ldr r3, [r7, #4] + 80112b2: 681b ldr r3, [r3, #0] + 80112b4: f06f 0201 mvn.w r2, #1 + 80112b8: 611a str r2, [r3, #16] +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->PeriodElapsedCallback(htim); +#else + HAL_TIM_PeriodElapsedCallback(htim); + 80112ba: 6878 ldr r0, [r7, #4] + 80112bc: f000 fa1f bl 80116fe +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Break input event */ + if ((itflag & (TIM_FLAG_BREAK)) == (TIM_FLAG_BREAK)) + 80112c0: 68bb ldr r3, [r7, #8] + 80112c2: f003 0380 and.w r3, r3, #128 @ 0x80 + 80112c6: 2b00 cmp r3, #0 + 80112c8: d00c beq.n 80112e4 + { + if ((itsource & (TIM_IT_BREAK)) == (TIM_IT_BREAK)) + 80112ca: 68fb ldr r3, [r7, #12] + 80112cc: f003 0380 and.w r3, r3, #128 @ 0x80 + 80112d0: 2b00 cmp r3, #0 + 80112d2: d007 beq.n 80112e4 + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_BREAK); + 80112d4: 687b ldr r3, [r7, #4] + 80112d6: 681b ldr r3, [r3, #0] + 80112d8: f06f 0280 mvn.w r2, #128 @ 0x80 + 80112dc: 611a str r2, [r3, #16] +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->BreakCallback(htim); +#else + HAL_TIMEx_BreakCallback(htim); + 80112de: 6878 ldr r0, [r7, #4] + 80112e0: f000 fd5b bl 8011d9a +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM Trigger detection event */ + if ((itflag & (TIM_FLAG_TRIGGER)) == (TIM_FLAG_TRIGGER)) + 80112e4: 68bb ldr r3, [r7, #8] + 80112e6: f003 0340 and.w r3, r3, #64 @ 0x40 + 80112ea: 2b00 cmp r3, #0 + 80112ec: d00c beq.n 8011308 + { + if ((itsource & (TIM_IT_TRIGGER)) == (TIM_IT_TRIGGER)) + 80112ee: 68fb ldr r3, [r7, #12] + 80112f0: f003 0340 and.w r3, r3, #64 @ 0x40 + 80112f4: 2b00 cmp r3, #0 + 80112f6: d007 beq.n 8011308 + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_TRIGGER); + 80112f8: 687b ldr r3, [r7, #4] + 80112fa: 681b ldr r3, [r3, #0] + 80112fc: f06f 0240 mvn.w r2, #64 @ 0x40 + 8011300: 611a str r2, [r3, #16] +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->TriggerCallback(htim); +#else + HAL_TIM_TriggerCallback(htim); + 8011302: 6878 ldr r0, [r7, #4] + 8011304: f000 fa16 bl 8011734 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } + /* TIM commutation event */ + if ((itflag & (TIM_FLAG_COM)) == (TIM_FLAG_COM)) + 8011308: 68bb ldr r3, [r7, #8] + 801130a: f003 0320 and.w r3, r3, #32 + 801130e: 2b00 cmp r3, #0 + 8011310: d00c beq.n 801132c + { + if ((itsource & (TIM_IT_COM)) == (TIM_IT_COM)) + 8011312: 68fb ldr r3, [r7, #12] + 8011314: f003 0320 and.w r3, r3, #32 + 8011318: 2b00 cmp r3, #0 + 801131a: d007 beq.n 801132c + { + __HAL_TIM_CLEAR_FLAG(htim, TIM_FLAG_COM); + 801131c: 687b ldr r3, [r7, #4] + 801131e: 681b ldr r3, [r3, #0] + 8011320: f06f 0220 mvn.w r2, #32 + 8011324: 611a str r2, [r3, #16] +#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1) + htim->CommutationCallback(htim); +#else + HAL_TIMEx_CommutCallback(htim); + 8011326: 6878 ldr r0, [r7, #4] + 8011328: f000 fd2e bl 8011d88 +#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ + } + } +} + 801132c: bf00 nop + 801132e: 3710 adds r7, #16 + 8011330: 46bd mov sp, r7 + 8011332: bd80 pop {r7, pc} + +08011334 : + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, + const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + 8011334: b580 push {r7, lr} + 8011336: b086 sub sp, #24 + 8011338: af00 add r7, sp, #0 + 801133a: 60f8 str r0, [r7, #12] + 801133c: 60b9 str r1, [r7, #8] + 801133e: 607a str r2, [r7, #4] + HAL_StatusTypeDef status = HAL_OK; + 8011340: 2300 movs r3, #0 + 8011342: 75fb strb r3, [r7, #23] + assert_param(IS_TIM_CHANNELS(Channel)); + assert_param(IS_TIM_OC_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + + /* Process Locked */ + __HAL_LOCK(htim); + 8011344: 68fb ldr r3, [r7, #12] + 8011346: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 801134a: 2b01 cmp r3, #1 + 801134c: d101 bne.n 8011352 + 801134e: 2302 movs r3, #2 + 8011350: e048 b.n 80113e4 + 8011352: 68fb ldr r3, [r7, #12] + 8011354: 2201 movs r2, #1 + 8011356: f883 203c strb.w r2, [r3, #60] @ 0x3c + + switch (Channel) + 801135a: 687b ldr r3, [r7, #4] + 801135c: 2b0c cmp r3, #12 + 801135e: d839 bhi.n 80113d4 + 8011360: a201 add r2, pc, #4 @ (adr r2, 8011368 ) + 8011362: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8011366: bf00 nop + 8011368: 0801139d .word 0x0801139d + 801136c: 080113d5 .word 0x080113d5 + 8011370: 080113d5 .word 0x080113d5 + 8011374: 080113d5 .word 0x080113d5 + 8011378: 080113ab .word 0x080113ab + 801137c: 080113d5 .word 0x080113d5 + 8011380: 080113d5 .word 0x080113d5 + 8011384: 080113d5 .word 0x080113d5 + 8011388: 080113b9 .word 0x080113b9 + 801138c: 080113d5 .word 0x080113d5 + 8011390: 080113d5 .word 0x080113d5 + 8011394: 080113d5 .word 0x080113d5 + 8011398: 080113c7 .word 0x080113c7 + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 1 in Output Compare */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + 801139c: 68fb ldr r3, [r7, #12] + 801139e: 681b ldr r3, [r3, #0] + 80113a0: 68b9 ldr r1, [r7, #8] + 80113a2: 4618 mov r0, r3 + 80113a4: f000 fa48 bl 8011838 + break; + 80113a8: e017 b.n 80113da + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 2 in Output Compare */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + 80113aa: 68fb ldr r3, [r7, #12] + 80113ac: 681b ldr r3, [r3, #0] + 80113ae: 68b9 ldr r1, [r7, #8] + 80113b0: 4618 mov r0, r3 + 80113b2: f000 faa7 bl 8011904 + break; + 80113b6: e010 b.n 80113da + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 3 in Output Compare */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + 80113b8: 68fb ldr r3, [r7, #12] + 80113ba: 681b ldr r3, [r3, #0] + 80113bc: 68b9 ldr r1, [r7, #8] + 80113be: 4618 mov r0, r3 + 80113c0: f000 fb0a bl 80119d8 + break; + 80113c4: e009 b.n 80113da + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the TIM Channel 4 in Output Compare */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + 80113c6: 68fb ldr r3, [r7, #12] + 80113c8: 681b ldr r3, [r3, #0] + 80113ca: 68b9 ldr r1, [r7, #8] + 80113cc: 4618 mov r0, r3 + 80113ce: f000 fb6d bl 8011aac + break; + 80113d2: e002 b.n 80113da + } + + default: + status = HAL_ERROR; + 80113d4: 2301 movs r3, #1 + 80113d6: 75fb strb r3, [r7, #23] + break; + 80113d8: bf00 nop + } + + __HAL_UNLOCK(htim); + 80113da: 68fb ldr r3, [r7, #12] + 80113dc: 2200 movs r2, #0 + 80113de: f883 203c strb.w r2, [r3, #60] @ 0x3c + + return status; + 80113e2: 7dfb ldrb r3, [r7, #23] +} + 80113e4: 4618 mov r0, r3 + 80113e6: 3718 adds r7, #24 + 80113e8: 46bd mov sp, r7 + 80113ea: bd80 pop {r7, pc} + +080113ec : + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, + const TIM_OC_InitTypeDef *sConfig, + uint32_t Channel) +{ + 80113ec: b580 push {r7, lr} + 80113ee: b086 sub sp, #24 + 80113f0: af00 add r7, sp, #0 + 80113f2: 60f8 str r0, [r7, #12] + 80113f4: 60b9 str r1, [r7, #8] + 80113f6: 607a str r2, [r7, #4] + HAL_StatusTypeDef status = HAL_OK; + 80113f8: 2300 movs r3, #0 + 80113fa: 75fb strb r3, [r7, #23] + assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); + assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); + assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); + + /* Process Locked */ + __HAL_LOCK(htim); + 80113fc: 68fb ldr r3, [r7, #12] + 80113fe: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8011402: 2b01 cmp r3, #1 + 8011404: d101 bne.n 801140a + 8011406: 2302 movs r3, #2 + 8011408: e0ae b.n 8011568 + 801140a: 68fb ldr r3, [r7, #12] + 801140c: 2201 movs r2, #1 + 801140e: f883 203c strb.w r2, [r3, #60] @ 0x3c + + switch (Channel) + 8011412: 687b ldr r3, [r7, #4] + 8011414: 2b0c cmp r3, #12 + 8011416: f200 809f bhi.w 8011558 + 801141a: a201 add r2, pc, #4 @ (adr r2, 8011420 ) + 801141c: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8011420: 08011455 .word 0x08011455 + 8011424: 08011559 .word 0x08011559 + 8011428: 08011559 .word 0x08011559 + 801142c: 08011559 .word 0x08011559 + 8011430: 08011495 .word 0x08011495 + 8011434: 08011559 .word 0x08011559 + 8011438: 08011559 .word 0x08011559 + 801143c: 08011559 .word 0x08011559 + 8011440: 080114d7 .word 0x080114d7 + 8011444: 08011559 .word 0x08011559 + 8011448: 08011559 .word 0x08011559 + 801144c: 08011559 .word 0x08011559 + 8011450: 08011517 .word 0x08011517 + { + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); + + /* Configure the Channel 1 in PWM mode */ + TIM_OC1_SetConfig(htim->Instance, sConfig); + 8011454: 68fb ldr r3, [r7, #12] + 8011456: 681b ldr r3, [r3, #0] + 8011458: 68b9 ldr r1, [r7, #8] + 801145a: 4618 mov r0, r3 + 801145c: f000 f9ec bl 8011838 + + /* Set the Preload enable bit for channel1 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; + 8011460: 68fb ldr r3, [r7, #12] + 8011462: 681b ldr r3, [r3, #0] + 8011464: 699a ldr r2, [r3, #24] + 8011466: 68fb ldr r3, [r7, #12] + 8011468: 681b ldr r3, [r3, #0] + 801146a: f042 0208 orr.w r2, r2, #8 + 801146e: 619a str r2, [r3, #24] + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; + 8011470: 68fb ldr r3, [r7, #12] + 8011472: 681b ldr r3, [r3, #0] + 8011474: 699a ldr r2, [r3, #24] + 8011476: 68fb ldr r3, [r7, #12] + 8011478: 681b ldr r3, [r3, #0] + 801147a: f022 0204 bic.w r2, r2, #4 + 801147e: 619a str r2, [r3, #24] + htim->Instance->CCMR1 |= sConfig->OCFastMode; + 8011480: 68fb ldr r3, [r7, #12] + 8011482: 681b ldr r3, [r3, #0] + 8011484: 6999 ldr r1, [r3, #24] + 8011486: 68bb ldr r3, [r7, #8] + 8011488: 691a ldr r2, [r3, #16] + 801148a: 68fb ldr r3, [r7, #12] + 801148c: 681b ldr r3, [r3, #0] + 801148e: 430a orrs r2, r1 + 8011490: 619a str r2, [r3, #24] + break; + 8011492: e064 b.n 801155e + { + /* Check the parameters */ + assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); + + /* Configure the Channel 2 in PWM mode */ + TIM_OC2_SetConfig(htim->Instance, sConfig); + 8011494: 68fb ldr r3, [r7, #12] + 8011496: 681b ldr r3, [r3, #0] + 8011498: 68b9 ldr r1, [r7, #8] + 801149a: 4618 mov r0, r3 + 801149c: f000 fa32 bl 8011904 + + /* Set the Preload enable bit for channel2 */ + htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; + 80114a0: 68fb ldr r3, [r7, #12] + 80114a2: 681b ldr r3, [r3, #0] + 80114a4: 699a ldr r2, [r3, #24] + 80114a6: 68fb ldr r3, [r7, #12] + 80114a8: 681b ldr r3, [r3, #0] + 80114aa: f442 6200 orr.w r2, r2, #2048 @ 0x800 + 80114ae: 619a str r2, [r3, #24] + + /* Configure the Output Fast mode */ + htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; + 80114b0: 68fb ldr r3, [r7, #12] + 80114b2: 681b ldr r3, [r3, #0] + 80114b4: 699a ldr r2, [r3, #24] + 80114b6: 68fb ldr r3, [r7, #12] + 80114b8: 681b ldr r3, [r3, #0] + 80114ba: f422 6280 bic.w r2, r2, #1024 @ 0x400 + 80114be: 619a str r2, [r3, #24] + htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; + 80114c0: 68fb ldr r3, [r7, #12] + 80114c2: 681b ldr r3, [r3, #0] + 80114c4: 6999 ldr r1, [r3, #24] + 80114c6: 68bb ldr r3, [r7, #8] + 80114c8: 691b ldr r3, [r3, #16] + 80114ca: 021a lsls r2, r3, #8 + 80114cc: 68fb ldr r3, [r7, #12] + 80114ce: 681b ldr r3, [r3, #0] + 80114d0: 430a orrs r2, r1 + 80114d2: 619a str r2, [r3, #24] + break; + 80114d4: e043 b.n 801155e + { + /* Check the parameters */ + assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); + + /* Configure the Channel 3 in PWM mode */ + TIM_OC3_SetConfig(htim->Instance, sConfig); + 80114d6: 68fb ldr r3, [r7, #12] + 80114d8: 681b ldr r3, [r3, #0] + 80114da: 68b9 ldr r1, [r7, #8] + 80114dc: 4618 mov r0, r3 + 80114de: f000 fa7b bl 80119d8 + + /* Set the Preload enable bit for channel3 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; + 80114e2: 68fb ldr r3, [r7, #12] + 80114e4: 681b ldr r3, [r3, #0] + 80114e6: 69da ldr r2, [r3, #28] + 80114e8: 68fb ldr r3, [r7, #12] + 80114ea: 681b ldr r3, [r3, #0] + 80114ec: f042 0208 orr.w r2, r2, #8 + 80114f0: 61da str r2, [r3, #28] + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; + 80114f2: 68fb ldr r3, [r7, #12] + 80114f4: 681b ldr r3, [r3, #0] + 80114f6: 69da ldr r2, [r3, #28] + 80114f8: 68fb ldr r3, [r7, #12] + 80114fa: 681b ldr r3, [r3, #0] + 80114fc: f022 0204 bic.w r2, r2, #4 + 8011500: 61da str r2, [r3, #28] + htim->Instance->CCMR2 |= sConfig->OCFastMode; + 8011502: 68fb ldr r3, [r7, #12] + 8011504: 681b ldr r3, [r3, #0] + 8011506: 69d9 ldr r1, [r3, #28] + 8011508: 68bb ldr r3, [r7, #8] + 801150a: 691a ldr r2, [r3, #16] + 801150c: 68fb ldr r3, [r7, #12] + 801150e: 681b ldr r3, [r3, #0] + 8011510: 430a orrs r2, r1 + 8011512: 61da str r2, [r3, #28] + break; + 8011514: e023 b.n 801155e + { + /* Check the parameters */ + assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); + + /* Configure the Channel 4 in PWM mode */ + TIM_OC4_SetConfig(htim->Instance, sConfig); + 8011516: 68fb ldr r3, [r7, #12] + 8011518: 681b ldr r3, [r3, #0] + 801151a: 68b9 ldr r1, [r7, #8] + 801151c: 4618 mov r0, r3 + 801151e: f000 fac5 bl 8011aac + + /* Set the Preload enable bit for channel4 */ + htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; + 8011522: 68fb ldr r3, [r7, #12] + 8011524: 681b ldr r3, [r3, #0] + 8011526: 69da ldr r2, [r3, #28] + 8011528: 68fb ldr r3, [r7, #12] + 801152a: 681b ldr r3, [r3, #0] + 801152c: f442 6200 orr.w r2, r2, #2048 @ 0x800 + 8011530: 61da str r2, [r3, #28] + + /* Configure the Output Fast mode */ + htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; + 8011532: 68fb ldr r3, [r7, #12] + 8011534: 681b ldr r3, [r3, #0] + 8011536: 69da ldr r2, [r3, #28] + 8011538: 68fb ldr r3, [r7, #12] + 801153a: 681b ldr r3, [r3, #0] + 801153c: f422 6280 bic.w r2, r2, #1024 @ 0x400 + 8011540: 61da str r2, [r3, #28] + htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; + 8011542: 68fb ldr r3, [r7, #12] + 8011544: 681b ldr r3, [r3, #0] + 8011546: 69d9 ldr r1, [r3, #28] + 8011548: 68bb ldr r3, [r7, #8] + 801154a: 691b ldr r3, [r3, #16] + 801154c: 021a lsls r2, r3, #8 + 801154e: 68fb ldr r3, [r7, #12] + 8011550: 681b ldr r3, [r3, #0] + 8011552: 430a orrs r2, r1 + 8011554: 61da str r2, [r3, #28] + break; + 8011556: e002 b.n 801155e + } + + default: + status = HAL_ERROR; + 8011558: 2301 movs r3, #1 + 801155a: 75fb strb r3, [r7, #23] + break; + 801155c: bf00 nop + } + + __HAL_UNLOCK(htim); + 801155e: 68fb ldr r3, [r7, #12] + 8011560: 2200 movs r2, #0 + 8011562: f883 203c strb.w r2, [r3, #60] @ 0x3c + + return status; + 8011566: 7dfb ldrb r3, [r7, #23] +} + 8011568: 4618 mov r0, r3 + 801156a: 3718 adds r7, #24 + 801156c: 46bd mov sp, r7 + 801156e: bd80 pop {r7, pc} + +08011570 : + * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that + * contains the clock source information for the TIM peripheral. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig) +{ + 8011570: b580 push {r7, lr} + 8011572: b084 sub sp, #16 + 8011574: af00 add r7, sp, #0 + 8011576: 6078 str r0, [r7, #4] + 8011578: 6039 str r1, [r7, #0] + HAL_StatusTypeDef status = HAL_OK; + 801157a: 2300 movs r3, #0 + 801157c: 73fb strb r3, [r7, #15] + uint32_t tmpsmcr; + + /* Process Locked */ + __HAL_LOCK(htim); + 801157e: 687b ldr r3, [r7, #4] + 8011580: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8011584: 2b01 cmp r3, #1 + 8011586: d101 bne.n 801158c + 8011588: 2302 movs r3, #2 + 801158a: e0b4 b.n 80116f6 + 801158c: 687b ldr r3, [r7, #4] + 801158e: 2201 movs r2, #1 + 8011590: f883 203c strb.w r2, [r3, #60] @ 0x3c + + htim->State = HAL_TIM_STATE_BUSY; + 8011594: 687b ldr r3, [r7, #4] + 8011596: 2202 movs r2, #2 + 8011598: f883 203d strb.w r2, [r3, #61] @ 0x3d + + /* Check the parameters */ + assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); + + /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ + tmpsmcr = htim->Instance->SMCR; + 801159c: 687b ldr r3, [r7, #4] + 801159e: 681b ldr r3, [r3, #0] + 80115a0: 689b ldr r3, [r3, #8] + 80115a2: 60bb str r3, [r7, #8] + tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); + 80115a4: 68bb ldr r3, [r7, #8] + 80115a6: f023 0377 bic.w r3, r3, #119 @ 0x77 + 80115aa: 60bb str r3, [r7, #8] + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + 80115ac: 68bb ldr r3, [r7, #8] + 80115ae: f423 437f bic.w r3, r3, #65280 @ 0xff00 + 80115b2: 60bb str r3, [r7, #8] + htim->Instance->SMCR = tmpsmcr; + 80115b4: 687b ldr r3, [r7, #4] + 80115b6: 681b ldr r3, [r3, #0] + 80115b8: 68ba ldr r2, [r7, #8] + 80115ba: 609a str r2, [r3, #8] + + switch (sClockSourceConfig->ClockSource) + 80115bc: 683b ldr r3, [r7, #0] + 80115be: 681b ldr r3, [r3, #0] + 80115c0: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 + 80115c4: d03e beq.n 8011644 + 80115c6: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 + 80115ca: f200 8087 bhi.w 80116dc + 80115ce: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 80115d2: f000 8086 beq.w 80116e2 + 80115d6: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 80115da: d87f bhi.n 80116dc + 80115dc: 2b70 cmp r3, #112 @ 0x70 + 80115de: d01a beq.n 8011616 + 80115e0: 2b70 cmp r3, #112 @ 0x70 + 80115e2: d87b bhi.n 80116dc + 80115e4: 2b60 cmp r3, #96 @ 0x60 + 80115e6: d050 beq.n 801168a + 80115e8: 2b60 cmp r3, #96 @ 0x60 + 80115ea: d877 bhi.n 80116dc + 80115ec: 2b50 cmp r3, #80 @ 0x50 + 80115ee: d03c beq.n 801166a + 80115f0: 2b50 cmp r3, #80 @ 0x50 + 80115f2: d873 bhi.n 80116dc + 80115f4: 2b40 cmp r3, #64 @ 0x40 + 80115f6: d058 beq.n 80116aa + 80115f8: 2b40 cmp r3, #64 @ 0x40 + 80115fa: d86f bhi.n 80116dc + 80115fc: 2b30 cmp r3, #48 @ 0x30 + 80115fe: d064 beq.n 80116ca + 8011600: 2b30 cmp r3, #48 @ 0x30 + 8011602: d86b bhi.n 80116dc + 8011604: 2b20 cmp r3, #32 + 8011606: d060 beq.n 80116ca + 8011608: 2b20 cmp r3, #32 + 801160a: d867 bhi.n 80116dc + 801160c: 2b00 cmp r3, #0 + 801160e: d05c beq.n 80116ca + 8011610: 2b10 cmp r3, #16 + 8011612: d05a beq.n 80116ca + 8011614: e062 b.n 80116dc + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + 8011616: 687b ldr r3, [r7, #4] + 8011618: 6818 ldr r0, [r3, #0] + sClockSourceConfig->ClockPrescaler, + 801161a: 683b ldr r3, [r7, #0] + 801161c: 6899 ldr r1, [r3, #8] + sClockSourceConfig->ClockPolarity, + 801161e: 683b ldr r3, [r7, #0] + 8011620: 685a ldr r2, [r3, #4] + sClockSourceConfig->ClockFilter); + 8011622: 683b ldr r3, [r7, #0] + 8011624: 68db ldr r3, [r3, #12] + TIM_ETR_SetConfig(htim->Instance, + 8011626: f000 fb06 bl 8011c36 + + /* Select the External clock mode1 and the ETRF trigger */ + tmpsmcr = htim->Instance->SMCR; + 801162a: 687b ldr r3, [r7, #4] + 801162c: 681b ldr r3, [r3, #0] + 801162e: 689b ldr r3, [r3, #8] + 8011630: 60bb str r3, [r7, #8] + tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); + 8011632: 68bb ldr r3, [r7, #8] + 8011634: f043 0377 orr.w r3, r3, #119 @ 0x77 + 8011638: 60bb str r3, [r7, #8] + /* Write to TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + 801163a: 687b ldr r3, [r7, #4] + 801163c: 681b ldr r3, [r3, #0] + 801163e: 68ba ldr r2, [r7, #8] + 8011640: 609a str r2, [r3, #8] + break; + 8011642: e04f b.n 80116e4 + assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + /* Configure the ETR Clock source */ + TIM_ETR_SetConfig(htim->Instance, + 8011644: 687b ldr r3, [r7, #4] + 8011646: 6818 ldr r0, [r3, #0] + sClockSourceConfig->ClockPrescaler, + 8011648: 683b ldr r3, [r7, #0] + 801164a: 6899 ldr r1, [r3, #8] + sClockSourceConfig->ClockPolarity, + 801164c: 683b ldr r3, [r7, #0] + 801164e: 685a ldr r2, [r3, #4] + sClockSourceConfig->ClockFilter); + 8011650: 683b ldr r3, [r7, #0] + 8011652: 68db ldr r3, [r3, #12] + TIM_ETR_SetConfig(htim->Instance, + 8011654: f000 faef bl 8011c36 + /* Enable the External clock mode2 */ + htim->Instance->SMCR |= TIM_SMCR_ECE; + 8011658: 687b ldr r3, [r7, #4] + 801165a: 681b ldr r3, [r3, #0] + 801165c: 689a ldr r2, [r3, #8] + 801165e: 687b ldr r3, [r7, #4] + 8011660: 681b ldr r3, [r3, #0] + 8011662: f442 4280 orr.w r2, r2, #16384 @ 0x4000 + 8011666: 609a str r2, [r3, #8] + break; + 8011668: e03c b.n 80116e4 + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + 801166a: 687b ldr r3, [r7, #4] + 801166c: 6818 ldr r0, [r3, #0] + sClockSourceConfig->ClockPolarity, + 801166e: 683b ldr r3, [r7, #0] + 8011670: 6859 ldr r1, [r3, #4] + sClockSourceConfig->ClockFilter); + 8011672: 683b ldr r3, [r7, #0] + 8011674: 68db ldr r3, [r3, #12] + TIM_TI1_ConfigInputStage(htim->Instance, + 8011676: 461a mov r2, r3 + 8011678: f000 fa66 bl 8011b48 + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); + 801167c: 687b ldr r3, [r7, #4] + 801167e: 681b ldr r3, [r3, #0] + 8011680: 2150 movs r1, #80 @ 0x50 + 8011682: 4618 mov r0, r3 + 8011684: f000 fabd bl 8011c02 + break; + 8011688: e02c b.n 80116e4 + + /* Check TI2 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI2_ConfigInputStage(htim->Instance, + 801168a: 687b ldr r3, [r7, #4] + 801168c: 6818 ldr r0, [r3, #0] + sClockSourceConfig->ClockPolarity, + 801168e: 683b ldr r3, [r7, #0] + 8011690: 6859 ldr r1, [r3, #4] + sClockSourceConfig->ClockFilter); + 8011692: 683b ldr r3, [r7, #0] + 8011694: 68db ldr r3, [r3, #12] + TIM_TI2_ConfigInputStage(htim->Instance, + 8011696: 461a mov r2, r3 + 8011698: f000 fa84 bl 8011ba4 + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); + 801169c: 687b ldr r3, [r7, #4] + 801169e: 681b ldr r3, [r3, #0] + 80116a0: 2160 movs r1, #96 @ 0x60 + 80116a2: 4618 mov r0, r3 + 80116a4: f000 faad bl 8011c02 + break; + 80116a8: e01c b.n 80116e4 + + /* Check TI1 input conditioning related parameters */ + assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); + assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); + + TIM_TI1_ConfigInputStage(htim->Instance, + 80116aa: 687b ldr r3, [r7, #4] + 80116ac: 6818 ldr r0, [r3, #0] + sClockSourceConfig->ClockPolarity, + 80116ae: 683b ldr r3, [r7, #0] + 80116b0: 6859 ldr r1, [r3, #4] + sClockSourceConfig->ClockFilter); + 80116b2: 683b ldr r3, [r7, #0] + 80116b4: 68db ldr r3, [r3, #12] + TIM_TI1_ConfigInputStage(htim->Instance, + 80116b6: 461a mov r2, r3 + 80116b8: f000 fa46 bl 8011b48 + TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); + 80116bc: 687b ldr r3, [r7, #4] + 80116be: 681b ldr r3, [r3, #0] + 80116c0: 2140 movs r1, #64 @ 0x40 + 80116c2: 4618 mov r0, r3 + 80116c4: f000 fa9d bl 8011c02 + break; + 80116c8: e00c b.n 80116e4 + case TIM_CLOCKSOURCE_ITR3: + { + /* Check whether or not the timer instance supports internal trigger input */ + assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); + + TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); + 80116ca: 687b ldr r3, [r7, #4] + 80116cc: 681a ldr r2, [r3, #0] + 80116ce: 683b ldr r3, [r7, #0] + 80116d0: 681b ldr r3, [r3, #0] + 80116d2: 4619 mov r1, r3 + 80116d4: 4610 mov r0, r2 + 80116d6: f000 fa94 bl 8011c02 + break; + 80116da: e003 b.n 80116e4 + } + + default: + status = HAL_ERROR; + 80116dc: 2301 movs r3, #1 + 80116de: 73fb strb r3, [r7, #15] + break; + 80116e0: e000 b.n 80116e4 + break; + 80116e2: bf00 nop + } + htim->State = HAL_TIM_STATE_READY; + 80116e4: 687b ldr r3, [r7, #4] + 80116e6: 2201 movs r2, #1 + 80116e8: f883 203d strb.w r2, [r3, #61] @ 0x3d + + __HAL_UNLOCK(htim); + 80116ec: 687b ldr r3, [r7, #4] + 80116ee: 2200 movs r2, #0 + 80116f0: f883 203c strb.w r2, [r3, #60] @ 0x3c + + return status; + 80116f4: 7bfb ldrb r3, [r7, #15] +} + 80116f6: 4618 mov r0, r3 + 80116f8: 3710 adds r7, #16 + 80116fa: 46bd mov sp, r7 + 80116fc: bd80 pop {r7, pc} + +080116fe : + * @brief Period elapsed callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) +{ + 80116fe: b480 push {r7} + 8011700: b083 sub sp, #12 + 8011702: af00 add r7, sp, #0 + 8011704: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PeriodElapsedCallback could be implemented in the user file + */ +} + 8011706: bf00 nop + 8011708: 370c adds r7, #12 + 801170a: 46bd mov sp, r7 + 801170c: bc80 pop {r7} + 801170e: 4770 bx lr + +08011710 : + * @brief Input Capture callback in non-blocking mode + * @param htim TIM IC handle + * @retval None + */ +__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) +{ + 8011710: b480 push {r7} + 8011712: b083 sub sp, #12 + 8011714: af00 add r7, sp, #0 + 8011716: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_IC_CaptureCallback could be implemented in the user file + */ +} + 8011718: bf00 nop + 801171a: 370c adds r7, #12 + 801171c: 46bd mov sp, r7 + 801171e: bc80 pop {r7} + 8011720: 4770 bx lr + +08011722 : + * @brief PWM Pulse finished callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) +{ + 8011722: b480 push {r7} + 8011724: b083 sub sp, #12 + 8011726: af00 add r7, sp, #0 + 8011728: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file + */ +} + 801172a: bf00 nop + 801172c: 370c adds r7, #12 + 801172e: 46bd mov sp, r7 + 8011730: bc80 pop {r7} + 8011732: 4770 bx lr + +08011734 : + * @brief Hall Trigger detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) +{ + 8011734: b480 push {r7} + 8011736: b083 sub sp, #12 + 8011738: af00 add r7, sp, #0 + 801173a: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIM_TriggerCallback could be implemented in the user file + */ +} + 801173c: bf00 nop + 801173e: 370c adds r7, #12 + 8011740: 46bd mov sp, r7 + 8011742: bc80 pop {r7} + 8011744: 4770 bx lr + ... + +08011748 : + * @param TIMx TIM peripheral + * @param Structure TIM Base configuration structure + * @retval None + */ +void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure) +{ + 8011748: b480 push {r7} + 801174a: b085 sub sp, #20 + 801174c: af00 add r7, sp, #0 + 801174e: 6078 str r0, [r7, #4] + 8011750: 6039 str r1, [r7, #0] + uint32_t tmpcr1; + tmpcr1 = TIMx->CR1; + 8011752: 687b ldr r3, [r7, #4] + 8011754: 681b ldr r3, [r3, #0] + 8011756: 60fb str r3, [r7, #12] + + /* Set TIM Time Base Unit parameters ---------------------------------------*/ + if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) + 8011758: 687b ldr r3, [r7, #4] + 801175a: 4a33 ldr r2, [pc, #204] @ (8011828 ) + 801175c: 4293 cmp r3, r2 + 801175e: d00f beq.n 8011780 + 8011760: 687b ldr r3, [r7, #4] + 8011762: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8011766: d00b beq.n 8011780 + 8011768: 687b ldr r3, [r7, #4] + 801176a: 4a30 ldr r2, [pc, #192] @ (801182c ) + 801176c: 4293 cmp r3, r2 + 801176e: d007 beq.n 8011780 + 8011770: 687b ldr r3, [r7, #4] + 8011772: 4a2f ldr r2, [pc, #188] @ (8011830 ) + 8011774: 4293 cmp r3, r2 + 8011776: d003 beq.n 8011780 + 8011778: 687b ldr r3, [r7, #4] + 801177a: 4a2e ldr r2, [pc, #184] @ (8011834 ) + 801177c: 4293 cmp r3, r2 + 801177e: d108 bne.n 8011792 + { + /* Select the Counter Mode */ + tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); + 8011780: 68fb ldr r3, [r7, #12] + 8011782: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8011786: 60fb str r3, [r7, #12] + tmpcr1 |= Structure->CounterMode; + 8011788: 683b ldr r3, [r7, #0] + 801178a: 685b ldr r3, [r3, #4] + 801178c: 68fa ldr r2, [r7, #12] + 801178e: 4313 orrs r3, r2 + 8011790: 60fb str r3, [r7, #12] + } + + if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) + 8011792: 687b ldr r3, [r7, #4] + 8011794: 4a24 ldr r2, [pc, #144] @ (8011828 ) + 8011796: 4293 cmp r3, r2 + 8011798: d00f beq.n 80117ba + 801179a: 687b ldr r3, [r7, #4] + 801179c: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 80117a0: d00b beq.n 80117ba + 80117a2: 687b ldr r3, [r7, #4] + 80117a4: 4a21 ldr r2, [pc, #132] @ (801182c ) + 80117a6: 4293 cmp r3, r2 + 80117a8: d007 beq.n 80117ba + 80117aa: 687b ldr r3, [r7, #4] + 80117ac: 4a20 ldr r2, [pc, #128] @ (8011830 ) + 80117ae: 4293 cmp r3, r2 + 80117b0: d003 beq.n 80117ba + 80117b2: 687b ldr r3, [r7, #4] + 80117b4: 4a1f ldr r2, [pc, #124] @ (8011834 ) + 80117b6: 4293 cmp r3, r2 + 80117b8: d108 bne.n 80117cc + { + /* Set the clock division */ + tmpcr1 &= ~TIM_CR1_CKD; + 80117ba: 68fb ldr r3, [r7, #12] + 80117bc: f423 7340 bic.w r3, r3, #768 @ 0x300 + 80117c0: 60fb str r3, [r7, #12] + tmpcr1 |= (uint32_t)Structure->ClockDivision; + 80117c2: 683b ldr r3, [r7, #0] + 80117c4: 68db ldr r3, [r3, #12] + 80117c6: 68fa ldr r2, [r7, #12] + 80117c8: 4313 orrs r3, r2 + 80117ca: 60fb str r3, [r7, #12] + } + + /* Set the auto-reload preload */ + MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); + 80117cc: 68fb ldr r3, [r7, #12] + 80117ce: f023 0280 bic.w r2, r3, #128 @ 0x80 + 80117d2: 683b ldr r3, [r7, #0] + 80117d4: 695b ldr r3, [r3, #20] + 80117d6: 4313 orrs r3, r2 + 80117d8: 60fb str r3, [r7, #12] + + TIMx->CR1 = tmpcr1; + 80117da: 687b ldr r3, [r7, #4] + 80117dc: 68fa ldr r2, [r7, #12] + 80117de: 601a str r2, [r3, #0] + + /* Set the Autoreload value */ + TIMx->ARR = (uint32_t)Structure->Period ; + 80117e0: 683b ldr r3, [r7, #0] + 80117e2: 689a ldr r2, [r3, #8] + 80117e4: 687b ldr r3, [r7, #4] + 80117e6: 62da str r2, [r3, #44] @ 0x2c + + /* Set the Prescaler value */ + TIMx->PSC = Structure->Prescaler; + 80117e8: 683b ldr r3, [r7, #0] + 80117ea: 681a ldr r2, [r3, #0] + 80117ec: 687b ldr r3, [r7, #4] + 80117ee: 629a str r2, [r3, #40] @ 0x28 + + if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) + 80117f0: 687b ldr r3, [r7, #4] + 80117f2: 4a0d ldr r2, [pc, #52] @ (8011828 ) + 80117f4: 4293 cmp r3, r2 + 80117f6: d103 bne.n 8011800 + { + /* Set the Repetition Counter value */ + TIMx->RCR = Structure->RepetitionCounter; + 80117f8: 683b ldr r3, [r7, #0] + 80117fa: 691a ldr r2, [r3, #16] + 80117fc: 687b ldr r3, [r7, #4] + 80117fe: 631a str r2, [r3, #48] @ 0x30 + } + + /* Generate an update event to reload the Prescaler + and the repetition counter (only for advanced timer) value immediately */ + TIMx->EGR = TIM_EGR_UG; + 8011800: 687b ldr r3, [r7, #4] + 8011802: 2201 movs r2, #1 + 8011804: 615a str r2, [r3, #20] + + /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */ + if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE)) + 8011806: 687b ldr r3, [r7, #4] + 8011808: 691b ldr r3, [r3, #16] + 801180a: f003 0301 and.w r3, r3, #1 + 801180e: 2b00 cmp r3, #0 + 8011810: d005 beq.n 801181e + { + /* Clear the update flag */ + CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE); + 8011812: 687b ldr r3, [r7, #4] + 8011814: 691b ldr r3, [r3, #16] + 8011816: f023 0201 bic.w r2, r3, #1 + 801181a: 687b ldr r3, [r7, #4] + 801181c: 611a str r2, [r3, #16] + } +} + 801181e: bf00 nop + 8011820: 3714 adds r7, #20 + 8011822: 46bd mov sp, r7 + 8011824: bc80 pop {r7} + 8011826: 4770 bx lr + 8011828: 40012c00 .word 0x40012c00 + 801182c: 40000400 .word 0x40000400 + 8011830: 40000800 .word 0x40000800 + 8011834: 40000c00 .word 0x40000c00 + +08011838 : + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + 8011838: b480 push {r7} + 801183a: b087 sub sp, #28 + 801183c: af00 add r7, sp, #0 + 801183e: 6078 str r0, [r7, #4] + 8011840: 6039 str r1, [r7, #0] + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 8011842: 687b ldr r3, [r7, #4] + 8011844: 6a1b ldr r3, [r3, #32] + 8011846: 617b str r3, [r7, #20] + + /* Disable the Channel 1: Reset the CC1E Bit */ + TIMx->CCER &= ~TIM_CCER_CC1E; + 8011848: 687b ldr r3, [r7, #4] + 801184a: 6a1b ldr r3, [r3, #32] + 801184c: f023 0201 bic.w r2, r3, #1 + 8011850: 687b ldr r3, [r7, #4] + 8011852: 621a str r2, [r3, #32] + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 8011854: 687b ldr r3, [r7, #4] + 8011856: 685b ldr r3, [r3, #4] + 8011858: 613b str r3, [r7, #16] + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + 801185a: 687b ldr r3, [r7, #4] + 801185c: 699b ldr r3, [r3, #24] + 801185e: 60fb str r3, [r7, #12] + + /* Reset the Output Compare Mode Bits */ + tmpccmrx &= ~TIM_CCMR1_OC1M; + 8011860: 68fb ldr r3, [r7, #12] + 8011862: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8011866: 60fb str r3, [r7, #12] + tmpccmrx &= ~TIM_CCMR1_CC1S; + 8011868: 68fb ldr r3, [r7, #12] + 801186a: f023 0303 bic.w r3, r3, #3 + 801186e: 60fb str r3, [r7, #12] + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + 8011870: 683b ldr r3, [r7, #0] + 8011872: 681b ldr r3, [r3, #0] + 8011874: 68fa ldr r2, [r7, #12] + 8011876: 4313 orrs r3, r2 + 8011878: 60fb str r3, [r7, #12] + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC1P; + 801187a: 697b ldr r3, [r7, #20] + 801187c: f023 0302 bic.w r3, r3, #2 + 8011880: 617b str r3, [r7, #20] + /* Set the Output Compare Polarity */ + tmpccer |= OC_Config->OCPolarity; + 8011882: 683b ldr r3, [r7, #0] + 8011884: 689b ldr r3, [r3, #8] + 8011886: 697a ldr r2, [r7, #20] + 8011888: 4313 orrs r3, r2 + 801188a: 617b str r3, [r7, #20] + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) + 801188c: 687b ldr r3, [r7, #4] + 801188e: 4a1c ldr r2, [pc, #112] @ (8011900 ) + 8011890: 4293 cmp r3, r2 + 8011892: d10c bne.n 80118ae + { + /* Check parameters */ + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC1NP; + 8011894: 697b ldr r3, [r7, #20] + 8011896: f023 0308 bic.w r3, r3, #8 + 801189a: 617b str r3, [r7, #20] + /* Set the Output N Polarity */ + tmpccer |= OC_Config->OCNPolarity; + 801189c: 683b ldr r3, [r7, #0] + 801189e: 68db ldr r3, [r3, #12] + 80118a0: 697a ldr r2, [r7, #20] + 80118a2: 4313 orrs r3, r2 + 80118a4: 617b str r3, [r7, #20] + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC1NE; + 80118a6: 697b ldr r3, [r7, #20] + 80118a8: f023 0304 bic.w r3, r3, #4 + 80118ac: 617b str r3, [r7, #20] + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 80118ae: 687b ldr r3, [r7, #4] + 80118b0: 4a13 ldr r2, [pc, #76] @ (8011900 ) + 80118b2: 4293 cmp r3, r2 + 80118b4: d111 bne.n 80118da + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS1; + 80118b6: 693b ldr r3, [r7, #16] + 80118b8: f423 7380 bic.w r3, r3, #256 @ 0x100 + 80118bc: 613b str r3, [r7, #16] + tmpcr2 &= ~TIM_CR2_OIS1N; + 80118be: 693b ldr r3, [r7, #16] + 80118c0: f423 7300 bic.w r3, r3, #512 @ 0x200 + 80118c4: 613b str r3, [r7, #16] + /* Set the Output Idle state */ + tmpcr2 |= OC_Config->OCIdleState; + 80118c6: 683b ldr r3, [r7, #0] + 80118c8: 695b ldr r3, [r3, #20] + 80118ca: 693a ldr r2, [r7, #16] + 80118cc: 4313 orrs r3, r2 + 80118ce: 613b str r3, [r7, #16] + /* Set the Output N Idle state */ + tmpcr2 |= OC_Config->OCNIdleState; + 80118d0: 683b ldr r3, [r7, #0] + 80118d2: 699b ldr r3, [r3, #24] + 80118d4: 693a ldr r2, [r7, #16] + 80118d6: 4313 orrs r3, r2 + 80118d8: 613b str r3, [r7, #16] + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 80118da: 687b ldr r3, [r7, #4] + 80118dc: 693a ldr r2, [r7, #16] + 80118de: 605a str r2, [r3, #4] + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + 80118e0: 687b ldr r3, [r7, #4] + 80118e2: 68fa ldr r2, [r7, #12] + 80118e4: 619a str r2, [r3, #24] + + /* Set the Capture Compare Register value */ + TIMx->CCR1 = OC_Config->Pulse; + 80118e6: 683b ldr r3, [r7, #0] + 80118e8: 685a ldr r2, [r3, #4] + 80118ea: 687b ldr r3, [r7, #4] + 80118ec: 635a str r2, [r3, #52] @ 0x34 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 80118ee: 687b ldr r3, [r7, #4] + 80118f0: 697a ldr r2, [r7, #20] + 80118f2: 621a str r2, [r3, #32] +} + 80118f4: bf00 nop + 80118f6: 371c adds r7, #28 + 80118f8: 46bd mov sp, r7 + 80118fa: bc80 pop {r7} + 80118fc: 4770 bx lr + 80118fe: bf00 nop + 8011900: 40012c00 .word 0x40012c00 + +08011904 : + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + 8011904: b480 push {r7} + 8011906: b087 sub sp, #28 + 8011908: af00 add r7, sp, #0 + 801190a: 6078 str r0, [r7, #4] + 801190c: 6039 str r1, [r7, #0] + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 801190e: 687b ldr r3, [r7, #4] + 8011910: 6a1b ldr r3, [r3, #32] + 8011912: 617b str r3, [r7, #20] + + /* Disable the Channel 2: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC2E; + 8011914: 687b ldr r3, [r7, #4] + 8011916: 6a1b ldr r3, [r3, #32] + 8011918: f023 0210 bic.w r2, r3, #16 + 801191c: 687b ldr r3, [r7, #4] + 801191e: 621a str r2, [r3, #32] + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 8011920: 687b ldr r3, [r7, #4] + 8011922: 685b ldr r3, [r3, #4] + 8011924: 613b str r3, [r7, #16] + + /* Get the TIMx CCMR1 register value */ + tmpccmrx = TIMx->CCMR1; + 8011926: 687b ldr r3, [r7, #4] + 8011928: 699b ldr r3, [r3, #24] + 801192a: 60fb str r3, [r7, #12] + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR1_OC2M; + 801192c: 68fb ldr r3, [r7, #12] + 801192e: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 + 8011932: 60fb str r3, [r7, #12] + tmpccmrx &= ~TIM_CCMR1_CC2S; + 8011934: 68fb ldr r3, [r7, #12] + 8011936: f423 7340 bic.w r3, r3, #768 @ 0x300 + 801193a: 60fb str r3, [r7, #12] + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + 801193c: 683b ldr r3, [r7, #0] + 801193e: 681b ldr r3, [r3, #0] + 8011940: 021b lsls r3, r3, #8 + 8011942: 68fa ldr r2, [r7, #12] + 8011944: 4313 orrs r3, r2 + 8011946: 60fb str r3, [r7, #12] + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC2P; + 8011948: 697b ldr r3, [r7, #20] + 801194a: f023 0320 bic.w r3, r3, #32 + 801194e: 617b str r3, [r7, #20] + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 4U); + 8011950: 683b ldr r3, [r7, #0] + 8011952: 689b ldr r3, [r3, #8] + 8011954: 011b lsls r3, r3, #4 + 8011956: 697a ldr r2, [r7, #20] + 8011958: 4313 orrs r3, r2 + 801195a: 617b str r3, [r7, #20] + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) + 801195c: 687b ldr r3, [r7, #4] + 801195e: 4a1d ldr r2, [pc, #116] @ (80119d4 ) + 8011960: 4293 cmp r3, r2 + 8011962: d10d bne.n 8011980 + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC2NP; + 8011964: 697b ldr r3, [r7, #20] + 8011966: f023 0380 bic.w r3, r3, #128 @ 0x80 + 801196a: 617b str r3, [r7, #20] + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 4U); + 801196c: 683b ldr r3, [r7, #0] + 801196e: 68db ldr r3, [r3, #12] + 8011970: 011b lsls r3, r3, #4 + 8011972: 697a ldr r2, [r7, #20] + 8011974: 4313 orrs r3, r2 + 8011976: 617b str r3, [r7, #20] + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC2NE; + 8011978: 697b ldr r3, [r7, #20] + 801197a: f023 0340 bic.w r3, r3, #64 @ 0x40 + 801197e: 617b str r3, [r7, #20] + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8011980: 687b ldr r3, [r7, #4] + 8011982: 4a14 ldr r2, [pc, #80] @ (80119d4 ) + 8011984: 4293 cmp r3, r2 + 8011986: d113 bne.n 80119b0 + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS2; + 8011988: 693b ldr r3, [r7, #16] + 801198a: f423 6380 bic.w r3, r3, #1024 @ 0x400 + 801198e: 613b str r3, [r7, #16] + tmpcr2 &= ~TIM_CR2_OIS2N; + 8011990: 693b ldr r3, [r7, #16] + 8011992: f423 6300 bic.w r3, r3, #2048 @ 0x800 + 8011996: 613b str r3, [r7, #16] + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 2U); + 8011998: 683b ldr r3, [r7, #0] + 801199a: 695b ldr r3, [r3, #20] + 801199c: 009b lsls r3, r3, #2 + 801199e: 693a ldr r2, [r7, #16] + 80119a0: 4313 orrs r3, r2 + 80119a2: 613b str r3, [r7, #16] + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 2U); + 80119a4: 683b ldr r3, [r7, #0] + 80119a6: 699b ldr r3, [r3, #24] + 80119a8: 009b lsls r3, r3, #2 + 80119aa: 693a ldr r2, [r7, #16] + 80119ac: 4313 orrs r3, r2 + 80119ae: 613b str r3, [r7, #16] + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 80119b0: 687b ldr r3, [r7, #4] + 80119b2: 693a ldr r2, [r7, #16] + 80119b4: 605a str r2, [r3, #4] + + /* Write to TIMx CCMR1 */ + TIMx->CCMR1 = tmpccmrx; + 80119b6: 687b ldr r3, [r7, #4] + 80119b8: 68fa ldr r2, [r7, #12] + 80119ba: 619a str r2, [r3, #24] + + /* Set the Capture Compare Register value */ + TIMx->CCR2 = OC_Config->Pulse; + 80119bc: 683b ldr r3, [r7, #0] + 80119be: 685a ldr r2, [r3, #4] + 80119c0: 687b ldr r3, [r7, #4] + 80119c2: 639a str r2, [r3, #56] @ 0x38 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 80119c4: 687b ldr r3, [r7, #4] + 80119c6: 697a ldr r2, [r7, #20] + 80119c8: 621a str r2, [r3, #32] +} + 80119ca: bf00 nop + 80119cc: 371c adds r7, #28 + 80119ce: 46bd mov sp, r7 + 80119d0: bc80 pop {r7} + 80119d2: 4770 bx lr + 80119d4: 40012c00 .word 0x40012c00 + +080119d8 : + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + 80119d8: b480 push {r7} + 80119da: b087 sub sp, #28 + 80119dc: af00 add r7, sp, #0 + 80119de: 6078 str r0, [r7, #4] + 80119e0: 6039 str r1, [r7, #0] + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 80119e2: 687b ldr r3, [r7, #4] + 80119e4: 6a1b ldr r3, [r3, #32] + 80119e6: 617b str r3, [r7, #20] + + /* Disable the Channel 3: Reset the CC2E Bit */ + TIMx->CCER &= ~TIM_CCER_CC3E; + 80119e8: 687b ldr r3, [r7, #4] + 80119ea: 6a1b ldr r3, [r3, #32] + 80119ec: f423 7280 bic.w r2, r3, #256 @ 0x100 + 80119f0: 687b ldr r3, [r7, #4] + 80119f2: 621a str r2, [r3, #32] + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 80119f4: 687b ldr r3, [r7, #4] + 80119f6: 685b ldr r3, [r3, #4] + 80119f8: 613b str r3, [r7, #16] + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + 80119fa: 687b ldr r3, [r7, #4] + 80119fc: 69db ldr r3, [r3, #28] + 80119fe: 60fb str r3, [r7, #12] + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC3M; + 8011a00: 68fb ldr r3, [r7, #12] + 8011a02: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8011a06: 60fb str r3, [r7, #12] + tmpccmrx &= ~TIM_CCMR2_CC3S; + 8011a08: 68fb ldr r3, [r7, #12] + 8011a0a: f023 0303 bic.w r3, r3, #3 + 8011a0e: 60fb str r3, [r7, #12] + /* Select the Output Compare Mode */ + tmpccmrx |= OC_Config->OCMode; + 8011a10: 683b ldr r3, [r7, #0] + 8011a12: 681b ldr r3, [r3, #0] + 8011a14: 68fa ldr r2, [r7, #12] + 8011a16: 4313 orrs r3, r2 + 8011a18: 60fb str r3, [r7, #12] + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC3P; + 8011a1a: 697b ldr r3, [r7, #20] + 8011a1c: f423 7300 bic.w r3, r3, #512 @ 0x200 + 8011a20: 617b str r3, [r7, #20] + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 8U); + 8011a22: 683b ldr r3, [r7, #0] + 8011a24: 689b ldr r3, [r3, #8] + 8011a26: 021b lsls r3, r3, #8 + 8011a28: 697a ldr r2, [r7, #20] + 8011a2a: 4313 orrs r3, r2 + 8011a2c: 617b str r3, [r7, #20] + + if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) + 8011a2e: 687b ldr r3, [r7, #4] + 8011a30: 4a1d ldr r2, [pc, #116] @ (8011aa8 ) + 8011a32: 4293 cmp r3, r2 + 8011a34: d10d bne.n 8011a52 + { + assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); + + /* Reset the Output N Polarity level */ + tmpccer &= ~TIM_CCER_CC3NP; + 8011a36: 697b ldr r3, [r7, #20] + 8011a38: f423 6300 bic.w r3, r3, #2048 @ 0x800 + 8011a3c: 617b str r3, [r7, #20] + /* Set the Output N Polarity */ + tmpccer |= (OC_Config->OCNPolarity << 8U); + 8011a3e: 683b ldr r3, [r7, #0] + 8011a40: 68db ldr r3, [r3, #12] + 8011a42: 021b lsls r3, r3, #8 + 8011a44: 697a ldr r2, [r7, #20] + 8011a46: 4313 orrs r3, r2 + 8011a48: 617b str r3, [r7, #20] + /* Reset the Output N State */ + tmpccer &= ~TIM_CCER_CC3NE; + 8011a4a: 697b ldr r3, [r7, #20] + 8011a4c: f423 6380 bic.w r3, r3, #1024 @ 0x400 + 8011a50: 617b str r3, [r7, #20] + } + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8011a52: 687b ldr r3, [r7, #4] + 8011a54: 4a14 ldr r2, [pc, #80] @ (8011aa8 ) + 8011a56: 4293 cmp r3, r2 + 8011a58: d113 bne.n 8011a82 + /* Check parameters */ + assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare and Output Compare N IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS3; + 8011a5a: 693b ldr r3, [r7, #16] + 8011a5c: f423 5380 bic.w r3, r3, #4096 @ 0x1000 + 8011a60: 613b str r3, [r7, #16] + tmpcr2 &= ~TIM_CR2_OIS3N; + 8011a62: 693b ldr r3, [r7, #16] + 8011a64: f423 5300 bic.w r3, r3, #8192 @ 0x2000 + 8011a68: 613b str r3, [r7, #16] + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 4U); + 8011a6a: 683b ldr r3, [r7, #0] + 8011a6c: 695b ldr r3, [r3, #20] + 8011a6e: 011b lsls r3, r3, #4 + 8011a70: 693a ldr r2, [r7, #16] + 8011a72: 4313 orrs r3, r2 + 8011a74: 613b str r3, [r7, #16] + /* Set the Output N Idle state */ + tmpcr2 |= (OC_Config->OCNIdleState << 4U); + 8011a76: 683b ldr r3, [r7, #0] + 8011a78: 699b ldr r3, [r3, #24] + 8011a7a: 011b lsls r3, r3, #4 + 8011a7c: 693a ldr r2, [r7, #16] + 8011a7e: 4313 orrs r3, r2 + 8011a80: 613b str r3, [r7, #16] + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 8011a82: 687b ldr r3, [r7, #4] + 8011a84: 693a ldr r2, [r7, #16] + 8011a86: 605a str r2, [r3, #4] + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + 8011a88: 687b ldr r3, [r7, #4] + 8011a8a: 68fa ldr r2, [r7, #12] + 8011a8c: 61da str r2, [r3, #28] + + /* Set the Capture Compare Register value */ + TIMx->CCR3 = OC_Config->Pulse; + 8011a8e: 683b ldr r3, [r7, #0] + 8011a90: 685a ldr r2, [r3, #4] + 8011a92: 687b ldr r3, [r7, #4] + 8011a94: 63da str r2, [r3, #60] @ 0x3c + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 8011a96: 687b ldr r3, [r7, #4] + 8011a98: 697a ldr r2, [r7, #20] + 8011a9a: 621a str r2, [r3, #32] +} + 8011a9c: bf00 nop + 8011a9e: 371c adds r7, #28 + 8011aa0: 46bd mov sp, r7 + 8011aa2: bc80 pop {r7} + 8011aa4: 4770 bx lr + 8011aa6: bf00 nop + 8011aa8: 40012c00 .word 0x40012c00 + +08011aac : + * @param TIMx to select the TIM peripheral + * @param OC_Config The output configuration structure + * @retval None + */ +static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) +{ + 8011aac: b480 push {r7} + 8011aae: b087 sub sp, #28 + 8011ab0: af00 add r7, sp, #0 + 8011ab2: 6078 str r0, [r7, #4] + 8011ab4: 6039 str r1, [r7, #0] + uint32_t tmpccmrx; + uint32_t tmpccer; + uint32_t tmpcr2; + + /* Get the TIMx CCER register value */ + tmpccer = TIMx->CCER; + 8011ab6: 687b ldr r3, [r7, #4] + 8011ab8: 6a1b ldr r3, [r3, #32] + 8011aba: 613b str r3, [r7, #16] + + /* Disable the Channel 4: Reset the CC4E Bit */ + TIMx->CCER &= ~TIM_CCER_CC4E; + 8011abc: 687b ldr r3, [r7, #4] + 8011abe: 6a1b ldr r3, [r3, #32] + 8011ac0: f423 5280 bic.w r2, r3, #4096 @ 0x1000 + 8011ac4: 687b ldr r3, [r7, #4] + 8011ac6: 621a str r2, [r3, #32] + + /* Get the TIMx CR2 register value */ + tmpcr2 = TIMx->CR2; + 8011ac8: 687b ldr r3, [r7, #4] + 8011aca: 685b ldr r3, [r3, #4] + 8011acc: 617b str r3, [r7, #20] + + /* Get the TIMx CCMR2 register value */ + tmpccmrx = TIMx->CCMR2; + 8011ace: 687b ldr r3, [r7, #4] + 8011ad0: 69db ldr r3, [r3, #28] + 8011ad2: 60fb str r3, [r7, #12] + + /* Reset the Output Compare mode and Capture/Compare selection Bits */ + tmpccmrx &= ~TIM_CCMR2_OC4M; + 8011ad4: 68fb ldr r3, [r7, #12] + 8011ad6: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 + 8011ada: 60fb str r3, [r7, #12] + tmpccmrx &= ~TIM_CCMR2_CC4S; + 8011adc: 68fb ldr r3, [r7, #12] + 8011ade: f423 7340 bic.w r3, r3, #768 @ 0x300 + 8011ae2: 60fb str r3, [r7, #12] + + /* Select the Output Compare Mode */ + tmpccmrx |= (OC_Config->OCMode << 8U); + 8011ae4: 683b ldr r3, [r7, #0] + 8011ae6: 681b ldr r3, [r3, #0] + 8011ae8: 021b lsls r3, r3, #8 + 8011aea: 68fa ldr r2, [r7, #12] + 8011aec: 4313 orrs r3, r2 + 8011aee: 60fb str r3, [r7, #12] + + /* Reset the Output Polarity level */ + tmpccer &= ~TIM_CCER_CC4P; + 8011af0: 693b ldr r3, [r7, #16] + 8011af2: f423 5300 bic.w r3, r3, #8192 @ 0x2000 + 8011af6: 613b str r3, [r7, #16] + /* Set the Output Compare Polarity */ + tmpccer |= (OC_Config->OCPolarity << 12U); + 8011af8: 683b ldr r3, [r7, #0] + 8011afa: 689b ldr r3, [r3, #8] + 8011afc: 031b lsls r3, r3, #12 + 8011afe: 693a ldr r2, [r7, #16] + 8011b00: 4313 orrs r3, r2 + 8011b02: 613b str r3, [r7, #16] + + if (IS_TIM_BREAK_INSTANCE(TIMx)) + 8011b04: 687b ldr r3, [r7, #4] + 8011b06: 4a0f ldr r2, [pc, #60] @ (8011b44 ) + 8011b08: 4293 cmp r3, r2 + 8011b0a: d109 bne.n 8011b20 + { + /* Check parameters */ + assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); + + /* Reset the Output Compare IDLE State */ + tmpcr2 &= ~TIM_CR2_OIS4; + 8011b0c: 697b ldr r3, [r7, #20] + 8011b0e: f423 4380 bic.w r3, r3, #16384 @ 0x4000 + 8011b12: 617b str r3, [r7, #20] + + /* Set the Output Idle state */ + tmpcr2 |= (OC_Config->OCIdleState << 6U); + 8011b14: 683b ldr r3, [r7, #0] + 8011b16: 695b ldr r3, [r3, #20] + 8011b18: 019b lsls r3, r3, #6 + 8011b1a: 697a ldr r2, [r7, #20] + 8011b1c: 4313 orrs r3, r2 + 8011b1e: 617b str r3, [r7, #20] + } + + /* Write to TIMx CR2 */ + TIMx->CR2 = tmpcr2; + 8011b20: 687b ldr r3, [r7, #4] + 8011b22: 697a ldr r2, [r7, #20] + 8011b24: 605a str r2, [r3, #4] + + /* Write to TIMx CCMR2 */ + TIMx->CCMR2 = tmpccmrx; + 8011b26: 687b ldr r3, [r7, #4] + 8011b28: 68fa ldr r2, [r7, #12] + 8011b2a: 61da str r2, [r3, #28] + + /* Set the Capture Compare Register value */ + TIMx->CCR4 = OC_Config->Pulse; + 8011b2c: 683b ldr r3, [r7, #0] + 8011b2e: 685a ldr r2, [r3, #4] + 8011b30: 687b ldr r3, [r7, #4] + 8011b32: 641a str r2, [r3, #64] @ 0x40 + + /* Write to TIMx CCER */ + TIMx->CCER = tmpccer; + 8011b34: 687b ldr r3, [r7, #4] + 8011b36: 693a ldr r2, [r7, #16] + 8011b38: 621a str r2, [r3, #32] +} + 8011b3a: bf00 nop + 8011b3c: 371c adds r7, #28 + 8011b3e: 46bd mov sp, r7 + 8011b40: bc80 pop {r7} + 8011b42: 4770 bx lr + 8011b44: 40012c00 .word 0x40012c00 + +08011b48 : + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + 8011b48: b480 push {r7} + 8011b4a: b087 sub sp, #28 + 8011b4c: af00 add r7, sp, #0 + 8011b4e: 60f8 str r0, [r7, #12] + 8011b50: 60b9 str r1, [r7, #8] + 8011b52: 607a str r2, [r7, #4] + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 1: Reset the CC1E Bit */ + tmpccer = TIMx->CCER; + 8011b54: 68fb ldr r3, [r7, #12] + 8011b56: 6a1b ldr r3, [r3, #32] + 8011b58: 617b str r3, [r7, #20] + TIMx->CCER &= ~TIM_CCER_CC1E; + 8011b5a: 68fb ldr r3, [r7, #12] + 8011b5c: 6a1b ldr r3, [r3, #32] + 8011b5e: f023 0201 bic.w r2, r3, #1 + 8011b62: 68fb ldr r3, [r7, #12] + 8011b64: 621a str r2, [r3, #32] + tmpccmr1 = TIMx->CCMR1; + 8011b66: 68fb ldr r3, [r7, #12] + 8011b68: 699b ldr r3, [r3, #24] + 8011b6a: 613b str r3, [r7, #16] + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC1F; + 8011b6c: 693b ldr r3, [r7, #16] + 8011b6e: f023 03f0 bic.w r3, r3, #240 @ 0xf0 + 8011b72: 613b str r3, [r7, #16] + tmpccmr1 |= (TIM_ICFilter << 4U); + 8011b74: 687b ldr r3, [r7, #4] + 8011b76: 011b lsls r3, r3, #4 + 8011b78: 693a ldr r2, [r7, #16] + 8011b7a: 4313 orrs r3, r2 + 8011b7c: 613b str r3, [r7, #16] + + /* Select the Polarity and set the CC1E Bit */ + tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); + 8011b7e: 697b ldr r3, [r7, #20] + 8011b80: f023 030a bic.w r3, r3, #10 + 8011b84: 617b str r3, [r7, #20] + tmpccer |= TIM_ICPolarity; + 8011b86: 697a ldr r2, [r7, #20] + 8011b88: 68bb ldr r3, [r7, #8] + 8011b8a: 4313 orrs r3, r2 + 8011b8c: 617b str r3, [r7, #20] + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1; + 8011b8e: 68fb ldr r3, [r7, #12] + 8011b90: 693a ldr r2, [r7, #16] + 8011b92: 619a str r2, [r3, #24] + TIMx->CCER = tmpccer; + 8011b94: 68fb ldr r3, [r7, #12] + 8011b96: 697a ldr r2, [r7, #20] + 8011b98: 621a str r2, [r3, #32] +} + 8011b9a: bf00 nop + 8011b9c: 371c adds r7, #28 + 8011b9e: 46bd mov sp, r7 + 8011ba0: bc80 pop {r7} + 8011ba2: 4770 bx lr + +08011ba4 : + * @param TIM_ICFilter Specifies the Input Capture Filter. + * This parameter must be a value between 0x00 and 0x0F. + * @retval None + */ +static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) +{ + 8011ba4: b480 push {r7} + 8011ba6: b087 sub sp, #28 + 8011ba8: af00 add r7, sp, #0 + 8011baa: 60f8 str r0, [r7, #12] + 8011bac: 60b9 str r1, [r7, #8] + 8011bae: 607a str r2, [r7, #4] + uint32_t tmpccmr1; + uint32_t tmpccer; + + /* Disable the Channel 2: Reset the CC2E Bit */ + tmpccer = TIMx->CCER; + 8011bb0: 68fb ldr r3, [r7, #12] + 8011bb2: 6a1b ldr r3, [r3, #32] + 8011bb4: 617b str r3, [r7, #20] + TIMx->CCER &= ~TIM_CCER_CC2E; + 8011bb6: 68fb ldr r3, [r7, #12] + 8011bb8: 6a1b ldr r3, [r3, #32] + 8011bba: f023 0210 bic.w r2, r3, #16 + 8011bbe: 68fb ldr r3, [r7, #12] + 8011bc0: 621a str r2, [r3, #32] + tmpccmr1 = TIMx->CCMR1; + 8011bc2: 68fb ldr r3, [r7, #12] + 8011bc4: 699b ldr r3, [r3, #24] + 8011bc6: 613b str r3, [r7, #16] + + /* Set the filter */ + tmpccmr1 &= ~TIM_CCMR1_IC2F; + 8011bc8: 693b ldr r3, [r7, #16] + 8011bca: f423 4370 bic.w r3, r3, #61440 @ 0xf000 + 8011bce: 613b str r3, [r7, #16] + tmpccmr1 |= (TIM_ICFilter << 12U); + 8011bd0: 687b ldr r3, [r7, #4] + 8011bd2: 031b lsls r3, r3, #12 + 8011bd4: 693a ldr r2, [r7, #16] + 8011bd6: 4313 orrs r3, r2 + 8011bd8: 613b str r3, [r7, #16] + + /* Select the Polarity and set the CC2E Bit */ + tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); + 8011bda: 697b ldr r3, [r7, #20] + 8011bdc: f023 03a0 bic.w r3, r3, #160 @ 0xa0 + 8011be0: 617b str r3, [r7, #20] + tmpccer |= (TIM_ICPolarity << 4U); + 8011be2: 68bb ldr r3, [r7, #8] + 8011be4: 011b lsls r3, r3, #4 + 8011be6: 697a ldr r2, [r7, #20] + 8011be8: 4313 orrs r3, r2 + 8011bea: 617b str r3, [r7, #20] + + /* Write to TIMx CCMR1 and CCER registers */ + TIMx->CCMR1 = tmpccmr1 ; + 8011bec: 68fb ldr r3, [r7, #12] + 8011bee: 693a ldr r2, [r7, #16] + 8011bf0: 619a str r2, [r3, #24] + TIMx->CCER = tmpccer; + 8011bf2: 68fb ldr r3, [r7, #12] + 8011bf4: 697a ldr r2, [r7, #20] + 8011bf6: 621a str r2, [r3, #32] +} + 8011bf8: bf00 nop + 8011bfa: 371c adds r7, #28 + 8011bfc: 46bd mov sp, r7 + 8011bfe: bc80 pop {r7} + 8011c00: 4770 bx lr + +08011c02 : + * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 + * @arg TIM_TS_ETRF: External Trigger input + * @retval None + */ +static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) +{ + 8011c02: b480 push {r7} + 8011c04: b085 sub sp, #20 + 8011c06: af00 add r7, sp, #0 + 8011c08: 6078 str r0, [r7, #4] + 8011c0a: 6039 str r1, [r7, #0] + uint32_t tmpsmcr; + + /* Get the TIMx SMCR register value */ + tmpsmcr = TIMx->SMCR; + 8011c0c: 687b ldr r3, [r7, #4] + 8011c0e: 689b ldr r3, [r3, #8] + 8011c10: 60fb str r3, [r7, #12] + /* Reset the TS Bits */ + tmpsmcr &= ~TIM_SMCR_TS; + 8011c12: 68fb ldr r3, [r7, #12] + 8011c14: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8011c18: 60fb str r3, [r7, #12] + /* Set the Input Trigger source and the slave mode*/ + tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); + 8011c1a: 683a ldr r2, [r7, #0] + 8011c1c: 68fb ldr r3, [r7, #12] + 8011c1e: 4313 orrs r3, r2 + 8011c20: f043 0307 orr.w r3, r3, #7 + 8011c24: 60fb str r3, [r7, #12] + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; + 8011c26: 687b ldr r3, [r7, #4] + 8011c28: 68fa ldr r2, [r7, #12] + 8011c2a: 609a str r2, [r3, #8] +} + 8011c2c: bf00 nop + 8011c2e: 3714 adds r7, #20 + 8011c30: 46bd mov sp, r7 + 8011c32: bc80 pop {r7} + 8011c34: 4770 bx lr + +08011c36 : + * This parameter must be a value between 0x00 and 0x0F + * @retval None + */ +void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, + uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) +{ + 8011c36: b480 push {r7} + 8011c38: b087 sub sp, #28 + 8011c3a: af00 add r7, sp, #0 + 8011c3c: 60f8 str r0, [r7, #12] + 8011c3e: 60b9 str r1, [r7, #8] + 8011c40: 607a str r2, [r7, #4] + 8011c42: 603b str r3, [r7, #0] + uint32_t tmpsmcr; + + tmpsmcr = TIMx->SMCR; + 8011c44: 68fb ldr r3, [r7, #12] + 8011c46: 689b ldr r3, [r3, #8] + 8011c48: 617b str r3, [r7, #20] + + /* Reset the ETR Bits */ + tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); + 8011c4a: 697b ldr r3, [r7, #20] + 8011c4c: f423 437f bic.w r3, r3, #65280 @ 0xff00 + 8011c50: 617b str r3, [r7, #20] + + /* Set the Prescaler, the Filter value and the Polarity */ + tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); + 8011c52: 683b ldr r3, [r7, #0] + 8011c54: 021a lsls r2, r3, #8 + 8011c56: 687b ldr r3, [r7, #4] + 8011c58: 431a orrs r2, r3 + 8011c5a: 68bb ldr r3, [r7, #8] + 8011c5c: 4313 orrs r3, r2 + 8011c5e: 697a ldr r2, [r7, #20] + 8011c60: 4313 orrs r3, r2 + 8011c62: 617b str r3, [r7, #20] + + /* Write to TIMx SMCR */ + TIMx->SMCR = tmpsmcr; + 8011c64: 68fb ldr r3, [r7, #12] + 8011c66: 697a ldr r2, [r7, #20] + 8011c68: 609a str r2, [r3, #8] +} + 8011c6a: bf00 nop + 8011c6c: 371c adds r7, #28 + 8011c6e: 46bd mov sp, r7 + 8011c70: bc80 pop {r7} + 8011c72: 4770 bx lr + +08011c74 : + * @param ChannelState specifies the TIM Channel CCxE bit new state. + * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. + * @retval None + */ +void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) +{ + 8011c74: b480 push {r7} + 8011c76: b087 sub sp, #28 + 8011c78: af00 add r7, sp, #0 + 8011c7a: 60f8 str r0, [r7, #12] + 8011c7c: 60b9 str r1, [r7, #8] + 8011c7e: 607a str r2, [r7, #4] + + /* Check the parameters */ + assert_param(IS_TIM_CC1_INSTANCE(TIMx)); + assert_param(IS_TIM_CHANNELS(Channel)); + + tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ + 8011c80: 68bb ldr r3, [r7, #8] + 8011c82: f003 031f and.w r3, r3, #31 + 8011c86: 2201 movs r2, #1 + 8011c88: fa02 f303 lsl.w r3, r2, r3 + 8011c8c: 617b str r3, [r7, #20] + + /* Reset the CCxE Bit */ + TIMx->CCER &= ~tmp; + 8011c8e: 68fb ldr r3, [r7, #12] + 8011c90: 6a1a ldr r2, [r3, #32] + 8011c92: 697b ldr r3, [r7, #20] + 8011c94: 43db mvns r3, r3 + 8011c96: 401a ands r2, r3 + 8011c98: 68fb ldr r3, [r7, #12] + 8011c9a: 621a str r2, [r3, #32] + + /* Set or reset the CCxE Bit */ + TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ + 8011c9c: 68fb ldr r3, [r7, #12] + 8011c9e: 6a1a ldr r2, [r3, #32] + 8011ca0: 68bb ldr r3, [r7, #8] + 8011ca2: f003 031f and.w r3, r3, #31 + 8011ca6: 6879 ldr r1, [r7, #4] + 8011ca8: fa01 f303 lsl.w r3, r1, r3 + 8011cac: 431a orrs r2, r3 + 8011cae: 68fb ldr r3, [r7, #12] + 8011cb0: 621a str r2, [r3, #32] +} + 8011cb2: bf00 nop + 8011cb4: 371c adds r7, #28 + 8011cb6: 46bd mov sp, r7 + 8011cb8: bc80 pop {r7} + 8011cba: 4770 bx lr + +08011cbc : + * mode. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, + const TIM_MasterConfigTypeDef *sMasterConfig) +{ + 8011cbc: b480 push {r7} + 8011cbe: b085 sub sp, #20 + 8011cc0: af00 add r7, sp, #0 + 8011cc2: 6078 str r0, [r7, #4] + 8011cc4: 6039 str r1, [r7, #0] + assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); + assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); + assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); + + /* Check input state */ + __HAL_LOCK(htim); + 8011cc6: 687b ldr r3, [r7, #4] + 8011cc8: f893 303c ldrb.w r3, [r3, #60] @ 0x3c + 8011ccc: 2b01 cmp r3, #1 + 8011cce: d101 bne.n 8011cd4 + 8011cd0: 2302 movs r3, #2 + 8011cd2: e04b b.n 8011d6c + 8011cd4: 687b ldr r3, [r7, #4] + 8011cd6: 2201 movs r2, #1 + 8011cd8: f883 203c strb.w r2, [r3, #60] @ 0x3c + + /* Change the handler state */ + htim->State = HAL_TIM_STATE_BUSY; + 8011cdc: 687b ldr r3, [r7, #4] + 8011cde: 2202 movs r2, #2 + 8011ce0: f883 203d strb.w r2, [r3, #61] @ 0x3d + + /* Get the TIMx CR2 register value */ + tmpcr2 = htim->Instance->CR2; + 8011ce4: 687b ldr r3, [r7, #4] + 8011ce6: 681b ldr r3, [r3, #0] + 8011ce8: 685b ldr r3, [r3, #4] + 8011cea: 60fb str r3, [r7, #12] + + /* Get the TIMx SMCR register value */ + tmpsmcr = htim->Instance->SMCR; + 8011cec: 687b ldr r3, [r7, #4] + 8011cee: 681b ldr r3, [r3, #0] + 8011cf0: 689b ldr r3, [r3, #8] + 8011cf2: 60bb str r3, [r7, #8] + + /* Reset the MMS Bits */ + tmpcr2 &= ~TIM_CR2_MMS; + 8011cf4: 68fb ldr r3, [r7, #12] + 8011cf6: f023 0370 bic.w r3, r3, #112 @ 0x70 + 8011cfa: 60fb str r3, [r7, #12] + /* Select the TRGO source */ + tmpcr2 |= sMasterConfig->MasterOutputTrigger; + 8011cfc: 683b ldr r3, [r7, #0] + 8011cfe: 681b ldr r3, [r3, #0] + 8011d00: 68fa ldr r2, [r7, #12] + 8011d02: 4313 orrs r3, r2 + 8011d04: 60fb str r3, [r7, #12] + + /* Update TIMx CR2 */ + htim->Instance->CR2 = tmpcr2; + 8011d06: 687b ldr r3, [r7, #4] + 8011d08: 681b ldr r3, [r3, #0] + 8011d0a: 68fa ldr r2, [r7, #12] + 8011d0c: 605a str r2, [r3, #4] + + if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) + 8011d0e: 687b ldr r3, [r7, #4] + 8011d10: 681b ldr r3, [r3, #0] + 8011d12: 4a19 ldr r2, [pc, #100] @ (8011d78 ) + 8011d14: 4293 cmp r3, r2 + 8011d16: d013 beq.n 8011d40 + 8011d18: 687b ldr r3, [r7, #4] + 8011d1a: 681b ldr r3, [r3, #0] + 8011d1c: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8011d20: d00e beq.n 8011d40 + 8011d22: 687b ldr r3, [r7, #4] + 8011d24: 681b ldr r3, [r3, #0] + 8011d26: 4a15 ldr r2, [pc, #84] @ (8011d7c ) + 8011d28: 4293 cmp r3, r2 + 8011d2a: d009 beq.n 8011d40 + 8011d2c: 687b ldr r3, [r7, #4] + 8011d2e: 681b ldr r3, [r3, #0] + 8011d30: 4a13 ldr r2, [pc, #76] @ (8011d80 ) + 8011d32: 4293 cmp r3, r2 + 8011d34: d004 beq.n 8011d40 + 8011d36: 687b ldr r3, [r7, #4] + 8011d38: 681b ldr r3, [r3, #0] + 8011d3a: 4a12 ldr r2, [pc, #72] @ (8011d84 ) + 8011d3c: 4293 cmp r3, r2 + 8011d3e: d10c bne.n 8011d5a + { + /* Reset the MSM Bit */ + tmpsmcr &= ~TIM_SMCR_MSM; + 8011d40: 68bb ldr r3, [r7, #8] + 8011d42: f023 0380 bic.w r3, r3, #128 @ 0x80 + 8011d46: 60bb str r3, [r7, #8] + /* Set master mode */ + tmpsmcr |= sMasterConfig->MasterSlaveMode; + 8011d48: 683b ldr r3, [r7, #0] + 8011d4a: 685b ldr r3, [r3, #4] + 8011d4c: 68ba ldr r2, [r7, #8] + 8011d4e: 4313 orrs r3, r2 + 8011d50: 60bb str r3, [r7, #8] + + /* Update TIMx SMCR */ + htim->Instance->SMCR = tmpsmcr; + 8011d52: 687b ldr r3, [r7, #4] + 8011d54: 681b ldr r3, [r3, #0] + 8011d56: 68ba ldr r2, [r7, #8] + 8011d58: 609a str r2, [r3, #8] + } + + /* Change the htim state */ + htim->State = HAL_TIM_STATE_READY; + 8011d5a: 687b ldr r3, [r7, #4] + 8011d5c: 2201 movs r2, #1 + 8011d5e: f883 203d strb.w r2, [r3, #61] @ 0x3d + + __HAL_UNLOCK(htim); + 8011d62: 687b ldr r3, [r7, #4] + 8011d64: 2200 movs r2, #0 + 8011d66: f883 203c strb.w r2, [r3, #60] @ 0x3c + + return HAL_OK; + 8011d6a: 2300 movs r3, #0 +} + 8011d6c: 4618 mov r0, r3 + 8011d6e: 3714 adds r7, #20 + 8011d70: 46bd mov sp, r7 + 8011d72: bc80 pop {r7} + 8011d74: 4770 bx lr + 8011d76: bf00 nop + 8011d78: 40012c00 .word 0x40012c00 + 8011d7c: 40000400 .word 0x40000400 + 8011d80: 40000800 .word 0x40000800 + 8011d84: 40000c00 .word 0x40000c00 + +08011d88 : + * @brief Commutation callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) +{ + 8011d88: b480 push {r7} + 8011d8a: b083 sub sp, #12 + 8011d8c: af00 add r7, sp, #0 + 8011d8e: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_CommutCallback could be implemented in the user file + */ +} + 8011d90: bf00 nop + 8011d92: 370c adds r7, #12 + 8011d94: 46bd mov sp, r7 + 8011d96: bc80 pop {r7} + 8011d98: 4770 bx lr + +08011d9a : + * @brief Break detection callback in non-blocking mode + * @param htim TIM handle + * @retval None + */ +__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) +{ + 8011d9a: b480 push {r7} + 8011d9c: b083 sub sp, #12 + 8011d9e: af00 add r7, sp, #0 + 8011da0: 6078 str r0, [r7, #4] + UNUSED(htim); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_TIMEx_BreakCallback could be implemented in the user file + */ +} + 8011da2: bf00 nop + 8011da4: 370c adds r7, #12 + 8011da6: 46bd mov sp, r7 + 8011da8: bc80 pop {r7} + 8011daa: 4770 bx lr + +08011dac : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) +{ + 8011dac: b580 push {r7, lr} + 8011dae: b082 sub sp, #8 + 8011db0: af00 add r7, sp, #0 + 8011db2: 6078 str r0, [r7, #4] + /* Check the UART handle allocation */ + if (huart == NULL) + 8011db4: 687b ldr r3, [r7, #4] + 8011db6: 2b00 cmp r3, #0 + 8011db8: d101 bne.n 8011dbe + { + return HAL_ERROR; + 8011dba: 2301 movs r3, #1 + 8011dbc: e042 b.n 8011e44 + assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); +#if defined(USART_CR1_OVER8) + assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); +#endif /* USART_CR1_OVER8 */ + + if (huart->gState == HAL_UART_STATE_RESET) + 8011dbe: 687b ldr r3, [r7, #4] + 8011dc0: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8011dc4: b2db uxtb r3, r3 + 8011dc6: 2b00 cmp r3, #0 + 8011dc8: d106 bne.n 8011dd8 + { + /* Allocate lock resource and initialize it */ + huart->Lock = HAL_UNLOCKED; + 8011dca: 687b ldr r3, [r7, #4] + 8011dcc: 2200 movs r2, #0 + 8011dce: f883 2040 strb.w r2, [r3, #64] @ 0x40 + + /* Init the low level hardware */ + huart->MspInitCallback(huart); +#else + /* Init the low level hardware : GPIO, CLOCK */ + HAL_UART_MspInit(huart); + 8011dd2: 6878 ldr r0, [r7, #4] + 8011dd4: f7fb fbb4 bl 800d540 +#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ + } + + huart->gState = HAL_UART_STATE_BUSY; + 8011dd8: 687b ldr r3, [r7, #4] + 8011dda: 2224 movs r2, #36 @ 0x24 + 8011ddc: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + /* Disable the peripheral */ + __HAL_UART_DISABLE(huart); + 8011de0: 687b ldr r3, [r7, #4] + 8011de2: 681b ldr r3, [r3, #0] + 8011de4: 68da ldr r2, [r3, #12] + 8011de6: 687b ldr r3, [r7, #4] + 8011de8: 681b ldr r3, [r3, #0] + 8011dea: f422 5200 bic.w r2, r2, #8192 @ 0x2000 + 8011dee: 60da str r2, [r3, #12] + + /* Set the UART Communication parameters */ + UART_SetConfig(huart); + 8011df0: 6878 ldr r0, [r7, #4] + 8011df2: f000 ffb5 bl 8012d60 + + /* In asynchronous mode, the following bits must be kept cleared: + - LINEN and CLKEN bits in the USART_CR2 register, + - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ + CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); + 8011df6: 687b ldr r3, [r7, #4] + 8011df8: 681b ldr r3, [r3, #0] + 8011dfa: 691a ldr r2, [r3, #16] + 8011dfc: 687b ldr r3, [r7, #4] + 8011dfe: 681b ldr r3, [r3, #0] + 8011e00: f422 4290 bic.w r2, r2, #18432 @ 0x4800 + 8011e04: 611a str r2, [r3, #16] + CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); + 8011e06: 687b ldr r3, [r7, #4] + 8011e08: 681b ldr r3, [r3, #0] + 8011e0a: 695a ldr r2, [r3, #20] + 8011e0c: 687b ldr r3, [r7, #4] + 8011e0e: 681b ldr r3, [r3, #0] + 8011e10: f022 022a bic.w r2, r2, #42 @ 0x2a + 8011e14: 615a str r2, [r3, #20] + + /* Enable the peripheral */ + __HAL_UART_ENABLE(huart); + 8011e16: 687b ldr r3, [r7, #4] + 8011e18: 681b ldr r3, [r3, #0] + 8011e1a: 68da ldr r2, [r3, #12] + 8011e1c: 687b ldr r3, [r7, #4] + 8011e1e: 681b ldr r3, [r3, #0] + 8011e20: f442 5200 orr.w r2, r2, #8192 @ 0x2000 + 8011e24: 60da str r2, [r3, #12] + + /* Initialize the UART state */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8011e26: 687b ldr r3, [r7, #4] + 8011e28: 2200 movs r2, #0 + 8011e2a: 645a str r2, [r3, #68] @ 0x44 + huart->gState = HAL_UART_STATE_READY; + 8011e2c: 687b ldr r3, [r7, #4] + 8011e2e: 2220 movs r2, #32 + 8011e30: f883 2041 strb.w r2, [r3, #65] @ 0x41 + huart->RxState = HAL_UART_STATE_READY; + 8011e34: 687b ldr r3, [r7, #4] + 8011e36: 2220 movs r2, #32 + 8011e38: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->RxEventType = HAL_UART_RXEVENT_TC; + 8011e3c: 687b ldr r3, [r7, #4] + 8011e3e: 2200 movs r2, #0 + 8011e40: 635a str r2, [r3, #52] @ 0x34 + + return HAL_OK; + 8011e42: 2300 movs r3, #0 +} + 8011e44: 4618 mov r0, r3 + 8011e46: 3708 adds r7, #8 + 8011e48: 46bd mov sp, r7 + 8011e4a: bd80 pop {r7, pc} + +08011e4c : + * @param Size Amount of data elements (u8 or u16) to be sent + * @param Timeout Timeout duration + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout) +{ + 8011e4c: b580 push {r7, lr} + 8011e4e: b08a sub sp, #40 @ 0x28 + 8011e50: af02 add r7, sp, #8 + 8011e52: 60f8 str r0, [r7, #12] + 8011e54: 60b9 str r1, [r7, #8] + 8011e56: 603b str r3, [r7, #0] + 8011e58: 4613 mov r3, r2 + 8011e5a: 80fb strh r3, [r7, #6] + const uint8_t *pdata8bits; + const uint16_t *pdata16bits; + uint32_t tickstart = 0U; + 8011e5c: 2300 movs r3, #0 + 8011e5e: 617b str r3, [r7, #20] + + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + 8011e60: 68fb ldr r3, [r7, #12] + 8011e62: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8011e66: b2db uxtb r3, r3 + 8011e68: 2b20 cmp r3, #32 + 8011e6a: d175 bne.n 8011f58 + { + if ((pData == NULL) || (Size == 0U)) + 8011e6c: 68bb ldr r3, [r7, #8] + 8011e6e: 2b00 cmp r3, #0 + 8011e70: d002 beq.n 8011e78 + 8011e72: 88fb ldrh r3, [r7, #6] + 8011e74: 2b00 cmp r3, #0 + 8011e76: d101 bne.n 8011e7c + { + return HAL_ERROR; + 8011e78: 2301 movs r3, #1 + 8011e7a: e06e b.n 8011f5a + } + + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8011e7c: 68fb ldr r3, [r7, #12] + 8011e7e: 2200 movs r2, #0 + 8011e80: 645a str r2, [r3, #68] @ 0x44 + huart->gState = HAL_UART_STATE_BUSY_TX; + 8011e82: 68fb ldr r3, [r7, #12] + 8011e84: 2221 movs r2, #33 @ 0x21 + 8011e86: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + /* Init tickstart for timeout management */ + tickstart = HAL_GetTick(); + 8011e8a: f7fb fd25 bl 800d8d8 + 8011e8e: 6178 str r0, [r7, #20] + + huart->TxXferSize = Size; + 8011e90: 68fb ldr r3, [r7, #12] + 8011e92: 88fa ldrh r2, [r7, #6] + 8011e94: 849a strh r2, [r3, #36] @ 0x24 + huart->TxXferCount = Size; + 8011e96: 68fb ldr r3, [r7, #12] + 8011e98: 88fa ldrh r2, [r7, #6] + 8011e9a: 84da strh r2, [r3, #38] @ 0x26 + + /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */ + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + 8011e9c: 68fb ldr r3, [r7, #12] + 8011e9e: 689b ldr r3, [r3, #8] + 8011ea0: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8011ea4: d108 bne.n 8011eb8 + 8011ea6: 68fb ldr r3, [r7, #12] + 8011ea8: 691b ldr r3, [r3, #16] + 8011eaa: 2b00 cmp r3, #0 + 8011eac: d104 bne.n 8011eb8 + { + pdata8bits = NULL; + 8011eae: 2300 movs r3, #0 + 8011eb0: 61fb str r3, [r7, #28] + pdata16bits = (const uint16_t *) pData; + 8011eb2: 68bb ldr r3, [r7, #8] + 8011eb4: 61bb str r3, [r7, #24] + 8011eb6: e003 b.n 8011ec0 + } + else + { + pdata8bits = pData; + 8011eb8: 68bb ldr r3, [r7, #8] + 8011eba: 61fb str r3, [r7, #28] + pdata16bits = NULL; + 8011ebc: 2300 movs r3, #0 + 8011ebe: 61bb str r3, [r7, #24] + } + + while (huart->TxXferCount > 0U) + 8011ec0: e02e b.n 8011f20 + { + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK) + 8011ec2: 683b ldr r3, [r7, #0] + 8011ec4: 9300 str r3, [sp, #0] + 8011ec6: 697b ldr r3, [r7, #20] + 8011ec8: 2200 movs r2, #0 + 8011eca: 2180 movs r1, #128 @ 0x80 + 8011ecc: 68f8 ldr r0, [r7, #12] + 8011ece: f000 fcb9 bl 8012844 + 8011ed2: 4603 mov r3, r0 + 8011ed4: 2b00 cmp r3, #0 + 8011ed6: d005 beq.n 8011ee4 + { + huart->gState = HAL_UART_STATE_READY; + 8011ed8: 68fb ldr r3, [r7, #12] + 8011eda: 2220 movs r2, #32 + 8011edc: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + return HAL_TIMEOUT; + 8011ee0: 2303 movs r3, #3 + 8011ee2: e03a b.n 8011f5a + } + if (pdata8bits == NULL) + 8011ee4: 69fb ldr r3, [r7, #28] + 8011ee6: 2b00 cmp r3, #0 + 8011ee8: d10b bne.n 8011f02 + { + huart->Instance->DR = (uint16_t)(*pdata16bits & 0x01FFU); + 8011eea: 69bb ldr r3, [r7, #24] + 8011eec: 881b ldrh r3, [r3, #0] + 8011eee: 461a mov r2, r3 + 8011ef0: 68fb ldr r3, [r7, #12] + 8011ef2: 681b ldr r3, [r3, #0] + 8011ef4: f3c2 0208 ubfx r2, r2, #0, #9 + 8011ef8: 605a str r2, [r3, #4] + pdata16bits++; + 8011efa: 69bb ldr r3, [r7, #24] + 8011efc: 3302 adds r3, #2 + 8011efe: 61bb str r3, [r7, #24] + 8011f00: e007 b.n 8011f12 + } + else + { + huart->Instance->DR = (uint8_t)(*pdata8bits & 0xFFU); + 8011f02: 69fb ldr r3, [r7, #28] + 8011f04: 781a ldrb r2, [r3, #0] + 8011f06: 68fb ldr r3, [r7, #12] + 8011f08: 681b ldr r3, [r3, #0] + 8011f0a: 605a str r2, [r3, #4] + pdata8bits++; + 8011f0c: 69fb ldr r3, [r7, #28] + 8011f0e: 3301 adds r3, #1 + 8011f10: 61fb str r3, [r7, #28] + } + huart->TxXferCount--; + 8011f12: 68fb ldr r3, [r7, #12] + 8011f14: 8cdb ldrh r3, [r3, #38] @ 0x26 + 8011f16: b29b uxth r3, r3 + 8011f18: 3b01 subs r3, #1 + 8011f1a: b29a uxth r2, r3 + 8011f1c: 68fb ldr r3, [r7, #12] + 8011f1e: 84da strh r2, [r3, #38] @ 0x26 + while (huart->TxXferCount > 0U) + 8011f20: 68fb ldr r3, [r7, #12] + 8011f22: 8cdb ldrh r3, [r3, #38] @ 0x26 + 8011f24: b29b uxth r3, r3 + 8011f26: 2b00 cmp r3, #0 + 8011f28: d1cb bne.n 8011ec2 + } + + if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TC, RESET, tickstart, Timeout) != HAL_OK) + 8011f2a: 683b ldr r3, [r7, #0] + 8011f2c: 9300 str r3, [sp, #0] + 8011f2e: 697b ldr r3, [r7, #20] + 8011f30: 2200 movs r2, #0 + 8011f32: 2140 movs r1, #64 @ 0x40 + 8011f34: 68f8 ldr r0, [r7, #12] + 8011f36: f000 fc85 bl 8012844 + 8011f3a: 4603 mov r3, r0 + 8011f3c: 2b00 cmp r3, #0 + 8011f3e: d005 beq.n 8011f4c + { + huart->gState = HAL_UART_STATE_READY; + 8011f40: 68fb ldr r3, [r7, #12] + 8011f42: 2220 movs r2, #32 + 8011f44: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + return HAL_TIMEOUT; + 8011f48: 2303 movs r3, #3 + 8011f4a: e006 b.n 8011f5a + } + + /* At end of Tx process, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + 8011f4c: 68fb ldr r3, [r7, #12] + 8011f4e: 2220 movs r2, #32 + 8011f50: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + return HAL_OK; + 8011f54: 2300 movs r3, #0 + 8011f56: e000 b.n 8011f5a + } + else + { + return HAL_BUSY; + 8011f58: 2302 movs r3, #2 + } +} + 8011f5a: 4618 mov r0, r3 + 8011f5c: 3720 adds r7, #32 + 8011f5e: 46bd mov sp, r7 + 8011f60: bd80 pop {r7, pc} + +08011f62 : + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be sent + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) +{ + 8011f62: b480 push {r7} + 8011f64: b085 sub sp, #20 + 8011f66: af00 add r7, sp, #0 + 8011f68: 60f8 str r0, [r7, #12] + 8011f6a: 60b9 str r1, [r7, #8] + 8011f6c: 4613 mov r3, r2 + 8011f6e: 80fb strh r3, [r7, #6] + /* Check that a Tx process is not already ongoing */ + if (huart->gState == HAL_UART_STATE_READY) + 8011f70: 68fb ldr r3, [r7, #12] + 8011f72: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8011f76: b2db uxtb r3, r3 + 8011f78: 2b20 cmp r3, #32 + 8011f7a: d121 bne.n 8011fc0 + { + if ((pData == NULL) || (Size == 0U)) + 8011f7c: 68bb ldr r3, [r7, #8] + 8011f7e: 2b00 cmp r3, #0 + 8011f80: d002 beq.n 8011f88 + 8011f82: 88fb ldrh r3, [r7, #6] + 8011f84: 2b00 cmp r3, #0 + 8011f86: d101 bne.n 8011f8c + { + return HAL_ERROR; + 8011f88: 2301 movs r3, #1 + 8011f8a: e01a b.n 8011fc2 + } + + huart->pTxBuffPtr = pData; + 8011f8c: 68fb ldr r3, [r7, #12] + 8011f8e: 68ba ldr r2, [r7, #8] + 8011f90: 621a str r2, [r3, #32] + huart->TxXferSize = Size; + 8011f92: 68fb ldr r3, [r7, #12] + 8011f94: 88fa ldrh r2, [r7, #6] + 8011f96: 849a strh r2, [r3, #36] @ 0x24 + huart->TxXferCount = Size; + 8011f98: 68fb ldr r3, [r7, #12] + 8011f9a: 88fa ldrh r2, [r7, #6] + 8011f9c: 84da strh r2, [r3, #38] @ 0x26 + + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8011f9e: 68fb ldr r3, [r7, #12] + 8011fa0: 2200 movs r2, #0 + 8011fa2: 645a str r2, [r3, #68] @ 0x44 + huart->gState = HAL_UART_STATE_BUSY_TX; + 8011fa4: 68fb ldr r3, [r7, #12] + 8011fa6: 2221 movs r2, #33 @ 0x21 + 8011fa8: f883 2041 strb.w r2, [r3, #65] @ 0x41 + + /* Enable the UART Transmit data register empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); + 8011fac: 68fb ldr r3, [r7, #12] + 8011fae: 681b ldr r3, [r3, #0] + 8011fb0: 68da ldr r2, [r3, #12] + 8011fb2: 68fb ldr r3, [r7, #12] + 8011fb4: 681b ldr r3, [r3, #0] + 8011fb6: f042 0280 orr.w r2, r2, #128 @ 0x80 + 8011fba: 60da str r2, [r3, #12] + + return HAL_OK; + 8011fbc: 2300 movs r3, #0 + 8011fbe: e000 b.n 8011fc2 + } + else + { + return HAL_BUSY; + 8011fc0: 2302 movs r3, #2 + } +} + 8011fc2: 4618 mov r0, r3 + 8011fc4: 3714 adds r7, #20 + 8011fc6: 46bd mov sp, r7 + 8011fc8: bc80 pop {r7} + 8011fca: 4770 bx lr + +08011fcc : + * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). + * @param Size Amount of data elements (uint8_t or uint16_t) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + 8011fcc: b580 push {r7, lr} + 8011fce: b08c sub sp, #48 @ 0x30 + 8011fd0: af00 add r7, sp, #0 + 8011fd2: 60f8 str r0, [r7, #12] + 8011fd4: 60b9 str r1, [r7, #8] + 8011fd6: 4613 mov r3, r2 + 8011fd8: 80fb strh r3, [r7, #6] + HAL_StatusTypeDef status; + + /* Check that a Rx process is not already ongoing */ + if (huart->RxState == HAL_UART_STATE_READY) + 8011fda: 68fb ldr r3, [r7, #12] + 8011fdc: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8011fe0: b2db uxtb r3, r3 + 8011fe2: 2b20 cmp r3, #32 + 8011fe4: d14a bne.n 801207c + { + if ((pData == NULL) || (Size == 0U)) + 8011fe6: 68bb ldr r3, [r7, #8] + 8011fe8: 2b00 cmp r3, #0 + 8011fea: d002 beq.n 8011ff2 + 8011fec: 88fb ldrh r3, [r7, #6] + 8011fee: 2b00 cmp r3, #0 + 8011ff0: d101 bne.n 8011ff6 + { + return HAL_ERROR; + 8011ff2: 2301 movs r3, #1 + 8011ff4: e043 b.n 801207e + } + + /* Set Reception type to reception till IDLE Event*/ + huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; + 8011ff6: 68fb ldr r3, [r7, #12] + 8011ff8: 2201 movs r2, #1 + 8011ffa: 631a str r2, [r3, #48] @ 0x30 + huart->RxEventType = HAL_UART_RXEVENT_TC; + 8011ffc: 68fb ldr r3, [r7, #12] + 8011ffe: 2200 movs r2, #0 + 8012000: 635a str r2, [r3, #52] @ 0x34 + + status = UART_Start_Receive_IT(huart, pData, Size); + 8012002: 88fb ldrh r3, [r7, #6] + 8012004: 461a mov r2, r3 + 8012006: 68b9 ldr r1, [r7, #8] + 8012008: 68f8 ldr r0, [r7, #12] + 801200a: f000 fc74 bl 80128f6 + 801200e: 4603 mov r3, r0 + 8012010: f887 302f strb.w r3, [r7, #47] @ 0x2f + + /* Check Rx process has been successfully started */ + if (status == HAL_OK) + 8012014: f897 302f ldrb.w r3, [r7, #47] @ 0x2f + 8012018: 2b00 cmp r3, #0 + 801201a: d12c bne.n 8012076 + { + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 801201c: 68fb ldr r3, [r7, #12] + 801201e: 6b1b ldr r3, [r3, #48] @ 0x30 + 8012020: 2b01 cmp r3, #1 + 8012022: d125 bne.n 8012070 + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + 8012024: 2300 movs r3, #0 + 8012026: 613b str r3, [r7, #16] + 8012028: 68fb ldr r3, [r7, #12] + 801202a: 681b ldr r3, [r3, #0] + 801202c: 681b ldr r3, [r3, #0] + 801202e: 613b str r3, [r7, #16] + 8012030: 68fb ldr r3, [r7, #12] + 8012032: 681b ldr r3, [r3, #0] + 8012034: 685b ldr r3, [r3, #4] + 8012036: 613b str r3, [r7, #16] + 8012038: 693b ldr r3, [r7, #16] + ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 801203a: 68fb ldr r3, [r7, #12] + 801203c: 681b ldr r3, [r3, #0] + 801203e: 330c adds r3, #12 + 8012040: 61bb str r3, [r7, #24] + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012042: 69bb ldr r3, [r7, #24] + 8012044: e853 3f00 ldrex r3, [r3] + 8012048: 617b str r3, [r7, #20] + return(result); + 801204a: 697b ldr r3, [r7, #20] + 801204c: f043 0310 orr.w r3, r3, #16 + 8012050: 62bb str r3, [r7, #40] @ 0x28 + 8012052: 68fb ldr r3, [r7, #12] + 8012054: 681b ldr r3, [r3, #0] + 8012056: 330c adds r3, #12 + 8012058: 6aba ldr r2, [r7, #40] @ 0x28 + 801205a: 627a str r2, [r7, #36] @ 0x24 + 801205c: 623b str r3, [r7, #32] + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 801205e: 6a39 ldr r1, [r7, #32] + 8012060: 6a7a ldr r2, [r7, #36] @ 0x24 + 8012062: e841 2300 strex r3, r2, [r1] + 8012066: 61fb str r3, [r7, #28] + return(result); + 8012068: 69fb ldr r3, [r7, #28] + 801206a: 2b00 cmp r3, #0 + 801206c: d1e5 bne.n 801203a + 801206e: e002 b.n 8012076 + { + /* In case of errors already pending when reception is started, + Interrupts may have already been raised and lead to reception abortion. + (Overrun error for instance). + In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ + status = HAL_ERROR; + 8012070: 2301 movs r3, #1 + 8012072: f887 302f strb.w r3, [r7, #47] @ 0x2f + } + } + + return status; + 8012076: f897 302f ldrb.w r3, [r7, #47] @ 0x2f + 801207a: e000 b.n 801207e + } + else + { + return HAL_BUSY; + 801207c: 2302 movs r3, #2 + } +} + 801207e: 4618 mov r0, r3 + 8012080: 3730 adds r7, #48 @ 0x30 + 8012082: 46bd mov sp, r7 + 8012084: bd80 pop {r7, pc} + ... + +08012088 : + * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be + * considered as completed only when user abort complete callback is executed (not when exiting function). + * @retval HAL status + */ +HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) +{ + 8012088: b580 push {r7, lr} + 801208a: b0a2 sub sp, #136 @ 0x88 + 801208c: af00 add r7, sp, #0 + 801208e: 6078 str r0, [r7, #4] + uint32_t AbortCplt = 0x01U; + 8012090: 2301 movs r3, #1 + 8012092: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + + /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); + 8012096: 687b ldr r3, [r7, #4] + 8012098: 681b ldr r3, [r3, #0] + 801209a: 330c adds r3, #12 + 801209c: 663b str r3, [r7, #96] @ 0x60 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 801209e: 6e3b ldr r3, [r7, #96] @ 0x60 + 80120a0: e853 3f00 ldrex r3, [r3] + 80120a4: 65fb str r3, [r7, #92] @ 0x5c + return(result); + 80120a6: 6dfb ldr r3, [r7, #92] @ 0x5c + 80120a8: f423 73f0 bic.w r3, r3, #480 @ 0x1e0 + 80120ac: f8c7 3080 str.w r3, [r7, #128] @ 0x80 + 80120b0: 687b ldr r3, [r7, #4] + 80120b2: 681b ldr r3, [r3, #0] + 80120b4: 330c adds r3, #12 + 80120b6: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80 + 80120ba: 66fa str r2, [r7, #108] @ 0x6c + 80120bc: 66bb str r3, [r7, #104] @ 0x68 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80120be: 6eb9 ldr r1, [r7, #104] @ 0x68 + 80120c0: 6efa ldr r2, [r7, #108] @ 0x6c + 80120c2: e841 2300 strex r3, r2, [r1] + 80120c6: 667b str r3, [r7, #100] @ 0x64 + return(result); + 80120c8: 6e7b ldr r3, [r7, #100] @ 0x64 + 80120ca: 2b00 cmp r3, #0 + 80120cc: d1e3 bne.n 8012096 + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 80120ce: 687b ldr r3, [r7, #4] + 80120d0: 681b ldr r3, [r3, #0] + 80120d2: 3314 adds r3, #20 + 80120d4: 64fb str r3, [r7, #76] @ 0x4c + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80120d6: 6cfb ldr r3, [r7, #76] @ 0x4c + 80120d8: e853 3f00 ldrex r3, [r3] + 80120dc: 64bb str r3, [r7, #72] @ 0x48 + return(result); + 80120de: 6cbb ldr r3, [r7, #72] @ 0x48 + 80120e0: f023 0301 bic.w r3, r3, #1 + 80120e4: 67fb str r3, [r7, #124] @ 0x7c + 80120e6: 687b ldr r3, [r7, #4] + 80120e8: 681b ldr r3, [r3, #0] + 80120ea: 3314 adds r3, #20 + 80120ec: 6ffa ldr r2, [r7, #124] @ 0x7c + 80120ee: 65ba str r2, [r7, #88] @ 0x58 + 80120f0: 657b str r3, [r7, #84] @ 0x54 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80120f2: 6d79 ldr r1, [r7, #84] @ 0x54 + 80120f4: 6dba ldr r2, [r7, #88] @ 0x58 + 80120f6: e841 2300 strex r3, r2, [r1] + 80120fa: 653b str r3, [r7, #80] @ 0x50 + return(result); + 80120fc: 6d3b ldr r3, [r7, #80] @ 0x50 + 80120fe: 2b00 cmp r3, #0 + 8012100: d1e5 bne.n 80120ce + + /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 8012102: 687b ldr r3, [r7, #4] + 8012104: 6b1b ldr r3, [r3, #48] @ 0x30 + 8012106: 2b01 cmp r3, #1 + 8012108: d119 bne.n 801213e + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); + 801210a: 687b ldr r3, [r7, #4] + 801210c: 681b ldr r3, [r3, #0] + 801210e: 330c adds r3, #12 + 8012110: 63bb str r3, [r7, #56] @ 0x38 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012112: 6bbb ldr r3, [r7, #56] @ 0x38 + 8012114: e853 3f00 ldrex r3, [r3] + 8012118: 637b str r3, [r7, #52] @ 0x34 + return(result); + 801211a: 6b7b ldr r3, [r7, #52] @ 0x34 + 801211c: f023 0310 bic.w r3, r3, #16 + 8012120: 67bb str r3, [r7, #120] @ 0x78 + 8012122: 687b ldr r3, [r7, #4] + 8012124: 681b ldr r3, [r3, #0] + 8012126: 330c adds r3, #12 + 8012128: 6fba ldr r2, [r7, #120] @ 0x78 + 801212a: 647a str r2, [r7, #68] @ 0x44 + 801212c: 643b str r3, [r7, #64] @ 0x40 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 801212e: 6c39 ldr r1, [r7, #64] @ 0x40 + 8012130: 6c7a ldr r2, [r7, #68] @ 0x44 + 8012132: e841 2300 strex r3, r2, [r1] + 8012136: 63fb str r3, [r7, #60] @ 0x3c + return(result); + 8012138: 6bfb ldr r3, [r7, #60] @ 0x3c + 801213a: 2b00 cmp r3, #0 + 801213c: d1e5 bne.n 801210a + } + + /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised + before any call to DMA Abort functions */ + /* DMA Tx Handle is valid */ + if (huart->hdmatx != NULL) + 801213e: 687b ldr r3, [r7, #4] + 8012140: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012142: 2b00 cmp r3, #0 + 8012144: d00f beq.n 8012166 + { + /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + 8012146: 687b ldr r3, [r7, #4] + 8012148: 681b ldr r3, [r3, #0] + 801214a: 695b ldr r3, [r3, #20] + 801214c: f003 0380 and.w r3, r3, #128 @ 0x80 + 8012150: 2b00 cmp r3, #0 + 8012152: d004 beq.n 801215e + { + huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback; + 8012154: 687b ldr r3, [r7, #4] + 8012156: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012158: 4a53 ldr r2, [pc, #332] @ (80122a8 ) + 801215a: 635a str r2, [r3, #52] @ 0x34 + 801215c: e003 b.n 8012166 + } + else + { + huart->hdmatx->XferAbortCallback = NULL; + 801215e: 687b ldr r3, [r7, #4] + 8012160: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012162: 2200 movs r2, #0 + 8012164: 635a str r2, [r3, #52] @ 0x34 + } + } + /* DMA Rx Handle is valid */ + if (huart->hdmarx != NULL) + 8012166: 687b ldr r3, [r7, #4] + 8012168: 6bdb ldr r3, [r3, #60] @ 0x3c + 801216a: 2b00 cmp r3, #0 + 801216c: d00f beq.n 801218e + { + /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. + Otherwise, set it to NULL */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 801216e: 687b ldr r3, [r7, #4] + 8012170: 681b ldr r3, [r3, #0] + 8012172: 695b ldr r3, [r3, #20] + 8012174: f003 0340 and.w r3, r3, #64 @ 0x40 + 8012178: 2b00 cmp r3, #0 + 801217a: d004 beq.n 8012186 + { + huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback; + 801217c: 687b ldr r3, [r7, #4] + 801217e: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012180: 4a4a ldr r2, [pc, #296] @ (80122ac ) + 8012182: 635a str r2, [r3, #52] @ 0x34 + 8012184: e003 b.n 801218e + } + else + { + huart->hdmarx->XferAbortCallback = NULL; + 8012186: 687b ldr r3, [r7, #4] + 8012188: 6bdb ldr r3, [r3, #60] @ 0x3c + 801218a: 2200 movs r2, #0 + 801218c: 635a str r2, [r3, #52] @ 0x34 + } + } + + /* Disable the UART DMA Tx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) + 801218e: 687b ldr r3, [r7, #4] + 8012190: 681b ldr r3, [r3, #0] + 8012192: 695b ldr r3, [r3, #20] + 8012194: f003 0380 and.w r3, r3, #128 @ 0x80 + 8012198: 2b00 cmp r3, #0 + 801219a: d02d beq.n 80121f8 + { + /* Disable DMA Tx at UART level */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); + 801219c: 687b ldr r3, [r7, #4] + 801219e: 681b ldr r3, [r3, #0] + 80121a0: 3314 adds r3, #20 + 80121a2: 627b str r3, [r7, #36] @ 0x24 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80121a4: 6a7b ldr r3, [r7, #36] @ 0x24 + 80121a6: e853 3f00 ldrex r3, [r3] + 80121aa: 623b str r3, [r7, #32] + return(result); + 80121ac: 6a3b ldr r3, [r7, #32] + 80121ae: f023 0380 bic.w r3, r3, #128 @ 0x80 + 80121b2: 677b str r3, [r7, #116] @ 0x74 + 80121b4: 687b ldr r3, [r7, #4] + 80121b6: 681b ldr r3, [r3, #0] + 80121b8: 3314 adds r3, #20 + 80121ba: 6f7a ldr r2, [r7, #116] @ 0x74 + 80121bc: 633a str r2, [r7, #48] @ 0x30 + 80121be: 62fb str r3, [r7, #44] @ 0x2c + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80121c0: 6af9 ldr r1, [r7, #44] @ 0x2c + 80121c2: 6b3a ldr r2, [r7, #48] @ 0x30 + 80121c4: e841 2300 strex r3, r2, [r1] + 80121c8: 62bb str r3, [r7, #40] @ 0x28 + return(result); + 80121ca: 6abb ldr r3, [r7, #40] @ 0x28 + 80121cc: 2b00 cmp r3, #0 + 80121ce: d1e5 bne.n 801219c + + /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (callback) */ + if (huart->hdmatx != NULL) + 80121d0: 687b ldr r3, [r7, #4] + 80121d2: 6b9b ldr r3, [r3, #56] @ 0x38 + 80121d4: 2b00 cmp r3, #0 + 80121d6: d00f beq.n 80121f8 + { + /* UART Tx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA TX */ + if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) + 80121d8: 687b ldr r3, [r7, #4] + 80121da: 6b9b ldr r3, [r3, #56] @ 0x38 + 80121dc: 4618 mov r0, r3 + 80121de: f7fd f8e9 bl 800f3b4 + 80121e2: 4603 mov r3, r0 + 80121e4: 2b00 cmp r3, #0 + 80121e6: d004 beq.n 80121f2 + { + huart->hdmatx->XferAbortCallback = NULL; + 80121e8: 687b ldr r3, [r7, #4] + 80121ea: 6b9b ldr r3, [r3, #56] @ 0x38 + 80121ec: 2200 movs r2, #0 + 80121ee: 635a str r2, [r3, #52] @ 0x34 + 80121f0: e002 b.n 80121f8 + } + else + { + AbortCplt = 0x00U; + 80121f2: 2300 movs r3, #0 + 80121f4: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + } + } + } + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 80121f8: 687b ldr r3, [r7, #4] + 80121fa: 681b ldr r3, [r3, #0] + 80121fc: 695b ldr r3, [r3, #20] + 80121fe: f003 0340 and.w r3, r3, #64 @ 0x40 + 8012202: 2b00 cmp r3, #0 + 8012204: d030 beq.n 8012268 + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + 8012206: 687b ldr r3, [r7, #4] + 8012208: 681b ldr r3, [r3, #0] + 801220a: 3314 adds r3, #20 + 801220c: 613b str r3, [r7, #16] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 801220e: 693b ldr r3, [r7, #16] + 8012210: e853 3f00 ldrex r3, [r3] + 8012214: 60fb str r3, [r7, #12] + return(result); + 8012216: 68fb ldr r3, [r7, #12] + 8012218: f023 0340 bic.w r3, r3, #64 @ 0x40 + 801221c: 673b str r3, [r7, #112] @ 0x70 + 801221e: 687b ldr r3, [r7, #4] + 8012220: 681b ldr r3, [r3, #0] + 8012222: 3314 adds r3, #20 + 8012224: 6f3a ldr r2, [r7, #112] @ 0x70 + 8012226: 61fa str r2, [r7, #28] + 8012228: 61bb str r3, [r7, #24] + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 801222a: 69b9 ldr r1, [r7, #24] + 801222c: 69fa ldr r2, [r7, #28] + 801222e: e841 2300 strex r3, r2, [r1] + 8012232: 617b str r3, [r7, #20] + return(result); + 8012234: 697b ldr r3, [r7, #20] + 8012236: 2b00 cmp r3, #0 + 8012238: d1e5 bne.n 8012206 + + /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (callback) */ + if (huart->hdmarx != NULL) + 801223a: 687b ldr r3, [r7, #4] + 801223c: 6bdb ldr r3, [r3, #60] @ 0x3c + 801223e: 2b00 cmp r3, #0 + 8012240: d012 beq.n 8012268 + { + /* UART Rx DMA Abort callback has already been initialised : + will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ + + /* Abort DMA RX */ + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + 8012242: 687b ldr r3, [r7, #4] + 8012244: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012246: 4618 mov r0, r3 + 8012248: f7fd f8b4 bl 800f3b4 + 801224c: 4603 mov r3, r0 + 801224e: 2b00 cmp r3, #0 + 8012250: d007 beq.n 8012262 + { + huart->hdmarx->XferAbortCallback = NULL; + 8012252: 687b ldr r3, [r7, #4] + 8012254: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012256: 2200 movs r2, #0 + 8012258: 635a str r2, [r3, #52] @ 0x34 + AbortCplt = 0x01U; + 801225a: 2301 movs r3, #1 + 801225c: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + 8012260: e002 b.n 8012268 + } + else + { + AbortCplt = 0x00U; + 8012262: 2300 movs r3, #0 + 8012264: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + } + } + } + + /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ + if (AbortCplt == 0x01U) + 8012268: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84 + 801226c: 2b01 cmp r3, #1 + 801226e: d116 bne.n 801229e + { + /* Reset Tx and Rx transfer counters */ + huart->TxXferCount = 0x00U; + 8012270: 687b ldr r3, [r7, #4] + 8012272: 2200 movs r2, #0 + 8012274: 84da strh r2, [r3, #38] @ 0x26 + huart->RxXferCount = 0x00U; + 8012276: 687b ldr r3, [r7, #4] + 8012278: 2200 movs r2, #0 + 801227a: 85da strh r2, [r3, #46] @ 0x2e + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 801227c: 687b ldr r3, [r7, #4] + 801227e: 2200 movs r2, #0 + 8012280: 645a str r2, [r3, #68] @ 0x44 + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + 8012282: 687b ldr r3, [r7, #4] + 8012284: 2220 movs r2, #32 + 8012286: f883 2041 strb.w r2, [r3, #65] @ 0x41 + huart->RxState = HAL_UART_STATE_READY; + 801228a: 687b ldr r3, [r7, #4] + 801228c: 2220 movs r2, #32 + 801228e: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012292: 687b ldr r3, [r7, #4] + 8012294: 2200 movs r2, #0 + 8012296: 631a str r2, [r3, #48] @ 0x30 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); + 8012298: 6878 ldr r0, [r7, #4] + 801229a: f000 faad bl 80127f8 +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; + 801229e: 2300 movs r3, #0 +} + 80122a0: 4618 mov r0, r3 + 80122a2: 3788 adds r7, #136 @ 0x88 + 80122a4: 46bd mov sp, r7 + 80122a6: bd80 pop {r7, pc} + 80122a8: 08012a55 .word 0x08012a55 + 80122ac: 08012ab5 .word 0x08012ab5 + +080122b0 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) +{ + 80122b0: b580 push {r7, lr} + 80122b2: b0ba sub sp, #232 @ 0xe8 + 80122b4: af00 add r7, sp, #0 + 80122b6: 6078 str r0, [r7, #4] + uint32_t isrflags = READ_REG(huart->Instance->SR); + 80122b8: 687b ldr r3, [r7, #4] + 80122ba: 681b ldr r3, [r3, #0] + 80122bc: 681b ldr r3, [r3, #0] + 80122be: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4 + uint32_t cr1its = READ_REG(huart->Instance->CR1); + 80122c2: 687b ldr r3, [r7, #4] + 80122c4: 681b ldr r3, [r3, #0] + 80122c6: 68db ldr r3, [r3, #12] + 80122c8: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0 + uint32_t cr3its = READ_REG(huart->Instance->CR3); + 80122cc: 687b ldr r3, [r7, #4] + 80122ce: 681b ldr r3, [r3, #0] + 80122d0: 695b ldr r3, [r3, #20] + 80122d2: f8c7 30dc str.w r3, [r7, #220] @ 0xdc + uint32_t errorflags = 0x00U; + 80122d6: 2300 movs r3, #0 + 80122d8: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 + uint32_t dmarequest = 0x00U; + 80122dc: 2300 movs r3, #0 + 80122de: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 + + /* If no error occurs */ + errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE)); + 80122e2: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80122e6: f003 030f and.w r3, r3, #15 + 80122ea: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 + if (errorflags == RESET) + 80122ee: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 + 80122f2: 2b00 cmp r3, #0 + 80122f4: d10f bne.n 8012316 + { + /* UART in mode Receiver -------------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + 80122f6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80122fa: f003 0320 and.w r3, r3, #32 + 80122fe: 2b00 cmp r3, #0 + 8012300: d009 beq.n 8012316 + 8012302: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8012306: f003 0320 and.w r3, r3, #32 + 801230a: 2b00 cmp r3, #0 + 801230c: d003 beq.n 8012316 + { + UART_Receive_IT(huart); + 801230e: 6878 ldr r0, [r7, #4] + 8012310: f000 fc67 bl 8012be2 + return; + 8012314: e25b b.n 80127ce + } + } + + /* If some errors occur */ + if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) + 8012316: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 + 801231a: 2b00 cmp r3, #0 + 801231c: f000 80de beq.w 80124dc + 8012320: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 8012324: f003 0301 and.w r3, r3, #1 + 8012328: 2b00 cmp r3, #0 + 801232a: d106 bne.n 801233a + || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) + 801232c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8012330: f403 7390 and.w r3, r3, #288 @ 0x120 + 8012334: 2b00 cmp r3, #0 + 8012336: f000 80d1 beq.w 80124dc + { + /* UART parity error interrupt occurred ----------------------------------*/ + if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) + 801233a: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 801233e: f003 0301 and.w r3, r3, #1 + 8012342: 2b00 cmp r3, #0 + 8012344: d00b beq.n 801235e + 8012346: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 801234a: f403 7380 and.w r3, r3, #256 @ 0x100 + 801234e: 2b00 cmp r3, #0 + 8012350: d005 beq.n 801235e + { + huart->ErrorCode |= HAL_UART_ERROR_PE; + 8012352: 687b ldr r3, [r7, #4] + 8012354: 6c5b ldr r3, [r3, #68] @ 0x44 + 8012356: f043 0201 orr.w r2, r3, #1 + 801235a: 687b ldr r3, [r7, #4] + 801235c: 645a str r2, [r3, #68] @ 0x44 + } + + /* UART noise error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + 801235e: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8012362: f003 0304 and.w r3, r3, #4 + 8012366: 2b00 cmp r3, #0 + 8012368: d00b beq.n 8012382 + 801236a: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 801236e: f003 0301 and.w r3, r3, #1 + 8012372: 2b00 cmp r3, #0 + 8012374: d005 beq.n 8012382 + { + huart->ErrorCode |= HAL_UART_ERROR_NE; + 8012376: 687b ldr r3, [r7, #4] + 8012378: 6c5b ldr r3, [r3, #68] @ 0x44 + 801237a: f043 0202 orr.w r2, r3, #2 + 801237e: 687b ldr r3, [r7, #4] + 8012380: 645a str r2, [r3, #68] @ 0x44 + } + + /* UART frame error interrupt occurred -----------------------------------*/ + if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) + 8012382: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8012386: f003 0302 and.w r3, r3, #2 + 801238a: 2b00 cmp r3, #0 + 801238c: d00b beq.n 80123a6 + 801238e: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 8012392: f003 0301 and.w r3, r3, #1 + 8012396: 2b00 cmp r3, #0 + 8012398: d005 beq.n 80123a6 + { + huart->ErrorCode |= HAL_UART_ERROR_FE; + 801239a: 687b ldr r3, [r7, #4] + 801239c: 6c5b ldr r3, [r3, #68] @ 0x44 + 801239e: f043 0204 orr.w r2, r3, #4 + 80123a2: 687b ldr r3, [r7, #4] + 80123a4: 645a str r2, [r3, #68] @ 0x44 + } + + /* UART Over-Run interrupt occurred --------------------------------------*/ + if (((isrflags & USART_SR_ORE) != RESET) && (((cr1its & USART_CR1_RXNEIE) != RESET) + 80123a6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80123aa: f003 0308 and.w r3, r3, #8 + 80123ae: 2b00 cmp r3, #0 + 80123b0: d011 beq.n 80123d6 + 80123b2: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80123b6: f003 0320 and.w r3, r3, #32 + 80123ba: 2b00 cmp r3, #0 + 80123bc: d105 bne.n 80123ca + || ((cr3its & USART_CR3_EIE) != RESET))) + 80123be: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc + 80123c2: f003 0301 and.w r3, r3, #1 + 80123c6: 2b00 cmp r3, #0 + 80123c8: d005 beq.n 80123d6 + { + huart->ErrorCode |= HAL_UART_ERROR_ORE; + 80123ca: 687b ldr r3, [r7, #4] + 80123cc: 6c5b ldr r3, [r3, #68] @ 0x44 + 80123ce: f043 0208 orr.w r2, r3, #8 + 80123d2: 687b ldr r3, [r7, #4] + 80123d4: 645a str r2, [r3, #68] @ 0x44 + } + + /* Call UART Error Call back function if need be --------------------------*/ + if (huart->ErrorCode != HAL_UART_ERROR_NONE) + 80123d6: 687b ldr r3, [r7, #4] + 80123d8: 6c5b ldr r3, [r3, #68] @ 0x44 + 80123da: 2b00 cmp r3, #0 + 80123dc: f000 81f2 beq.w 80127c4 + { + /* UART in mode Receiver -----------------------------------------------*/ + if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) + 80123e0: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80123e4: f003 0320 and.w r3, r3, #32 + 80123e8: 2b00 cmp r3, #0 + 80123ea: d008 beq.n 80123fe + 80123ec: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80123f0: f003 0320 and.w r3, r3, #32 + 80123f4: 2b00 cmp r3, #0 + 80123f6: d002 beq.n 80123fe + { + UART_Receive_IT(huart); + 80123f8: 6878 ldr r0, [r7, #4] + 80123fa: f000 fbf2 bl 8012be2 + } + + /* If Overrun error occurs, or if any error occurs in DMA mode reception, + consider error as blocking */ + dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); + 80123fe: 687b ldr r3, [r7, #4] + 8012400: 681b ldr r3, [r3, #0] + 8012402: 695b ldr r3, [r3, #20] + 8012404: f003 0340 and.w r3, r3, #64 @ 0x40 + 8012408: 2b00 cmp r3, #0 + 801240a: bf14 ite ne + 801240c: 2301 movne r3, #1 + 801240e: 2300 moveq r3, #0 + 8012410: b2db uxtb r3, r3 + 8012412: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 + if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest) + 8012416: 687b ldr r3, [r7, #4] + 8012418: 6c5b ldr r3, [r3, #68] @ 0x44 + 801241a: f003 0308 and.w r3, r3, #8 + 801241e: 2b00 cmp r3, #0 + 8012420: d103 bne.n 801242a + 8012422: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4 + 8012426: 2b00 cmp r3, #0 + 8012428: d04f beq.n 80124ca + { + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ + UART_EndRxTransfer(huart); + 801242a: 6878 ldr r0, [r7, #4] + 801242c: f000 fa9c bl 8012968 + + /* Disable the UART DMA Rx request if enabled */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 8012430: 687b ldr r3, [r7, #4] + 8012432: 681b ldr r3, [r3, #0] + 8012434: 695b ldr r3, [r3, #20] + 8012436: f003 0340 and.w r3, r3, #64 @ 0x40 + 801243a: 2b00 cmp r3, #0 + 801243c: d041 beq.n 80124c2 + { + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + 801243e: 687b ldr r3, [r7, #4] + 8012440: 681b ldr r3, [r3, #0] + 8012442: 3314 adds r3, #20 + 8012444: f8c7 309c str.w r3, [r7, #156] @ 0x9c + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012448: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c + 801244c: e853 3f00 ldrex r3, [r3] + 8012450: f8c7 3098 str.w r3, [r7, #152] @ 0x98 + return(result); + 8012454: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98 + 8012458: f023 0340 bic.w r3, r3, #64 @ 0x40 + 801245c: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0 + 8012460: 687b ldr r3, [r7, #4] + 8012462: 681b ldr r3, [r3, #0] + 8012464: 3314 adds r3, #20 + 8012466: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0 + 801246a: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8 + 801246e: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012472: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4 + 8012476: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8 + 801247a: e841 2300 strex r3, r2, [r1] + 801247e: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0 + return(result); + 8012482: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0 + 8012486: 2b00 cmp r3, #0 + 8012488: d1d9 bne.n 801243e + + /* Abort the UART DMA Rx channel */ + if (huart->hdmarx != NULL) + 801248a: 687b ldr r3, [r7, #4] + 801248c: 6bdb ldr r3, [r3, #60] @ 0x3c + 801248e: 2b00 cmp r3, #0 + 8012490: d013 beq.n 80124ba + { + /* Set the UART DMA Abort callback : + will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ + huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; + 8012492: 687b ldr r3, [r7, #4] + 8012494: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012496: 4a7e ldr r2, [pc, #504] @ (8012690 ) + 8012498: 635a str r2, [r3, #52] @ 0x34 + if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) + 801249a: 687b ldr r3, [r7, #4] + 801249c: 6bdb ldr r3, [r3, #60] @ 0x3c + 801249e: 4618 mov r0, r3 + 80124a0: f7fc ff88 bl 800f3b4 + 80124a4: 4603 mov r3, r0 + 80124a6: 2b00 cmp r3, #0 + 80124a8: d016 beq.n 80124d8 + { + /* Call Directly XferAbortCallback function in case of error */ + huart->hdmarx->XferAbortCallback(huart->hdmarx); + 80124aa: 687b ldr r3, [r7, #4] + 80124ac: 6bdb ldr r3, [r3, #60] @ 0x3c + 80124ae: 6b5b ldr r3, [r3, #52] @ 0x34 + 80124b0: 687a ldr r2, [r7, #4] + 80124b2: 6bd2 ldr r2, [r2, #60] @ 0x3c + 80124b4: 4610 mov r0, r2 + 80124b6: 4798 blx r3 + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 80124b8: e00e b.n 80124d8 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); + 80124ba: 6878 ldr r0, [r7, #4] + 80124bc: f000 f993 bl 80127e6 + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 80124c0: e00a b.n 80124d8 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); + 80124c2: 6878 ldr r0, [r7, #4] + 80124c4: f000 f98f bl 80127e6 + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 80124c8: e006 b.n 80124d8 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); + 80124ca: 6878 ldr r0, [r7, #4] + 80124cc: f000 f98b bl 80127e6 +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + huart->ErrorCode = HAL_UART_ERROR_NONE; + 80124d0: 687b ldr r3, [r7, #4] + 80124d2: 2200 movs r2, #0 + 80124d4: 645a str r2, [r3, #68] @ 0x44 + } + } + return; + 80124d6: e175 b.n 80127c4 + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 80124d8: bf00 nop + return; + 80124da: e173 b.n 80127c4 + } /* End if some error occurs */ + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 80124dc: 687b ldr r3, [r7, #4] + 80124de: 6b1b ldr r3, [r3, #48] @ 0x30 + 80124e0: 2b01 cmp r3, #1 + 80124e2: f040 814f bne.w 8012784 + && ((isrflags & USART_SR_IDLE) != 0U) + 80124e6: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80124ea: f003 0310 and.w r3, r3, #16 + 80124ee: 2b00 cmp r3, #0 + 80124f0: f000 8148 beq.w 8012784 + && ((cr1its & USART_SR_IDLE) != 0U)) + 80124f4: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80124f8: f003 0310 and.w r3, r3, #16 + 80124fc: 2b00 cmp r3, #0 + 80124fe: f000 8141 beq.w 8012784 + { + __HAL_UART_CLEAR_IDLEFLAG(huart); + 8012502: 2300 movs r3, #0 + 8012504: 60bb str r3, [r7, #8] + 8012506: 687b ldr r3, [r7, #4] + 8012508: 681b ldr r3, [r3, #0] + 801250a: 681b ldr r3, [r3, #0] + 801250c: 60bb str r3, [r7, #8] + 801250e: 687b ldr r3, [r7, #4] + 8012510: 681b ldr r3, [r3, #0] + 8012512: 685b ldr r3, [r3, #4] + 8012514: 60bb str r3, [r7, #8] + 8012516: 68bb ldr r3, [r7, #8] + + /* Check if DMA mode is enabled in UART */ + if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) + 8012518: 687b ldr r3, [r7, #4] + 801251a: 681b ldr r3, [r3, #0] + 801251c: 695b ldr r3, [r3, #20] + 801251e: f003 0340 and.w r3, r3, #64 @ 0x40 + 8012522: 2b00 cmp r3, #0 + 8012524: f000 80b6 beq.w 8012694 + { + /* DMA mode enabled */ + /* Check received length : If all expected data are received, do nothing, + (DMA cplt callback will be called). + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); + 8012528: 687b ldr r3, [r7, #4] + 801252a: 6bdb ldr r3, [r3, #60] @ 0x3c + 801252c: 681b ldr r3, [r3, #0] + 801252e: 685b ldr r3, [r3, #4] + 8012530: f8a7 30be strh.w r3, [r7, #190] @ 0xbe + if ((nb_remaining_rx_data > 0U) + 8012534: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe + 8012538: 2b00 cmp r3, #0 + 801253a: f000 8145 beq.w 80127c8 + && (nb_remaining_rx_data < huart->RxXferSize)) + 801253e: 687b ldr r3, [r7, #4] + 8012540: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8012542: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe + 8012546: 429a cmp r2, r3 + 8012548: f080 813e bcs.w 80127c8 + { + /* Reception is not complete */ + huart->RxXferCount = nb_remaining_rx_data; + 801254c: 687b ldr r3, [r7, #4] + 801254e: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe + 8012552: 85da strh r2, [r3, #46] @ 0x2e + + /* In Normal mode, end DMA xfer and HAL UART Rx process*/ + if (huart->hdmarx->Init.Mode != DMA_CIRCULAR) + 8012554: 687b ldr r3, [r7, #4] + 8012556: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012558: 699b ldr r3, [r3, #24] + 801255a: 2b20 cmp r3, #32 + 801255c: f000 8088 beq.w 8012670 + { + /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); + 8012560: 687b ldr r3, [r7, #4] + 8012562: 681b ldr r3, [r3, #0] + 8012564: 330c adds r3, #12 + 8012566: f8c7 3088 str.w r3, [r7, #136] @ 0x88 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 801256a: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88 + 801256e: e853 3f00 ldrex r3, [r3] + 8012572: f8c7 3084 str.w r3, [r7, #132] @ 0x84 + return(result); + 8012576: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84 + 801257a: f423 7380 bic.w r3, r3, #256 @ 0x100 + 801257e: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8 + 8012582: 687b ldr r3, [r7, #4] + 8012584: 681b ldr r3, [r3, #0] + 8012586: 330c adds r3, #12 + 8012588: f8d7 20b8 ldr.w r2, [r7, #184] @ 0xb8 + 801258c: f8c7 2094 str.w r2, [r7, #148] @ 0x94 + 8012590: f8c7 3090 str.w r3, [r7, #144] @ 0x90 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012594: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90 + 8012598: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94 + 801259c: e841 2300 strex r3, r2, [r1] + 80125a0: f8c7 308c str.w r3, [r7, #140] @ 0x8c + return(result); + 80125a4: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c + 80125a8: 2b00 cmp r3, #0 + 80125aa: d1d9 bne.n 8012560 + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 80125ac: 687b ldr r3, [r7, #4] + 80125ae: 681b ldr r3, [r3, #0] + 80125b0: 3314 adds r3, #20 + 80125b2: 677b str r3, [r7, #116] @ 0x74 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80125b4: 6f7b ldr r3, [r7, #116] @ 0x74 + 80125b6: e853 3f00 ldrex r3, [r3] + 80125ba: 673b str r3, [r7, #112] @ 0x70 + return(result); + 80125bc: 6f3b ldr r3, [r7, #112] @ 0x70 + 80125be: f023 0301 bic.w r3, r3, #1 + 80125c2: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 + 80125c6: 687b ldr r3, [r7, #4] + 80125c8: 681b ldr r3, [r3, #0] + 80125ca: 3314 adds r3, #20 + 80125cc: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4 + 80125d0: f8c7 2080 str.w r2, [r7, #128] @ 0x80 + 80125d4: 67fb str r3, [r7, #124] @ 0x7c + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80125d6: 6ff9 ldr r1, [r7, #124] @ 0x7c + 80125d8: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80 + 80125dc: e841 2300 strex r3, r2, [r1] + 80125e0: 67bb str r3, [r7, #120] @ 0x78 + return(result); + 80125e2: 6fbb ldr r3, [r7, #120] @ 0x78 + 80125e4: 2b00 cmp r3, #0 + 80125e6: d1e1 bne.n 80125ac + + /* Disable the DMA transfer for the receiver request by resetting the DMAR bit + in the UART CR3 register */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); + 80125e8: 687b ldr r3, [r7, #4] + 80125ea: 681b ldr r3, [r3, #0] + 80125ec: 3314 adds r3, #20 + 80125ee: 663b str r3, [r7, #96] @ 0x60 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80125f0: 6e3b ldr r3, [r7, #96] @ 0x60 + 80125f2: e853 3f00 ldrex r3, [r3] + 80125f6: 65fb str r3, [r7, #92] @ 0x5c + return(result); + 80125f8: 6dfb ldr r3, [r7, #92] @ 0x5c + 80125fa: f023 0340 bic.w r3, r3, #64 @ 0x40 + 80125fe: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 + 8012602: 687b ldr r3, [r7, #4] + 8012604: 681b ldr r3, [r3, #0] + 8012606: 3314 adds r3, #20 + 8012608: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0 + 801260c: 66fa str r2, [r7, #108] @ 0x6c + 801260e: 66bb str r3, [r7, #104] @ 0x68 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012610: 6eb9 ldr r1, [r7, #104] @ 0x68 + 8012612: 6efa ldr r2, [r7, #108] @ 0x6c + 8012614: e841 2300 strex r3, r2, [r1] + 8012618: 667b str r3, [r7, #100] @ 0x64 + return(result); + 801261a: 6e7b ldr r3, [r7, #100] @ 0x64 + 801261c: 2b00 cmp r3, #0 + 801261e: d1e3 bne.n 80125e8 + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 8012620: 687b ldr r3, [r7, #4] + 8012622: 2220 movs r2, #32 + 8012624: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012628: 687b ldr r3, [r7, #4] + 801262a: 2200 movs r2, #0 + 801262c: 631a str r2, [r3, #48] @ 0x30 + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 801262e: 687b ldr r3, [r7, #4] + 8012630: 681b ldr r3, [r3, #0] + 8012632: 330c adds r3, #12 + 8012634: 64fb str r3, [r7, #76] @ 0x4c + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012636: 6cfb ldr r3, [r7, #76] @ 0x4c + 8012638: e853 3f00 ldrex r3, [r3] + 801263c: 64bb str r3, [r7, #72] @ 0x48 + return(result); + 801263e: 6cbb ldr r3, [r7, #72] @ 0x48 + 8012640: f023 0310 bic.w r3, r3, #16 + 8012644: f8c7 30ac str.w r3, [r7, #172] @ 0xac + 8012648: 687b ldr r3, [r7, #4] + 801264a: 681b ldr r3, [r3, #0] + 801264c: 330c adds r3, #12 + 801264e: f8d7 20ac ldr.w r2, [r7, #172] @ 0xac + 8012652: 65ba str r2, [r7, #88] @ 0x58 + 8012654: 657b str r3, [r7, #84] @ 0x54 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012656: 6d79 ldr r1, [r7, #84] @ 0x54 + 8012658: 6dba ldr r2, [r7, #88] @ 0x58 + 801265a: e841 2300 strex r3, r2, [r1] + 801265e: 653b str r3, [r7, #80] @ 0x50 + return(result); + 8012660: 6d3b ldr r3, [r7, #80] @ 0x50 + 8012662: 2b00 cmp r3, #0 + 8012664: d1e3 bne.n 801262e + + /* Last bytes received, so no need as the abort is immediate */ + (void)HAL_DMA_Abort(huart->hdmarx); + 8012666: 687b ldr r3, [r7, #4] + 8012668: 6bdb ldr r3, [r3, #60] @ 0x3c + 801266a: 4618 mov r0, r3 + 801266c: f7fc fe67 bl 800f33e + } + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + 8012670: 687b ldr r3, [r7, #4] + 8012672: 2202 movs r2, #2 + 8012674: 635a str r2, [r3, #52] @ 0x34 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); + 8012676: 687b ldr r3, [r7, #4] + 8012678: 8d9a ldrh r2, [r3, #44] @ 0x2c + 801267a: 687b ldr r3, [r7, #4] + 801267c: 8ddb ldrh r3, [r3, #46] @ 0x2e + 801267e: b29b uxth r3, r3 + 8012680: 1ad3 subs r3, r2, r3 + 8012682: b29b uxth r3, r3 + 8012684: 4619 mov r1, r3 + 8012686: 6878 ldr r0, [r7, #4] + 8012688: f7f9 ff10 bl 800c4ac +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + return; + 801268c: e09c b.n 80127c8 + 801268e: bf00 nop + 8012690: 08012a2d .word 0x08012a2d + else + { + /* DMA mode not enabled */ + /* Check received length : If all expected data are received, do nothing. + Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ + uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount; + 8012694: 687b ldr r3, [r7, #4] + 8012696: 8d9a ldrh r2, [r3, #44] @ 0x2c + 8012698: 687b ldr r3, [r7, #4] + 801269a: 8ddb ldrh r3, [r3, #46] @ 0x2e + 801269c: b29b uxth r3, r3 + 801269e: 1ad3 subs r3, r2, r3 + 80126a0: f8a7 30ce strh.w r3, [r7, #206] @ 0xce + if ((huart->RxXferCount > 0U) + 80126a4: 687b ldr r3, [r7, #4] + 80126a6: 8ddb ldrh r3, [r3, #46] @ 0x2e + 80126a8: b29b uxth r3, r3 + 80126aa: 2b00 cmp r3, #0 + 80126ac: f000 808e beq.w 80127cc + && (nb_rx_data > 0U)) + 80126b0: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce + 80126b4: 2b00 cmp r3, #0 + 80126b6: f000 8089 beq.w 80127cc + { + /* Disable the UART Parity Error Interrupt and RXNE interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + 80126ba: 687b ldr r3, [r7, #4] + 80126bc: 681b ldr r3, [r3, #0] + 80126be: 330c adds r3, #12 + 80126c0: 63bb str r3, [r7, #56] @ 0x38 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80126c2: 6bbb ldr r3, [r7, #56] @ 0x38 + 80126c4: e853 3f00 ldrex r3, [r3] + 80126c8: 637b str r3, [r7, #52] @ 0x34 + return(result); + 80126ca: 6b7b ldr r3, [r7, #52] @ 0x34 + 80126cc: f423 7390 bic.w r3, r3, #288 @ 0x120 + 80126d0: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8 + 80126d4: 687b ldr r3, [r7, #4] + 80126d6: 681b ldr r3, [r3, #0] + 80126d8: 330c adds r3, #12 + 80126da: f8d7 20c8 ldr.w r2, [r7, #200] @ 0xc8 + 80126de: 647a str r2, [r7, #68] @ 0x44 + 80126e0: 643b str r3, [r7, #64] @ 0x40 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80126e2: 6c39 ldr r1, [r7, #64] @ 0x40 + 80126e4: 6c7a ldr r2, [r7, #68] @ 0x44 + 80126e6: e841 2300 strex r3, r2, [r1] + 80126ea: 63fb str r3, [r7, #60] @ 0x3c + return(result); + 80126ec: 6bfb ldr r3, [r7, #60] @ 0x3c + 80126ee: 2b00 cmp r3, #0 + 80126f0: d1e3 bne.n 80126ba + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 80126f2: 687b ldr r3, [r7, #4] + 80126f4: 681b ldr r3, [r3, #0] + 80126f6: 3314 adds r3, #20 + 80126f8: 627b str r3, [r7, #36] @ 0x24 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80126fa: 6a7b ldr r3, [r7, #36] @ 0x24 + 80126fc: e853 3f00 ldrex r3, [r3] + 8012700: 623b str r3, [r7, #32] + return(result); + 8012702: 6a3b ldr r3, [r7, #32] + 8012704: f023 0301 bic.w r3, r3, #1 + 8012708: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4 + 801270c: 687b ldr r3, [r7, #4] + 801270e: 681b ldr r3, [r3, #0] + 8012710: 3314 adds r3, #20 + 8012712: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4 + 8012716: 633a str r2, [r7, #48] @ 0x30 + 8012718: 62fb str r3, [r7, #44] @ 0x2c + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 801271a: 6af9 ldr r1, [r7, #44] @ 0x2c + 801271c: 6b3a ldr r2, [r7, #48] @ 0x30 + 801271e: e841 2300 strex r3, r2, [r1] + 8012722: 62bb str r3, [r7, #40] @ 0x28 + return(result); + 8012724: 6abb ldr r3, [r7, #40] @ 0x28 + 8012726: 2b00 cmp r3, #0 + 8012728: d1e3 bne.n 80126f2 + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 801272a: 687b ldr r3, [r7, #4] + 801272c: 2220 movs r2, #32 + 801272e: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012732: 687b ldr r3, [r7, #4] + 8012734: 2200 movs r2, #0 + 8012736: 631a str r2, [r3, #48] @ 0x30 + + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 8012738: 687b ldr r3, [r7, #4] + 801273a: 681b ldr r3, [r3, #0] + 801273c: 330c adds r3, #12 + 801273e: 613b str r3, [r7, #16] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012740: 693b ldr r3, [r7, #16] + 8012742: e853 3f00 ldrex r3, [r3] + 8012746: 60fb str r3, [r7, #12] + return(result); + 8012748: 68fb ldr r3, [r7, #12] + 801274a: f023 0310 bic.w r3, r3, #16 + 801274e: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0 + 8012752: 687b ldr r3, [r7, #4] + 8012754: 681b ldr r3, [r3, #0] + 8012756: 330c adds r3, #12 + 8012758: f8d7 20c0 ldr.w r2, [r7, #192] @ 0xc0 + 801275c: 61fa str r2, [r7, #28] + 801275e: 61bb str r3, [r7, #24] + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012760: 69b9 ldr r1, [r7, #24] + 8012762: 69fa ldr r2, [r7, #28] + 8012764: e841 2300 strex r3, r2, [r1] + 8012768: 617b str r3, [r7, #20] + return(result); + 801276a: 697b ldr r3, [r7, #20] + 801276c: 2b00 cmp r3, #0 + 801276e: d1e3 bne.n 8012738 + + /* Initialize type of RxEvent that correspond to RxEvent callback execution; + In this case, Rx Event type is Idle Event */ + huart->RxEventType = HAL_UART_RXEVENT_IDLE; + 8012770: 687b ldr r3, [r7, #4] + 8012772: 2202 movs r2, #2 + 8012774: 635a str r2, [r3, #52] @ 0x34 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxEventCallback(huart, nb_rx_data); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, nb_rx_data); + 8012776: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce + 801277a: 4619 mov r1, r3 + 801277c: 6878 ldr r0, [r7, #4] + 801277e: f7f9 fe95 bl 800c4ac +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + return; + 8012782: e023 b.n 80127cc + } + } + + /* UART in mode Transmitter ------------------------------------------------*/ + if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) + 8012784: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 8012788: f003 0380 and.w r3, r3, #128 @ 0x80 + 801278c: 2b00 cmp r3, #0 + 801278e: d009 beq.n 80127a4 + 8012790: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 8012794: f003 0380 and.w r3, r3, #128 @ 0x80 + 8012798: 2b00 cmp r3, #0 + 801279a: d003 beq.n 80127a4 + { + UART_Transmit_IT(huart); + 801279c: 6878 ldr r0, [r7, #4] + 801279e: f000 f9b9 bl 8012b14 + return; + 80127a2: e014 b.n 80127ce + } + + /* UART in mode Transmitter end --------------------------------------------*/ + if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) + 80127a4: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 + 80127a8: f003 0340 and.w r3, r3, #64 @ 0x40 + 80127ac: 2b00 cmp r3, #0 + 80127ae: d00e beq.n 80127ce + 80127b0: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 + 80127b4: f003 0340 and.w r3, r3, #64 @ 0x40 + 80127b8: 2b00 cmp r3, #0 + 80127ba: d008 beq.n 80127ce + { + UART_EndTransmit_IT(huart); + 80127bc: 6878 ldr r0, [r7, #4] + 80127be: f000 f9f8 bl 8012bb2 + return; + 80127c2: e004 b.n 80127ce + return; + 80127c4: bf00 nop + 80127c6: e002 b.n 80127ce + return; + 80127c8: bf00 nop + 80127ca: e000 b.n 80127ce + return; + 80127cc: bf00 nop + } +} + 80127ce: 37e8 adds r7, #232 @ 0xe8 + 80127d0: 46bd mov sp, r7 + 80127d2: bd80 pop {r7, pc} + +080127d4 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) +{ + 80127d4: b480 push {r7} + 80127d6: b083 sub sp, #12 + 80127d8: af00 add r7, sp, #0 + 80127da: 6078 str r0, [r7, #4] + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_RxCpltCallback could be implemented in the user file + */ +} + 80127dc: bf00 nop + 80127de: 370c adds r7, #12 + 80127e0: 46bd mov sp, r7 + 80127e2: bc80 pop {r7} + 80127e4: 4770 bx lr + +080127e6 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) +{ + 80127e6: b480 push {r7} + 80127e8: b083 sub sp, #12 + 80127ea: af00 add r7, sp, #0 + 80127ec: 6078 str r0, [r7, #4] + /* Prevent unused argument(s) compilation warning */ + UNUSED(huart); + /* NOTE: This function should not be modified, when the callback is needed, + the HAL_UART_ErrorCallback could be implemented in the user file + */ +} + 80127ee: bf00 nop + 80127f0: 370c adds r7, #12 + 80127f2: 46bd mov sp, r7 + 80127f4: bc80 pop {r7} + 80127f6: 4770 bx lr + +080127f8 : + * @brief UART Abort Complete callback. + * @param huart UART handle. + * @retval None + */ +__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) +{ + 80127f8: b480 push {r7} + 80127fa: b083 sub sp, #12 + 80127fc: af00 add r7, sp, #0 + 80127fe: 6078 str r0, [r7, #4] + UNUSED(huart); + + /* NOTE : This function should not be modified, when the callback is needed, + the HAL_UART_AbortCpltCallback can be implemented in the user file. + */ +} + 8012800: bf00 nop + 8012802: 370c adds r7, #12 + 8012804: 46bd mov sp, r7 + 8012806: bc80 pop {r7} + 8012808: 4770 bx lr + +0801280a : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL state + */ +HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart) +{ + 801280a: b480 push {r7} + 801280c: b085 sub sp, #20 + 801280e: af00 add r7, sp, #0 + 8012810: 6078 str r0, [r7, #4] + uint32_t temp1 = 0x00U, temp2 = 0x00U; + 8012812: 2300 movs r3, #0 + 8012814: 60fb str r3, [r7, #12] + 8012816: 2300 movs r3, #0 + 8012818: 60bb str r3, [r7, #8] + temp1 = huart->gState; + 801281a: 687b ldr r3, [r7, #4] + 801281c: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8012820: b2db uxtb r3, r3 + 8012822: 60fb str r3, [r7, #12] + temp2 = huart->RxState; + 8012824: 687b ldr r3, [r7, #4] + 8012826: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 801282a: b2db uxtb r3, r3 + 801282c: 60bb str r3, [r7, #8] + + return (HAL_UART_StateTypeDef)(temp1 | temp2); + 801282e: 68fb ldr r3, [r7, #12] + 8012830: b2da uxtb r2, r3 + 8012832: 68bb ldr r3, [r7, #8] + 8012834: b2db uxtb r3, r3 + 8012836: 4313 orrs r3, r2 + 8012838: b2db uxtb r3, r3 +} + 801283a: 4618 mov r0, r3 + 801283c: 3714 adds r7, #20 + 801283e: 46bd mov sp, r7 + 8012840: bc80 pop {r7} + 8012842: 4770 bx lr + +08012844 : + * @param Timeout Timeout duration + * @retval HAL status + */ +static HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, + uint32_t Tickstart, uint32_t Timeout) +{ + 8012844: b580 push {r7, lr} + 8012846: b086 sub sp, #24 + 8012848: af00 add r7, sp, #0 + 801284a: 60f8 str r0, [r7, #12] + 801284c: 60b9 str r1, [r7, #8] + 801284e: 603b str r3, [r7, #0] + 8012850: 4613 mov r3, r2 + 8012852: 71fb strb r3, [r7, #7] + /* Wait until flag is set */ + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 8012854: e03b b.n 80128ce + { + /* Check for the Timeout */ + if (Timeout != HAL_MAX_DELAY) + 8012856: 6a3b ldr r3, [r7, #32] + 8012858: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff + 801285c: d037 beq.n 80128ce + { + if (((HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) + 801285e: f7fb f83b bl 800d8d8 + 8012862: 4602 mov r2, r0 + 8012864: 683b ldr r3, [r7, #0] + 8012866: 1ad3 subs r3, r2, r3 + 8012868: 6a3a ldr r2, [r7, #32] + 801286a: 429a cmp r2, r3 + 801286c: d302 bcc.n 8012874 + 801286e: 6a3b ldr r3, [r7, #32] + 8012870: 2b00 cmp r3, #0 + 8012872: d101 bne.n 8012878 + { + + return HAL_TIMEOUT; + 8012874: 2303 movs r3, #3 + 8012876: e03a b.n 80128ee + } + + if ((READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U) && (Flag != UART_FLAG_TXE) && (Flag != UART_FLAG_TC)) + 8012878: 68fb ldr r3, [r7, #12] + 801287a: 681b ldr r3, [r3, #0] + 801287c: 68db ldr r3, [r3, #12] + 801287e: f003 0304 and.w r3, r3, #4 + 8012882: 2b00 cmp r3, #0 + 8012884: d023 beq.n 80128ce + 8012886: 68bb ldr r3, [r7, #8] + 8012888: 2b80 cmp r3, #128 @ 0x80 + 801288a: d020 beq.n 80128ce + 801288c: 68bb ldr r3, [r7, #8] + 801288e: 2b40 cmp r3, #64 @ 0x40 + 8012890: d01d beq.n 80128ce + { + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET) + 8012892: 68fb ldr r3, [r7, #12] + 8012894: 681b ldr r3, [r3, #0] + 8012896: 681b ldr r3, [r3, #0] + 8012898: f003 0308 and.w r3, r3, #8 + 801289c: 2b08 cmp r3, #8 + 801289e: d116 bne.n 80128ce + { + /* Clear Overrun Error flag*/ + __HAL_UART_CLEAR_OREFLAG(huart); + 80128a0: 2300 movs r3, #0 + 80128a2: 617b str r3, [r7, #20] + 80128a4: 68fb ldr r3, [r7, #12] + 80128a6: 681b ldr r3, [r3, #0] + 80128a8: 681b ldr r3, [r3, #0] + 80128aa: 617b str r3, [r7, #20] + 80128ac: 68fb ldr r3, [r7, #12] + 80128ae: 681b ldr r3, [r3, #0] + 80128b0: 685b ldr r3, [r3, #4] + 80128b2: 617b str r3, [r7, #20] + 80128b4: 697b ldr r3, [r7, #20] + + /* Blocking error : transfer is aborted + Set the UART state ready to be able to start again the process, + Disable Rx Interrupts if ongoing */ + UART_EndRxTransfer(huart); + 80128b6: 68f8 ldr r0, [r7, #12] + 80128b8: f000 f856 bl 8012968 + + huart->ErrorCode = HAL_UART_ERROR_ORE; + 80128bc: 68fb ldr r3, [r7, #12] + 80128be: 2208 movs r2, #8 + 80128c0: 645a str r2, [r3, #68] @ 0x44 + + /* Process Unlocked */ + __HAL_UNLOCK(huart); + 80128c2: 68fb ldr r3, [r7, #12] + 80128c4: 2200 movs r2, #0 + 80128c6: f883 2040 strb.w r2, [r3, #64] @ 0x40 + + return HAL_ERROR; + 80128ca: 2301 movs r3, #1 + 80128cc: e00f b.n 80128ee + while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status) + 80128ce: 68fb ldr r3, [r7, #12] + 80128d0: 681b ldr r3, [r3, #0] + 80128d2: 681a ldr r2, [r3, #0] + 80128d4: 68bb ldr r3, [r7, #8] + 80128d6: 4013 ands r3, r2 + 80128d8: 68ba ldr r2, [r7, #8] + 80128da: 429a cmp r2, r3 + 80128dc: bf0c ite eq + 80128de: 2301 moveq r3, #1 + 80128e0: 2300 movne r3, #0 + 80128e2: b2db uxtb r3, r3 + 80128e4: 461a mov r2, r3 + 80128e6: 79fb ldrb r3, [r7, #7] + 80128e8: 429a cmp r2, r3 + 80128ea: d0b4 beq.n 8012856 + } + } + } + } + return HAL_OK; + 80128ec: 2300 movs r3, #0 +} + 80128ee: 4618 mov r0, r3 + 80128f0: 3718 adds r7, #24 + 80128f2: 46bd mov sp, r7 + 80128f4: bd80 pop {r7, pc} + +080128f6 : + * @param pData Pointer to data buffer (u8 or u16 data elements). + * @param Size Amount of data elements (u8 or u16) to be received. + * @retval HAL status + */ +HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) +{ + 80128f6: b480 push {r7} + 80128f8: b085 sub sp, #20 + 80128fa: af00 add r7, sp, #0 + 80128fc: 60f8 str r0, [r7, #12] + 80128fe: 60b9 str r1, [r7, #8] + 8012900: 4613 mov r3, r2 + 8012902: 80fb strh r3, [r7, #6] + huart->pRxBuffPtr = pData; + 8012904: 68fb ldr r3, [r7, #12] + 8012906: 68ba ldr r2, [r7, #8] + 8012908: 629a str r2, [r3, #40] @ 0x28 + huart->RxXferSize = Size; + 801290a: 68fb ldr r3, [r7, #12] + 801290c: 88fa ldrh r2, [r7, #6] + 801290e: 859a strh r2, [r3, #44] @ 0x2c + huart->RxXferCount = Size; + 8012910: 68fb ldr r3, [r7, #12] + 8012912: 88fa ldrh r2, [r7, #6] + 8012914: 85da strh r2, [r3, #46] @ 0x2e + + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8012916: 68fb ldr r3, [r7, #12] + 8012918: 2200 movs r2, #0 + 801291a: 645a str r2, [r3, #68] @ 0x44 + huart->RxState = HAL_UART_STATE_BUSY_RX; + 801291c: 68fb ldr r3, [r7, #12] + 801291e: 2222 movs r2, #34 @ 0x22 + 8012920: f883 2042 strb.w r2, [r3, #66] @ 0x42 + + if (huart->Init.Parity != UART_PARITY_NONE) + 8012924: 68fb ldr r3, [r7, #12] + 8012926: 691b ldr r3, [r3, #16] + 8012928: 2b00 cmp r3, #0 + 801292a: d007 beq.n 801293c + { + /* Enable the UART Parity Error Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_PE); + 801292c: 68fb ldr r3, [r7, #12] + 801292e: 681b ldr r3, [r3, #0] + 8012930: 68da ldr r2, [r3, #12] + 8012932: 68fb ldr r3, [r7, #12] + 8012934: 681b ldr r3, [r3, #0] + 8012936: f442 7280 orr.w r2, r2, #256 @ 0x100 + 801293a: 60da str r2, [r3, #12] + } + + /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_ENABLE_IT(huart, UART_IT_ERR); + 801293c: 68fb ldr r3, [r7, #12] + 801293e: 681b ldr r3, [r3, #0] + 8012940: 695a ldr r2, [r3, #20] + 8012942: 68fb ldr r3, [r7, #12] + 8012944: 681b ldr r3, [r3, #0] + 8012946: f042 0201 orr.w r2, r2, #1 + 801294a: 615a str r2, [r3, #20] + + /* Enable the UART Data Register not empty Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE); + 801294c: 68fb ldr r3, [r7, #12] + 801294e: 681b ldr r3, [r3, #0] + 8012950: 68da ldr r2, [r3, #12] + 8012952: 68fb ldr r3, [r7, #12] + 8012954: 681b ldr r3, [r3, #0] + 8012956: f042 0220 orr.w r2, r2, #32 + 801295a: 60da str r2, [r3, #12] + + return HAL_OK; + 801295c: 2300 movs r3, #0 +} + 801295e: 4618 mov r0, r3 + 8012960: 3714 adds r7, #20 + 8012962: 46bd mov sp, r7 + 8012964: bc80 pop {r7} + 8012966: 4770 bx lr + +08012968 : + * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). + * @param huart UART handle. + * @retval None + */ +static void UART_EndRxTransfer(UART_HandleTypeDef *huart) +{ + 8012968: b480 push {r7} + 801296a: b095 sub sp, #84 @ 0x54 + 801296c: af00 add r7, sp, #0 + 801296e: 6078 str r0, [r7, #4] + /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); + 8012970: 687b ldr r3, [r7, #4] + 8012972: 681b ldr r3, [r3, #0] + 8012974: 330c adds r3, #12 + 8012976: 637b str r3, [r7, #52] @ 0x34 + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012978: 6b7b ldr r3, [r7, #52] @ 0x34 + 801297a: e853 3f00 ldrex r3, [r3] + 801297e: 633b str r3, [r7, #48] @ 0x30 + return(result); + 8012980: 6b3b ldr r3, [r7, #48] @ 0x30 + 8012982: f423 7390 bic.w r3, r3, #288 @ 0x120 + 8012986: 64fb str r3, [r7, #76] @ 0x4c + 8012988: 687b ldr r3, [r7, #4] + 801298a: 681b ldr r3, [r3, #0] + 801298c: 330c adds r3, #12 + 801298e: 6cfa ldr r2, [r7, #76] @ 0x4c + 8012990: 643a str r2, [r7, #64] @ 0x40 + 8012992: 63fb str r3, [r7, #60] @ 0x3c + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012994: 6bf9 ldr r1, [r7, #60] @ 0x3c + 8012996: 6c3a ldr r2, [r7, #64] @ 0x40 + 8012998: e841 2300 strex r3, r2, [r1] + 801299c: 63bb str r3, [r7, #56] @ 0x38 + return(result); + 801299e: 6bbb ldr r3, [r7, #56] @ 0x38 + 80129a0: 2b00 cmp r3, #0 + 80129a2: d1e5 bne.n 8012970 + ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); + 80129a4: 687b ldr r3, [r7, #4] + 80129a6: 681b ldr r3, [r3, #0] + 80129a8: 3314 adds r3, #20 + 80129aa: 623b str r3, [r7, #32] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80129ac: 6a3b ldr r3, [r7, #32] + 80129ae: e853 3f00 ldrex r3, [r3] + 80129b2: 61fb str r3, [r7, #28] + return(result); + 80129b4: 69fb ldr r3, [r7, #28] + 80129b6: f023 0301 bic.w r3, r3, #1 + 80129ba: 64bb str r3, [r7, #72] @ 0x48 + 80129bc: 687b ldr r3, [r7, #4] + 80129be: 681b ldr r3, [r3, #0] + 80129c0: 3314 adds r3, #20 + 80129c2: 6cba ldr r2, [r7, #72] @ 0x48 + 80129c4: 62fa str r2, [r7, #44] @ 0x2c + 80129c6: 62bb str r3, [r7, #40] @ 0x28 + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 80129c8: 6ab9 ldr r1, [r7, #40] @ 0x28 + 80129ca: 6afa ldr r2, [r7, #44] @ 0x2c + 80129cc: e841 2300 strex r3, r2, [r1] + 80129d0: 627b str r3, [r7, #36] @ 0x24 + return(result); + 80129d2: 6a7b ldr r3, [r7, #36] @ 0x24 + 80129d4: 2b00 cmp r3, #0 + 80129d6: d1e5 bne.n 80129a4 + + /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 80129d8: 687b ldr r3, [r7, #4] + 80129da: 6b1b ldr r3, [r3, #48] @ 0x30 + 80129dc: 2b01 cmp r3, #1 + 80129de: d119 bne.n 8012a14 + { + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 80129e0: 687b ldr r3, [r7, #4] + 80129e2: 681b ldr r3, [r3, #0] + 80129e4: 330c adds r3, #12 + 80129e6: 60fb str r3, [r7, #12] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 80129e8: 68fb ldr r3, [r7, #12] + 80129ea: e853 3f00 ldrex r3, [r3] + 80129ee: 60bb str r3, [r7, #8] + return(result); + 80129f0: 68bb ldr r3, [r7, #8] + 80129f2: f023 0310 bic.w r3, r3, #16 + 80129f6: 647b str r3, [r7, #68] @ 0x44 + 80129f8: 687b ldr r3, [r7, #4] + 80129fa: 681b ldr r3, [r3, #0] + 80129fc: 330c adds r3, #12 + 80129fe: 6c7a ldr r2, [r7, #68] @ 0x44 + 8012a00: 61ba str r2, [r7, #24] + 8012a02: 617b str r3, [r7, #20] + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012a04: 6979 ldr r1, [r7, #20] + 8012a06: 69ba ldr r2, [r7, #24] + 8012a08: e841 2300 strex r3, r2, [r1] + 8012a0c: 613b str r3, [r7, #16] + return(result); + 8012a0e: 693b ldr r3, [r7, #16] + 8012a10: 2b00 cmp r3, #0 + 8012a12: d1e5 bne.n 80129e0 + } + + /* At end of Rx process, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 8012a14: 687b ldr r3, [r7, #4] + 8012a16: 2220 movs r2, #32 + 8012a18: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012a1c: 687b ldr r3, [r7, #4] + 8012a1e: 2200 movs r2, #0 + 8012a20: 631a str r2, [r3, #48] @ 0x30 +} + 8012a22: bf00 nop + 8012a24: 3754 adds r7, #84 @ 0x54 + 8012a26: 46bd mov sp, r7 + 8012a28: bc80 pop {r7} + 8012a2a: 4770 bx lr + +08012a2c : + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) +{ + 8012a2c: b580 push {r7, lr} + 8012a2e: b084 sub sp, #16 + 8012a30: af00 add r7, sp, #0 + 8012a32: 6078 str r0, [r7, #4] + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + 8012a34: 687b ldr r3, [r7, #4] + 8012a36: 6a5b ldr r3, [r3, #36] @ 0x24 + 8012a38: 60fb str r3, [r7, #12] + huart->RxXferCount = 0x00U; + 8012a3a: 68fb ldr r3, [r7, #12] + 8012a3c: 2200 movs r2, #0 + 8012a3e: 85da strh r2, [r3, #46] @ 0x2e + huart->TxXferCount = 0x00U; + 8012a40: 68fb ldr r3, [r7, #12] + 8012a42: 2200 movs r2, #0 + 8012a44: 84da strh r2, [r3, #38] @ 0x26 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered error callback*/ + huart->ErrorCallback(huart); +#else + /*Call legacy weak error callback*/ + HAL_UART_ErrorCallback(huart); + 8012a46: 68f8 ldr r0, [r7, #12] + 8012a48: f7ff fecd bl 80127e6 +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + 8012a4c: bf00 nop + 8012a4e: 3710 adds r7, #16 + 8012a50: 46bd mov sp, r7 + 8012a52: bd80 pop {r7, pc} + +08012a54 : + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) +{ + 8012a54: b580 push {r7, lr} + 8012a56: b084 sub sp, #16 + 8012a58: af00 add r7, sp, #0 + 8012a5a: 6078 str r0, [r7, #4] + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + 8012a5c: 687b ldr r3, [r7, #4] + 8012a5e: 6a5b ldr r3, [r3, #36] @ 0x24 + 8012a60: 60fb str r3, [r7, #12] + + huart->hdmatx->XferAbortCallback = NULL; + 8012a62: 68fb ldr r3, [r7, #12] + 8012a64: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012a66: 2200 movs r2, #0 + 8012a68: 635a str r2, [r3, #52] @ 0x34 + + /* Check if an Abort process is still ongoing */ + if (huart->hdmarx != NULL) + 8012a6a: 68fb ldr r3, [r7, #12] + 8012a6c: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012a6e: 2b00 cmp r3, #0 + 8012a70: d004 beq.n 8012a7c + { + if (huart->hdmarx->XferAbortCallback != NULL) + 8012a72: 68fb ldr r3, [r7, #12] + 8012a74: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012a76: 6b5b ldr r3, [r3, #52] @ 0x34 + 8012a78: 2b00 cmp r3, #0 + 8012a7a: d117 bne.n 8012aac + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + 8012a7c: 68fb ldr r3, [r7, #12] + 8012a7e: 2200 movs r2, #0 + 8012a80: 84da strh r2, [r3, #38] @ 0x26 + huart->RxXferCount = 0x00U; + 8012a82: 68fb ldr r3, [r7, #12] + 8012a84: 2200 movs r2, #0 + 8012a86: 85da strh r2, [r3, #46] @ 0x2e + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8012a88: 68fb ldr r3, [r7, #12] + 8012a8a: 2200 movs r2, #0 + 8012a8c: 645a str r2, [r3, #68] @ 0x44 + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + 8012a8e: 68fb ldr r3, [r7, #12] + 8012a90: 2220 movs r2, #32 + 8012a92: f883 2041 strb.w r2, [r3, #65] @ 0x41 + huart->RxState = HAL_UART_STATE_READY; + 8012a96: 68fb ldr r3, [r7, #12] + 8012a98: 2220 movs r2, #32 + 8012a9a: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012a9e: 68fb ldr r3, [r7, #12] + 8012aa0: 2200 movs r2, #0 + 8012aa2: 631a str r2, [r3, #48] @ 0x30 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); + 8012aa4: 68f8 ldr r0, [r7, #12] + 8012aa6: f7ff fea7 bl 80127f8 + 8012aaa: e000 b.n 8012aae + return; + 8012aac: bf00 nop +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + 8012aae: 3710 adds r7, #16 + 8012ab0: 46bd mov sp, r7 + 8012ab2: bd80 pop {r7, pc} + +08012ab4 : + * @param hdma Pointer to a DMA_HandleTypeDef structure that contains + * the configuration information for the specified DMA module. + * @retval None + */ +static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) +{ + 8012ab4: b580 push {r7, lr} + 8012ab6: b084 sub sp, #16 + 8012ab8: af00 add r7, sp, #0 + 8012aba: 6078 str r0, [r7, #4] + UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; + 8012abc: 687b ldr r3, [r7, #4] + 8012abe: 6a5b ldr r3, [r3, #36] @ 0x24 + 8012ac0: 60fb str r3, [r7, #12] + + huart->hdmarx->XferAbortCallback = NULL; + 8012ac2: 68fb ldr r3, [r7, #12] + 8012ac4: 6bdb ldr r3, [r3, #60] @ 0x3c + 8012ac6: 2200 movs r2, #0 + 8012ac8: 635a str r2, [r3, #52] @ 0x34 + + /* Check if an Abort process is still ongoing */ + if (huart->hdmatx != NULL) + 8012aca: 68fb ldr r3, [r7, #12] + 8012acc: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012ace: 2b00 cmp r3, #0 + 8012ad0: d004 beq.n 8012adc + { + if (huart->hdmatx->XferAbortCallback != NULL) + 8012ad2: 68fb ldr r3, [r7, #12] + 8012ad4: 6b9b ldr r3, [r3, #56] @ 0x38 + 8012ad6: 6b5b ldr r3, [r3, #52] @ 0x34 + 8012ad8: 2b00 cmp r3, #0 + 8012ada: d117 bne.n 8012b0c + return; + } + } + + /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ + huart->TxXferCount = 0x00U; + 8012adc: 68fb ldr r3, [r7, #12] + 8012ade: 2200 movs r2, #0 + 8012ae0: 84da strh r2, [r3, #38] @ 0x26 + huart->RxXferCount = 0x00U; + 8012ae2: 68fb ldr r3, [r7, #12] + 8012ae4: 2200 movs r2, #0 + 8012ae6: 85da strh r2, [r3, #46] @ 0x2e + + /* Reset ErrorCode */ + huart->ErrorCode = HAL_UART_ERROR_NONE; + 8012ae8: 68fb ldr r3, [r7, #12] + 8012aea: 2200 movs r2, #0 + 8012aec: 645a str r2, [r3, #68] @ 0x44 + + /* Restore huart->gState and huart->RxState to Ready */ + huart->gState = HAL_UART_STATE_READY; + 8012aee: 68fb ldr r3, [r7, #12] + 8012af0: 2220 movs r2, #32 + 8012af2: f883 2041 strb.w r2, [r3, #65] @ 0x41 + huart->RxState = HAL_UART_STATE_READY; + 8012af6: 68fb ldr r3, [r7, #12] + 8012af8: 2220 movs r2, #32 + 8012afa: f883 2042 strb.w r2, [r3, #66] @ 0x42 + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012afe: 68fb ldr r3, [r7, #12] + 8012b00: 2200 movs r2, #0 + 8012b02: 631a str r2, [r3, #48] @ 0x30 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /* Call registered Abort complete callback */ + huart->AbortCpltCallback(huart); +#else + /* Call legacy weak Abort complete callback */ + HAL_UART_AbortCpltCallback(huart); + 8012b04: 68f8 ldr r0, [r7, #12] + 8012b06: f7ff fe77 bl 80127f8 + 8012b0a: e000 b.n 8012b0e + return; + 8012b0c: bf00 nop +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ +} + 8012b0e: 3710 adds r7, #16 + 8012b10: 46bd mov sp, r7 + 8012b12: bd80 pop {r7, pc} + +08012b14 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) +{ + 8012b14: b480 push {r7} + 8012b16: b085 sub sp, #20 + 8012b18: af00 add r7, sp, #0 + 8012b1a: 6078 str r0, [r7, #4] + const uint16_t *tmp; + + /* Check that a Tx process is ongoing */ + if (huart->gState == HAL_UART_STATE_BUSY_TX) + 8012b1c: 687b ldr r3, [r7, #4] + 8012b1e: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 + 8012b22: b2db uxtb r3, r3 + 8012b24: 2b21 cmp r3, #33 @ 0x21 + 8012b26: d13e bne.n 8012ba6 + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + 8012b28: 687b ldr r3, [r7, #4] + 8012b2a: 689b ldr r3, [r3, #8] + 8012b2c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8012b30: d114 bne.n 8012b5c + 8012b32: 687b ldr r3, [r7, #4] + 8012b34: 691b ldr r3, [r3, #16] + 8012b36: 2b00 cmp r3, #0 + 8012b38: d110 bne.n 8012b5c + { + tmp = (const uint16_t *) huart->pTxBuffPtr; + 8012b3a: 687b ldr r3, [r7, #4] + 8012b3c: 6a1b ldr r3, [r3, #32] + 8012b3e: 60fb str r3, [r7, #12] + huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF); + 8012b40: 68fb ldr r3, [r7, #12] + 8012b42: 881b ldrh r3, [r3, #0] + 8012b44: 461a mov r2, r3 + 8012b46: 687b ldr r3, [r7, #4] + 8012b48: 681b ldr r3, [r3, #0] + 8012b4a: f3c2 0208 ubfx r2, r2, #0, #9 + 8012b4e: 605a str r2, [r3, #4] + huart->pTxBuffPtr += 2U; + 8012b50: 687b ldr r3, [r7, #4] + 8012b52: 6a1b ldr r3, [r3, #32] + 8012b54: 1c9a adds r2, r3, #2 + 8012b56: 687b ldr r3, [r7, #4] + 8012b58: 621a str r2, [r3, #32] + 8012b5a: e008 b.n 8012b6e + } + else + { + huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF); + 8012b5c: 687b ldr r3, [r7, #4] + 8012b5e: 6a1b ldr r3, [r3, #32] + 8012b60: 1c59 adds r1, r3, #1 + 8012b62: 687a ldr r2, [r7, #4] + 8012b64: 6211 str r1, [r2, #32] + 8012b66: 781a ldrb r2, [r3, #0] + 8012b68: 687b ldr r3, [r7, #4] + 8012b6a: 681b ldr r3, [r3, #0] + 8012b6c: 605a str r2, [r3, #4] + } + + if (--huart->TxXferCount == 0U) + 8012b6e: 687b ldr r3, [r7, #4] + 8012b70: 8cdb ldrh r3, [r3, #38] @ 0x26 + 8012b72: b29b uxth r3, r3 + 8012b74: 3b01 subs r3, #1 + 8012b76: b29b uxth r3, r3 + 8012b78: 687a ldr r2, [r7, #4] + 8012b7a: 4619 mov r1, r3 + 8012b7c: 84d1 strh r1, [r2, #38] @ 0x26 + 8012b7e: 2b00 cmp r3, #0 + 8012b80: d10f bne.n 8012ba2 + { + /* Disable the UART Transmit Data Register Empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TXE); + 8012b82: 687b ldr r3, [r7, #4] + 8012b84: 681b ldr r3, [r3, #0] + 8012b86: 68da ldr r2, [r3, #12] + 8012b88: 687b ldr r3, [r7, #4] + 8012b8a: 681b ldr r3, [r3, #0] + 8012b8c: f022 0280 bic.w r2, r2, #128 @ 0x80 + 8012b90: 60da str r2, [r3, #12] + + /* Enable the UART Transmit Complete Interrupt */ + __HAL_UART_ENABLE_IT(huart, UART_IT_TC); + 8012b92: 687b ldr r3, [r7, #4] + 8012b94: 681b ldr r3, [r3, #0] + 8012b96: 68da ldr r2, [r3, #12] + 8012b98: 687b ldr r3, [r7, #4] + 8012b9a: 681b ldr r3, [r3, #0] + 8012b9c: f042 0240 orr.w r2, r2, #64 @ 0x40 + 8012ba0: 60da str r2, [r3, #12] + } + return HAL_OK; + 8012ba2: 2300 movs r3, #0 + 8012ba4: e000 b.n 8012ba8 + } + else + { + return HAL_BUSY; + 8012ba6: 2302 movs r3, #2 + } +} + 8012ba8: 4618 mov r0, r3 + 8012baa: 3714 adds r7, #20 + 8012bac: 46bd mov sp, r7 + 8012bae: bc80 pop {r7} + 8012bb0: 4770 bx lr + +08012bb2 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) +{ + 8012bb2: b580 push {r7, lr} + 8012bb4: b082 sub sp, #8 + 8012bb6: af00 add r7, sp, #0 + 8012bb8: 6078 str r0, [r7, #4] + /* Disable the UART Transmit Complete Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_TC); + 8012bba: 687b ldr r3, [r7, #4] + 8012bbc: 681b ldr r3, [r3, #0] + 8012bbe: 68da ldr r2, [r3, #12] + 8012bc0: 687b ldr r3, [r7, #4] + 8012bc2: 681b ldr r3, [r3, #0] + 8012bc4: f022 0240 bic.w r2, r2, #64 @ 0x40 + 8012bc8: 60da str r2, [r3, #12] + + /* Tx process is ended, restore huart->gState to Ready */ + huart->gState = HAL_UART_STATE_READY; + 8012bca: 687b ldr r3, [r7, #4] + 8012bcc: 2220 movs r2, #32 + 8012bce: f883 2041 strb.w r2, [r3, #65] @ 0x41 +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Tx complete callback*/ + huart->TxCpltCallback(huart); +#else + /*Call legacy weak Tx complete callback*/ + HAL_UART_TxCpltCallback(huart); + 8012bd2: 6878 ldr r0, [r7, #4] + 8012bd4: f7f9 fcca bl 800c56c +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + + return HAL_OK; + 8012bd8: 2300 movs r3, #0 +} + 8012bda: 4618 mov r0, r3 + 8012bdc: 3708 adds r7, #8 + 8012bde: 46bd mov sp, r7 + 8012be0: bd80 pop {r7, pc} + +08012be2 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval HAL status + */ +static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) +{ + 8012be2: b580 push {r7, lr} + 8012be4: b08c sub sp, #48 @ 0x30 + 8012be6: af00 add r7, sp, #0 + 8012be8: 6078 str r0, [r7, #4] + uint8_t *pdata8bits; + uint16_t *pdata16bits; + + /* Check that a Rx process is ongoing */ + if (huart->RxState == HAL_UART_STATE_BUSY_RX) + 8012bea: 687b ldr r3, [r7, #4] + 8012bec: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 + 8012bf0: b2db uxtb r3, r3 + 8012bf2: 2b22 cmp r3, #34 @ 0x22 + 8012bf4: f040 80ae bne.w 8012d54 + { + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) + 8012bf8: 687b ldr r3, [r7, #4] + 8012bfa: 689b ldr r3, [r3, #8] + 8012bfc: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8012c00: d117 bne.n 8012c32 + 8012c02: 687b ldr r3, [r7, #4] + 8012c04: 691b ldr r3, [r3, #16] + 8012c06: 2b00 cmp r3, #0 + 8012c08: d113 bne.n 8012c32 + { + pdata8bits = NULL; + 8012c0a: 2300 movs r3, #0 + 8012c0c: 62fb str r3, [r7, #44] @ 0x2c + pdata16bits = (uint16_t *) huart->pRxBuffPtr; + 8012c0e: 687b ldr r3, [r7, #4] + 8012c10: 6a9b ldr r3, [r3, #40] @ 0x28 + 8012c12: 62bb str r3, [r7, #40] @ 0x28 + *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); + 8012c14: 687b ldr r3, [r7, #4] + 8012c16: 681b ldr r3, [r3, #0] + 8012c18: 685b ldr r3, [r3, #4] + 8012c1a: b29b uxth r3, r3 + 8012c1c: f3c3 0308 ubfx r3, r3, #0, #9 + 8012c20: b29a uxth r2, r3 + 8012c22: 6abb ldr r3, [r7, #40] @ 0x28 + 8012c24: 801a strh r2, [r3, #0] + huart->pRxBuffPtr += 2U; + 8012c26: 687b ldr r3, [r7, #4] + 8012c28: 6a9b ldr r3, [r3, #40] @ 0x28 + 8012c2a: 1c9a adds r2, r3, #2 + 8012c2c: 687b ldr r3, [r7, #4] + 8012c2e: 629a str r2, [r3, #40] @ 0x28 + 8012c30: e026 b.n 8012c80 + } + else + { + pdata8bits = (uint8_t *) huart->pRxBuffPtr; + 8012c32: 687b ldr r3, [r7, #4] + 8012c34: 6a9b ldr r3, [r3, #40] @ 0x28 + 8012c36: 62fb str r3, [r7, #44] @ 0x2c + pdata16bits = NULL; + 8012c38: 2300 movs r3, #0 + 8012c3a: 62bb str r3, [r7, #40] @ 0x28 + + if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) + 8012c3c: 687b ldr r3, [r7, #4] + 8012c3e: 689b ldr r3, [r3, #8] + 8012c40: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 + 8012c44: d007 beq.n 8012c56 + 8012c46: 687b ldr r3, [r7, #4] + 8012c48: 689b ldr r3, [r3, #8] + 8012c4a: 2b00 cmp r3, #0 + 8012c4c: d10a bne.n 8012c64 + 8012c4e: 687b ldr r3, [r7, #4] + 8012c50: 691b ldr r3, [r3, #16] + 8012c52: 2b00 cmp r3, #0 + 8012c54: d106 bne.n 8012c64 + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); + 8012c56: 687b ldr r3, [r7, #4] + 8012c58: 681b ldr r3, [r3, #0] + 8012c5a: 685b ldr r3, [r3, #4] + 8012c5c: b2da uxtb r2, r3 + 8012c5e: 6afb ldr r3, [r7, #44] @ 0x2c + 8012c60: 701a strb r2, [r3, #0] + 8012c62: e008 b.n 8012c76 + } + else + { + *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); + 8012c64: 687b ldr r3, [r7, #4] + 8012c66: 681b ldr r3, [r3, #0] + 8012c68: 685b ldr r3, [r3, #4] + 8012c6a: b2db uxtb r3, r3 + 8012c6c: f003 037f and.w r3, r3, #127 @ 0x7f + 8012c70: b2da uxtb r2, r3 + 8012c72: 6afb ldr r3, [r7, #44] @ 0x2c + 8012c74: 701a strb r2, [r3, #0] + } + huart->pRxBuffPtr += 1U; + 8012c76: 687b ldr r3, [r7, #4] + 8012c78: 6a9b ldr r3, [r3, #40] @ 0x28 + 8012c7a: 1c5a adds r2, r3, #1 + 8012c7c: 687b ldr r3, [r7, #4] + 8012c7e: 629a str r2, [r3, #40] @ 0x28 + } + + if (--huart->RxXferCount == 0U) + 8012c80: 687b ldr r3, [r7, #4] + 8012c82: 8ddb ldrh r3, [r3, #46] @ 0x2e + 8012c84: b29b uxth r3, r3 + 8012c86: 3b01 subs r3, #1 + 8012c88: b29b uxth r3, r3 + 8012c8a: 687a ldr r2, [r7, #4] + 8012c8c: 4619 mov r1, r3 + 8012c8e: 85d1 strh r1, [r2, #46] @ 0x2e + 8012c90: 2b00 cmp r3, #0 + 8012c92: d15d bne.n 8012d50 + { + /* Disable the UART Data Register not empty Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); + 8012c94: 687b ldr r3, [r7, #4] + 8012c96: 681b ldr r3, [r3, #0] + 8012c98: 68da ldr r2, [r3, #12] + 8012c9a: 687b ldr r3, [r7, #4] + 8012c9c: 681b ldr r3, [r3, #0] + 8012c9e: f022 0220 bic.w r2, r2, #32 + 8012ca2: 60da str r2, [r3, #12] + + /* Disable the UART Parity Error Interrupt */ + __HAL_UART_DISABLE_IT(huart, UART_IT_PE); + 8012ca4: 687b ldr r3, [r7, #4] + 8012ca6: 681b ldr r3, [r3, #0] + 8012ca8: 68da ldr r2, [r3, #12] + 8012caa: 687b ldr r3, [r7, #4] + 8012cac: 681b ldr r3, [r3, #0] + 8012cae: f422 7280 bic.w r2, r2, #256 @ 0x100 + 8012cb2: 60da str r2, [r3, #12] + + /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ + __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); + 8012cb4: 687b ldr r3, [r7, #4] + 8012cb6: 681b ldr r3, [r3, #0] + 8012cb8: 695a ldr r2, [r3, #20] + 8012cba: 687b ldr r3, [r7, #4] + 8012cbc: 681b ldr r3, [r3, #0] + 8012cbe: f022 0201 bic.w r2, r2, #1 + 8012cc2: 615a str r2, [r3, #20] + + /* Rx process is completed, restore huart->RxState to Ready */ + huart->RxState = HAL_UART_STATE_READY; + 8012cc4: 687b ldr r3, [r7, #4] + 8012cc6: 2220 movs r2, #32 + 8012cc8: f883 2042 strb.w r2, [r3, #66] @ 0x42 + + /* Initialize type of RxEvent to Transfer Complete */ + huart->RxEventType = HAL_UART_RXEVENT_TC; + 8012ccc: 687b ldr r3, [r7, #4] + 8012cce: 2200 movs r2, #0 + 8012cd0: 635a str r2, [r3, #52] @ 0x34 + + /* Check current reception Mode : + If Reception till IDLE event has been selected : */ + if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) + 8012cd2: 687b ldr r3, [r7, #4] + 8012cd4: 6b1b ldr r3, [r3, #48] @ 0x30 + 8012cd6: 2b01 cmp r3, #1 + 8012cd8: d135 bne.n 8012d46 + { + /* Set reception type to Standard */ + huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; + 8012cda: 687b ldr r3, [r7, #4] + 8012cdc: 2200 movs r2, #0 + 8012cde: 631a str r2, [r3, #48] @ 0x30 + + /* Disable IDLE interrupt */ + ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); + 8012ce0: 687b ldr r3, [r7, #4] + 8012ce2: 681b ldr r3, [r3, #0] + 8012ce4: 330c adds r3, #12 + 8012ce6: 617b str r3, [r7, #20] + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + 8012ce8: 697b ldr r3, [r7, #20] + 8012cea: e853 3f00 ldrex r3, [r3] + 8012cee: 613b str r3, [r7, #16] + return(result); + 8012cf0: 693b ldr r3, [r7, #16] + 8012cf2: f023 0310 bic.w r3, r3, #16 + 8012cf6: 627b str r3, [r7, #36] @ 0x24 + 8012cf8: 687b ldr r3, [r7, #4] + 8012cfa: 681b ldr r3, [r3, #0] + 8012cfc: 330c adds r3, #12 + 8012cfe: 6a7a ldr r2, [r7, #36] @ 0x24 + 8012d00: 623a str r2, [r7, #32] + 8012d02: 61fb str r3, [r7, #28] + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + 8012d04: 69f9 ldr r1, [r7, #28] + 8012d06: 6a3a ldr r2, [r7, #32] + 8012d08: e841 2300 strex r3, r2, [r1] + 8012d0c: 61bb str r3, [r7, #24] + return(result); + 8012d0e: 69bb ldr r3, [r7, #24] + 8012d10: 2b00 cmp r3, #0 + 8012d12: d1e5 bne.n 8012ce0 + + /* Check if IDLE flag is set */ + if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) + 8012d14: 687b ldr r3, [r7, #4] + 8012d16: 681b ldr r3, [r3, #0] + 8012d18: 681b ldr r3, [r3, #0] + 8012d1a: f003 0310 and.w r3, r3, #16 + 8012d1e: 2b10 cmp r3, #16 + 8012d20: d10a bne.n 8012d38 + { + /* Clear IDLE flag in ISR */ + __HAL_UART_CLEAR_IDLEFLAG(huart); + 8012d22: 2300 movs r3, #0 + 8012d24: 60fb str r3, [r7, #12] + 8012d26: 687b ldr r3, [r7, #4] + 8012d28: 681b ldr r3, [r3, #0] + 8012d2a: 681b ldr r3, [r3, #0] + 8012d2c: 60fb str r3, [r7, #12] + 8012d2e: 687b ldr r3, [r7, #4] + 8012d30: 681b ldr r3, [r3, #0] + 8012d32: 685b ldr r3, [r3, #4] + 8012d34: 60fb str r3, [r7, #12] + 8012d36: 68fb ldr r3, [r7, #12] +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx Event callback*/ + huart->RxEventCallback(huart, huart->RxXferSize); +#else + /*Call legacy weak Rx Event callback*/ + HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); + 8012d38: 687b ldr r3, [r7, #4] + 8012d3a: 8d9b ldrh r3, [r3, #44] @ 0x2c + 8012d3c: 4619 mov r1, r3 + 8012d3e: 6878 ldr r0, [r7, #4] + 8012d40: f7f9 fbb4 bl 800c4ac + 8012d44: e002 b.n 8012d4c +#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) + /*Call registered Rx complete callback*/ + huart->RxCpltCallback(huart); +#else + /*Call legacy weak Rx complete callback*/ + HAL_UART_RxCpltCallback(huart); + 8012d46: 6878 ldr r0, [r7, #4] + 8012d48: f7ff fd44 bl 80127d4 +#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ + } + + return HAL_OK; + 8012d4c: 2300 movs r3, #0 + 8012d4e: e002 b.n 8012d56 + } + return HAL_OK; + 8012d50: 2300 movs r3, #0 + 8012d52: e000 b.n 8012d56 + } + else + { + return HAL_BUSY; + 8012d54: 2302 movs r3, #2 + } +} + 8012d56: 4618 mov r0, r3 + 8012d58: 3730 adds r7, #48 @ 0x30 + 8012d5a: 46bd mov sp, r7 + 8012d5c: bd80 pop {r7, pc} + ... + +08012d60 : + * @param huart Pointer to a UART_HandleTypeDef structure that contains + * the configuration information for the specified UART module. + * @retval None + */ +static void UART_SetConfig(UART_HandleTypeDef *huart) +{ + 8012d60: b580 push {r7, lr} + 8012d62: b084 sub sp, #16 + 8012d64: af00 add r7, sp, #0 + 8012d66: 6078 str r0, [r7, #4] + assert_param(IS_UART_MODE(huart->Init.Mode)); + + /*-------------------------- USART CR2 Configuration -----------------------*/ + /* Configure the UART Stop Bits: Set STOP[13:12] bits + according to huart->Init.StopBits value */ + MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); + 8012d68: 687b ldr r3, [r7, #4] + 8012d6a: 681b ldr r3, [r3, #0] + 8012d6c: 691b ldr r3, [r3, #16] + 8012d6e: f423 5140 bic.w r1, r3, #12288 @ 0x3000 + 8012d72: 687b ldr r3, [r7, #4] + 8012d74: 68da ldr r2, [r3, #12] + 8012d76: 687b ldr r3, [r7, #4] + 8012d78: 681b ldr r3, [r3, #0] + 8012d7a: 430a orrs r2, r1 + 8012d7c: 611a str r2, [r3, #16] + tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; + MODIFY_REG(huart->Instance->CR1, + (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), + tmpreg); +#else + tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode; + 8012d7e: 687b ldr r3, [r7, #4] + 8012d80: 689a ldr r2, [r3, #8] + 8012d82: 687b ldr r3, [r7, #4] + 8012d84: 691b ldr r3, [r3, #16] + 8012d86: 431a orrs r2, r3 + 8012d88: 687b ldr r3, [r7, #4] + 8012d8a: 695b ldr r3, [r3, #20] + 8012d8c: 4313 orrs r3, r2 + 8012d8e: 60bb str r3, [r7, #8] + MODIFY_REG(huart->Instance->CR1, + 8012d90: 687b ldr r3, [r7, #4] + 8012d92: 681b ldr r3, [r3, #0] + 8012d94: 68db ldr r3, [r3, #12] + 8012d96: f423 53b0 bic.w r3, r3, #5632 @ 0x1600 + 8012d9a: f023 030c bic.w r3, r3, #12 + 8012d9e: 687a ldr r2, [r7, #4] + 8012da0: 6812 ldr r2, [r2, #0] + 8012da2: 68b9 ldr r1, [r7, #8] + 8012da4: 430b orrs r3, r1 + 8012da6: 60d3 str r3, [r2, #12] + tmpreg); +#endif /* USART_CR1_OVER8 */ + + /*-------------------------- USART CR3 Configuration -----------------------*/ + /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ + MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); + 8012da8: 687b ldr r3, [r7, #4] + 8012daa: 681b ldr r3, [r3, #0] + 8012dac: 695b ldr r3, [r3, #20] + 8012dae: f423 7140 bic.w r1, r3, #768 @ 0x300 + 8012db2: 687b ldr r3, [r7, #4] + 8012db4: 699a ldr r2, [r3, #24] + 8012db6: 687b ldr r3, [r7, #4] + 8012db8: 681b ldr r3, [r3, #0] + 8012dba: 430a orrs r2, r1 + 8012dbc: 615a str r2, [r3, #20] + + + if(huart->Instance == USART1) + 8012dbe: 687b ldr r3, [r7, #4] + 8012dc0: 681b ldr r3, [r3, #0] + 8012dc2: 4a2c ldr r2, [pc, #176] @ (8012e74 ) + 8012dc4: 4293 cmp r3, r2 + 8012dc6: d103 bne.n 8012dd0 + { + pclk = HAL_RCC_GetPCLK2Freq(); + 8012dc8: f7fd fb66 bl 8010498 + 8012dcc: 60f8 str r0, [r7, #12] + 8012dce: e002 b.n 8012dd6 + } + else + { + pclk = HAL_RCC_GetPCLK1Freq(); + 8012dd0: f7fd fb4e bl 8010470 + 8012dd4: 60f8 str r0, [r7, #12] + else + { + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + } +#else + huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); + 8012dd6: 68fa ldr r2, [r7, #12] + 8012dd8: 4613 mov r3, r2 + 8012dda: 009b lsls r3, r3, #2 + 8012ddc: 4413 add r3, r2 + 8012dde: 009a lsls r2, r3, #2 + 8012de0: 441a add r2, r3 + 8012de2: 687b ldr r3, [r7, #4] + 8012de4: 685b ldr r3, [r3, #4] + 8012de6: 009b lsls r3, r3, #2 + 8012de8: fbb2 f3f3 udiv r3, r2, r3 + 8012dec: 4a22 ldr r2, [pc, #136] @ (8012e78 ) + 8012dee: fba2 2303 umull r2, r3, r2, r3 + 8012df2: 095b lsrs r3, r3, #5 + 8012df4: 0119 lsls r1, r3, #4 + 8012df6: 68fa ldr r2, [r7, #12] + 8012df8: 4613 mov r3, r2 + 8012dfa: 009b lsls r3, r3, #2 + 8012dfc: 4413 add r3, r2 + 8012dfe: 009a lsls r2, r3, #2 + 8012e00: 441a add r2, r3 + 8012e02: 687b ldr r3, [r7, #4] + 8012e04: 685b ldr r3, [r3, #4] + 8012e06: 009b lsls r3, r3, #2 + 8012e08: fbb2 f2f3 udiv r2, r2, r3 + 8012e0c: 4b1a ldr r3, [pc, #104] @ (8012e78 ) + 8012e0e: fba3 0302 umull r0, r3, r3, r2 + 8012e12: 095b lsrs r3, r3, #5 + 8012e14: 2064 movs r0, #100 @ 0x64 + 8012e16: fb00 f303 mul.w r3, r0, r3 + 8012e1a: 1ad3 subs r3, r2, r3 + 8012e1c: 011b lsls r3, r3, #4 + 8012e1e: 3332 adds r3, #50 @ 0x32 + 8012e20: 4a15 ldr r2, [pc, #84] @ (8012e78 ) + 8012e22: fba2 2303 umull r2, r3, r2, r3 + 8012e26: 095b lsrs r3, r3, #5 + 8012e28: f003 03f0 and.w r3, r3, #240 @ 0xf0 + 8012e2c: 4419 add r1, r3 + 8012e2e: 68fa ldr r2, [r7, #12] + 8012e30: 4613 mov r3, r2 + 8012e32: 009b lsls r3, r3, #2 + 8012e34: 4413 add r3, r2 + 8012e36: 009a lsls r2, r3, #2 + 8012e38: 441a add r2, r3 + 8012e3a: 687b ldr r3, [r7, #4] + 8012e3c: 685b ldr r3, [r3, #4] + 8012e3e: 009b lsls r3, r3, #2 + 8012e40: fbb2 f2f3 udiv r2, r2, r3 + 8012e44: 4b0c ldr r3, [pc, #48] @ (8012e78 ) + 8012e46: fba3 0302 umull r0, r3, r3, r2 + 8012e4a: 095b lsrs r3, r3, #5 + 8012e4c: 2064 movs r0, #100 @ 0x64 + 8012e4e: fb00 f303 mul.w r3, r0, r3 + 8012e52: 1ad3 subs r3, r2, r3 + 8012e54: 011b lsls r3, r3, #4 + 8012e56: 3332 adds r3, #50 @ 0x32 + 8012e58: 4a07 ldr r2, [pc, #28] @ (8012e78 ) + 8012e5a: fba2 2303 umull r2, r3, r2, r3 + 8012e5e: 095b lsrs r3, r3, #5 + 8012e60: f003 020f and.w r2, r3, #15 + 8012e64: 687b ldr r3, [r7, #4] + 8012e66: 681b ldr r3, [r3, #0] + 8012e68: 440a add r2, r1 + 8012e6a: 609a str r2, [r3, #8] +#endif /* USART_CR1_OVER8 */ +} + 8012e6c: bf00 nop + 8012e6e: 3710 adds r7, #16 + 8012e70: 46bd mov sp, r7 + 8012e72: bd80 pop {r7, pc} + 8012e74: 40013800 .word 0x40013800 + 8012e78: 51eb851f .word 0x51eb851f + +08012e7c <__cvt>: + 8012e7c: 2b00 cmp r3, #0 + 8012e7e: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8012e82: 461d mov r5, r3 + 8012e84: bfbb ittet lt + 8012e86: f103 4300 addlt.w r3, r3, #2147483648 @ 0x80000000 + 8012e8a: 461d movlt r5, r3 + 8012e8c: 2300 movge r3, #0 + 8012e8e: 232d movlt r3, #45 @ 0x2d + 8012e90: b088 sub sp, #32 + 8012e92: 4614 mov r4, r2 + 8012e94: bfb8 it lt + 8012e96: 4614 movlt r4, r2 + 8012e98: 9a12 ldr r2, [sp, #72] @ 0x48 + 8012e9a: 9e10 ldr r6, [sp, #64] @ 0x40 + 8012e9c: 7013 strb r3, [r2, #0] + 8012e9e: 9b14 ldr r3, [sp, #80] @ 0x50 + 8012ea0: f8dd a04c ldr.w sl, [sp, #76] @ 0x4c + 8012ea4: f023 0820 bic.w r8, r3, #32 + 8012ea8: f1b8 0f46 cmp.w r8, #70 @ 0x46 + 8012eac: d005 beq.n 8012eba <__cvt+0x3e> + 8012eae: f1b8 0f45 cmp.w r8, #69 @ 0x45 + 8012eb2: d100 bne.n 8012eb6 <__cvt+0x3a> + 8012eb4: 3601 adds r6, #1 + 8012eb6: 2302 movs r3, #2 + 8012eb8: e000 b.n 8012ebc <__cvt+0x40> + 8012eba: 2303 movs r3, #3 + 8012ebc: aa07 add r2, sp, #28 + 8012ebe: 9204 str r2, [sp, #16] + 8012ec0: aa06 add r2, sp, #24 + 8012ec2: e9cd a202 strd sl, r2, [sp, #8] + 8012ec6: e9cd 3600 strd r3, r6, [sp] + 8012eca: 4622 mov r2, r4 + 8012ecc: 462b mov r3, r5 + 8012ece: f000 fe3b bl 8013b48 <_dtoa_r> + 8012ed2: f1b8 0f47 cmp.w r8, #71 @ 0x47 + 8012ed6: 4607 mov r7, r0 + 8012ed8: d119 bne.n 8012f0e <__cvt+0x92> + 8012eda: 9b11 ldr r3, [sp, #68] @ 0x44 + 8012edc: 07db lsls r3, r3, #31 + 8012ede: d50e bpl.n 8012efe <__cvt+0x82> + 8012ee0: eb00 0906 add.w r9, r0, r6 + 8012ee4: 2200 movs r2, #0 + 8012ee6: 2300 movs r3, #0 + 8012ee8: 4620 mov r0, r4 + 8012eea: 4629 mov r1, r5 + 8012eec: f7f5 fdc8 bl 8008a80 <__aeabi_dcmpeq> + 8012ef0: b108 cbz r0, 8012ef6 <__cvt+0x7a> + 8012ef2: f8cd 901c str.w r9, [sp, #28] + 8012ef6: 2230 movs r2, #48 @ 0x30 + 8012ef8: 9b07 ldr r3, [sp, #28] + 8012efa: 454b cmp r3, r9 + 8012efc: d31e bcc.n 8012f3c <__cvt+0xc0> + 8012efe: 4638 mov r0, r7 + 8012f00: 9b07 ldr r3, [sp, #28] + 8012f02: 9a15 ldr r2, [sp, #84] @ 0x54 + 8012f04: 1bdb subs r3, r3, r7 + 8012f06: 6013 str r3, [r2, #0] + 8012f08: b008 add sp, #32 + 8012f0a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8012f0e: f1b8 0f46 cmp.w r8, #70 @ 0x46 + 8012f12: eb00 0906 add.w r9, r0, r6 + 8012f16: d1e5 bne.n 8012ee4 <__cvt+0x68> + 8012f18: 7803 ldrb r3, [r0, #0] + 8012f1a: 2b30 cmp r3, #48 @ 0x30 + 8012f1c: d10a bne.n 8012f34 <__cvt+0xb8> + 8012f1e: 2200 movs r2, #0 + 8012f20: 2300 movs r3, #0 + 8012f22: 4620 mov r0, r4 + 8012f24: 4629 mov r1, r5 + 8012f26: f7f5 fdab bl 8008a80 <__aeabi_dcmpeq> + 8012f2a: b918 cbnz r0, 8012f34 <__cvt+0xb8> + 8012f2c: f1c6 0601 rsb r6, r6, #1 + 8012f30: f8ca 6000 str.w r6, [sl] + 8012f34: f8da 3000 ldr.w r3, [sl] + 8012f38: 4499 add r9, r3 + 8012f3a: e7d3 b.n 8012ee4 <__cvt+0x68> + 8012f3c: 1c59 adds r1, r3, #1 + 8012f3e: 9107 str r1, [sp, #28] + 8012f40: 701a strb r2, [r3, #0] + 8012f42: e7d9 b.n 8012ef8 <__cvt+0x7c> + +08012f44 <__exponent>: + 8012f44: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + 8012f46: 2900 cmp r1, #0 + 8012f48: bfb6 itet lt + 8012f4a: 232d movlt r3, #45 @ 0x2d + 8012f4c: 232b movge r3, #43 @ 0x2b + 8012f4e: 4249 neglt r1, r1 + 8012f50: 2909 cmp r1, #9 + 8012f52: 7002 strb r2, [r0, #0] + 8012f54: 7043 strb r3, [r0, #1] + 8012f56: dd29 ble.n 8012fac <__exponent+0x68> + 8012f58: f10d 0307 add.w r3, sp, #7 + 8012f5c: 461d mov r5, r3 + 8012f5e: 270a movs r7, #10 + 8012f60: fbb1 f6f7 udiv r6, r1, r7 + 8012f64: 461a mov r2, r3 + 8012f66: fb07 1416 mls r4, r7, r6, r1 + 8012f6a: 3430 adds r4, #48 @ 0x30 + 8012f6c: f802 4c01 strb.w r4, [r2, #-1] + 8012f70: 460c mov r4, r1 + 8012f72: 2c63 cmp r4, #99 @ 0x63 + 8012f74: 4631 mov r1, r6 + 8012f76: f103 33ff add.w r3, r3, #4294967295 @ 0xffffffff + 8012f7a: dcf1 bgt.n 8012f60 <__exponent+0x1c> + 8012f7c: 3130 adds r1, #48 @ 0x30 + 8012f7e: 1e94 subs r4, r2, #2 + 8012f80: f803 1c01 strb.w r1, [r3, #-1] + 8012f84: 4623 mov r3, r4 + 8012f86: 1c41 adds r1, r0, #1 + 8012f88: 42ab cmp r3, r5 + 8012f8a: d30a bcc.n 8012fa2 <__exponent+0x5e> + 8012f8c: f10d 0309 add.w r3, sp, #9 + 8012f90: 1a9b subs r3, r3, r2 + 8012f92: 42ac cmp r4, r5 + 8012f94: bf88 it hi + 8012f96: 2300 movhi r3, #0 + 8012f98: 3302 adds r3, #2 + 8012f9a: 4403 add r3, r0 + 8012f9c: 1a18 subs r0, r3, r0 + 8012f9e: b003 add sp, #12 + 8012fa0: bdf0 pop {r4, r5, r6, r7, pc} + 8012fa2: f813 6b01 ldrb.w r6, [r3], #1 + 8012fa6: f801 6f01 strb.w r6, [r1, #1]! + 8012faa: e7ed b.n 8012f88 <__exponent+0x44> + 8012fac: 2330 movs r3, #48 @ 0x30 + 8012fae: 3130 adds r1, #48 @ 0x30 + 8012fb0: 7083 strb r3, [r0, #2] + 8012fb2: 70c1 strb r1, [r0, #3] + 8012fb4: 1d03 adds r3, r0, #4 + 8012fb6: e7f1 b.n 8012f9c <__exponent+0x58> + +08012fb8 <_printf_float>: + 8012fb8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8012fbc: b091 sub sp, #68 @ 0x44 + 8012fbe: 460c mov r4, r1 + 8012fc0: f8dd 8068 ldr.w r8, [sp, #104] @ 0x68 + 8012fc4: 4616 mov r6, r2 + 8012fc6: 461f mov r7, r3 + 8012fc8: 4605 mov r5, r0 + 8012fca: f000 fcf7 bl 80139bc <_localeconv_r> + 8012fce: 6803 ldr r3, [r0, #0] + 8012fd0: 4618 mov r0, r3 + 8012fd2: 9308 str r3, [sp, #32] + 8012fd4: f7f5 f928 bl 8008228 + 8012fd8: 2300 movs r3, #0 + 8012fda: 930e str r3, [sp, #56] @ 0x38 + 8012fdc: f8d8 3000 ldr.w r3, [r8] + 8012fe0: 9009 str r0, [sp, #36] @ 0x24 + 8012fe2: 3307 adds r3, #7 + 8012fe4: f023 0307 bic.w r3, r3, #7 + 8012fe8: f103 0208 add.w r2, r3, #8 + 8012fec: f894 a018 ldrb.w sl, [r4, #24] + 8012ff0: f8d4 b000 ldr.w fp, [r4] + 8012ff4: f8c8 2000 str.w r2, [r8] + 8012ff8: e9d3 8900 ldrd r8, r9, [r3] + 8012ffc: f029 4300 bic.w r3, r9, #2147483648 @ 0x80000000 + 8013000: 930b str r3, [sp, #44] @ 0x2c + 8013002: f8cd 8028 str.w r8, [sp, #40] @ 0x28 + 8013006: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 801300a: e9dd 010a ldrd r0, r1, [sp, #40] @ 0x28 + 801300e: e9c4 8912 strd r8, r9, [r4, #72] @ 0x48 + 8013012: 4b9c ldr r3, [pc, #624] @ (8013284 <_printf_float+0x2cc>) + 8013014: f7f5 fd66 bl 8008ae4 <__aeabi_dcmpun> + 8013018: bb70 cbnz r0, 8013078 <_printf_float+0xc0> + 801301a: e9dd 010a ldrd r0, r1, [sp, #40] @ 0x28 + 801301e: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 8013022: 4b98 ldr r3, [pc, #608] @ (8013284 <_printf_float+0x2cc>) + 8013024: f7f5 fd40 bl 8008aa8 <__aeabi_dcmple> + 8013028: bb30 cbnz r0, 8013078 <_printf_float+0xc0> + 801302a: 2200 movs r2, #0 + 801302c: 2300 movs r3, #0 + 801302e: 4640 mov r0, r8 + 8013030: 4649 mov r1, r9 + 8013032: f7f5 fd2f bl 8008a94 <__aeabi_dcmplt> + 8013036: b110 cbz r0, 801303e <_printf_float+0x86> + 8013038: 232d movs r3, #45 @ 0x2d + 801303a: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 801303e: 4a92 ldr r2, [pc, #584] @ (8013288 <_printf_float+0x2d0>) + 8013040: 4b92 ldr r3, [pc, #584] @ (801328c <_printf_float+0x2d4>) + 8013042: f1ba 0f47 cmp.w sl, #71 @ 0x47 + 8013046: bf8c ite hi + 8013048: 4690 movhi r8, r2 + 801304a: 4698 movls r8, r3 + 801304c: 2303 movs r3, #3 + 801304e: f04f 0900 mov.w r9, #0 + 8013052: 6123 str r3, [r4, #16] + 8013054: f02b 0304 bic.w r3, fp, #4 + 8013058: 6023 str r3, [r4, #0] + 801305a: 4633 mov r3, r6 + 801305c: 4621 mov r1, r4 + 801305e: 4628 mov r0, r5 + 8013060: 9700 str r7, [sp, #0] + 8013062: aa0f add r2, sp, #60 @ 0x3c + 8013064: f000 f9d4 bl 8013410 <_printf_common> + 8013068: 3001 adds r0, #1 + 801306a: f040 8090 bne.w 801318e <_printf_float+0x1d6> + 801306e: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8013072: b011 add sp, #68 @ 0x44 + 8013074: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8013078: 4642 mov r2, r8 + 801307a: 464b mov r3, r9 + 801307c: 4640 mov r0, r8 + 801307e: 4649 mov r1, r9 + 8013080: f7f5 fd30 bl 8008ae4 <__aeabi_dcmpun> + 8013084: b148 cbz r0, 801309a <_printf_float+0xe2> + 8013086: 464b mov r3, r9 + 8013088: 2b00 cmp r3, #0 + 801308a: bfb8 it lt + 801308c: 232d movlt r3, #45 @ 0x2d + 801308e: 4a80 ldr r2, [pc, #512] @ (8013290 <_printf_float+0x2d8>) + 8013090: bfb8 it lt + 8013092: f884 3043 strblt.w r3, [r4, #67] @ 0x43 + 8013096: 4b7f ldr r3, [pc, #508] @ (8013294 <_printf_float+0x2dc>) + 8013098: e7d3 b.n 8013042 <_printf_float+0x8a> + 801309a: 6863 ldr r3, [r4, #4] + 801309c: f00a 01df and.w r1, sl, #223 @ 0xdf + 80130a0: 1c5a adds r2, r3, #1 + 80130a2: d13f bne.n 8013124 <_printf_float+0x16c> + 80130a4: 2306 movs r3, #6 + 80130a6: 6063 str r3, [r4, #4] + 80130a8: 2200 movs r2, #0 + 80130aa: f44b 6380 orr.w r3, fp, #1024 @ 0x400 + 80130ae: 6023 str r3, [r4, #0] + 80130b0: 9206 str r2, [sp, #24] + 80130b2: aa0e add r2, sp, #56 @ 0x38 + 80130b4: e9cd a204 strd sl, r2, [sp, #16] + 80130b8: aa0d add r2, sp, #52 @ 0x34 + 80130ba: 9203 str r2, [sp, #12] + 80130bc: f10d 0233 add.w r2, sp, #51 @ 0x33 + 80130c0: e9cd 3201 strd r3, r2, [sp, #4] + 80130c4: 6863 ldr r3, [r4, #4] + 80130c6: 4642 mov r2, r8 + 80130c8: 9300 str r3, [sp, #0] + 80130ca: 4628 mov r0, r5 + 80130cc: 464b mov r3, r9 + 80130ce: 910a str r1, [sp, #40] @ 0x28 + 80130d0: f7ff fed4 bl 8012e7c <__cvt> + 80130d4: 990a ldr r1, [sp, #40] @ 0x28 + 80130d6: 4680 mov r8, r0 + 80130d8: 2947 cmp r1, #71 @ 0x47 + 80130da: 990d ldr r1, [sp, #52] @ 0x34 + 80130dc: d128 bne.n 8013130 <_printf_float+0x178> + 80130de: 1cc8 adds r0, r1, #3 + 80130e0: db02 blt.n 80130e8 <_printf_float+0x130> + 80130e2: 6863 ldr r3, [r4, #4] + 80130e4: 4299 cmp r1, r3 + 80130e6: dd40 ble.n 801316a <_printf_float+0x1b2> + 80130e8: f1aa 0a02 sub.w sl, sl, #2 + 80130ec: fa5f fa8a uxtb.w sl, sl + 80130f0: 4652 mov r2, sl + 80130f2: 3901 subs r1, #1 + 80130f4: f104 0050 add.w r0, r4, #80 @ 0x50 + 80130f8: 910d str r1, [sp, #52] @ 0x34 + 80130fa: f7ff ff23 bl 8012f44 <__exponent> + 80130fe: 9a0e ldr r2, [sp, #56] @ 0x38 + 8013100: 4681 mov r9, r0 + 8013102: 1813 adds r3, r2, r0 + 8013104: 2a01 cmp r2, #1 + 8013106: 6123 str r3, [r4, #16] + 8013108: dc02 bgt.n 8013110 <_printf_float+0x158> + 801310a: 6822 ldr r2, [r4, #0] + 801310c: 07d2 lsls r2, r2, #31 + 801310e: d501 bpl.n 8013114 <_printf_float+0x15c> + 8013110: 3301 adds r3, #1 + 8013112: 6123 str r3, [r4, #16] + 8013114: f89d 3033 ldrb.w r3, [sp, #51] @ 0x33 + 8013118: 2b00 cmp r3, #0 + 801311a: d09e beq.n 801305a <_printf_float+0xa2> + 801311c: 232d movs r3, #45 @ 0x2d + 801311e: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 8013122: e79a b.n 801305a <_printf_float+0xa2> + 8013124: 2947 cmp r1, #71 @ 0x47 + 8013126: d1bf bne.n 80130a8 <_printf_float+0xf0> + 8013128: 2b00 cmp r3, #0 + 801312a: d1bd bne.n 80130a8 <_printf_float+0xf0> + 801312c: 2301 movs r3, #1 + 801312e: e7ba b.n 80130a6 <_printf_float+0xee> + 8013130: f1ba 0f65 cmp.w sl, #101 @ 0x65 + 8013134: d9dc bls.n 80130f0 <_printf_float+0x138> + 8013136: f1ba 0f66 cmp.w sl, #102 @ 0x66 + 801313a: d118 bne.n 801316e <_printf_float+0x1b6> + 801313c: 2900 cmp r1, #0 + 801313e: 6863 ldr r3, [r4, #4] + 8013140: dd0b ble.n 801315a <_printf_float+0x1a2> + 8013142: 6121 str r1, [r4, #16] + 8013144: b913 cbnz r3, 801314c <_printf_float+0x194> + 8013146: 6822 ldr r2, [r4, #0] + 8013148: 07d0 lsls r0, r2, #31 + 801314a: d502 bpl.n 8013152 <_printf_float+0x19a> + 801314c: 3301 adds r3, #1 + 801314e: 440b add r3, r1 + 8013150: 6123 str r3, [r4, #16] + 8013152: f04f 0900 mov.w r9, #0 + 8013156: 65a1 str r1, [r4, #88] @ 0x58 + 8013158: e7dc b.n 8013114 <_printf_float+0x15c> + 801315a: b913 cbnz r3, 8013162 <_printf_float+0x1aa> + 801315c: 6822 ldr r2, [r4, #0] + 801315e: 07d2 lsls r2, r2, #31 + 8013160: d501 bpl.n 8013166 <_printf_float+0x1ae> + 8013162: 3302 adds r3, #2 + 8013164: e7f4 b.n 8013150 <_printf_float+0x198> + 8013166: 2301 movs r3, #1 + 8013168: e7f2 b.n 8013150 <_printf_float+0x198> + 801316a: f04f 0a67 mov.w sl, #103 @ 0x67 + 801316e: 9b0e ldr r3, [sp, #56] @ 0x38 + 8013170: 4299 cmp r1, r3 + 8013172: db05 blt.n 8013180 <_printf_float+0x1c8> + 8013174: 6823 ldr r3, [r4, #0] + 8013176: 6121 str r1, [r4, #16] + 8013178: 07d8 lsls r0, r3, #31 + 801317a: d5ea bpl.n 8013152 <_printf_float+0x19a> + 801317c: 1c4b adds r3, r1, #1 + 801317e: e7e7 b.n 8013150 <_printf_float+0x198> + 8013180: 2900 cmp r1, #0 + 8013182: bfcc ite gt + 8013184: 2201 movgt r2, #1 + 8013186: f1c1 0202 rsble r2, r1, #2 + 801318a: 4413 add r3, r2 + 801318c: e7e0 b.n 8013150 <_printf_float+0x198> + 801318e: 6823 ldr r3, [r4, #0] + 8013190: 055a lsls r2, r3, #21 + 8013192: d407 bmi.n 80131a4 <_printf_float+0x1ec> + 8013194: 6923 ldr r3, [r4, #16] + 8013196: 4642 mov r2, r8 + 8013198: 4631 mov r1, r6 + 801319a: 4628 mov r0, r5 + 801319c: 47b8 blx r7 + 801319e: 3001 adds r0, #1 + 80131a0: d12b bne.n 80131fa <_printf_float+0x242> + 80131a2: e764 b.n 801306e <_printf_float+0xb6> + 80131a4: f1ba 0f65 cmp.w sl, #101 @ 0x65 + 80131a8: f240 80dc bls.w 8013364 <_printf_float+0x3ac> + 80131ac: e9d4 0112 ldrd r0, r1, [r4, #72] @ 0x48 + 80131b0: 2200 movs r2, #0 + 80131b2: 2300 movs r3, #0 + 80131b4: f7f5 fc64 bl 8008a80 <__aeabi_dcmpeq> + 80131b8: 2800 cmp r0, #0 + 80131ba: d033 beq.n 8013224 <_printf_float+0x26c> + 80131bc: 2301 movs r3, #1 + 80131be: 4631 mov r1, r6 + 80131c0: 4628 mov r0, r5 + 80131c2: 4a35 ldr r2, [pc, #212] @ (8013298 <_printf_float+0x2e0>) + 80131c4: 47b8 blx r7 + 80131c6: 3001 adds r0, #1 + 80131c8: f43f af51 beq.w 801306e <_printf_float+0xb6> + 80131cc: e9dd 380d ldrd r3, r8, [sp, #52] @ 0x34 + 80131d0: 4543 cmp r3, r8 + 80131d2: db02 blt.n 80131da <_printf_float+0x222> + 80131d4: 6823 ldr r3, [r4, #0] + 80131d6: 07d8 lsls r0, r3, #31 + 80131d8: d50f bpl.n 80131fa <_printf_float+0x242> + 80131da: e9dd 2308 ldrd r2, r3, [sp, #32] + 80131de: 4631 mov r1, r6 + 80131e0: 4628 mov r0, r5 + 80131e2: 47b8 blx r7 + 80131e4: 3001 adds r0, #1 + 80131e6: f43f af42 beq.w 801306e <_printf_float+0xb6> + 80131ea: f04f 0900 mov.w r9, #0 + 80131ee: f108 38ff add.w r8, r8, #4294967295 @ 0xffffffff + 80131f2: f104 0a1a add.w sl, r4, #26 + 80131f6: 45c8 cmp r8, r9 + 80131f8: dc09 bgt.n 801320e <_printf_float+0x256> + 80131fa: 6823 ldr r3, [r4, #0] + 80131fc: 079b lsls r3, r3, #30 + 80131fe: f100 8102 bmi.w 8013406 <_printf_float+0x44e> + 8013202: 68e0 ldr r0, [r4, #12] + 8013204: 9b0f ldr r3, [sp, #60] @ 0x3c + 8013206: 4298 cmp r0, r3 + 8013208: bfb8 it lt + 801320a: 4618 movlt r0, r3 + 801320c: e731 b.n 8013072 <_printf_float+0xba> + 801320e: 2301 movs r3, #1 + 8013210: 4652 mov r2, sl + 8013212: 4631 mov r1, r6 + 8013214: 4628 mov r0, r5 + 8013216: 47b8 blx r7 + 8013218: 3001 adds r0, #1 + 801321a: f43f af28 beq.w 801306e <_printf_float+0xb6> + 801321e: f109 0901 add.w r9, r9, #1 + 8013222: e7e8 b.n 80131f6 <_printf_float+0x23e> + 8013224: 9b0d ldr r3, [sp, #52] @ 0x34 + 8013226: 2b00 cmp r3, #0 + 8013228: dc38 bgt.n 801329c <_printf_float+0x2e4> + 801322a: 2301 movs r3, #1 + 801322c: 4631 mov r1, r6 + 801322e: 4628 mov r0, r5 + 8013230: 4a19 ldr r2, [pc, #100] @ (8013298 <_printf_float+0x2e0>) + 8013232: 47b8 blx r7 + 8013234: 3001 adds r0, #1 + 8013236: f43f af1a beq.w 801306e <_printf_float+0xb6> + 801323a: e9dd 390d ldrd r3, r9, [sp, #52] @ 0x34 + 801323e: ea59 0303 orrs.w r3, r9, r3 + 8013242: d102 bne.n 801324a <_printf_float+0x292> + 8013244: 6823 ldr r3, [r4, #0] + 8013246: 07d9 lsls r1, r3, #31 + 8013248: d5d7 bpl.n 80131fa <_printf_float+0x242> + 801324a: e9dd 2308 ldrd r2, r3, [sp, #32] + 801324e: 4631 mov r1, r6 + 8013250: 4628 mov r0, r5 + 8013252: 47b8 blx r7 + 8013254: 3001 adds r0, #1 + 8013256: f43f af0a beq.w 801306e <_printf_float+0xb6> + 801325a: f04f 0a00 mov.w sl, #0 + 801325e: f104 0b1a add.w fp, r4, #26 + 8013262: 9b0d ldr r3, [sp, #52] @ 0x34 + 8013264: 425b negs r3, r3 + 8013266: 4553 cmp r3, sl + 8013268: dc01 bgt.n 801326e <_printf_float+0x2b6> + 801326a: 464b mov r3, r9 + 801326c: e793 b.n 8013196 <_printf_float+0x1de> + 801326e: 2301 movs r3, #1 + 8013270: 465a mov r2, fp + 8013272: 4631 mov r1, r6 + 8013274: 4628 mov r0, r5 + 8013276: 47b8 blx r7 + 8013278: 3001 adds r0, #1 + 801327a: f43f aef8 beq.w 801306e <_printf_float+0xb6> + 801327e: f10a 0a01 add.w sl, sl, #1 + 8013282: e7ee b.n 8013262 <_printf_float+0x2aa> + 8013284: 7fefffff .word 0x7fefffff + 8013288: 0801601c .word 0x0801601c + 801328c: 08016018 .word 0x08016018 + 8013290: 08016024 .word 0x08016024 + 8013294: 08016020 .word 0x08016020 + 8013298: 08016028 .word 0x08016028 + 801329c: 6da3 ldr r3, [r4, #88] @ 0x58 + 801329e: f8dd a038 ldr.w sl, [sp, #56] @ 0x38 + 80132a2: 4553 cmp r3, sl + 80132a4: bfa8 it ge + 80132a6: 4653 movge r3, sl + 80132a8: 2b00 cmp r3, #0 + 80132aa: 4699 mov r9, r3 + 80132ac: dc36 bgt.n 801331c <_printf_float+0x364> + 80132ae: f04f 0b00 mov.w fp, #0 + 80132b2: ea29 79e9 bic.w r9, r9, r9, asr #31 + 80132b6: f104 021a add.w r2, r4, #26 + 80132ba: 6da3 ldr r3, [r4, #88] @ 0x58 + 80132bc: 930a str r3, [sp, #40] @ 0x28 + 80132be: eba3 0309 sub.w r3, r3, r9 + 80132c2: 455b cmp r3, fp + 80132c4: dc31 bgt.n 801332a <_printf_float+0x372> + 80132c6: 9b0d ldr r3, [sp, #52] @ 0x34 + 80132c8: 459a cmp sl, r3 + 80132ca: dc3a bgt.n 8013342 <_printf_float+0x38a> + 80132cc: 6823 ldr r3, [r4, #0] + 80132ce: 07da lsls r2, r3, #31 + 80132d0: d437 bmi.n 8013342 <_printf_float+0x38a> + 80132d2: 9b0d ldr r3, [sp, #52] @ 0x34 + 80132d4: ebaa 0903 sub.w r9, sl, r3 + 80132d8: 9b0a ldr r3, [sp, #40] @ 0x28 + 80132da: ebaa 0303 sub.w r3, sl, r3 + 80132de: 4599 cmp r9, r3 + 80132e0: bfa8 it ge + 80132e2: 4699 movge r9, r3 + 80132e4: f1b9 0f00 cmp.w r9, #0 + 80132e8: dc33 bgt.n 8013352 <_printf_float+0x39a> + 80132ea: f04f 0800 mov.w r8, #0 + 80132ee: ea29 79e9 bic.w r9, r9, r9, asr #31 + 80132f2: f104 0b1a add.w fp, r4, #26 + 80132f6: 9b0d ldr r3, [sp, #52] @ 0x34 + 80132f8: ebaa 0303 sub.w r3, sl, r3 + 80132fc: eba3 0309 sub.w r3, r3, r9 + 8013300: 4543 cmp r3, r8 + 8013302: f77f af7a ble.w 80131fa <_printf_float+0x242> + 8013306: 2301 movs r3, #1 + 8013308: 465a mov r2, fp + 801330a: 4631 mov r1, r6 + 801330c: 4628 mov r0, r5 + 801330e: 47b8 blx r7 + 8013310: 3001 adds r0, #1 + 8013312: f43f aeac beq.w 801306e <_printf_float+0xb6> + 8013316: f108 0801 add.w r8, r8, #1 + 801331a: e7ec b.n 80132f6 <_printf_float+0x33e> + 801331c: 4642 mov r2, r8 + 801331e: 4631 mov r1, r6 + 8013320: 4628 mov r0, r5 + 8013322: 47b8 blx r7 + 8013324: 3001 adds r0, #1 + 8013326: d1c2 bne.n 80132ae <_printf_float+0x2f6> + 8013328: e6a1 b.n 801306e <_printf_float+0xb6> + 801332a: 2301 movs r3, #1 + 801332c: 4631 mov r1, r6 + 801332e: 4628 mov r0, r5 + 8013330: 920a str r2, [sp, #40] @ 0x28 + 8013332: 47b8 blx r7 + 8013334: 3001 adds r0, #1 + 8013336: f43f ae9a beq.w 801306e <_printf_float+0xb6> + 801333a: 9a0a ldr r2, [sp, #40] @ 0x28 + 801333c: f10b 0b01 add.w fp, fp, #1 + 8013340: e7bb b.n 80132ba <_printf_float+0x302> + 8013342: 4631 mov r1, r6 + 8013344: e9dd 2308 ldrd r2, r3, [sp, #32] + 8013348: 4628 mov r0, r5 + 801334a: 47b8 blx r7 + 801334c: 3001 adds r0, #1 + 801334e: d1c0 bne.n 80132d2 <_printf_float+0x31a> + 8013350: e68d b.n 801306e <_printf_float+0xb6> + 8013352: 9a0a ldr r2, [sp, #40] @ 0x28 + 8013354: 464b mov r3, r9 + 8013356: 4631 mov r1, r6 + 8013358: 4628 mov r0, r5 + 801335a: 4442 add r2, r8 + 801335c: 47b8 blx r7 + 801335e: 3001 adds r0, #1 + 8013360: d1c3 bne.n 80132ea <_printf_float+0x332> + 8013362: e684 b.n 801306e <_printf_float+0xb6> + 8013364: f8dd a038 ldr.w sl, [sp, #56] @ 0x38 + 8013368: f1ba 0f01 cmp.w sl, #1 + 801336c: dc01 bgt.n 8013372 <_printf_float+0x3ba> + 801336e: 07db lsls r3, r3, #31 + 8013370: d536 bpl.n 80133e0 <_printf_float+0x428> + 8013372: 2301 movs r3, #1 + 8013374: 4642 mov r2, r8 + 8013376: 4631 mov r1, r6 + 8013378: 4628 mov r0, r5 + 801337a: 47b8 blx r7 + 801337c: 3001 adds r0, #1 + 801337e: f43f ae76 beq.w 801306e <_printf_float+0xb6> + 8013382: e9dd 2308 ldrd r2, r3, [sp, #32] + 8013386: 4631 mov r1, r6 + 8013388: 4628 mov r0, r5 + 801338a: 47b8 blx r7 + 801338c: 3001 adds r0, #1 + 801338e: f43f ae6e beq.w 801306e <_printf_float+0xb6> + 8013392: e9d4 0112 ldrd r0, r1, [r4, #72] @ 0x48 + 8013396: 2200 movs r2, #0 + 8013398: 2300 movs r3, #0 + 801339a: f10a 3aff add.w sl, sl, #4294967295 @ 0xffffffff + 801339e: f7f5 fb6f bl 8008a80 <__aeabi_dcmpeq> + 80133a2: b9c0 cbnz r0, 80133d6 <_printf_float+0x41e> + 80133a4: 4653 mov r3, sl + 80133a6: f108 0201 add.w r2, r8, #1 + 80133aa: 4631 mov r1, r6 + 80133ac: 4628 mov r0, r5 + 80133ae: 47b8 blx r7 + 80133b0: 3001 adds r0, #1 + 80133b2: d10c bne.n 80133ce <_printf_float+0x416> + 80133b4: e65b b.n 801306e <_printf_float+0xb6> + 80133b6: 2301 movs r3, #1 + 80133b8: 465a mov r2, fp + 80133ba: 4631 mov r1, r6 + 80133bc: 4628 mov r0, r5 + 80133be: 47b8 blx r7 + 80133c0: 3001 adds r0, #1 + 80133c2: f43f ae54 beq.w 801306e <_printf_float+0xb6> + 80133c6: f108 0801 add.w r8, r8, #1 + 80133ca: 45d0 cmp r8, sl + 80133cc: dbf3 blt.n 80133b6 <_printf_float+0x3fe> + 80133ce: 464b mov r3, r9 + 80133d0: f104 0250 add.w r2, r4, #80 @ 0x50 + 80133d4: e6e0 b.n 8013198 <_printf_float+0x1e0> + 80133d6: f04f 0800 mov.w r8, #0 + 80133da: f104 0b1a add.w fp, r4, #26 + 80133de: e7f4 b.n 80133ca <_printf_float+0x412> + 80133e0: 2301 movs r3, #1 + 80133e2: 4642 mov r2, r8 + 80133e4: e7e1 b.n 80133aa <_printf_float+0x3f2> + 80133e6: 2301 movs r3, #1 + 80133e8: 464a mov r2, r9 + 80133ea: 4631 mov r1, r6 + 80133ec: 4628 mov r0, r5 + 80133ee: 47b8 blx r7 + 80133f0: 3001 adds r0, #1 + 80133f2: f43f ae3c beq.w 801306e <_printf_float+0xb6> + 80133f6: f108 0801 add.w r8, r8, #1 + 80133fa: 68e3 ldr r3, [r4, #12] + 80133fc: 990f ldr r1, [sp, #60] @ 0x3c + 80133fe: 1a5b subs r3, r3, r1 + 8013400: 4543 cmp r3, r8 + 8013402: dcf0 bgt.n 80133e6 <_printf_float+0x42e> + 8013404: e6fd b.n 8013202 <_printf_float+0x24a> + 8013406: f04f 0800 mov.w r8, #0 + 801340a: f104 0919 add.w r9, r4, #25 + 801340e: e7f4 b.n 80133fa <_printf_float+0x442> + +08013410 <_printf_common>: + 8013410: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 8013414: 4616 mov r6, r2 + 8013416: 4698 mov r8, r3 + 8013418: 688a ldr r2, [r1, #8] + 801341a: 690b ldr r3, [r1, #16] + 801341c: 4607 mov r7, r0 + 801341e: 4293 cmp r3, r2 + 8013420: bfb8 it lt + 8013422: 4613 movlt r3, r2 + 8013424: 6033 str r3, [r6, #0] + 8013426: f891 2043 ldrb.w r2, [r1, #67] @ 0x43 + 801342a: 460c mov r4, r1 + 801342c: f8dd 9020 ldr.w r9, [sp, #32] + 8013430: b10a cbz r2, 8013436 <_printf_common+0x26> + 8013432: 3301 adds r3, #1 + 8013434: 6033 str r3, [r6, #0] + 8013436: 6823 ldr r3, [r4, #0] + 8013438: 0699 lsls r1, r3, #26 + 801343a: bf42 ittt mi + 801343c: 6833 ldrmi r3, [r6, #0] + 801343e: 3302 addmi r3, #2 + 8013440: 6033 strmi r3, [r6, #0] + 8013442: 6825 ldr r5, [r4, #0] + 8013444: f015 0506 ands.w r5, r5, #6 + 8013448: d106 bne.n 8013458 <_printf_common+0x48> + 801344a: f104 0a19 add.w sl, r4, #25 + 801344e: 68e3 ldr r3, [r4, #12] + 8013450: 6832 ldr r2, [r6, #0] + 8013452: 1a9b subs r3, r3, r2 + 8013454: 42ab cmp r3, r5 + 8013456: dc2b bgt.n 80134b0 <_printf_common+0xa0> + 8013458: f894 3043 ldrb.w r3, [r4, #67] @ 0x43 + 801345c: 6822 ldr r2, [r4, #0] + 801345e: 3b00 subs r3, #0 + 8013460: bf18 it ne + 8013462: 2301 movne r3, #1 + 8013464: 0692 lsls r2, r2, #26 + 8013466: d430 bmi.n 80134ca <_printf_common+0xba> + 8013468: 4641 mov r1, r8 + 801346a: 4638 mov r0, r7 + 801346c: f104 0243 add.w r2, r4, #67 @ 0x43 + 8013470: 47c8 blx r9 + 8013472: 3001 adds r0, #1 + 8013474: d023 beq.n 80134be <_printf_common+0xae> + 8013476: 6823 ldr r3, [r4, #0] + 8013478: 6922 ldr r2, [r4, #16] + 801347a: f003 0306 and.w r3, r3, #6 + 801347e: 2b04 cmp r3, #4 + 8013480: bf14 ite ne + 8013482: 2500 movne r5, #0 + 8013484: 6833 ldreq r3, [r6, #0] + 8013486: f04f 0600 mov.w r6, #0 + 801348a: bf08 it eq + 801348c: 68e5 ldreq r5, [r4, #12] + 801348e: f104 041a add.w r4, r4, #26 + 8013492: bf08 it eq + 8013494: 1aed subeq r5, r5, r3 + 8013496: f854 3c12 ldr.w r3, [r4, #-18] + 801349a: bf08 it eq + 801349c: ea25 75e5 biceq.w r5, r5, r5, asr #31 + 80134a0: 4293 cmp r3, r2 + 80134a2: bfc4 itt gt + 80134a4: 1a9b subgt r3, r3, r2 + 80134a6: 18ed addgt r5, r5, r3 + 80134a8: 42b5 cmp r5, r6 + 80134aa: d11a bne.n 80134e2 <_printf_common+0xd2> + 80134ac: 2000 movs r0, #0 + 80134ae: e008 b.n 80134c2 <_printf_common+0xb2> + 80134b0: 2301 movs r3, #1 + 80134b2: 4652 mov r2, sl + 80134b4: 4641 mov r1, r8 + 80134b6: 4638 mov r0, r7 + 80134b8: 47c8 blx r9 + 80134ba: 3001 adds r0, #1 + 80134bc: d103 bne.n 80134c6 <_printf_common+0xb6> + 80134be: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 80134c2: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 80134c6: 3501 adds r5, #1 + 80134c8: e7c1 b.n 801344e <_printf_common+0x3e> + 80134ca: 2030 movs r0, #48 @ 0x30 + 80134cc: 18e1 adds r1, r4, r3 + 80134ce: f881 0043 strb.w r0, [r1, #67] @ 0x43 + 80134d2: 1c5a adds r2, r3, #1 + 80134d4: f894 1045 ldrb.w r1, [r4, #69] @ 0x45 + 80134d8: 4422 add r2, r4 + 80134da: 3302 adds r3, #2 + 80134dc: f882 1043 strb.w r1, [r2, #67] @ 0x43 + 80134e0: e7c2 b.n 8013468 <_printf_common+0x58> + 80134e2: 2301 movs r3, #1 + 80134e4: 4622 mov r2, r4 + 80134e6: 4641 mov r1, r8 + 80134e8: 4638 mov r0, r7 + 80134ea: 47c8 blx r9 + 80134ec: 3001 adds r0, #1 + 80134ee: d0e6 beq.n 80134be <_printf_common+0xae> + 80134f0: 3601 adds r6, #1 + 80134f2: e7d9 b.n 80134a8 <_printf_common+0x98> + +080134f4 <_printf_i>: + 80134f4: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} + 80134f8: 7e0f ldrb r7, [r1, #24] + 80134fa: 4691 mov r9, r2 + 80134fc: 2f78 cmp r7, #120 @ 0x78 + 80134fe: 4680 mov r8, r0 + 8013500: 460c mov r4, r1 + 8013502: 469a mov sl, r3 + 8013504: 9e0c ldr r6, [sp, #48] @ 0x30 + 8013506: f101 0243 add.w r2, r1, #67 @ 0x43 + 801350a: d807 bhi.n 801351c <_printf_i+0x28> + 801350c: 2f62 cmp r7, #98 @ 0x62 + 801350e: d80a bhi.n 8013526 <_printf_i+0x32> + 8013510: 2f00 cmp r7, #0 + 8013512: f000 80d1 beq.w 80136b8 <_printf_i+0x1c4> + 8013516: 2f58 cmp r7, #88 @ 0x58 + 8013518: f000 80b8 beq.w 801368c <_printf_i+0x198> + 801351c: f104 0642 add.w r6, r4, #66 @ 0x42 + 8013520: f884 7042 strb.w r7, [r4, #66] @ 0x42 + 8013524: e03a b.n 801359c <_printf_i+0xa8> + 8013526: f1a7 0363 sub.w r3, r7, #99 @ 0x63 + 801352a: 2b15 cmp r3, #21 + 801352c: d8f6 bhi.n 801351c <_printf_i+0x28> + 801352e: a101 add r1, pc, #4 @ (adr r1, 8013534 <_printf_i+0x40>) + 8013530: f851 f023 ldr.w pc, [r1, r3, lsl #2] + 8013534: 0801358d .word 0x0801358d + 8013538: 080135a1 .word 0x080135a1 + 801353c: 0801351d .word 0x0801351d + 8013540: 0801351d .word 0x0801351d + 8013544: 0801351d .word 0x0801351d + 8013548: 0801351d .word 0x0801351d + 801354c: 080135a1 .word 0x080135a1 + 8013550: 0801351d .word 0x0801351d + 8013554: 0801351d .word 0x0801351d + 8013558: 0801351d .word 0x0801351d + 801355c: 0801351d .word 0x0801351d + 8013560: 0801369f .word 0x0801369f + 8013564: 080135cb .word 0x080135cb + 8013568: 08013659 .word 0x08013659 + 801356c: 0801351d .word 0x0801351d + 8013570: 0801351d .word 0x0801351d + 8013574: 080136c1 .word 0x080136c1 + 8013578: 0801351d .word 0x0801351d + 801357c: 080135cb .word 0x080135cb + 8013580: 0801351d .word 0x0801351d + 8013584: 0801351d .word 0x0801351d + 8013588: 08013661 .word 0x08013661 + 801358c: 6833 ldr r3, [r6, #0] + 801358e: 1d1a adds r2, r3, #4 + 8013590: 681b ldr r3, [r3, #0] + 8013592: 6032 str r2, [r6, #0] + 8013594: f104 0642 add.w r6, r4, #66 @ 0x42 + 8013598: f884 3042 strb.w r3, [r4, #66] @ 0x42 + 801359c: 2301 movs r3, #1 + 801359e: e09c b.n 80136da <_printf_i+0x1e6> + 80135a0: 6833 ldr r3, [r6, #0] + 80135a2: 6820 ldr r0, [r4, #0] + 80135a4: 1d19 adds r1, r3, #4 + 80135a6: 6031 str r1, [r6, #0] + 80135a8: 0606 lsls r6, r0, #24 + 80135aa: d501 bpl.n 80135b0 <_printf_i+0xbc> + 80135ac: 681d ldr r5, [r3, #0] + 80135ae: e003 b.n 80135b8 <_printf_i+0xc4> + 80135b0: 0645 lsls r5, r0, #25 + 80135b2: d5fb bpl.n 80135ac <_printf_i+0xb8> + 80135b4: f9b3 5000 ldrsh.w r5, [r3] + 80135b8: 2d00 cmp r5, #0 + 80135ba: da03 bge.n 80135c4 <_printf_i+0xd0> + 80135bc: 232d movs r3, #45 @ 0x2d + 80135be: 426d negs r5, r5 + 80135c0: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 80135c4: 230a movs r3, #10 + 80135c6: 4858 ldr r0, [pc, #352] @ (8013728 <_printf_i+0x234>) + 80135c8: e011 b.n 80135ee <_printf_i+0xfa> + 80135ca: 6821 ldr r1, [r4, #0] + 80135cc: 6833 ldr r3, [r6, #0] + 80135ce: 0608 lsls r0, r1, #24 + 80135d0: f853 5b04 ldr.w r5, [r3], #4 + 80135d4: d402 bmi.n 80135dc <_printf_i+0xe8> + 80135d6: 0649 lsls r1, r1, #25 + 80135d8: bf48 it mi + 80135da: b2ad uxthmi r5, r5 + 80135dc: 2f6f cmp r7, #111 @ 0x6f + 80135de: 6033 str r3, [r6, #0] + 80135e0: bf14 ite ne + 80135e2: 230a movne r3, #10 + 80135e4: 2308 moveq r3, #8 + 80135e6: 4850 ldr r0, [pc, #320] @ (8013728 <_printf_i+0x234>) + 80135e8: 2100 movs r1, #0 + 80135ea: f884 1043 strb.w r1, [r4, #67] @ 0x43 + 80135ee: 6866 ldr r6, [r4, #4] + 80135f0: 2e00 cmp r6, #0 + 80135f2: 60a6 str r6, [r4, #8] + 80135f4: db05 blt.n 8013602 <_printf_i+0x10e> + 80135f6: 6821 ldr r1, [r4, #0] + 80135f8: 432e orrs r6, r5 + 80135fa: f021 0104 bic.w r1, r1, #4 + 80135fe: 6021 str r1, [r4, #0] + 8013600: d04b beq.n 801369a <_printf_i+0x1a6> + 8013602: 4616 mov r6, r2 + 8013604: fbb5 f1f3 udiv r1, r5, r3 + 8013608: fb03 5711 mls r7, r3, r1, r5 + 801360c: 5dc7 ldrb r7, [r0, r7] + 801360e: f806 7d01 strb.w r7, [r6, #-1]! + 8013612: 462f mov r7, r5 + 8013614: 42bb cmp r3, r7 + 8013616: 460d mov r5, r1 + 8013618: d9f4 bls.n 8013604 <_printf_i+0x110> + 801361a: 2b08 cmp r3, #8 + 801361c: d10b bne.n 8013636 <_printf_i+0x142> + 801361e: 6823 ldr r3, [r4, #0] + 8013620: 07df lsls r7, r3, #31 + 8013622: d508 bpl.n 8013636 <_printf_i+0x142> + 8013624: 6923 ldr r3, [r4, #16] + 8013626: 6861 ldr r1, [r4, #4] + 8013628: 4299 cmp r1, r3 + 801362a: bfde ittt le + 801362c: 2330 movle r3, #48 @ 0x30 + 801362e: f806 3c01 strble.w r3, [r6, #-1] + 8013632: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff + 8013636: 1b92 subs r2, r2, r6 + 8013638: 6122 str r2, [r4, #16] + 801363a: 464b mov r3, r9 + 801363c: 4621 mov r1, r4 + 801363e: 4640 mov r0, r8 + 8013640: f8cd a000 str.w sl, [sp] + 8013644: aa03 add r2, sp, #12 + 8013646: f7ff fee3 bl 8013410 <_printf_common> + 801364a: 3001 adds r0, #1 + 801364c: d14a bne.n 80136e4 <_printf_i+0x1f0> + 801364e: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8013652: b004 add sp, #16 + 8013654: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 8013658: 6823 ldr r3, [r4, #0] + 801365a: f043 0320 orr.w r3, r3, #32 + 801365e: 6023 str r3, [r4, #0] + 8013660: 2778 movs r7, #120 @ 0x78 + 8013662: 4832 ldr r0, [pc, #200] @ (801372c <_printf_i+0x238>) + 8013664: f884 7045 strb.w r7, [r4, #69] @ 0x45 + 8013668: 6823 ldr r3, [r4, #0] + 801366a: 6831 ldr r1, [r6, #0] + 801366c: 061f lsls r7, r3, #24 + 801366e: f851 5b04 ldr.w r5, [r1], #4 + 8013672: d402 bmi.n 801367a <_printf_i+0x186> + 8013674: 065f lsls r7, r3, #25 + 8013676: bf48 it mi + 8013678: b2ad uxthmi r5, r5 + 801367a: 6031 str r1, [r6, #0] + 801367c: 07d9 lsls r1, r3, #31 + 801367e: bf44 itt mi + 8013680: f043 0320 orrmi.w r3, r3, #32 + 8013684: 6023 strmi r3, [r4, #0] + 8013686: b11d cbz r5, 8013690 <_printf_i+0x19c> + 8013688: 2310 movs r3, #16 + 801368a: e7ad b.n 80135e8 <_printf_i+0xf4> + 801368c: 4826 ldr r0, [pc, #152] @ (8013728 <_printf_i+0x234>) + 801368e: e7e9 b.n 8013664 <_printf_i+0x170> + 8013690: 6823 ldr r3, [r4, #0] + 8013692: f023 0320 bic.w r3, r3, #32 + 8013696: 6023 str r3, [r4, #0] + 8013698: e7f6 b.n 8013688 <_printf_i+0x194> + 801369a: 4616 mov r6, r2 + 801369c: e7bd b.n 801361a <_printf_i+0x126> + 801369e: 6833 ldr r3, [r6, #0] + 80136a0: 6825 ldr r5, [r4, #0] + 80136a2: 1d18 adds r0, r3, #4 + 80136a4: 6961 ldr r1, [r4, #20] + 80136a6: 6030 str r0, [r6, #0] + 80136a8: 062e lsls r6, r5, #24 + 80136aa: 681b ldr r3, [r3, #0] + 80136ac: d501 bpl.n 80136b2 <_printf_i+0x1be> + 80136ae: 6019 str r1, [r3, #0] + 80136b0: e002 b.n 80136b8 <_printf_i+0x1c4> + 80136b2: 0668 lsls r0, r5, #25 + 80136b4: d5fb bpl.n 80136ae <_printf_i+0x1ba> + 80136b6: 8019 strh r1, [r3, #0] + 80136b8: 2300 movs r3, #0 + 80136ba: 4616 mov r6, r2 + 80136bc: 6123 str r3, [r4, #16] + 80136be: e7bc b.n 801363a <_printf_i+0x146> + 80136c0: 6833 ldr r3, [r6, #0] + 80136c2: 2100 movs r1, #0 + 80136c4: 1d1a adds r2, r3, #4 + 80136c6: 6032 str r2, [r6, #0] + 80136c8: 681e ldr r6, [r3, #0] + 80136ca: 6862 ldr r2, [r4, #4] + 80136cc: 4630 mov r0, r6 + 80136ce: f000 f979 bl 80139c4 + 80136d2: b108 cbz r0, 80136d8 <_printf_i+0x1e4> + 80136d4: 1b80 subs r0, r0, r6 + 80136d6: 6060 str r0, [r4, #4] + 80136d8: 6863 ldr r3, [r4, #4] + 80136da: 6123 str r3, [r4, #16] + 80136dc: 2300 movs r3, #0 + 80136de: f884 3043 strb.w r3, [r4, #67] @ 0x43 + 80136e2: e7aa b.n 801363a <_printf_i+0x146> + 80136e4: 4632 mov r2, r6 + 80136e6: 4649 mov r1, r9 + 80136e8: 4640 mov r0, r8 + 80136ea: 6923 ldr r3, [r4, #16] + 80136ec: 47d0 blx sl + 80136ee: 3001 adds r0, #1 + 80136f0: d0ad beq.n 801364e <_printf_i+0x15a> + 80136f2: 6823 ldr r3, [r4, #0] + 80136f4: 079b lsls r3, r3, #30 + 80136f6: d413 bmi.n 8013720 <_printf_i+0x22c> + 80136f8: 68e0 ldr r0, [r4, #12] + 80136fa: 9b03 ldr r3, [sp, #12] + 80136fc: 4298 cmp r0, r3 + 80136fe: bfb8 it lt + 8013700: 4618 movlt r0, r3 + 8013702: e7a6 b.n 8013652 <_printf_i+0x15e> + 8013704: 2301 movs r3, #1 + 8013706: 4632 mov r2, r6 + 8013708: 4649 mov r1, r9 + 801370a: 4640 mov r0, r8 + 801370c: 47d0 blx sl + 801370e: 3001 adds r0, #1 + 8013710: d09d beq.n 801364e <_printf_i+0x15a> + 8013712: 3501 adds r5, #1 + 8013714: 68e3 ldr r3, [r4, #12] + 8013716: 9903 ldr r1, [sp, #12] + 8013718: 1a5b subs r3, r3, r1 + 801371a: 42ab cmp r3, r5 + 801371c: dcf2 bgt.n 8013704 <_printf_i+0x210> + 801371e: e7eb b.n 80136f8 <_printf_i+0x204> + 8013720: 2500 movs r5, #0 + 8013722: f104 0619 add.w r6, r4, #25 + 8013726: e7f5 b.n 8013714 <_printf_i+0x220> + 8013728: 0801602a .word 0x0801602a + 801372c: 0801603b .word 0x0801603b + +08013730 : + 8013730: 2300 movs r3, #0 + 8013732: b510 push {r4, lr} + 8013734: 4604 mov r4, r0 + 8013736: e9c0 3300 strd r3, r3, [r0] + 801373a: e9c0 3304 strd r3, r3, [r0, #16] + 801373e: 6083 str r3, [r0, #8] + 8013740: 8181 strh r1, [r0, #12] + 8013742: 6643 str r3, [r0, #100] @ 0x64 + 8013744: 81c2 strh r2, [r0, #14] + 8013746: 6183 str r3, [r0, #24] + 8013748: 4619 mov r1, r3 + 801374a: 2208 movs r2, #8 + 801374c: 305c adds r0, #92 @ 0x5c + 801374e: f000 f8ff bl 8013950 + 8013752: 4b0d ldr r3, [pc, #52] @ (8013788 ) + 8013754: 6224 str r4, [r4, #32] + 8013756: 6263 str r3, [r4, #36] @ 0x24 + 8013758: 4b0c ldr r3, [pc, #48] @ (801378c ) + 801375a: 62a3 str r3, [r4, #40] @ 0x28 + 801375c: 4b0c ldr r3, [pc, #48] @ (8013790 ) + 801375e: 62e3 str r3, [r4, #44] @ 0x2c + 8013760: 4b0c ldr r3, [pc, #48] @ (8013794 ) + 8013762: 6323 str r3, [r4, #48] @ 0x30 + 8013764: 4b0c ldr r3, [pc, #48] @ (8013798 ) + 8013766: 429c cmp r4, r3 + 8013768: d006 beq.n 8013778 + 801376a: f103 0268 add.w r2, r3, #104 @ 0x68 + 801376e: 4294 cmp r4, r2 + 8013770: d002 beq.n 8013778 + 8013772: 33d0 adds r3, #208 @ 0xd0 + 8013774: 429c cmp r4, r3 + 8013776: d105 bne.n 8013784 + 8013778: f104 0058 add.w r0, r4, #88 @ 0x58 + 801377c: e8bd 4010 ldmia.w sp!, {r4, lr} + 8013780: f000 b918 b.w 80139b4 <__retarget_lock_init_recursive> + 8013784: bd10 pop {r4, pc} + 8013786: bf00 nop + 8013788: 080155d1 .word 0x080155d1 + 801378c: 080155f3 .word 0x080155f3 + 8013790: 0801562b .word 0x0801562b + 8013794: 0801564f .word 0x0801564f + 8013798: 200011d4 .word 0x200011d4 + +0801379c : + 801379c: 4a02 ldr r2, [pc, #8] @ (80137a8 ) + 801379e: 4903 ldr r1, [pc, #12] @ (80137ac ) + 80137a0: 4803 ldr r0, [pc, #12] @ (80137b0 ) + 80137a2: f000 b8a5 b.w 80138f0 <_fwalk_sglue> + 80137a6: bf00 nop + 80137a8: 20000078 .word 0x20000078 + 80137ac: 08014e75 .word 0x08014e75 + 80137b0: 20000088 .word 0x20000088 + +080137b4 : + 80137b4: 6841 ldr r1, [r0, #4] + 80137b6: 4b0c ldr r3, [pc, #48] @ (80137e8 ) + 80137b8: b510 push {r4, lr} + 80137ba: 4299 cmp r1, r3 + 80137bc: 4604 mov r4, r0 + 80137be: d001 beq.n 80137c4 + 80137c0: f001 fb58 bl 8014e74 <_fflush_r> + 80137c4: 68a1 ldr r1, [r4, #8] + 80137c6: 4b09 ldr r3, [pc, #36] @ (80137ec ) + 80137c8: 4299 cmp r1, r3 + 80137ca: d002 beq.n 80137d2 + 80137cc: 4620 mov r0, r4 + 80137ce: f001 fb51 bl 8014e74 <_fflush_r> + 80137d2: 68e1 ldr r1, [r4, #12] + 80137d4: 4b06 ldr r3, [pc, #24] @ (80137f0 ) + 80137d6: 4299 cmp r1, r3 + 80137d8: d004 beq.n 80137e4 + 80137da: 4620 mov r0, r4 + 80137dc: e8bd 4010 ldmia.w sp!, {r4, lr} + 80137e0: f001 bb48 b.w 8014e74 <_fflush_r> + 80137e4: bd10 pop {r4, pc} + 80137e6: bf00 nop + 80137e8: 200011d4 .word 0x200011d4 + 80137ec: 2000123c .word 0x2000123c + 80137f0: 200012a4 .word 0x200012a4 + +080137f4 : + 80137f4: b510 push {r4, lr} + 80137f6: 4b0b ldr r3, [pc, #44] @ (8013824 ) + 80137f8: 4c0b ldr r4, [pc, #44] @ (8013828 ) + 80137fa: 4a0c ldr r2, [pc, #48] @ (801382c ) + 80137fc: 4620 mov r0, r4 + 80137fe: 601a str r2, [r3, #0] + 8013800: 2104 movs r1, #4 + 8013802: 2200 movs r2, #0 + 8013804: f7ff ff94 bl 8013730 + 8013808: f104 0068 add.w r0, r4, #104 @ 0x68 + 801380c: 2201 movs r2, #1 + 801380e: 2109 movs r1, #9 + 8013810: f7ff ff8e bl 8013730 + 8013814: f104 00d0 add.w r0, r4, #208 @ 0xd0 + 8013818: 2202 movs r2, #2 + 801381a: e8bd 4010 ldmia.w sp!, {r4, lr} + 801381e: 2112 movs r1, #18 + 8013820: f7ff bf86 b.w 8013730 + 8013824: 2000130c .word 0x2000130c + 8013828: 200011d4 .word 0x200011d4 + 801382c: 0801379d .word 0x0801379d + +08013830 <__sfp_lock_acquire>: + 8013830: 4801 ldr r0, [pc, #4] @ (8013838 <__sfp_lock_acquire+0x8>) + 8013832: f000 b8c0 b.w 80139b6 <__retarget_lock_acquire_recursive> + 8013836: bf00 nop + 8013838: 20001311 .word 0x20001311 + +0801383c <__sfp_lock_release>: + 801383c: 4801 ldr r0, [pc, #4] @ (8013844 <__sfp_lock_release+0x8>) + 801383e: f000 b8bb b.w 80139b8 <__retarget_lock_release_recursive> + 8013842: bf00 nop + 8013844: 20001311 .word 0x20001311 + +08013848 <__sinit>: + 8013848: b510 push {r4, lr} + 801384a: 4604 mov r4, r0 + 801384c: f7ff fff0 bl 8013830 <__sfp_lock_acquire> + 8013850: 6a23 ldr r3, [r4, #32] + 8013852: b11b cbz r3, 801385c <__sinit+0x14> + 8013854: e8bd 4010 ldmia.w sp!, {r4, lr} + 8013858: f7ff bff0 b.w 801383c <__sfp_lock_release> + 801385c: 4b04 ldr r3, [pc, #16] @ (8013870 <__sinit+0x28>) + 801385e: 6223 str r3, [r4, #32] + 8013860: 4b04 ldr r3, [pc, #16] @ (8013874 <__sinit+0x2c>) + 8013862: 681b ldr r3, [r3, #0] + 8013864: 2b00 cmp r3, #0 + 8013866: d1f5 bne.n 8013854 <__sinit+0xc> + 8013868: f7ff ffc4 bl 80137f4 + 801386c: e7f2 b.n 8013854 <__sinit+0xc> + 801386e: bf00 nop + 8013870: 080137b5 .word 0x080137b5 + 8013874: 2000130c .word 0x2000130c + +08013878 <_vsniprintf_r>: + 8013878: b530 push {r4, r5, lr} + 801387a: 4614 mov r4, r2 + 801387c: 2c00 cmp r4, #0 + 801387e: 4605 mov r5, r0 + 8013880: 461a mov r2, r3 + 8013882: b09b sub sp, #108 @ 0x6c + 8013884: da05 bge.n 8013892 <_vsniprintf_r+0x1a> + 8013886: 238b movs r3, #139 @ 0x8b + 8013888: 6003 str r3, [r0, #0] + 801388a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 801388e: b01b add sp, #108 @ 0x6c + 8013890: bd30 pop {r4, r5, pc} + 8013892: f44f 7302 mov.w r3, #520 @ 0x208 + 8013896: f8ad 300c strh.w r3, [sp, #12] + 801389a: f04f 0300 mov.w r3, #0 + 801389e: 9319 str r3, [sp, #100] @ 0x64 + 80138a0: bf0c ite eq + 80138a2: 4623 moveq r3, r4 + 80138a4: f104 33ff addne.w r3, r4, #4294967295 @ 0xffffffff + 80138a8: 9302 str r3, [sp, #8] + 80138aa: 9305 str r3, [sp, #20] + 80138ac: f64f 73ff movw r3, #65535 @ 0xffff + 80138b0: 9100 str r1, [sp, #0] + 80138b2: 9104 str r1, [sp, #16] + 80138b4: f8ad 300e strh.w r3, [sp, #14] + 80138b8: 4669 mov r1, sp + 80138ba: 9b1e ldr r3, [sp, #120] @ 0x78 + 80138bc: f000 ff74 bl 80147a8 <_svfiprintf_r> + 80138c0: 1c43 adds r3, r0, #1 + 80138c2: bfbc itt lt + 80138c4: 238b movlt r3, #139 @ 0x8b + 80138c6: 602b strlt r3, [r5, #0] + 80138c8: 2c00 cmp r4, #0 + 80138ca: d0e0 beq.n 801388e <_vsniprintf_r+0x16> + 80138cc: 2200 movs r2, #0 + 80138ce: 9b00 ldr r3, [sp, #0] + 80138d0: 701a strb r2, [r3, #0] + 80138d2: e7dc b.n 801388e <_vsniprintf_r+0x16> + +080138d4 : + 80138d4: b507 push {r0, r1, r2, lr} + 80138d6: 9300 str r3, [sp, #0] + 80138d8: 4613 mov r3, r2 + 80138da: 460a mov r2, r1 + 80138dc: 4601 mov r1, r0 + 80138de: 4803 ldr r0, [pc, #12] @ (80138ec ) + 80138e0: 6800 ldr r0, [r0, #0] + 80138e2: f7ff ffc9 bl 8013878 <_vsniprintf_r> + 80138e6: b003 add sp, #12 + 80138e8: f85d fb04 ldr.w pc, [sp], #4 + 80138ec: 20000084 .word 0x20000084 + +080138f0 <_fwalk_sglue>: + 80138f0: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 80138f4: 4607 mov r7, r0 + 80138f6: 4688 mov r8, r1 + 80138f8: 4614 mov r4, r2 + 80138fa: 2600 movs r6, #0 + 80138fc: e9d4 9501 ldrd r9, r5, [r4, #4] + 8013900: f1b9 0901 subs.w r9, r9, #1 + 8013904: d505 bpl.n 8013912 <_fwalk_sglue+0x22> + 8013906: 6824 ldr r4, [r4, #0] + 8013908: 2c00 cmp r4, #0 + 801390a: d1f7 bne.n 80138fc <_fwalk_sglue+0xc> + 801390c: 4630 mov r0, r6 + 801390e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 8013912: 89ab ldrh r3, [r5, #12] + 8013914: 2b01 cmp r3, #1 + 8013916: d907 bls.n 8013928 <_fwalk_sglue+0x38> + 8013918: f9b5 300e ldrsh.w r3, [r5, #14] + 801391c: 3301 adds r3, #1 + 801391e: d003 beq.n 8013928 <_fwalk_sglue+0x38> + 8013920: 4629 mov r1, r5 + 8013922: 4638 mov r0, r7 + 8013924: 47c0 blx r8 + 8013926: 4306 orrs r6, r0 + 8013928: 3568 adds r5, #104 @ 0x68 + 801392a: e7e9 b.n 8013900 <_fwalk_sglue+0x10> + +0801392c : + 801392c: b40f push {r0, r1, r2, r3} + 801392e: b507 push {r0, r1, r2, lr} + 8013930: 4906 ldr r1, [pc, #24] @ (801394c ) + 8013932: ab04 add r3, sp, #16 + 8013934: 6808 ldr r0, [r1, #0] + 8013936: f853 2b04 ldr.w r2, [r3], #4 + 801393a: 6881 ldr r1, [r0, #8] + 801393c: 9301 str r3, [sp, #4] + 801393e: f001 f857 bl 80149f0 <_vfiprintf_r> + 8013942: b003 add sp, #12 + 8013944: f85d eb04 ldr.w lr, [sp], #4 + 8013948: b004 add sp, #16 + 801394a: 4770 bx lr + 801394c: 20000084 .word 0x20000084 + +08013950 : + 8013950: 4603 mov r3, r0 + 8013952: 4402 add r2, r0 + 8013954: 4293 cmp r3, r2 + 8013956: d100 bne.n 801395a + 8013958: 4770 bx lr + 801395a: f803 1b01 strb.w r1, [r3], #1 + 801395e: e7f9 b.n 8013954 + +08013960 <__errno>: + 8013960: 4b01 ldr r3, [pc, #4] @ (8013968 <__errno+0x8>) + 8013962: 6818 ldr r0, [r3, #0] + 8013964: 4770 bx lr + 8013966: bf00 nop + 8013968: 20000084 .word 0x20000084 + +0801396c <__libc_init_array>: + 801396c: b570 push {r4, r5, r6, lr} + 801396e: 2600 movs r6, #0 + 8013970: 4d0c ldr r5, [pc, #48] @ (80139a4 <__libc_init_array+0x38>) + 8013972: 4c0d ldr r4, [pc, #52] @ (80139a8 <__libc_init_array+0x3c>) + 8013974: 1b64 subs r4, r4, r5 + 8013976: 10a4 asrs r4, r4, #2 + 8013978: 42a6 cmp r6, r4 + 801397a: d109 bne.n 8013990 <__libc_init_array+0x24> + 801397c: f002 f904 bl 8015b88 <_init> + 8013980: 2600 movs r6, #0 + 8013982: 4d0a ldr r5, [pc, #40] @ (80139ac <__libc_init_array+0x40>) + 8013984: 4c0a ldr r4, [pc, #40] @ (80139b0 <__libc_init_array+0x44>) + 8013986: 1b64 subs r4, r4, r5 + 8013988: 10a4 asrs r4, r4, #2 + 801398a: 42a6 cmp r6, r4 + 801398c: d105 bne.n 801399a <__libc_init_array+0x2e> + 801398e: bd70 pop {r4, r5, r6, pc} + 8013990: f855 3b04 ldr.w r3, [r5], #4 + 8013994: 4798 blx r3 + 8013996: 3601 adds r6, #1 + 8013998: e7ee b.n 8013978 <__libc_init_array+0xc> + 801399a: f855 3b04 ldr.w r3, [r5], #4 + 801399e: 4798 blx r3 + 80139a0: 3601 adds r6, #1 + 80139a2: e7f2 b.n 801398a <__libc_init_array+0x1e> + 80139a4: 08016394 .word 0x08016394 + 80139a8: 08016394 .word 0x08016394 + 80139ac: 08016394 .word 0x08016394 + 80139b0: 08016398 .word 0x08016398 + +080139b4 <__retarget_lock_init_recursive>: + 80139b4: 4770 bx lr + +080139b6 <__retarget_lock_acquire_recursive>: + 80139b6: 4770 bx lr + +080139b8 <__retarget_lock_release_recursive>: + 80139b8: 4770 bx lr + ... + +080139bc <_localeconv_r>: + 80139bc: 4800 ldr r0, [pc, #0] @ (80139c0 <_localeconv_r+0x4>) + 80139be: 4770 bx lr + 80139c0: 200001c4 .word 0x200001c4 + +080139c4 : + 80139c4: 4603 mov r3, r0 + 80139c6: b510 push {r4, lr} + 80139c8: b2c9 uxtb r1, r1 + 80139ca: 4402 add r2, r0 + 80139cc: 4293 cmp r3, r2 + 80139ce: 4618 mov r0, r3 + 80139d0: d101 bne.n 80139d6 + 80139d2: 2000 movs r0, #0 + 80139d4: e003 b.n 80139de + 80139d6: 7804 ldrb r4, [r0, #0] + 80139d8: 3301 adds r3, #1 + 80139da: 428c cmp r4, r1 + 80139dc: d1f6 bne.n 80139cc + 80139de: bd10 pop {r4, pc} + +080139e0 : + 80139e0: 440a add r2, r1 + 80139e2: 4291 cmp r1, r2 + 80139e4: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff + 80139e8: d100 bne.n 80139ec + 80139ea: 4770 bx lr + 80139ec: b510 push {r4, lr} + 80139ee: f811 4b01 ldrb.w r4, [r1], #1 + 80139f2: 4291 cmp r1, r2 + 80139f4: f803 4f01 strb.w r4, [r3, #1]! + 80139f8: d1f9 bne.n 80139ee + 80139fa: bd10 pop {r4, pc} + +080139fc <__assert_func>: + 80139fc: b51f push {r0, r1, r2, r3, r4, lr} + 80139fe: 4614 mov r4, r2 + 8013a00: 461a mov r2, r3 + 8013a02: 4b09 ldr r3, [pc, #36] @ (8013a28 <__assert_func+0x2c>) + 8013a04: 4605 mov r5, r0 + 8013a06: 681b ldr r3, [r3, #0] + 8013a08: 68d8 ldr r0, [r3, #12] + 8013a0a: b14c cbz r4, 8013a20 <__assert_func+0x24> + 8013a0c: 4b07 ldr r3, [pc, #28] @ (8013a2c <__assert_func+0x30>) + 8013a0e: e9cd 3401 strd r3, r4, [sp, #4] + 8013a12: 9100 str r1, [sp, #0] + 8013a14: 462b mov r3, r5 + 8013a16: 4906 ldr r1, [pc, #24] @ (8013a30 <__assert_func+0x34>) + 8013a18: f001 fe1e bl 8015658 + 8013a1c: f001 ffe4 bl 80159e8 + 8013a20: 4b04 ldr r3, [pc, #16] @ (8013a34 <__assert_func+0x38>) + 8013a22: 461c mov r4, r3 + 8013a24: e7f3 b.n 8013a0e <__assert_func+0x12> + 8013a26: bf00 nop + 8013a28: 20000084 .word 0x20000084 + 8013a2c: 0801604c .word 0x0801604c + 8013a30: 08016059 .word 0x08016059 + 8013a34: 08016087 .word 0x08016087 + +08013a38 : + 8013a38: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8013a3c: 6903 ldr r3, [r0, #16] + 8013a3e: 690c ldr r4, [r1, #16] + 8013a40: 4607 mov r7, r0 + 8013a42: 42a3 cmp r3, r4 + 8013a44: db7e blt.n 8013b44 + 8013a46: 3c01 subs r4, #1 + 8013a48: 00a3 lsls r3, r4, #2 + 8013a4a: f100 0514 add.w r5, r0, #20 + 8013a4e: f101 0814 add.w r8, r1, #20 + 8013a52: 9300 str r3, [sp, #0] + 8013a54: eb05 0384 add.w r3, r5, r4, lsl #2 + 8013a58: 9301 str r3, [sp, #4] + 8013a5a: f858 3024 ldr.w r3, [r8, r4, lsl #2] + 8013a5e: f855 2024 ldr.w r2, [r5, r4, lsl #2] + 8013a62: 3301 adds r3, #1 + 8013a64: 429a cmp r2, r3 + 8013a66: fbb2 f6f3 udiv r6, r2, r3 + 8013a6a: eb08 0984 add.w r9, r8, r4, lsl #2 + 8013a6e: d32e bcc.n 8013ace + 8013a70: f04f 0a00 mov.w sl, #0 + 8013a74: 46c4 mov ip, r8 + 8013a76: 46ae mov lr, r5 + 8013a78: 46d3 mov fp, sl + 8013a7a: f85c 3b04 ldr.w r3, [ip], #4 + 8013a7e: b298 uxth r0, r3 + 8013a80: fb06 a000 mla r0, r6, r0, sl + 8013a84: 0c1b lsrs r3, r3, #16 + 8013a86: 0c02 lsrs r2, r0, #16 + 8013a88: fb06 2303 mla r3, r6, r3, r2 + 8013a8c: f8de 2000 ldr.w r2, [lr] + 8013a90: b280 uxth r0, r0 + 8013a92: b292 uxth r2, r2 + 8013a94: 1a12 subs r2, r2, r0 + 8013a96: 445a add r2, fp + 8013a98: f8de 0000 ldr.w r0, [lr] + 8013a9c: ea4f 4a13 mov.w sl, r3, lsr #16 + 8013aa0: b29b uxth r3, r3 + 8013aa2: ebc3 4322 rsb r3, r3, r2, asr #16 + 8013aa6: eb03 4310 add.w r3, r3, r0, lsr #16 + 8013aaa: b292 uxth r2, r2 + 8013aac: ea42 4203 orr.w r2, r2, r3, lsl #16 + 8013ab0: 45e1 cmp r9, ip + 8013ab2: ea4f 4b23 mov.w fp, r3, asr #16 + 8013ab6: f84e 2b04 str.w r2, [lr], #4 + 8013aba: d2de bcs.n 8013a7a + 8013abc: 9b00 ldr r3, [sp, #0] + 8013abe: 58eb ldr r3, [r5, r3] + 8013ac0: b92b cbnz r3, 8013ace + 8013ac2: 9b01 ldr r3, [sp, #4] + 8013ac4: 3b04 subs r3, #4 + 8013ac6: 429d cmp r5, r3 + 8013ac8: 461a mov r2, r3 + 8013aca: d32f bcc.n 8013b2c + 8013acc: 613c str r4, [r7, #16] + 8013ace: 4638 mov r0, r7 + 8013ad0: f001 fc76 bl 80153c0 <__mcmp> + 8013ad4: 2800 cmp r0, #0 + 8013ad6: db25 blt.n 8013b24 + 8013ad8: 4629 mov r1, r5 + 8013ada: 2000 movs r0, #0 + 8013adc: f858 2b04 ldr.w r2, [r8], #4 + 8013ae0: f8d1 c000 ldr.w ip, [r1] + 8013ae4: fa1f fe82 uxth.w lr, r2 + 8013ae8: fa1f f38c uxth.w r3, ip + 8013aec: eba3 030e sub.w r3, r3, lr + 8013af0: 4403 add r3, r0 + 8013af2: 0c12 lsrs r2, r2, #16 + 8013af4: ebc2 4223 rsb r2, r2, r3, asr #16 + 8013af8: eb02 421c add.w r2, r2, ip, lsr #16 + 8013afc: b29b uxth r3, r3 + 8013afe: ea43 4302 orr.w r3, r3, r2, lsl #16 + 8013b02: 45c1 cmp r9, r8 + 8013b04: ea4f 4022 mov.w r0, r2, asr #16 + 8013b08: f841 3b04 str.w r3, [r1], #4 + 8013b0c: d2e6 bcs.n 8013adc + 8013b0e: f855 2024 ldr.w r2, [r5, r4, lsl #2] + 8013b12: eb05 0384 add.w r3, r5, r4, lsl #2 + 8013b16: b922 cbnz r2, 8013b22 + 8013b18: 3b04 subs r3, #4 + 8013b1a: 429d cmp r5, r3 + 8013b1c: 461a mov r2, r3 + 8013b1e: d30b bcc.n 8013b38 + 8013b20: 613c str r4, [r7, #16] + 8013b22: 3601 adds r6, #1 + 8013b24: 4630 mov r0, r6 + 8013b26: b003 add sp, #12 + 8013b28: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8013b2c: 6812 ldr r2, [r2, #0] + 8013b2e: 3b04 subs r3, #4 + 8013b30: 2a00 cmp r2, #0 + 8013b32: d1cb bne.n 8013acc + 8013b34: 3c01 subs r4, #1 + 8013b36: e7c6 b.n 8013ac6 + 8013b38: 6812 ldr r2, [r2, #0] + 8013b3a: 3b04 subs r3, #4 + 8013b3c: 2a00 cmp r2, #0 + 8013b3e: d1ef bne.n 8013b20 + 8013b40: 3c01 subs r4, #1 + 8013b42: e7ea b.n 8013b1a + 8013b44: 2000 movs r0, #0 + 8013b46: e7ee b.n 8013b26 + +08013b48 <_dtoa_r>: + 8013b48: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 8013b4c: 4614 mov r4, r2 + 8013b4e: 461d mov r5, r3 + 8013b50: 69c7 ldr r7, [r0, #28] + 8013b52: b097 sub sp, #92 @ 0x5c + 8013b54: 4681 mov r9, r0 + 8013b56: e9cd 4506 strd r4, r5, [sp, #24] + 8013b5a: 9e23 ldr r6, [sp, #140] @ 0x8c + 8013b5c: b97f cbnz r7, 8013b7e <_dtoa_r+0x36> + 8013b5e: 2010 movs r0, #16 + 8013b60: f001 f85e bl 8014c20 + 8013b64: 4602 mov r2, r0 + 8013b66: f8c9 001c str.w r0, [r9, #28] + 8013b6a: b920 cbnz r0, 8013b76 <_dtoa_r+0x2e> + 8013b6c: 21ef movs r1, #239 @ 0xef + 8013b6e: 4bac ldr r3, [pc, #688] @ (8013e20 <_dtoa_r+0x2d8>) + 8013b70: 48ac ldr r0, [pc, #688] @ (8013e24 <_dtoa_r+0x2dc>) + 8013b72: f7ff ff43 bl 80139fc <__assert_func> + 8013b76: e9c0 7701 strd r7, r7, [r0, #4] + 8013b7a: 6007 str r7, [r0, #0] + 8013b7c: 60c7 str r7, [r0, #12] + 8013b7e: f8d9 301c ldr.w r3, [r9, #28] + 8013b82: 6819 ldr r1, [r3, #0] + 8013b84: b159 cbz r1, 8013b9e <_dtoa_r+0x56> + 8013b86: 685a ldr r2, [r3, #4] + 8013b88: 2301 movs r3, #1 + 8013b8a: 4093 lsls r3, r2 + 8013b8c: 604a str r2, [r1, #4] + 8013b8e: 608b str r3, [r1, #8] + 8013b90: 4648 mov r0, r9 + 8013b92: f001 f9e3 bl 8014f5c <_Bfree> + 8013b96: 2200 movs r2, #0 + 8013b98: f8d9 301c ldr.w r3, [r9, #28] + 8013b9c: 601a str r2, [r3, #0] + 8013b9e: 1e2b subs r3, r5, #0 + 8013ba0: bfaf iteee ge + 8013ba2: 2300 movge r3, #0 + 8013ba4: 2201 movlt r2, #1 + 8013ba6: f023 4300 biclt.w r3, r3, #2147483648 @ 0x80000000 + 8013baa: 9307 strlt r3, [sp, #28] + 8013bac: bfa8 it ge + 8013bae: 6033 strge r3, [r6, #0] + 8013bb0: f8dd 801c ldr.w r8, [sp, #28] + 8013bb4: 4b9c ldr r3, [pc, #624] @ (8013e28 <_dtoa_r+0x2e0>) + 8013bb6: bfb8 it lt + 8013bb8: 6032 strlt r2, [r6, #0] + 8013bba: ea33 0308 bics.w r3, r3, r8 + 8013bbe: d112 bne.n 8013be6 <_dtoa_r+0x9e> + 8013bc0: f242 730f movw r3, #9999 @ 0x270f + 8013bc4: 9a22 ldr r2, [sp, #136] @ 0x88 + 8013bc6: 6013 str r3, [r2, #0] + 8013bc8: f3c8 0313 ubfx r3, r8, #0, #20 + 8013bcc: 4323 orrs r3, r4 + 8013bce: f000 855e beq.w 801468e <_dtoa_r+0xb46> + 8013bd2: 9b24 ldr r3, [sp, #144] @ 0x90 + 8013bd4: f8df a254 ldr.w sl, [pc, #596] @ 8013e2c <_dtoa_r+0x2e4> + 8013bd8: 2b00 cmp r3, #0 + 8013bda: f000 8560 beq.w 801469e <_dtoa_r+0xb56> + 8013bde: f10a 0303 add.w r3, sl, #3 + 8013be2: f000 bd5a b.w 801469a <_dtoa_r+0xb52> + 8013be6: e9dd 2306 ldrd r2, r3, [sp, #24] + 8013bea: e9cd 230c strd r2, r3, [sp, #48] @ 0x30 + 8013bee: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 + 8013bf2: 2200 movs r2, #0 + 8013bf4: 2300 movs r3, #0 + 8013bf6: f7f4 ff43 bl 8008a80 <__aeabi_dcmpeq> + 8013bfa: 4607 mov r7, r0 + 8013bfc: b158 cbz r0, 8013c16 <_dtoa_r+0xce> + 8013bfe: 2301 movs r3, #1 + 8013c00: 9a22 ldr r2, [sp, #136] @ 0x88 + 8013c02: 6013 str r3, [r2, #0] + 8013c04: 9b24 ldr r3, [sp, #144] @ 0x90 + 8013c06: b113 cbz r3, 8013c0e <_dtoa_r+0xc6> + 8013c08: 4b89 ldr r3, [pc, #548] @ (8013e30 <_dtoa_r+0x2e8>) + 8013c0a: 9a24 ldr r2, [sp, #144] @ 0x90 + 8013c0c: 6013 str r3, [r2, #0] + 8013c0e: f8df a224 ldr.w sl, [pc, #548] @ 8013e34 <_dtoa_r+0x2ec> + 8013c12: f000 bd44 b.w 801469e <_dtoa_r+0xb56> + 8013c16: ab14 add r3, sp, #80 @ 0x50 + 8013c18: 9301 str r3, [sp, #4] + 8013c1a: ab15 add r3, sp, #84 @ 0x54 + 8013c1c: 9300 str r3, [sp, #0] + 8013c1e: 4648 mov r0, r9 + 8013c20: e9dd 230c ldrd r2, r3, [sp, #48] @ 0x30 + 8013c24: f001 fc7c bl 8015520 <__d2b> + 8013c28: f3c8 560a ubfx r6, r8, #20, #11 + 8013c2c: 9003 str r0, [sp, #12] + 8013c2e: 2e00 cmp r6, #0 + 8013c30: d078 beq.n 8013d24 <_dtoa_r+0x1dc> + 8013c32: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 + 8013c36: 9b0d ldr r3, [sp, #52] @ 0x34 + 8013c38: f2a6 36ff subw r6, r6, #1023 @ 0x3ff + 8013c3c: f3c3 0313 ubfx r3, r3, #0, #20 + 8013c40: f043 537f orr.w r3, r3, #1069547520 @ 0x3fc00000 + 8013c44: f443 1340 orr.w r3, r3, #3145728 @ 0x300000 + 8013c48: 9712 str r7, [sp, #72] @ 0x48 + 8013c4a: 4619 mov r1, r3 + 8013c4c: 2200 movs r2, #0 + 8013c4e: 4b7a ldr r3, [pc, #488] @ (8013e38 <_dtoa_r+0x2f0>) + 8013c50: f7f4 faf6 bl 8008240 <__aeabi_dsub> + 8013c54: a36c add r3, pc, #432 @ (adr r3, 8013e08 <_dtoa_r+0x2c0>) + 8013c56: e9d3 2300 ldrd r2, r3, [r3] + 8013c5a: f7f4 fca9 bl 80085b0 <__aeabi_dmul> + 8013c5e: a36c add r3, pc, #432 @ (adr r3, 8013e10 <_dtoa_r+0x2c8>) + 8013c60: e9d3 2300 ldrd r2, r3, [r3] + 8013c64: f7f4 faee bl 8008244 <__adddf3> + 8013c68: 4604 mov r4, r0 + 8013c6a: 4630 mov r0, r6 + 8013c6c: 460d mov r5, r1 + 8013c6e: f7f4 fc35 bl 80084dc <__aeabi_i2d> + 8013c72: a369 add r3, pc, #420 @ (adr r3, 8013e18 <_dtoa_r+0x2d0>) + 8013c74: e9d3 2300 ldrd r2, r3, [r3] + 8013c78: f7f4 fc9a bl 80085b0 <__aeabi_dmul> + 8013c7c: 4602 mov r2, r0 + 8013c7e: 460b mov r3, r1 + 8013c80: 4620 mov r0, r4 + 8013c82: 4629 mov r1, r5 + 8013c84: f7f4 fade bl 8008244 <__adddf3> + 8013c88: 4604 mov r4, r0 + 8013c8a: 460d mov r5, r1 + 8013c8c: f7f4 ff40 bl 8008b10 <__aeabi_d2iz> + 8013c90: 2200 movs r2, #0 + 8013c92: 4607 mov r7, r0 + 8013c94: 2300 movs r3, #0 + 8013c96: 4620 mov r0, r4 + 8013c98: 4629 mov r1, r5 + 8013c9a: f7f4 fefb bl 8008a94 <__aeabi_dcmplt> + 8013c9e: b140 cbz r0, 8013cb2 <_dtoa_r+0x16a> + 8013ca0: 4638 mov r0, r7 + 8013ca2: f7f4 fc1b bl 80084dc <__aeabi_i2d> + 8013ca6: 4622 mov r2, r4 + 8013ca8: 462b mov r3, r5 + 8013caa: f7f4 fee9 bl 8008a80 <__aeabi_dcmpeq> + 8013cae: b900 cbnz r0, 8013cb2 <_dtoa_r+0x16a> + 8013cb0: 3f01 subs r7, #1 + 8013cb2: 2f16 cmp r7, #22 + 8013cb4: d854 bhi.n 8013d60 <_dtoa_r+0x218> + 8013cb6: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 + 8013cba: 4b60 ldr r3, [pc, #384] @ (8013e3c <_dtoa_r+0x2f4>) + 8013cbc: eb03 03c7 add.w r3, r3, r7, lsl #3 + 8013cc0: e9d3 2300 ldrd r2, r3, [r3] + 8013cc4: f7f4 fee6 bl 8008a94 <__aeabi_dcmplt> + 8013cc8: 2800 cmp r0, #0 + 8013cca: d04b beq.n 8013d64 <_dtoa_r+0x21c> + 8013ccc: 2300 movs r3, #0 + 8013cce: 3f01 subs r7, #1 + 8013cd0: 930f str r3, [sp, #60] @ 0x3c + 8013cd2: 9b14 ldr r3, [sp, #80] @ 0x50 + 8013cd4: 1b9b subs r3, r3, r6 + 8013cd6: 1e5a subs r2, r3, #1 + 8013cd8: bf49 itett mi + 8013cda: f1c3 0301 rsbmi r3, r3, #1 + 8013cde: 2300 movpl r3, #0 + 8013ce0: 9304 strmi r3, [sp, #16] + 8013ce2: 2300 movmi r3, #0 + 8013ce4: 9209 str r2, [sp, #36] @ 0x24 + 8013ce6: bf54 ite pl + 8013ce8: 9304 strpl r3, [sp, #16] + 8013cea: 9309 strmi r3, [sp, #36] @ 0x24 + 8013cec: 2f00 cmp r7, #0 + 8013cee: db3b blt.n 8013d68 <_dtoa_r+0x220> + 8013cf0: 9b09 ldr r3, [sp, #36] @ 0x24 + 8013cf2: 970e str r7, [sp, #56] @ 0x38 + 8013cf4: 443b add r3, r7 + 8013cf6: 9309 str r3, [sp, #36] @ 0x24 + 8013cf8: 2300 movs r3, #0 + 8013cfa: 930a str r3, [sp, #40] @ 0x28 + 8013cfc: 9b20 ldr r3, [sp, #128] @ 0x80 + 8013cfe: 2b09 cmp r3, #9 + 8013d00: d865 bhi.n 8013dce <_dtoa_r+0x286> + 8013d02: 2b05 cmp r3, #5 + 8013d04: bfc4 itt gt + 8013d06: 3b04 subgt r3, #4 + 8013d08: 9320 strgt r3, [sp, #128] @ 0x80 + 8013d0a: 9b20 ldr r3, [sp, #128] @ 0x80 + 8013d0c: bfc8 it gt + 8013d0e: 2400 movgt r4, #0 + 8013d10: f1a3 0302 sub.w r3, r3, #2 + 8013d14: bfd8 it le + 8013d16: 2401 movle r4, #1 + 8013d18: 2b03 cmp r3, #3 + 8013d1a: d864 bhi.n 8013de6 <_dtoa_r+0x29e> + 8013d1c: e8df f003 tbb [pc, r3] + 8013d20: 2c385553 .word 0x2c385553 + 8013d24: e9dd 6314 ldrd r6, r3, [sp, #80] @ 0x50 + 8013d28: 441e add r6, r3 + 8013d2a: f206 4332 addw r3, r6, #1074 @ 0x432 + 8013d2e: 2b20 cmp r3, #32 + 8013d30: bfc1 itttt gt + 8013d32: f1c3 0340 rsbgt r3, r3, #64 @ 0x40 + 8013d36: fa08 f803 lslgt.w r8, r8, r3 + 8013d3a: f206 4312 addwgt r3, r6, #1042 @ 0x412 + 8013d3e: fa24 f303 lsrgt.w r3, r4, r3 + 8013d42: bfd6 itet le + 8013d44: f1c3 0320 rsble r3, r3, #32 + 8013d48: ea48 0003 orrgt.w r0, r8, r3 + 8013d4c: fa04 f003 lslle.w r0, r4, r3 + 8013d50: f7f4 fbb4 bl 80084bc <__aeabi_ui2d> + 8013d54: 2201 movs r2, #1 + 8013d56: f1a1 73f8 sub.w r3, r1, #32505856 @ 0x1f00000 + 8013d5a: 3e01 subs r6, #1 + 8013d5c: 9212 str r2, [sp, #72] @ 0x48 + 8013d5e: e774 b.n 8013c4a <_dtoa_r+0x102> + 8013d60: 2301 movs r3, #1 + 8013d62: e7b5 b.n 8013cd0 <_dtoa_r+0x188> + 8013d64: 900f str r0, [sp, #60] @ 0x3c + 8013d66: e7b4 b.n 8013cd2 <_dtoa_r+0x18a> + 8013d68: 9b04 ldr r3, [sp, #16] + 8013d6a: 1bdb subs r3, r3, r7 + 8013d6c: 9304 str r3, [sp, #16] + 8013d6e: 427b negs r3, r7 + 8013d70: 930a str r3, [sp, #40] @ 0x28 + 8013d72: 2300 movs r3, #0 + 8013d74: 930e str r3, [sp, #56] @ 0x38 + 8013d76: e7c1 b.n 8013cfc <_dtoa_r+0x1b4> + 8013d78: 2301 movs r3, #1 + 8013d7a: 930b str r3, [sp, #44] @ 0x2c + 8013d7c: 9b21 ldr r3, [sp, #132] @ 0x84 + 8013d7e: eb07 0b03 add.w fp, r7, r3 + 8013d82: f10b 0301 add.w r3, fp, #1 + 8013d86: 2b01 cmp r3, #1 + 8013d88: 9308 str r3, [sp, #32] + 8013d8a: bfb8 it lt + 8013d8c: 2301 movlt r3, #1 + 8013d8e: e006 b.n 8013d9e <_dtoa_r+0x256> + 8013d90: 2301 movs r3, #1 + 8013d92: 930b str r3, [sp, #44] @ 0x2c + 8013d94: 9b21 ldr r3, [sp, #132] @ 0x84 + 8013d96: 2b00 cmp r3, #0 + 8013d98: dd28 ble.n 8013dec <_dtoa_r+0x2a4> + 8013d9a: 469b mov fp, r3 + 8013d9c: 9308 str r3, [sp, #32] + 8013d9e: 2100 movs r1, #0 + 8013da0: 2204 movs r2, #4 + 8013da2: f8d9 001c ldr.w r0, [r9, #28] + 8013da6: f102 0514 add.w r5, r2, #20 + 8013daa: 429d cmp r5, r3 + 8013dac: d926 bls.n 8013dfc <_dtoa_r+0x2b4> + 8013dae: 6041 str r1, [r0, #4] + 8013db0: 4648 mov r0, r9 + 8013db2: f001 f893 bl 8014edc <_Balloc> + 8013db6: 4682 mov sl, r0 + 8013db8: 2800 cmp r0, #0 + 8013dba: d143 bne.n 8013e44 <_dtoa_r+0x2fc> + 8013dbc: 4602 mov r2, r0 + 8013dbe: f240 11af movw r1, #431 @ 0x1af + 8013dc2: 4b1f ldr r3, [pc, #124] @ (8013e40 <_dtoa_r+0x2f8>) + 8013dc4: e6d4 b.n 8013b70 <_dtoa_r+0x28> + 8013dc6: 2300 movs r3, #0 + 8013dc8: e7e3 b.n 8013d92 <_dtoa_r+0x24a> + 8013dca: 2300 movs r3, #0 + 8013dcc: e7d5 b.n 8013d7a <_dtoa_r+0x232> + 8013dce: 2401 movs r4, #1 + 8013dd0: 2300 movs r3, #0 + 8013dd2: 940b str r4, [sp, #44] @ 0x2c + 8013dd4: 9320 str r3, [sp, #128] @ 0x80 + 8013dd6: f04f 3bff mov.w fp, #4294967295 @ 0xffffffff + 8013dda: 2200 movs r2, #0 + 8013ddc: 2312 movs r3, #18 + 8013dde: f8cd b020 str.w fp, [sp, #32] + 8013de2: 9221 str r2, [sp, #132] @ 0x84 + 8013de4: e7db b.n 8013d9e <_dtoa_r+0x256> + 8013de6: 2301 movs r3, #1 + 8013de8: 930b str r3, [sp, #44] @ 0x2c + 8013dea: e7f4 b.n 8013dd6 <_dtoa_r+0x28e> + 8013dec: f04f 0b01 mov.w fp, #1 + 8013df0: 465b mov r3, fp + 8013df2: f8cd b020 str.w fp, [sp, #32] + 8013df6: f8cd b084 str.w fp, [sp, #132] @ 0x84 + 8013dfa: e7d0 b.n 8013d9e <_dtoa_r+0x256> + 8013dfc: 3101 adds r1, #1 + 8013dfe: 0052 lsls r2, r2, #1 + 8013e00: e7d1 b.n 8013da6 <_dtoa_r+0x25e> + 8013e02: bf00 nop + 8013e04: f3af 8000 nop.w + 8013e08: 636f4361 .word 0x636f4361 + 8013e0c: 3fd287a7 .word 0x3fd287a7 + 8013e10: 8b60c8b3 .word 0x8b60c8b3 + 8013e14: 3fc68a28 .word 0x3fc68a28 + 8013e18: 509f79fb .word 0x509f79fb + 8013e1c: 3fd34413 .word 0x3fd34413 + 8013e20: 08016095 .word 0x08016095 + 8013e24: 080160ac .word 0x080160ac + 8013e28: 7ff00000 .word 0x7ff00000 + 8013e2c: 08016091 .word 0x08016091 + 8013e30: 08016029 .word 0x08016029 + 8013e34: 08016028 .word 0x08016028 + 8013e38: 3ff80000 .word 0x3ff80000 + 8013e3c: 080161c0 .word 0x080161c0 + 8013e40: 08016104 .word 0x08016104 + 8013e44: f8d9 301c ldr.w r3, [r9, #28] + 8013e48: 6018 str r0, [r3, #0] + 8013e4a: 9b08 ldr r3, [sp, #32] + 8013e4c: 2b0e cmp r3, #14 + 8013e4e: f200 80a1 bhi.w 8013f94 <_dtoa_r+0x44c> + 8013e52: 2c00 cmp r4, #0 + 8013e54: f000 809e beq.w 8013f94 <_dtoa_r+0x44c> + 8013e58: 2f00 cmp r7, #0 + 8013e5a: dd33 ble.n 8013ec4 <_dtoa_r+0x37c> + 8013e5c: 4b9c ldr r3, [pc, #624] @ (80140d0 <_dtoa_r+0x588>) + 8013e5e: f007 020f and.w r2, r7, #15 + 8013e62: eb03 03c2 add.w r3, r3, r2, lsl #3 + 8013e66: 05f8 lsls r0, r7, #23 + 8013e68: e9d3 3400 ldrd r3, r4, [r3] + 8013e6c: e9cd 3410 strd r3, r4, [sp, #64] @ 0x40 + 8013e70: ea4f 1427 mov.w r4, r7, asr #4 + 8013e74: d516 bpl.n 8013ea4 <_dtoa_r+0x35c> + 8013e76: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 + 8013e7a: 4b96 ldr r3, [pc, #600] @ (80140d4 <_dtoa_r+0x58c>) + 8013e7c: 2603 movs r6, #3 + 8013e7e: e9d3 2308 ldrd r2, r3, [r3, #32] + 8013e82: f7f4 fcbf bl 8008804 <__aeabi_ddiv> + 8013e86: e9cd 0106 strd r0, r1, [sp, #24] + 8013e8a: f004 040f and.w r4, r4, #15 + 8013e8e: 4d91 ldr r5, [pc, #580] @ (80140d4 <_dtoa_r+0x58c>) + 8013e90: b954 cbnz r4, 8013ea8 <_dtoa_r+0x360> + 8013e92: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 + 8013e96: e9dd 0106 ldrd r0, r1, [sp, #24] + 8013e9a: f7f4 fcb3 bl 8008804 <__aeabi_ddiv> + 8013e9e: e9cd 0106 strd r0, r1, [sp, #24] + 8013ea2: e028 b.n 8013ef6 <_dtoa_r+0x3ae> + 8013ea4: 2602 movs r6, #2 + 8013ea6: e7f2 b.n 8013e8e <_dtoa_r+0x346> + 8013ea8: 07e1 lsls r1, r4, #31 + 8013eaa: d508 bpl.n 8013ebe <_dtoa_r+0x376> + 8013eac: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 + 8013eb0: e9d5 2300 ldrd r2, r3, [r5] + 8013eb4: f7f4 fb7c bl 80085b0 <__aeabi_dmul> + 8013eb8: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 + 8013ebc: 3601 adds r6, #1 + 8013ebe: 1064 asrs r4, r4, #1 + 8013ec0: 3508 adds r5, #8 + 8013ec2: e7e5 b.n 8013e90 <_dtoa_r+0x348> + 8013ec4: f000 80af beq.w 8014026 <_dtoa_r+0x4de> + 8013ec8: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 + 8013ecc: 427c negs r4, r7 + 8013ece: 4b80 ldr r3, [pc, #512] @ (80140d0 <_dtoa_r+0x588>) + 8013ed0: f004 020f and.w r2, r4, #15 + 8013ed4: eb03 03c2 add.w r3, r3, r2, lsl #3 + 8013ed8: e9d3 2300 ldrd r2, r3, [r3] + 8013edc: f7f4 fb68 bl 80085b0 <__aeabi_dmul> + 8013ee0: 2602 movs r6, #2 + 8013ee2: 2300 movs r3, #0 + 8013ee4: e9cd 0106 strd r0, r1, [sp, #24] + 8013ee8: 4d7a ldr r5, [pc, #488] @ (80140d4 <_dtoa_r+0x58c>) + 8013eea: 1124 asrs r4, r4, #4 + 8013eec: 2c00 cmp r4, #0 + 8013eee: f040 808f bne.w 8014010 <_dtoa_r+0x4c8> + 8013ef2: 2b00 cmp r3, #0 + 8013ef4: d1d3 bne.n 8013e9e <_dtoa_r+0x356> + 8013ef6: e9dd 4506 ldrd r4, r5, [sp, #24] + 8013efa: 9b0f ldr r3, [sp, #60] @ 0x3c + 8013efc: 2b00 cmp r3, #0 + 8013efe: f000 8094 beq.w 801402a <_dtoa_r+0x4e2> + 8013f02: 2200 movs r2, #0 + 8013f04: 4620 mov r0, r4 + 8013f06: 4629 mov r1, r5 + 8013f08: 4b73 ldr r3, [pc, #460] @ (80140d8 <_dtoa_r+0x590>) + 8013f0a: f7f4 fdc3 bl 8008a94 <__aeabi_dcmplt> + 8013f0e: 2800 cmp r0, #0 + 8013f10: f000 808b beq.w 801402a <_dtoa_r+0x4e2> + 8013f14: 9b08 ldr r3, [sp, #32] + 8013f16: 2b00 cmp r3, #0 + 8013f18: f000 8087 beq.w 801402a <_dtoa_r+0x4e2> + 8013f1c: f1bb 0f00 cmp.w fp, #0 + 8013f20: dd34 ble.n 8013f8c <_dtoa_r+0x444> + 8013f22: 4620 mov r0, r4 + 8013f24: 2200 movs r2, #0 + 8013f26: 4629 mov r1, r5 + 8013f28: 4b6c ldr r3, [pc, #432] @ (80140dc <_dtoa_r+0x594>) + 8013f2a: f7f4 fb41 bl 80085b0 <__aeabi_dmul> + 8013f2e: 465c mov r4, fp + 8013f30: e9cd 0106 strd r0, r1, [sp, #24] + 8013f34: f107 38ff add.w r8, r7, #4294967295 @ 0xffffffff + 8013f38: 3601 adds r6, #1 + 8013f3a: 4630 mov r0, r6 + 8013f3c: f7f4 face bl 80084dc <__aeabi_i2d> + 8013f40: e9dd 2306 ldrd r2, r3, [sp, #24] + 8013f44: f7f4 fb34 bl 80085b0 <__aeabi_dmul> + 8013f48: 2200 movs r2, #0 + 8013f4a: 4b65 ldr r3, [pc, #404] @ (80140e0 <_dtoa_r+0x598>) + 8013f4c: f7f4 f97a bl 8008244 <__adddf3> + 8013f50: 4605 mov r5, r0 + 8013f52: f1a1 7650 sub.w r6, r1, #54525952 @ 0x3400000 + 8013f56: 2c00 cmp r4, #0 + 8013f58: d16a bne.n 8014030 <_dtoa_r+0x4e8> + 8013f5a: e9dd 0106 ldrd r0, r1, [sp, #24] + 8013f5e: 2200 movs r2, #0 + 8013f60: 4b60 ldr r3, [pc, #384] @ (80140e4 <_dtoa_r+0x59c>) + 8013f62: f7f4 f96d bl 8008240 <__aeabi_dsub> + 8013f66: 4602 mov r2, r0 + 8013f68: 460b mov r3, r1 + 8013f6a: e9cd 2306 strd r2, r3, [sp, #24] + 8013f6e: 462a mov r2, r5 + 8013f70: 4633 mov r3, r6 + 8013f72: f7f4 fdad bl 8008ad0 <__aeabi_dcmpgt> + 8013f76: 2800 cmp r0, #0 + 8013f78: f040 8298 bne.w 80144ac <_dtoa_r+0x964> + 8013f7c: e9dd 0106 ldrd r0, r1, [sp, #24] + 8013f80: 462a mov r2, r5 + 8013f82: f106 4300 add.w r3, r6, #2147483648 @ 0x80000000 + 8013f86: f7f4 fd85 bl 8008a94 <__aeabi_dcmplt> + 8013f8a: bb38 cbnz r0, 8013fdc <_dtoa_r+0x494> + 8013f8c: e9dd 340c ldrd r3, r4, [sp, #48] @ 0x30 + 8013f90: e9cd 3406 strd r3, r4, [sp, #24] + 8013f94: 9b15 ldr r3, [sp, #84] @ 0x54 + 8013f96: 2b00 cmp r3, #0 + 8013f98: f2c0 8157 blt.w 801424a <_dtoa_r+0x702> + 8013f9c: 2f0e cmp r7, #14 + 8013f9e: f300 8154 bgt.w 801424a <_dtoa_r+0x702> + 8013fa2: 4b4b ldr r3, [pc, #300] @ (80140d0 <_dtoa_r+0x588>) + 8013fa4: eb03 03c7 add.w r3, r3, r7, lsl #3 + 8013fa8: e9d3 3400 ldrd r3, r4, [r3] + 8013fac: e9cd 3404 strd r3, r4, [sp, #16] + 8013fb0: 9b21 ldr r3, [sp, #132] @ 0x84 + 8013fb2: 2b00 cmp r3, #0 + 8013fb4: f280 80e5 bge.w 8014182 <_dtoa_r+0x63a> + 8013fb8: 9b08 ldr r3, [sp, #32] + 8013fba: 2b00 cmp r3, #0 + 8013fbc: f300 80e1 bgt.w 8014182 <_dtoa_r+0x63a> + 8013fc0: d10c bne.n 8013fdc <_dtoa_r+0x494> + 8013fc2: e9dd 0104 ldrd r0, r1, [sp, #16] + 8013fc6: 2200 movs r2, #0 + 8013fc8: 4b46 ldr r3, [pc, #280] @ (80140e4 <_dtoa_r+0x59c>) + 8013fca: f7f4 faf1 bl 80085b0 <__aeabi_dmul> + 8013fce: e9dd 2306 ldrd r2, r3, [sp, #24] + 8013fd2: f7f4 fd73 bl 8008abc <__aeabi_dcmpge> + 8013fd6: 2800 cmp r0, #0 + 8013fd8: f000 8266 beq.w 80144a8 <_dtoa_r+0x960> + 8013fdc: 2400 movs r4, #0 + 8013fde: 4625 mov r5, r4 + 8013fe0: 9b21 ldr r3, [sp, #132] @ 0x84 + 8013fe2: 4656 mov r6, sl + 8013fe4: ea6f 0803 mvn.w r8, r3 + 8013fe8: 2700 movs r7, #0 + 8013fea: 4621 mov r1, r4 + 8013fec: 4648 mov r0, r9 + 8013fee: f000 ffb5 bl 8014f5c <_Bfree> + 8013ff2: 2d00 cmp r5, #0 + 8013ff4: f000 80bd beq.w 8014172 <_dtoa_r+0x62a> + 8013ff8: b12f cbz r7, 8014006 <_dtoa_r+0x4be> + 8013ffa: 42af cmp r7, r5 + 8013ffc: d003 beq.n 8014006 <_dtoa_r+0x4be> + 8013ffe: 4639 mov r1, r7 + 8014000: 4648 mov r0, r9 + 8014002: f000 ffab bl 8014f5c <_Bfree> + 8014006: 4629 mov r1, r5 + 8014008: 4648 mov r0, r9 + 801400a: f000 ffa7 bl 8014f5c <_Bfree> + 801400e: e0b0 b.n 8014172 <_dtoa_r+0x62a> + 8014010: 07e2 lsls r2, r4, #31 + 8014012: d505 bpl.n 8014020 <_dtoa_r+0x4d8> + 8014014: e9d5 2300 ldrd r2, r3, [r5] + 8014018: f7f4 faca bl 80085b0 <__aeabi_dmul> + 801401c: 2301 movs r3, #1 + 801401e: 3601 adds r6, #1 + 8014020: 1064 asrs r4, r4, #1 + 8014022: 3508 adds r5, #8 + 8014024: e762 b.n 8013eec <_dtoa_r+0x3a4> + 8014026: 2602 movs r6, #2 + 8014028: e765 b.n 8013ef6 <_dtoa_r+0x3ae> + 801402a: 46b8 mov r8, r7 + 801402c: 9c08 ldr r4, [sp, #32] + 801402e: e784 b.n 8013f3a <_dtoa_r+0x3f2> + 8014030: 4b27 ldr r3, [pc, #156] @ (80140d0 <_dtoa_r+0x588>) + 8014032: 990b ldr r1, [sp, #44] @ 0x2c + 8014034: eb03 03c4 add.w r3, r3, r4, lsl #3 + 8014038: e953 2302 ldrd r2, r3, [r3, #-8] + 801403c: 4454 add r4, sl + 801403e: 2900 cmp r1, #0 + 8014040: d054 beq.n 80140ec <_dtoa_r+0x5a4> + 8014042: 2000 movs r0, #0 + 8014044: 4928 ldr r1, [pc, #160] @ (80140e8 <_dtoa_r+0x5a0>) + 8014046: f7f4 fbdd bl 8008804 <__aeabi_ddiv> + 801404a: 4633 mov r3, r6 + 801404c: 462a mov r2, r5 + 801404e: f7f4 f8f7 bl 8008240 <__aeabi_dsub> + 8014052: 4656 mov r6, sl + 8014054: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 + 8014058: e9dd 0106 ldrd r0, r1, [sp, #24] + 801405c: f7f4 fd58 bl 8008b10 <__aeabi_d2iz> + 8014060: 4605 mov r5, r0 + 8014062: f7f4 fa3b bl 80084dc <__aeabi_i2d> + 8014066: 4602 mov r2, r0 + 8014068: 460b mov r3, r1 + 801406a: e9dd 0106 ldrd r0, r1, [sp, #24] + 801406e: f7f4 f8e7 bl 8008240 <__aeabi_dsub> + 8014072: 4602 mov r2, r0 + 8014074: 460b mov r3, r1 + 8014076: 3530 adds r5, #48 @ 0x30 + 8014078: e9cd 2306 strd r2, r3, [sp, #24] + 801407c: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 + 8014080: f806 5b01 strb.w r5, [r6], #1 + 8014084: f7f4 fd06 bl 8008a94 <__aeabi_dcmplt> + 8014088: 2800 cmp r0, #0 + 801408a: d172 bne.n 8014172 <_dtoa_r+0x62a> + 801408c: e9dd 2306 ldrd r2, r3, [sp, #24] + 8014090: 2000 movs r0, #0 + 8014092: 4911 ldr r1, [pc, #68] @ (80140d8 <_dtoa_r+0x590>) + 8014094: f7f4 f8d4 bl 8008240 <__aeabi_dsub> + 8014098: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 + 801409c: f7f4 fcfa bl 8008a94 <__aeabi_dcmplt> + 80140a0: 2800 cmp r0, #0 + 80140a2: f040 80b4 bne.w 801420e <_dtoa_r+0x6c6> + 80140a6: 42a6 cmp r6, r4 + 80140a8: f43f af70 beq.w 8013f8c <_dtoa_r+0x444> + 80140ac: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 + 80140b0: 2200 movs r2, #0 + 80140b2: 4b0a ldr r3, [pc, #40] @ (80140dc <_dtoa_r+0x594>) + 80140b4: f7f4 fa7c bl 80085b0 <__aeabi_dmul> + 80140b8: 2200 movs r2, #0 + 80140ba: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 + 80140be: e9dd 0106 ldrd r0, r1, [sp, #24] + 80140c2: 4b06 ldr r3, [pc, #24] @ (80140dc <_dtoa_r+0x594>) + 80140c4: f7f4 fa74 bl 80085b0 <__aeabi_dmul> + 80140c8: e9cd 0106 strd r0, r1, [sp, #24] + 80140cc: e7c4 b.n 8014058 <_dtoa_r+0x510> + 80140ce: bf00 nop + 80140d0: 080161c0 .word 0x080161c0 + 80140d4: 08016198 .word 0x08016198 + 80140d8: 3ff00000 .word 0x3ff00000 + 80140dc: 40240000 .word 0x40240000 + 80140e0: 401c0000 .word 0x401c0000 + 80140e4: 40140000 .word 0x40140000 + 80140e8: 3fe00000 .word 0x3fe00000 + 80140ec: 4631 mov r1, r6 + 80140ee: 4628 mov r0, r5 + 80140f0: f7f4 fa5e bl 80085b0 <__aeabi_dmul> + 80140f4: 4656 mov r6, sl + 80140f6: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 + 80140fa: 9413 str r4, [sp, #76] @ 0x4c + 80140fc: e9dd 0106 ldrd r0, r1, [sp, #24] + 8014100: f7f4 fd06 bl 8008b10 <__aeabi_d2iz> + 8014104: 4605 mov r5, r0 + 8014106: f7f4 f9e9 bl 80084dc <__aeabi_i2d> + 801410a: 4602 mov r2, r0 + 801410c: 460b mov r3, r1 + 801410e: e9dd 0106 ldrd r0, r1, [sp, #24] + 8014112: f7f4 f895 bl 8008240 <__aeabi_dsub> + 8014116: 4602 mov r2, r0 + 8014118: 460b mov r3, r1 + 801411a: 3530 adds r5, #48 @ 0x30 + 801411c: f806 5b01 strb.w r5, [r6], #1 + 8014120: 42a6 cmp r6, r4 + 8014122: e9cd 2306 strd r2, r3, [sp, #24] + 8014126: f04f 0200 mov.w r2, #0 + 801412a: d124 bne.n 8014176 <_dtoa_r+0x62e> + 801412c: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 + 8014130: 4bae ldr r3, [pc, #696] @ (80143ec <_dtoa_r+0x8a4>) + 8014132: f7f4 f887 bl 8008244 <__adddf3> + 8014136: 4602 mov r2, r0 + 8014138: 460b mov r3, r1 + 801413a: e9dd 0106 ldrd r0, r1, [sp, #24] + 801413e: f7f4 fcc7 bl 8008ad0 <__aeabi_dcmpgt> + 8014142: 2800 cmp r0, #0 + 8014144: d163 bne.n 801420e <_dtoa_r+0x6c6> + 8014146: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 + 801414a: 2000 movs r0, #0 + 801414c: 49a7 ldr r1, [pc, #668] @ (80143ec <_dtoa_r+0x8a4>) + 801414e: f7f4 f877 bl 8008240 <__aeabi_dsub> + 8014152: 4602 mov r2, r0 + 8014154: 460b mov r3, r1 + 8014156: e9dd 0106 ldrd r0, r1, [sp, #24] + 801415a: f7f4 fc9b bl 8008a94 <__aeabi_dcmplt> + 801415e: 2800 cmp r0, #0 + 8014160: f43f af14 beq.w 8013f8c <_dtoa_r+0x444> + 8014164: 9e13 ldr r6, [sp, #76] @ 0x4c + 8014166: 1e73 subs r3, r6, #1 + 8014168: 9313 str r3, [sp, #76] @ 0x4c + 801416a: f816 3c01 ldrb.w r3, [r6, #-1] + 801416e: 2b30 cmp r3, #48 @ 0x30 + 8014170: d0f8 beq.n 8014164 <_dtoa_r+0x61c> + 8014172: 4647 mov r7, r8 + 8014174: e03b b.n 80141ee <_dtoa_r+0x6a6> + 8014176: 4b9e ldr r3, [pc, #632] @ (80143f0 <_dtoa_r+0x8a8>) + 8014178: f7f4 fa1a bl 80085b0 <__aeabi_dmul> + 801417c: e9cd 0106 strd r0, r1, [sp, #24] + 8014180: e7bc b.n 80140fc <_dtoa_r+0x5b4> + 8014182: 4656 mov r6, sl + 8014184: e9dd 4506 ldrd r4, r5, [sp, #24] + 8014188: e9dd 2304 ldrd r2, r3, [sp, #16] + 801418c: 4620 mov r0, r4 + 801418e: 4629 mov r1, r5 + 8014190: f7f4 fb38 bl 8008804 <__aeabi_ddiv> + 8014194: f7f4 fcbc bl 8008b10 <__aeabi_d2iz> + 8014198: 4680 mov r8, r0 + 801419a: f7f4 f99f bl 80084dc <__aeabi_i2d> + 801419e: e9dd 2304 ldrd r2, r3, [sp, #16] + 80141a2: f7f4 fa05 bl 80085b0 <__aeabi_dmul> + 80141a6: 4602 mov r2, r0 + 80141a8: 460b mov r3, r1 + 80141aa: 4620 mov r0, r4 + 80141ac: 4629 mov r1, r5 + 80141ae: f7f4 f847 bl 8008240 <__aeabi_dsub> + 80141b2: f108 0430 add.w r4, r8, #48 @ 0x30 + 80141b6: 9d08 ldr r5, [sp, #32] + 80141b8: f806 4b01 strb.w r4, [r6], #1 + 80141bc: eba6 040a sub.w r4, r6, sl + 80141c0: 42a5 cmp r5, r4 + 80141c2: 4602 mov r2, r0 + 80141c4: 460b mov r3, r1 + 80141c6: d133 bne.n 8014230 <_dtoa_r+0x6e8> + 80141c8: f7f4 f83c bl 8008244 <__adddf3> + 80141cc: e9dd 2304 ldrd r2, r3, [sp, #16] + 80141d0: 4604 mov r4, r0 + 80141d2: 460d mov r5, r1 + 80141d4: f7f4 fc7c bl 8008ad0 <__aeabi_dcmpgt> + 80141d8: b9c0 cbnz r0, 801420c <_dtoa_r+0x6c4> + 80141da: e9dd 2304 ldrd r2, r3, [sp, #16] + 80141de: 4620 mov r0, r4 + 80141e0: 4629 mov r1, r5 + 80141e2: f7f4 fc4d bl 8008a80 <__aeabi_dcmpeq> + 80141e6: b110 cbz r0, 80141ee <_dtoa_r+0x6a6> + 80141e8: f018 0f01 tst.w r8, #1 + 80141ec: d10e bne.n 801420c <_dtoa_r+0x6c4> + 80141ee: 4648 mov r0, r9 + 80141f0: 9903 ldr r1, [sp, #12] + 80141f2: f000 feb3 bl 8014f5c <_Bfree> + 80141f6: 2300 movs r3, #0 + 80141f8: 7033 strb r3, [r6, #0] + 80141fa: 9b22 ldr r3, [sp, #136] @ 0x88 + 80141fc: 3701 adds r7, #1 + 80141fe: 601f str r7, [r3, #0] + 8014200: 9b24 ldr r3, [sp, #144] @ 0x90 + 8014202: 2b00 cmp r3, #0 + 8014204: f000 824b beq.w 801469e <_dtoa_r+0xb56> + 8014208: 601e str r6, [r3, #0] + 801420a: e248 b.n 801469e <_dtoa_r+0xb56> + 801420c: 46b8 mov r8, r7 + 801420e: 4633 mov r3, r6 + 8014210: 461e mov r6, r3 + 8014212: f813 2d01 ldrb.w r2, [r3, #-1]! + 8014216: 2a39 cmp r2, #57 @ 0x39 + 8014218: d106 bne.n 8014228 <_dtoa_r+0x6e0> + 801421a: 459a cmp sl, r3 + 801421c: d1f8 bne.n 8014210 <_dtoa_r+0x6c8> + 801421e: 2230 movs r2, #48 @ 0x30 + 8014220: f108 0801 add.w r8, r8, #1 + 8014224: f88a 2000 strb.w r2, [sl] + 8014228: 781a ldrb r2, [r3, #0] + 801422a: 3201 adds r2, #1 + 801422c: 701a strb r2, [r3, #0] + 801422e: e7a0 b.n 8014172 <_dtoa_r+0x62a> + 8014230: 2200 movs r2, #0 + 8014232: 4b6f ldr r3, [pc, #444] @ (80143f0 <_dtoa_r+0x8a8>) + 8014234: f7f4 f9bc bl 80085b0 <__aeabi_dmul> + 8014238: 2200 movs r2, #0 + 801423a: 2300 movs r3, #0 + 801423c: 4604 mov r4, r0 + 801423e: 460d mov r5, r1 + 8014240: f7f4 fc1e bl 8008a80 <__aeabi_dcmpeq> + 8014244: 2800 cmp r0, #0 + 8014246: d09f beq.n 8014188 <_dtoa_r+0x640> + 8014248: e7d1 b.n 80141ee <_dtoa_r+0x6a6> + 801424a: 9a0b ldr r2, [sp, #44] @ 0x2c + 801424c: 2a00 cmp r2, #0 + 801424e: f000 80ea beq.w 8014426 <_dtoa_r+0x8de> + 8014252: 9a20 ldr r2, [sp, #128] @ 0x80 + 8014254: 2a01 cmp r2, #1 + 8014256: f300 80cd bgt.w 80143f4 <_dtoa_r+0x8ac> + 801425a: 9a12 ldr r2, [sp, #72] @ 0x48 + 801425c: 2a00 cmp r2, #0 + 801425e: f000 80c1 beq.w 80143e4 <_dtoa_r+0x89c> + 8014262: f203 4333 addw r3, r3, #1075 @ 0x433 + 8014266: 9c0a ldr r4, [sp, #40] @ 0x28 + 8014268: 9e04 ldr r6, [sp, #16] + 801426a: 9a04 ldr r2, [sp, #16] + 801426c: 2101 movs r1, #1 + 801426e: 441a add r2, r3 + 8014270: 9204 str r2, [sp, #16] + 8014272: 9a09 ldr r2, [sp, #36] @ 0x24 + 8014274: 4648 mov r0, r9 + 8014276: 441a add r2, r3 + 8014278: 9209 str r2, [sp, #36] @ 0x24 + 801427a: f000 ff23 bl 80150c4 <__i2b> + 801427e: 4605 mov r5, r0 + 8014280: b166 cbz r6, 801429c <_dtoa_r+0x754> + 8014282: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014284: 2b00 cmp r3, #0 + 8014286: dd09 ble.n 801429c <_dtoa_r+0x754> + 8014288: 42b3 cmp r3, r6 + 801428a: bfa8 it ge + 801428c: 4633 movge r3, r6 + 801428e: 9a04 ldr r2, [sp, #16] + 8014290: 1af6 subs r6, r6, r3 + 8014292: 1ad2 subs r2, r2, r3 + 8014294: 9204 str r2, [sp, #16] + 8014296: 9a09 ldr r2, [sp, #36] @ 0x24 + 8014298: 1ad3 subs r3, r2, r3 + 801429a: 9309 str r3, [sp, #36] @ 0x24 + 801429c: 9b0a ldr r3, [sp, #40] @ 0x28 + 801429e: b30b cbz r3, 80142e4 <_dtoa_r+0x79c> + 80142a0: 9b0b ldr r3, [sp, #44] @ 0x2c + 80142a2: 2b00 cmp r3, #0 + 80142a4: f000 80c6 beq.w 8014434 <_dtoa_r+0x8ec> + 80142a8: 2c00 cmp r4, #0 + 80142aa: f000 80c0 beq.w 801442e <_dtoa_r+0x8e6> + 80142ae: 4629 mov r1, r5 + 80142b0: 4622 mov r2, r4 + 80142b2: 4648 mov r0, r9 + 80142b4: f000 ffbe bl 8015234 <__pow5mult> + 80142b8: 9a03 ldr r2, [sp, #12] + 80142ba: 4601 mov r1, r0 + 80142bc: 4605 mov r5, r0 + 80142be: 4648 mov r0, r9 + 80142c0: f000 ff16 bl 80150f0 <__multiply> + 80142c4: 9903 ldr r1, [sp, #12] + 80142c6: 4680 mov r8, r0 + 80142c8: 4648 mov r0, r9 + 80142ca: f000 fe47 bl 8014f5c <_Bfree> + 80142ce: 9b0a ldr r3, [sp, #40] @ 0x28 + 80142d0: 1b1b subs r3, r3, r4 + 80142d2: 930a str r3, [sp, #40] @ 0x28 + 80142d4: f000 80b1 beq.w 801443a <_dtoa_r+0x8f2> + 80142d8: 4641 mov r1, r8 + 80142da: 9a0a ldr r2, [sp, #40] @ 0x28 + 80142dc: 4648 mov r0, r9 + 80142de: f000 ffa9 bl 8015234 <__pow5mult> + 80142e2: 9003 str r0, [sp, #12] + 80142e4: 2101 movs r1, #1 + 80142e6: 4648 mov r0, r9 + 80142e8: f000 feec bl 80150c4 <__i2b> + 80142ec: 9b0e ldr r3, [sp, #56] @ 0x38 + 80142ee: 4604 mov r4, r0 + 80142f0: 2b00 cmp r3, #0 + 80142f2: f000 81d8 beq.w 80146a6 <_dtoa_r+0xb5e> + 80142f6: 461a mov r2, r3 + 80142f8: 4601 mov r1, r0 + 80142fa: 4648 mov r0, r9 + 80142fc: f000 ff9a bl 8015234 <__pow5mult> + 8014300: 9b20 ldr r3, [sp, #128] @ 0x80 + 8014302: 4604 mov r4, r0 + 8014304: 2b01 cmp r3, #1 + 8014306: f300 809f bgt.w 8014448 <_dtoa_r+0x900> + 801430a: 9b06 ldr r3, [sp, #24] + 801430c: 2b00 cmp r3, #0 + 801430e: f040 8097 bne.w 8014440 <_dtoa_r+0x8f8> + 8014312: 9b07 ldr r3, [sp, #28] + 8014314: f3c3 0313 ubfx r3, r3, #0, #20 + 8014318: 2b00 cmp r3, #0 + 801431a: f040 8093 bne.w 8014444 <_dtoa_r+0x8fc> + 801431e: 9b07 ldr r3, [sp, #28] + 8014320: f023 4300 bic.w r3, r3, #2147483648 @ 0x80000000 + 8014324: 0d1b lsrs r3, r3, #20 + 8014326: 051b lsls r3, r3, #20 + 8014328: b133 cbz r3, 8014338 <_dtoa_r+0x7f0> + 801432a: 9b04 ldr r3, [sp, #16] + 801432c: 3301 adds r3, #1 + 801432e: 9304 str r3, [sp, #16] + 8014330: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014332: 3301 adds r3, #1 + 8014334: 9309 str r3, [sp, #36] @ 0x24 + 8014336: 2301 movs r3, #1 + 8014338: 930a str r3, [sp, #40] @ 0x28 + 801433a: 9b0e ldr r3, [sp, #56] @ 0x38 + 801433c: 2b00 cmp r3, #0 + 801433e: f000 81b8 beq.w 80146b2 <_dtoa_r+0xb6a> + 8014342: 6923 ldr r3, [r4, #16] + 8014344: eb04 0383 add.w r3, r4, r3, lsl #2 + 8014348: 6918 ldr r0, [r3, #16] + 801434a: f000 fe6f bl 801502c <__hi0bits> + 801434e: f1c0 0020 rsb r0, r0, #32 + 8014352: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014354: 4418 add r0, r3 + 8014356: f010 001f ands.w r0, r0, #31 + 801435a: f000 8082 beq.w 8014462 <_dtoa_r+0x91a> + 801435e: f1c0 0320 rsb r3, r0, #32 + 8014362: 2b04 cmp r3, #4 + 8014364: dd73 ble.n 801444e <_dtoa_r+0x906> + 8014366: 9b04 ldr r3, [sp, #16] + 8014368: f1c0 001c rsb r0, r0, #28 + 801436c: 4403 add r3, r0 + 801436e: 9304 str r3, [sp, #16] + 8014370: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014372: 4406 add r6, r0 + 8014374: 4403 add r3, r0 + 8014376: 9309 str r3, [sp, #36] @ 0x24 + 8014378: 9b04 ldr r3, [sp, #16] + 801437a: 2b00 cmp r3, #0 + 801437c: dd05 ble.n 801438a <_dtoa_r+0x842> + 801437e: 461a mov r2, r3 + 8014380: 4648 mov r0, r9 + 8014382: 9903 ldr r1, [sp, #12] + 8014384: f000 ffb0 bl 80152e8 <__lshift> + 8014388: 9003 str r0, [sp, #12] + 801438a: 9b09 ldr r3, [sp, #36] @ 0x24 + 801438c: 2b00 cmp r3, #0 + 801438e: dd05 ble.n 801439c <_dtoa_r+0x854> + 8014390: 4621 mov r1, r4 + 8014392: 461a mov r2, r3 + 8014394: 4648 mov r0, r9 + 8014396: f000 ffa7 bl 80152e8 <__lshift> + 801439a: 4604 mov r4, r0 + 801439c: 9b0f ldr r3, [sp, #60] @ 0x3c + 801439e: 2b00 cmp r3, #0 + 80143a0: d061 beq.n 8014466 <_dtoa_r+0x91e> + 80143a2: 4621 mov r1, r4 + 80143a4: 9803 ldr r0, [sp, #12] + 80143a6: f001 f80b bl 80153c0 <__mcmp> + 80143aa: 2800 cmp r0, #0 + 80143ac: da5b bge.n 8014466 <_dtoa_r+0x91e> + 80143ae: 2300 movs r3, #0 + 80143b0: 220a movs r2, #10 + 80143b2: 4648 mov r0, r9 + 80143b4: 9903 ldr r1, [sp, #12] + 80143b6: f000 fdf3 bl 8014fa0 <__multadd> + 80143ba: 9b0b ldr r3, [sp, #44] @ 0x2c + 80143bc: f107 38ff add.w r8, r7, #4294967295 @ 0xffffffff + 80143c0: 9003 str r0, [sp, #12] + 80143c2: 2b00 cmp r3, #0 + 80143c4: f000 8177 beq.w 80146b6 <_dtoa_r+0xb6e> + 80143c8: 4629 mov r1, r5 + 80143ca: 2300 movs r3, #0 + 80143cc: 220a movs r2, #10 + 80143ce: 4648 mov r0, r9 + 80143d0: f000 fde6 bl 8014fa0 <__multadd> + 80143d4: f1bb 0f00 cmp.w fp, #0 + 80143d8: 4605 mov r5, r0 + 80143da: dc6f bgt.n 80144bc <_dtoa_r+0x974> + 80143dc: 9b20 ldr r3, [sp, #128] @ 0x80 + 80143de: 2b02 cmp r3, #2 + 80143e0: dc49 bgt.n 8014476 <_dtoa_r+0x92e> + 80143e2: e06b b.n 80144bc <_dtoa_r+0x974> + 80143e4: 9b14 ldr r3, [sp, #80] @ 0x50 + 80143e6: f1c3 0336 rsb r3, r3, #54 @ 0x36 + 80143ea: e73c b.n 8014266 <_dtoa_r+0x71e> + 80143ec: 3fe00000 .word 0x3fe00000 + 80143f0: 40240000 .word 0x40240000 + 80143f4: 9b08 ldr r3, [sp, #32] + 80143f6: 1e5c subs r4, r3, #1 + 80143f8: 9b0a ldr r3, [sp, #40] @ 0x28 + 80143fa: 42a3 cmp r3, r4 + 80143fc: db09 blt.n 8014412 <_dtoa_r+0x8ca> + 80143fe: 1b1c subs r4, r3, r4 + 8014400: 9b08 ldr r3, [sp, #32] + 8014402: 2b00 cmp r3, #0 + 8014404: f6bf af30 bge.w 8014268 <_dtoa_r+0x720> + 8014408: 9b04 ldr r3, [sp, #16] + 801440a: 9a08 ldr r2, [sp, #32] + 801440c: 1a9e subs r6, r3, r2 + 801440e: 2300 movs r3, #0 + 8014410: e72b b.n 801426a <_dtoa_r+0x722> + 8014412: 9b0a ldr r3, [sp, #40] @ 0x28 + 8014414: 9a0e ldr r2, [sp, #56] @ 0x38 + 8014416: 1ae3 subs r3, r4, r3 + 8014418: 441a add r2, r3 + 801441a: 940a str r4, [sp, #40] @ 0x28 + 801441c: 9e04 ldr r6, [sp, #16] + 801441e: 2400 movs r4, #0 + 8014420: 9b08 ldr r3, [sp, #32] + 8014422: 920e str r2, [sp, #56] @ 0x38 + 8014424: e721 b.n 801426a <_dtoa_r+0x722> + 8014426: 9c0a ldr r4, [sp, #40] @ 0x28 + 8014428: 9e04 ldr r6, [sp, #16] + 801442a: 9d0b ldr r5, [sp, #44] @ 0x2c + 801442c: e728 b.n 8014280 <_dtoa_r+0x738> + 801442e: f8dd 800c ldr.w r8, [sp, #12] + 8014432: e751 b.n 80142d8 <_dtoa_r+0x790> + 8014434: 9a0a ldr r2, [sp, #40] @ 0x28 + 8014436: 9903 ldr r1, [sp, #12] + 8014438: e750 b.n 80142dc <_dtoa_r+0x794> + 801443a: f8cd 800c str.w r8, [sp, #12] + 801443e: e751 b.n 80142e4 <_dtoa_r+0x79c> + 8014440: 2300 movs r3, #0 + 8014442: e779 b.n 8014338 <_dtoa_r+0x7f0> + 8014444: 9b06 ldr r3, [sp, #24] + 8014446: e777 b.n 8014338 <_dtoa_r+0x7f0> + 8014448: 2300 movs r3, #0 + 801444a: 930a str r3, [sp, #40] @ 0x28 + 801444c: e779 b.n 8014342 <_dtoa_r+0x7fa> + 801444e: d093 beq.n 8014378 <_dtoa_r+0x830> + 8014450: 9a04 ldr r2, [sp, #16] + 8014452: 331c adds r3, #28 + 8014454: 441a add r2, r3 + 8014456: 9204 str r2, [sp, #16] + 8014458: 9a09 ldr r2, [sp, #36] @ 0x24 + 801445a: 441e add r6, r3 + 801445c: 441a add r2, r3 + 801445e: 9209 str r2, [sp, #36] @ 0x24 + 8014460: e78a b.n 8014378 <_dtoa_r+0x830> + 8014462: 4603 mov r3, r0 + 8014464: e7f4 b.n 8014450 <_dtoa_r+0x908> + 8014466: 9b08 ldr r3, [sp, #32] + 8014468: 46b8 mov r8, r7 + 801446a: 2b00 cmp r3, #0 + 801446c: dc20 bgt.n 80144b0 <_dtoa_r+0x968> + 801446e: 469b mov fp, r3 + 8014470: 9b20 ldr r3, [sp, #128] @ 0x80 + 8014472: 2b02 cmp r3, #2 + 8014474: dd1e ble.n 80144b4 <_dtoa_r+0x96c> + 8014476: f1bb 0f00 cmp.w fp, #0 + 801447a: f47f adb1 bne.w 8013fe0 <_dtoa_r+0x498> + 801447e: 4621 mov r1, r4 + 8014480: 465b mov r3, fp + 8014482: 2205 movs r2, #5 + 8014484: 4648 mov r0, r9 + 8014486: f000 fd8b bl 8014fa0 <__multadd> + 801448a: 4601 mov r1, r0 + 801448c: 4604 mov r4, r0 + 801448e: 9803 ldr r0, [sp, #12] + 8014490: f000 ff96 bl 80153c0 <__mcmp> + 8014494: 2800 cmp r0, #0 + 8014496: f77f ada3 ble.w 8013fe0 <_dtoa_r+0x498> + 801449a: 4656 mov r6, sl + 801449c: 2331 movs r3, #49 @ 0x31 + 801449e: f108 0801 add.w r8, r8, #1 + 80144a2: f806 3b01 strb.w r3, [r6], #1 + 80144a6: e59f b.n 8013fe8 <_dtoa_r+0x4a0> + 80144a8: 46b8 mov r8, r7 + 80144aa: 9c08 ldr r4, [sp, #32] + 80144ac: 4625 mov r5, r4 + 80144ae: e7f4 b.n 801449a <_dtoa_r+0x952> + 80144b0: f8dd b020 ldr.w fp, [sp, #32] + 80144b4: 9b0b ldr r3, [sp, #44] @ 0x2c + 80144b6: 2b00 cmp r3, #0 + 80144b8: f000 8101 beq.w 80146be <_dtoa_r+0xb76> + 80144bc: 2e00 cmp r6, #0 + 80144be: dd05 ble.n 80144cc <_dtoa_r+0x984> + 80144c0: 4629 mov r1, r5 + 80144c2: 4632 mov r2, r6 + 80144c4: 4648 mov r0, r9 + 80144c6: f000 ff0f bl 80152e8 <__lshift> + 80144ca: 4605 mov r5, r0 + 80144cc: 9b0a ldr r3, [sp, #40] @ 0x28 + 80144ce: 2b00 cmp r3, #0 + 80144d0: d05c beq.n 801458c <_dtoa_r+0xa44> + 80144d2: 4648 mov r0, r9 + 80144d4: 6869 ldr r1, [r5, #4] + 80144d6: f000 fd01 bl 8014edc <_Balloc> + 80144da: 4606 mov r6, r0 + 80144dc: b928 cbnz r0, 80144ea <_dtoa_r+0x9a2> + 80144de: 4602 mov r2, r0 + 80144e0: f240 21ef movw r1, #751 @ 0x2ef + 80144e4: 4b80 ldr r3, [pc, #512] @ (80146e8 <_dtoa_r+0xba0>) + 80144e6: f7ff bb43 b.w 8013b70 <_dtoa_r+0x28> + 80144ea: 692a ldr r2, [r5, #16] + 80144ec: f105 010c add.w r1, r5, #12 + 80144f0: 3202 adds r2, #2 + 80144f2: 0092 lsls r2, r2, #2 + 80144f4: 300c adds r0, #12 + 80144f6: f7ff fa73 bl 80139e0 + 80144fa: 2201 movs r2, #1 + 80144fc: 4631 mov r1, r6 + 80144fe: 4648 mov r0, r9 + 8014500: f000 fef2 bl 80152e8 <__lshift> + 8014504: 462f mov r7, r5 + 8014506: 4605 mov r5, r0 + 8014508: f10a 0301 add.w r3, sl, #1 + 801450c: 9304 str r3, [sp, #16] + 801450e: eb0a 030b add.w r3, sl, fp + 8014512: 930a str r3, [sp, #40] @ 0x28 + 8014514: 9b06 ldr r3, [sp, #24] + 8014516: f003 0301 and.w r3, r3, #1 + 801451a: 9309 str r3, [sp, #36] @ 0x24 + 801451c: 9b04 ldr r3, [sp, #16] + 801451e: 4621 mov r1, r4 + 8014520: 9803 ldr r0, [sp, #12] + 8014522: f103 3bff add.w fp, r3, #4294967295 @ 0xffffffff + 8014526: f7ff fa87 bl 8013a38 + 801452a: 4603 mov r3, r0 + 801452c: 4639 mov r1, r7 + 801452e: 3330 adds r3, #48 @ 0x30 + 8014530: 9006 str r0, [sp, #24] + 8014532: 9803 ldr r0, [sp, #12] + 8014534: 930b str r3, [sp, #44] @ 0x2c + 8014536: f000 ff43 bl 80153c0 <__mcmp> + 801453a: 462a mov r2, r5 + 801453c: 9008 str r0, [sp, #32] + 801453e: 4621 mov r1, r4 + 8014540: 4648 mov r0, r9 + 8014542: f000 ff59 bl 80153f8 <__mdiff> + 8014546: 68c2 ldr r2, [r0, #12] + 8014548: 4606 mov r6, r0 + 801454a: 9b0b ldr r3, [sp, #44] @ 0x2c + 801454c: bb02 cbnz r2, 8014590 <_dtoa_r+0xa48> + 801454e: 4601 mov r1, r0 + 8014550: 9803 ldr r0, [sp, #12] + 8014552: f000 ff35 bl 80153c0 <__mcmp> + 8014556: 4602 mov r2, r0 + 8014558: 9b0b ldr r3, [sp, #44] @ 0x2c + 801455a: 4631 mov r1, r6 + 801455c: 4648 mov r0, r9 + 801455e: e9cd 320b strd r3, r2, [sp, #44] @ 0x2c + 8014562: f000 fcfb bl 8014f5c <_Bfree> + 8014566: 9b20 ldr r3, [sp, #128] @ 0x80 + 8014568: 9a0c ldr r2, [sp, #48] @ 0x30 + 801456a: 9e04 ldr r6, [sp, #16] + 801456c: ea42 0103 orr.w r1, r2, r3 + 8014570: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014572: 4319 orrs r1, r3 + 8014574: 9b0b ldr r3, [sp, #44] @ 0x2c + 8014576: d10d bne.n 8014594 <_dtoa_r+0xa4c> + 8014578: 2b39 cmp r3, #57 @ 0x39 + 801457a: d027 beq.n 80145cc <_dtoa_r+0xa84> + 801457c: 9a08 ldr r2, [sp, #32] + 801457e: 2a00 cmp r2, #0 + 8014580: dd01 ble.n 8014586 <_dtoa_r+0xa3e> + 8014582: 9b06 ldr r3, [sp, #24] + 8014584: 3331 adds r3, #49 @ 0x31 + 8014586: f88b 3000 strb.w r3, [fp] + 801458a: e52e b.n 8013fea <_dtoa_r+0x4a2> + 801458c: 4628 mov r0, r5 + 801458e: e7b9 b.n 8014504 <_dtoa_r+0x9bc> + 8014590: 2201 movs r2, #1 + 8014592: e7e2 b.n 801455a <_dtoa_r+0xa12> + 8014594: 9908 ldr r1, [sp, #32] + 8014596: 2900 cmp r1, #0 + 8014598: db04 blt.n 80145a4 <_dtoa_r+0xa5c> + 801459a: 9820 ldr r0, [sp, #128] @ 0x80 + 801459c: 4301 orrs r1, r0 + 801459e: 9809 ldr r0, [sp, #36] @ 0x24 + 80145a0: 4301 orrs r1, r0 + 80145a2: d120 bne.n 80145e6 <_dtoa_r+0xa9e> + 80145a4: 2a00 cmp r2, #0 + 80145a6: ddee ble.n 8014586 <_dtoa_r+0xa3e> + 80145a8: 2201 movs r2, #1 + 80145aa: 9903 ldr r1, [sp, #12] + 80145ac: 4648 mov r0, r9 + 80145ae: 9304 str r3, [sp, #16] + 80145b0: f000 fe9a bl 80152e8 <__lshift> + 80145b4: 4621 mov r1, r4 + 80145b6: 9003 str r0, [sp, #12] + 80145b8: f000 ff02 bl 80153c0 <__mcmp> + 80145bc: 2800 cmp r0, #0 + 80145be: 9b04 ldr r3, [sp, #16] + 80145c0: dc02 bgt.n 80145c8 <_dtoa_r+0xa80> + 80145c2: d1e0 bne.n 8014586 <_dtoa_r+0xa3e> + 80145c4: 07da lsls r2, r3, #31 + 80145c6: d5de bpl.n 8014586 <_dtoa_r+0xa3e> + 80145c8: 2b39 cmp r3, #57 @ 0x39 + 80145ca: d1da bne.n 8014582 <_dtoa_r+0xa3a> + 80145cc: 2339 movs r3, #57 @ 0x39 + 80145ce: f88b 3000 strb.w r3, [fp] + 80145d2: 4633 mov r3, r6 + 80145d4: 461e mov r6, r3 + 80145d6: f816 2c01 ldrb.w r2, [r6, #-1] + 80145da: 3b01 subs r3, #1 + 80145dc: 2a39 cmp r2, #57 @ 0x39 + 80145de: d04e beq.n 801467e <_dtoa_r+0xb36> + 80145e0: 3201 adds r2, #1 + 80145e2: 701a strb r2, [r3, #0] + 80145e4: e501 b.n 8013fea <_dtoa_r+0x4a2> + 80145e6: 2a00 cmp r2, #0 + 80145e8: dd03 ble.n 80145f2 <_dtoa_r+0xaaa> + 80145ea: 2b39 cmp r3, #57 @ 0x39 + 80145ec: d0ee beq.n 80145cc <_dtoa_r+0xa84> + 80145ee: 3301 adds r3, #1 + 80145f0: e7c9 b.n 8014586 <_dtoa_r+0xa3e> + 80145f2: 9a04 ldr r2, [sp, #16] + 80145f4: 990a ldr r1, [sp, #40] @ 0x28 + 80145f6: f802 3c01 strb.w r3, [r2, #-1] + 80145fa: 428a cmp r2, r1 + 80145fc: d028 beq.n 8014650 <_dtoa_r+0xb08> + 80145fe: 2300 movs r3, #0 + 8014600: 220a movs r2, #10 + 8014602: 9903 ldr r1, [sp, #12] + 8014604: 4648 mov r0, r9 + 8014606: f000 fccb bl 8014fa0 <__multadd> + 801460a: 42af cmp r7, r5 + 801460c: 9003 str r0, [sp, #12] + 801460e: f04f 0300 mov.w r3, #0 + 8014612: f04f 020a mov.w r2, #10 + 8014616: 4639 mov r1, r7 + 8014618: 4648 mov r0, r9 + 801461a: d107 bne.n 801462c <_dtoa_r+0xae4> + 801461c: f000 fcc0 bl 8014fa0 <__multadd> + 8014620: 4607 mov r7, r0 + 8014622: 4605 mov r5, r0 + 8014624: 9b04 ldr r3, [sp, #16] + 8014626: 3301 adds r3, #1 + 8014628: 9304 str r3, [sp, #16] + 801462a: e777 b.n 801451c <_dtoa_r+0x9d4> + 801462c: f000 fcb8 bl 8014fa0 <__multadd> + 8014630: 4629 mov r1, r5 + 8014632: 4607 mov r7, r0 + 8014634: 2300 movs r3, #0 + 8014636: 220a movs r2, #10 + 8014638: 4648 mov r0, r9 + 801463a: f000 fcb1 bl 8014fa0 <__multadd> + 801463e: 4605 mov r5, r0 + 8014640: e7f0 b.n 8014624 <_dtoa_r+0xadc> + 8014642: f1bb 0f00 cmp.w fp, #0 + 8014646: bfcc ite gt + 8014648: 465e movgt r6, fp + 801464a: 2601 movle r6, #1 + 801464c: 2700 movs r7, #0 + 801464e: 4456 add r6, sl + 8014650: 2201 movs r2, #1 + 8014652: 9903 ldr r1, [sp, #12] + 8014654: 4648 mov r0, r9 + 8014656: 9304 str r3, [sp, #16] + 8014658: f000 fe46 bl 80152e8 <__lshift> + 801465c: 4621 mov r1, r4 + 801465e: 9003 str r0, [sp, #12] + 8014660: f000 feae bl 80153c0 <__mcmp> + 8014664: 2800 cmp r0, #0 + 8014666: dcb4 bgt.n 80145d2 <_dtoa_r+0xa8a> + 8014668: d102 bne.n 8014670 <_dtoa_r+0xb28> + 801466a: 9b04 ldr r3, [sp, #16] + 801466c: 07db lsls r3, r3, #31 + 801466e: d4b0 bmi.n 80145d2 <_dtoa_r+0xa8a> + 8014670: 4633 mov r3, r6 + 8014672: 461e mov r6, r3 + 8014674: f813 2d01 ldrb.w r2, [r3, #-1]! + 8014678: 2a30 cmp r2, #48 @ 0x30 + 801467a: d0fa beq.n 8014672 <_dtoa_r+0xb2a> + 801467c: e4b5 b.n 8013fea <_dtoa_r+0x4a2> + 801467e: 459a cmp sl, r3 + 8014680: d1a8 bne.n 80145d4 <_dtoa_r+0xa8c> + 8014682: 2331 movs r3, #49 @ 0x31 + 8014684: f108 0801 add.w r8, r8, #1 + 8014688: f88a 3000 strb.w r3, [sl] + 801468c: e4ad b.n 8013fea <_dtoa_r+0x4a2> + 801468e: 9b24 ldr r3, [sp, #144] @ 0x90 + 8014690: f8df a058 ldr.w sl, [pc, #88] @ 80146ec <_dtoa_r+0xba4> + 8014694: b11b cbz r3, 801469e <_dtoa_r+0xb56> + 8014696: f10a 0308 add.w r3, sl, #8 + 801469a: 9a24 ldr r2, [sp, #144] @ 0x90 + 801469c: 6013 str r3, [r2, #0] + 801469e: 4650 mov r0, sl + 80146a0: b017 add sp, #92 @ 0x5c + 80146a2: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80146a6: 9b20 ldr r3, [sp, #128] @ 0x80 + 80146a8: 2b01 cmp r3, #1 + 80146aa: f77f ae2e ble.w 801430a <_dtoa_r+0x7c2> + 80146ae: 9b0e ldr r3, [sp, #56] @ 0x38 + 80146b0: 930a str r3, [sp, #40] @ 0x28 + 80146b2: 2001 movs r0, #1 + 80146b4: e64d b.n 8014352 <_dtoa_r+0x80a> + 80146b6: f1bb 0f00 cmp.w fp, #0 + 80146ba: f77f aed9 ble.w 8014470 <_dtoa_r+0x928> + 80146be: 4656 mov r6, sl + 80146c0: 4621 mov r1, r4 + 80146c2: 9803 ldr r0, [sp, #12] + 80146c4: f7ff f9b8 bl 8013a38 + 80146c8: f100 0330 add.w r3, r0, #48 @ 0x30 + 80146cc: f806 3b01 strb.w r3, [r6], #1 + 80146d0: eba6 020a sub.w r2, r6, sl + 80146d4: 4593 cmp fp, r2 + 80146d6: ddb4 ble.n 8014642 <_dtoa_r+0xafa> + 80146d8: 2300 movs r3, #0 + 80146da: 220a movs r2, #10 + 80146dc: 4648 mov r0, r9 + 80146de: 9903 ldr r1, [sp, #12] + 80146e0: f000 fc5e bl 8014fa0 <__multadd> + 80146e4: 9003 str r0, [sp, #12] + 80146e6: e7eb b.n 80146c0 <_dtoa_r+0xb78> + 80146e8: 08016104 .word 0x08016104 + 80146ec: 08016088 .word 0x08016088 + +080146f0 <__ssputs_r>: + 80146f0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80146f4: 461f mov r7, r3 + 80146f6: 688e ldr r6, [r1, #8] + 80146f8: 4682 mov sl, r0 + 80146fa: 42be cmp r6, r7 + 80146fc: 460c mov r4, r1 + 80146fe: 4690 mov r8, r2 + 8014700: 680b ldr r3, [r1, #0] + 8014702: d82d bhi.n 8014760 <__ssputs_r+0x70> + 8014704: f9b1 200c ldrsh.w r2, [r1, #12] + 8014708: f412 6f90 tst.w r2, #1152 @ 0x480 + 801470c: d026 beq.n 801475c <__ssputs_r+0x6c> + 801470e: 6965 ldr r5, [r4, #20] + 8014710: 6909 ldr r1, [r1, #16] + 8014712: eb05 0545 add.w r5, r5, r5, lsl #1 + 8014716: eba3 0901 sub.w r9, r3, r1 + 801471a: eb05 75d5 add.w r5, r5, r5, lsr #31 + 801471e: 1c7b adds r3, r7, #1 + 8014720: 444b add r3, r9 + 8014722: 106d asrs r5, r5, #1 + 8014724: 429d cmp r5, r3 + 8014726: bf38 it cc + 8014728: 461d movcc r5, r3 + 801472a: 0553 lsls r3, r2, #21 + 801472c: d527 bpl.n 801477e <__ssputs_r+0x8e> + 801472e: 4629 mov r1, r5 + 8014730: f000 faa0 bl 8014c74 <_malloc_r> + 8014734: 4606 mov r6, r0 + 8014736: b360 cbz r0, 8014792 <__ssputs_r+0xa2> + 8014738: 464a mov r2, r9 + 801473a: 6921 ldr r1, [r4, #16] + 801473c: f7ff f950 bl 80139e0 + 8014740: 89a3 ldrh r3, [r4, #12] + 8014742: f423 6390 bic.w r3, r3, #1152 @ 0x480 + 8014746: f043 0380 orr.w r3, r3, #128 @ 0x80 + 801474a: 81a3 strh r3, [r4, #12] + 801474c: 6126 str r6, [r4, #16] + 801474e: 444e add r6, r9 + 8014750: 6026 str r6, [r4, #0] + 8014752: 463e mov r6, r7 + 8014754: 6165 str r5, [r4, #20] + 8014756: eba5 0509 sub.w r5, r5, r9 + 801475a: 60a5 str r5, [r4, #8] + 801475c: 42be cmp r6, r7 + 801475e: d900 bls.n 8014762 <__ssputs_r+0x72> + 8014760: 463e mov r6, r7 + 8014762: 4632 mov r2, r6 + 8014764: 4641 mov r1, r8 + 8014766: 6820 ldr r0, [r4, #0] + 8014768: f001 f8ab bl 80158c2 + 801476c: 2000 movs r0, #0 + 801476e: 68a3 ldr r3, [r4, #8] + 8014770: 1b9b subs r3, r3, r6 + 8014772: 60a3 str r3, [r4, #8] + 8014774: 6823 ldr r3, [r4, #0] + 8014776: 4433 add r3, r6 + 8014778: 6023 str r3, [r4, #0] + 801477a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801477e: 462a mov r2, r5 + 8014780: f000 ff7c bl 801567c <_realloc_r> + 8014784: 4606 mov r6, r0 + 8014786: 2800 cmp r0, #0 + 8014788: d1e0 bne.n 801474c <__ssputs_r+0x5c> + 801478a: 4650 mov r0, sl + 801478c: 6921 ldr r1, [r4, #16] + 801478e: f001 f947 bl 8015a20 <_free_r> + 8014792: 230c movs r3, #12 + 8014794: f8ca 3000 str.w r3, [sl] + 8014798: 89a3 ldrh r3, [r4, #12] + 801479a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 801479e: f043 0340 orr.w r3, r3, #64 @ 0x40 + 80147a2: 81a3 strh r3, [r4, #12] + 80147a4: e7e9 b.n 801477a <__ssputs_r+0x8a> + ... + +080147a8 <_svfiprintf_r>: + 80147a8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80147ac: 4698 mov r8, r3 + 80147ae: 898b ldrh r3, [r1, #12] + 80147b0: 4607 mov r7, r0 + 80147b2: 061b lsls r3, r3, #24 + 80147b4: 460d mov r5, r1 + 80147b6: 4614 mov r4, r2 + 80147b8: b09d sub sp, #116 @ 0x74 + 80147ba: d510 bpl.n 80147de <_svfiprintf_r+0x36> + 80147bc: 690b ldr r3, [r1, #16] + 80147be: b973 cbnz r3, 80147de <_svfiprintf_r+0x36> + 80147c0: 2140 movs r1, #64 @ 0x40 + 80147c2: f000 fa57 bl 8014c74 <_malloc_r> + 80147c6: 6028 str r0, [r5, #0] + 80147c8: 6128 str r0, [r5, #16] + 80147ca: b930 cbnz r0, 80147da <_svfiprintf_r+0x32> + 80147cc: 230c movs r3, #12 + 80147ce: 603b str r3, [r7, #0] + 80147d0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 80147d4: b01d add sp, #116 @ 0x74 + 80147d6: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 80147da: 2340 movs r3, #64 @ 0x40 + 80147dc: 616b str r3, [r5, #20] + 80147de: 2300 movs r3, #0 + 80147e0: 9309 str r3, [sp, #36] @ 0x24 + 80147e2: 2320 movs r3, #32 + 80147e4: f88d 3029 strb.w r3, [sp, #41] @ 0x29 + 80147e8: 2330 movs r3, #48 @ 0x30 + 80147ea: f04f 0901 mov.w r9, #1 + 80147ee: f8cd 800c str.w r8, [sp, #12] + 80147f2: f8df 8198 ldr.w r8, [pc, #408] @ 801498c <_svfiprintf_r+0x1e4> + 80147f6: f88d 302a strb.w r3, [sp, #42] @ 0x2a + 80147fa: 4623 mov r3, r4 + 80147fc: 469a mov sl, r3 + 80147fe: f813 2b01 ldrb.w r2, [r3], #1 + 8014802: b10a cbz r2, 8014808 <_svfiprintf_r+0x60> + 8014804: 2a25 cmp r2, #37 @ 0x25 + 8014806: d1f9 bne.n 80147fc <_svfiprintf_r+0x54> + 8014808: ebba 0b04 subs.w fp, sl, r4 + 801480c: d00b beq.n 8014826 <_svfiprintf_r+0x7e> + 801480e: 465b mov r3, fp + 8014810: 4622 mov r2, r4 + 8014812: 4629 mov r1, r5 + 8014814: 4638 mov r0, r7 + 8014816: f7ff ff6b bl 80146f0 <__ssputs_r> + 801481a: 3001 adds r0, #1 + 801481c: f000 80a7 beq.w 801496e <_svfiprintf_r+0x1c6> + 8014820: 9a09 ldr r2, [sp, #36] @ 0x24 + 8014822: 445a add r2, fp + 8014824: 9209 str r2, [sp, #36] @ 0x24 + 8014826: f89a 3000 ldrb.w r3, [sl] + 801482a: 2b00 cmp r3, #0 + 801482c: f000 809f beq.w 801496e <_svfiprintf_r+0x1c6> + 8014830: 2300 movs r3, #0 + 8014832: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 8014836: e9cd 2305 strd r2, r3, [sp, #20] + 801483a: f10a 0a01 add.w sl, sl, #1 + 801483e: 9304 str r3, [sp, #16] + 8014840: 9307 str r3, [sp, #28] + 8014842: f88d 3053 strb.w r3, [sp, #83] @ 0x53 + 8014846: 931a str r3, [sp, #104] @ 0x68 + 8014848: 4654 mov r4, sl + 801484a: 2205 movs r2, #5 + 801484c: f814 1b01 ldrb.w r1, [r4], #1 + 8014850: 484e ldr r0, [pc, #312] @ (801498c <_svfiprintf_r+0x1e4>) + 8014852: f7ff f8b7 bl 80139c4 + 8014856: 9a04 ldr r2, [sp, #16] + 8014858: b9d8 cbnz r0, 8014892 <_svfiprintf_r+0xea> + 801485a: 06d0 lsls r0, r2, #27 + 801485c: bf44 itt mi + 801485e: 2320 movmi r3, #32 + 8014860: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 8014864: 0711 lsls r1, r2, #28 + 8014866: bf44 itt mi + 8014868: 232b movmi r3, #43 @ 0x2b + 801486a: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 801486e: f89a 3000 ldrb.w r3, [sl] + 8014872: 2b2a cmp r3, #42 @ 0x2a + 8014874: d015 beq.n 80148a2 <_svfiprintf_r+0xfa> + 8014876: 4654 mov r4, sl + 8014878: 2000 movs r0, #0 + 801487a: f04f 0c0a mov.w ip, #10 + 801487e: 9a07 ldr r2, [sp, #28] + 8014880: 4621 mov r1, r4 + 8014882: f811 3b01 ldrb.w r3, [r1], #1 + 8014886: 3b30 subs r3, #48 @ 0x30 + 8014888: 2b09 cmp r3, #9 + 801488a: d94b bls.n 8014924 <_svfiprintf_r+0x17c> + 801488c: b1b0 cbz r0, 80148bc <_svfiprintf_r+0x114> + 801488e: 9207 str r2, [sp, #28] + 8014890: e014 b.n 80148bc <_svfiprintf_r+0x114> + 8014892: eba0 0308 sub.w r3, r0, r8 + 8014896: fa09 f303 lsl.w r3, r9, r3 + 801489a: 4313 orrs r3, r2 + 801489c: 46a2 mov sl, r4 + 801489e: 9304 str r3, [sp, #16] + 80148a0: e7d2 b.n 8014848 <_svfiprintf_r+0xa0> + 80148a2: 9b03 ldr r3, [sp, #12] + 80148a4: 1d19 adds r1, r3, #4 + 80148a6: 681b ldr r3, [r3, #0] + 80148a8: 9103 str r1, [sp, #12] + 80148aa: 2b00 cmp r3, #0 + 80148ac: bfbb ittet lt + 80148ae: 425b neglt r3, r3 + 80148b0: f042 0202 orrlt.w r2, r2, #2 + 80148b4: 9307 strge r3, [sp, #28] + 80148b6: 9307 strlt r3, [sp, #28] + 80148b8: bfb8 it lt + 80148ba: 9204 strlt r2, [sp, #16] + 80148bc: 7823 ldrb r3, [r4, #0] + 80148be: 2b2e cmp r3, #46 @ 0x2e + 80148c0: d10a bne.n 80148d8 <_svfiprintf_r+0x130> + 80148c2: 7863 ldrb r3, [r4, #1] + 80148c4: 2b2a cmp r3, #42 @ 0x2a + 80148c6: d132 bne.n 801492e <_svfiprintf_r+0x186> + 80148c8: 9b03 ldr r3, [sp, #12] + 80148ca: 3402 adds r4, #2 + 80148cc: 1d1a adds r2, r3, #4 + 80148ce: 681b ldr r3, [r3, #0] + 80148d0: 9203 str r2, [sp, #12] + 80148d2: ea43 73e3 orr.w r3, r3, r3, asr #31 + 80148d6: 9305 str r3, [sp, #20] + 80148d8: f8df a0b4 ldr.w sl, [pc, #180] @ 8014990 <_svfiprintf_r+0x1e8> + 80148dc: 2203 movs r2, #3 + 80148de: 4650 mov r0, sl + 80148e0: 7821 ldrb r1, [r4, #0] + 80148e2: f7ff f86f bl 80139c4 + 80148e6: b138 cbz r0, 80148f8 <_svfiprintf_r+0x150> + 80148e8: 2240 movs r2, #64 @ 0x40 + 80148ea: 9b04 ldr r3, [sp, #16] + 80148ec: eba0 000a sub.w r0, r0, sl + 80148f0: 4082 lsls r2, r0 + 80148f2: 4313 orrs r3, r2 + 80148f4: 3401 adds r4, #1 + 80148f6: 9304 str r3, [sp, #16] + 80148f8: f814 1b01 ldrb.w r1, [r4], #1 + 80148fc: 2206 movs r2, #6 + 80148fe: 4825 ldr r0, [pc, #148] @ (8014994 <_svfiprintf_r+0x1ec>) + 8014900: f88d 1028 strb.w r1, [sp, #40] @ 0x28 + 8014904: f7ff f85e bl 80139c4 + 8014908: 2800 cmp r0, #0 + 801490a: d036 beq.n 801497a <_svfiprintf_r+0x1d2> + 801490c: 4b22 ldr r3, [pc, #136] @ (8014998 <_svfiprintf_r+0x1f0>) + 801490e: bb1b cbnz r3, 8014958 <_svfiprintf_r+0x1b0> + 8014910: 9b03 ldr r3, [sp, #12] + 8014912: 3307 adds r3, #7 + 8014914: f023 0307 bic.w r3, r3, #7 + 8014918: 3308 adds r3, #8 + 801491a: 9303 str r3, [sp, #12] + 801491c: 9b09 ldr r3, [sp, #36] @ 0x24 + 801491e: 4433 add r3, r6 + 8014920: 9309 str r3, [sp, #36] @ 0x24 + 8014922: e76a b.n 80147fa <_svfiprintf_r+0x52> + 8014924: 460c mov r4, r1 + 8014926: 2001 movs r0, #1 + 8014928: fb0c 3202 mla r2, ip, r2, r3 + 801492c: e7a8 b.n 8014880 <_svfiprintf_r+0xd8> + 801492e: 2300 movs r3, #0 + 8014930: f04f 0c0a mov.w ip, #10 + 8014934: 4619 mov r1, r3 + 8014936: 3401 adds r4, #1 + 8014938: 9305 str r3, [sp, #20] + 801493a: 4620 mov r0, r4 + 801493c: f810 2b01 ldrb.w r2, [r0], #1 + 8014940: 3a30 subs r2, #48 @ 0x30 + 8014942: 2a09 cmp r2, #9 + 8014944: d903 bls.n 801494e <_svfiprintf_r+0x1a6> + 8014946: 2b00 cmp r3, #0 + 8014948: d0c6 beq.n 80148d8 <_svfiprintf_r+0x130> + 801494a: 9105 str r1, [sp, #20] + 801494c: e7c4 b.n 80148d8 <_svfiprintf_r+0x130> + 801494e: 4604 mov r4, r0 + 8014950: 2301 movs r3, #1 + 8014952: fb0c 2101 mla r1, ip, r1, r2 + 8014956: e7f0 b.n 801493a <_svfiprintf_r+0x192> + 8014958: ab03 add r3, sp, #12 + 801495a: 9300 str r3, [sp, #0] + 801495c: 462a mov r2, r5 + 801495e: 4638 mov r0, r7 + 8014960: 4b0e ldr r3, [pc, #56] @ (801499c <_svfiprintf_r+0x1f4>) + 8014962: a904 add r1, sp, #16 + 8014964: f7fe fb28 bl 8012fb8 <_printf_float> + 8014968: 1c42 adds r2, r0, #1 + 801496a: 4606 mov r6, r0 + 801496c: d1d6 bne.n 801491c <_svfiprintf_r+0x174> + 801496e: 89ab ldrh r3, [r5, #12] + 8014970: 065b lsls r3, r3, #25 + 8014972: f53f af2d bmi.w 80147d0 <_svfiprintf_r+0x28> + 8014976: 9809 ldr r0, [sp, #36] @ 0x24 + 8014978: e72c b.n 80147d4 <_svfiprintf_r+0x2c> + 801497a: ab03 add r3, sp, #12 + 801497c: 9300 str r3, [sp, #0] + 801497e: 462a mov r2, r5 + 8014980: 4638 mov r0, r7 + 8014982: 4b06 ldr r3, [pc, #24] @ (801499c <_svfiprintf_r+0x1f4>) + 8014984: a904 add r1, sp, #16 + 8014986: f7fe fdb5 bl 80134f4 <_printf_i> + 801498a: e7ed b.n 8014968 <_svfiprintf_r+0x1c0> + 801498c: 08016115 .word 0x08016115 + 8014990: 0801611b .word 0x0801611b + 8014994: 0801611f .word 0x0801611f + 8014998: 08012fb9 .word 0x08012fb9 + 801499c: 080146f1 .word 0x080146f1 + +080149a0 <__sfputc_r>: + 80149a0: 6893 ldr r3, [r2, #8] + 80149a2: b410 push {r4} + 80149a4: 3b01 subs r3, #1 + 80149a6: 2b00 cmp r3, #0 + 80149a8: 6093 str r3, [r2, #8] + 80149aa: da07 bge.n 80149bc <__sfputc_r+0x1c> + 80149ac: 6994 ldr r4, [r2, #24] + 80149ae: 42a3 cmp r3, r4 + 80149b0: db01 blt.n 80149b6 <__sfputc_r+0x16> + 80149b2: 290a cmp r1, #10 + 80149b4: d102 bne.n 80149bc <__sfputc_r+0x1c> + 80149b6: bc10 pop {r4} + 80149b8: f000 be8e b.w 80156d8 <__swbuf_r> + 80149bc: 6813 ldr r3, [r2, #0] + 80149be: 1c58 adds r0, r3, #1 + 80149c0: 6010 str r0, [r2, #0] + 80149c2: 7019 strb r1, [r3, #0] + 80149c4: 4608 mov r0, r1 + 80149c6: bc10 pop {r4} + 80149c8: 4770 bx lr + +080149ca <__sfputs_r>: + 80149ca: b5f8 push {r3, r4, r5, r6, r7, lr} + 80149cc: 4606 mov r6, r0 + 80149ce: 460f mov r7, r1 + 80149d0: 4614 mov r4, r2 + 80149d2: 18d5 adds r5, r2, r3 + 80149d4: 42ac cmp r4, r5 + 80149d6: d101 bne.n 80149dc <__sfputs_r+0x12> + 80149d8: 2000 movs r0, #0 + 80149da: e007 b.n 80149ec <__sfputs_r+0x22> + 80149dc: 463a mov r2, r7 + 80149de: 4630 mov r0, r6 + 80149e0: f814 1b01 ldrb.w r1, [r4], #1 + 80149e4: f7ff ffdc bl 80149a0 <__sfputc_r> + 80149e8: 1c43 adds r3, r0, #1 + 80149ea: d1f3 bne.n 80149d4 <__sfputs_r+0xa> + 80149ec: bdf8 pop {r3, r4, r5, r6, r7, pc} + ... + +080149f0 <_vfiprintf_r>: + 80149f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80149f4: 460d mov r5, r1 + 80149f6: 4614 mov r4, r2 + 80149f8: 4698 mov r8, r3 + 80149fa: 4606 mov r6, r0 + 80149fc: b09d sub sp, #116 @ 0x74 + 80149fe: b118 cbz r0, 8014a08 <_vfiprintf_r+0x18> + 8014a00: 6a03 ldr r3, [r0, #32] + 8014a02: b90b cbnz r3, 8014a08 <_vfiprintf_r+0x18> + 8014a04: f7fe ff20 bl 8013848 <__sinit> + 8014a08: 6e6b ldr r3, [r5, #100] @ 0x64 + 8014a0a: 07d9 lsls r1, r3, #31 + 8014a0c: d405 bmi.n 8014a1a <_vfiprintf_r+0x2a> + 8014a0e: 89ab ldrh r3, [r5, #12] + 8014a10: 059a lsls r2, r3, #22 + 8014a12: d402 bmi.n 8014a1a <_vfiprintf_r+0x2a> + 8014a14: 6da8 ldr r0, [r5, #88] @ 0x58 + 8014a16: f7fe ffce bl 80139b6 <__retarget_lock_acquire_recursive> + 8014a1a: 89ab ldrh r3, [r5, #12] + 8014a1c: 071b lsls r3, r3, #28 + 8014a1e: d501 bpl.n 8014a24 <_vfiprintf_r+0x34> + 8014a20: 692b ldr r3, [r5, #16] + 8014a22: b99b cbnz r3, 8014a4c <_vfiprintf_r+0x5c> + 8014a24: 4629 mov r1, r5 + 8014a26: 4630 mov r0, r6 + 8014a28: f000 fe94 bl 8015754 <__swsetup_r> + 8014a2c: b170 cbz r0, 8014a4c <_vfiprintf_r+0x5c> + 8014a2e: 6e6b ldr r3, [r5, #100] @ 0x64 + 8014a30: 07dc lsls r4, r3, #31 + 8014a32: d504 bpl.n 8014a3e <_vfiprintf_r+0x4e> + 8014a34: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8014a38: b01d add sp, #116 @ 0x74 + 8014a3a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8014a3e: 89ab ldrh r3, [r5, #12] + 8014a40: 0598 lsls r0, r3, #22 + 8014a42: d4f7 bmi.n 8014a34 <_vfiprintf_r+0x44> + 8014a44: 6da8 ldr r0, [r5, #88] @ 0x58 + 8014a46: f7fe ffb7 bl 80139b8 <__retarget_lock_release_recursive> + 8014a4a: e7f3 b.n 8014a34 <_vfiprintf_r+0x44> + 8014a4c: 2300 movs r3, #0 + 8014a4e: 9309 str r3, [sp, #36] @ 0x24 + 8014a50: 2320 movs r3, #32 + 8014a52: f88d 3029 strb.w r3, [sp, #41] @ 0x29 + 8014a56: 2330 movs r3, #48 @ 0x30 + 8014a58: f04f 0901 mov.w r9, #1 + 8014a5c: f8cd 800c str.w r8, [sp, #12] + 8014a60: f8df 81a8 ldr.w r8, [pc, #424] @ 8014c0c <_vfiprintf_r+0x21c> + 8014a64: f88d 302a strb.w r3, [sp, #42] @ 0x2a + 8014a68: 4623 mov r3, r4 + 8014a6a: 469a mov sl, r3 + 8014a6c: f813 2b01 ldrb.w r2, [r3], #1 + 8014a70: b10a cbz r2, 8014a76 <_vfiprintf_r+0x86> + 8014a72: 2a25 cmp r2, #37 @ 0x25 + 8014a74: d1f9 bne.n 8014a6a <_vfiprintf_r+0x7a> + 8014a76: ebba 0b04 subs.w fp, sl, r4 + 8014a7a: d00b beq.n 8014a94 <_vfiprintf_r+0xa4> + 8014a7c: 465b mov r3, fp + 8014a7e: 4622 mov r2, r4 + 8014a80: 4629 mov r1, r5 + 8014a82: 4630 mov r0, r6 + 8014a84: f7ff ffa1 bl 80149ca <__sfputs_r> + 8014a88: 3001 adds r0, #1 + 8014a8a: f000 80a7 beq.w 8014bdc <_vfiprintf_r+0x1ec> + 8014a8e: 9a09 ldr r2, [sp, #36] @ 0x24 + 8014a90: 445a add r2, fp + 8014a92: 9209 str r2, [sp, #36] @ 0x24 + 8014a94: f89a 3000 ldrb.w r3, [sl] + 8014a98: 2b00 cmp r3, #0 + 8014a9a: f000 809f beq.w 8014bdc <_vfiprintf_r+0x1ec> + 8014a9e: 2300 movs r3, #0 + 8014aa0: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff + 8014aa4: e9cd 2305 strd r2, r3, [sp, #20] + 8014aa8: f10a 0a01 add.w sl, sl, #1 + 8014aac: 9304 str r3, [sp, #16] + 8014aae: 9307 str r3, [sp, #28] + 8014ab0: f88d 3053 strb.w r3, [sp, #83] @ 0x53 + 8014ab4: 931a str r3, [sp, #104] @ 0x68 + 8014ab6: 4654 mov r4, sl + 8014ab8: 2205 movs r2, #5 + 8014aba: f814 1b01 ldrb.w r1, [r4], #1 + 8014abe: 4853 ldr r0, [pc, #332] @ (8014c0c <_vfiprintf_r+0x21c>) + 8014ac0: f7fe ff80 bl 80139c4 + 8014ac4: 9a04 ldr r2, [sp, #16] + 8014ac6: b9d8 cbnz r0, 8014b00 <_vfiprintf_r+0x110> + 8014ac8: 06d1 lsls r1, r2, #27 + 8014aca: bf44 itt mi + 8014acc: 2320 movmi r3, #32 + 8014ace: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 8014ad2: 0713 lsls r3, r2, #28 + 8014ad4: bf44 itt mi + 8014ad6: 232b movmi r3, #43 @ 0x2b + 8014ad8: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 + 8014adc: f89a 3000 ldrb.w r3, [sl] + 8014ae0: 2b2a cmp r3, #42 @ 0x2a + 8014ae2: d015 beq.n 8014b10 <_vfiprintf_r+0x120> + 8014ae4: 4654 mov r4, sl + 8014ae6: 2000 movs r0, #0 + 8014ae8: f04f 0c0a mov.w ip, #10 + 8014aec: 9a07 ldr r2, [sp, #28] + 8014aee: 4621 mov r1, r4 + 8014af0: f811 3b01 ldrb.w r3, [r1], #1 + 8014af4: 3b30 subs r3, #48 @ 0x30 + 8014af6: 2b09 cmp r3, #9 + 8014af8: d94b bls.n 8014b92 <_vfiprintf_r+0x1a2> + 8014afa: b1b0 cbz r0, 8014b2a <_vfiprintf_r+0x13a> + 8014afc: 9207 str r2, [sp, #28] + 8014afe: e014 b.n 8014b2a <_vfiprintf_r+0x13a> + 8014b00: eba0 0308 sub.w r3, r0, r8 + 8014b04: fa09 f303 lsl.w r3, r9, r3 + 8014b08: 4313 orrs r3, r2 + 8014b0a: 46a2 mov sl, r4 + 8014b0c: 9304 str r3, [sp, #16] + 8014b0e: e7d2 b.n 8014ab6 <_vfiprintf_r+0xc6> + 8014b10: 9b03 ldr r3, [sp, #12] + 8014b12: 1d19 adds r1, r3, #4 + 8014b14: 681b ldr r3, [r3, #0] + 8014b16: 9103 str r1, [sp, #12] + 8014b18: 2b00 cmp r3, #0 + 8014b1a: bfbb ittet lt + 8014b1c: 425b neglt r3, r3 + 8014b1e: f042 0202 orrlt.w r2, r2, #2 + 8014b22: 9307 strge r3, [sp, #28] + 8014b24: 9307 strlt r3, [sp, #28] + 8014b26: bfb8 it lt + 8014b28: 9204 strlt r2, [sp, #16] + 8014b2a: 7823 ldrb r3, [r4, #0] + 8014b2c: 2b2e cmp r3, #46 @ 0x2e + 8014b2e: d10a bne.n 8014b46 <_vfiprintf_r+0x156> + 8014b30: 7863 ldrb r3, [r4, #1] + 8014b32: 2b2a cmp r3, #42 @ 0x2a + 8014b34: d132 bne.n 8014b9c <_vfiprintf_r+0x1ac> + 8014b36: 9b03 ldr r3, [sp, #12] + 8014b38: 3402 adds r4, #2 + 8014b3a: 1d1a adds r2, r3, #4 + 8014b3c: 681b ldr r3, [r3, #0] + 8014b3e: 9203 str r2, [sp, #12] + 8014b40: ea43 73e3 orr.w r3, r3, r3, asr #31 + 8014b44: 9305 str r3, [sp, #20] + 8014b46: f8df a0c8 ldr.w sl, [pc, #200] @ 8014c10 <_vfiprintf_r+0x220> + 8014b4a: 2203 movs r2, #3 + 8014b4c: 4650 mov r0, sl + 8014b4e: 7821 ldrb r1, [r4, #0] + 8014b50: f7fe ff38 bl 80139c4 + 8014b54: b138 cbz r0, 8014b66 <_vfiprintf_r+0x176> + 8014b56: 2240 movs r2, #64 @ 0x40 + 8014b58: 9b04 ldr r3, [sp, #16] + 8014b5a: eba0 000a sub.w r0, r0, sl + 8014b5e: 4082 lsls r2, r0 + 8014b60: 4313 orrs r3, r2 + 8014b62: 3401 adds r4, #1 + 8014b64: 9304 str r3, [sp, #16] + 8014b66: f814 1b01 ldrb.w r1, [r4], #1 + 8014b6a: 2206 movs r2, #6 + 8014b6c: 4829 ldr r0, [pc, #164] @ (8014c14 <_vfiprintf_r+0x224>) + 8014b6e: f88d 1028 strb.w r1, [sp, #40] @ 0x28 + 8014b72: f7fe ff27 bl 80139c4 + 8014b76: 2800 cmp r0, #0 + 8014b78: d03f beq.n 8014bfa <_vfiprintf_r+0x20a> + 8014b7a: 4b27 ldr r3, [pc, #156] @ (8014c18 <_vfiprintf_r+0x228>) + 8014b7c: bb1b cbnz r3, 8014bc6 <_vfiprintf_r+0x1d6> + 8014b7e: 9b03 ldr r3, [sp, #12] + 8014b80: 3307 adds r3, #7 + 8014b82: f023 0307 bic.w r3, r3, #7 + 8014b86: 3308 adds r3, #8 + 8014b88: 9303 str r3, [sp, #12] + 8014b8a: 9b09 ldr r3, [sp, #36] @ 0x24 + 8014b8c: 443b add r3, r7 + 8014b8e: 9309 str r3, [sp, #36] @ 0x24 + 8014b90: e76a b.n 8014a68 <_vfiprintf_r+0x78> + 8014b92: 460c mov r4, r1 + 8014b94: 2001 movs r0, #1 + 8014b96: fb0c 3202 mla r2, ip, r2, r3 + 8014b9a: e7a8 b.n 8014aee <_vfiprintf_r+0xfe> + 8014b9c: 2300 movs r3, #0 + 8014b9e: f04f 0c0a mov.w ip, #10 + 8014ba2: 4619 mov r1, r3 + 8014ba4: 3401 adds r4, #1 + 8014ba6: 9305 str r3, [sp, #20] + 8014ba8: 4620 mov r0, r4 + 8014baa: f810 2b01 ldrb.w r2, [r0], #1 + 8014bae: 3a30 subs r2, #48 @ 0x30 + 8014bb0: 2a09 cmp r2, #9 + 8014bb2: d903 bls.n 8014bbc <_vfiprintf_r+0x1cc> + 8014bb4: 2b00 cmp r3, #0 + 8014bb6: d0c6 beq.n 8014b46 <_vfiprintf_r+0x156> + 8014bb8: 9105 str r1, [sp, #20] + 8014bba: e7c4 b.n 8014b46 <_vfiprintf_r+0x156> + 8014bbc: 4604 mov r4, r0 + 8014bbe: 2301 movs r3, #1 + 8014bc0: fb0c 2101 mla r1, ip, r1, r2 + 8014bc4: e7f0 b.n 8014ba8 <_vfiprintf_r+0x1b8> + 8014bc6: ab03 add r3, sp, #12 + 8014bc8: 9300 str r3, [sp, #0] + 8014bca: 462a mov r2, r5 + 8014bcc: 4630 mov r0, r6 + 8014bce: 4b13 ldr r3, [pc, #76] @ (8014c1c <_vfiprintf_r+0x22c>) + 8014bd0: a904 add r1, sp, #16 + 8014bd2: f7fe f9f1 bl 8012fb8 <_printf_float> + 8014bd6: 4607 mov r7, r0 + 8014bd8: 1c78 adds r0, r7, #1 + 8014bda: d1d6 bne.n 8014b8a <_vfiprintf_r+0x19a> + 8014bdc: 6e6b ldr r3, [r5, #100] @ 0x64 + 8014bde: 07d9 lsls r1, r3, #31 + 8014be0: d405 bmi.n 8014bee <_vfiprintf_r+0x1fe> + 8014be2: 89ab ldrh r3, [r5, #12] + 8014be4: 059a lsls r2, r3, #22 + 8014be6: d402 bmi.n 8014bee <_vfiprintf_r+0x1fe> + 8014be8: 6da8 ldr r0, [r5, #88] @ 0x58 + 8014bea: f7fe fee5 bl 80139b8 <__retarget_lock_release_recursive> + 8014bee: 89ab ldrh r3, [r5, #12] + 8014bf0: 065b lsls r3, r3, #25 + 8014bf2: f53f af1f bmi.w 8014a34 <_vfiprintf_r+0x44> + 8014bf6: 9809 ldr r0, [sp, #36] @ 0x24 + 8014bf8: e71e b.n 8014a38 <_vfiprintf_r+0x48> + 8014bfa: ab03 add r3, sp, #12 + 8014bfc: 9300 str r3, [sp, #0] + 8014bfe: 462a mov r2, r5 + 8014c00: 4630 mov r0, r6 + 8014c02: 4b06 ldr r3, [pc, #24] @ (8014c1c <_vfiprintf_r+0x22c>) + 8014c04: a904 add r1, sp, #16 + 8014c06: f7fe fc75 bl 80134f4 <_printf_i> + 8014c0a: e7e4 b.n 8014bd6 <_vfiprintf_r+0x1e6> + 8014c0c: 08016115 .word 0x08016115 + 8014c10: 0801611b .word 0x0801611b + 8014c14: 0801611f .word 0x0801611f + 8014c18: 08012fb9 .word 0x08012fb9 + 8014c1c: 080149cb .word 0x080149cb + +08014c20 : + 8014c20: 4b02 ldr r3, [pc, #8] @ (8014c2c ) + 8014c22: 4601 mov r1, r0 + 8014c24: 6818 ldr r0, [r3, #0] + 8014c26: f000 b825 b.w 8014c74 <_malloc_r> + 8014c2a: bf00 nop + 8014c2c: 20000084 .word 0x20000084 + +08014c30 : + 8014c30: b570 push {r4, r5, r6, lr} + 8014c32: 4e0f ldr r6, [pc, #60] @ (8014c70 ) + 8014c34: 460c mov r4, r1 + 8014c36: 6831 ldr r1, [r6, #0] + 8014c38: 4605 mov r5, r0 + 8014c3a: b911 cbnz r1, 8014c42 + 8014c3c: f000 fe90 bl 8015960 <_sbrk_r> + 8014c40: 6030 str r0, [r6, #0] + 8014c42: 4621 mov r1, r4 + 8014c44: 4628 mov r0, r5 + 8014c46: f000 fe8b bl 8015960 <_sbrk_r> + 8014c4a: 1c43 adds r3, r0, #1 + 8014c4c: d103 bne.n 8014c56 + 8014c4e: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff + 8014c52: 4620 mov r0, r4 + 8014c54: bd70 pop {r4, r5, r6, pc} + 8014c56: 1cc4 adds r4, r0, #3 + 8014c58: f024 0403 bic.w r4, r4, #3 + 8014c5c: 42a0 cmp r0, r4 + 8014c5e: d0f8 beq.n 8014c52 + 8014c60: 1a21 subs r1, r4, r0 + 8014c62: 4628 mov r0, r5 + 8014c64: f000 fe7c bl 8015960 <_sbrk_r> + 8014c68: 3001 adds r0, #1 + 8014c6a: d1f2 bne.n 8014c52 + 8014c6c: e7ef b.n 8014c4e + 8014c6e: bf00 nop + 8014c70: 20001314 .word 0x20001314 + +08014c74 <_malloc_r>: + 8014c74: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8014c78: 1ccd adds r5, r1, #3 + 8014c7a: f025 0503 bic.w r5, r5, #3 + 8014c7e: 3508 adds r5, #8 + 8014c80: 2d0c cmp r5, #12 + 8014c82: bf38 it cc + 8014c84: 250c movcc r5, #12 + 8014c86: 2d00 cmp r5, #0 + 8014c88: 4606 mov r6, r0 + 8014c8a: db01 blt.n 8014c90 <_malloc_r+0x1c> + 8014c8c: 42a9 cmp r1, r5 + 8014c8e: d904 bls.n 8014c9a <_malloc_r+0x26> + 8014c90: 230c movs r3, #12 + 8014c92: 6033 str r3, [r6, #0] + 8014c94: 2000 movs r0, #0 + 8014c96: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 8014c9a: f8df 80d4 ldr.w r8, [pc, #212] @ 8014d70 <_malloc_r+0xfc> + 8014c9e: f000 f911 bl 8014ec4 <__malloc_lock> + 8014ca2: f8d8 3000 ldr.w r3, [r8] + 8014ca6: 461c mov r4, r3 + 8014ca8: bb44 cbnz r4, 8014cfc <_malloc_r+0x88> + 8014caa: 4629 mov r1, r5 + 8014cac: 4630 mov r0, r6 + 8014cae: f7ff ffbf bl 8014c30 + 8014cb2: 1c43 adds r3, r0, #1 + 8014cb4: 4604 mov r4, r0 + 8014cb6: d158 bne.n 8014d6a <_malloc_r+0xf6> + 8014cb8: f8d8 4000 ldr.w r4, [r8] + 8014cbc: 4627 mov r7, r4 + 8014cbe: 2f00 cmp r7, #0 + 8014cc0: d143 bne.n 8014d4a <_malloc_r+0xd6> + 8014cc2: 2c00 cmp r4, #0 + 8014cc4: d04b beq.n 8014d5e <_malloc_r+0xea> + 8014cc6: 6823 ldr r3, [r4, #0] + 8014cc8: 4639 mov r1, r7 + 8014cca: 4630 mov r0, r6 + 8014ccc: eb04 0903 add.w r9, r4, r3 + 8014cd0: f000 fe46 bl 8015960 <_sbrk_r> + 8014cd4: 4581 cmp r9, r0 + 8014cd6: d142 bne.n 8014d5e <_malloc_r+0xea> + 8014cd8: 6821 ldr r1, [r4, #0] + 8014cda: 4630 mov r0, r6 + 8014cdc: 1a6d subs r5, r5, r1 + 8014cde: 4629 mov r1, r5 + 8014ce0: f7ff ffa6 bl 8014c30 + 8014ce4: 3001 adds r0, #1 + 8014ce6: d03a beq.n 8014d5e <_malloc_r+0xea> + 8014ce8: 6823 ldr r3, [r4, #0] + 8014cea: 442b add r3, r5 + 8014cec: 6023 str r3, [r4, #0] + 8014cee: f8d8 3000 ldr.w r3, [r8] + 8014cf2: 685a ldr r2, [r3, #4] + 8014cf4: bb62 cbnz r2, 8014d50 <_malloc_r+0xdc> + 8014cf6: f8c8 7000 str.w r7, [r8] + 8014cfa: e00f b.n 8014d1c <_malloc_r+0xa8> + 8014cfc: 6822 ldr r2, [r4, #0] + 8014cfe: 1b52 subs r2, r2, r5 + 8014d00: d420 bmi.n 8014d44 <_malloc_r+0xd0> + 8014d02: 2a0b cmp r2, #11 + 8014d04: d917 bls.n 8014d36 <_malloc_r+0xc2> + 8014d06: 1961 adds r1, r4, r5 + 8014d08: 42a3 cmp r3, r4 + 8014d0a: 6025 str r5, [r4, #0] + 8014d0c: bf18 it ne + 8014d0e: 6059 strne r1, [r3, #4] + 8014d10: 6863 ldr r3, [r4, #4] + 8014d12: bf08 it eq + 8014d14: f8c8 1000 streq.w r1, [r8] + 8014d18: 5162 str r2, [r4, r5] + 8014d1a: 604b str r3, [r1, #4] + 8014d1c: 4630 mov r0, r6 + 8014d1e: f000 f8d7 bl 8014ed0 <__malloc_unlock> + 8014d22: f104 000b add.w r0, r4, #11 + 8014d26: 1d23 adds r3, r4, #4 + 8014d28: f020 0007 bic.w r0, r0, #7 + 8014d2c: 1ac2 subs r2, r0, r3 + 8014d2e: bf1c itt ne + 8014d30: 1a1b subne r3, r3, r0 + 8014d32: 50a3 strne r3, [r4, r2] + 8014d34: e7af b.n 8014c96 <_malloc_r+0x22> + 8014d36: 6862 ldr r2, [r4, #4] + 8014d38: 42a3 cmp r3, r4 + 8014d3a: bf0c ite eq + 8014d3c: f8c8 2000 streq.w r2, [r8] + 8014d40: 605a strne r2, [r3, #4] + 8014d42: e7eb b.n 8014d1c <_malloc_r+0xa8> + 8014d44: 4623 mov r3, r4 + 8014d46: 6864 ldr r4, [r4, #4] + 8014d48: e7ae b.n 8014ca8 <_malloc_r+0x34> + 8014d4a: 463c mov r4, r7 + 8014d4c: 687f ldr r7, [r7, #4] + 8014d4e: e7b6 b.n 8014cbe <_malloc_r+0x4a> + 8014d50: 461a mov r2, r3 + 8014d52: 685b ldr r3, [r3, #4] + 8014d54: 42a3 cmp r3, r4 + 8014d56: d1fb bne.n 8014d50 <_malloc_r+0xdc> + 8014d58: 2300 movs r3, #0 + 8014d5a: 6053 str r3, [r2, #4] + 8014d5c: e7de b.n 8014d1c <_malloc_r+0xa8> + 8014d5e: 230c movs r3, #12 + 8014d60: 4630 mov r0, r6 + 8014d62: 6033 str r3, [r6, #0] + 8014d64: f000 f8b4 bl 8014ed0 <__malloc_unlock> + 8014d68: e794 b.n 8014c94 <_malloc_r+0x20> + 8014d6a: 6005 str r5, [r0, #0] + 8014d6c: e7d6 b.n 8014d1c <_malloc_r+0xa8> + 8014d6e: bf00 nop + 8014d70: 20001318 .word 0x20001318 + +08014d74 <__sflush_r>: + 8014d74: f9b1 200c ldrsh.w r2, [r1, #12] + 8014d78: b5f8 push {r3, r4, r5, r6, r7, lr} + 8014d7a: 0716 lsls r6, r2, #28 + 8014d7c: 4605 mov r5, r0 + 8014d7e: 460c mov r4, r1 + 8014d80: d454 bmi.n 8014e2c <__sflush_r+0xb8> + 8014d82: 684b ldr r3, [r1, #4] + 8014d84: 2b00 cmp r3, #0 + 8014d86: dc02 bgt.n 8014d8e <__sflush_r+0x1a> + 8014d88: 6c0b ldr r3, [r1, #64] @ 0x40 + 8014d8a: 2b00 cmp r3, #0 + 8014d8c: dd48 ble.n 8014e20 <__sflush_r+0xac> + 8014d8e: 6ae6 ldr r6, [r4, #44] @ 0x2c + 8014d90: 2e00 cmp r6, #0 + 8014d92: d045 beq.n 8014e20 <__sflush_r+0xac> + 8014d94: 2300 movs r3, #0 + 8014d96: f412 5280 ands.w r2, r2, #4096 @ 0x1000 + 8014d9a: 682f ldr r7, [r5, #0] + 8014d9c: 6a21 ldr r1, [r4, #32] + 8014d9e: 602b str r3, [r5, #0] + 8014da0: d030 beq.n 8014e04 <__sflush_r+0x90> + 8014da2: 6d62 ldr r2, [r4, #84] @ 0x54 + 8014da4: 89a3 ldrh r3, [r4, #12] + 8014da6: 0759 lsls r1, r3, #29 + 8014da8: d505 bpl.n 8014db6 <__sflush_r+0x42> + 8014daa: 6863 ldr r3, [r4, #4] + 8014dac: 1ad2 subs r2, r2, r3 + 8014dae: 6b63 ldr r3, [r4, #52] @ 0x34 + 8014db0: b10b cbz r3, 8014db6 <__sflush_r+0x42> + 8014db2: 6c23 ldr r3, [r4, #64] @ 0x40 + 8014db4: 1ad2 subs r2, r2, r3 + 8014db6: 2300 movs r3, #0 + 8014db8: 4628 mov r0, r5 + 8014dba: 6ae6 ldr r6, [r4, #44] @ 0x2c + 8014dbc: 6a21 ldr r1, [r4, #32] + 8014dbe: 47b0 blx r6 + 8014dc0: 1c43 adds r3, r0, #1 + 8014dc2: 89a3 ldrh r3, [r4, #12] + 8014dc4: d106 bne.n 8014dd4 <__sflush_r+0x60> + 8014dc6: 6829 ldr r1, [r5, #0] + 8014dc8: 291d cmp r1, #29 + 8014dca: d82b bhi.n 8014e24 <__sflush_r+0xb0> + 8014dcc: 4a28 ldr r2, [pc, #160] @ (8014e70 <__sflush_r+0xfc>) + 8014dce: 40ca lsrs r2, r1 + 8014dd0: 07d6 lsls r6, r2, #31 + 8014dd2: d527 bpl.n 8014e24 <__sflush_r+0xb0> + 8014dd4: 2200 movs r2, #0 + 8014dd6: 6062 str r2, [r4, #4] + 8014dd8: 6922 ldr r2, [r4, #16] + 8014dda: 04d9 lsls r1, r3, #19 + 8014ddc: 6022 str r2, [r4, #0] + 8014dde: d504 bpl.n 8014dea <__sflush_r+0x76> + 8014de0: 1c42 adds r2, r0, #1 + 8014de2: d101 bne.n 8014de8 <__sflush_r+0x74> + 8014de4: 682b ldr r3, [r5, #0] + 8014de6: b903 cbnz r3, 8014dea <__sflush_r+0x76> + 8014de8: 6560 str r0, [r4, #84] @ 0x54 + 8014dea: 6b61 ldr r1, [r4, #52] @ 0x34 + 8014dec: 602f str r7, [r5, #0] + 8014dee: b1b9 cbz r1, 8014e20 <__sflush_r+0xac> + 8014df0: f104 0344 add.w r3, r4, #68 @ 0x44 + 8014df4: 4299 cmp r1, r3 + 8014df6: d002 beq.n 8014dfe <__sflush_r+0x8a> + 8014df8: 4628 mov r0, r5 + 8014dfa: f000 fe11 bl 8015a20 <_free_r> + 8014dfe: 2300 movs r3, #0 + 8014e00: 6363 str r3, [r4, #52] @ 0x34 + 8014e02: e00d b.n 8014e20 <__sflush_r+0xac> + 8014e04: 2301 movs r3, #1 + 8014e06: 4628 mov r0, r5 + 8014e08: 47b0 blx r6 + 8014e0a: 4602 mov r2, r0 + 8014e0c: 1c50 adds r0, r2, #1 + 8014e0e: d1c9 bne.n 8014da4 <__sflush_r+0x30> + 8014e10: 682b ldr r3, [r5, #0] + 8014e12: 2b00 cmp r3, #0 + 8014e14: d0c6 beq.n 8014da4 <__sflush_r+0x30> + 8014e16: 2b1d cmp r3, #29 + 8014e18: d001 beq.n 8014e1e <__sflush_r+0xaa> + 8014e1a: 2b16 cmp r3, #22 + 8014e1c: d11d bne.n 8014e5a <__sflush_r+0xe6> + 8014e1e: 602f str r7, [r5, #0] + 8014e20: 2000 movs r0, #0 + 8014e22: e021 b.n 8014e68 <__sflush_r+0xf4> + 8014e24: f043 0340 orr.w r3, r3, #64 @ 0x40 + 8014e28: b21b sxth r3, r3 + 8014e2a: e01a b.n 8014e62 <__sflush_r+0xee> + 8014e2c: 690f ldr r7, [r1, #16] + 8014e2e: 2f00 cmp r7, #0 + 8014e30: d0f6 beq.n 8014e20 <__sflush_r+0xac> + 8014e32: 0793 lsls r3, r2, #30 + 8014e34: bf18 it ne + 8014e36: 2300 movne r3, #0 + 8014e38: 680e ldr r6, [r1, #0] + 8014e3a: bf08 it eq + 8014e3c: 694b ldreq r3, [r1, #20] + 8014e3e: 1bf6 subs r6, r6, r7 + 8014e40: 600f str r7, [r1, #0] + 8014e42: 608b str r3, [r1, #8] + 8014e44: 2e00 cmp r6, #0 + 8014e46: ddeb ble.n 8014e20 <__sflush_r+0xac> + 8014e48: 4633 mov r3, r6 + 8014e4a: 463a mov r2, r7 + 8014e4c: 4628 mov r0, r5 + 8014e4e: 6a21 ldr r1, [r4, #32] + 8014e50: f8d4 c028 ldr.w ip, [r4, #40] @ 0x28 + 8014e54: 47e0 blx ip + 8014e56: 2800 cmp r0, #0 + 8014e58: dc07 bgt.n 8014e6a <__sflush_r+0xf6> + 8014e5a: f9b4 300c ldrsh.w r3, [r4, #12] + 8014e5e: f043 0340 orr.w r3, r3, #64 @ 0x40 + 8014e62: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8014e66: 81a3 strh r3, [r4, #12] + 8014e68: bdf8 pop {r3, r4, r5, r6, r7, pc} + 8014e6a: 4407 add r7, r0 + 8014e6c: 1a36 subs r6, r6, r0 + 8014e6e: e7e9 b.n 8014e44 <__sflush_r+0xd0> + 8014e70: 20400001 .word 0x20400001 + +08014e74 <_fflush_r>: + 8014e74: b538 push {r3, r4, r5, lr} + 8014e76: 690b ldr r3, [r1, #16] + 8014e78: 4605 mov r5, r0 + 8014e7a: 460c mov r4, r1 + 8014e7c: b913 cbnz r3, 8014e84 <_fflush_r+0x10> + 8014e7e: 2500 movs r5, #0 + 8014e80: 4628 mov r0, r5 + 8014e82: bd38 pop {r3, r4, r5, pc} + 8014e84: b118 cbz r0, 8014e8e <_fflush_r+0x1a> + 8014e86: 6a03 ldr r3, [r0, #32] + 8014e88: b90b cbnz r3, 8014e8e <_fflush_r+0x1a> + 8014e8a: f7fe fcdd bl 8013848 <__sinit> + 8014e8e: f9b4 300c ldrsh.w r3, [r4, #12] + 8014e92: 2b00 cmp r3, #0 + 8014e94: d0f3 beq.n 8014e7e <_fflush_r+0xa> + 8014e96: 6e62 ldr r2, [r4, #100] @ 0x64 + 8014e98: 07d0 lsls r0, r2, #31 + 8014e9a: d404 bmi.n 8014ea6 <_fflush_r+0x32> + 8014e9c: 0599 lsls r1, r3, #22 + 8014e9e: d402 bmi.n 8014ea6 <_fflush_r+0x32> + 8014ea0: 6da0 ldr r0, [r4, #88] @ 0x58 + 8014ea2: f7fe fd88 bl 80139b6 <__retarget_lock_acquire_recursive> + 8014ea6: 4628 mov r0, r5 + 8014ea8: 4621 mov r1, r4 + 8014eaa: f7ff ff63 bl 8014d74 <__sflush_r> + 8014eae: 6e63 ldr r3, [r4, #100] @ 0x64 + 8014eb0: 4605 mov r5, r0 + 8014eb2: 07da lsls r2, r3, #31 + 8014eb4: d4e4 bmi.n 8014e80 <_fflush_r+0xc> + 8014eb6: 89a3 ldrh r3, [r4, #12] + 8014eb8: 059b lsls r3, r3, #22 + 8014eba: d4e1 bmi.n 8014e80 <_fflush_r+0xc> + 8014ebc: 6da0 ldr r0, [r4, #88] @ 0x58 + 8014ebe: f7fe fd7b bl 80139b8 <__retarget_lock_release_recursive> + 8014ec2: e7dd b.n 8014e80 <_fflush_r+0xc> + +08014ec4 <__malloc_lock>: + 8014ec4: 4801 ldr r0, [pc, #4] @ (8014ecc <__malloc_lock+0x8>) + 8014ec6: f7fe bd76 b.w 80139b6 <__retarget_lock_acquire_recursive> + 8014eca: bf00 nop + 8014ecc: 20001310 .word 0x20001310 + +08014ed0 <__malloc_unlock>: + 8014ed0: 4801 ldr r0, [pc, #4] @ (8014ed8 <__malloc_unlock+0x8>) + 8014ed2: f7fe bd71 b.w 80139b8 <__retarget_lock_release_recursive> + 8014ed6: bf00 nop + 8014ed8: 20001310 .word 0x20001310 + +08014edc <_Balloc>: + 8014edc: b570 push {r4, r5, r6, lr} + 8014ede: 69c6 ldr r6, [r0, #28] + 8014ee0: 4604 mov r4, r0 + 8014ee2: 460d mov r5, r1 + 8014ee4: b976 cbnz r6, 8014f04 <_Balloc+0x28> + 8014ee6: 2010 movs r0, #16 + 8014ee8: f7ff fe9a bl 8014c20 + 8014eec: 4602 mov r2, r0 + 8014eee: 61e0 str r0, [r4, #28] + 8014ef0: b920 cbnz r0, 8014efc <_Balloc+0x20> + 8014ef2: 216b movs r1, #107 @ 0x6b + 8014ef4: 4b17 ldr r3, [pc, #92] @ (8014f54 <_Balloc+0x78>) + 8014ef6: 4818 ldr r0, [pc, #96] @ (8014f58 <_Balloc+0x7c>) + 8014ef8: f7fe fd80 bl 80139fc <__assert_func> + 8014efc: e9c0 6601 strd r6, r6, [r0, #4] + 8014f00: 6006 str r6, [r0, #0] + 8014f02: 60c6 str r6, [r0, #12] + 8014f04: 69e6 ldr r6, [r4, #28] + 8014f06: 68f3 ldr r3, [r6, #12] + 8014f08: b183 cbz r3, 8014f2c <_Balloc+0x50> + 8014f0a: 69e3 ldr r3, [r4, #28] + 8014f0c: 68db ldr r3, [r3, #12] + 8014f0e: f853 0025 ldr.w r0, [r3, r5, lsl #2] + 8014f12: b9b8 cbnz r0, 8014f44 <_Balloc+0x68> + 8014f14: 2101 movs r1, #1 + 8014f16: fa01 f605 lsl.w r6, r1, r5 + 8014f1a: 1d72 adds r2, r6, #5 + 8014f1c: 4620 mov r0, r4 + 8014f1e: 0092 lsls r2, r2, #2 + 8014f20: f000 fd69 bl 80159f6 <_calloc_r> + 8014f24: b160 cbz r0, 8014f40 <_Balloc+0x64> + 8014f26: e9c0 5601 strd r5, r6, [r0, #4] + 8014f2a: e00e b.n 8014f4a <_Balloc+0x6e> + 8014f2c: 2221 movs r2, #33 @ 0x21 + 8014f2e: 2104 movs r1, #4 + 8014f30: 4620 mov r0, r4 + 8014f32: f000 fd60 bl 80159f6 <_calloc_r> + 8014f36: 69e3 ldr r3, [r4, #28] + 8014f38: 60f0 str r0, [r6, #12] + 8014f3a: 68db ldr r3, [r3, #12] + 8014f3c: 2b00 cmp r3, #0 + 8014f3e: d1e4 bne.n 8014f0a <_Balloc+0x2e> + 8014f40: 2000 movs r0, #0 + 8014f42: bd70 pop {r4, r5, r6, pc} + 8014f44: 6802 ldr r2, [r0, #0] + 8014f46: f843 2025 str.w r2, [r3, r5, lsl #2] + 8014f4a: 2300 movs r3, #0 + 8014f4c: e9c0 3303 strd r3, r3, [r0, #12] + 8014f50: e7f7 b.n 8014f42 <_Balloc+0x66> + 8014f52: bf00 nop + 8014f54: 08016095 .word 0x08016095 + 8014f58: 08016126 .word 0x08016126 + +08014f5c <_Bfree>: + 8014f5c: b570 push {r4, r5, r6, lr} + 8014f5e: 69c6 ldr r6, [r0, #28] + 8014f60: 4605 mov r5, r0 + 8014f62: 460c mov r4, r1 + 8014f64: b976 cbnz r6, 8014f84 <_Bfree+0x28> + 8014f66: 2010 movs r0, #16 + 8014f68: f7ff fe5a bl 8014c20 + 8014f6c: 4602 mov r2, r0 + 8014f6e: 61e8 str r0, [r5, #28] + 8014f70: b920 cbnz r0, 8014f7c <_Bfree+0x20> + 8014f72: 218f movs r1, #143 @ 0x8f + 8014f74: 4b08 ldr r3, [pc, #32] @ (8014f98 <_Bfree+0x3c>) + 8014f76: 4809 ldr r0, [pc, #36] @ (8014f9c <_Bfree+0x40>) + 8014f78: f7fe fd40 bl 80139fc <__assert_func> + 8014f7c: e9c0 6601 strd r6, r6, [r0, #4] + 8014f80: 6006 str r6, [r0, #0] + 8014f82: 60c6 str r6, [r0, #12] + 8014f84: b13c cbz r4, 8014f96 <_Bfree+0x3a> + 8014f86: 69eb ldr r3, [r5, #28] + 8014f88: 6862 ldr r2, [r4, #4] + 8014f8a: 68db ldr r3, [r3, #12] + 8014f8c: f853 1022 ldr.w r1, [r3, r2, lsl #2] + 8014f90: 6021 str r1, [r4, #0] + 8014f92: f843 4022 str.w r4, [r3, r2, lsl #2] + 8014f96: bd70 pop {r4, r5, r6, pc} + 8014f98: 08016095 .word 0x08016095 + 8014f9c: 08016126 .word 0x08016126 + +08014fa0 <__multadd>: + 8014fa0: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8014fa4: 4607 mov r7, r0 + 8014fa6: 460c mov r4, r1 + 8014fa8: 461e mov r6, r3 + 8014faa: 2000 movs r0, #0 + 8014fac: 690d ldr r5, [r1, #16] + 8014fae: f101 0c14 add.w ip, r1, #20 + 8014fb2: f8dc 3000 ldr.w r3, [ip] + 8014fb6: 3001 adds r0, #1 + 8014fb8: b299 uxth r1, r3 + 8014fba: fb02 6101 mla r1, r2, r1, r6 + 8014fbe: 0c1e lsrs r6, r3, #16 + 8014fc0: 0c0b lsrs r3, r1, #16 + 8014fc2: fb02 3306 mla r3, r2, r6, r3 + 8014fc6: b289 uxth r1, r1 + 8014fc8: eb01 4103 add.w r1, r1, r3, lsl #16 + 8014fcc: 4285 cmp r5, r0 + 8014fce: ea4f 4613 mov.w r6, r3, lsr #16 + 8014fd2: f84c 1b04 str.w r1, [ip], #4 + 8014fd6: dcec bgt.n 8014fb2 <__multadd+0x12> + 8014fd8: b30e cbz r6, 801501e <__multadd+0x7e> + 8014fda: 68a3 ldr r3, [r4, #8] + 8014fdc: 42ab cmp r3, r5 + 8014fde: dc19 bgt.n 8015014 <__multadd+0x74> + 8014fe0: 6861 ldr r1, [r4, #4] + 8014fe2: 4638 mov r0, r7 + 8014fe4: 3101 adds r1, #1 + 8014fe6: f7ff ff79 bl 8014edc <_Balloc> + 8014fea: 4680 mov r8, r0 + 8014fec: b928 cbnz r0, 8014ffa <__multadd+0x5a> + 8014fee: 4602 mov r2, r0 + 8014ff0: 21ba movs r1, #186 @ 0xba + 8014ff2: 4b0c ldr r3, [pc, #48] @ (8015024 <__multadd+0x84>) + 8014ff4: 480c ldr r0, [pc, #48] @ (8015028 <__multadd+0x88>) + 8014ff6: f7fe fd01 bl 80139fc <__assert_func> + 8014ffa: 6922 ldr r2, [r4, #16] + 8014ffc: f104 010c add.w r1, r4, #12 + 8015000: 3202 adds r2, #2 + 8015002: 0092 lsls r2, r2, #2 + 8015004: 300c adds r0, #12 + 8015006: f7fe fceb bl 80139e0 + 801500a: 4621 mov r1, r4 + 801500c: 4638 mov r0, r7 + 801500e: f7ff ffa5 bl 8014f5c <_Bfree> + 8015012: 4644 mov r4, r8 + 8015014: eb04 0385 add.w r3, r4, r5, lsl #2 + 8015018: 3501 adds r5, #1 + 801501a: 615e str r6, [r3, #20] + 801501c: 6125 str r5, [r4, #16] + 801501e: 4620 mov r0, r4 + 8015020: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 8015024: 08016104 .word 0x08016104 + 8015028: 08016126 .word 0x08016126 + +0801502c <__hi0bits>: + 801502c: 4603 mov r3, r0 + 801502e: f5b0 3f80 cmp.w r0, #65536 @ 0x10000 + 8015032: bf3a itte cc + 8015034: 0403 lslcc r3, r0, #16 + 8015036: 2010 movcc r0, #16 + 8015038: 2000 movcs r0, #0 + 801503a: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 + 801503e: bf3c itt cc + 8015040: 021b lslcc r3, r3, #8 + 8015042: 3008 addcc r0, #8 + 8015044: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000 + 8015048: bf3c itt cc + 801504a: 011b lslcc r3, r3, #4 + 801504c: 3004 addcc r0, #4 + 801504e: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 + 8015052: bf3c itt cc + 8015054: 009b lslcc r3, r3, #2 + 8015056: 3002 addcc r0, #2 + 8015058: 2b00 cmp r3, #0 + 801505a: db05 blt.n 8015068 <__hi0bits+0x3c> + 801505c: f013 4f80 tst.w r3, #1073741824 @ 0x40000000 + 8015060: f100 0001 add.w r0, r0, #1 + 8015064: bf08 it eq + 8015066: 2020 moveq r0, #32 + 8015068: 4770 bx lr + +0801506a <__lo0bits>: + 801506a: 6803 ldr r3, [r0, #0] + 801506c: 4602 mov r2, r0 + 801506e: f013 0007 ands.w r0, r3, #7 + 8015072: d00b beq.n 801508c <__lo0bits+0x22> + 8015074: 07d9 lsls r1, r3, #31 + 8015076: d421 bmi.n 80150bc <__lo0bits+0x52> + 8015078: 0798 lsls r0, r3, #30 + 801507a: bf49 itett mi + 801507c: 085b lsrmi r3, r3, #1 + 801507e: 089b lsrpl r3, r3, #2 + 8015080: 2001 movmi r0, #1 + 8015082: 6013 strmi r3, [r2, #0] + 8015084: bf5c itt pl + 8015086: 2002 movpl r0, #2 + 8015088: 6013 strpl r3, [r2, #0] + 801508a: 4770 bx lr + 801508c: b299 uxth r1, r3 + 801508e: b909 cbnz r1, 8015094 <__lo0bits+0x2a> + 8015090: 2010 movs r0, #16 + 8015092: 0c1b lsrs r3, r3, #16 + 8015094: b2d9 uxtb r1, r3 + 8015096: b909 cbnz r1, 801509c <__lo0bits+0x32> + 8015098: 3008 adds r0, #8 + 801509a: 0a1b lsrs r3, r3, #8 + 801509c: 0719 lsls r1, r3, #28 + 801509e: bf04 itt eq + 80150a0: 091b lsreq r3, r3, #4 + 80150a2: 3004 addeq r0, #4 + 80150a4: 0799 lsls r1, r3, #30 + 80150a6: bf04 itt eq + 80150a8: 089b lsreq r3, r3, #2 + 80150aa: 3002 addeq r0, #2 + 80150ac: 07d9 lsls r1, r3, #31 + 80150ae: d403 bmi.n 80150b8 <__lo0bits+0x4e> + 80150b0: 085b lsrs r3, r3, #1 + 80150b2: f100 0001 add.w r0, r0, #1 + 80150b6: d003 beq.n 80150c0 <__lo0bits+0x56> + 80150b8: 6013 str r3, [r2, #0] + 80150ba: 4770 bx lr + 80150bc: 2000 movs r0, #0 + 80150be: 4770 bx lr + 80150c0: 2020 movs r0, #32 + 80150c2: 4770 bx lr + +080150c4 <__i2b>: + 80150c4: b510 push {r4, lr} + 80150c6: 460c mov r4, r1 + 80150c8: 2101 movs r1, #1 + 80150ca: f7ff ff07 bl 8014edc <_Balloc> + 80150ce: 4602 mov r2, r0 + 80150d0: b928 cbnz r0, 80150de <__i2b+0x1a> + 80150d2: f240 1145 movw r1, #325 @ 0x145 + 80150d6: 4b04 ldr r3, [pc, #16] @ (80150e8 <__i2b+0x24>) + 80150d8: 4804 ldr r0, [pc, #16] @ (80150ec <__i2b+0x28>) + 80150da: f7fe fc8f bl 80139fc <__assert_func> + 80150de: 2301 movs r3, #1 + 80150e0: 6144 str r4, [r0, #20] + 80150e2: 6103 str r3, [r0, #16] + 80150e4: bd10 pop {r4, pc} + 80150e6: bf00 nop + 80150e8: 08016104 .word 0x08016104 + 80150ec: 08016126 .word 0x08016126 + +080150f0 <__multiply>: + 80150f0: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80150f4: 4617 mov r7, r2 + 80150f6: 690a ldr r2, [r1, #16] + 80150f8: 693b ldr r3, [r7, #16] + 80150fa: 4689 mov r9, r1 + 80150fc: 429a cmp r2, r3 + 80150fe: bfa2 ittt ge + 8015100: 463b movge r3, r7 + 8015102: 460f movge r7, r1 + 8015104: 4699 movge r9, r3 + 8015106: 693d ldr r5, [r7, #16] + 8015108: f8d9 a010 ldr.w sl, [r9, #16] + 801510c: 68bb ldr r3, [r7, #8] + 801510e: 6879 ldr r1, [r7, #4] + 8015110: eb05 060a add.w r6, r5, sl + 8015114: 42b3 cmp r3, r6 + 8015116: b085 sub sp, #20 + 8015118: bfb8 it lt + 801511a: 3101 addlt r1, #1 + 801511c: f7ff fede bl 8014edc <_Balloc> + 8015120: b930 cbnz r0, 8015130 <__multiply+0x40> + 8015122: 4602 mov r2, r0 + 8015124: f44f 71b1 mov.w r1, #354 @ 0x162 + 8015128: 4b40 ldr r3, [pc, #256] @ (801522c <__multiply+0x13c>) + 801512a: 4841 ldr r0, [pc, #260] @ (8015230 <__multiply+0x140>) + 801512c: f7fe fc66 bl 80139fc <__assert_func> + 8015130: f100 0414 add.w r4, r0, #20 + 8015134: 4623 mov r3, r4 + 8015136: 2200 movs r2, #0 + 8015138: eb04 0e86 add.w lr, r4, r6, lsl #2 + 801513c: 4573 cmp r3, lr + 801513e: d320 bcc.n 8015182 <__multiply+0x92> + 8015140: f107 0814 add.w r8, r7, #20 + 8015144: f109 0114 add.w r1, r9, #20 + 8015148: eb08 0585 add.w r5, r8, r5, lsl #2 + 801514c: eb01 038a add.w r3, r1, sl, lsl #2 + 8015150: 9302 str r3, [sp, #8] + 8015152: 1beb subs r3, r5, r7 + 8015154: 3b15 subs r3, #21 + 8015156: f023 0303 bic.w r3, r3, #3 + 801515a: 3304 adds r3, #4 + 801515c: 3715 adds r7, #21 + 801515e: 42bd cmp r5, r7 + 8015160: bf38 it cc + 8015162: 2304 movcc r3, #4 + 8015164: 9301 str r3, [sp, #4] + 8015166: 9b02 ldr r3, [sp, #8] + 8015168: 9103 str r1, [sp, #12] + 801516a: 428b cmp r3, r1 + 801516c: d80c bhi.n 8015188 <__multiply+0x98> + 801516e: 2e00 cmp r6, #0 + 8015170: dd03 ble.n 801517a <__multiply+0x8a> + 8015172: f85e 3d04 ldr.w r3, [lr, #-4]! + 8015176: 2b00 cmp r3, #0 + 8015178: d055 beq.n 8015226 <__multiply+0x136> + 801517a: 6106 str r6, [r0, #16] + 801517c: b005 add sp, #20 + 801517e: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015182: f843 2b04 str.w r2, [r3], #4 + 8015186: e7d9 b.n 801513c <__multiply+0x4c> + 8015188: f8b1 a000 ldrh.w sl, [r1] + 801518c: f1ba 0f00 cmp.w sl, #0 + 8015190: d01f beq.n 80151d2 <__multiply+0xe2> + 8015192: 46c4 mov ip, r8 + 8015194: 46a1 mov r9, r4 + 8015196: 2700 movs r7, #0 + 8015198: f85c 2b04 ldr.w r2, [ip], #4 + 801519c: f8d9 3000 ldr.w r3, [r9] + 80151a0: fa1f fb82 uxth.w fp, r2 + 80151a4: b29b uxth r3, r3 + 80151a6: fb0a 330b mla r3, sl, fp, r3 + 80151aa: 443b add r3, r7 + 80151ac: f8d9 7000 ldr.w r7, [r9] + 80151b0: 0c12 lsrs r2, r2, #16 + 80151b2: 0c3f lsrs r7, r7, #16 + 80151b4: fb0a 7202 mla r2, sl, r2, r7 + 80151b8: eb02 4213 add.w r2, r2, r3, lsr #16 + 80151bc: b29b uxth r3, r3 + 80151be: ea43 4302 orr.w r3, r3, r2, lsl #16 + 80151c2: 4565 cmp r5, ip + 80151c4: ea4f 4712 mov.w r7, r2, lsr #16 + 80151c8: f849 3b04 str.w r3, [r9], #4 + 80151cc: d8e4 bhi.n 8015198 <__multiply+0xa8> + 80151ce: 9b01 ldr r3, [sp, #4] + 80151d0: 50e7 str r7, [r4, r3] + 80151d2: 9b03 ldr r3, [sp, #12] + 80151d4: 3104 adds r1, #4 + 80151d6: f8b3 9002 ldrh.w r9, [r3, #2] + 80151da: f1b9 0f00 cmp.w r9, #0 + 80151de: d020 beq.n 8015222 <__multiply+0x132> + 80151e0: 4647 mov r7, r8 + 80151e2: 46a4 mov ip, r4 + 80151e4: f04f 0a00 mov.w sl, #0 + 80151e8: 6823 ldr r3, [r4, #0] + 80151ea: f8b7 b000 ldrh.w fp, [r7] + 80151ee: f8bc 2002 ldrh.w r2, [ip, #2] + 80151f2: b29b uxth r3, r3 + 80151f4: fb09 220b mla r2, r9, fp, r2 + 80151f8: 4452 add r2, sl + 80151fa: ea43 4302 orr.w r3, r3, r2, lsl #16 + 80151fe: f84c 3b04 str.w r3, [ip], #4 + 8015202: f857 3b04 ldr.w r3, [r7], #4 + 8015206: ea4f 4a13 mov.w sl, r3, lsr #16 + 801520a: f8bc 3000 ldrh.w r3, [ip] + 801520e: 42bd cmp r5, r7 + 8015210: fb09 330a mla r3, r9, sl, r3 + 8015214: eb03 4312 add.w r3, r3, r2, lsr #16 + 8015218: ea4f 4a13 mov.w sl, r3, lsr #16 + 801521c: d8e5 bhi.n 80151ea <__multiply+0xfa> + 801521e: 9a01 ldr r2, [sp, #4] + 8015220: 50a3 str r3, [r4, r2] + 8015222: 3404 adds r4, #4 + 8015224: e79f b.n 8015166 <__multiply+0x76> + 8015226: 3e01 subs r6, #1 + 8015228: e7a1 b.n 801516e <__multiply+0x7e> + 801522a: bf00 nop + 801522c: 08016104 .word 0x08016104 + 8015230: 08016126 .word 0x08016126 + +08015234 <__pow5mult>: + 8015234: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} + 8015238: 4615 mov r5, r2 + 801523a: f012 0203 ands.w r2, r2, #3 + 801523e: 4607 mov r7, r0 + 8015240: 460e mov r6, r1 + 8015242: d007 beq.n 8015254 <__pow5mult+0x20> + 8015244: 4c25 ldr r4, [pc, #148] @ (80152dc <__pow5mult+0xa8>) + 8015246: 3a01 subs r2, #1 + 8015248: 2300 movs r3, #0 + 801524a: f854 2022 ldr.w r2, [r4, r2, lsl #2] + 801524e: f7ff fea7 bl 8014fa0 <__multadd> + 8015252: 4606 mov r6, r0 + 8015254: 10ad asrs r5, r5, #2 + 8015256: d03d beq.n 80152d4 <__pow5mult+0xa0> + 8015258: 69fc ldr r4, [r7, #28] + 801525a: b97c cbnz r4, 801527c <__pow5mult+0x48> + 801525c: 2010 movs r0, #16 + 801525e: f7ff fcdf bl 8014c20 + 8015262: 4602 mov r2, r0 + 8015264: 61f8 str r0, [r7, #28] + 8015266: b928 cbnz r0, 8015274 <__pow5mult+0x40> + 8015268: f240 11b3 movw r1, #435 @ 0x1b3 + 801526c: 4b1c ldr r3, [pc, #112] @ (80152e0 <__pow5mult+0xac>) + 801526e: 481d ldr r0, [pc, #116] @ (80152e4 <__pow5mult+0xb0>) + 8015270: f7fe fbc4 bl 80139fc <__assert_func> + 8015274: e9c0 4401 strd r4, r4, [r0, #4] + 8015278: 6004 str r4, [r0, #0] + 801527a: 60c4 str r4, [r0, #12] + 801527c: f8d7 801c ldr.w r8, [r7, #28] + 8015280: f8d8 4008 ldr.w r4, [r8, #8] + 8015284: b94c cbnz r4, 801529a <__pow5mult+0x66> + 8015286: f240 2171 movw r1, #625 @ 0x271 + 801528a: 4638 mov r0, r7 + 801528c: f7ff ff1a bl 80150c4 <__i2b> + 8015290: 2300 movs r3, #0 + 8015292: 4604 mov r4, r0 + 8015294: f8c8 0008 str.w r0, [r8, #8] + 8015298: 6003 str r3, [r0, #0] + 801529a: f04f 0900 mov.w r9, #0 + 801529e: 07eb lsls r3, r5, #31 + 80152a0: d50a bpl.n 80152b8 <__pow5mult+0x84> + 80152a2: 4631 mov r1, r6 + 80152a4: 4622 mov r2, r4 + 80152a6: 4638 mov r0, r7 + 80152a8: f7ff ff22 bl 80150f0 <__multiply> + 80152ac: 4680 mov r8, r0 + 80152ae: 4631 mov r1, r6 + 80152b0: 4638 mov r0, r7 + 80152b2: f7ff fe53 bl 8014f5c <_Bfree> + 80152b6: 4646 mov r6, r8 + 80152b8: 106d asrs r5, r5, #1 + 80152ba: d00b beq.n 80152d4 <__pow5mult+0xa0> + 80152bc: 6820 ldr r0, [r4, #0] + 80152be: b938 cbnz r0, 80152d0 <__pow5mult+0x9c> + 80152c0: 4622 mov r2, r4 + 80152c2: 4621 mov r1, r4 + 80152c4: 4638 mov r0, r7 + 80152c6: f7ff ff13 bl 80150f0 <__multiply> + 80152ca: 6020 str r0, [r4, #0] + 80152cc: f8c0 9000 str.w r9, [r0] + 80152d0: 4604 mov r4, r0 + 80152d2: e7e4 b.n 801529e <__pow5mult+0x6a> + 80152d4: 4630 mov r0, r6 + 80152d6: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} + 80152da: bf00 nop + 80152dc: 0801618c .word 0x0801618c + 80152e0: 08016095 .word 0x08016095 + 80152e4: 08016126 .word 0x08016126 + +080152e8 <__lshift>: + 80152e8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} + 80152ec: 460c mov r4, r1 + 80152ee: 4607 mov r7, r0 + 80152f0: 4691 mov r9, r2 + 80152f2: 6923 ldr r3, [r4, #16] + 80152f4: 6849 ldr r1, [r1, #4] + 80152f6: eb03 1862 add.w r8, r3, r2, asr #5 + 80152fa: 68a3 ldr r3, [r4, #8] + 80152fc: ea4f 1a62 mov.w sl, r2, asr #5 + 8015300: f108 0601 add.w r6, r8, #1 + 8015304: 42b3 cmp r3, r6 + 8015306: db0b blt.n 8015320 <__lshift+0x38> + 8015308: 4638 mov r0, r7 + 801530a: f7ff fde7 bl 8014edc <_Balloc> + 801530e: 4605 mov r5, r0 + 8015310: b948 cbnz r0, 8015326 <__lshift+0x3e> + 8015312: 4602 mov r2, r0 + 8015314: f44f 71ef mov.w r1, #478 @ 0x1de + 8015318: 4b27 ldr r3, [pc, #156] @ (80153b8 <__lshift+0xd0>) + 801531a: 4828 ldr r0, [pc, #160] @ (80153bc <__lshift+0xd4>) + 801531c: f7fe fb6e bl 80139fc <__assert_func> + 8015320: 3101 adds r1, #1 + 8015322: 005b lsls r3, r3, #1 + 8015324: e7ee b.n 8015304 <__lshift+0x1c> + 8015326: 2300 movs r3, #0 + 8015328: f100 0114 add.w r1, r0, #20 + 801532c: f100 0210 add.w r2, r0, #16 + 8015330: 4618 mov r0, r3 + 8015332: 4553 cmp r3, sl + 8015334: db33 blt.n 801539e <__lshift+0xb6> + 8015336: 6920 ldr r0, [r4, #16] + 8015338: ea2a 7aea bic.w sl, sl, sl, asr #31 + 801533c: f104 0314 add.w r3, r4, #20 + 8015340: f019 091f ands.w r9, r9, #31 + 8015344: eb01 018a add.w r1, r1, sl, lsl #2 + 8015348: eb03 0c80 add.w ip, r3, r0, lsl #2 + 801534c: d02b beq.n 80153a6 <__lshift+0xbe> + 801534e: 468a mov sl, r1 + 8015350: 2200 movs r2, #0 + 8015352: f1c9 0e20 rsb lr, r9, #32 + 8015356: 6818 ldr r0, [r3, #0] + 8015358: fa00 f009 lsl.w r0, r0, r9 + 801535c: 4310 orrs r0, r2 + 801535e: f84a 0b04 str.w r0, [sl], #4 + 8015362: f853 2b04 ldr.w r2, [r3], #4 + 8015366: 459c cmp ip, r3 + 8015368: fa22 f20e lsr.w r2, r2, lr + 801536c: d8f3 bhi.n 8015356 <__lshift+0x6e> + 801536e: ebac 0304 sub.w r3, ip, r4 + 8015372: 3b15 subs r3, #21 + 8015374: f023 0303 bic.w r3, r3, #3 + 8015378: 3304 adds r3, #4 + 801537a: f104 0015 add.w r0, r4, #21 + 801537e: 4560 cmp r0, ip + 8015380: bf88 it hi + 8015382: 2304 movhi r3, #4 + 8015384: 50ca str r2, [r1, r3] + 8015386: b10a cbz r2, 801538c <__lshift+0xa4> + 8015388: f108 0602 add.w r6, r8, #2 + 801538c: 3e01 subs r6, #1 + 801538e: 4638 mov r0, r7 + 8015390: 4621 mov r1, r4 + 8015392: 612e str r6, [r5, #16] + 8015394: f7ff fde2 bl 8014f5c <_Bfree> + 8015398: 4628 mov r0, r5 + 801539a: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} + 801539e: f842 0f04 str.w r0, [r2, #4]! + 80153a2: 3301 adds r3, #1 + 80153a4: e7c5 b.n 8015332 <__lshift+0x4a> + 80153a6: 3904 subs r1, #4 + 80153a8: f853 2b04 ldr.w r2, [r3], #4 + 80153ac: 459c cmp ip, r3 + 80153ae: f841 2f04 str.w r2, [r1, #4]! + 80153b2: d8f9 bhi.n 80153a8 <__lshift+0xc0> + 80153b4: e7ea b.n 801538c <__lshift+0xa4> + 80153b6: bf00 nop + 80153b8: 08016104 .word 0x08016104 + 80153bc: 08016126 .word 0x08016126 + +080153c0 <__mcmp>: + 80153c0: 4603 mov r3, r0 + 80153c2: 690a ldr r2, [r1, #16] + 80153c4: 6900 ldr r0, [r0, #16] + 80153c6: b530 push {r4, r5, lr} + 80153c8: 1a80 subs r0, r0, r2 + 80153ca: d10e bne.n 80153ea <__mcmp+0x2a> + 80153cc: 3314 adds r3, #20 + 80153ce: 3114 adds r1, #20 + 80153d0: eb03 0482 add.w r4, r3, r2, lsl #2 + 80153d4: eb01 0182 add.w r1, r1, r2, lsl #2 + 80153d8: f854 5d04 ldr.w r5, [r4, #-4]! + 80153dc: f851 2d04 ldr.w r2, [r1, #-4]! + 80153e0: 4295 cmp r5, r2 + 80153e2: d003 beq.n 80153ec <__mcmp+0x2c> + 80153e4: d205 bcs.n 80153f2 <__mcmp+0x32> + 80153e6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 80153ea: bd30 pop {r4, r5, pc} + 80153ec: 42a3 cmp r3, r4 + 80153ee: d3f3 bcc.n 80153d8 <__mcmp+0x18> + 80153f0: e7fb b.n 80153ea <__mcmp+0x2a> + 80153f2: 2001 movs r0, #1 + 80153f4: e7f9 b.n 80153ea <__mcmp+0x2a> + ... + +080153f8 <__mdiff>: + 80153f8: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} + 80153fc: 4689 mov r9, r1 + 80153fe: 4606 mov r6, r0 + 8015400: 4611 mov r1, r2 + 8015402: 4648 mov r0, r9 + 8015404: 4614 mov r4, r2 + 8015406: f7ff ffdb bl 80153c0 <__mcmp> + 801540a: 1e05 subs r5, r0, #0 + 801540c: d112 bne.n 8015434 <__mdiff+0x3c> + 801540e: 4629 mov r1, r5 + 8015410: 4630 mov r0, r6 + 8015412: f7ff fd63 bl 8014edc <_Balloc> + 8015416: 4602 mov r2, r0 + 8015418: b928 cbnz r0, 8015426 <__mdiff+0x2e> + 801541a: f240 2137 movw r1, #567 @ 0x237 + 801541e: 4b3e ldr r3, [pc, #248] @ (8015518 <__mdiff+0x120>) + 8015420: 483e ldr r0, [pc, #248] @ (801551c <__mdiff+0x124>) + 8015422: f7fe faeb bl 80139fc <__assert_func> + 8015426: 2301 movs r3, #1 + 8015428: e9c0 3504 strd r3, r5, [r0, #16] + 801542c: 4610 mov r0, r2 + 801542e: b003 add sp, #12 + 8015430: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} + 8015434: bfbc itt lt + 8015436: 464b movlt r3, r9 + 8015438: 46a1 movlt r9, r4 + 801543a: 4630 mov r0, r6 + 801543c: f8d9 1004 ldr.w r1, [r9, #4] + 8015440: bfba itte lt + 8015442: 461c movlt r4, r3 + 8015444: 2501 movlt r5, #1 + 8015446: 2500 movge r5, #0 + 8015448: f7ff fd48 bl 8014edc <_Balloc> + 801544c: 4602 mov r2, r0 + 801544e: b918 cbnz r0, 8015458 <__mdiff+0x60> + 8015450: f240 2145 movw r1, #581 @ 0x245 + 8015454: 4b30 ldr r3, [pc, #192] @ (8015518 <__mdiff+0x120>) + 8015456: e7e3 b.n 8015420 <__mdiff+0x28> + 8015458: f100 0b14 add.w fp, r0, #20 + 801545c: f8d9 7010 ldr.w r7, [r9, #16] + 8015460: f109 0310 add.w r3, r9, #16 + 8015464: 60c5 str r5, [r0, #12] + 8015466: f04f 0c00 mov.w ip, #0 + 801546a: f109 0514 add.w r5, r9, #20 + 801546e: 46d9 mov r9, fp + 8015470: 6926 ldr r6, [r4, #16] + 8015472: f104 0e14 add.w lr, r4, #20 + 8015476: eb05 0887 add.w r8, r5, r7, lsl #2 + 801547a: eb0e 0686 add.w r6, lr, r6, lsl #2 + 801547e: 9301 str r3, [sp, #4] + 8015480: 9b01 ldr r3, [sp, #4] + 8015482: f85e 0b04 ldr.w r0, [lr], #4 + 8015486: f853 af04 ldr.w sl, [r3, #4]! + 801548a: b281 uxth r1, r0 + 801548c: 9301 str r3, [sp, #4] + 801548e: fa1f f38a uxth.w r3, sl + 8015492: 1a5b subs r3, r3, r1 + 8015494: 0c00 lsrs r0, r0, #16 + 8015496: 4463 add r3, ip + 8015498: ebc0 401a rsb r0, r0, sl, lsr #16 + 801549c: eb00 4023 add.w r0, r0, r3, asr #16 + 80154a0: b29b uxth r3, r3 + 80154a2: ea43 4300 orr.w r3, r3, r0, lsl #16 + 80154a6: 4576 cmp r6, lr + 80154a8: ea4f 4c20 mov.w ip, r0, asr #16 + 80154ac: f849 3b04 str.w r3, [r9], #4 + 80154b0: d8e6 bhi.n 8015480 <__mdiff+0x88> + 80154b2: 1b33 subs r3, r6, r4 + 80154b4: 3b15 subs r3, #21 + 80154b6: f023 0303 bic.w r3, r3, #3 + 80154ba: 3415 adds r4, #21 + 80154bc: 3304 adds r3, #4 + 80154be: 42a6 cmp r6, r4 + 80154c0: bf38 it cc + 80154c2: 2304 movcc r3, #4 + 80154c4: 441d add r5, r3 + 80154c6: 445b add r3, fp + 80154c8: 461e mov r6, r3 + 80154ca: 462c mov r4, r5 + 80154cc: 4544 cmp r4, r8 + 80154ce: d30e bcc.n 80154ee <__mdiff+0xf6> + 80154d0: f108 0103 add.w r1, r8, #3 + 80154d4: 1b49 subs r1, r1, r5 + 80154d6: f021 0103 bic.w r1, r1, #3 + 80154da: 3d03 subs r5, #3 + 80154dc: 45a8 cmp r8, r5 + 80154de: bf38 it cc + 80154e0: 2100 movcc r1, #0 + 80154e2: 440b add r3, r1 + 80154e4: f853 1d04 ldr.w r1, [r3, #-4]! + 80154e8: b199 cbz r1, 8015512 <__mdiff+0x11a> + 80154ea: 6117 str r7, [r2, #16] + 80154ec: e79e b.n 801542c <__mdiff+0x34> + 80154ee: 46e6 mov lr, ip + 80154f0: f854 1b04 ldr.w r1, [r4], #4 + 80154f4: fa1f fc81 uxth.w ip, r1 + 80154f8: 44f4 add ip, lr + 80154fa: 0c08 lsrs r0, r1, #16 + 80154fc: 4471 add r1, lr + 80154fe: eb00 402c add.w r0, r0, ip, asr #16 + 8015502: b289 uxth r1, r1 + 8015504: ea41 4100 orr.w r1, r1, r0, lsl #16 + 8015508: ea4f 4c20 mov.w ip, r0, asr #16 + 801550c: f846 1b04 str.w r1, [r6], #4 + 8015510: e7dc b.n 80154cc <__mdiff+0xd4> + 8015512: 3f01 subs r7, #1 + 8015514: e7e6 b.n 80154e4 <__mdiff+0xec> + 8015516: bf00 nop + 8015518: 08016104 .word 0x08016104 + 801551c: 08016126 .word 0x08016126 + +08015520 <__d2b>: + 8015520: e92d 4373 stmdb sp!, {r0, r1, r4, r5, r6, r8, r9, lr} + 8015524: 2101 movs r1, #1 + 8015526: 4690 mov r8, r2 + 8015528: 4699 mov r9, r3 + 801552a: 9e08 ldr r6, [sp, #32] + 801552c: f7ff fcd6 bl 8014edc <_Balloc> + 8015530: 4604 mov r4, r0 + 8015532: b930 cbnz r0, 8015542 <__d2b+0x22> + 8015534: 4602 mov r2, r0 + 8015536: f240 310f movw r1, #783 @ 0x30f + 801553a: 4b23 ldr r3, [pc, #140] @ (80155c8 <__d2b+0xa8>) + 801553c: 4823 ldr r0, [pc, #140] @ (80155cc <__d2b+0xac>) + 801553e: f7fe fa5d bl 80139fc <__assert_func> + 8015542: f3c9 550a ubfx r5, r9, #20, #11 + 8015546: f3c9 0313 ubfx r3, r9, #0, #20 + 801554a: b10d cbz r5, 8015550 <__d2b+0x30> + 801554c: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 + 8015550: 9301 str r3, [sp, #4] + 8015552: f1b8 0300 subs.w r3, r8, #0 + 8015556: d024 beq.n 80155a2 <__d2b+0x82> + 8015558: 4668 mov r0, sp + 801555a: 9300 str r3, [sp, #0] + 801555c: f7ff fd85 bl 801506a <__lo0bits> + 8015560: e9dd 1200 ldrd r1, r2, [sp] + 8015564: b1d8 cbz r0, 801559e <__d2b+0x7e> + 8015566: f1c0 0320 rsb r3, r0, #32 + 801556a: fa02 f303 lsl.w r3, r2, r3 + 801556e: 430b orrs r3, r1 + 8015570: 40c2 lsrs r2, r0 + 8015572: 6163 str r3, [r4, #20] + 8015574: 9201 str r2, [sp, #4] + 8015576: 9b01 ldr r3, [sp, #4] + 8015578: 2b00 cmp r3, #0 + 801557a: bf0c ite eq + 801557c: 2201 moveq r2, #1 + 801557e: 2202 movne r2, #2 + 8015580: 61a3 str r3, [r4, #24] + 8015582: 6122 str r2, [r4, #16] + 8015584: b1ad cbz r5, 80155b2 <__d2b+0x92> + 8015586: f2a5 4533 subw r5, r5, #1075 @ 0x433 + 801558a: 4405 add r5, r0 + 801558c: 6035 str r5, [r6, #0] + 801558e: f1c0 0035 rsb r0, r0, #53 @ 0x35 + 8015592: 9b09 ldr r3, [sp, #36] @ 0x24 + 8015594: 6018 str r0, [r3, #0] + 8015596: 4620 mov r0, r4 + 8015598: b002 add sp, #8 + 801559a: e8bd 8370 ldmia.w sp!, {r4, r5, r6, r8, r9, pc} + 801559e: 6161 str r1, [r4, #20] + 80155a0: e7e9 b.n 8015576 <__d2b+0x56> + 80155a2: a801 add r0, sp, #4 + 80155a4: f7ff fd61 bl 801506a <__lo0bits> + 80155a8: 9b01 ldr r3, [sp, #4] + 80155aa: 2201 movs r2, #1 + 80155ac: 6163 str r3, [r4, #20] + 80155ae: 3020 adds r0, #32 + 80155b0: e7e7 b.n 8015582 <__d2b+0x62> + 80155b2: f2a0 4032 subw r0, r0, #1074 @ 0x432 + 80155b6: eb04 0382 add.w r3, r4, r2, lsl #2 + 80155ba: 6030 str r0, [r6, #0] + 80155bc: 6918 ldr r0, [r3, #16] + 80155be: f7ff fd35 bl 801502c <__hi0bits> + 80155c2: ebc0 1042 rsb r0, r0, r2, lsl #5 + 80155c6: e7e4 b.n 8015592 <__d2b+0x72> + 80155c8: 08016104 .word 0x08016104 + 80155cc: 08016126 .word 0x08016126 + +080155d0 <__sread>: + 80155d0: b510 push {r4, lr} + 80155d2: 460c mov r4, r1 + 80155d4: f9b1 100e ldrsh.w r1, [r1, #14] + 80155d8: f000 f9b0 bl 801593c <_read_r> + 80155dc: 2800 cmp r0, #0 + 80155de: bfab itete ge + 80155e0: 6d63 ldrge r3, [r4, #84] @ 0x54 + 80155e2: 89a3 ldrhlt r3, [r4, #12] + 80155e4: 181b addge r3, r3, r0 + 80155e6: f423 5380 biclt.w r3, r3, #4096 @ 0x1000 + 80155ea: bfac ite ge + 80155ec: 6563 strge r3, [r4, #84] @ 0x54 + 80155ee: 81a3 strhlt r3, [r4, #12] + 80155f0: bd10 pop {r4, pc} + +080155f2 <__swrite>: + 80155f2: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 80155f6: 461f mov r7, r3 + 80155f8: 898b ldrh r3, [r1, #12] + 80155fa: 4605 mov r5, r0 + 80155fc: 05db lsls r3, r3, #23 + 80155fe: 460c mov r4, r1 + 8015600: 4616 mov r6, r2 + 8015602: d505 bpl.n 8015610 <__swrite+0x1e> + 8015604: 2302 movs r3, #2 + 8015606: 2200 movs r2, #0 + 8015608: f9b1 100e ldrsh.w r1, [r1, #14] + 801560c: f000 f984 bl 8015918 <_lseek_r> + 8015610: 89a3 ldrh r3, [r4, #12] + 8015612: 4632 mov r2, r6 + 8015614: f423 5380 bic.w r3, r3, #4096 @ 0x1000 + 8015618: 81a3 strh r3, [r4, #12] + 801561a: 4628 mov r0, r5 + 801561c: 463b mov r3, r7 + 801561e: f9b4 100e ldrsh.w r1, [r4, #14] + 8015622: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 8015626: f000 b9ab b.w 8015980 <_write_r> + +0801562a <__sseek>: + 801562a: b510 push {r4, lr} + 801562c: 460c mov r4, r1 + 801562e: f9b1 100e ldrsh.w r1, [r1, #14] + 8015632: f000 f971 bl 8015918 <_lseek_r> + 8015636: 1c43 adds r3, r0, #1 + 8015638: 89a3 ldrh r3, [r4, #12] + 801563a: bf15 itete ne + 801563c: 6560 strne r0, [r4, #84] @ 0x54 + 801563e: f423 5380 biceq.w r3, r3, #4096 @ 0x1000 + 8015642: f443 5380 orrne.w r3, r3, #4096 @ 0x1000 + 8015646: 81a3 strheq r3, [r4, #12] + 8015648: bf18 it ne + 801564a: 81a3 strhne r3, [r4, #12] + 801564c: bd10 pop {r4, pc} + +0801564e <__sclose>: + 801564e: f9b1 100e ldrsh.w r1, [r1, #14] + 8015652: f000 b9a7 b.w 80159a4 <_close_r> + ... + +08015658 : + 8015658: b40e push {r1, r2, r3} + 801565a: b503 push {r0, r1, lr} + 801565c: 4601 mov r1, r0 + 801565e: ab03 add r3, sp, #12 + 8015660: 4805 ldr r0, [pc, #20] @ (8015678 ) + 8015662: f853 2b04 ldr.w r2, [r3], #4 + 8015666: 6800 ldr r0, [r0, #0] + 8015668: 9301 str r3, [sp, #4] + 801566a: f7ff f9c1 bl 80149f0 <_vfiprintf_r> + 801566e: b002 add sp, #8 + 8015670: f85d eb04 ldr.w lr, [sp], #4 + 8015674: b003 add sp, #12 + 8015676: 4770 bx lr + 8015678: 20000084 .word 0x20000084 + +0801567c <_realloc_r>: + 801567c: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} + 8015680: 4607 mov r7, r0 + 8015682: 4614 mov r4, r2 + 8015684: 460d mov r5, r1 + 8015686: b921 cbnz r1, 8015692 <_realloc_r+0x16> + 8015688: 4611 mov r1, r2 + 801568a: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} + 801568e: f7ff baf1 b.w 8014c74 <_malloc_r> + 8015692: b92a cbnz r2, 80156a0 <_realloc_r+0x24> + 8015694: f000 f9c4 bl 8015a20 <_free_r> + 8015698: 4625 mov r5, r4 + 801569a: 4628 mov r0, r5 + 801569c: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} + 80156a0: f000 fa18 bl 8015ad4 <_malloc_usable_size_r> + 80156a4: 4284 cmp r4, r0 + 80156a6: 4606 mov r6, r0 + 80156a8: d802 bhi.n 80156b0 <_realloc_r+0x34> + 80156aa: ebb4 0f50 cmp.w r4, r0, lsr #1 + 80156ae: d8f4 bhi.n 801569a <_realloc_r+0x1e> + 80156b0: 4621 mov r1, r4 + 80156b2: 4638 mov r0, r7 + 80156b4: f7ff fade bl 8014c74 <_malloc_r> + 80156b8: 4680 mov r8, r0 + 80156ba: b908 cbnz r0, 80156c0 <_realloc_r+0x44> + 80156bc: 4645 mov r5, r8 + 80156be: e7ec b.n 801569a <_realloc_r+0x1e> + 80156c0: 42b4 cmp r4, r6 + 80156c2: 4622 mov r2, r4 + 80156c4: 4629 mov r1, r5 + 80156c6: bf28 it cs + 80156c8: 4632 movcs r2, r6 + 80156ca: f7fe f989 bl 80139e0 + 80156ce: 4629 mov r1, r5 + 80156d0: 4638 mov r0, r7 + 80156d2: f000 f9a5 bl 8015a20 <_free_r> + 80156d6: e7f1 b.n 80156bc <_realloc_r+0x40> + +080156d8 <__swbuf_r>: + 80156d8: b5f8 push {r3, r4, r5, r6, r7, lr} + 80156da: 460e mov r6, r1 + 80156dc: 4614 mov r4, r2 + 80156de: 4605 mov r5, r0 + 80156e0: b118 cbz r0, 80156ea <__swbuf_r+0x12> + 80156e2: 6a03 ldr r3, [r0, #32] + 80156e4: b90b cbnz r3, 80156ea <__swbuf_r+0x12> + 80156e6: f7fe f8af bl 8013848 <__sinit> + 80156ea: 69a3 ldr r3, [r4, #24] + 80156ec: 60a3 str r3, [r4, #8] + 80156ee: 89a3 ldrh r3, [r4, #12] + 80156f0: 071a lsls r2, r3, #28 + 80156f2: d501 bpl.n 80156f8 <__swbuf_r+0x20> + 80156f4: 6923 ldr r3, [r4, #16] + 80156f6: b943 cbnz r3, 801570a <__swbuf_r+0x32> + 80156f8: 4621 mov r1, r4 + 80156fa: 4628 mov r0, r5 + 80156fc: f000 f82a bl 8015754 <__swsetup_r> + 8015700: b118 cbz r0, 801570a <__swbuf_r+0x32> + 8015702: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff + 8015706: 4638 mov r0, r7 + 8015708: bdf8 pop {r3, r4, r5, r6, r7, pc} + 801570a: 6823 ldr r3, [r4, #0] + 801570c: 6922 ldr r2, [r4, #16] + 801570e: b2f6 uxtb r6, r6 + 8015710: 1a98 subs r0, r3, r2 + 8015712: 6963 ldr r3, [r4, #20] + 8015714: 4637 mov r7, r6 + 8015716: 4283 cmp r3, r0 + 8015718: dc05 bgt.n 8015726 <__swbuf_r+0x4e> + 801571a: 4621 mov r1, r4 + 801571c: 4628 mov r0, r5 + 801571e: f7ff fba9 bl 8014e74 <_fflush_r> + 8015722: 2800 cmp r0, #0 + 8015724: d1ed bne.n 8015702 <__swbuf_r+0x2a> + 8015726: 68a3 ldr r3, [r4, #8] + 8015728: 3b01 subs r3, #1 + 801572a: 60a3 str r3, [r4, #8] + 801572c: 6823 ldr r3, [r4, #0] + 801572e: 1c5a adds r2, r3, #1 + 8015730: 6022 str r2, [r4, #0] + 8015732: 701e strb r6, [r3, #0] + 8015734: 6962 ldr r2, [r4, #20] + 8015736: 1c43 adds r3, r0, #1 + 8015738: 429a cmp r2, r3 + 801573a: d004 beq.n 8015746 <__swbuf_r+0x6e> + 801573c: 89a3 ldrh r3, [r4, #12] + 801573e: 07db lsls r3, r3, #31 + 8015740: d5e1 bpl.n 8015706 <__swbuf_r+0x2e> + 8015742: 2e0a cmp r6, #10 + 8015744: d1df bne.n 8015706 <__swbuf_r+0x2e> + 8015746: 4621 mov r1, r4 + 8015748: 4628 mov r0, r5 + 801574a: f7ff fb93 bl 8014e74 <_fflush_r> + 801574e: 2800 cmp r0, #0 + 8015750: d0d9 beq.n 8015706 <__swbuf_r+0x2e> + 8015752: e7d6 b.n 8015702 <__swbuf_r+0x2a> + +08015754 <__swsetup_r>: + 8015754: b538 push {r3, r4, r5, lr} + 8015756: 4b29 ldr r3, [pc, #164] @ (80157fc <__swsetup_r+0xa8>) + 8015758: 4605 mov r5, r0 + 801575a: 6818 ldr r0, [r3, #0] + 801575c: 460c mov r4, r1 + 801575e: b118 cbz r0, 8015768 <__swsetup_r+0x14> + 8015760: 6a03 ldr r3, [r0, #32] + 8015762: b90b cbnz r3, 8015768 <__swsetup_r+0x14> + 8015764: f7fe f870 bl 8013848 <__sinit> + 8015768: f9b4 300c ldrsh.w r3, [r4, #12] + 801576c: 0719 lsls r1, r3, #28 + 801576e: d422 bmi.n 80157b6 <__swsetup_r+0x62> + 8015770: 06da lsls r2, r3, #27 + 8015772: d407 bmi.n 8015784 <__swsetup_r+0x30> + 8015774: 2209 movs r2, #9 + 8015776: 602a str r2, [r5, #0] + 8015778: f043 0340 orr.w r3, r3, #64 @ 0x40 + 801577c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8015780: 81a3 strh r3, [r4, #12] + 8015782: e033 b.n 80157ec <__swsetup_r+0x98> + 8015784: 0758 lsls r0, r3, #29 + 8015786: d512 bpl.n 80157ae <__swsetup_r+0x5a> + 8015788: 6b61 ldr r1, [r4, #52] @ 0x34 + 801578a: b141 cbz r1, 801579e <__swsetup_r+0x4a> + 801578c: f104 0344 add.w r3, r4, #68 @ 0x44 + 8015790: 4299 cmp r1, r3 + 8015792: d002 beq.n 801579a <__swsetup_r+0x46> + 8015794: 4628 mov r0, r5 + 8015796: f000 f943 bl 8015a20 <_free_r> + 801579a: 2300 movs r3, #0 + 801579c: 6363 str r3, [r4, #52] @ 0x34 + 801579e: 89a3 ldrh r3, [r4, #12] + 80157a0: f023 0324 bic.w r3, r3, #36 @ 0x24 + 80157a4: 81a3 strh r3, [r4, #12] + 80157a6: 2300 movs r3, #0 + 80157a8: 6063 str r3, [r4, #4] + 80157aa: 6923 ldr r3, [r4, #16] + 80157ac: 6023 str r3, [r4, #0] + 80157ae: 89a3 ldrh r3, [r4, #12] + 80157b0: f043 0308 orr.w r3, r3, #8 + 80157b4: 81a3 strh r3, [r4, #12] + 80157b6: 6923 ldr r3, [r4, #16] + 80157b8: b94b cbnz r3, 80157ce <__swsetup_r+0x7a> + 80157ba: 89a3 ldrh r3, [r4, #12] + 80157bc: f403 7320 and.w r3, r3, #640 @ 0x280 + 80157c0: f5b3 7f00 cmp.w r3, #512 @ 0x200 + 80157c4: d003 beq.n 80157ce <__swsetup_r+0x7a> + 80157c6: 4621 mov r1, r4 + 80157c8: 4628 mov r0, r5 + 80157ca: f000 f83e bl 801584a <__smakebuf_r> + 80157ce: f9b4 300c ldrsh.w r3, [r4, #12] + 80157d2: f013 0201 ands.w r2, r3, #1 + 80157d6: d00a beq.n 80157ee <__swsetup_r+0x9a> + 80157d8: 2200 movs r2, #0 + 80157da: 60a2 str r2, [r4, #8] + 80157dc: 6962 ldr r2, [r4, #20] + 80157de: 4252 negs r2, r2 + 80157e0: 61a2 str r2, [r4, #24] + 80157e2: 6922 ldr r2, [r4, #16] + 80157e4: b942 cbnz r2, 80157f8 <__swsetup_r+0xa4> + 80157e6: f013 0080 ands.w r0, r3, #128 @ 0x80 + 80157ea: d1c5 bne.n 8015778 <__swsetup_r+0x24> + 80157ec: bd38 pop {r3, r4, r5, pc} + 80157ee: 0799 lsls r1, r3, #30 + 80157f0: bf58 it pl + 80157f2: 6962 ldrpl r2, [r4, #20] + 80157f4: 60a2 str r2, [r4, #8] + 80157f6: e7f4 b.n 80157e2 <__swsetup_r+0x8e> + 80157f8: 2000 movs r0, #0 + 80157fa: e7f7 b.n 80157ec <__swsetup_r+0x98> + 80157fc: 20000084 .word 0x20000084 + +08015800 <__swhatbuf_r>: + 8015800: b570 push {r4, r5, r6, lr} + 8015802: 460c mov r4, r1 + 8015804: f9b1 100e ldrsh.w r1, [r1, #14] + 8015808: 4615 mov r5, r2 + 801580a: 2900 cmp r1, #0 + 801580c: 461e mov r6, r3 + 801580e: b096 sub sp, #88 @ 0x58 + 8015810: da0c bge.n 801582c <__swhatbuf_r+0x2c> + 8015812: 89a3 ldrh r3, [r4, #12] + 8015814: 2100 movs r1, #0 + 8015816: f013 0f80 tst.w r3, #128 @ 0x80 + 801581a: bf14 ite ne + 801581c: 2340 movne r3, #64 @ 0x40 + 801581e: f44f 6380 moveq.w r3, #1024 @ 0x400 + 8015822: 2000 movs r0, #0 + 8015824: 6031 str r1, [r6, #0] + 8015826: 602b str r3, [r5, #0] + 8015828: b016 add sp, #88 @ 0x58 + 801582a: bd70 pop {r4, r5, r6, pc} + 801582c: 466a mov r2, sp + 801582e: f000 f8c9 bl 80159c4 <_fstat_r> + 8015832: 2800 cmp r0, #0 + 8015834: dbed blt.n 8015812 <__swhatbuf_r+0x12> + 8015836: 9901 ldr r1, [sp, #4] + 8015838: f401 4170 and.w r1, r1, #61440 @ 0xf000 + 801583c: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000 + 8015840: 4259 negs r1, r3 + 8015842: 4159 adcs r1, r3 + 8015844: f44f 6380 mov.w r3, #1024 @ 0x400 + 8015848: e7eb b.n 8015822 <__swhatbuf_r+0x22> + +0801584a <__smakebuf_r>: + 801584a: 898b ldrh r3, [r1, #12] + 801584c: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} + 801584e: 079d lsls r5, r3, #30 + 8015850: 4606 mov r6, r0 + 8015852: 460c mov r4, r1 + 8015854: d507 bpl.n 8015866 <__smakebuf_r+0x1c> + 8015856: f104 0347 add.w r3, r4, #71 @ 0x47 + 801585a: 6023 str r3, [r4, #0] + 801585c: 6123 str r3, [r4, #16] + 801585e: 2301 movs r3, #1 + 8015860: 6163 str r3, [r4, #20] + 8015862: b003 add sp, #12 + 8015864: bdf0 pop {r4, r5, r6, r7, pc} + 8015866: 466a mov r2, sp + 8015868: ab01 add r3, sp, #4 + 801586a: f7ff ffc9 bl 8015800 <__swhatbuf_r> + 801586e: 9f00 ldr r7, [sp, #0] + 8015870: 4605 mov r5, r0 + 8015872: 4639 mov r1, r7 + 8015874: 4630 mov r0, r6 + 8015876: f7ff f9fd bl 8014c74 <_malloc_r> + 801587a: b948 cbnz r0, 8015890 <__smakebuf_r+0x46> + 801587c: f9b4 300c ldrsh.w r3, [r4, #12] + 8015880: 059a lsls r2, r3, #22 + 8015882: d4ee bmi.n 8015862 <__smakebuf_r+0x18> + 8015884: f023 0303 bic.w r3, r3, #3 + 8015888: f043 0302 orr.w r3, r3, #2 + 801588c: 81a3 strh r3, [r4, #12] + 801588e: e7e2 b.n 8015856 <__smakebuf_r+0xc> + 8015890: 89a3 ldrh r3, [r4, #12] + 8015892: e9c4 0704 strd r0, r7, [r4, #16] + 8015896: f043 0380 orr.w r3, r3, #128 @ 0x80 + 801589a: 81a3 strh r3, [r4, #12] + 801589c: 9b01 ldr r3, [sp, #4] + 801589e: 6020 str r0, [r4, #0] + 80158a0: b15b cbz r3, 80158ba <__smakebuf_r+0x70> + 80158a2: 4630 mov r0, r6 + 80158a4: f9b4 100e ldrsh.w r1, [r4, #14] + 80158a8: f000 f826 bl 80158f8 <_isatty_r> + 80158ac: b128 cbz r0, 80158ba <__smakebuf_r+0x70> + 80158ae: 89a3 ldrh r3, [r4, #12] + 80158b0: f023 0303 bic.w r3, r3, #3 + 80158b4: f043 0301 orr.w r3, r3, #1 + 80158b8: 81a3 strh r3, [r4, #12] + 80158ba: 89a3 ldrh r3, [r4, #12] + 80158bc: 431d orrs r5, r3 + 80158be: 81a5 strh r5, [r4, #12] + 80158c0: e7cf b.n 8015862 <__smakebuf_r+0x18> + +080158c2 : + 80158c2: 4288 cmp r0, r1 + 80158c4: b510 push {r4, lr} + 80158c6: eb01 0402 add.w r4, r1, r2 + 80158ca: d902 bls.n 80158d2 + 80158cc: 4284 cmp r4, r0 + 80158ce: 4623 mov r3, r4 + 80158d0: d807 bhi.n 80158e2 + 80158d2: 1e43 subs r3, r0, #1 + 80158d4: 42a1 cmp r1, r4 + 80158d6: d008 beq.n 80158ea + 80158d8: f811 2b01 ldrb.w r2, [r1], #1 + 80158dc: f803 2f01 strb.w r2, [r3, #1]! + 80158e0: e7f8 b.n 80158d4 + 80158e2: 4601 mov r1, r0 + 80158e4: 4402 add r2, r0 + 80158e6: 428a cmp r2, r1 + 80158e8: d100 bne.n 80158ec + 80158ea: bd10 pop {r4, pc} + 80158ec: f813 4d01 ldrb.w r4, [r3, #-1]! + 80158f0: f802 4d01 strb.w r4, [r2, #-1]! + 80158f4: e7f7 b.n 80158e6 + ... + +080158f8 <_isatty_r>: + 80158f8: b538 push {r3, r4, r5, lr} + 80158fa: 2300 movs r3, #0 + 80158fc: 4d05 ldr r5, [pc, #20] @ (8015914 <_isatty_r+0x1c>) + 80158fe: 4604 mov r4, r0 + 8015900: 4608 mov r0, r1 + 8015902: 602b str r3, [r5, #0] + 8015904: f7f7 fb67 bl 800cfd6 <_isatty> + 8015908: 1c43 adds r3, r0, #1 + 801590a: d102 bne.n 8015912 <_isatty_r+0x1a> + 801590c: 682b ldr r3, [r5, #0] + 801590e: b103 cbz r3, 8015912 <_isatty_r+0x1a> + 8015910: 6023 str r3, [r4, #0] + 8015912: bd38 pop {r3, r4, r5, pc} + 8015914: 2000131c .word 0x2000131c + +08015918 <_lseek_r>: + 8015918: b538 push {r3, r4, r5, lr} + 801591a: 4604 mov r4, r0 + 801591c: 4608 mov r0, r1 + 801591e: 4611 mov r1, r2 + 8015920: 2200 movs r2, #0 + 8015922: 4d05 ldr r5, [pc, #20] @ (8015938 <_lseek_r+0x20>) + 8015924: 602a str r2, [r5, #0] + 8015926: 461a mov r2, r3 + 8015928: f7f7 fb5f bl 800cfea <_lseek> + 801592c: 1c43 adds r3, r0, #1 + 801592e: d102 bne.n 8015936 <_lseek_r+0x1e> + 8015930: 682b ldr r3, [r5, #0] + 8015932: b103 cbz r3, 8015936 <_lseek_r+0x1e> + 8015934: 6023 str r3, [r4, #0] + 8015936: bd38 pop {r3, r4, r5, pc} + 8015938: 2000131c .word 0x2000131c + +0801593c <_read_r>: + 801593c: b538 push {r3, r4, r5, lr} + 801593e: 4604 mov r4, r0 + 8015940: 4608 mov r0, r1 + 8015942: 4611 mov r1, r2 + 8015944: 2200 movs r2, #0 + 8015946: 4d05 ldr r5, [pc, #20] @ (801595c <_read_r+0x20>) + 8015948: 602a str r2, [r5, #0] + 801594a: 461a mov r2, r3 + 801594c: f7f7 fb0c bl 800cf68 <_read> + 8015950: 1c43 adds r3, r0, #1 + 8015952: d102 bne.n 801595a <_read_r+0x1e> + 8015954: 682b ldr r3, [r5, #0] + 8015956: b103 cbz r3, 801595a <_read_r+0x1e> + 8015958: 6023 str r3, [r4, #0] + 801595a: bd38 pop {r3, r4, r5, pc} + 801595c: 2000131c .word 0x2000131c + +08015960 <_sbrk_r>: + 8015960: b538 push {r3, r4, r5, lr} + 8015962: 2300 movs r3, #0 + 8015964: 4d05 ldr r5, [pc, #20] @ (801597c <_sbrk_r+0x1c>) + 8015966: 4604 mov r4, r0 + 8015968: 4608 mov r0, r1 + 801596a: 602b str r3, [r5, #0] + 801596c: f7f7 fb4a bl 800d004 <_sbrk> + 8015970: 1c43 adds r3, r0, #1 + 8015972: d102 bne.n 801597a <_sbrk_r+0x1a> + 8015974: 682b ldr r3, [r5, #0] + 8015976: b103 cbz r3, 801597a <_sbrk_r+0x1a> + 8015978: 6023 str r3, [r4, #0] + 801597a: bd38 pop {r3, r4, r5, pc} + 801597c: 2000131c .word 0x2000131c + +08015980 <_write_r>: + 8015980: b538 push {r3, r4, r5, lr} + 8015982: 4604 mov r4, r0 + 8015984: 4608 mov r0, r1 + 8015986: 4611 mov r1, r2 + 8015988: 2200 movs r2, #0 + 801598a: 4d05 ldr r5, [pc, #20] @ (80159a0 <_write_r+0x20>) + 801598c: 602a str r2, [r5, #0] + 801598e: 461a mov r2, r3 + 8015990: f7f4 fc4c bl 800a22c <_write> + 8015994: 1c43 adds r3, r0, #1 + 8015996: d102 bne.n 801599e <_write_r+0x1e> + 8015998: 682b ldr r3, [r5, #0] + 801599a: b103 cbz r3, 801599e <_write_r+0x1e> + 801599c: 6023 str r3, [r4, #0] + 801599e: bd38 pop {r3, r4, r5, pc} + 80159a0: 2000131c .word 0x2000131c + +080159a4 <_close_r>: + 80159a4: b538 push {r3, r4, r5, lr} + 80159a6: 2300 movs r3, #0 + 80159a8: 4d05 ldr r5, [pc, #20] @ (80159c0 <_close_r+0x1c>) + 80159aa: 4604 mov r4, r0 + 80159ac: 4608 mov r0, r1 + 80159ae: 602b str r3, [r5, #0] + 80159b0: f7f7 faf7 bl 800cfa2 <_close> + 80159b4: 1c43 adds r3, r0, #1 + 80159b6: d102 bne.n 80159be <_close_r+0x1a> + 80159b8: 682b ldr r3, [r5, #0] + 80159ba: b103 cbz r3, 80159be <_close_r+0x1a> + 80159bc: 6023 str r3, [r4, #0] + 80159be: bd38 pop {r3, r4, r5, pc} + 80159c0: 2000131c .word 0x2000131c + +080159c4 <_fstat_r>: + 80159c4: b538 push {r3, r4, r5, lr} + 80159c6: 2300 movs r3, #0 + 80159c8: 4d06 ldr r5, [pc, #24] @ (80159e4 <_fstat_r+0x20>) + 80159ca: 4604 mov r4, r0 + 80159cc: 4608 mov r0, r1 + 80159ce: 4611 mov r1, r2 + 80159d0: 602b str r3, [r5, #0] + 80159d2: f7f7 faf1 bl 800cfb8 <_fstat> + 80159d6: 1c43 adds r3, r0, #1 + 80159d8: d102 bne.n 80159e0 <_fstat_r+0x1c> + 80159da: 682b ldr r3, [r5, #0] + 80159dc: b103 cbz r3, 80159e0 <_fstat_r+0x1c> + 80159de: 6023 str r3, [r4, #0] + 80159e0: bd38 pop {r3, r4, r5, pc} + 80159e2: bf00 nop + 80159e4: 2000131c .word 0x2000131c + +080159e8 : + 80159e8: 2006 movs r0, #6 + 80159ea: b508 push {r3, lr} + 80159ec: f000 f8b0 bl 8015b50 + 80159f0: 2001 movs r0, #1 + 80159f2: f7f7 faae bl 800cf52 <_exit> + +080159f6 <_calloc_r>: + 80159f6: b570 push {r4, r5, r6, lr} + 80159f8: fba1 5402 umull r5, r4, r1, r2 + 80159fc: b934 cbnz r4, 8015a0c <_calloc_r+0x16> + 80159fe: 4629 mov r1, r5 + 8015a00: f7ff f938 bl 8014c74 <_malloc_r> + 8015a04: 4606 mov r6, r0 + 8015a06: b928 cbnz r0, 8015a14 <_calloc_r+0x1e> + 8015a08: 4630 mov r0, r6 + 8015a0a: bd70 pop {r4, r5, r6, pc} + 8015a0c: 220c movs r2, #12 + 8015a0e: 2600 movs r6, #0 + 8015a10: 6002 str r2, [r0, #0] + 8015a12: e7f9 b.n 8015a08 <_calloc_r+0x12> + 8015a14: 462a mov r2, r5 + 8015a16: 4621 mov r1, r4 + 8015a18: f7fd ff9a bl 8013950 + 8015a1c: e7f4 b.n 8015a08 <_calloc_r+0x12> + ... + +08015a20 <_free_r>: + 8015a20: b538 push {r3, r4, r5, lr} + 8015a22: 4605 mov r5, r0 + 8015a24: 2900 cmp r1, #0 + 8015a26: d040 beq.n 8015aaa <_free_r+0x8a> + 8015a28: f851 3c04 ldr.w r3, [r1, #-4] + 8015a2c: 1f0c subs r4, r1, #4 + 8015a2e: 2b00 cmp r3, #0 + 8015a30: bfb8 it lt + 8015a32: 18e4 addlt r4, r4, r3 + 8015a34: f7ff fa46 bl 8014ec4 <__malloc_lock> + 8015a38: 4a1c ldr r2, [pc, #112] @ (8015aac <_free_r+0x8c>) + 8015a3a: 6813 ldr r3, [r2, #0] + 8015a3c: b933 cbnz r3, 8015a4c <_free_r+0x2c> + 8015a3e: 6063 str r3, [r4, #4] + 8015a40: 6014 str r4, [r2, #0] + 8015a42: 4628 mov r0, r5 + 8015a44: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8015a48: f7ff ba42 b.w 8014ed0 <__malloc_unlock> + 8015a4c: 42a3 cmp r3, r4 + 8015a4e: d908 bls.n 8015a62 <_free_r+0x42> + 8015a50: 6820 ldr r0, [r4, #0] + 8015a52: 1821 adds r1, r4, r0 + 8015a54: 428b cmp r3, r1 + 8015a56: bf01 itttt eq + 8015a58: 6819 ldreq r1, [r3, #0] + 8015a5a: 685b ldreq r3, [r3, #4] + 8015a5c: 1809 addeq r1, r1, r0 + 8015a5e: 6021 streq r1, [r4, #0] + 8015a60: e7ed b.n 8015a3e <_free_r+0x1e> + 8015a62: 461a mov r2, r3 + 8015a64: 685b ldr r3, [r3, #4] + 8015a66: b10b cbz r3, 8015a6c <_free_r+0x4c> + 8015a68: 42a3 cmp r3, r4 + 8015a6a: d9fa bls.n 8015a62 <_free_r+0x42> + 8015a6c: 6811 ldr r1, [r2, #0] + 8015a6e: 1850 adds r0, r2, r1 + 8015a70: 42a0 cmp r0, r4 + 8015a72: d10b bne.n 8015a8c <_free_r+0x6c> + 8015a74: 6820 ldr r0, [r4, #0] + 8015a76: 4401 add r1, r0 + 8015a78: 1850 adds r0, r2, r1 + 8015a7a: 4283 cmp r3, r0 + 8015a7c: 6011 str r1, [r2, #0] + 8015a7e: d1e0 bne.n 8015a42 <_free_r+0x22> + 8015a80: 6818 ldr r0, [r3, #0] + 8015a82: 685b ldr r3, [r3, #4] + 8015a84: 4408 add r0, r1 + 8015a86: 6010 str r0, [r2, #0] + 8015a88: 6053 str r3, [r2, #4] + 8015a8a: e7da b.n 8015a42 <_free_r+0x22> + 8015a8c: d902 bls.n 8015a94 <_free_r+0x74> + 8015a8e: 230c movs r3, #12 + 8015a90: 602b str r3, [r5, #0] + 8015a92: e7d6 b.n 8015a42 <_free_r+0x22> + 8015a94: 6820 ldr r0, [r4, #0] + 8015a96: 1821 adds r1, r4, r0 + 8015a98: 428b cmp r3, r1 + 8015a9a: bf01 itttt eq + 8015a9c: 6819 ldreq r1, [r3, #0] + 8015a9e: 685b ldreq r3, [r3, #4] + 8015aa0: 1809 addeq r1, r1, r0 + 8015aa2: 6021 streq r1, [r4, #0] + 8015aa4: 6063 str r3, [r4, #4] + 8015aa6: 6054 str r4, [r2, #4] + 8015aa8: e7cb b.n 8015a42 <_free_r+0x22> + 8015aaa: bd38 pop {r3, r4, r5, pc} + 8015aac: 20001318 .word 0x20001318 + +08015ab0 <__ascii_mbtowc>: + 8015ab0: b082 sub sp, #8 + 8015ab2: b901 cbnz r1, 8015ab6 <__ascii_mbtowc+0x6> + 8015ab4: a901 add r1, sp, #4 + 8015ab6: b142 cbz r2, 8015aca <__ascii_mbtowc+0x1a> + 8015ab8: b14b cbz r3, 8015ace <__ascii_mbtowc+0x1e> + 8015aba: 7813 ldrb r3, [r2, #0] + 8015abc: 600b str r3, [r1, #0] + 8015abe: 7812 ldrb r2, [r2, #0] + 8015ac0: 1e10 subs r0, r2, #0 + 8015ac2: bf18 it ne + 8015ac4: 2001 movne r0, #1 + 8015ac6: b002 add sp, #8 + 8015ac8: 4770 bx lr + 8015aca: 4610 mov r0, r2 + 8015acc: e7fb b.n 8015ac6 <__ascii_mbtowc+0x16> + 8015ace: f06f 0001 mvn.w r0, #1 + 8015ad2: e7f8 b.n 8015ac6 <__ascii_mbtowc+0x16> + +08015ad4 <_malloc_usable_size_r>: + 8015ad4: f851 3c04 ldr.w r3, [r1, #-4] + 8015ad8: 1f18 subs r0, r3, #4 + 8015ada: 2b00 cmp r3, #0 + 8015adc: bfbc itt lt + 8015ade: 580b ldrlt r3, [r1, r0] + 8015ae0: 18c0 addlt r0, r0, r3 + 8015ae2: 4770 bx lr + +08015ae4 <__ascii_wctomb>: + 8015ae4: 4603 mov r3, r0 + 8015ae6: 4608 mov r0, r1 + 8015ae8: b141 cbz r1, 8015afc <__ascii_wctomb+0x18> + 8015aea: 2aff cmp r2, #255 @ 0xff + 8015aec: d904 bls.n 8015af8 <__ascii_wctomb+0x14> + 8015aee: 228a movs r2, #138 @ 0x8a + 8015af0: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8015af4: 601a str r2, [r3, #0] + 8015af6: 4770 bx lr + 8015af8: 2001 movs r0, #1 + 8015afa: 700a strb r2, [r1, #0] + 8015afc: 4770 bx lr + +08015afe <_raise_r>: + 8015afe: 291f cmp r1, #31 + 8015b00: b538 push {r3, r4, r5, lr} + 8015b02: 4605 mov r5, r0 + 8015b04: 460c mov r4, r1 + 8015b06: d904 bls.n 8015b12 <_raise_r+0x14> + 8015b08: 2316 movs r3, #22 + 8015b0a: 6003 str r3, [r0, #0] + 8015b0c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff + 8015b10: bd38 pop {r3, r4, r5, pc} + 8015b12: 6bc2 ldr r2, [r0, #60] @ 0x3c + 8015b14: b112 cbz r2, 8015b1c <_raise_r+0x1e> + 8015b16: f852 3021 ldr.w r3, [r2, r1, lsl #2] + 8015b1a: b94b cbnz r3, 8015b30 <_raise_r+0x32> + 8015b1c: 4628 mov r0, r5 + 8015b1e: f000 f831 bl 8015b84 <_getpid_r> + 8015b22: 4622 mov r2, r4 + 8015b24: 4601 mov r1, r0 + 8015b26: 4628 mov r0, r5 + 8015b28: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} + 8015b2c: f000 b818 b.w 8015b60 <_kill_r> + 8015b30: 2b01 cmp r3, #1 + 8015b32: d00a beq.n 8015b4a <_raise_r+0x4c> + 8015b34: 1c59 adds r1, r3, #1 + 8015b36: d103 bne.n 8015b40 <_raise_r+0x42> + 8015b38: 2316 movs r3, #22 + 8015b3a: 6003 str r3, [r0, #0] + 8015b3c: 2001 movs r0, #1 + 8015b3e: e7e7 b.n 8015b10 <_raise_r+0x12> + 8015b40: 2100 movs r1, #0 + 8015b42: 4620 mov r0, r4 + 8015b44: f842 1024 str.w r1, [r2, r4, lsl #2] + 8015b48: 4798 blx r3 + 8015b4a: 2000 movs r0, #0 + 8015b4c: e7e0 b.n 8015b10 <_raise_r+0x12> + ... + +08015b50 : + 8015b50: 4b02 ldr r3, [pc, #8] @ (8015b5c ) + 8015b52: 4601 mov r1, r0 + 8015b54: 6818 ldr r0, [r3, #0] + 8015b56: f7ff bfd2 b.w 8015afe <_raise_r> + 8015b5a: bf00 nop + 8015b5c: 20000084 .word 0x20000084 + +08015b60 <_kill_r>: + 8015b60: b538 push {r3, r4, r5, lr} + 8015b62: 2300 movs r3, #0 + 8015b64: 4d06 ldr r5, [pc, #24] @ (8015b80 <_kill_r+0x20>) + 8015b66: 4604 mov r4, r0 + 8015b68: 4608 mov r0, r1 + 8015b6a: 4611 mov r1, r2 + 8015b6c: 602b str r3, [r5, #0] + 8015b6e: f7f7 f9e0 bl 800cf32 <_kill> + 8015b72: 1c43 adds r3, r0, #1 + 8015b74: d102 bne.n 8015b7c <_kill_r+0x1c> + 8015b76: 682b ldr r3, [r5, #0] + 8015b78: b103 cbz r3, 8015b7c <_kill_r+0x1c> + 8015b7a: 6023 str r3, [r4, #0] + 8015b7c: bd38 pop {r3, r4, r5, pc} + 8015b7e: bf00 nop + 8015b80: 2000131c .word 0x2000131c + +08015b84 <_getpid_r>: + 8015b84: f7f7 b9ce b.w 800cf24 <_getpid> + +08015b88 <_init>: + 8015b88: b5f8 push {r3, r4, r5, r6, r7, lr} + 8015b8a: bf00 nop + 8015b8c: bcf8 pop {r3, r4, r5, r6, r7} + 8015b8e: bc08 pop {r3} + 8015b90: 469e mov lr, r3 + 8015b92: 4770 bx lr + +08015b94 <_fini>: + 8015b94: b5f8 push {r3, r4, r5, r6, r7, lr} + 8015b96: bf00 nop + 8015b98: bcf8 pop {r3, r4, r5, r6, r7} + 8015b9a: bc08 pop {r3} + 8015b9c: 469e mov lr, r3 + 8015b9e: 4770 bx lr diff --git a/Debug/CCSModuleSW30Web.srec b/Debug/CCSModuleSW30Web.srec new file mode 100755 index 0000000..c419048 --- /dev/null +++ b/Debug/CCSModuleSW30Web.srec @@ -0,0 +1,3683 @@ +S01800004343534D6F64756C65535733305765622E73726563A2 +S3150800800000000120D5D700082DCE000835CE00087F +S315080080103DCE000845CE00084DCE00080000000001 +S3150800802000000000000000000000000055CE000817 +S3150800803061CE0008000000006DCE000879CE000869 +S3150800804025D8000825D8000825D8000825D800080E +S3150800805025D8000825D8000825D8000825D80008FE +S3150800806025D8000825D8000825D8000825D80008EE +S3150800807025D8000825D8000825D8000825D80008DE +S3150800808025D8000825D8000825D8000825D80008CE +S3150800809085CE000825D8000825D8000825D8000868 +S315080080A025D8000825D8000825D8000825D80008AE +S315080080B025D8000899CE000825D8000825D8000834 +S315080080C025D8000825D8000825D8000825D800088E +S315080080D025D80008ADCE0008C1CE0008D5CE0008C8 +S315080080E025D8000825D8000825D800080000000073 +S315080080F00000000000000000000000000000000072 +S31508008100000000000000000025D8000825D8000857 +S3150800811025D80008E9CE000825D8000825D8000883 +S3150800812025D8000825D8000825D8000825D800082D +S3150800813025D8000825D8000825D80008FDCE00084F +S3150800814025D8000811CF000825D8000825D800082A +S315080081500000000000000000000000000000000011 +S315080081600000000000000000000000000000000001 +S3150800817000000000000000000000000000000000F1 +S3150800818000000000000000000000000000000000E1 +S3150800819000000000000000000000000000000000D1 +S315080081A000000000000000000000000000000000C1 +S315080081B000000000000000000000000000000000B1 +S315080081C000000000000000000000000000000000A1 +S315080081D00000000000000000000000000000000091 +S30D080081E05FF8E0F166666666C9 +S315080081E810B5054C237833B9044B13B10448AFF3DB +S315080081F800800123237010BD400200200000000003 +S31508008208885B010808B5034B1BB103490348AFF35C +S31508008218008008BD0000000044020020885B0108B1 +S31508008228034613F8012B002AFBD1181A01387047A0 +S3150800823881F0004102E000BF83F0004330B54FEA01 +S3150800824841044FEA430594EA050F08BF90EA020F6E +S315080082581FBF54EA000C55EA020C7FEA645C7FEA01 +S31508008268655C00F0E2804FEA5454D4EB5555B8BF24 +S315080082786D420CDD2C4480EA020281EA030382EA95 +S31508008288000083EA010180EA020281EA0303362D27 +S3150800829888BF30BD11F0004F4FEA01314FF4801CFA +S315080082A84CEA113102D0404261EB410113F0004F0C +S315080082B84FEA03334CEA133302D0524263EB4303C3 +S315080082C894EA050F00F0A780A4F10104D5F1200E61 +S315080082D80DDB02FA0EFC22FA05F2801841F10001BC +S315080082E803FA0EF2801843FA05F359410EE0A5F190 +S315080082F820050EF1200E012A03FA0EFC28BF4CF0C1 +S31508008308020C43FA05F3C01851EBE37101F0004576 +S3150800831807D54FF0000EDCF1000C7EEB00006EEB83 +S315080083280101B1F5801F1BD3B1F5001F0CD349080D +S315080083385FEA30004FEA3C0C04F101044FEA445264 +S3150800834812F5800F80F09A80BCF1004F08BF5FEAEB +S31508008358500C50F1000041EB045141EA050130BDCB +S315080083685FEA4C0C404141EB0101013C28BFB1F5DD +S31508008378801FE9D291F0000F04BF01460020B1FA28 +S3150800838881F308BF2033A3F10B03B3F120020CDAFB +S315080083980C3208DD02F1140CC2F10C0201FA0CF0D9 +S315080083A821FA02F10CE002F11402D8BFC2F1200C3E +S315080083B801FA02F120FA0CFCDCBF41EA0C019040F4 +S315080083C8E41AA2BF01EB0451294330BD6FEA04043D +S315080083D81F3C1CDA0C340EDC04F11404C4F1200228 +S315080083E820FA04F001FA02F340EA030021FA04F33A +S315080083F845EA030130BDC4F10C04C4F1200220FA91 +S3150800840802F001FA04F340EA0300294630BD21FACE +S3150800841804F0294630BD94F0000F83F4801306BF94 +S3150800842881F480110134013D4EE77FEA645C18BF88 +S315080084387FEA655C29D094EA050F08BF90EA020F1F +S3150800844805D054EA000C04BF1946104630BD91EA17 +S31508008458030F1EBF0021002030BD5FEA545C05D11A +S315080084684000494128BF41F0004130BD14F5800459 +S315080084783CBF01F5801130BD01F0004545F0FE41CD +S3150800848841F470014FF0000030BD7FEA645C1ABF02 +S31508008498194610467FEA655C1CBF0B46024650EA39 +S315080084A8013406BF52EA033591EA030F41F4002165 +S315080084B830BD00BF90F0000F04BF0021704730B5EB +S315080084C84FF4806404F132044FF000054FF00001C0 +S315080084D850E700BF90F0000F04BF0021704730B581 +S315080084E84FF4806404F1320410F0004548BF404256 +S315080084F84FF000013EE700BF42004FEAE2014FEAAB +S3150800850831014FEA02701FBF12F07F4393F07F4F85 +S3150800851881F06051704732F07F4208BF704793F088 +S315080085287F4F04BF41F40021704730B54FF460749B +S3150800853801F0004521F000411CE700BF50EA01029E +S3150800854808BF704730B54FF000050AE050EA010247 +S3150800855808BF704730B511F0004502D5404261EBB7 +S3150800856841014FF4806404F132045FEA915C3FF4F8 +S31508008578D8AE4FF003025FEADC0C18BF03325FEA95 +S31508008588DC0C18BF033202EBDC02C2F1200300FA46 +S3150800859803FC20FA02F001FA03FE40EA0E0021FA6B +S315080085A802F11444BDE600BF70B54FF0FF0C4CF459 +S315080085B8E06C1CEA11541DBF1CEA135594EA0C0F0B +S315080085C895EA0C0F00F0DEF82C4481EA030621EA46 +S315080085D84C5123EA4C5350EA013518BF52EA033581 +S315080085E841F4801143F4801338D0A0FB02CE4FF033 +S315080085F80005E1FB02E506F00042E0FB03E54FF063 +S315080086080006E1FB03569CF0000F18BF4EF0010E5A +S31508008618A4F1FF04B6F5007F64F5407404D25FEA56 +S315080086284E0E6D4146EB060642EAC62141EA555109 +S315080086384FEAC52040EA5E504FEACE2EB4F1FD0C4B +S3150800864888BFBCF5E06F1ED8BEF1004F08BF5FEAC9 +S31508008658500E50F1000041EB045170BD06F000467B +S3150800866846EA010140EA020081EA0301B4EB5C0428 +S31508008678C2BFD4EB0C0541EA045170BD41F4801120 +S315080086884FF0000E013C00F3AB8014F1360FDEBF45 +S31508008698002001F0004170BDC4F10004203C35DA21 +S315080086A80C341BDC04F11404C4F1200500FA05F3A4 +S315080086B820FA04F001FA05F240EA020001F0004245 +S315080086C821F0004110EBD37021FA04F642EB0601BB +S315080086D85EEA430E08BF20EAD37070BDC4F10C04E5 +S315080086E8C4F1200500FA04F320FA05F001FA04F2A9 +S315080086F840EA020001F0004110EBD37041F1000195 +S315080087085EEA430E08BF20EAD37070BDC4F120059F +S3150800871800FA05F24EEA020E20FA04F301FA05F207 +S3150800872843EA020321FA04F001F0004121FA04F2AF +S3150800873820EA020000EBD3705EEA430E08BF20EA7F +S31508008748D37070BD94F0000F0FD101F000464000B9 +S3150800875841EB010111F4801F08BF013CF7D041EA3B +S31508008768060195F0000F18BF704703F0004652003F +S3150800877843EB030313F4801F08BF013DF7D043EA10 +S315080087880603704794EA0C0F0CEA135518BF95EAC6 +S315080087980C0F0CD050EA410618BF52EA4306D1D14D +S315080087A881EA030101F000414FF0000070BD50EA6C +S315080087B8410606BF1046194652EA430619D094EAF6 +S315080087C80C0F02D150EA013613D195EA0C0F05D1E0 +S315080087D852EA03361CBF104619460AD181EA030134 +S315080087E801F0004141F0FE4141F470014FF00000EC +S315080087F870BD41F0FE4141F4780170BD70B54FF087 +S31508008808FF0C4CF4E06C1CEA11541DBF1CEA135506 +S3150800881894EA0C0F95EA0C0F00F0A7F8A4EB0504E8 +S3150800882881EA030E52EA03354FEA013100F08880DF +S315080088384FEA03334FF0805545EA131343EA1263A8 +S315080088484FEA022245EA111545EA10654FEA00265D +S315080088580EF000419D4208BF964244F1FD0404F516 +S31508008868407402D25B084FEA3202B61A65EB030572 +S315080088785B084FEA32024FF480104FF4002CB6EB2F +S31508008888020E75EB030E22BFB61A754640EA0C00AF +S315080088985B084FEA3202B6EB020E75EB030E22BFEF +S315080088A8B61A754640EA5C005B084FEA3202B6EB30 +S315080088B8020E75EB030E22BFB61A754640EA9C00EF +S315080088C85B084FEA3202B6EB020E75EB030E22BFBF +S315080088D8B61A754640EADC0055EA060E18D04FEA7D +S315080088E8051545EA16754FEA06164FEAC30343EA1D +S315080088F852734FEAC2025FEA1C1CC0D111F4801FEA +S315080089080BD141EA00014FF000004FF0004CB6E7E2 +S3150800891811F4801F04BF01430020B4F1FD0C88BF81 +S31508008928BCF5E06F3FF6AFAEB5EB030C04BFB6EB8C +S31508008938020C5FEA500C50F1000041EB045170BD7F +S315080089480EF0004E4EEA113114EB5C04C2BFD4EBAC +S315080089580C0541EA045170BD41F480114FF0000E30 +S31508008968013C90E645EA060E8DE60CEA135594EAAC +S315080089780C0F08BF95EA0C0F3FF43BAF94EA0C0FAF +S315080089880AD150EA01347FF434AF95EA0C0F7FF424 +S3150800899825AF104619462CE795EA0C0F06D152EA78 +S315080089A803353FF4FDAE1046194622E750EA41065C +S315080089B818BF52EA43067FF4C5AE50EA41047FF46D +S315080089C80DAF52EA43057FF4EBAE12E74FF0FF3CD2 +S315080089D806E000BF4FF0010C02E000BF4FF0010CA3 +S315080089E84DF804CD4FEA410C7FEA6C5C4FEA430C1C +S315080089F818BF7FEA6C5C1BD001B050EA410C0CBF6B +S31508008A0852EA430C91EA030F02BF90EA020F0020CC +S31508008A18704710F1000F91EA030F58BF994208BF33 +S31508008A2890422CBFD8176FEAE37040F001007047F0 +S31508008A384FEA410C7FEA6C5C02D150EA013C07D147 +S31508008A484FEA430C7FEA6C5CD6D152EA033CD3D092 +S31508008A585DF8040B704700BF8446104662468C468C +S31508008A681946634600E000BF01B5FFF7B7FF0028BF +S31508008A7848BF10F1000F01BD4DF808EDFFF7F4FFE8 +S31508008A880CBF012000205DF808FB00BF4DF808ED73 +S31508008A98FFF7EAFF34BF012000205DF808FB00BF96 +S31508008AA84DF808EDFFF7E0FF94BF012000205DF8B8 +S31508008AB808FB00BF4DF808EDFFF7CEFF94BF01206D +S31508008AC800205DF808FB00BF4DF808EDFFF7C4FF66 +S31508008AD834BF012000205DF808FB00BF4FEA410CAF +S31508008AE87FEA6C5C02D150EA013C0AD14FEA430C92 +S31508008AF87FEA6C5C02D152EA033C02D14FF00000CF +S31508008B0870474FF0010070474FEA410212F500120C +S31508008B1815D211D56FF47873B3EB625212D94FEAAE +S31508008B28C12343F0004343EA505311F0004F23FA98 +S31508008B3802F018BF404270474FF00000704750EAED +S31508008B48013005D111F0004008BF6FF000407047AA +S31508008B584FF00000704700BF4FEA4102B2F1E04308 +S31508008B6824BFB3F5001CDCF1FE5C0DD901F0004CFE +S31508008B784FEAC0024CEA5070B2F1004F40EB83004E +S31508008B8808BF20F00100704711F0804F21D113F17A +S31508008B983872BCBF01F00040704741F480114FEAB3 +S31508008BA85252C2F11802C2F1200C10FA0CF320FA3C +S31508008BB802F018BF40F001004FEAC1234FEAD32359 +S31508008BC803FA0CFC40EA0C0023FA02F34FEA4303C3 +S31508008BD8CCE77FEA625307D150EA01331EBF4FF04C +S31508008BE8FE4040F44000704701F0004040F0FE4067 +S31508008BF840F40000704700BF80F0004002E000BF64 +S31508008C0881F0004142001FBF5FEA410392EA030F61 +S31508008C187FEA226C7FEA236C6AD04FEA1262D2EBAB +S31508008C281363C1BFD218414048404140B8BF5B42B0 +S31508008C38192B88BF704710F0004F40F4000020F049 +S31508008C487F4018BF404211F0004F41F4000121F05F +S31508008C587F4118BF494292EA030F3FD0A2F10102A9 +S31508008C6841FA03FC10EB0C00C3F1200301FA03F1E7 +S31508008C7800F0004302D5494260EB4000B0F5000F0A +S31508008C8813D3B0F1807F06D340084FEA310102F1C9 +S31508008C980102FE2A51D2B1F1004F40EBC25008BF7B +S31508008CA820F0010040EA03007047490040EB000045 +S31508008CB8013A28BFB0F5000FEDD2B0FA80FCACF146 +S31508008CC8080CB2EB0C0200FA0CF0AABF00EBC25073 +S31508008CD852421843BCBFD0401843704792F0000F61 +S31508008CE881F4000106BF80F400000132013BB5E7B4 +S31508008CF84FEA41037FEA226C18BF7FEA236C21D02A +S31508008D0892EA030F04D092F0000F08BF084670478E +S31508008D1890EA010F1CBF0020704712F07F4F04D15C +S31508008D28400028BF40F00040704712F100723CBF6F +S31508008D3800F50000704700F0004343F0FE4040F499 +S31508008D48000070477FEA226216BF08467FEA236357 +S31508008D580146420206BF5FEA412390EA010F40F442 +S31508008D68800070474FF0000304E000BF10F000438E +S31508008D7848BF40425FEA000C08BF704743F0964375 +S31508008D8801464FF000001CE050EA010208BF704790 +S31508008D984FF000030AE000BF50EA010208BF704717 +S31508008DA811F0004302D5404261EB41015FEA010C2C +S31508008DB802BF84460146002043F0B64308BFA3F124 +S31508008DC88053A3F50003BCFA8CF2083AA3EBC25306 +S31508008DD810DB01FA02FC634400FA02FCC2F1200225 +S31508008DE8BCF1004F20FA02F243EB020008BF20F05C +S31508008DF80100704702F1200201FA02FCC2F12002C2 +S31508008E0850EA4C0021FA02F243EB020008BF20EAB6 +S31508008E18DC7070474FF0FF0C1CEAD0521EBF1CEAE4 +S31508008E28D15392EA0C0F93EA0C0F6FD01A4480EAD2 +S31508008E38010C400218BF5FEA41211ED04FF00063BB +S31508008E4843EA501043EA5111A0FB01310CF00040E7 +S31508008E58B1F5000F3EBF490041EAD3715B0040EA0D +S31508008E68010062F17F02FD2A1DD8B3F1004F40EBDD +S31508008E78C25008BF20F00100704790F0000F0CF0B0 +S31508008E88004C08BF49024CEA502040EA51207F3A74 +S31508008E98C2BFD2F1FF0340EAC250704740F400004F +S31508008EA84FF00003013A5DDC12F1190FDCBF00F040 +S31508008EB800407047C2F10002410021FA02F1C2F1EE +S31508008EC8200200FA02FC5FEA310040F1000053EA8A +S31508008ED84C0308BF20EADC70704792F0000F00F0D8 +S31508008EE8004C02BF400010F4000F013AF9D040EADE +S31508008EF80C0093F0000F01F0004C02BF490011F472 +S31508008F08000F013BF9D041EA0C018FE70CEAD1536F +S31508008F1892EA0C0F18BF93EA0C0F0AD030F0004CEF +S31508008F2818BF31F0004CD8D180EA010000F00040A3 +S31508008F38704790F0000F17BF90F0004F084691F061 +S31508008F48000F91F0004F14D092EA0C0F01D142029B +S31508008F580FD193EA0C0F03D14B0218BF084608D164 +S31508008F6880EA010000F0004040F0FE4040F40000AE +S31508008F78704740F0FE4040F4400070474FF0FF0C41 +S31508008F881CEAD0521EBF1CEAD15392EA0C0F93EA88 +S31508008F980C0F69D0A2EB030280EA010C49024FEADA +S31508008FA8402037D04FF0805343EA111143EA101393 +S31508008FB80CF000408B4238BF5B0042F17D024FF44B +S31508008FC8000C8B4224BF5B1A40EA0C00B3EB510F26 +S31508008FD824BFA3EB510340EA5C00B3EB910F24BF0F +S31508008FE8A3EB910340EA9C00B3EBD10F24BFA3EB94 +S31508008FF8D10340EADC001B0118BF5FEA1C1CE0D15C +S31508009008FD2A3FF650AF8B4240EBC25008BF20F00E +S31508009018010070470CF0004C4CEA50207F32C2BF62 +S31508009028D2F1FF0340EAC250704740F400004FF0FF +S315080090380003013A37E792F0000F00F0004C02BF30 +S31508009048400010F4000F013AF9D040EA0C0093F0FA +S31508009058000F01F0004C02BF490011F4000F013B54 +S31508009068F9D041EA0C0195E70CEAD15392EA0C0FBC +S3150800907808D142027FF47DAF93EA0C0F7FF470AFF4 +S31508009088084676E793EA0C0F04D14B023FF44CAF37 +S3150800909808466EE730F0004C18BF31F0004CCAD1CC +S315080090A830F000427FF45CAF31F000437FF43CAF08 +S315080090B85FE700BF4FF0FF3C06E000BF4FF0010C2A +S315080090C802E000BF4FF0010C4DF804CD4FEA40020C +S315080090D84FEA41037FEA226C18BF7FEA236C11D056 +S315080090E801B052EA530C18BF90EA010F58BFB2EB09 +S315080090F8030088BFC81738BF6FEAE17018BF40F089 +S31508009108010070477FEA226C02D15FEA402C05D13C +S315080091187FEA236CE4D15FEA412CE1D05DF8040BC1 +S31508009128704700BF844608466146FFE70FB5FFF754 +S31508009138C9FF002848BF10F1000F0FBD4DF808ED0C +S31508009148FFF7F4FF0CBF012000205DF808FB00BFFD +S315080091584DF808EDFFF7EAFF34BF012000205DF857 +S3150800916808FB00BF4DF808EDFFF7E0FF94BF0120A4 +S3150800917800205DF808FB00BF4DF808EDFFF7D2FFA1 +S3150800918894BF012000205DF808FB00BF4DF808EDE4 +S31508009198FFF7C8FF34BF012000205DF808FB00BFB1 +S315080091A84FEA4002B2F1FE4F0FD34FF09E03B3EBDE +S315080091B812620DD94FEA002343F0004310F0004F1E +S315080091C823FA02F018BF404270474FF00000704774 +S315080091D812F1610F01D1420205D110F0004008BF13 +S315080091E86FF0004070474FF00000704753B94AB90E +S315080091F8002908BF00281CBF4FF0FF314FF0FF3089 +S3150800920800F08CB9ADF1080C6DE904CE00F006F84B +S31508009218DDF804E0DDE9022304B070472DE9F047DC +S31508009228089D8E4604468846002B4AD18A42174628 +S3150800923862D9B2FA82F64EB1C6F1200301FA06F8E7 +S3150800924820FA03F3B74043EA0808B4404FEA174E32 +S31508009258B8FBFEF11FFA87FC0EFB118801FB0CF21E +S31508009268230C43EA08439A4209D9FB1801F1FF304F +S3150800927880F0EB809A4240F2E88002393B449A1A19 +S31508009288B2FBFEF00EFB102200FB0CFCA3B243EA6D +S3150800929802439C4509D9FB1800F1FF3280F0D780B4 +S315080092A89C4540F2D4803B44023840EA01400021FC +S315080092B8A3EB0C031DB10022F340C5E90032BDE853 +S315080092C8F0878B4205D90DB1C5E90001002108468A +S315080092D8F5E7B3FA83F1002946D1734502D38242EA +S315080092E800F20881841A6EEB030201209046002DCD +S315080092F8E5D0C5E90048E2E7002A00F09180B2FA0D +S3150800930882F6002E40F0A5808A1A0121030C4FEA3E +S31508009318174E80B2BCB2B2FBFEFC0EFB1C2243EA17 +S31508009328024304FB0CF29A4207D9FB180CF1FF38E2 +S3150800933802D29A4200F2E380C4469B1AB3FBFEF2B5 +S315080093480EFB123302FB04F440EA03439C4207D996 +S31508009358FB1802F1FF3002D29C4200F2CD80024689 +S315080093681B1B42EA0C40A5E7C1F120068B4022FAEE +S3150800937806F71F432EFA06FA4FEA1749BAFBF9F811 +S315080093880EFA01FE20FA06F309FB18AA1FFA87FC4B +S3150800939843EA0E0300FA01FE08FB0CF01C0C44EA2B +S315080093A80A44A04202FA01F20AD93C1908F1FF3A1E +S315080093B880F09E80A04240F29B80A8F102083C44B7 +S315080093C8241A98B2B4FBF9F309FB134403FB0CFC03 +S315080093D840EA0444A44509D93C1903F1FF3080F052 +S315080093E88580A44540F28280023B3C4443EA084013 +S315080093F8A4EB0C04A0FB028C64454346E14664D3FF +S3150800940861D05DB1BEEB030264EB090404FA06F603 +S3150800941822FA01F31E43CC40C5E9006400214EE751 +S31508009428B1FBF2FC010C41EA0E4180B240EA014266 +S315080094383B46B1FBF7F138463C46B846BE462026B9 +S31508009448A2EB080241EA0C4165E7014617E7104610 +S315080094582BE7C6F120012EFA01FCB7400EFA06FEE4 +S3150800946820FA01F141EA0E014FEA174EBCFBFEF855 +S31508009478BCB20EFB18CC08FB04F90A0C42EA0C42EB +S31508009488B04091454FEA104380B23ED9BA1808F160 +S31508009498FF3C01D291451FD8A2EB0902B2FBFEF99F +S315080094A809FB04F80EFB192A8AB242EA0A4242451F +S315080094B829D2BA1809F1FF31C2D24245C0D2A9F158 +S315080094C802013A44BCE7C6459BD2B8EB02036CEBEB +S315080094D8070C0138E14694E7A7EB09094A44B2FBA9 +S315080094E8FEF9A8F1020C09FB04F8DBE703467DE759 +S315080094F8D04665E70846FAE63B44023A30E7ACF157 +S31508009508020C3B4419E749469AE7A2EB0902B2FB63 +S31508009518FEF9C44609FB04F8C4E700BF704700BF54 +S3150800952880B584B000AF3B1D00221A605A609A6065 +S31508009538184B194A1A60174B00229A60154B0022D5 +S315080095481A73144B00221A75124B4FF46022DA610B +S31508009558104B00225A600F4B01221A610D4804F07D +S31508009568E5F90346002B01D001F002FA08237B60CF +S315080095780123BB600023FB603B1D1946054804F020 +S3150800958899FC0346002B01D001F0F2F900BF103709 +S31508009598BD4680BD5C0200200024014080B58AB023 +S315080095A800AF786007F1180300221A605A609A60BB +S315080095B8DA607B681B681F4A934237D11E4B9B6942 +S315080095C81D4A43F4007393611B4B9B6903F40073AC +S315080095D87B617B69184B9B69174A43F004039361BF +S315080095E8154B9B6903F004033B613B69124B9B6966 +S315080095F8114A43F0080393610F4B9B6903F008036C +S31508009608FB60FB681823BB610323FB6107F118039A +S3150800961819460A4805F0D2FF0323BB610323FB61F9 +S3150800962807F118031946064805F0C8FF00BF28378A +S31508009638BD4680BD002401400010024000080140D4 +S31508009648000C014080B582B000AF03460A46FB719C +S315080096581346BB71FB79072B50D801A252F823F0A1 +S315080096688996000899960008A9960008B9960008E8 +S31508009678C9960008D9960008E7960008F7960008DC +S31508009688BB791A464FF48071214806F032F936E05C +S31508009698BB791A464FF400711D4806F02AF92EE0E0 +S315080096A8BB791A464FF48061194806F022F926E074 +S315080096B8BB791A464FF40061154806F01AF91EE0F8 +S315080096C8BB791A464FF48051114806F012F916E08C +S315080096D8BB791A4608210F4806F00BF90FE0BB7943 +S315080096E81A464FF400410C4806F003F907E0BB791F +S315080096F81A460821094806F0FCF800E000BFFB797D +S315080097080749BA79CA5400BF0837BD4680BD00BFA5 +S3150800971800180140001001400008014000140140EB +S315080097288C02002080B483B000AF0346FB71FB7936 +S31508009738034AD35C18460C37BD4680BC704700BF41 +S315080097488C02002080B582B000AF0346FB71FB7916 +S31508009758062B3BD801A252F823F000BF81970008D0 +S315080097688D97000899970008A5970008B1970008EB +S31508009778BD970008C99700080221174806F0A2F8FD +S31508009788034624E00421144806F09CF803461EE024 +S315080097988021124806F096F8034618E080211048FA +S315080097A806F090F8034612E010210E4806F08AF8EB +S315080097B803460CE008210B4806F084F8034606E041 +S315080097C80221064806F07EF8034600E000231846FC +S315080097D80837BD4680BD00BF000801400018014093 +S315080097E800140140000C014080B500AF154804F08C +S315080097F8F5FC00210020FFF725FF00210120FFF7CF +S3150800980821FF00210220FFF71DFF00210320FFF793 +S3150800981819FF00210420FFF715FF01210520FFF78E +S3150800982811FF01210620FFF70DFF00210720FFF78A +S3150800983809FF054803F038FA044803F035FA00BF6B +S3150800984880BD00BF5C02002098020020C0020020EC +S3150800985890B587B000AF78600C4B7B610C4B3B61C9 +S3150800986879697868FFF7CCF903461C463969786937 +S31508009878FFF7D0FA034619462046FFF77FFB03464B +S31508009888FB60FB6818461C37BD4690BD00007A4445 +S315080098983211803B00000000B0B586B000AFF86012 +S315080098A8B9607A603B60F868FEF714FE1CA3D3E932 +S315080098B80023FEF7A3FF02460B4614461D46B86862 +S315080098C8FEF71AFE02460B4620462946FEF76CFEA8 +S315080098D802460B4610461946FFF73EF903467B61D2 +S315080098E879687869FFF748FC0346002B01D00E4BC8 +S315080098F810E079697868FFF783F9034619467869A5 +S31508009908FFF73CFB034619463868FFF783FA034610 +S315080099183B613B6918461837BD46B0BDAFF30080B2 +S315080099280000000000FEAF40000080BF80B588B088 +S3150800993800AF0346FB7100F09BF8FB79002B03D0B8 +S31508009948082000F053F802E0092000F04FF82248F2 +S3150800995804F0C4F84FF0FF311F4804F099F91E487F +S3150800996804F09CFAF8611C4804F066F9FB79002BA8 +S3150800997801D0012200E0002213469B001344DB00B5 +S31508009988164A1344FA691146184603F0B2F9B8613B +S31508009998BB69B3F57A6F03D900F076F8142317E094 +S315080099A80F4B7B610F4B3B610F4BFB60FB683A69BA +S315080099B87969B869FFF770FF03461846FFF748FF45 +S315080099C8B86000F061F8B868FFF7EAFB03461BB20F +S315080099D818462037BD4680BD5C0200209802002044 +S315080099E8333353400000A04000007A4480B586B05F +S315080099F800AF78607B68FB6001233B6103237B61CA +S31508009A0807F10C031946064804F054FA0346002BD6 +S31508009A1801D000F0ADFF00BF1837BD4680BD00BFB6 +S31508009A285C02002080B483B000AFEFF310833B607C +S31508009A383B687B6072B600BF0C4B1B78DBB2002B09 +S31508009A4806D07B68002B01D162B600BF002308E068 +S31508009A58064B01221A707B68002B01D162B600BF3B +S31508009A68012318460C37BD4680BC7047940200206F +S31508009A7880B500AF00BFFFF7D5FF0346002BFAD025 +S31508009A8800BF00BF80BD000080B483B000AFEFF30D +S31508009A9810833B603B687B6072B600BF064B0022AA +S31508009AA81A707B68002B01D162B600BF00BF0C375D +S31508009AB8BD4680BC704700BF9402002080B500AF41 +S31508009AC8174B184A1A60164B08225A60144B00227C +S31508009AD89A60134B0022DA60114B4FF460221A6120 +S31508009AE80F4B4FF480125A610D4B00221A760C4B15 +S31508009AF801225A760A4B01229A76094B0122DA760E +S31508009B08074B00221A77064B01225A77044804F0B5 +S31508009B1813FC0346002B01D000F02AFF00BF80BDC6 +S31508009B28E80200200064004080B500AF174B184AC9 +S31508009B381A60164B10225A60144B00229A60134B6F +S31508009B480022DA60114B4FF460221A610F4B4FF46A +S31508009B5880125A610D4B00221A760C4B01225A764E +S31508009B680A4B01229A76094B0122DA76074B00221C +S31508009B781A77064B01225A77044804F0DDFB034698 +S31508009B88002B01D000F0F4FE00BF80BD10030020B2 +S31508009B980068004080B58EB000AF786007F12003F2 +S31508009BA800221A605A609A60DA607B681B68614A04 +S31508009BB8934253D1604B1B6801335F4A13605E4B6F +S31508009BC81B68012B0BD15D4BDB695C4A43F00073BC +S31508009BD8D3615A4BDB6903F00073FB61FB69574B8A +S31508009BE89B69564A43F020039361544B9B6903F0DB +S31508009BF82003BB61BB6901233B6200237B62002308 +S31508009C08BB6207F1200319464D4805F0D7FC022325 +S31508009C183B6202237B620323FB6207F12003194692 +S31508009C28474805F0CBFC474B5B683B633B6B23F423 +S31508009C38C0433B633B6B43F0E0633B633B6B43F4D6 +S31508009C48C0433B633F4A3B6B536000220021142004 +S31508009C5805F01FFB142005F038FB67E07B681B68D6 +S31508009C68394A934262D1354BDB69344A43F08063FB +S31508009C78D361324BDB6903F080637B617B692E4BCA +S31508009C881B6801332C4A13602B4B1B68012B0BD11D +S31508009C982A4BDB69294A43F00073D361274BDB69F2 +S31508009CA803F000733B613B69244B9B69234A43F0E5 +S31508009CB808039361214B9B6903F00803FB60FB6863 +S31508009CC820233B6200237B620023BB6207F1200343 +S31508009CD819461E4805F072FC40233B6202237B6244 +S31508009CE80323FB6207F120031946184805F066FCAA +S31508009CF8144B5B687B637B6B43F0E0637B637B6B2E +S31508009D0843F480037B630F4A7B6B53600022002170 +S31508009D183F2005F0BEFA3F2005F0D7FA00220021B9 +S31508009D28412005F0B6FA412005F0CFFA00BF3837CA +S31508009D38BD4680BD0064004038030020001002407C +S31508009D48001401400000014000680040000C014072 +S31508009D5880B400AF084B00221A70074B00225A70CD +S31508009D68054B002262F06902DA7300221A7400BFF2 +S31508009D78BD4680BC704700BF3C03002080B500AFD5 +S31508009D881A4B5A781A4B1B789A4206D0174B5A78A8 +S31508009D98174B1A70154B00221A70164B1B7B002B93 +S31508009DA803D0124B07225A770EE0124B5B7B002B27 +S31508009DB803D00E4B0A225A7706E00C4B9B7F002BE2 +S31508009DC802D10A4B00225A77084B5B7F00211846B6 +S31508009DD800F066FC0346002B06D0044B5B7F1A4648 +S31508009DE80021054809F09EFD00BF80BD3C03002000 +S31508009DF85C03002084080020A05B010880B500AF3A +S31508009E080D4B5B7F002B03D0022000F019F812E0F7 +S31508009E180A4B1B78002B03D1012000F011F80AE041 +S31508009E28064B1B78022B06D1034B5B7F002B02D10E +S31508009E38012000F005F880BD3C0300205B030020E4 +S31508009E4880B582B000AF0346FB71414B1B78FA799F +S31508009E589A4203D13F4AFB79537075E03C4AFB792D +S31508009E6813703B4B1B78002B03D13B49072000F0A6 +S31508009E78BFFA374B1B78012B03D13849072000F066 +S31508009E88B7FA334B1B78022B03D13549072000F064 +S31508009E98AFFA2F4B1B78032B03D13249072000F062 +S31508009EA8A7FA2B4B1B78042B03D12F49072000F060 +S31508009EB89FFA274B1B78052B03D12C49072000F05E +S31508009EC897FA234B1B78062B03D12949072000F05C +S31508009ED88FFA1F4B1B78072B03D12649072000F05A +S31508009EE887FA1B4B1B78082B03D12349072000F058 +S31508009EF87FFA174B1B78092B03D12049072000F056 +S31508009F0877FA134B1B780A2B03D11D49072000F053 +S31508009F186FFA0F4B1B780B2B03D11A49072000F051 +S31508009F2867FA0B4B1B780C2B03D11749072000F04F +S31508009F385FFA074B1B780D2B03D11449072000F04D +S31508009F4857FA044AFB7953700837BD4680BD00BFE7 +S31508009F585B0300203C030020B45B0108C85B0108CA +S31508009F68E05B0108F85B0108105C01082C5C010835 +S31508009F784C5C01086C5C01088C5C0108A45C01084F +S31508009F88BC5C0108D45C0108F05C0108085D01089E +S31508009F9880B584B000AF78600023FB607868FFF767 +S31508009FA825FD094803F09AFD0A21074803F070FEC3 +S31508009FB8054803F073FFF860034803F03DFEFB68A5 +S31508009FC818461037BD4680BD5C02002080B584B0AF +S31508009FD800AF0023FB600023BB6000237B600420DE +S31508009FE8FFF7D6FFF860FB6840F6E44203FB02F287 +S31508009FF80D4BA3FB0213D21A52081344DB0ABB60A3 +S3150800A008BB68A3F2BB634FF47A7202FB03F3074AF1 +S3150800A01882FB03129211DB17D31A7B607B681846FA +S3150800A0281037BD4680BD00BF010110007FE0077EDE +S3150800A03880B500AF0E4B1B689F229A620C4B1B68B3 +S3150800A04840F2C112DA620A4B1B684FF4E1729A634E +S3150800A058074B1B6840F2C7125A630421044806F0E6 +S3150800A068CBFF0021024806F079FE00BF80BD00BF7D +S3150800A0782010002080B485B000AF0346FB71FB7939 +S3150800A0884FF4E17202FB03F30B4A82FB03125211E7 +S3150800A098DB17D31AFB60094AFB791370084B1B6850 +S3150800A0A8FA689A63064B1B6801225A6300BF14377D +S3150800A0B8BD4680BC704700BF1F85EB51640300206E +S3150800A0C82010002080B400AF024B1B781846BD4606 +S3150800A0D880BC70476403002080B483B000AF244B6B +S3150800A0E81B687B60234B1B78062B02D0214B1B78F9 +S3150800A0F838E07B6842F6F722934201DD002331E017 +S3150800A1087B68B3F5FA5F06DB7B6842F21072934206 +S3150800A11801DC012326E07B6841F28732934206DD9B +S3150800A1287B6841F65832934201DC02231AE07B68C1 +S3150800A138B3F5FA6F05DB7B68B3F57A6F01DC0323A1 +S3150800A14810E07B6813F57A7F05DB7B68B3F5FA6F51 +S3150800A15801DC042306E07B68074A934201DA0523F3 +S3150800A16800E0062318460C37BD4680BC704700BF7A +S3150800A178600300200400002009D5FFFF80B582B0DF +S3150800A18800AF78607B681B680B4A934211D17B68DD +S3150800A1981B7F012B0DD1FFF745FC0346002B07D083 +S3150800A1A8FFF714FF0346054A1360FFF76DFC00E046 +S3150800A1B800BF0837BD4680BD000400406003002084 +S3150800A1C880B500AF064B074A1A60054805F097F8A8 +S3150800A1D80346002B01D000F0CBFB00BF80BD00BFB3 +S3150800A1E8680300200030024080B485B000AF78606C +S3150800A1F87B681B68094A93420BD1094B5B69084A75 +S3150800A20843F040035361064B5B6903F04003FB6068 +S3150800A218FB6800BF1437BD4680BC70470030024053 +S3150800A2280010024080B584B000AFF860B9607A6063 +S3150800A2387B689BB21946B86800F006F87B6818462A +S3150800A2481037BD4680BD000080B485B000AF786081 +S3150800A2580B467B8072B600BF0023FB8145E0284B7E +S3150800A268B3F804349BB2B3F5806F18D3244BB3F80C +S3150800A27802349BB201335A42C3F30903C2F30902F3 +S3150800A28858BF53429AB21E4BA3F802241C4BB3F884 +S3150800A29804349BB2013B9AB2194BA3F80424FB89F0 +S3150800A2A87A681344164AB2F8002492B21978144BFD +S3150800A2B89954134BB3F800349BB201335A42C3F38B +S3150800A2C80903C2F3090258BF53429AB20C4BA3F8C2 +S3150800A2D800240B4BB3F804349BB201339AB2084BEB +S3150800A2E8A3F80424FB890133FB81FA897B889A42FF +S3150800A2F8B5D362B600BF00BF1437BD4680BC7047E9 +S3150800A3087003002080B483B000AF72B600BF064B56 +S3150800A318B3F80434FB8062B600BFFB8818460C37CE +S3150800A328BD4680BC704700BF7003002080B582B068 +S3150800A33800AF72B600BF2D4BB3F804349BB2002B9E +S3150800A34802D162B600BF4EE0284BB3F80434FB804E +S3150800A358FB88802B01D98023FB80244BB3F8023471 +S3150800A3689BB2C3F58063BB80FA88BB889A4201D939 +S3150800A378BB88FB801D4BB3F804349BB2FA889A4213 +S3150800A3880CD11A4BB3F802349BB21A46174B13442E +S3150800A398F9885022184602F099F90BE0134BB3F8DE +S3150800A3A802349BB21A46114B1344F98851221846AF +S3150800A3B802F08CF90D4BB3F802349AB2FB881344B1 +S3150800A3C89BB2C3F309039AB2084BA3F80224074BB6 +S3150800A3D8B3F804349AB2FB88D31A9AB2034BA3F893 +S3150800A3E8042462B600BF0837BD4680BD7003002046 +S3150800A3F80EB480B585B000AF0346FB71154AFB79E4 +S3150800A408137007F12003BB60BB68FA697E211248FE +S3150800A41809F05CFAF860FB68002B01DAFB6812E0C1 +S3150800A428FB687D2B01DD7E23FB60FB680133094A47 +S3150800A4380021D154FB689BB202339BB219460548E2 +S3150800A448FFF702FFFB6818461437BD46BDE880408B +S3150800A45803B07047780700207907002080B58AB0CE +S3150800A46800AF07F1140300221A605A609A60DA608E +S3150800A4787D4B9B697C4A43F0100393617A4B9B6931 +S3150800A48803F010033B613B69774B9B69764A43F0B7 +S3150800A49804039361744B9B6903F00403FB60FB6830 +S3150800A4A8714B9B69704A43F0080393616E4B9B692D +S3150800A4B803F00803BB60BB686B4B9B696A4A43F0A9 +S3150800A4C840039361684B9B6903F040037B607B6894 +S3150800A4D8654B9B69644A43F020039361624B9B6909 +S3150800A4E803F020033B603B68002238215F4805F0EB +S3150800A4F800FA00224FF4F8515D4805F0FAF90022EF +S3150800A5084FF400415B4805F0F4F9002218215A482F +S3150800A51805F0EFF900228021584805F0EAF93823B2 +S3150800A5287B610123BB610023FB6102233B6207F1C0 +S3150800A538140319464D4805F041F802237B610023A8 +S3150800A548BB610023FB6107F114031946494805F066 +S3150800A55835F804237B610023BB610223FB6107F1FD +S3150800A56814031946434805F029F844F282037B6127 +S3150800A5780023BB610023FB6107F1140319463C4815 +S3150800A58805F01CF84FF4F8537B610123BB610023DF +S3150800A598FB6102233B6207F114031946344805F0A8 +S3150800A5A80DF84FF400437B610123BB610023FB616F +S3150800A5B802233B6207F1140319462E4804F0FEFFEE +S3150800A5C818237B610123BB610023FB6102233B62DD +S3150800A5D807F114031946284804F0F0FF80237B6125 +S3150800A5E80023BB610023FB6107F1140319462248BF +S3150800A5F804F0E4FF18237B610023BB610023FB6199 +S3150800A60807F1140319461D4804F0D8FF80237B6117 +S3150800A6180123BB610023FB6102233B6207F1140394 +S3150800A6281946164804F0CAFF4FF440737B61122393 +S3150800A638BB6103233B6207F1140319460F4804F06C +S3150800A648BDFF0F4B5B687B627B6A43F0E0637B6206 +S3150800A6587B6A43F002037B62094A7B6A536000BF40 +S3150800A6682837BD4680BD00BF0010024000100140D3 +S3150800A678001801400008014000140140000C014080 +S3150800A6880000014080B400AF034B044A9A6000BF3B +S3150800A698BD4680BC704700BF00ED00E0008000089A +S3150800A6A880B485B000AF03460A46FB711346BB71F2 +S3150800A6B8BB791F2B01D900230EE00023FB73BB7956 +S3150800A6C8084AD35CFA799A4201D00123FB73BB790D +S3150800A6D80449FA79CA54FB7B18461437BD4680BC28 +S3150800A6E8704700BFF807002080B584B000AF7860CF +S3150800A6F803F0EEF8B8607B68FB60FB68B3F1FF3FD0 +S3150800A7080ED00E4B1B781A46FB681344FB6007E00D +S3150800A71801F02CF9FFF772FB01F010F801F05CFE66 +S3150800A72803F0D6F80246BB68D31AFA689A42EFD8F5 +S3150800A73800BF00BF1037BD4680BD00BF74000020AB +S3150800A74880B500AF0320FEF7FDFF0346002B02D1B4 +S3150800A758024B01221A7000BF80BD00BF3C030020CF +S3150800A76880B500AF0B4804F007F8FFF7A7F90948C2 +S3150800A77803F0BEFF0346002B01D000F0F9F80221CA +S3150800A788044804F066FA0346002B01D000F0F0F8F6 +S3150800A79800BF80BDE802002080B582B002AFFFF78F +S3150800A7A871FF03F03DF805F0C9F800F071F8FFF7F6 +S3150800A7B855FEFEF7B5FEFFF781F9FFF7B5F901F083 +S3150800A7C85BF802F0E5FC02F063FEFFF7F9FC02F01D +S3150800A7D80BFE02F033FE02F085FE02F04BFCFFF793 +S3150800A7E803F800F08BFF4FF4967003F07BF801F03E +S3150800A7F899FA01F0DDFD21490720FFF7F9FD01F077 +S3150800A808B3FD1F4B1B889BB21A461E490720FFF744 +S3150800A818EFFD1B4B9B781A461B490720FFF7E8FDF7 +S3150800A828174B9B889BB21A46154BDB889BB2194671 +S3150800A838134B1B899BB200930B4614490720FFF755 +S3150800A848D7FDFFF78DFF00F07DFAFFF781FA00F0D4 +S3150800A85887FB00F025FC0A20FFF746FF00F08EF874 +S3150800A868FFF78CFA00F010FE0A20FFF73DFFFFF706 +S3150800A87867FF3220FFF738FF00BFE8E7545D010895 +S3150800A88810100020685D01087C5D0108905D0108CC +S3150800A89880B59CB000AF07F1380338220021184666 +S3150800A8A809F052F807F1240300221A605A609A60E0 +S3150800A8B8DA601A613B1D20220021184609F044F87F +S3150800A8C80523BB634FF480333B6404237B6401236D +S3150800A8D8BB640123FB644FF48033FB630223BB6527 +S3150800A8E84FF48033FB654FF4E0133B6602237B661F +S3150800A8F84FF4C063BB664023FB6607F13803184666 +S3150800A90805F0ECF80346002B01D000F031F80F23C8 +S3150800A9187B620223BB620023FB624FF480633B63BE +S3150800A92800237B6307F124030221184605F0ECFB94 +S3150800A9380346002B01D000F01BF803237B604FF475 +S3150800A9488073BB604FF40043FB603B1D184605F057 +S3150800A958D1FD0346002B01D000F00AF8034B01226B +S3150800A9681A6000BF7037BD4680BD00BF70004242FE +S3150800A97880B400AF72B600BF00BFFDE72DE9B0434B +S3150800A98884B000AF2E4B00221A712E4B5B78082B29 +S3150800A99804D12B4B012283F8242003E0284B0022FC +S3150800A9A883F8242002F094FFF860254B9B68FA6820 +S3150800A9B8D31ABB60224AFB689360224BD3F803304C +S3150800A9C8BA6802FB03F3204AA2FB03239B097B60B0 +S3150800A9D81B4BD3E90423796800200C46054612EB7D +S3150800A9E8040843EB0509164BC3E90489144BD3E954 +S3150800A9F80423164BA3FB0223DB0A114A9361104B67 +S3150800AA0893F82430002B08D00D4B9A690C4BDB6958 +S3150800AA18D31A0C4AC2F807300CE00A4B0022DA713E +S3150800AA2800221A7200225A7200229A72044B9B69F3 +S3150800AA38034AD36100BF1037BD46BDE8B08300BFDF +S3150800AA48180800203C030020D34D6210C5B3A29114 +S3150800AA5880B582B000AF0346FB71064AFB79D3710D +S3150800AA6802F036FF0346034A136100BF0837BD469E +S3150800AA7880BD00BF8408002080B500AF02F028FF1B +S3150800AA880246024B1B69D31A184680BD8408002063 +S3150800AA9880B584B000AF7860884B894A0121786808 +S3150800AAA803F0B6FF0346002B40F00481844B5B682D +S3150800AAB8BB603B7A002B40F0FC8002F009FF034696 +S3150800AAC8804A1360BB7A03F03F03DBB2022B05D139 +S3150800AAD87D4B7A4A92E8030083E80300BB7A03F0C1 +S3150800AAE83F03DBB2042B19D1784B744A92E803006A +S3150800AAF883E80300754B1B791A46754BDA61734B65 +S3150800AB081A7A734B83F82020704BDA79704B83F8DE +S3150800AB1821206E4B9A796E4B83F82220BB7A03F074 +S3150800AB283F03DBB2062B23D16A4B644A92E803003B +S3150800AB3883E80300674B5B781A46664B1B781B024B +S3150800AB4813441A46634B9A60624BDB781A46614B84 +S3150800AB589B781B0213441A465E4BDA605D4B5B7999 +S3150800AB681A465C4B1B791B0213441A46594B1A6141 +S3150800AB78BB7A03F03F03DBB2082B05D1564B4F4A85 +S3150800AB8892E8030083E80300BB7A03F03F03DBB2CD +S3150800AB98092B40F08F80514B484A92E8030083E816 +S3150800ABA803004E4BDB791A464C4BDA604B4BDA6896 +S3150800ABB84A4B9B791B021343484AD360474BDA68CA +S3150800ABC8464B5B791B041343444AD360434BDA6804 +S3150800ABD8424B1B791B061343404AD3603F4BDB782D +S3150800ABE81A463E4B9A603D4B9A683C4B9B781B022B +S3150800ABF813433A4A9360394B9A68384B5B781B0477 +S3150800AC081343364A9360354B9A68344B1B781B06B0 +S3150800AC181343324A9360314B9B68314AA2FB03239C +S3150800AC289B09FB812D4BDB682E4AA2FB03235B0994 +S3150800AC38BB81274AFB895380254ABB899380FB89B0 +S3150800AC48132B8CBF01230023DBB21A46204B9A72BA +S3150800AC581F4B01221A721D4B1A791D4B9A711C4BF0 +S3150800AC68DB79012B26D91A4B5A881F4BA3F81320D0 +S3150800AC78174BB3F904309AB21B4BA3F815201A4B95 +S3150800AC88B3F815309BB21A46174BB3F813309BB274 +S3150800AC9802FB03F3154A82FB03129210DB17D31A39 +S3150800ACA81A46114BC3F80320094B9A7A0E4B1A76A3 +S3150800ACB800E000BF1037BD4680BD00BFC8080020A9 +S3150800ACC8AC080020A8080020400800204C080020EE +S3150800ACD884080020580800206C0800207408002002 +S3150800ACE8D34D62101F85EB513C03002067666666E4 +S3150800ACF880B58AB000AF0E237B610023BB610123B0 +S3150800AD08FB6100233B6000237B600023BB600023B4 +S3150800AD18FB6000233B6101233B6201233B610E2351 +S3150800AD287B623B461946064803F002FC0346002B9D +S3150800AD3801D0FFF71DFE00BF2837BD4680BD00BFFE +S3150800AD481003002080B500AF134803F015FDFEF781 +S3150800AD58EBFEFFF7CDFF104803F0CAFC10210E489A +S3150800AD6803F077FF242200210C4808F0EDFD0B4B71 +S3150800AD780022DA7102F0ACFD0346084A1361074B54 +S3150800AD8847F230525A61054B00221A7600210020F4 +S3150800AD9800F006F800BF80BD1003002084080020D4 +S3150800ADA880B584B000AF03460A46FB711346BB71EB +S3150800ADB807F1080308220021184608F0C5FDFB79A3 +S3150800ADC8002B15D10D4B1B7A002B13D0BB79002B02 +S3150800ADD80CBF01230023DBB23B72F97907F108039C +S3150800ADE81A22F02000F066F81420FFF77DFC02E02E +S3150800ADF800BF00E000BF1037BD4680BD84080020AC +S3150800AE0880B586B000AF0346FB710B46BB80134678 +S3150800AE187B8007F1080308220021184608F094FDEC +S3150800AE28FB79002B40D1BB88952B01D89623BB808C +S3150800AE381F4B1B7E002B06D1BB88B3F5FA7F02D3BE +S3150800AE4840F2F313BB807B88642202FB03F37B6121 +S3150800AE58BB884FF47A7202FB03F33B617B691B0ECE +S3150800AE68DBB23B737B691B0CDBB27B737B691B0A02 +S3150800AE78DBB2BB737B69DBB2FB733B691B0EDBB2C8 +S3150800AE883B723B691B0CDBB27B723B691B0ADBB264 +S3150800AE98BB723B69DBB2FB72F97907F108031C221E +S3150800AEA8F02000F007F800E000BF1837BD4680BD5F +S3150800AEB88408002080B58CB000AF3B600346FB7160 +S3150800AEC80B46BB7113467B71FB7987F82830BB792B +S3150800AED887F829307B7903F03F03DAB297F82A30E6 +S3150800AEE862F3050387F82A307B8D0A2262F38913F1 +S3150800AEF87B850A2387F82F30BB6A7B610023FB61B1 +S3150800AF080423BB6108233B621EE0144803F04CFD8A +S3150800AF180346002B0ED007F10C0307F110013A6817 +S3150800AF280E4803F072FC034687F82E3097F82E3041 +S3150800AF38002B0ED00120FFF7D7FB97F92F30DBB28D +S3150800AF48013BDBB287F82F3097F92F30002BDCDC72 +S3150800AF5800E000BF3037BD4680BD00BF10030020A3 +S3150800AF6880B582B000AF3B4600221A605A603B465D +S3150800AF7804220021F020FFF79DFF1420FFF7B4FBF9 +S3150800AF883B4606220021F020FFF794FF1420FFF71E +S3150800AF98ABFB3B4609220021F020FFF78BFF142064 +S3150800AFA8FFF7A2FB3A4BB3F81B309BB2394AA2FB10 +S3150800AFB80323DB089BB21A46354BB3F813309BB20A +S3150800AFC802FB03F31A46344B5B699A4211D9324B92 +S3150800AFD85A6913469B0013445B001A462C4BB3F870 +S3150800AFE813309BB2B2FBF3F39AB2294BA3F811209C +S3150800AFF806E0274BB3F81B309AB2254BA3F8112065 +S3150800B008234BB3F811309BB240F23252934208D917 +S3150800B0181F4B002242F032025A74002242F00502FF +S3150800B0289A741B4BB3F811309BB21A46184BB3F8EF +S3150800B0380F309BB202FB03F3184A82FB03129210E5 +S3150800B048DB17D31A1A46124BC3F80B20124B5B7A36 +S3150800B058002B18D00E4BB3F80F309BB20C4AB2F837 +S3150800B068112092B219460020FFF7CAFE1420FFF7EE +S3150800B0783BFB074BB3F813309BB2B3F5F57F02D900 +S3150800B088054B01221A7600BF0837BD4680BD00BFAA +S3150800B0983C030020CDCCCCCC8408002067666666C5 +S3150800B0A898B500AF02F014FC0246B44B1B68D31AD5 +S3150800B0B8B3F5FA7F20D9B24B00221A72B04B002298 +S3150800B0C89A72B04B00221A71AE4B00221A72AD4B17 +S3150800B0D80022DA71AB4B00229A71AB4B00229A60B8 +S3150800B0E8A94B0022DA60A84B00221A61A74B002256 +S3150800B0F8DA60A64B00229A60A14B1B7A002B03D074 +S3150800B1089F4B1B78002B0CD1A14B0022DA74002226 +S3150800B1181A759F4B00225A7500229A759C4B002275 +S3150800B1281A769B4B9B7F002B0CD001210420FEF737 +S3150800B13889FA02F0CDFB0346964A1360904B012222 +S3150800B1481A7010E002F0C4FB0246924B1B68D31A29 +S3150800B1584EF66022934206D900210420FEF772FAB9 +S3150800B168874B00221A700520FEF7ECFA03461A46A2 +S3150800B178834BDA72824B1B7A002B07D0804B1B7BDA +S3150800B188002B03D17E4B1B78002B02D17C4B002267 +S3150800B1985A727B4BDB79092B00F2558101A252F8CA +S3150800B1A823F000BFD5B1000809B2000825B2000887 +S3150800B1B85DB20008ABB20008EDB2000857B3000844 +S3150800B1C801B40008B1B300083BB400086C4B002270 +S3150800B1D85A7000210320FEF735FA694B1B7A002BB3 +S3150800B1E800F03581664B1B78002B00F03081644BE4 +S3150800B1F81B7B002B40F02B810120FFF729FC26E159 +S3150800B208FFF73AFC0346B3F57A6F40F222815C4BA6 +S3150800B21801225A720220FFF71BFC1AE1584B00223A +S3150800B2281A7600210320FEF70DFA554B5B7A002B98 +S3150800B23803D10020FFF70CFC1CE1554BDB7D002BE6 +S3150800B24800F0098101210020FFF7AAFD0320FFF776 +S3150800B258FFFB00E14A4B9B7A002B0CD0484B5B7AE4 +S3150800B268002B08D002F034FB03464B4A136004202F +S3150800B278FFF7EEFBF1E0FFF7FFFB034642F2107219 +S3150800B288934240F2EA803E4B01225A73404B0A2207 +S3150800B2985A770020FFF7DCFB40490420FFF7A8F897 +S3150800B2A8DBE001210320FEF7CDF9354BDB7A002BCD +S3150800B2B803D00520FFF7CCFBD1E0FFF7DDFB0346FB +S3150800B2C8B3F57A7F40F2CB802D4B01221A73304BA7 +S3150800B2D807225A770620FFF7BBFB31490420FFF7F8 +S3150800B2E887F8BCE02A4BDB7D002B03D0244B5B7A1E +S3150800B2F8002B03D10620FFF7ABFBBBE00520FEF7C2 +S3150800B30821FA03461C460320FEF70CFA03469C421C +S3150800B31817D002F0DDFA0246224B1B68D31AB3F59A +S3150800B3287A7F40F29E801A4B07225A77144B0122DD +S3150800B3381A730620FFF78CFB19490420FFF758F8FB +S3150800B3488FE002F0C5FA0346164A136089E0104BE7 +S3150800B35800225A7400229A740D4BB3F815309BB222 +S3150800B3681D2B06D9FFF788FB034641F2883293421C +S3150800B37879D90820FFF76CFB75E000BFA8080020FC +S3150800B388840800204C08002058080020740800206B +S3150800B3983C030020D0080020D4080020A85D010836 +S3150800B3A8B85D0108D808002000210320FEF74AF9ED +S3150800B3B8314BDB7A002B07D100210020FFF7F0FC80 +S3150800B3C80720FFF745FB50E0FFF756FB0346B3F5A2 +S3150800B3D87A7F4AD9284B01221A73284B07225A77AB +S3150800B3E800210020FFF7DCFC0720FFF731FB244982 +S3150800B3F80420FEF7FDFF38E01F4B9B7A002B03D18C +S3150800B4080920FFF725FB32E0FFF736FB034642F231 +S3150800B418107293422BD9184B01225A73174B0A22DA +S3150800B4285A770020FFF714FB16490420FEF7E0FFB9 +S3150800B4381DE0FFF721FB0346B3F57A6F19D90220F9 +S3150800B448FFF706FB15E00020FFF702FB12E000BF36 +S3150800B45810E000BF0EE000BF0CE000BF0AE000BF26 +S3150800B46808E000BF06E000BF04E000BF02E000BF36 +S3150800B47800E000BF00BF98BD840800203C030020F8 +S3150800B488B85D0108D85D010880B500AF344B5B7F0D +S3150800B498002B03D0334800F01FF95FE0304B5B7888 +S3150800B4A80D2B57D801A252F823F000BFEDB40008B7 +S3150800B4B8F5B40008FDB4000805B500080DB5000880 +S3150800B4C815B500081DB5000825B500082DB50008EE +S3150800B4D835B500083DB5000845B500084DB500085E +S3150800B4E855B50008204800F0F7F837E01F4800F07F +S3150800B4F8F3F833E01B4800F0EFF82FE01C4800F09B +S3150800B508EBF82BE01A4800F0E7F827E0194800F0AE +S3150800B518E3F823E0174800F0DFF81FE0154800F0C5 +S3150800B528DBF81BE0134800F0D7F817E0124800F0DC +S3150800B538D3F813E0104800F0CFF80FE00E4800F0F3 +S3150800B548CBF80BE00C4800F0C7F807E0084800F00D +S3150800B558C3F803E0044800F0BFF800BF80BD00BF89 +S3150800B5683C030020440000200800002014000020A6 +S3150800B578200000202C0000203800002080B487B066 +S3150800B58800AFF860B96011461A460B46FB801346A9 +S3150800B598BB80FA88BB889A4201D9BB88FB80BB88DE +S3150800B5A8002B01D10123BB80FA8813461B029A1A7D +S3150800B5B8BB8892FBF3F3FB82FB681B781A46FB8A67 +S3150800B5C8C3F1FF0303FB02F2BB681B781946FB8A23 +S3150800B5D801FB03F31344204A82FB03121A44D211CF +S3150800B5E8DB17D31ADAB23B6A1A70FB685B781A4615 +S3150800B5F8FB8AC3F1FF0303FB02F2BB685B781946B3 +S3150800B608FB8A01FB03F31344134A82FB03121A4409 +S3150800B618D211DB17D31ADAB23B6A5A70FB689B78E1 +S3150800B6281A46FB8AC3F1FF0303FB02F2BB689B7841 +S3150800B6381946FB8A01FB03F31344074A82FB0312E4 +S3150800B6481A44D211DB17D31ADAB23B6A9A7000BFCA +S3150800B6581C37BD4680BC70478180808080B483B023 +S3150800B66800AF78607B681B781A46642302FB03F3ED +S3150800B678174A82FB03121A44D211DB17D21A154B42 +S3150800B6881B689A637B685B781A46642302FB03F394 +S3150800B6980F4A82FB03121A44D211DB17D21A0D4B32 +S3150800B6A81B68DA637B689B781A46642302FB03F3F4 +S3150800B6B8074A82FB03121A44D211DB17D21A054B22 +S3150800B6C81B681A6400BF0C37BD4680BC704700BFAC +S3150800B6D8818080806810002080B483B000AF7860CD +S3150800B6E8054B7A681068516803C312891A8000BF27 +S3150800B6F80C37BD4680BC7047E408002080B582B088 +S3150800B70800AF00233B7100237B710023BB71042122 +S3150800B718094805F071FC0821074805F06DFC0C215D +S3150800B728054805F069FC3B1D1846FFF797FF00BF5B +S3150800B7380837BD4680BD00BF6810002080B582B0B6 +S3150800B74802AF02F0C5F80246464B1B68D31A142BFB +S3150800B75840F2858002F0BCF80346424A1360424B21 +S3150800B7685B8801339AB2404B5A803F4B1B78032BB0 +S3150800B77867D801A252F823F091B70008C3B70008A2 +S3150800B788EFB7000821B80008374B5A88374BDB78DB +S3150800B7981946374B00930B4634493648FFF7EEFEF1 +S3150800B7A8314B5B88314AD27893424ED92E4B0122C7 +S3150800B7B81A702D4B00225A8047E02B4B2B4A04332C +S3150800B7C81268114619800233120C1A70264B5B88C8 +S3150800B7D8264A127993423AD9234B02221A70224BE7 +S3150800B7E800225A8033E0204B5A88204B5B79194649 +S3150800B7F81F4B00930B461F491C48FFF7BFFE1A4B01 +S3150800B8085B881A4A5279934223D9174B03221A702E +S3150800B818154B00225A801CE0134B144A043307328E +S3150800B8281188927819809A700F4B5B880F4A92791B +S3150800B838934210D90C4B00221A700B4B00225A80DF +S3150800B84809E0094B00221A7006E000BF04E000BFB1 +S3150800B85802E000BF00E000BF0548FFF7FFFE00BF93 +S3150800B868BD4680BDF0080020DC080020E40800205A +S3150800B878E0080020EB08002080B500AF0A4B0B4A09 +S3150800B8881A60094B4FF0FF325A60074B4FF4807223 +S3150800B8989A60054805F0B2F80346002B01D0FFF771 +S3150800B8A867F800BF80BD00BFF408002000280040E4 +S3150800B8B880B584B000AF78607B681B680B4A9342F2 +S3150800B8C810D104F02FF80A4BDB69094A43F00063E4 +S3150800B8D8D361074BDB6903F00063FB60FB68054B24 +S3150800B8E801221A6000BF1037BD4680BD00280040F7 +S3150800B8F8001002403C04424280B400AFBFF34F8FA9 +S3150800B90800BF064BDB6803F4E0620449044B1343A3 +S3150800B918CB60BFF34F8F00BF00BFFDE700ED00E027 +S3150800B9280400FA0580B582B000AF78600B467B80C4 +S3150800B9387B680B4A93420FD10A4B00221A707B8800 +S3150800B948002B0AD07B88B3F5807F06D87B881946F2 +S3150800B958054800F099FC00E000BF0837BD4680BDE1 +S3150800B968881100202C0B00202C09002080B500AF78 +S3150800B978A64B1B78002B11D1A54806F042FF0346B3 +S3150800B988202B0BD14FF48072A249A14806F01AFB66 +S3150800B9980346002B02D19D4B01221A70FEF79CFB29 +S3150800B9A803461A469C4B1A709C4B1B78002B03D0EF +S3150800B9B89A4B1A789A4B1A7001F08AFF0246994BE5 +S3150800B9C81B68D31A0A2B53D901F082FF0246964BF5 +S3150800B9D81B68D31AC72B06D900F0DAFA01F078FFE4 +S3150800B9E80346914A1360914B1B78002B08D090495F +S3150800B9F80420FEF7FDFC00F06CFA8C4B00221A7046 +S3150800BA08864B1B78012B03D0844B5B7F002B13D006 +S3150800BA1801F05EFF0246874B1B68D31AB3F57A7F97 +S3150800BA280AD901F055FF0346824A13608249052060 +S3150800BA38FEF7DEFC00F04DFA804B1B780C2B03D082 +S3150800BA487E4B1B780B2B13D101F042FF0246794B2C +S3150800BA581B68D31AB3F57A7F0AD901F039FF03466A +S3150800BA68744A136076490520FEF7C2FC00F031FADD +S3150800BA78744B1B78042B00F2F88001A252F823F0C5 +S3150800BA889DBA0008BDBA000801BB00083DBB0008FE +S3150800BA988DBB000800210520FDF7D4FD0220FEF71E +S3150800BAA8CFF95E4B5B7F002B40F0A780654B0122E0 +S3150800BAB81A70A2E001210520FDF7C4FD0120FEF752 +S3150800BAC8BFF9554B1B78012B03D0534B1B78022B18 +S3150800BAD802D15C4B02221A70504B5B7F002B00F098 +S3150800BAE88E804E4B5B7F1A4657490420FEF780FC2A +S3150800BAF8544B00221A7082E001210520FDF7A2FDA9 +S3150800BB080420FEF79DF9454B1B78022B06D14F49B1 +S3150800BB180720FEF76DFC4B4B03221A703E4B1B7829 +S3150800BB28002B6ED14A490720FEF762FC454B0122D5 +S3150800BB381A7066E001210520FDF784FD3F4B1B7846 +S3150800BB48022B03D80320FEF77BF904E03B4B1B784E +S3150800BB581846FEF775F9304B1B78002B06D13C4979 +S3150800BB680720FEF745FC374B01221A70394B1B781C +S3150800BB78002B48D038490720FEF73AFC314B0422F7 +S3150800BB881A7040E000210520FDF75CFD0D20FEF740 +S3150800BB9857F901F09DFE0246304B1B68D31AB3F5D8 +S3150800BBA87A7F1AD901F094FE03462C4A1360294B6A +S3150800BBB81B78002B0AD0274B1B78FF2B0DD0254B5B +S3150800BBC81B78013BDAB2234B1A7006E02449072092 +S3150800BBD8FEF70EFC1B4B01221A701E4B1B78002B16 +S3150800BBE842D10D4B1B78012B3ED11E490720FEF783 +S3150800BBF8FFFB144B02221A7036E000BF35E000BF7F +S3150800BC0833E000BF31E000BF2FE000BF2C0B002057 +S3150800BC18881100202C0900204F0000203C03002032 +S3150800BC282809002020090020880B00202D0B002059 +S3150800BC38EC5D010824090020005E0108840B002039 +S3150800BC48185E010850000020345E01085C5E010891 +S3150800BC58805E01082E0B0020905E01088C0B0020E0 +S3150800BC68A05E0108C85E010800BF274B1B68002BA9 +S3150800BC7816D001F02DFE0246234B1B68D31AB3F5DE +S3150800BC88FA7F0DD9214B0022DA75214B00221A704A +S3150800BC986420FEF7EFF91F490420FEF7A9FB1CE00C +S3150800BCA81D4B1B78012B03D1184B0022DA7514E0BB +S3150800BCB81A4B1B78002B14BF01230023DBB21A4644 +S3150800BCC8124BDA75114BDB7D002B06D10F4B5B78CF +S3150800BCD8032B02D10D4B0022DA75114B1B78012B69 +S3150800BCE807D00F4B1B78022B03D00D4B1B78032B61 +S3150800BCF803D1064B01229A7703E0044B00229A7770 +S3150800BD0800BF00BF80BD00BF340B00203C030020E5 +S3150800BD18840B0020045F010828090020290900204F +S3150800BD284F00002080B500AFFEF782F96420FEF7C1 +S3150800BD38A1F90D4B4FF47A721A800B4B96225A804A +S3150800BD48094B40F232529A80074B0A22DA80064B90 +S3150800BD5847F230529A6000F0B3F804490720FEF714 +S3150800BD6847FB00BF80BD00BF08090020185F01080F +S3150800BD7880B485B000AF78600B467B804FF6FF73BA +S3150800BD88FB810023BB8122E0BB897A6813441B78B0 +S3150800BD981A46FB895340FB810023FB7211E0FB8995 +S3150800BDA803F00103002B06D0FB895B089AB20D4BFA +S3150800BDB85340FB8102E0FB895B08FB81FB7A013370 +S3150800BDC8FB72FB7A072BEAD9BB890133BB81BA898F +S3150800BDD87B889A42D8D3FB8918461437BD4680BC57 +S3150800BDE8704700BF01A0FFFF80B586B000AFB960F5 +S3150800BDF87B600346FB731346BB81BB890333FB820F +S3150800BE08FA8A3B8C9A4201D9002329E07B68FA7B97 +S3150800BE181A70BB89002B09D0BB68002B06D07B6833 +S3150800BE280133BA89B968184607F0D6FDBB890133C4 +S3150800BE389BB219467868FFF79BFF0346BB82BB8906 +S3150800BE4801337A681344BA8AD2B21A70BB8A1B0AB3 +S3150800BE5899B2BB8902337A681344CAB21A70FB8A44 +S3150800BE6818461837BD4680BD80B586B002AF03466A +S3150800BE783960FB711346BB80BA88F8794FF480732A +S3150800BE8800930C4B3968FFF7AFFF0346FB81FB8924 +S3150800BE98002B06D0FA894FF47A730649064805F046 +S3150800BEA8D1FF01F015FD0346044A136000BF103799 +S3150800BEB8BD4680BD2C0A00208811002020090020D4 +S3150800BEC880B500AF002200215220FFF7CDFF00BF42 +S3150800BED880BD80B500AF002200215320FFF7C4FFBC +S3150800BEE800BF80BD80B582B000AF01F0F1FC786074 +S3150800BEF81E4B1B687A68D31A3B601C4A7B6813601A +S3150800BF081B4BB3F813309BB21A46194BB3F81530C6 +S3150800BF189BB202FB03F3174A82FB03129210DB1744 +S3150800BF28D31A1A46144B1A60134B1B683A6802FB55 +S3150800BF3803F3124AA2FB03239A09114B1B681344FD +S3150800BF480F4A13600F4B1B78012B02D10C4B0022AA +S3150800BF581A600B4B1B680C4AA2FB0323DB0A0B4A25 +S3150800BF68136000BF0837BD4680BD00BF900B002090 +S3150800BF783C0300206766666614090020D34D6210E4 +S3150800BF8818090020840B0020C5B3A2911C090020BB +S3150800BF9880B500AFFFF7A6FFFEF794F803461A46E2 +S3150800BFA82A4B1A702A4BDA7A284B5A70294BB3F857 +S3150800BFB813309AB2254B5A80264BB3F815309AB2E5 +S3150800BFC8224B9A80244B1B68204AC2F80630234B1A +S3150800BFD81B681E4AC2F80A30214B1B78032B04D16A +S3150800BFE8204B1A78194BDA7402E0184B0022DA74D7 +S3150800BFF81D4B1A88154B9A821B4B5A88134BDA82A3 +S3150800C008194B9A88114B1A83174BDA880F4B5A83A0 +S3150800C018154B9B680D4AD361144B1A780B4B9A74C7 +S3150800C0280A4A002343F07F4343F47F0343F43B4320 +S3150800C03843F0A003D381002343F00D031382202283 +S3150800C04802495020FFF710FF00BF80BD380B0020BB +S3150800C058840800203C030020140900201C0900203D +S3150800C068500000204F00002008090020300B00204F +S3150800C07880B483B000AF0346FB71FB79403B092BBC +S3150800C0882AD801A252F823F0B9C00008BDC0000892 +S3150800C098C1C00008C5C00008C9C00008CDC000084E +S3150800C0A8D1C00008D5C00008D9C00008DDC00008FE +S3150800C0B8012313E0012311E001230FE001230DE01A +S3150800C0C801230BE0042309E0012307E02C2305E0FC +S3150800C0D8012303E0002301E04FF6FF7318460C37E7 +S3150800C0E8BD4680BC704700BFF0B58BB000AF0346AD +S3150800C0F83960FB711346BB8001F0EAFB0346584AD0 +S3150800C1081360FB79403B092B00F2A38001A252F881 +S3150800C11823F000BF45C1000873C100088DC1000897 +S3150800C128AFC1000843C20008C9C10008E7C1000832 +S3150800C138F5C1000839C200084FC200083B68FB6011 +S3150800C148FB681B7887F8273097F82730642B02D9BD +S3150800C158642387F82730434A97F82730137097F8E7 +S3150800C16827301846FDF786FF76E03B683B613B6952 +S3150800C1781B78002B14BF01230023DBB21A463A4B5F +S3150800C1881A7069E03B687B617B691B78002B62D073 +S3150800C19836490520FEF72CF9FFF792FE0A2001F02A +S3150800C1A8A1FBFFF7A9FB3B68BB61BB691B78002BA2 +S3150800C1B814BF01230023DBB21A462D4B1A704BE035 +S3150800C1C83B68FB61FB691B889AB22A4BA3F80F20C8 +S3150800C1D8FB695B889AB2274BA3F81B203CE03B68AF +S3150800C1E83B623B6A1A78244B1A7035E0234A3B6847 +S3150800C1F81C46164604F1200C354623461868596825 +S3150800C2089A68DB680FC5103410366445F4D133468E +S3150800C218224610685168926807C3184B5B88184A03 +S3150800C228A2FB0323DB089BB2DAB2124B9A7013E01F +S3150800C2383B681A78134B1A700EE00A4B1B78184697 +S3150800C248FDF718FF08E001F043FB0346044A1360AC +S3150800C25802E000BF00E000BF00BF2C37BD46F0BDB6 +S3150800C268340B00204E00002029090020245F01080D +S3150800C2782F0B00203C030020300B0020580B002011 +S3150800C288CDCCCCCC840B002080B586B000AF7860C6 +S3150800C2980B467B807B88022B01D800235AE07B68F3 +S3150800C2A81B78FB757B88033BBB827B88023B7A68D5 +S3150800C2B813441B781AB27B88013B79680B441B78B0 +S3150800C2C81BB21B021BB213431BB27B82BB8A013308 +S3150800C2D89BB219467868FFF74BFD03463B827A8A74 +S3150800C2E83B8A9A4205D01D490420FEF781F80023A7 +S3150800C2F830E0FB7D1846FFF7BBFE0346FB81FB894A +S3150800C3084FF6FF72934207D1FB7D1A46144905205A +S3150800C318FEF76EF800231DE0FA89BB8A9A4207D011 +S3150800C328FB7D1A460F490420FEF762F8002311E040 +S3150800C338BB8A002B07D07B68591CBA8AFB7D18462E +S3150800C348FFF7D2FE05E0FB7D002200211846FFF71D +S3150800C358CBFE012318461837BD4680BD3C5F010849 +S3150800C368505F0108645F010880B400AF0E4B1B6874 +S3150800C3781B689AB20D4B1A800B4B1B685A790B4BE4 +S3150800C3889A70094B1B681A79084BDA70074B012211 +S3150800C3989A80064B0022DA80044B02221A8100BFD3 +S3150800C3A8BD4680BC704700BF000000201010002062 +S3150800C3B880B500AF4FF404720021054807F0C4FAA7 +S3150800C3C84FF404720021034807F0BEFA00BF80BD87 +S3150800C3D8940B0020A40D002080B500AF2A4B93F8D3 +S3150800C3E84230DBB2202B0AD1284B93F80832DBB24D +S3150800C3F8002B04D1FF222649234805F0E3FD254BE7 +S3150800C40893F84230DBB2202B04D1FF222249214877 +S3150800C41805F0D8FD1C4B93F84130DBB2212B19D116 +S3150800C4281A4BD3F80C32002B14D001F051FA0246F5 +S3150800C438164BD3F80C32D31A642B0BD9124805F0CD +S3150800C4481FFE00221021154803F053FA0F4B00224D +S3150800C458C3F80C220D4B93F80832DBB2002B11D027 +S3150800C468094B93F84130DBB2212B0BD00C4800F06E +S3150800C478EDF9FF220649044805F0A4FD034B0022FE +S3150800C48883F8082200BF80BD40110020940B0020C5 +S3150800C498940C0020B0100020A40E002000140140BF +S3150800C4A8940D002080B582B000AF78600B467B807B +S3150800C4B87B681A68224B1B689A4216D17B881A46EB +S3150800C4C82049214800F08EF90346002B04D114228E +S3150800C4D80021002000F0FAF81C4B00221A70FF22EF +S3150800C4E81849174805F06EFD25E07B681A68184B49 +S3150800C4F81B689A4214D17B881A461649164800F0D2 +S3150800C50871F90346002B05D0104B01221A701348FF +S3150800C51800F09CF9FF220F490D4805F053FD0AE083 +S3150800C5287B681A680E4B1B689A4204D17B881946A1 +S3150800C5387868FFF7F7F900BF0837BD4680BD00BF22 +S3150800C54840110020940C0020940B0020B40F002002 +S3150800C558B0100020A40E0020A40D0020A40F00206F +S3150800C5688811002080B582B000AF78607B681A68A9 +S3150800C578084B1B689A4208D100221021064803F086 +S3150800C588B8F9064B0022C3F80C2200BF0837BD4687 +S3150800C59880BD00BF4011002000140140940B002004 +S3150800C5A880B485B000AF78600B467B804FF0FF33C8 +S3150800C5B8FB6000237B8121E07B897A6813441B781A +S3150800C5C81A46FB685340FB6000237B7210E0FB6841 +S3150800C5D803F00103002B05D0FB685A080D4B53409E +S3150800C5E8FB6002E0FB685B08FB607B7A01337B72C1 +S3150800C5F87B7A072BEBD97B8901337B817A897B8800 +S3150800C6089A42D9D3FB68DB4318461437BD4680BC23 +S3150800C618704700BF2083B8ED80B588B000AFF860D2 +S3150800C6287A601A460B467B8113467B720023FB8386 +S3150800C638FB8B5A1CFA831A467B6813447A7A1A7053 +S3150800C648FB68002B19D00023BB8312E0BB8BFA6862 +S3150800C6581A44FB8B591CF98319467B680B441278D4 +S3150800C6681A70FB8BFA2B01D900232AE0BB8B0133FE +S3150800C678BB83BA8B7B899A42E8D3FB8B19467868C1 +S3150800C688FFF78EFF03463B6107F110037B61002322 +S3150800C698BB6112E0BB697A691A44FB8B591CF9839A +S3150800C6A819467B680B4412781A70FB8BFE2B01D946 +S3150800C6B8002306E0BB690133BB61BB69032BE9DDCF +S3150800C6C8FB8B18462037BD4680BD000080B584B070 +S3150800C6D800AF78600B467B8013467B707B78798839 +S3150800C6E8154A7868FFF798FF0346FB81FB89002BF4 +S3150800C6F81ED0124B93F84130DBB2212B07D10F48D5 +S3150800C70805F0BEFC002210210D4803F0F2F80122BC +S3150800C71810210B4803F0EDF8FB891A460649074825 +S3150800C72805F01BFC01F0D4F80346034AC2F80C329C +S3150800C73800BF1037BD4680BD940B0020401100206D +S3150800C7480014014080B588B000AFF8600B467A60DF +S3150800C7587B817B89042B01D800233FE07B89B3F5CD +S3150800C768807F01D9002339E07B89043BFB83FB8B57 +S3150800C778FA6813441B781946FB8B0133FA68134485 +S3150800C7881B781B0241EA0302FB8B0233F9680B4448 +S3150800C7981B781B041A43FB8B0333F9680B441B7875 +S3150800C7A81B061343BB61FB8B1946F868FFF7F8FEAF +S3150800C7B87861BA697B699A4201D000230EE0FB6862 +S3150800C7C85A1C7B685A60FB681A787B681A70FB8B58 +S3150800C7D8DBB2013BDAB27B685A7001231846203768 +S3150800C7E8BD4680BD80B584B000AFF860B960134611 +S3150800C7F8FB80FB6803F50072FB881946B868FFF7E3 +S3150800C808A1FF0346002B01D1002304E0FB6801229F +S3150800C81883F80822012318461037BD4680BD000054 +S3150800C82880B400AFBFF34F8F00BF064BDB6803F435 +S3150800C838E0620449044B1343CB60BFF34F8F00BF34 +S3150800C84800BFFDE700ED00E00400FA0580B584B0F6 +S3150800C85800AF78601323FB737B681B78C22B00F341 +S3150800C868CC80B02B0FDA602B42D0602B00F3C58042 +S3150800C878502B43D0502B00F3C080012B00F0A68024 +S3150800C888402B2DD0B9E0B03B122B00F2B68001A29E +S3150800C89852F823F00BC9000803CA000803CA00089F +S3150800C8A803CA000803CA0008B3C9000803CA00086F +S3150800C8B803CA000803CA000803CA000803CA00080E +S3150800C8C803CA000803CA000803CA000803CA0008FE +S3150800C8D803CA000849C90008ADC9000881C9000883 +S3150800C8E800F0B2F8402258214B48FFF7EFFE8FE0D8 +S3150800C8F860220A214948FFF7E9FE89E0FDF716FD97 +S3150800C90886E07B685B780B2B17D17B685A68444BA3 +S3150800C9181068516803C31189927A19809A70414B35 +S3150800C92801221A703E4BD3F803303D4A3E49072088 +S3150800C938FDF75EFD1223FB7362E01323FB735FE0CA +S3150800C9487B685B78012B14D17B685B681B781A4671 +S3150800C9584FF47A7302FB03F31A46344B5A61334B86 +S3150800C9685B691A4632490720FDF742FD1223FB7315 +S3150800C97846E01323FB7343E07B685B78012B0ED1F3 +S3150800C9887B685B681A782B4B1A702A4B1B781A46F1 +S3150800C99829490720FDF72CFD1223FB7330E01323E2 +S3150800C9A8FB732DE01323FB732AE0122200210020D3 +S3150800C9B8FFF78CFE00BF214B93F84130DBB2212BE1 +S3150800C9C8F9D00A2000F08EFFFFF72AFF7B685B780C +S3150800C9D8092B0FD17B685A68194B1068516803C32D +S3150800C9E8127A1A70174B1B78DBB2012B0FD0122359 +S3150800C9F8FB7305E01323FB7302E01323FB7300BFE5 +S3150800CA08FB7B1A4600210020FFF760FE00E000BF06 +S3150800CA181037BD4680BD00BFB80F00201010002093 +S3150800CA28600000201A100020845F0108840800208E +S3150800CA38985F01083C030020AC5F010840110020FC +S3150800CA4854000020B40F002080B500AF8F4B9A78A9 +S3150800CA588F4B9A708D4BD3F807308D4AC2F803303E +S3150800CA688A4BB3F80F309AB2894BA3F80720874B3D +S3150800CA78B3F81B309AB2864BA3F80920834BB3F850 +S3150800CA8813309AB2824BA3F80B20804BB3F81530B3 +S3150800CA989AB27F4BA3F80D207C4B1A7E7C4BDA732F +S3150800CAA87A4B5A7F7A4B5A70784B5A78784B1A7061 +S3150800CAB8774B00221A7400225A74754B00229A740E +S3150800CAC8734B0022DA7400221A750420FCF72AFE32 +S3150800CAD8034603F00103D9B26D4A537D61F3000397 +S3150800CAE853750320FCF71EFE034603F00103D9B26B +S3150800CAF8674A537D61F3410353750020FCF712FE1C +S3150800CB08034603F00103D9B2614A537D61F38203F0 +S3150800CB1853755F4A537D23F0080353750320FCF7C2 +S3150800CB2811FE0346002B0CBF01230023D9B2584A2D +S3150800CB38537D61F304135375FDF7E4FB0346002B95 +S3150800CB4814BF01230023D9B2514A537D61F3451313 +S3150800CB5853754F4A537D23F0400353754D4B1B7A43 +S3150800CB6803F00103D9B24A4A537D61F3C7135375D3 +S3150800CB780020FCF7DBFE03465AB2454B5A760120DD +S3150800CB88FCF7D4FE03465AB2414B9A76414BDB6909 +S3150800CB985AB23F4BDA763E4B00221A773C4B0022B4 +S3150800CBA85A773B4B00229A770022DA77384B0022CD +S3150800CBB883F82020384B9B689AB2354BA3F8212076 +S3150800CBC8354BDB689AB2324BA3F82320324B1B69E4 +S3150800CBD89AB22F4BA3F82520112200212F4806F0D8 +S3150800CBE8B3FE2B4B002283F83820294B002283F802 +S3150800CBF83920002283F83A20254B002283F83B2067 +S3150800CC08002283F83C2004220021254806F09CFED1 +S3150800CC181F4B002283F84120002283F84220002275 +S3150800CC2883F84320002283F84420194B002283F80E +S3150800CC384720174B002283F84620154B002283F815 +S3150800CC484520134B002283F84820002283F8492000 +S3150800CC580F4B002283F84A2008220021114806F0C3 +S3150800CC6873FE0B4B002283F85320094B002283F8E6 +S3150800CC785420002283F85520054B002283F85620B5 +S3150800CC88002283F8572000BF80BD00BF3C03002060 +S3150800CC98B80F00208408002058080020DF0F00205D +S3150800CCA8F50F00200310002080B485B000AF786027 +S3150800CCB87B68002B18D07B6800221A607B680022E4 +S3150800CCC89A807B680022DA800023FB8108E0FA89CB +S3150800CCD87B680232002143F82210FB890133FB8165 +S3150800CCE8FB89072BF3D900E000BF1437BD4680BC83 +S3150800CCF8704780B485B000AF786039607B68002BD0 +S3150800CD0801D13B6856E07B68DB88072B27D87B6808 +S3150800CD189B881A467B680232396843F822107B6872 +S3150800CD281A683B681A447B681A607B689B880133D3 +S3150800CD389AB27B689A807B689B88072B02D97B689E +S3150800CD4800229A807B68DB8801339AB27B68DA808E +S3150800CD587B681B687A68D28893FBF2F32AE07B68BB +S3150800CD689B881A467B68023253F82230FB607B6838 +S3150800CD789B881A467B680232396843F822107B6812 +S3150800CD881A683968FB68CB1A1A447B681A607B6884 +S3150800CD989B8801339AB27B689A807B689B88072BA5 +S3150800CDA802D97B6800229A807B681B68002B00DA08 +S3150800CDB80733DB1018461437BD4680BC7047000099 +S3150800CDC880B485B000AF154B9B69144A43F001033C +S3150800CDD89361124B9B6903F00103BB60BB680F4B59 +S3150800CDE8DB690E4A43F08053D3610C4BDB6903F0C9 +S3150800CDF880537B607B680A4B5B68FB60FB6823F0A3 +S3150800CE08E063FB60FB6843F00073FB60044AFB6859 +S3150800CE18536000BF1437BD4680BC704700100240F7 +S3150800CE280000014080B400AF00BFFDE780B400AF42 +S3150800CE3800BFFDE780B400AF00BFFDE780B400AFD0 +S3150800CE4800BFFDE780B400AF00BFFDE780B400AFC0 +S3150800CE5800BFBD4680BC704780B400AF00BFBD4662 +S3150800CE6880BC704780B400AF00BFBD4680BC704721 +S3150800CE7880B500AF00F01AFD00BF80BD80B500AFD1 +S3150800CE88024801F00BFF00BF80BD00BFE802002082 +S3150800CE9880B500AF024804F059F900BF80BD00BF4D +S3150800CEA82010002080B500AF024805F0FDF900BF44 +S3150800CEB880BD00BFF810002080B500AF024805F015 +S3150800CEC8F3F900BF80BD00BF4011002080B500AF50 +S3150800CED8024805F0E9F900BF80BD00BF88110020A7 +S3150800CEE880B500AF024805F0DFF900BF80BD00BF76 +S3150800CEF8B010002080B500AF024801F0CFFE00BF91 +S3150800CF0880BD00BF1003002080B500AF024801F0BD +S3150800CF18C5FE00BF80BD00BF1003002080B400AF67 +S3150800CF2801231846BD4680BC704780B582B000AF5D +S3150800CF387860396006F010FD034616221A604FF02D +S3150800CF48FF3318460837BD4680BD80B582B000AFA6 +S3150800CF5878604FF0FF317868FFF7E7FF00BFFDE715 +S3150800CF6880B586B000AFF860B9607A6000237B6147 +S3150800CF780AE0AFF300800146BB685A1CBA60CAB219 +S3150800CF881A707B6901337B617A697B689A42F0DBA0 +S3150800CF987B6818461837BD4680BD80B483B000AF95 +S3150800CFA878604FF0FF3318460C37BD4680BC70478B +S3150800CFB880B483B000AF786039603B684FF400529C +S3150800CFC85A60002318460C37BD4680BC704780B4A3 +S3150800CFD883B000AF7860012318460C37BD4680BC7D +S3150800CFE8704780B485B000AFF860B9607A600023EE +S3150800CFF818461437BD4680BC7047000080B586B011 +S3150800D00800AF7860144A154BD31A7B617B693B617C +S3150800D018134B1B68002B02D1114B124A1A60104B8E +S3150800D0281A687B6813443A699A4207D206F094FC50 +S3150800D03803460C221A604FF0FF3309E0084B1B68B9 +S3150800D048FB60074B1A687B681344054A1360FB683C +S3150800D05818461837BD4680BD0000012000040000A8 +S3150800D0681C1000202013002080B400AF00BFBD4666 +S3150800D07880BC704780B58EB000AF07F12803002240 +S3150800D0881A605A609A60DA6007F1200300221A606B +S3150800D0985A603B1D00221A605A609A60DA601A6163 +S3150800D0A85A619A61384B394A1A60374B00225A60D6 +S3150800D0B8354B00229A60344B4FF6FF72DA60324BD2 +S3150800D0C800221A61304B00229A612F4803F09FFD0F +S3150800D0D80346002B01D0FDF74BFC4FF48053BB6287 +S3150800D0E807F128031946284804F03EFA0346002B98 +S3150800D0F801D0FDF73DFC244803F026FF0346002B24 +S3150800D10801D0FDF735FC204803F0D0FD0346002B77 +S3150800D11801D0FDF72DFC00233B6200237B6207F153 +S3150800D12820031946184804F0C5FD0346002B01D00C +S3150800D138FDF71EFC60237B600023BB600023FB60B1 +S3150800D14800237B613B1D042219460F4804F04AF95F +S3150800D1580346002B01D0FDF70BFC00237B60012357 +S3150800D168BB603B1D00221946074804F0DFF8034652 +S3150800D178002B01D0FDF7FCFB034800F0CFF800BFF1 +S3150800D1883837BD4680BD00BF201000200004004087 +S3150800D19880B58EB000AF07F1280300221A605A60DE +S3150800D1A89A60DA6007F1200300221A605A603B1D6C +S3150800D1B800221A605A609A60DA601A615A619A619E +S3150800D1C8374B384A1A60364B4FF434725A60344B28 +S3150800D1D800229A60324B6422DA60314B00221A61C7 +S3150800D1E82F4B00229A612E4803F011FD0346002BA7 +S3150800D1F801D0FDF7BDFB4FF48053BB6207F1280346 +S3150800D2081946274804F0B0F90346002B01D0FDF764 +S3150800D218AFFB234803F098FE0346002B01D0FDF721 +S3150800D228A7FB00233B6200237B6207F1200319460C +S3150800D2381B4804F03FFD0346002B01D0FDF798FB79 +S3150800D24860237B600023BB600023FB6000237B61AF +S3150800D2583B1D04221946124804F0C4F80346002B5D +S3150800D26801D0FDF785FB3B1D082219460C4804F03A +S3150800D278B9F80346002B01D0FDF77AFB3B1D0C22B3 +S3150800D2881946074804F0AEF80346002B01D0FDF707 +S3150800D2986FFB034800F042F800BF3837BD4680BD2B +S3150800D2A8681000200008004080B584B000AF786098 +S3150800D2B87B681B68164A934214D1164BDB69154AD4 +S3150800D2C843F00203D361134BDB6903F00203FB60E7 +S3150800D2D8FB68002200211D2001F0DBFF1D2001F05C +S3150800D2E8F4FF10E07B681B680B4A93420BD1094B85 +S3150800D2F8DB69084A43F00403D361064BDB6903F08C +S3150800D3080403BB60BB6800BF1037BD4680BD00BFBD +S3150800D31800040040001002400008004080B58AB0AA +S3150800D32800AF786007F1140300221A605A609A6001 +S3150800D338DA607B681B68264A934218D1254B9B6995 +S3150800D348244A43F004039361224B9B6903F00403C0 +S3150800D3583B613B6980237B610223BB6102233B62F5 +S3150800D36807F1140319461C4802F028F92BE07B68D4 +S3150800D3781B681A4A934226D1164B9B69154A43F0ED +S3150800D38820039361134B9B6903F02003FB60FB683A +S3150800D3984FF460437B610223BB6102233B6207F1BA +S3150800D3A8140319460E4802F009F90E4B5B687B62AE +S3150800D3B87B6A43F0E0637B627B6A43F480537B6253 +S3150800D3C8084A7B6A536000BF2837BD4680BD00BF40 +S3150800D3D80004004000100240000801400008004010 +S3150800D3E8001401400000014080B500AF114B124AF5 +S3150800D3F81A60104B4FF416525A600E4B00229A6068 +S3150800D4080C4B0022DA600B4B00221A61094B0C22DE +S3150800D4185A61084B00229A61064B0022DA610548D0 +S3150800D42804F0C0FC0346002B01D0FDF7A1FA00BFA3 +S3150800D43880BD00BFB01000200050004080B500AF86 +S3150800D448114B124A1A60104B4FF4E1325A600E4BD0 +S3150800D45800229A600C4B0022DA600B4B00221A61F4 +S3150800D468094B0C225A61084B00229A61064B002286 +S3150800D478DA61054804F096FC0346002B01D0FDF74F +S3150800D48877FA00BF80BD00BFF810002000380140B9 +S3150800D49880B500AF114B124A1A60104B4FF4E132AF +S3150800D4A85A600E4B00229A600C4B0022DA600B4B2E +S3150800D4B800221A61094B0C225A61084B00229A610C +S3150800D4C8064B0022DA61054804F06CFC0346002B7B +S3150800D4D801D0FDF74DFA00BF80BD00BF40110020FE +S3150800D4E80044004080B500AF114B124A1A60104B31 +S3150800D4F84FF4E1325A600E4B00229A600C4B002218 +S3150800D508DA600B4B00221A61094B0C225A61084B48 +S3150800D51800229A61064B0022DA61054804F042FCAB +S3150800D5280346002B01D0FDF723FA00BF80BD00BFD4 +S3150800D538881100200048004080B592B000AF786096 +S3150800D54807F1300300221A605A609A60DA607B682D +S3150800D5581B68954A934245D1944BDB69934A43F431 +S3150800D5688013D361914BDB6903F48013FB62FB6A72 +S3150800D5788E4B9B698D4A43F0100393618B4B9B69CD +S3150800D58803F01003BB62BB6A884B9B69874A43F062 +S3150800D59820039361854B9B6903F020037B627B6AB2 +S3150800D5A84FF480533B6302237B630323FB6307F132 +S3150800D5B8300319467E4802F001F804233B6300232A +S3150800D5C87B630023BB6307F130031946794801F0EA +S3150800D5D8F5FF00220021352001F05BFE352001F019 +S3150800D5E874FEDCE07B681B68734A93423AD16F4B3A +S3150800D5F89B696E4A43F4804393616C4B9B6903F4B9 +S3150800D60880433B623B6A694B9B69684A43F004035B +S3150800D6189361664B9B6903F00403FB61FB694FF44E +S3150800D62800733B6302237B630323FB6307F1300321 +S3150800D6381946624801F0C2FF4FF480633B63002332 +S3150800D6487B630023BB6307F1300319465B4801F087 +S3150800D658B5FF00220021252001F01BFE252001F038 +S3150800D66834FE9CE07B681B68554A934246D14F4B6B +S3150800D678DB694E4A43F40033D3614C4BDB6903F448 +S3150800D6880033BB61BB69494B9B69484A43F0200391 +S3150800D6989361464B9B6903F020037B617B692023D2 +S3150800D6A83B6302237B630323FB6307F130031946B5 +S3150800D6B8404801F083FF40233B6300237B63002334 +S3150800D6C8BB6307F1300319463A4801F077FF3D4B2B +S3150800D6D85B683B643B6C43F0E0633B643B6C43F03C +S3150800D6E808033B64374A3B6C536000220021262016 +S3150800D6F801F0CFFD262001F0E8FD50E07B681B68A5 +S3150800D708314A93424BD1294BDB69284A43F4802393 +S3150800D718D361264BDB6903F480233B613B69234BC2 +S3150800D7289B69224A43F010039361204B9B6903F0D7 +S3150800D7381003FB60FB684FF480633B6302237B633B +S3150800D7480323FB6307F130031946194801F036FF2E +S3150800D7584FF400633B6300237B630023BB6307F135 +S3150800D76830031946124801F029FF164B5B687B649B +S3150800D7787B6C23F030037B647B6C43F0E0637B644B +S3150800D7887B6C43F010037B640E4A7B6C5360002263 +S3150800D7980021272001F07DFD272001F096FD00BF16 +S3150800D7A84837BD4680BD00BF005000400010024003 +S3150800D7B800100140001401400038014000080140EB +S3150800D7C8004400400000014000480040DFF834D01B +S3150800D7D8FFF74AFC0C480D490D4A002302E0D458C5 +S3150800D7E8C4500433C4188C42F9D30A4A0A4C002395 +S3150800D7F801E013600432A242FBD306F0B3F8FCF743 +S3150800D808CBFF7047000001200000002040020020DE +S3150800D8189C6301084002002020130020FEE7000050 +S3150800D82880B500AF084B1B68074A43F0100313601E +S3150800D838032001F023FD0F2000F008F8FFF7C0FACF +S3150800D8480023184680BD00BF0020024080B582B07C +S3150800D85800AF7860124B1A68124B1B7819464FF4BA +S3150800D8687A73B3FBF1F3B2FBF3F3184601F03BFD09 +S3150800D8780346002B01D001230EE07B680F2B0AD83C +S3150800D888002279684FF0FF3001F003FD064A7B68ED +S3150800D8981360002300E0012318460837BD4680BDFB +S3150800D8A86C000020740000207000002080B400AFCF +S3150800D8B8054B1B781A46054B1B681344034A136025 +S3150800D8C800BFBD4680BC704774000020D0110020F8 +S3150800D8D880B400AF024B1B681846BD4680BC70472B +S3150800D8E8D011002080B584B000AF7860FFF7F0FF4C +S3150800D8F8B8607B68FB60FB68B3F1FF3F05D00A4B4D +S3150800D9081B781A46FB681344FB6000BFFFF7E0FF65 +S3150800D9180246BB68D31AFA689A42F7D800BF00BF0E +S3150800D9281037BD4680BD00BF7400002080B586B09C +S3150800D93800AF78600023FB7500233B610023BB60BA +S3150800D9480023FB607B68002B01D10123BEE07B68BE +S3150800D9589B68002B7B689B6A002B09D17B68002291 +S3150800D968DA627B68002283F824207868FBF716FEBB +S3150800D978786800F0F1FB0346FB757B689B6A03F041 +S3150800D9881003002B40F09980FB7D002B40F0958012 +S3150800D9987B689B6A23F4885323F0020343F0020248 +S3150800D9A87B689A627B685A687B68DB691A437B6876 +S3150800D9B81B7B5B001343BA681343BB607B689B6891 +S3150800D9C8B3F5807F03D07B689B68012B02D14FF49F +S3150800D9D8807300E000233A6913433B617B681B7D2B +S3150800D9E8012B19D17B681B7B002B09D17B689B69A6 +S3150800D9F8013B5A033B69134343F400633B610BE05D +S3150800DA087B689B6A43F020027B689A627B68DB6ABC +S3150800DA1843F001027B68DA627B681B685B6823F45B +S3150800DA2869417B681B683A690A435A607B681B68C0 +S3150800DA389A68284B13407A681268B9680B4393604A +S3150800DA487B689B68B3F5807F03D07B689B68012B4E +S3150800DA5804D17B681B69013B1B05FB607B681B6857 +S3150800DA68DB6A23F470017B681B68FA680A43DA6282 +S3150800DA787B681B689A68184B1340BA689A420BD198 +S3150800DA887B680022DA627B689B6A23F0030343F00B +S3150800DA9801027B689A6218E07B689B6A23F0120386 +S3150800DAA843F010027B689A627B68DB6A43F00102DE +S3150800DAB87B68DA620123FB7507E07B689B6A43F09B +S3150800DAC810027B689A620123FB75FB7D1846183796 +S3150800DAD8BD4680BDFDF7E1FFFE0E1FFF80B584B089 +S3150800DAE800AF78600023FB737B6893F82430012B1A +S3150800DAF801D1022398E07B68012283F824207868FC +S3150800DB0800F0D0FA0346FB73FB7B002B40F08780B6 +S3150800DB187B689B6A23F4407323F0010343F48072FD +S3150800DB287B689A627B681B68414A934205D1414BD8 +S3150800DB385B6803F47023002B15D17B689B6A23F472 +S3150800DB4880127B689A627B681B685B6803F480634B +S3150800DB58002B26D07B689B6A23F4405343F48052F3 +S3150800DB687B689A621DE07B689B6A43F480127B682F +S3150800DB789A627B681B682F4A934204D07B681B68A5 +S3150800DB882B4A93420DD12B4B5B6803F48063002B19 +S3150800DB9807D07B689B6A23F4405343F480527B681A +S3150800DBA89A627B689B6A03F48053002B06D07B68CD +S3150800DBB8DB6A23F006027B68DA6202E07B680022E9 +S3150800DBC8DA627B68002283F824207B681B686FF07A +S3150800DBD802021A607B681B689B6803F46023B3F526 +S3150800DBE8602F13D17B681B68114A934205D1114BE4 +S3150800DBF85B6803F47023002B08D17B681B689A6856 +S3150800DC087B681B6842F4A0029A600CE07B681B6874 +S3150800DC189A687B681B6842F480129A6003E07B68FE +S3150800DC28002283F82420FB7B18461037BD4680BDA2 +S3150800DC38002801400024014080B584B000AF786010 +S3150800DC480023FB737B6893F82430012B01D1022348 +S3150800DC581AE07B68012283F82420786800F07CFAA9 +S3150800DC680346FB73FB7B002B09D17B689B6A23F46D +S3150800DC78885323F0010343F001027B689A627B68A4 +S3150800DC88002283F82420FB7B18461037BD4680BD42 +S3150800DC9890B587B000AF7860396000237B610023B0 +S3150800DCA8FB6000233B61FFF713FE78617B681B68FE +S3150800DCB89B6803F48073002B0BD07B689B6A43F040 +S3150800DCC820027B689A627B68002283F82420012355 +S3150800DCD8D3E07B681B685B6803F48073002B31D13B +S3150800DCE87B681B68DB6A03F47003002B2AD121E0E2 +S3150800DCF83B68B3F1FF3F1DD03B68002B07D0FFF701 +S3150800DD08E7FD02467B69D31A3A689A4212D27B68BB +S3150800DD181B681B6803F00203002B0BD17B689B6A00 +S3150800DD2843F004027B689A627B68002283F8242001 +S3150800DD380323A2E07B681B681B6803F00203002B19 +S3150800DD48D6D070E04F4B1C68022002F005FD03464A +S3150800DD58B4FBF3F27B681B6819694B4B0B40002B25 +S3150800DD6818D17B681B68D968484B0B40002B11D122 +S3150800DD787B681B681969464B0B40002B08D17B68E2 +S3150800DD881B68D968434B0B40002B01D1142320E0AC +S3150800DD9829231EE07B681B6819693D4B0B40002B3D +S3150800DDA806D17B681B68D9683A4B0B40002B0DD007 +S3150800DDB87B681B681969384B0B40002B08D17B68B0 +S3150800DDC81B68D968344B0B40002B01D1542300E05B +S3150800DDD8FC2302FB03F33B6121E03B68B3F1FF3FF9 +S3150800DDE81AD03B68002B07D0FFF772FD02467B69FD +S3150800DDF8D31A3A689A420FD2FB683A699A420BD9FB +S3150800DE087B689B6A43F004027B689A627B680022F7 +S3150800DE1883F82420032330E0FB680133FB60FB68A2 +S3150800DE283A699A42D9D87B681B686FF012021A6059 +S3150800DE387B689B6A43F400727B689A627B681B68F6 +S3150800DE489B6803F46023B3F5602F15D17B681B7BA9 +S3150800DE58002B11D17B689B6A23F480727B689A62CF +S3150800DE687B689B6A03F48053002B05D17B689B6A01 +S3150800DE7843F001027B689A62002318461C37BD46A0 +S3150800DE8890BD00BF6C0000202449922424499200C2 +S3150800DE9892244912922449004992240080B483B0F6 +S3150800DEA800AF78607B681B68DB6C18460C37BD4684 +S3150800DEB880BC704780B485B000AF786039600023AD +S3150800DEC8FB730023BB607B6893F82430012B01D1D0 +S3150800DED80223DCE07B68012283F824203B685B6820 +S3150800DEE8062B1CD87B681B68596B3B685A6813460F +S3150800DEF89B001344053B1F2202FA03F3DB43194030 +S3150800DF083B6818683B685A6813469B001344053BE8 +S3150800DF1800FA03F27B681B680A435A633CE03B68CD +S3150800DF285B680C2B1CD87B681B68196B3B685A689E +S3150800DF3813469B001344233B1F2202FA03F3DB43D1 +S3150800DF4819403B6818683B685A6813469B0013448F +S3150800DF58233B00FA03F27B681B680A431A631BE033 +S3150800DF687B681B68D96A3B685A6813469B00134442 +S3150800DF78413B1F2202FA03F3DB4319403B68186842 +S3150800DF883B685A6813469B001344413B00FA03F260 +S3150800DF987B681B680A43DA623B681B68092B1CD92D +S3150800DFA87B681B68D9683B681A6813465B00134484 +S3150800DFB81E3B072202FA03F3DB4319403B689868BD +S3150800DFC83B681A6813465B0013441E3B00FA03F2C3 +S3150800DFD87B681B680A43DA6019E07B681B6819695D +S3150800DFE83B681A6813465B001344072202FA03F3D0 +S3150800DFF8DB4319403B6898683B681A6813465B0018 +S3150800E008134400FA03F27B681B680A431A613B68E3 +S3150800E0181B68102B03D03B681B68112B32D17B6811 +S3150800E0281B681D4A934225D17B681B689B6803F4C5 +S3150800E0380003002B26D17B681B689A687B681B68D7 +S3150800E04842F400029A603B681B68102B1AD1134BDE +S3150800E0581B68134AA2FB03239A0C13469B00134416 +S3150800E0685B00BB6002E0BB68013BBB60BB68002B7A +S3150800E078F9D107E07B689B6A43F020027B689A62BD +S3150800E0880123FB737B68002283F82420FB7B184650 +S3150800E0981437BD4680BC7047002401406C00002038 +S3150800E0A883DE1B4380B584B000AF78600023FB602D +S3150800E0B80023BB607B681B689B6803F00103012B80 +S3150800E0C840D07B681B689A687B681B6842F0010227 +S3150800E0D89A601F4B1B681F4AA2FB03239B0CBB6055 +S3150800E0E802E0BB68013BBB60BB68002BF9D1FFF7B0 +S3150800E0F8EFFBF8601FE0FFF7EBFB0246FB68D31A55 +S3150800E108022B18D97B681B689B6803F00103012B4F +S3150800E11811D07B689B6A43F010027B689A627B6819 +S3150800E128DB6A43F001027B68DA627B68002283F8BF +S3150800E1382420012307E07B681B689B6803F001031A +S3150800E148012BD8D1002318461037BD4680BD00BF1D +S3150800E1586C00002083DE1B4380B584B000AF78606E +S3150800E1680023FB607B681B689B6803F00103012B8F +S3150800E1782ED17B681B689A687B681B6822F00102A7 +S3150800E1889A60FFF7A5FBF8601BE0FFF7A1FB0246BC +S3150800E198FB68D31A022B14D97B681B689B6803F0A3 +S3150800E1A80103012B0DD17B689B6A43F010027B683B +S3150800E1B89A627B68DB6A43F001027B68DA620123AC +S3150800E1C807E07B681B689B6803F00103012BDCD01A +S3150800E1D8002318461037BD4680BD000090B587B0A5 +S3150800E1E800AF78600023FB750023FB607B6893F813 +S3150800E1F82430012B01D1022397E07B68012283F89A +S3150800E20824207868FFF7A8FF0346FB757868FFF7A8 +S3150800E21849FF0346FB75FB7D002B40F081807B6830 +S3150800E2289B6A23F4885323F0020343F002027B68AF +S3150800E2389A62404B1C68022002F08EFA0346B4FB29 +S3150800E248F3F35B00FB6002E0FB68013BFB60FB68DD +S3150800E258002BF9D17B681B689A687B681B6842F0B3 +S3150800E26808029A60FFF734FB38611BE0FFF730FBBA +S3150800E27802463B69D31A0A2B14D97B681B689B6824 +S3150800E28803F00803002B0DD07B689B6A23F0120362 +S3150800E29843F010027B689A627B68002283F8242080 +S3150800E2A8012342E07B681B689B6803F00803002B80 +S3150800E2B8DCD17B681B689A687B681B6842F0040295 +S3150800E2C89A60FFF705FB38611BE0FFF701FB02467A +S3150800E2D83B69D31A0A2B14D97B681B689B6803F019 +S3150800E2E80403002B0DD07B689B6A23F0120343F0C6 +S3150800E2F810027B689A627B68002283F8242001232F +S3150800E30813E07B681B689B6803F00403002BDCD1C9 +S3150800E3187B689B6A23F0030343F001027B689A62D1 +S3150800E3287B68002283F82420FB7D18461C37BD46E7 +S3150800E33890BD00BF6C00002080B584B000AF78603F +S3150800E3487B68002B01D10123EDE07B6893F8203028 +S3150800E358DBB2002B02D17868FBF71CFC7B681B68CC +S3150800E3681A687B681B6842F001021A60FFF7B0FA60 +S3150800E378F86012E0FFF7ACFA0246FB68D31A0A2BD4 +S3150800E3880BD97B685B6A43F400327B685A627B6800 +S3150800E398052283F820200123C5E07B681B685B6893 +S3150800E3A803F00103002BE5D07B681B681A687B68B5 +S3150800E3B81B6822F002021A60FFF78AFAF86012E070 +S3150800E3C8FFF786FA0246FB68D31A0A2B0BD97B682D +S3150800E3D85B6A43F400327B685A627B68052283F8D5 +S3150800E3E8202001239FE07B681B685B6803F0020313 +S3150800E3F8002BE5D17B681B7E012B08D17B681B683F +S3150800E4081A687B681B6842F080021A6007E07B6816 +S3150800E4181B681A687B681B6822F080021A607B688A +S3150800E4285B7E012B08D17B681B681A687B681B68AA +S3150800E43842F040021A6007E07B681B681A687B6826 +S3150800E4481B6822F040021A607B689B7E012B08D164 +S3150800E4587B681B681A687B681B6842F020021A608A +S3150800E46807E07B681B681A687B681B6822F020022D +S3150800E4781A607B68DB7E012B08D17B681B681A68E3 +S3150800E4887B681B6822F010021A6007E07B681B6825 +S3150800E4981A687B681B6842F010021A607B681B7F43 +S3150800E4A8012B08D17B681B681A687B681B6842F0D1 +S3150800E4B808021A6007E07B681B681A687B681B688D +S3150800E4C822F008021A607B685B7F012B08D17B68FB +S3150800E4D81B681A687B681B6842F004021A6007E022 +S3150800E4E87B681B681A687B681B6822F004021A6036 +S3150800E4F87B689A687B68DB681A437B681B691A43DA +S3150800E5087B685B6942EA03017B685B685A1E7B681D +S3150800E5181B680A43DA617B6800225A627B68012213 +S3150800E52883F82020002318461037BD4680BD000012 +S3150800E53880B487B000AF786039607B681B687B61F8 +S3150800E5487B6893F82030FB74FB7C012B03D0FB7C9B +S3150800E558022B40F0BE80654B7B617B69D3F800329D +S3150800E56843F001027B69C3F800227B69D3F80032BD +S3150800E57823F47C527B69C3F800227B69D3F800220E +S3150800E5883B685B6A1B021A437B69C3F800223B682F +S3150800E5985B6903F01F03012202FA03F3FB607B6938 +S3150800E5A8D3F81C22FB68DB431A407B69C3F81C2294 +S3150800E5B83B68DB69002B23D17B69D3F80C22FB68FF +S3150800E5C8DB431A407B69C3F80C223B68DB681904ED +S3150800E5D83B685B689BB23A68526919437B6948325B +S3150800E5E843F832103B689B6819043B681B689AB263 +S3150800E5F83B685B690A4379694833DB000B445A6010 +S3150800E6083B68DB69012B22D17B69D3F80C22FB68AE +S3150800E6181A437B69C3F80C223B681B6819043B68D4 +S3150800E6285B689BB23A68526919437B69483243F872 +S3150800E63832103B689B6819043B68DB689AB23B68EA +S3150800E6485B690A4379694833DB000B445A603B68BF +S3150800E6589B69002B09D17B69D3F80422FB68DB4345 +S3150800E6681A407B69C3F8042207E07B69D3F80422B9 +S3150800E678FB681A437B69C3F804223B681B69002BAD +S3150800E68809D17B69D3F81422FB68DB431A407B69F6 +S3150800E698C3F8142207E07B69D3F81422FB681A43E7 +S3150800E6A87B69C3F814223B681B6A012B07D17B696F +S3150800E6B8D3F81C22FB681A437B69C3F81C227B69BA +S3150800E6C8D3F8003223F001027B69C3F8002200233D +S3150800E6D806E07B685B6A43F480227B685A620123FA +S3150800E6E818461C37BD4680BC704700BF006400400A +S3150800E6F880B584B000AF78607B6893F82030DBB2C9 +S3150800E708012B2ED17B68022283F820207B681B68A0 +S3150800E7181A687B681B6822F001021A60FFF7D8F8A6 +S3150800E728F86012E0FFF7D4F80246FB68D31A0A2BFA +S3150800E7380BD97B685B6A43F400327B685A627B684C +S3150800E748052283F82020012312E07B681B685B6892 +S3150800E75803F00103002BE5D17B6800225A620023E7 +S3150800E76806E07B685B6A43F400227B685A620123E9 +S3150800E77818461037BD4680BD80B584B000AF7860AE +S3150800E7887B6893F82030DBB2022B33D17B681B6891 +S3150800E7981A687B681B6842F001021A60FFF798F846 +S3150800E7A8F86012E0FFF794F80246FB68D31A0A2BBA +S3150800E7B80BD97B685B6A43F400327B685A627B68CC +S3150800E7C8052283F8202001231BE07B681B685B6809 +S3150800E7D803F00103002BE5D07B681B681A687B6881 +S3150800E7E81B6822F002021A607B68012283F820203F +S3150800E7F8002306E07B685B6A43F480127B685A62EA +S3150800E808012318461037BD4680BD80B489B000AFCD +S3150800E818F860B9607A603B60FB6893F82030FB774C +S3150800E828FB681B689B68BB61FB7F012B03D0FB7FDA +S3150800E838022B40F0AD80BB6903F08063002B0AD138 +S3150800E848BB6903F00063002B05D1BB6903F080534D +S3150800E858002B00F09580BB691B0E03F003037B6150 +S3150800E86801227B699A403B681A60BB689B68002B43 +S3150800E8780DD1BB681B685A05BB68DB68F968096867 +S3150800E8881A437B6918331B010B441A600FE0BB68EF +S3150800E8985B68DA00BB689B681A43BB68DB68F9687B +S3150800E8A809681A437B6918331B010B441A60FB680D +S3150800E8B81968BB681A697B6918331B010B4404334A +S3150800E8C81A60BB681B7D012B11D1FB681A687B6926 +S3150800E8D818331B01134404331B68FA68116843F498 +S3150800E8E880727B6918331B010B4404331A607B68F2 +S3150800E8F807331B781A067B6806331B781B041A43EA +S3150800E9087B6805331B781B0213437A68043212782E +S3150800E9181046FA68116843EA00027B691B010B4432 +S3150800E92803F5C6731A607B6803331B781A067B6877 +S3150800E93802331B781B041A437B6801331B781B02B6 +S3150800E94813437A6812781046FA68116843EA00028F +S3150800E9587B691B010B4403F5C4731A60FB681A68C4 +S3150800E9687B6918331B0113441B68FA68116843F05E +S3150800E97801027B6918331B010B441A6000230EE059 +S3150800E988FB685B6A43F40012FB685A62012306E0D7 +S3150800E998FB685B6A43F48022FB685A6201231846BF +S3150800E9A82437BD4680BC704780B485B000AF786010 +S3150800E9B80023FB607B6893F82030FB72FB7A012BF7 +S3150800E9C802D0FB7A022B1DD17B681B689B6803F073 +S3150800E9D88063002B02D0FB680133FB607B681B68E9 +S3150800E9E89B6803F00063002B02D0FB680133FB60C9 +S3150800E9F87B681B689B6803F08053002B02D0FB6872 +S3150800EA080133FB60FB6818461437BD4680BC70475F +S3150800EA1880B487B000AFF860B9607A603B60FB687D +S3150800EA2893F82030FB75FB7D012B03D0FB7D022B69 +S3150800EA3840F00381BB68002B0ED1FB681B68DB68B6 +S3150800EA4803F00303002B16D1FB685B6A43F4001234 +S3150800EA58FB685A620123F7E0FB681B681B6903F029 +S3150800EA680303002B07D1FB685B6A43F40012FB68B3 +S3150800EA785A620123E8E0FB681A68BB681B331B0166 +S3150800EA8813441B6803F004027B689A607B689B68DA +S3150800EA98002B0CD1FB681A68BB681B331B0113448F +S3150800EAA81B685B0DC3F30A027B681A600BE0FB68F8 +S3150800EAB81A68BB681B331B0113441B68DB0823F061 +S3150800EAC860427B685A60FB681A68BB681B331B017F +S3150800EAD813441B6803F002027B68DA60FB681A684D +S3150800EAE8BB681B331B01134404331B6803F0080374 +S3150800EAF8002B03D07B6808221A610BE0FB681A68AA +S3150800EB08BB681B331B01134404331B6803F00F024D +S3150800EB187B681A61FB681A68BB681B331B011344B8 +S3150800EB2804331B681B0ADAB27B689A61FB681A68A1 +S3150800EB38BB681B331B01134404331B681B0C9AB2AE +S3150800EB487B685A61FB681A68BB681B01134403F59E +S3150800EB58DC731B68DAB23B681A70FB681A68BB680C +S3150800EB681B01134403F5DC731B681A0A3B68013357 +S3150800EB78D2B21A70FB681A68BB681B01134403F5FE +S3150800EB88DC731B681A0C3B680233D2B21A70FB682E +S3150800EB981A68BB681B01134403F5DC731B681A0E55 +S3150800EBA83B680333D2B21A70FB681A68BB681B0144 +S3150800EBB8134403F5DE731A683B680433D2B21A7035 +S3150800EBC8FB681A68BB681B01134403F5DE731B68E8 +S3150800EBD81A0A3B680533D2B21A70FB681A68BB680A +S3150800EBE81B01134403F5DE731B681A0C3B680633CE +S3150800EBF8D2B21A70FB681A68BB681B01134403F57E +S3150800EC08DE731B681A0E3B680733D2B21A70BB68E4 +S3150800EC18002B08D1FB681B68DA68FB681B6842F09A +S3150800EC282002DA6007E0FB681B681A69FB681B683C +S3150800EC3842F020021A61002306E0FB685B6A43F487 +S3150800EC488022FB685A62012318461C37BD4680BCD9 +S3150800EC58704780B485B000AF786039607B6893F8F0 +S3150800EC682030FB73FB7B012B02D0FB7B022B09D1DF +S3150800EC787B681B6859697B681B683A680A435A6146 +S3150800EC88002306E07B685B6A43F480227B685A6245 +S3150800EC98012318461437BD4680BC704780B58AB02C +S3150800ECA800AF786000237B627B681B685B693B6200 +S3150800ECB87B681B685B68FB617B681B689B68BB6134 +S3150800ECC87B681B68DB687B617B681B681B693B6123 +S3150800ECD87B681B689B69FB603B6A03F00103002B92 +S3150800ECE87CD0BB6903F00103002B23D07B681B6823 +S3150800ECF801229A60BB6903F00203002B03D07868E7 +S3150800ED0800F083F916E0BB6903F00403002B04D06E +S3150800ED187B6A43F400637B620CE0BB6903F0080373 +S3150800ED28002B04D07B6A43F480537B6202E0786840 +S3150800ED3800F086F9BB6903F48073002B24D07B683E +S3150800ED481B684FF480729A60BB6903F40073002B42 +S3150800ED5803D0786800F062F916E0BB6903F48063AB +S3150800ED68002B04D07B6A43F400537B620CE0BB6932 +S3150800ED7803F40063002B04D07B6A43F480437B6268 +S3150800ED8802E0786800F065F9BB6903F48033002B64 +S3150800ED9824D07B681B684FF480329A60BB6903F4F9 +S3150800EDA80033002B03D0786800F041F916E0BB69F8 +S3150800EDB803F48023002B04D07B6A43F400437B6268 +S3150800EDC80CE0BB6903F40023002B04D07B6A43F4E8 +S3150800EDD880337B6202E0786800F044F93B6A03F006 +S3150800EDE80803002B0CD07B6903F01003002B07D00F +S3150800EDF87B6A43F400737B627B681B681022DA60BF +S3150800EE083B6A03F00403002B0BD07B6903F0080365 +S3150800EE18002B06D07B681B680822DA60786800F041 +S3150800EE2833F93B6A03F00203002B09D07B681B6899 +S3150800EE38DB6803F00303002B02D0786800F01BF99F +S3150800EE483B6A03F04003002B0CD03B6903F0100320 +S3150800EE58002B07D07B6A43F480637B627B681B6858 +S3150800EE6810221A613B6A03F02003002B0BD03B697A +S3150800EE7803F00803002B06D07B681B6808221A6172 +S3150800EE88786800F00AF93B6A03F01003002B09D0EA +S3150800EE987B681B681B6903F00303002B02D078689C +S3150800EEA8FBF7F6FD3B6A03F40033002B0BD0FB692E +S3150800EEB803F01003002B06D07B681B6810225A60E3 +S3150800EEC8786800F0F3F83B6A03F48033002B0BD01C +S3150800EED8FB6903F00803002B06D07B681B68082229 +S3150800EEE85A60786800F0EBF83B6A03F40043002B95 +S3150800EEF87BD0FB6903F00403002B72D03B6A03F44A +S3150800EF088073002B08D0FB6803F00103002B03D09D +S3150800EF187B6A43F001037B623B6A03F40073002BA8 +S3150800EF2808D0FB6803F00203002B03D07B6A43F082 +S3150800EF3802037B623B6A03F48063002B08D0FB68F4 +S3150800EF4803F00403002B03D07B6A43F004037B62B7 +S3150800EF583B6A03F40063002B43D0FB6803F0700395 +S3150800EF68002B3ED0FB6803F07003602B2BD0602B78 +S3150800EF782ED8502B22D0502B2AD8402B19D0402BCC +S3150800EF8826D8302B10D0302B22D8102B02D0202B85 +S3150800EF9805D01DE07B6A43F008037B6219E07B6AAB +S3150800EFA843F010037B6214E07B6A43F020037B621C +S3150800EFB80FE07B6A43F040037B620AE07B6A43F012 +S3150800EFC880037B6205E07B6A43F480737B6200E01A +S3150800EFD800BF7B681B689A697B681B6822F0700209 +S3150800EFE89A617B681B6804225A607B6A002B08D0E2 +S3150800EFF87B685A6A7B6A1A437B685A62786800F0A3 +S3150800F00867F800BF2837BD4680BD80B483B000AF17 +S3150800F018786000BF0C37BD4680BC704780B483B0A3 +S3150800F02800AF786000BF0C37BD4680BC704780B417 +S3150800F03883B000AF786000BF0C37BD4680BC704708 +S3150800F04880B483B000AF786000BF0C37BD4680BC7B +S3150800F058704780B483B000AF786000BF0C37BD46F0 +S3150800F06880BC704780B483B000AF786000BF0C37A7 +S3150800F078BD4680BC704780B483B000AF786000BFD7 +S3150800F0880C37BD4680BC704780B483B000AF786043 +S3150800F09800BF0C37BD4680BC704780B483B000AF4C +S3150800F0A8786000BF0C37BD4680BC704780B483B013 +S3150800F0B800AF786000BF0C37BD4680BC704780B487 +S3150800F0C883B000AF786000BF0C37BD4680BC704778 +S3150800F0D880B483B000AF786000BF0C37BD4680BCEB +S3150800F0E87047000080B485B000AF78607B6803F08D +S3150800F0F80703FB600C4BDB68BB60BA684FF6FF0377 +S3150800F1081340BB60FB681A02BB68134343F0BF632E +S3150800F11843F40033BB60044ABB68D36000BF1437A6 +S3150800F128BD4680BC704700BF00ED00E080B400AF64 +S3150800F138044BDB681B0A03F007031846BD4680BC68 +S3150800F148704700BF00ED00E080B483B000AF034607 +S3150800F158FB7197F90730002B0BDBFB7903F01F02CD +S3150800F168064997F907305B09012000FA02F241F8C7 +S3150800F178232000BF0C37BD4680BC704700E100E07D +S3150800F18880B483B000AF03463960FB7197F907303E +S3150800F198002B0ADB3B68DAB20C4997F907301201EB +S3150800F1A8D2B20B4483F800230AE03B68DAB208496E +S3150800F1B8FB7903F00F03043B1201D2B20B441A760B +S3150800F1C800BF0C37BD4680BC704700BF00E100E0B1 +S3150800F1D800ED00E080B489B000AFF860B9607A60E5 +S3150800F1E8FB6803F00703FB61FB69C3F10703042BFC +S3150800F1F828BF0423BB61FB690433062B02D9FB69C4 +S3150800F208033B00E000237B614FF0FF32BB6902FA3B +S3150800F21803F3DA43BB681A407B699A404FF0FF311B +S3150800F2287B6901FA03F3D9437B680B4013431846F5 +S3150800F2382437BD4680BC704780B582B000AF786079 +S3150800F2487B68013BB3F1807F01D301230FE00A4AAB +S3150800F2587B68013B53600F214FF0FF30FFF790FFA3 +S3150800F268054B00229A60044B07221A6000231846A9 +S3150800F2780837BD4680BD00BF10E000E080B582B003 +S3150800F28800AF78607868FFF72DFF00BF0837BD46DE +S3150800F29880BD80B586B000AF0346B9607A60FB7357 +S3150800F2A800237B61FFF742FF78617A68B968786955 +S3150800F2B8FFF790FF024697F90F3011461846FFF7F1 +S3150800F2C85FFF00BF1837BD4680BD80B582B000AF66 +S3150800F2D80346FB7197F907301846FFF735FF00BF55 +S3150800F2E80837BD4680BD80B582B000AF78607868BB +S3150800F2F8FFF7A2FF034618460837BD4680BD80B506 +S3150800F30882B000AF78607B68002B01D101230EE03C +S3150800F3187B685B79DBB2002B05D17B6800221A7102 +S3150800F3287868FAF761FF7B6801225A710023184644 +S3150800F3380837BD4680BD80B485B000AF7860002325 +S3150800F348FB737B6893F82130DBB2022B08D07B6805 +S3150800F35804229A637B68002283F82020012320E090 +S3150800F3687B681B681A687B681B6822F00E021A609D +S3150800F3787B681B681A687B681B6822F001021A609A +S3150800F3887B681A6C7B68DB6B012101FA02F25A600A +S3150800F3987B68012283F821207B68002283F82020D5 +S3150800F3A8FB7B18461437BD4680BC704780B584B0C9 +S3150800F3B800AF78600023FB737B6893F82130DBB2D3 +S3150800F3C8022B05D07B6804229A630123FB73D6E0D7 +S3150800F3D87B681B681A687B681B6822F00E021A602D +S3150800F3E87B681B681A687B681B6822F001021A602A +S3150800F3F87B681B681A46644B9A4258D97B681B680F +S3150800F408624A93424FD07B681B68614A934248D048 +S3150800F4187B681B685F4A934240D07B681B685E4AD4 +S3150800F428934238D07B681B685C4A934230D07B6825 +S3150800F4381B685B4A934228D07B681B68524A9342EA +S3150800F44820D07B681B68574A934219D07B681B688B +S3150800F458554A934212D07B681B68544A93420AD08D +S3150800F4687B681B68524A934202D14FF480531BE0CB +S3150800F4784FF4803318E04FF4807315E0102313E037 +S3150800F488012311E04FF080730EE04FF480130BE070 +S3150800F4984FF4803308E04FF4805305E04FF4807347 +S3150800F4A802E0102300E00123424A536057E07B68D4 +S3150800F4B81B68364A93424FD07B681B68344A934286 +S3150800F4C848D07B681B68334A934240D07B681B68E0 +S3150800F4D8314A934238D07B681B68304A934230D009 +S3150800F4E87B681B682E4A934228D07B681B68264A85 +S3150800F4F8934220D07B681B682A4A934219D07B68B6 +S3150800F5081B68294A934212D07B681B68274A93428C +S3150800F5180AD07B681B68264A934202D14FF4805367 +S3150800F5281BE04FF4803318E04FF4807315E010237E +S3150800F53813E0012311E04FF080730EE04FF48013B7 +S3150800F5480BE04FF4803308E04FF4805305E04FF49E +S3150800F558807302E0102300E00123174A53607B6892 +S3150800F568012283F821207B68002283F820207B6803 +S3150800F5785B6B002B03D07B685B6B78689847FB7BD3 +S3150800F58818461037BD4680BD800002400800024074 +S3150800F5981C00024030000240440002405800024065 +S3150800F5A86C000240080402401C0402403004024071 +S3150800F5B844040240000402400000024080B48BB0B4 +S3150800F5C800AF7860396000237B6200233B6269E1FB +S3150800F5D801227B6A02FA03F3FB613B681B68FA6936 +S3150800F5E81340BB61BA69FB699A4240F058813B6887 +S3150800F5F85B689A4A93425ED0984A934275D8984A65 +S3150800F608934258D0964A93426FD8964A934252D014 +S3150800F618944A934269D8944A93424CD0924A934260 +S3150800F62863D8924A934246D0904A93425DD8122BA1 +S3150800F6382AD8122B59D801A252F823F0BFF6000887 +S3150800F64899F60008ABF60008EDF60008F3F6000888 +S3150800F658F3F60008F3F60008F3F60008F3F60008D0 +S3150800F668F3F60008F3F60008F3F60008F3F60008C0 +S3150800F678F3F60008F3F60008F3F60008F3F60008B0 +S3150800F688A1F60008B5F60008794A934213D02CE08B +S3150800F6983B68DB683B6229E03B68DB6804333B620E +S3150800F6A824E03B68DB6808333B621FE03B68DB689D +S3150800F6B80C333B621AE03B689B68002B02D1042393 +S3150800F6C83B6213E03B689B68012B05D108233B6224 +S3150800F6D87B68FA691A6109E008233B627B68FA695C +S3150800F6E85A6103E000233B6200E000BFBB69FF2BB9 +S3150800F6F801D87B6801E07B6804337B61BB69FF2B13 +S3150800F70802D87B6A9B0002E07B6A083B9B003B6148 +S3150800F7187B691A680F213B6901FA03F3DB431A4030 +S3150800F728396A3B6901FA03F31A437B691A603B682D +S3150800F7385B6803F08053002B00F0B1804D4B9B6942 +S3150800F7484C4A43F0010393614A4B9B6903F0010352 +S3150800F758BB60BB68484A7B6A9B08023352F8233069 +S3150800F768FB607B6A03F003039B000F2202FA03F38C +S3150800F778DB43FA681340FB607B68404A934213D020 +S3150800F7887B683F4A93420DD07B683E4A934207D02E +S3150800F7987B683D4A934201D1032306E0042304E02B +S3150800F7A8022302E0012300E000237A6A02F003023A +S3150800F7B892009340FA681343FB602F497B6A9B08BB +S3150800F7C80233FA6841F823203B685B6803F4801320 +S3150800F7D8002B06D02D4B9A682C49BB6913438B60BE +S3150800F7E806E02A4B9A68BB69DB43284913408B60B5 +S3150800F7F83B685B6803F40013002B06D0234BDA68D2 +S3150800F8082249BB691343CB6006E0204BDA68BB691B +S3150800F818DB431E491340CB603B685B6803F400333F +S3150800F828002B06D0194B5A681849BB6913434B6015 +S3150800F83806E0164B5A68BB69DB43144913404B600C +S3150800F8483B685B6803F48033002B21D00F4B1A689A +S3150800F8580E49BB6913430B6021E000BF0000321054 +S3150800F86800003110000022100000211000001210BC +S3150800F8780000111000100240000001400008014075 +S3150800F888000C01400010014000140140000401402A +S3150800F8980B4B1A68BB69DB43094913400B607B6A43 +S3150800F8A801337B623B681A687B6A22FA03F3002BEA +S3150800F8B87FF48EAE00BF00BF2C37BD4680BC7047AC +S3150800F8C80004014080B485B000AF78600B467B80A1 +S3150800F8D87B689A687B881340002B02D00123FB7348 +S3150800F8E801E00023FB73FB7B18461437BD4680BC32 +S3150800F8F8704780B483B000AF78600B467B801346A8 +S3150800F9087B707B78002B03D07A887B681A6103E0C2 +S3150800F9187B881A047B681A6100BF0C37BD4680BC11 +S3150800F9287047000080B400AF034B01221A6000BF7D +S3150800F938BD4680BC704700BF20000E4280B582B025 +S3150800F94800AFFDF7C5FF7860604B1B685F4A43F058 +S3150800F9580103136008E0FDF7BBFF02467B68D31A6C +S3150800F968022B01D90323ACE0584B1B6803F00203AA +S3150800F978002BF0D0554B1B6823F0F803534A43F085 +S3150800F98880031360FDF7A4FF7860504B00225A6085 +S3150800F9980AE0FDF79DFF02467B68D31A41F28832D2 +S3150800F9A8934201D903238CE0484B5B6803F00C03A8 +S3150800F9B8002BEED1464B474A1A60474B1B68184638 +S3150800F9C8FDF744FF0346002B01D0012379E0FDF734 +S3150800F9D87FFF78603D4B1B683C4A23F080731360B1 +S3150800F9E808E0FDF775FF02467B68D31A022B01D992 +S3150800F9F8032366E0354B1B6803F00073002BF0D130 +S3150800FA08324B00225A60FDF763FF78602F4B1B685C +S3150800FA182E4A23F41023136008E0FDF759FF02461F +S3150800FA287B68D31A642B01D903234AE0274B1B6842 +S3150800FA3803F40033002BF0D1244B1B68234A23F424 +S3150800FA4880231360FDF744FF7860204B1B681F4A24 +S3150800FA5823F08063136008E0FDF73AFF02467B68E7 +S3150800FA68D31A642B01D903232BE0184B1B6803F020 +S3150800FA780063002BF0D1FDF72BFF7860134B1B684A +S3150800FA88124A23F08053136008E0FDF721FF024667 +S3150800FA987B68D31A642B01D9032312E00B4B1B6826 +S3150800FAA803F00053002BF0D1084B0022DA62074B0B +S3150800FAB85B6A064A43F080735362044B00229A60D5 +S3150800FAC8002318460837BD4680BD00BF001002400F +S3150800FAD86C00002000127A007000002080B586B0FD +S3150800FAE800AF78607B68002B01D1012304E37B68AB +S3150800FAF81B6803F00103002B00F08780924B5B68B4 +S3150800FB0803F00C03042B0CD08F4B5B6803F00C0333 +S3150800FB18082B12D18C4B5B6803F48033B3F5803F0E +S3150800FB280BD1894B1B6803F40033002B6CD07B6818 +S3150800FB389B68002B68D10123DEE27B689B68B3F5D6 +S3150800FB48803F06D1804B1B687F4A43F48033136095 +S3150800FB582EE07B689B68002B0CD17B4B1B687A4A86 +S3150800FB6823F480331360784B1B68774A23F4802381 +S3150800FB7813601DE07B689B68B3F5A02F0CD1724B08 +S3150800FB881B68714A43F4802313606F4B1B686E4ADF +S3150800FB9843F4803313600BE06B4B1B686A4A23F403 +S3150800FBA880331360684B1B68674A23F48023136005 +S3150800FBB87B689B68002B13D0FDF78AFE386108E03E +S3150800FBC8FDF786FE02463B69D31A642B01D903233F +S3150800FBD892E25D4B1B6803F40033002BF0D014E067 +S3150800FBE8FDF776FE386108E0FDF772FE02463B69C6 +S3150800FBF8D31A642B01D903237EE2534B1B6803F4FB +S3150800FC080033002BF0D100E000BF7B681B6803F0C7 +S3150800FC180203002B63D04C4B5B6803F00C03002BE4 +S3150800FC280BD0494B5B6803F00C03082B1CD1464BD9 +S3150800FC385B6803F48033002B16D1434B1B6803F02B +S3150800FC480203002B05D07B685B69012B01D00123D1 +S3150800FC5852E23D4B1B6823F0F8027B689B69DB0080 +S3150800FC68394913430B603AE07B685B69002B20D05F +S3150800FC78364B01221A60FDF72BFE386108E0FDF7BE +S3150800FC8827FE02463B69D31A022B01D9032333E21E +S3150800FC982D4B1B6803F00203002BF0D02A4B1B6878 +S3150800FCA823F0F8027B689B69DB00274913430B603E +S3150800FCB815E0264B00221A60FDF70AFE386108E0AF +S3150800FCC8FDF706FE02463B69D31A022B01D9032320 +S3150800FCD812E21D4B1B6803F00203002BF0D17B6868 +S3150800FCE81B6803F00803002B3AD07B68DB69002BF6 +S3150800FCF819D0174B01221A60FDF7EAFD386108E0AA +S3150800FD08FDF7E6FD02463B69D31A022B01D9032300 +S3150800FD18F2E10D4B5B6A03F00203002BF0D00120D9 +S3150800FD2800F0CAFB1CE00A4B00221A60FDF7D0FD5A +S3150800FD3838610FE0FDF7CCFD02463B69D31A022B62 +S3150800FD4808D90323D8E100BF001002400000424248 +S3150800FD58800442429B4B5B6A03F00203002BE9D1FD +S3150800FD687B681B6803F00403002B00F0A6800023B9 +S3150800FD78FB75944BDB6903F08053002B0DD1914B2F +S3150800FD88DB69904A43F08053D3618E4BDB6903F0F5 +S3150800FD988053BB60BB680123FB758B4B1B6803F458 +S3150800FDA88073002B18D1884B1B68874A43F48073E5 +S3150800FDB81360FDF78DFD386108E0FDF789FD0246F9 +S3150800FDC83B69D31A642B01D9032395E17E4B1B683B +S3150800FDD803F48073002BF0D07B681B69012B06D1CE +S3150800FDE8784B1B6A774A43F0010313622DE07B6858 +S3150800FDF81B69002B0CD1734B1B6A724A23F001034B +S3150800FE081362704B1B6A6F4A23F0040313621CE0E3 +S3150800FE187B681B69052B0CD16A4B1B6A694A43F038 +S3150800FE2804031362674B1B6A664A43F001031362AD +S3150800FE380BE0644B1B6A634A23F001031362614BA8 +S3150800FE481B6A604A23F0040313627B681B69002B4C +S3150800FE5815D0FDF73DFD38610AE0FDF739FD024684 +S3150800FE683B69D31A41F28832934201D9032343E105 +S3150800FE78544B1B6A03F00203002BEED014E0FDF77F +S3150800FE8827FD38610AE0FDF723FD02463B69D31AC8 +S3150800FE9841F28832934201D903232DE1494B1B6A63 +S3150800FEA803F00203002BEED1FB7D012B05D1454B50 +S3150800FEB8DB69444A23F08053D3617B68DB6A002BED +S3150800FEC800F08C803F4B5B6803F48033B3F5803FC2 +S3150800FED80ED13C4B5B6803F00C03082B08D1394B51 +S3150800FEE8DB6A03F48033B3F5803F01D1012303E1CC +S3150800FEF87B68DB6A022B4ED1324B1B6803F08053B2 +S3150800FF08002B09D02F4BDB6A03F0F0027B685B6B8A +S3150800FF189A4201D00123EFE02C4B00221A60FDF724 +S3150800FF28D7FC386108E0FDF7D3FC02463B69D31ACB +S3150800FF38642B01D90323DFE0224B1B6803F0006317 +S3150800FF48002BF0D11F4BDB6A23F0F0027B685B6B52 +S3150800FF581C491343CB621B4BDB6A23F470627B682C +S3150800FF681B6B18491343CB62184B01221A60FDF71D +S3150800FF78AFFC386108E0FDF7ABFC02463B69D31ACB +S3150800FF88642B01D90323B7E00E4B1B6803F0006303 +S3150800FF98002BF0D022E00B4BDB6A0A4A23F48033A5 +S3150800FFA8D3620A4B00221A60FDF792FC38610FE00B +S3150800FFB8FDF78EFC02463B69D31A642B08D903233E +S3150800FFC89AE000BF001002400070004068004242F4 +S3150800FFD84B4B1B6803F00063002BE9D17B681B6A4F +S3150800FFE8002B00F08880464B5B6803F00C03082B4F +S3150800FFF868D07B681B6A022B4DD1424B00221A60D7 +S31508010008FDF766FC386108E0FDF762FC02463B69C4 +S31508010018D31A022B01D903236EE0394B1B6803F067 +S315080100280073002BF0D17B685B6AB3F5803F0FD16B +S31508010038334BDA6A7B685B6831491343CB62304BC9 +S31508010048DB6A23F00F027B68DB682D491343CB6211 +S315080100582B4B5B6823F474127B68596A7B689B6A25 +S315080100680B43274913434B60264B01221A60FDF7B8 +S315080100782FFC386108E0FDF72BFC02463B69D31AC9 +S31508010088022B01D9032337E01D4B1B6803F00073C4 +S31508010098002BF0D02FE01B4B00221A60FDF718FC45 +S315080100A8386108E0FDF714FC02463B69D31A022BAE +S315080100B801D9032320E0124B1B6803F00073002BB8 +S315080100C8F0D118E07B681B6A012B01D1012313E0E3 +S315080100D80B4B5B68FB60FB6803F480327B685B6AE1 +S315080100E89A4206D1FB6803F470127B689B6A9A42A6 +S315080100F801D0012300E0002318461837BD4680BD04 +S31508010108001002406000424280B584B000AF7860B2 +S3150801011839607B68002B01D10123D0E06A4B1B6843 +S3150801012803F007033A689A4210D9674B1B6823F00C +S31508010138070265493B6813430B60634B1B6803F069 +S3150801014807033A689A4201D00123B8E07B681B681D +S3150801015803F00203002B20D07B681B6803F0040315 +S31508010168002B05D0594B5B68584A43F4E063536042 +S315080101787B681B6803F00803002B05D0534B5B68A3 +S31508010188524A43F460535360504B5B6823F0F002BC +S315080101987B689B684D4913434B607B681B6803F072 +S315080101A80103002B40D07B685B68012B07D1474BBD +S315080101B81B6803F40033002B15D101237FE07B6804 +S315080101C85B68022B07D1414B1B6803F00073002BB0 +S315080101D809D1012373E03D4B1B6803F00203002B89 +S315080101E801D101236BE0394B5B6823F003027B6875 +S315080101F85B68364913434B60FDF76AFBF8600AE00A +S31508010208FDF766FB0246FB68D31A41F28832934228 +S3150801021801D9032353E02D4B5B6803F00C027B6875 +S315080102285B689B009A42EBD1274B1B6803F00703CF +S315080102383A689A4210D2244B1B6823F007022249CE +S315080102483B6813430B60204B1B6803F007033A68A6 +S315080102589A4201D0012332E07B681B6803F0040344 +S31508010268002B08D0194B5B6823F4E0627B68DB68CE +S31508010278164913434B607B681B6803F00803002B78 +S3150801028809D0124B5B6823F460527B681B69DB0053 +S315080102980E4913434B6000F021F802460B4B5B6885 +S315080102A81B0903F00F030A49CB5C22FA03F3094A2F +S315080102B81360094B1B681846FDF7C8FA0023184648 +S315080102C81037BD4680BD00BF00200240001002401D +S315080102D8C05F01086C000020700000202DE9B04FAE +S315080102E88EB000AF0023FB620023BB6200237B6349 +S315080102F800237B6200233B6300233B620023FB61E7 +S315080103084E4B5B68FB62FB6A03F00C03042B02D0B5 +S31508010318082B03D089E04A4B3B6389E0FB6A9B0CAF +S3150801032803F00F02474B9B5C7B62FB6A03F480333D +S31508010338002B72D0414BDB6A03F00F02424B9B5CE0 +S31508010348BB623E4BDB6A03F48033002B53D03B4B2D +S31508010358DB6A1B0903F00F0301333B62374BDB6A80 +S315080103681B0A03F00F030233FB61FB6900229A4655 +S3150801037893467B6A00223B617A613B6903FB0BF270 +S315080103887B690AFB03F313443A69AAFB02010B4486 +S3150801039819462B4B03FB01F2002300FB03F3134415 +S315080103A8274AA0FB02452B441D463B6A0022BB602F +S315080103B8FA60BB6A00223B607A60D7E902010B46FC +S315080103C8D7E900AB524602FB03F25B4684460CFBAF +S315080103D803F3134402465146A2FB01894B44994645 +S315080103E842464B4620462946F8F700FF02460B4681 +S315080103F813467B6307E07B6A114A03FB02F2BB6A71 +S31508010408B2FBF3F37B630F4B5B7B1A467B6A93421A +S3150801041808D17B6B5B087B6304E07B6A0B4A02FBAA +S3150801042803F37B637B6B3B6302E0094B3B6300BFCA +S315080104383B6B18463837BD46BDE8B08F00100240F9 +S3150801044840787D01D85F0108E85F010800093D0089 +S3150801045800127A0080B400AF024B1B681846BD46E5 +S3150801046880BC70476C00002080B500AFFFF7F2FF2B +S315080104780246054B5B681B0A03F007030349CB5C75 +S3150801048822FA03F3184680BD00100240D05F01081E +S3150801049880B500AFFFF7DEFF0246054B5B68DB0A4E +S315080104A803F007030349CB5C22FA03F3184680BD18 +S315080104B800100240D05F010880B485B000AF7860AB +S315080104C80A4B1B680A4AA2FB03235B0A7A6802FBE2 +S315080104D803F3FB6000BFFB685A1EFA60002BF9D1CB +S315080104E800BF00BF1437BD4680BC70476C000020AA +S315080104F8D34D621080B588B000AF786000237B6160 +S3150801050800233B610023FB617B681B6803F0010339 +S31508010518002B7DD00023FB768B4BDB6903F08053D8 +S31508010528002B0DD1884BDB69874A43F08053D36189 +S31508010538854BDB6903F08053FB60FB680123FB7677 +S31508010548824B1B6803F48073002B18D17F4B1B68F9 +S315080105587E4A43F480731360FDF7BAF9786108E0B7 +S31508010568FDF7B6F902467B69D31A642B01D9032329 +S31508010578E5E0764B1B6803F48073002BF0D0724BC9 +S315080105881B6A03F440733B613B69002B2ED07B68D9 +S315080105985B6803F440733A699A4227D06A4B1B6A27 +S315080105A823F440733B616A4B01221A60684B0022A7 +S315080105B81A60654A3B6913623B6903F00103002B1C +S315080105C814D0FDF785F978610AE0FDF781F9024645 +S315080105D87B69D31A41F28832934201D90323AEE0E3 +S315080105E8594B1B6A03F00203002BEED0564B1B6AC4 +S315080105F823F440727B685B68534913430B62FB7E9D +S31508010608012B05D1504BDB694F4A23F08053D3613F +S315080106187B681B6803F00203002B08D04A4B5B680A +S3150801062823F440427B689B68474913434B607B68C0 +S315080106381B6803F00403002B08D0434BDB6A23F439 +S3150801064800327B68DB6840491343CB627B681B68C9 +S3150801065803F00803002B08D03B4BDB6A23F48022FE +S315080106687B681B6938491343CB62374BDB6A03F44A +S315080106780033002B05D1344BDB6A03F48023002BA6 +S3150801068801D00123FB61FB69012B48D12E4B1B685D +S3150801069803F08053002B38D12B4B1B6803F080637A +S315080106A8002B09D0284BDB6A03F0F0027B689B69AB +S315080106B89A4201D0012342E0234BDB6A23F0F00278 +S315080106C87B689B6920491343CB621F4BDB6A23F47A +S315080106D870427B685B691C491343CB621D4B012237 +S315080106E81A60FDF7F5F8786108E0FDF7F1F80246B2 +S315080106F87B69D31A642B01D9032320E0124B1B68A3 +S3150801070803F00053002BF0D009E00F4BDB6A03F422 +S3150801071870427B685B699A4201D001230FE07B68C6 +S315080107281B6803F01003002B08D0074B5B6823F4FA +S3150801073880027B68DB69044913434B60002318462A +S315080107482037BD4680BD00BF00100240007000403A +S31508010758400442427000424280B58AB000AF7860D0 +S315080107680023FB6100237B620023BB6100237B61B5 +S3150801077800233B610023FB600023BB6000233B6227 +S315080107887B68013B0F2B00F21D8101A252F823F069 +S315080107984D090108B1090108CD090108AB08010885 +S315080107A8CD090108CD090108CD090108FD08010887 +S315080107B8CD090108CD090108CD090108CD090108A6 +S315080107C8CD090108CD090108CD090108D90701088C +S315080107D8834B5B68BB60824B1B6803F08073002BF5 +S315080107E800F0F280BB689B0C03F00F037D4AD35CCB +S315080107F8BB61BB6803F48033002B3BD0784BDB6ABB +S3150801080803F00F03784AD35CFB61754BDB6A03F483 +S315080108188033002B1CD0724BDB6A1B0903F00F03CC +S315080108280133FB606E4BDB6A1B0A03F00F030233C5 +S315080108387B616E4AFB68B2FBF3F37A6903FB02F242 +S31508010848FB69B2FBF3F2BB6902FB03F37B6207E0C0 +S31508010858664AFB69B2FBF3F2BB6902FB03F37B62E7 +S31508010868604B5B7B1A46BB69934208D17B6A5B0876 +S315080108787B6204E0BB695E4A02FB03F37B62584B61 +S315080108885B6803F48003B3F5800F02D17B6A3B6288 +S315080108989AE07B6A5B00574AA2FB03235B083B6223 +S315080108A892E04F4BDB6A03F40033002B03D1FFF7C1 +S315080108B815FD38628AE04A4B1B6803F08053002B02 +S315080108C800F08480464BDB6A1B0903F00F030133EA +S315080108D8FB60434BDB6A1B0B03F00F0302333B61D7 +S315080108E8424AFB68B2FBF3F33A6902FB03F35B007E +S315080108F83B626BE03A4BDB6A03F48023002B03D196 +S31508010908FFF7ECFC386263E0354B1B6803F080534C +S31508010918002B5DD0324BDB6A1B0903F00F03013349 +S31508010928FB602F4BDB6A1B0B03F00F0302333B619A +S315080109382E4AFB68B2FBF3F33A6902FB03F35B0041 +S315080109483B6245E0264B1B6ABB60BB6803F44073F0 +S31508010958B3F5807F08D1BB6803F00203002B03D0E7 +S315080109684FF400433B621EE0BB6803F44073B3F5DA +S31508010978007F09D11A4B5B6A03F00203002B03D0E7 +S3150801098849F640433B620EE0BB6803F44073B3F58E +S31508010998407F1FD1124B1B6803F40033002B19D073 +S315080109A8154B3B6216E015E0FFF772FD02460C4B44 +S315080109B85B689B0B03F0030301335B00B2FBF3F39C +S315080109C83B6208E000BF06E000BF04E000BF02E0A2 +S315080109D800BF00E000BF3B6A18462837BD4680BD00 +S315080109E800100240F85F01080860010840787D0197 +S315080109F800093D00ABAAAAAAF0FA020080B584B09C +S31508010A0800AF78600023FB607B68002B01D10123C6 +S31508010A187AE07B685B7CDBB2002B05D17B68002218 +S31508010A281A747868FAF744FF7B6802225A74786858 +S31508010A3800F070F80346002B04D07B6804225A7428 +S31508010A48012361E0786800F092F80346002B04D088 +S31508010A587B6804225A74012356E07B681B685A6826 +S31508010A687B681B6822F007025A607B689B68002B23 +S31508010A7805D0274B1B6B264A23F001031363244B26 +S31508010A88DB6A23F460727B689B6821491343CB624E +S31508010A987B685B68B3F1FF3F03D07B685B68FB60E3 +S31508010AA80EE00120FFF758FEF860FB68002B04D119 +S31508010AB87B6804225A74012326E0FB68013BFB6024 +S31508010AC8FB681A0C7B681B6802F00F029A607B6840 +S31508010AD81B68FA6892B2DA60786800F070F803461B +S31508010AE8002B04D07B6804225A7401230CE07B6826 +S31508010AF80022DA737B6801225A737B6801229A738A +S31508010B087B6801225A74002318461037BD4680BDF2 +S31508010B18006C004080B584B000AF78600023FB60A4 +S31508010B287B68002B01D101231DE07B681B685A6885 +S31508010B387B681B6822F008025A60FCF7C9FEF86050 +S31508010B4809E0FCF7C5FE0246FB68D31AB3F57A7FB6 +S31508010B5801D9032307E07B681B685B6803F0080370 +S31508010B68002BEED0002318461037BD4680BD80B548 +S31508010B7884B000AF78600023FB60FCF7A9FEF86033 +S31508010B8809E0FCF7A5FE0246FB68D31AB3F57A7F96 +S31508010B9801D903230FE07B681B685B6803F0200310 +S31508010BA8002BEED07B681B685A687B681B6842F085 +S31508010BB810025A60002318461037BD4680BD80B515 +S31508010BC884B000AF78600023FB607B681B685A68AD +S31508010BD87B681B6822F010025A60FCF779FEF860F8 +S31508010BE809E0FCF775FE0246FB68D31AB3F57A7F66 +S31508010BF801D9032307E07B681B685B6803F02003B8 +S31508010C08002BEED0002318461037BD4680BD80B5A7 +S31508010C1882B000AF78607B68002B01D1012341E0DF +S31508010C287B6893F83D30DBB2002B06D17B6800223E +S31508010C3883F83C207868FCF737FB7B68022283F83F +S31508010C483D207B681A687B6804331946104600F00C +S31508010C5877FD7B68012283F846207B68012283F8A1 +S31508010C683E207B68012283F83F207B68012283F8AE +S31508010C7840207B68012283F841207B68012283F89A +S31508010C8842207B68012283F843207B68012283F886 +S31508010C9844207B68012283F845207B68012283F872 +S31508010CA83D20002318460837BD4680BD80B582B069 +S31508010CB800AF78607B68002B01D1012341E07B688E +S31508010CC893F83D30DBB2002B06D17B68002283F806 +S31508010CD83C20786800F039F87B68022283F83D20C1 +S31508010CE87B681A687B6804331946104600F028FDA4 +S31508010CF87B68012283F846207B68012283F83E2017 +S31508010D087B68012283F83F207B68012283F840200B +S31508010D187B68012283F841207B68012283F84220F7 +S31508010D287B68012283F843207B68012283F84420E3 +S31508010D387B68012283F845207B68012283F83D20D8 +S31508010D48002318460837BD4680BD80B483B000AF76 +S31508010D58786000BF0C37BD4680BC704780B584B043 +S31508010D6800AF786039600023FB733B68002B09D113 +S31508010D787B6893F83E30DBB2012B14BF01230023AD +S31508010D88DBB222E03B68042B09D17B6893F83F3034 +S31508010D98DBB2012B14BF01230023DBB215E03B6844 +S31508010DA8082B09D17B6893F84030DBB2012B14BFB5 +S31508010DB801230023DBB208E07B6893F84130DBB2F4 +S31508010DC8012B14BF01230023DBB2002B01D0012319 +S31508010DD8AEE03B68002B04D17B68022283F83E20EB +S31508010DE813E03B68042B04D17B68022283F83F2071 +S31508010DF80BE03B68082B04D17B68022283F8402064 +S31508010E0803E07B68022283F841203B680C2B41D812 +S31508010E1801A252F823F000BF550E01089D0E0108DC +S31508010E289D0E01089D0E0108670E01089D0E010811 +S31508010E389D0E01089D0E0108790E01089D0E0108EF +S31508010E489D0E01089D0E01088B0E01087B681B681B +S31508010E58DA687B681B6842F00202DA601DE07B6883 +S31508010E681B68DA687B681B6842F00402DA6014E0DA +S31508010E787B681B68DA687B681B6842F00802DA60D7 +S31508010E880BE07B681B68DA687B681B6842F010020E +S31508010E98DA6002E00123FB7300BFFB7B002B46D116 +S31508010EA87B681B6801223968184600F0DFFE7B68F3 +S31508010EB81B68214A934207D17B681B685A6C7B6871 +S31508010EC81B6842F400425A647B681B681A4A9342B3 +S31508010ED813D07B681B68B3F1804F0ED07B681B68FB +S31508010EE8164A934209D07B681B68154A934204D06F +S31508010EF87B681B68134A934211D17B681B689B68F8 +S31508010F0803F00703BB60BB68062B10D07B681B6818 +S31508010F181A687B681B6842F001021A6007E07B6859 +S31508010F281B681A687B681B6842F001021A60FB7B1A +S31508010F3818461037BD4680BD002C01400004004004 +S31508010F4800080040000C004080B582B000AF786008 +S31508010F587B68002B01D1012341E07B6893F83D307A +S31508010F68DBB2002B06D17B68002283F83C2078681F +S31508010F7800F039F87B68022283F83D207B681A68F5 +S31508010F887B6804331946104600F0DAFB7B680122B0 +S31508010F9883F846207B68012283F83E207B68012274 +S31508010FA883F83F207B68012283F840207B68012269 +S31508010FB883F841207B68012283F842207B68012255 +S31508010FC883F843207B68012283F844207B68012241 +S31508010FD883F845207B68012283F83D2000231846BB +S31508010FE80837BD4680BD80B483B000AF786000BFBE +S31508010FF80C37BD4680BC704780B584B000AF7860B1 +S3150801100839603B68002B09D17B6893F83E30DBB21F +S31508011018012B14BF01230023DBB222E03B68042B12 +S3150801102809D17B6893F83F30DBB2012B14BF012342 +S315080110380023DBB215E03B68082B09D17B6893F8D6 +S315080110484030DBB2012B14BF01230023DBB208E0D1 +S315080110587B6893F84130DBB2012B14BF01230023C7 +S31508011068DBB2002B01D0012363E03B68002B04D1D6 +S315080110787B68022283F83E2013E03B68042B04D1DF +S315080110887B68022283F83F200BE03B68082B04D1D2 +S315080110987B68022283F8402003E07B68022283F8F2 +S315080110A841207B681B6801223968184600F0DEFD75 +S315080110B87B681B68214A934207D17B681B685A6C6F +S315080110C87B681B6842F400425A647B681B681B4AA2 +S315080110D8934213D07B681B68B3F1804F0ED07B68A7 +S315080110E81B68174A934209D07B681B68154A9342BD +S315080110F804D07B681B68144A934211D17B681B6824 +S315080111089B6803F00703FB60FB68062B10D07B6816 +S315080111181B681A687B681B6842F001021A6007E0B7 +S315080111287B681B681A687B681B6842F001021A60AB +S31508011138002318461037BD4680BD00BF002C014064 +S315080111480004004000080040000C004080B584B047 +S3150801115800AF78607B681B68DB68FB607B681B6887 +S315080111681B69BB60BB6803F00203002B20D0FB6830 +S3150801117803F00203002B1BD07B681B686FF0020281 +S315080111881A617B6801221A777B681B689B6903F0D9 +S315080111980303002B03D0786800F0B6FA05E07868EF +S315080111A8F8F7ECFF786800F0B8FA7B6800221A7736 +S315080111B8BB6803F00403002B20D0FB6803F0040383 +S315080111C8002B1BD07B681B686FF004021A617B68C9 +S315080111D802221A777B681B689B6903F44073002B04 +S315080111E803D0786800F090FA05E07868F8F7C6FF42 +S315080111F8786800F092FA7B6800221A77BB6803F0D0 +S315080112080803002B20D0FB6803F00803002B1BD02A +S315080112187B681B686FF008021A617B6804221A77D3 +S315080112287B681B68DB6903F00303002B03D0786826 +S3150801123800F06AFA05E07868F8F7A0FF786800F020 +S315080112486CFA7B6800221A77BB6803F01003002B37 +S3150801125820D0FB6803F01003002B1BD07B681B68A2 +S315080112686FF010021A617B6808221A777B681B6877 +S31508011278DB6903F44073002B03D0786800F044FA5D +S3150801128805E07868F8F77AFF786800F046FA7B6827 +S3150801129800221A77BB6803F00103002B0CD0FB6800 +S315080112A803F00103002B07D07B681B686FF0010266 +S315080112B81A61786800F01FFABB6803F08003002BEF +S315080112C80CD0FB6803F08003002B07D07B681B68EA +S315080112D86FF080021A61786800F05BFDBB6803F05D +S315080112E84003002B0CD0FB6803F04003002B07D002 +S315080112F87B681B686FF040021A61786800F016FA75 +S31508011308BB6803F02003002B0CD0FB6803F020030D +S31508011318002B07D07B681B686FF020021A61786872 +S3150801132800F02EFD00BF1037BD4680BD80B586B0DA +S3150801133800AFF860B9607A600023FB75FB6893F81B +S315080113483C30012B01D1022348E0FB68012283F8CE +S315080113583C207B680C2B39D801A252F823F000BF30 +S315080113689D130108D5130108D5130108D5130108DA +S31508011378AB130108D5130108D5130108D5130108BC +S31508011388B9130108D5130108D5130108D51301089E +S31508011398C7130108FB681B68B968184600F048FABC +S315080113A817E0FB681B68B968184600F0A7FA10E049 +S315080113B8FB681B68B968184600F00AFB09E0FB6870 +S315080113C81B68B968184600F06DFB02E00123FB7536 +S315080113D800BFFB68002283F83C20FB7D18461837B6 +S315080113E8BD4680BD80B586B000AFF860B9607A6041 +S315080113F80023FB75FB6893F83C30012B01D10223C6 +S31508011408AEE0FB68012283F83C207B680C2B00F2CE +S315080114189F8001A252F823F05514010859150108AD +S31508011428591501085915010895140108591501088E +S315080114385915010859150108D7140108591501083C +S31508011448591501085915010817150108FB681B687C +S31508011458B968184600F0ECF9FB681B689A69FB68D5 +S315080114681B6842F008029A61FB681B689A69FB685F +S315080114781B6822F004029A61FB681B689969BB68B4 +S315080114881A69FB681B680A439A6164E0FB681B686A +S31508011498B968184600F032FAFB681B689A69FB684E +S315080114A81B6842F400629A61FB681B689A69FB68C3 +S315080114B81B6822F480629A61FB681B689969BB6894 +S315080114C81B691A02FB681B680A439A6143E0FB68B1 +S315080114D81B68B968184600F07BFAFB681B68DA6965 +S315080114E8FB681B6842F00802DA61FB681B68DA695F +S315080114F8FB681B6822F00402DA61FB681B68D96974 +S31508011508BB681A69FB681B680A43DA6123E0FB684A +S315080115181B68B968184600F0C5FAFB681B68DA69DA +S31508011528FB681B6842F40062DA61FB681B68DA69C2 +S31508011538FB681B6822F48062DA61FB681B68D96953 +S31508011548BB681B691A02FB681B680A43DA6102E071 +S315080115580123FB7500BFFB68002283F83C20FB7D4D +S3150801156818461837BD4680BD80B584B000AF786087 +S3150801157839600023FB737B6893F83C30012B01D152 +S315080115880223B4E07B68012283F83C207B680222A7 +S3150801159883F83D207B681B689B68BB60BB6823F0A2 +S315080115A87703BB60BB6823F47F43BB607B681B6812 +S315080115B8BA689A603B681B68B3F5005F3ED0B3F515 +S315080115C8005F00F28780B3F5805F00F08680B3F587 +S315080115D8805F7FD8702B1AD0702B7BD8602B50D0A0 +S315080115E8602B77D8502B3CD0502B73D8402B58D02A +S315080115F8402B6FD8302B64D0302B6BD8202B60D07A +S31508011608202B67D8002B5CD0102B5AD062E07B6858 +S3150801161818683B6899683B685A683B68DB6800F054 +S3150801162806FB7B681B689B68BB60BB6843F077034E +S31508011638BB607B681B68BA689A604FE07B68186864 +S315080116483B6899683B685A683B68DB6800F0EFFABB +S315080116587B681B689A687B681B6842F480429A60B3 +S315080116683CE07B6818683B6859683B68DB681A463A +S3150801167800F066FA7B681B685021184600F0BDFA27 +S315080116882CE07B6818683B6859683B68DB681A462A +S3150801169800F084FA7B681B686021184600F0ADFAE9 +S315080116A81CE07B6818683B6859683B68DB681A461A +S315080116B800F046FA7B681B684021184600F09DFA37 +S315080116C80CE07B681A683B681B681946104600F0E7 +S315080116D894FA03E00123FB7300E000BF7B6801224B +S315080116E883F83D207B68002283F83C20FB7B18465B +S315080116F81037BD4680BD80B483B000AF786000BF9F +S315080117080C37BD4680BC704780B483B000AF78609B +S3150801171800BF0C37BD4680BC704780B483B000AFA4 +S31508011728786000BF0C37BD4680BC704780B483B06B +S3150801173800AF786000BF0C37BD4680BC7047000013 +S3150801174880B485B000AF786039607B681B68FB6038 +S315080117587B68334A93420FD07B68B3F1804F0BD02D +S315080117687B68304A934207D07B682F4A934203D055 +S315080117787B682E4A934208D1FB6823F07003FB6005 +S315080117883B685B68FA681343FB607B68244A9342A3 +S315080117980FD07B68B3F1804F0BD07B68214A9342FF +S315080117A807D07B68204A934203D07B681F4A934235 +S315080117B808D1FB6823F44073FB603B68DB68FA6869 +S315080117C81343FB60FB6823F080023B685B6913439C +S315080117D8FB607B68FA681A603B689A687B68DA6214 +S315080117E83B681A687B689A627B680D4A934203D1FB +S315080117F83B681A697B681A637B6801225A617B68A8 +S315080118081B6903F00103002B05D07B681B6923F0CC +S3150801181801027B681A6100BF1437BD4680BC704750 +S31508011828002C01400004004000080040000C00405C +S3150801183880B487B000AF786039607B681B6A7B61C2 +S315080118487B681B6A23F001027B681A627B685B68FE +S315080118583B617B689B69FB60FB6823F07003FB604F +S31508011868FB6823F00303FB603B681B68FA681343AC +S31508011878FB607B6923F002037B613B689B687A6995 +S3150801188813437B617B681C4A93420CD17B6923F01D +S3150801189808037B613B68DB687A6913437B617B696B +S315080118A823F004037B617B68134A934211D13B6990 +S315080118B823F480733B613B6923F400733B613B68FE +S315080118C85B693A6913433B613B689B693A69134308 +S315080118D83B617B683A695A607B68FA689A613B6832 +S315080118E85A687B685A637B687A691A6200BF1C372B +S315080118F8BD4680BC704700BF002C014080B487B044 +S3150801190800AF786039607B681B6A7B617B681B6AF4 +S3150801191823F010027B681A627B685B683B617B6807 +S315080119289B69FB60FB6823F4E043FB60FB6823F4CF +S315080119384073FB603B681B681B02FA681343FB602C +S315080119487B6923F020037B613B689B681B017A69E5 +S3150801195813437B617B681D4A93420DD17B6923F04A +S3150801196880037B613B68DB681B017A6913437B61EA +S315080119787B6923F040037B617B68144A934213D140 +S315080119883B6923F480633B613B6923F400633B614C +S315080119983B685B699B003A6913433B613B689B69F2 +S315080119A89B003A6913433B617B683A695A607B68CD +S315080119B8FA689A613B685A687B689A637B687A69A8 +S315080119C81A6200BF1C37BD4680BC7047002C01400F +S315080119D880B487B000AF786039607B681B6A7B6121 +S315080119E87B681B6A23F480727B681A627B685B686A +S315080119F83B617B68DB69FB60FB6823F07003FB606E +S31508011A08FB6823F00303FB603B681B68FA6813430A +S31508011A18FB607B6923F400737B613B689B681B0247 +S31508011A287A6913437B617B681D4A93420DD17B69A9 +S31508011A3823F400637B613B68DB681B027A691343FD +S31508011A487B617B6923F480637B617B68144A9342D3 +S31508011A5813D13B6923F480533B613B6923F4005353 +S31508011A683B613B685B691B013A6913433B613B6808 +S31508011A789B691B013A6913433B617B683A695A605A +S31508011A887B68FA68DA613B685A687B68DA637B6857 +S31508011A987A691A6200BF1C37BD4680BC704700BF09 +S31508011AA8002C014080B487B000AF786039607B6844 +S31508011AB81B6A3B617B681B6A23F480527B681A623E +S31508011AC87B685B687B617B68DB69FB60FB6823F481 +S31508011AD8E043FB60FB6823F44073FB603B681B68C3 +S31508011AE81B02FA681343FB603B6923F400533B6105 +S31508011AF83B689B681B033A6913433B617B680F4A3A +S31508011B08934209D17B6923F480437B613B685B690E +S31508011B189B017A6913437B617B687A695A607B689A +S31508011B28FA68DA613B685A687B681A647B683A69B5 +S31508011B381A6200BF1C37BD4680BC7047002C01409D +S31508011B4880B487B000AFF860B9607A60FB681B6A31 +S31508011B587B61FB681B6A23F00102FB681A62FB6852 +S31508011B689B693B613B6923F0F0033B617B681B0179 +S31508011B783A6913433B617B6923F00A037B617A69F6 +S31508011B88BB6813437B61FB683A699A61FB687A69A2 +S31508011B981A6200BF1C37BD4680BC704780B487B03F +S31508011BA800AFF860B9607A60FB681B6A7B61FB68FD +S31508011BB81B6A23F01002FB681A62FB689B693B6182 +S31508011BC83B6923F470433B617B681B033A691343FA +S31508011BD83B617B6923F0A0037B61BB681B017A69BA +S31508011BE813437B61FB683A699A61FB687A691A62E9 +S31508011BF800BF1C37BD4680BC704780B485B000AFAE +S31508011C08786039607B689B68FB60FB6823F0700322 +S31508011C18FB603A68FB68134343F00703FB607B687C +S31508011C28FA689A6000BF1437BD4680BC704780B40D +S31508011C3887B000AFF860B9607A603B60FB689B685B +S31508011C487B617B6923F47F437B613B681A027B6866 +S31508011C581A43BB6813437A6913437B61FB687A693C +S31508011C689A6000BF1C37BD4680BC704780B487B0F0 +S31508011C7800AFF860B9607A60BB6803F01F030122F8 +S31508011C8802FA03F37B61FB681A6A7B69DB431A402C +S31508011C98FB681A62FB681A6ABB6803F01F0379684E +S31508011CA801FA03F31A43FB681A6200BF1C37BD46DB +S31508011CB880BC704780B485B000AF786039607B68AE +S31508011CC893F83C30012B01D102234BE07B680122B2 +S31508011CD883F83C207B68022283F83D207B681B68D1 +S31508011CE85B68FB607B681B689B68BB60FB6823F0C5 +S31508011CF87003FB603B681B68FA681343FB607B68E3 +S31508011D081B68FA685A607B681B68194A934213D09C +S31508011D187B681B68B3F1804F0ED07B681B68154A30 +S31508011D28934209D07B681B68134A934204D07B689F +S31508011D381B68124A93420CD1BB6823F08003BB6027 +S31508011D483B685B68BA681343BB607B681B68BA68FB +S31508011D589A607B68012283F83D207B68002283F814 +S31508011D683C20002318461437BD4680BC704700BF7F +S31508011D78002C01400004004000080040000C004007 +S31508011D8880B483B000AF786000BF0C37BD4680BC0D +S31508011D98704780B483B000AF786000BF0C37BD4682 +S31508011DA880BC704780B582B000AF78607B68002B2D +S31508011DB801D1012342E07B6893F84130DBB2002B5D +S31508011DC806D17B68002283F840207868FBF7B4FBC4 +S31508011DD87B68242283F841207B681B68DA687B685C +S31508011DE81B6822F40052DA60786800F0B5FF7B6850 +S31508011DF81B681A697B681B6822F490421A617B681A +S31508011E081B685A697B681B6822F02A025A617B6833 +S31508011E181B68DA687B681B6842F40052DA607B68DB +S31508011E2800225A647B68202283F841207B68202295 +S31508011E3883F842207B6800225A630023184608372C +S31508011E48BD4680BD80B58AB002AFF860B9603B600F +S31508011E581346FB8000237B61FB6893F84130DBB2AC +S31508011E68202B75D1BB68002B02D0FB88002B01D12A +S31508011E7801236EE0FB6800225A64FB68212283F875 +S31508011E884120FBF725FD7861FB68FA889A84FB6887 +S31508011E98FA88DA84FB689B68B3F5805F08D1FB6822 +S31508011EA81B69002B04D10023FB61BB68BB6103E0F6 +S31508011EB8BB68FB610023BB612EE03B6800937B6925 +S31508011EC800228021F86800F0B9FC0346002B05D0EA +S31508011ED8FB68202283F8412003233AE0FB69002B9B +S31508011EE80BD1BB691B881A46FB681B68C2F3080233 +S31508011EF85A60BB690233BB6107E0FB691A78FB685C +S31508011F081B685A60FB690133FB61FB68DB8C9BB272 +S31508011F18013B9AB2FB68DA84FB68DB8C9BB2002B1F +S31508011F28CBD13B6800937B6900224021F86800F011 +S31508011F3885FC0346002B05D0FB68202283F841203F +S31508011F48032306E0FB68202283F84120002300E0EA +S31508011F58022318462037BD4680BD80B485B000AF38 +S31508011F68F860B9601346FB80FB6893F84130DBB229 +S31508011F78202B21D1BB68002B02D0FB88002B01D16D +S31508011F8801231AE0FB68BA681A62FB68FA889A8418 +S31508011F98FB68FA88DA84FB6800225A64FB682122FE +S31508011FA883F84120FB681B68DA68FB681B6842F0FE +S31508011FB88002DA60002300E0022318461437BD467A +S31508011FC880BC704780B58CB000AFF860B96013461D +S31508011FD8FB80FB6893F84230DBB2202B4AD1BB68F9 +S31508011FE8002B02D0FB88002B01D1012343E0FB68B3 +S31508011FF801221A63FB6800225A63FB881A46B968E4 +S31508012008F86800F074FC034687F82F3097F82F30E4 +S31508012018002B2CD1FB681B6B012B25D100233B61B7 +S31508012028FB681B681B683B61FB681B685B683B614F +S315080120383B69FB681B680C33BB61BB6953E8003F06 +S315080120487B617B6943F01003BB62FB681B680C3331 +S31508012058BA6A7A623B62396A7A6A41E80023FB619D +S31508012068FB69002BE5D102E0012387F82F3097F8A1 +S315080120782F3000E0022318463037BD4680BD0000E0 +S3150801208880B5A2B000AF78600123C7F884307B68B1 +S315080120981B680C333B663B6E53E8003FFB65FB6DDB +S315080120A823F4F073C7F880307B681B680C33D7F8BC +S315080120B88020FA66BB66B96EFA6E41E800237B662C +S315080120C87B6E002BE3D17B681B681433FB64FB6CBE +S315080120D853E8003FBB64BB6C23F00103FB677B68CD +S315080120E81B681433FA6FBA657B65796DBA6D41E871 +S315080120F800233B653B6D002BE5D17B681B6B012BE8 +S3150801210819D17B681B680C33BB63BB6B53E8003F6B +S315080121187B637B6B23F01003BB677B681B680C33F7 +S31508012128BA6F7A643B64396C7A6C41E80023FB63BD +S31508012138FB6B002BE5D17B689B6B002B0FD07B686B +S315080121481B685B6903F08003002B04D07B689B6BD3 +S31508012158534A5A6303E07B689B6B00225A637B6880 +S31508012168DB6B002B0FD07B681B685B6903F04003A8 +S31508012178002B04D07B68DB6B4A4A5A6303E07B6809 +S31508012188DB6B00225A637B681B685B6903F0800373 +S31508012198002B2DD07B681B6814337B627B6A53E856 +S315080121A8003F3B623B6A23F080037B677B681B68B9 +S315080121B814337A6F3A63FB62F96A3A6B41E800238A +S315080121C8BB62BB6A002BE5D17B689B6B002B0FD0E2 +S315080121D87B689B6B1846FDF7E9F80346002B04D084 +S315080121E87B689B6B00225A6302E00023C7F8843098 +S315080121F87B681B685B6903F04003002B30D07B685A +S315080122081B6814333B613B6953E8003FFB60FB6875 +S3150801221823F040033B677B681B6814333A6FFA61FE +S31508012228BB61B969FA6941E800237B617B69002BBF +S31508012238E5D17B68DB6B002B12D07B68DB6B184614 +S31508012248FDF7B4F80346002B07D07B68DB6B002241 +S315080122585A630123C7F8843002E00023C7F884309B +S31508012268D7F88430012B16D17B680022DA847B687B +S315080122780022DA857B6800225A647B68202283F863 +S3150801228841207B68202283F842207B6800221A6352 +S31508012298786800F0ADFA002318468837BD4680BD30 +S315080122A8552A0108B52A010880B5BAB000AF786081 +S315080122B87B681B681B68C7F8E4307B681B68DB68A2 +S315080122C8C7F8E0307B681B685B69C7F8DC30002310 +S315080122D8C7F8D8300023C7F8D430D7F8E43003F064 +S315080122E80F03C7F8D830D7F8D830002B0FD1D7F84D +S315080122F8E43003F02003002B09D0D7F8E03003F0C7 +S315080123082003002B03D0786800F067FC5BE2D7F856 +S31508012318D830002B00F0DE80D7F8DC3003F0010353 +S31508012328002B06D1D7F8E03003F49073002B00F0A0 +S31508012338D180D7F8E43003F00103002B0BD0D7F886 +S31508012348E03003F48073002B05D07B685B6C43F09F +S3150801235801027B685A64D7F8E43003F00403002BBA +S315080123680BD0D7F8DC3003F00103002B05D07B68C6 +S315080123785B6C43F002027B685A64D7F8E43003F0D1 +S315080123880203002B0BD0D7F8DC3003F00103002B2E +S3150801239805D07B685B6C43F004027B685A64D7F8FE +S315080123A8E43003F00803002B11D0D7F8E03003F026 +S315080123B82003002B05D1D7F8DC3003F00103002BE5 +S315080123C805D07B685B6C43F008027B685A647B68B6 +S315080123D85B6C002B00F0F281D7F8E43003F0200398 +S315080123E8002B08D0D7F8E03003F02003002B02D0E1 +S315080123F8786800F0F2FB7B681B685B6903F04003A9 +S31508012408002B14BF01230023DBB2C7F8D4307B683D +S315080124185B6C03F00803002B03D1D7F8D430002BE3 +S315080124284FD0786800F09CFA7B681B685B6903F0F3 +S315080124384003002B41D07B681B681433C7F89C30CE +S31508012448D7F89C3053E8003FC7F89830D7F8983042 +S3150801245823F04003C7F8D0307B681B681433D7F8D4 +S31508012468D020C7F8A820C7F8A430D7F8A410D7F8F9 +S31508012478A82041E80023C7F8A030D7F8A030002BD8 +S31508012488D9D17B68DB6B002B13D07B68DB6B7E4A63 +S315080124985A637B68DB6B1846FCF788FF0346002BF3 +S315080124A816D07B68DB6B5B6B7A68D26B10469847EC +S315080124B80EE0786800F093F90AE0786800F08FF979 +S315080124C806E0786800F08BF97B6800225A6475E1A2 +S315080124D800BF73E17B681B6B012B40F04F81D7F86E +S315080124E8E43003F01003002B00F04881D7F8E030F8 +S315080124F803F01003002B00F041810023BB607B68C1 +S315080125081B681B68BB607B681B685B68BB60BB682C +S315080125187B681B685B6903F04003002B00F0B680F3 +S315080125287B68DB6B1B685B68A7F8BE30B7F8BE30FB +S31508012538002B00F045817B689B8DB7F8BE209A422F +S3150801254880F03E817B68B7F8BE20DA857B68DB6B4D +S315080125589B69202B00F088807B681B680C33C7F8B9 +S315080125688830D7F8883053E8003FC7F88430D7F859 +S31508012578843023F48073C7F8B8307B681B680C333A +S31508012588D7F8B820C7F89420C7F89030D7F890102C +S31508012598D7F8942041E80023C7F88C30D7F88C304F +S315080125A8002BD9D17B681B6814337B677B6F53E88B +S315080125B8003F3B673B6F23F00103C7F8B4307B68DC +S315080125C81B681433D7F8B420C7F88020FB67F96F5E +S315080125D8D7F8802041E80023BB67BB6F002BE1D100 +S315080125E87B681B6814333B663B6E53E8003FFB6503 +S315080125F8FB6D23F04003C7F8B0307B681B681433BA +S31508012608D7F8B020FA66BB66B96EFA6E41E80023B8 +S315080126187B667B6E002BE3D17B68202283F84220F8 +S315080126287B6800221A637B681B680C33FB64FB6CA6 +S3150801263853E8003FBB64BB6C23F01003C7F8AC3002 +S315080126487B681B680C33D7F8AC20BA657B65796D4E +S31508012658BA6D41E800233B653B6D002BE3D17B68E6 +S31508012668DB6B1846FCF767FE7B6802225A637B68B0 +S315080126789A8D7B68DB8D9BB2D31A9BB2194678680B +S31508012688F9F710FF9CE000BF2D2A01087B689A8D8F +S315080126987B68DB8D9BB2D31AA7F8CE307B68DB8DB6 +S315080126A89BB2002B00F08E80B7F8CE30002B00F0D5 +S315080126B889807B681B680C33BB63BB6B53E8003F97 +S315080126C87B637B6B23F49073C7F8C8307B681B68F8 +S315080126D80C33D7F8C8207A643B64396C7A6C41E8BC +S315080126E80023FB63FB6B002BE3D17B681B68143360 +S315080126F87B627B6A53E8003F3B623B6A23F001032E +S31508012708C7F8C4307B681B681433D7F8C4203A6302 +S31508012718FB62F96A3A6B41E80023BB62BB6A002B84 +S31508012728E3D17B68202283F842207B6800221A635A +S315080127387B681B680C333B613B6953E8003FFB60C8 +S31508012748FB6823F01003C7F8C0307B681B680C3395 +S31508012758D7F8C020FA61BB61B969FA6941E800236B +S315080127687B617B69002BE3D17B6802225A63B7F840 +S31508012778CE3019467868F9F795FE23E0D7F8E4309C +S3150801278803F08003002B09D0D7F8E03003F0800363 +S31508012798002B03D0786800F0B9F914E0D7F8E430CB +S315080127A803F04003002B0ED0D7F8E03003F04003BE +S315080127B8002B08D0786800F0F8F904E000BF02E0B9 +S315080127C800BF00E000BFE837BD4680BD80B483B0CE +S315080127D800AF786000BF0C37BD4680BC704780B42F +S315080127E883B000AF786000BF0C37BD4680BC704720 +S315080127F880B483B000AF786000BF0C37BD4680BC93 +S31508012808704780B485B000AF78600023FB60002369 +S31508012818BB607B6893F84130DBB2FB607B6893F851 +S315080128284230DBB2BB60FB68DAB2BB68DBB2134382 +S31508012838DBB218461437BD4680BC704780B586B0EA +S3150801284800AFF860B9603B601346FB713BE03B6A31 +S31508012858B3F1FF3F37D0FBF73BF802463B68D31A7B +S315080128683A6A9A4202D33B6A002B01D103233AE01A +S31508012878FB681B68DB6803F00403002B23D0BB68DD +S31508012888802B20D0BB68402B1DD0FB681B681B68B2 +S3150801289803F00803082B16D100237B61FB681B6824 +S315080128A81B687B61FB681B685B687B617B69F868E9 +S315080128B800F056F8FB6808225A64FB68002283F878 +S315080128C8402001230FE0FB681B681A68BB681340A0 +S315080128D8BA689A420CBF01230023DBB21A46FB7970 +S315080128E89A42B4D0002318461837BD4680BD80B42D +S315080128F885B000AFF860B9601346FB80FB68BA6813 +S315080129089A62FB68FA889A85FB68FA88DA85FB6809 +S3150801291800225A64FB68222283F84220FB681B6955 +S31508012928002B07D0FB681B68DA68FB681B6842F44A +S315080129388072DA60FB681B685A69FB681B6842F093 +S3150801294801025A61FB681B68DA68FB681B6842F072 +S315080129582002DA60002318461437BD4680BC704742 +S3150801296880B495B000AF78607B681B680C337B63CD +S315080129787B6B53E8003F3B633B6B23F49073FB6423 +S315080129887B681B680C33FA6C3A64FB63F96B3A6C1F +S3150801299841E80023BB63BB6B002BE5D17B681B6849 +S315080129A814333B623B6A53E8003FFB61FB6923F03A +S315080129B80103BB647B681B681433BA6CFA62BB6291 +S315080129C8B96AFA6A41E800237B627B6A002BE5D17A +S315080129D87B681B6B012B19D17B681B680C33FB6061 +S315080129E8FB6853E8003FBB60BB6823F010037B64B0 +S315080129F87B681B680C337A6CBA617B617969BA6939 +S31508012A0841E800233B613B69002BE5D17B6820221D +S31508012A1883F842207B6800221A6300BF5437BD46F3 +S31508012A2880BC704780B584B000AF78607B685B6A04 +S31508012A38FB60FB680022DA85FB680022DA84F868FD +S31508012A48FFF7CDFE00BF1037BD4680BD80B584B0FF +S31508012A5800AF78607B685B6AFB60FB689B6B00224A +S31508012A685A63FB68DB6B002B04D0FB68DB6B5B6B7B +S31508012A78002B17D1FB680022DA84FB680022DA8565 +S31508012A88FB6800225A64FB68202283F84120FB6808 +S31508012A98202283F84220FB6800221A63F868FFF7A8 +S31508012AA8A7FE00E000BF1037BD4680BD80B584B0DB +S31508012AB800AF78607B685B6AFB60FB68DB6B0022AA +S31508012AC85A63FB689B6B002B04D0FB689B6B5B6B9B +S31508012AD8002B17D1FB680022DA84FB680022DA8505 +S31508012AE8FB6800225A64FB68202283F84120FB68A8 +S31508012AF8202283F84220FB6800221A63F868FFF748 +S31508012B0877FE00E000BF1037BD4680BD80B485B0AA +S31508012B1800AF78607B6893F84130DBB2212B3ED150 +S31508012B287B689B68B3F5805F14D17B681B69002BAA +S31508012B3810D17B681B6AFB60FB681B881A467B6891 +S31508012B481B68C2F308025A607B681B6A9A1C7B6871 +S31508012B581A6208E07B681B6A591C7A6811621A7836 +S31508012B687B681B685A607B68DB8C9BB2013B9BB20E +S31508012B787A681946D184002B0FD17B681B68DA68F5 +S31508012B887B681B6822F08002DA607B681B68DA6852 +S31508012B987B681B6842F04002DA60002300E00223E2 +S31508012BA818461437BD4680BC704780B582B000AF59 +S31508012BB878607B681B68DA687B681B6822F04002C4 +S31508012BC8DA607B68202283F841207868F9F7CAFC1D +S31508012BD8002318460837BD4680BD80B58CB000AFBE +S31508012BE878607B6893F84230DBB2222B40F0AE80DE +S31508012BF87B689B68B3F5805F17D17B681B69002BD7 +S31508012C0813D10023FB627B689B6ABB627B681B68DE +S31508012C185B689BB2C3F308039AB2BB6A1A807B68DE +S31508012C289B6A9A1C7B689A6226E07B689B6AFB62A8 +S31508012C380023BB627B689B68B3F5805F07D07B6816 +S31508012C489B68002B0AD17B681B69002B06D17B6818 +S31508012C581B685B68DAB2FB6A1A7008E07B681B684E +S31508012C685B68DBB203F07F03DAB2FB6A1A707B682A +S31508012C789B6A5A1C7B689A627B68DB8D9BB2013B0F +S31508012C889BB27A681946D185002B5DD17B681B688A +S31508012C98DA687B681B6822F02002DA607B681B68A1 +S31508012CA8DA687B681B6822F48072DA607B681B68BD +S31508012CB85A697B681B6822F001025A617B682022DF +S31508012CC883F842207B6800225A637B681B6B012BB9 +S31508012CD835D17B6800221A637B681B680C337B61D4 +S31508012CE87B6953E8003F3B613B6923F010037B622C +S31508012CF87B681B680C337A6A3A62FB61F9693A6A36 +S31508012D0841E80023BB61BB69002BE5D17B681B68D9 +S31508012D181B6803F01003102B0AD10023FB607B689C +S31508012D281B681B68FB607B681B685B68FB60FB6844 +S31508012D387B689B8D19467868F9F7B4FB02E07868D1 +S31508012D48FFF744FD002302E0002300E002231846AA +S31508012D583037BD4680BD000080B584B000AF7860C5 +S31508012D687B681B681B6923F440517B68DA687B68B2 +S31508012D781B680A431A617B689A687B681B691A4348 +S31508012D887B685B691343BB607B681B68DB6823F454 +S31508012D98B05323F00C037A681268B9680B43D360F9 +S31508012DA87B681B685B6923F440717B689A697B6851 +S31508012DB81B680A435A617B681B682C4A934203D1EC +S31508012DC8FDF766FBF86002E0FDF74EFBF860FA6866 +S31508012DD813469B0013449A001A447B685B689B0058 +S31508012DE8B2FBF3F3224AA2FB03235B091901FA682A +S31508012DF813469B0013449A001A447B685B689B0038 +S31508012E08B2FBF3F21A4BA3FB02035B09642000FB2E +S31508012E1803F3D31A1B013233154AA2FB03235B09B1 +S31508012E2803F0F0031944FA6813469B0013449A0001 +S31508012E381A447B685B689B00B2FBF3F20C4BA3FB55 +S31508012E4802035B09642000FB03F3D31A1B0132331F +S31508012E58074AA2FB03235B0903F00F027B681B6879 +S31508012E680A449A6000BF1037BD4680BD0038014044 +S31508012E781F85EB51002B2DE9F0471D46BBBF03F112 +S31508012E8800431D4600232D2388B01446B8BF1446AF +S31508012E98129A109E1370149BDDF84CA023F0200893 +S31508012EA8B8F1460F05D0B8F1450F00D1013602230E +S31508012EB800E0032307AA049206AACDE902A2CDE9EE +S31508012EC8003622462B4600F03BFEB8F1470F074667 +S31508012ED819D1119BDB070ED500EB06090022002341 +S31508012EE820462946F5F7C8FD08B1CDF81C903022C9 +S31508012EF8079B4B451ED33846079B159ADB1B136060 +S31508012F0808B0BDE8F087B8F1460F00EB0609E5D128 +S31508012F180378302B0AD10022002320462946F5F7E3 +S31508012F28ABFD18B9C6F10106CAF80060DAF800302F +S31508012F389944D3E7591C07911A70D9E7F7B50029B7 +S31508012F48B6BF2D232B23494209290270437029DD6F +S31508012F580DF107031D460A27B1FBF7F61A4607FBC3 +S31508012F681614303402F8014C0C46632C314603F129 +S31508012F78FF33F1DC3031941E03F8011C2346411C4A +S31508012F88AB420AD30DF109039B1AAC4288BF002349 +S31508012F9802330344181A03B0F0BD13F8016B01F89C +S31508012FA8016FEDE7302330318370C170031DF1E7F6 +S31508012FB82DE9F04F91B00C46DDF8688016461F4694 +S31508012FC8054600F0F7FC036818460893F5F728F94B +S31508012FD800230E93D8F800300990073323F0070326 +S31508012FE803F1080294F818A0D4F800B0C8F800202C +S31508012FF8D3E9008929F000430B93CDF828804FF0CF +S31508013008FF32DDE90A01C4E912899C4BF5F766FD29 +S3150801301870BBDDE90A014FF0FF32984BF5F740FD21 +S3150801302830BB0022002340464946F5F72FFD10B16B +S315080130382D2384F84330924A924BBAF1470F8CBF35 +S315080130489046984603234FF0000923612BF00403A1 +S31508013058236033462146284600970FAA00F0D4F97B +S31508013068013040F090804FF0FF3011B0BDE8F08F85 +S3150801307842464B4640464946F5F730FD48B14B4668 +S31508013088002BB8BF2D23804AB8BF84F843307F4B3D +S31508013098D3E763680AF0DF015A1C3FD10623636048 +S315080130A800224BF48063236006920EAACDE904A296 +S315080130B80DAA03920DF13302CDE90132636842463E +S315080130C8009328464B460A91FFF7D4FE0A9980468B +S315080130D847290D9928D1C81C02DB6368994240DD46 +S315080130E8AAF1020A5FFA8AFA5246013904F150002E +S315080130F80D91FFF723FF0E9A81461318012A2361BA +S3150801310802DC2268D20701D5013323619DF83330E1 +S31508013118002B9ED02D2384F843309AE74729BFD13F +S31508013128002BBDD10123BAE7BAF1650FDCD9BAF18B +S31508013138660F18D1002963680BDD216113B9226866 +S31508013148D00702D501330B4423614FF00009A16565 +S31508013158DCE713B92268D20701D50233F4E701235C +S31508013168F2E74FF0670A0E9B994205DB236821614E +S31508013178D807EAD54B1CE7E70029CCBF0122C1F1DC +S3150801318802021344E0E723685A0507D4236942462D +S3150801319831462846B84701302BD164E7BAF1650F9D +S315080131A840F2DC80D4E9120100220023F5F764FC19 +S315080131B8002833D0012331462846354AB847013015 +S315080131C83FF451AFDDE90D38434502DB2368D807DB +S315080131D80FD5DDE9082331462846B84701303FF4BB +S315080131E842AF4FF0000908F1FF3804F11A0AC84539 +S315080131F809DC23689B0700F10281E0680F9B984266 +S31508013208B8BF184631E70123524631462846B8471A +S3150801321801303FF428AF09F10109E8E70D9B002BB6 +S3150801322838DC012331462846194AB84701303FF4A4 +S315080132381AAFDDE90D3959EA030302D12368D9071B +S31508013248D7D5DDE9082331462846B84701303FF482 +S315080132580AAF4FF0000A04F11A0B0D9B5B4253455E +S3150801326801DC4B4693E701235A4631462846B847B7 +S3150801327801303FF4F8AE0AF1010AEEE7FFFFEF7FE6 +S315080132881C6001081860010824600108206001080B +S3150801329828600108A36DDDF838A05345A8BF534631 +S315080132A8002B994636DC4FF0000B29EAE97904F137 +S315080132B81A02A36D0A93A3EB09035B4531DC0D9B3F +S315080132C89A453ADC2368DA0737D40D9BAAEB030932 +S315080132D80A9BAAEB03039945A8BF9946B9F1000FBA +S315080132E833DC4FF0000829EAE97904F11A0B0D9B3A +S315080132F8AAEB0303A3EB090343457FF77AAF012337 +S315080133085A4631462846B84701303FF4ACAE08F16B +S315080133180108ECE7424631462846B8470130C2D18A +S31508013328A1E60123314628460A92B84701303FF4F7 +S315080133389AAE0A9A0BF1010BBBE73146DDE9082378 +S315080133482846B8470130C0D18DE60A9A4B46314618 +S3150801335828464244B8470130C3D184E6DDF838A087 +S31508013368BAF1010F01DCDB0736D50123424631469E +S315080133782846B84701303FF476AEDDE908233146D9 +S315080133882846B84701303FF46EAED4E91201002247 +S3150801339800230AF1FF3AF5F76FFBC0B9534608F15E +S315080133A8010231462846B84701300CD15BE60123AC +S315080133B85A4631462846B84701303FF454AE08F113 +S315080133C80108D045F3DB4B4604F15002E0E64FF01D +S315080133D8000804F11A0BF4E701234246E1E7012341 +S315080133E84A4631462846B84701303FF43CAE08F10B +S315080133F80108E3680F995B1A4345F0DCFDE64FF0CF +S31508013408000804F11909F4E72DE9F0471646984624 +S315080134188A680B6907469342B8BF1346336091F821 +S3150801342843200C46DDF820900AB10133336023683E +S31508013438990642BF336802333360256815F00605D5 +S3150801344806D104F1190AE36832689B1AAB422BDCE8 +S3150801345894F843302268003B18BF0123920630D4FA +S315080134684146384604F14302C847013023D0236848 +S31508013478226903F00603042B14BF002533684FF0AD +S31508013488000608BFE56804F11A0408BFED1A54F8DE +S31508013498123C08BF25EAE5759342C4BF9B1AED1885 +S315080134A8B5421AD1002008E001235246414638465A +S315080134B8C847013003D14FF0FF30BDE8F087013521 +S315080134C8C1E73020E11881F843005A1C94F84510E1 +S315080134D82244023382F84310C2E7012322464146B1 +S315080134E83846C8470130E6D00136D9E72DE9FF47FE +S315080134F80F7E9146782F80460C469A460C9E01F116 +S31508013508430207D8622F0AD8002F00F0D180582F16 +S3150801351800F0B88004F1420684F842703AE0A7F14F +S315080135286303152BF6D801A151F823F08D35010847 +S31508013538A13501081D3501081D3501081D35010884 +S315080135481D350108A13501081D3501081D35010874 +S315080135581D3501081D3501089F360108CB350108B7 +S31508013568593601081D3501081D350108C1360108F6 +S315080135781D350108CB3501081D3501081D3501081A +S315080135886136010833681A1D1B68326004F1420660 +S3150801359884F8423001239CE033682068191D31609C +S315080135A8060601D51D6803E04506FBD5B3F90050A3 +S315080135B8002D03DA2D236D4284F843300A2358482F +S315080135C811E021683368080653F8045B02D44906F2 +S315080135D848BFADB26F2F336014BF0A23082350487A +S315080135E8002184F843106668002EA66005DB216869 +S315080135F82E4321F0040121604BD01646B5FBF3F1A1 +S3150801360803FB1157C75D06F8017D2F46BB420D46D8 +S31508013618F4D9082B0BD12368DF0708D52369616814 +S315080136289942DEBF302306F8013C06F1FF36921BA4 +S3150801363822614B4621464046CDF800A003AAFFF76A +S31508013648E3FE01304AD14FF0FF3004B0BDE8F087F8 +S31508013658236843F0200323607827324884F84570A5 +S31508013668236831681F0651F8045B02D45F0648BF10 +S31508013678ADB23160D90744BF43F0200323601DB1B9 +S315080136881023ADE72648E9E7236823F020032360DA +S31508013698F6E71646BDE733682568181D616930607F +S315080136A82E061B6801D5196002E06806FBD5198044 +S315080136B8002316462361BCE7336800211A1D3260C8 +S315080136C81E686268304600F079F908B1801B6060A7 +S315080136D863682361002384F84330AAE732464946DA +S315080136E840462369D0470130ADD023689B0713D4D8 +S315080136F8E068039B9842B8BF1846A6E701233246F5 +S3150801370849464046D04701309DD00135E3680399BB +S315080137185B1AAB42F2DCEBE7002504F11906F5E77B +S315080137282A6001083B600108002310B50446C0E970 +S315080137380033C0E90433836081814366C2818361AA +S31508013748194608225C3000F0FFF80D4B24626362C3 +S315080137580C4BA3620C4BE3620C4B23630C4B9C4248 +S3150801376806D003F16802944202D0D0339C4205D1AF +S3150801377804F15800BDE8104000F018B910BD00BFA3 +S31508013788D1550108F35501082B5601084F5601086A +S31508013798D4110020024A0349034800F0A5B800BF1E +S315080137A878000020754E01088800002041680C4BF6 +S315080137B810B59942044601D001F058FBA168094B96 +S315080137C8994202D0204601F051FBE168064B99421D +S315080137D804D02046BDE8104001F048BB10BD00BF23 +S315080137E8D41100203C120020A412002010B50B4B5E +S315080137F80B4C0C4A20461A6004210022FFF794FF55 +S3150801380804F1680001220921FFF78EFF04F1D000AF +S315080138180222BDE810401221FFF786BF0C130020CB +S31508013828D41100209D370108014800F0C0B800BF2F +S3150801383811130020014800F0BBB800BF111300207E +S3150801384810B50446FFF7F0FF236A1BB1BDE810401F +S31508013858FFF7F0BF044B2362044B1B68002BF5D115 +S31508013868FFF7C4FFF2E700BFB53701080C130020BC +S3150801387830B51446002C05461A469BB005DA8B2343 +S3150801388803604FF0FF301BB030BD4FF40273ADF83B +S315080138980C304FF0000319930CBF234604F1FF338C +S315080138A8029305934FF6FF7300910491ADF80E3014 +S315080138B869461E9B00F074FF431CBCBF8B232B6013 +S315080138C8002CE0D00022009B1A70DCE707B50093AC +S315080138D813460A46014603480068FFF7C9FF03B0BD +S315080138E85DF804FB840000202DE9F843074688465D +S315080138F814460026D4E90195B9F1010905D52468C4 +S31508013908002CF7D13046BDE8F883AB89012B07D9D6 +S31508013918B5F90E30013303D029463846C047064360 +S315080139286835E9E70FB407B5064904AB086853F8DB +S31508013938042B8168019301F057F803B05DF804EB8D +S3150801394804B070478400002003460244934200D11C +S31508013958704703F8011BF9E7014B1868704700BF60 +S315080139688400002070B500260C4D0D4C641BA4106C +S31508013978A64209D102F004F900260A4D0A4C641B2D +S31508013988A410A64205D170BD55F8043B98470136DF +S31508013998EEE755F8043B98470136F2E794630108C0 +S315080139A8946301089463010898630108704770478E +S315080139B87047000000487047C4010020034610B547 +S315080139C8C9B202449342184601D1002003E004789B +S315080139D801338C42F6D110BD0A44914200F1FF33F6 +S315080139E800D1704710B511F8014B914203F8014F00 +S315080139F8F9D110BD1FB514461A46094B05461B6869 +S31508013A08D8684CB1074BCDE9013400912B460649D4 +S31508013A1801F01EFE01F0E4FF044B1C46F3E700BF64 +S31508013A28840000204C600108596001088760010874 +S31508013A382DE9F74F03690C690746A3427EDB013C6A +S31508013A48A30000F1140501F11408009305EB84039A +S31508013A58019358F8243055F8242001339A42B2FBC9 +S31508013A68F3F608EB84092ED34FF0000AC446AE468E +S31508013A78D3465CF8043B98B206FB00A01B0C020C63 +S31508013A8806FB0323DEF8002080B292B2121A5A44C2 +S31508013A98DEF800004FEA134A9BB2C3EB224303EB55 +S31508013AA8104392B242EA0342E1454FEA234B4EF8E4 +S31508013AB8042BDED2009BEB582BB9019B043B9D4294 +S31508013AC81A462FD33C61384601F076FC002825DBD7 +S31508013AD82946002058F8042BD1F800C01FFA82FE9F +S31508013AE81FFA8CF3A3EB0E030344120CC2EB234211 +S31508013AF802EB1C429BB243EA0243C1454FEA224004 +S31508013B0841F8043BE6D255F8242005EB840322B98B +S31508013B18043B9D421A460BD33C610136304603B035 +S31508013B28BDE8F08F1268043B002ACBD1013CC6E7F1 +S31508013B381268043B002AEFD1013CEAE70020EEE7C8 +S31508013B482DE9F04F14461D46C76997B08146CDE958 +S31508013B580645239E7FB9102001F05EF80246C9F88A +S31508013B681C0020B9EF21AC4BAC48FFF743FFC0E96D +S31508013B7801770760C760D9F81C30196859B15A68BE +S31508013B88012393404A608B60484601F0E3F9002215 +S31508013B98D9F81C301A602B1EAFBF0023012223F067 +S31508013BA800430793A8BF3360DDF81C809C4BB8BF58 +S31508013BB8326033EA080312D142F20F73229A13606C +S31508013BC8C8F31303234300F05E85249BDFF854A248 +S31508013BD8002B00F060850AF1030300F05ABDDDE900 +S31508013BE80623CDE90C23DDE90C0100220023F4F7AD +S31508013BF843FF074658B10123229A1360249B13B140 +S31508013C08894B249A1360DFF824A200F044BD14AB4B +S31508013C18019315AB00934846DDE90C2301F07CFCBA +S31508013C28C8F30A560390002E78D0DDE90C010D9BDE +S31508013C38A6F2FF36C3F3130343F07F5343F4401345 +S31508013C481297194600227A4BF4F7F6FA6CA3D3E9C8 +S31508013C580023F4F7A9FC6CA3D3E90023F4F7EEFAD9 +S31508013C68044630460D46F4F735FC69A3D3E9002323 +S31508013C78F4F79AFC02460B4620462946F4F7DEFA7B +S31508013C8804460D46F4F740FF00220746002320465E +S31508013C982946F4F7FBFE40B13846F4F71BFC2246E1 +S31508013CA82B46F4F7E9FE00B9013F162F54D8DDE98A +S31508013CB80C01604B03EBC703D3E90023F4F7E6FECF +S31508013CC800284BD00023013F0F93149B9B1B5A1EB8 +S31508013CD849BFC3F10103002304930023099254BF82 +S31508013CE804930993002F3BDB099B0E973B440993E1 +S31508013CF800230A93209B092B65D8052BC4BF043BCF +S31508013D082093209BC8BF0024A3F10203D8BF01242E +S31508013D18032B64D8DFE803F05355382CDDE914631F +S31508013D281E4406F23243202BC1BFC3F1400308FAE9 +S31508013D3803F806F2124324FA03F3D6BFC3F12003A4 +S31508013D4848EA030004FA03F0F4F7B4FB0122A1F1E7 +S31508013D58F873013E129274E70123B5E70F90B4E7A9 +S31508013D68049BDB1B04937B420A9300230E93C1E74A +S31508013D7801230B93219B07EB030B0BF10103012B82 +S31508013D880893B8BF012306E001230B93219B002B57 +S31508013D9828DD9B46089300210422D9F81C0002F164 +S31508013DA814059D4226D94160484601F093F8824692 +S31508013DB8002843D1024640F2AF111F4BD4E600232F +S31508013DC8E3E70023D5E7012400230B9420934FF05A +S31508013DD8FF3B00221223CDF820B02192DBE701230D +S31508013DE80B93F4E74FF0010B5B46CDF820B0CDF8FD +S31508013DF884B0D0E701315200D1E700BFAFF30080A4 +S31508013E0861436F63A787D23FB3C8608B288AC63FC9 +S31508013E18FB799F501344D33F95600108AC600108AC +S31508013E280000F07F916001082960010828600108EF +S31508013E380000F83FC061010804610108D9F81C307F +S31508013E481860089B0E2B00F2A180002C00F09E80BA +S31508013E58002F33DD9C4B07F00F0203EBC203F8056D +S31508013E68D3E90034CDE910344FEA271416D5DDE92C +S31508013E780C01964B0326D3E90823F4F7BFFCCDE9D1 +S31508013E88060104F00F04914D54B9DDE91023DDE963 +S31508013E980601F4F7B3FCCDE9060128E00226F2E7A4 +S31508013EA8E10708D5DDE91001D5E90023F4F77CFB1C +S31508013EB8CDE91001013664100835E5E700F0AF8051 +S31508013EC8DDE90C017C42804B04F00F0203EBC203C7 +S31508013ED8D3E90023F4F768FB02260023CDE9060196 +S31508013EE87A4D2411002C40F08F80002BD3D1DDE9BF +S31508013EF806450F9B002B00F0948000222046294690 +S31508013F08734BF4F7C3FD002800F08B80089B002B40 +S31508013F1800F08780BBF1000F34DD204600222946D0 +S31508013F286C4BF4F741FB5C46CDE9060107F1FF380E +S31508013F3801363046F4F7CEFADDE90623F4F734FB01 +S31508013F480022654BF4F77AF90546A1F15076002C5B +S31508013F586AD1DDE906010022604BF4F76DF90246DC +S31508013F680B46CDE906232A463346F4F7ADFD002864 +S31508013F7840F09882DDE906012A4606F10043F4F77E +S31508013F8885FD38BBDDE90C34CDE90634159B002BD4 +S31508013F98C0F257810E2F00F354814B4B03EBC7032D +S31508013FA8D3E90034CDE90434219B002B80F2E5805E +S31508013FB8089B002B00F3E1800CD1DDE904010022FE +S31508013FC8464BF4F7F1FADDE90623F4F773FD002801 +S31508013FD800F0668200242546219B56466FEA0308A7 +S31508013FE800272146484600F0B5FF002D00F0BD80A0 +S31508013FF82FB1AF4203D03946484600F0ABFF2946F0 +S31508014008484600F0A7FFB0E0E20705D5D5E9002341 +S31508014018F4F7CAFA012301366410083562E702265D +S3150801402865E7B846089C84E7274B0B9903EBC40355 +S3150801403853E902235444002954D000202849F4F7A7 +S31508014048DDFB33462A46F4F7F7F85646CDE910015B +S31508014058DDE90601F4F758FD0546F4F73BFA024689 +S315080140680B46DDE90601F4F7E7F802460B46303553 +S31508014078CDE90623DDE9102306F8015BF4F706FD09 +S31508014088002872D1DDE9062300201149F4F7D4F88E +S31508014098DDE91023F4F7FAFC002840F0B480A642BB +S315080140A83FF470AFDDE9100100220A4BF4F77CFAF8 +S315080140B80022CDE91001DDE90601064BF4F774FA89 +S315080140C8CDE90601C4E700BFC06101089861010886 +S315080140D80000F03F0000244000001C400000144086 +S315080140E80000E03F31462846F4F75EFA5646CDE920 +S315080140F810011394DDE90601F4F706FD0546F4F700 +S31508014108E9F902460B46DDE90601F4F795F8024690 +S315080141180B46303506F8015BA642CDE906234FF072 +S31508014128000224D1DDE91001AE4BF4F787F80246FF +S315080141380B46DDE90601F4F7C7FC002863D1DDE97A +S3150801414810230020A749F4F777F802460B46DDE95C +S315080141580601F4F79BFC00283FF414AF139E731E5F +S31508014168139316F8013C302BF8D047463BE09E4B93 +S31508014178F4F71AFACDE90601BCE75646DDE906451C +S31508014188DDE9042320462946F4F738FBF4F7BCFC95 +S315080141988046F4F79FF9DDE90423F4F705FA0246A0 +S315080141A80B4620462946F4F747F808F13004089DD6 +S315080141B806F8014BA6EB0A04A54202460B4633D17B +S315080141C8F4F73CF8DDE9042304460D46F4F77CFCCC +S315080141D8C0B9DDE9042320462946F4F74DFC10B198 +S315080141E818F0010F0ED14846039900F0B3FE0023D3 +S315080141F83370229B01371F60249B002B00F04B82EA +S315080142081E6048E2B84633461E4613F8012D392A78 +S3150801421806D19A45F8D1302208F101088AF8002012 +S315080142281A7801321A70A0E700226F4BF4F7BCF925 +S315080142380022002304460D46F4F71EFC00289FD0E9 +S31508014248D1E70B9A002A00F0EA80209A012A00F39E +S31508014258CD80129A002A00F0C18003F233430A9CE2 +S31508014268049E049A01211A440492099A48461A4452 +S31508014278099200F023FF054666B1099B002B09DD63 +S31508014288B342A8BF3346049AF61AD21A0492099A6F +S31508014298D31A09930A9B0BB30B9B002B00F0C68014 +S315080142A8002C00F0C08029462246484600F0BEFF89 +S315080142B8039A01460546484600F016FF03998046C3 +S315080142C8484600F047FE0A9B1B1B0A9300F0B1807B +S315080142D841460A9A484600F0A9FF03900121484633 +S315080142E800F0ECFE0E9B0446002B00F0D8811A4616 +S315080142F80146484600F09AFF209B0446012B00F325 +S315080143089F80069B002B40F09780079BC3F31303F6 +S31508014318002B40F09380079B23F000431B0D1B05D8 +S3150801432833B1049B01330493099B01330993012390 +S315080143380A930E9B002B00F0B881236904EB8303CB +S31508014348186900F06FFEC0F12000099B184410F0A7 +S315080143581F0000F08280C0F12003042B73DD049B43 +S31508014368C0F11C0003440493099B064403440993BA +S31508014378049B002B05DD1A464846039900F0B0FF51 +S315080143880390099B002B05DD21461A46484600F08D +S31508014398A7FF04460F9B002B61D02146039801F01D +S315080143A80BF800285BDA00230A224846039900F02D +S315080143B8F3FD0B9B07F1FF380390002B00F077817B +S315080143C8294600230A22484600F0E6FDBBF1000FFC +S315080143D805466FDC209B022B49DC6BE0149BC3F175 +S315080143E836033CE70000E03F00002440089B5C1EBA +S315080143F80A9BA34209DB1C1B089B002BBFF630AF9F +S31508014408049B089A9E1A00232BE70A9B0E9AE31A1D +S315080144181A440A94049E0024089B0E9221E70A9CD2 +S31508014428049E0B9D28E7DDF80C8051E70A9A039943 +S3150801443850E7CDF80C8051E7002379E7069B77E723 +S3150801444800230A9379E793D0049A1C331A440492F1 +S31508014458099A1E441A4409928AE70346F4E7089B0F +S31508014468B846002B20DC9B46209B022B1EDDBBF1A0 +S31508014478000F7FF4B1AD21465B460522484600F098 +S315080144888BFD01460446039800F096FF00287FF73E +S31508014498A3AD5646312308F1010806F8013B9FE505 +S315080144A8B846089C2546F4E7DDF820B00B9B002B97 +S315080144B800F00181002E05DD29463246484600F0FE +S315080144C80FFF05460A9B002B5CD04846696800F031 +S315080144D801FD064628B9024640F2EF21804BFFF74F +S315080144E843BB2A6905F10C01023292000C30FFF729 +S315080144F873FA01223146484600F0F2FE2F46054670 +S315080145080AF1010304930AEB0B030A93069B03F0CA +S3150801451801030993049B2146039803F1FF3BFFF71F +S3150801452887FA034639463033069003980B9300F009 +S3150801453843FF2A4608902146484600F059FFC268B3 +S3150801454806460B9B02BB0146039800F035FF024657 +S315080145580B9B31464846CDE90B3200F0FBFC209B04 +S315080145680C9A049E42EA0301099B19430B9B0DD138 +S31508014578392B27D0089A002A01DD069B31338BF897 +S3150801458800302EE52846B9E70122E2E7089900290D +S3150801459804DB209801430998014320D1002AEEDD5E +S315080145A8012203994846049300F09AFE214603908E +S315080145B800F002FF0028049B02DCE0D1DA07DED509 +S315080145C8392BDAD139238BF8003033461E4616F8CB +S315080145D8012C013B392A4ED001321A7001E5002A0D +S315080145E803DD392BEED00133C9E7049A0A9902F893 +S315080145F8013C8A4228D000230A220399484600F03A +S31508014608CBFCAF4203904FF000034FF00A0239463C +S31508014618484607D100F0C0FC07460546049B013306 +S31508014628049377E700F0B8FC2946074600230A22CF +S31508014638484600F0B1FC0546F0E7BBF1000FCCBFD0 +S315080146485E460126002756440122039948460493E3 +S3150801465800F046FE2146039000F0AEFE0028B4DCC1 +S3150801466802D1049BDB07B0D433461E4613F8012D45 +S31508014678302AFAD0B5E49A45A8D1312308F10108B8 +S315080146888AF80030ADE4249BDFF858A01BB10AF17B +S315080146980803249A1360504617B0BDE8F08F209B8B +S315080146A8012B7FF72EAE0E9B0A9301204DE6BBF12F +S315080146B8000F7FF7D9AE564621460398FFF7B8F992 +S315080146C800F1300306F8013BA6EB0A029345B4DD6F +S315080146D800230A224846039900F05EFC0390EBE79B +S315080146E804610108886001082DE9F0471F468E68AC +S315080146F88246BE420C4690460B682DD8B1F90C2065 +S3150801470812F4906F26D06569096905EB4505A3EB8F +S31508014718010905EBD5757B1C4B446D109D4238BFC5 +S315080147281D46530527D5294600F0A0FA064660B363 +S315080147384A462169FFF750F9A38923F4906343F0A0 +S315080147488003A38126614E4426603E466561A5EB32 +S315080147580905A560BE4200D93E463246414620684B +S3150801476801F0ABF80020A3689B1BA36023683344B8 +S315080147782360BDE8F0872A4600F07CFF0646002834 +S31508014788E0D15046216901F047F90C23CAF80030EF +S31508014798A3894FF0FF3043F04003A381E9E70000FE +S315080147A82DE9F04F98468B8907461B060D46144690 +S315080147B89DB010D50B6973B9402100F057FA2860E6 +S315080147C8286130B90C233B604FF0FF301DB0BDE8B6 +S315080147D8F08F40236B610023099320238DF8293034 +S315080147E830234FF00109CDF80C80DFF898818DF850 +S315080147F82A3023469A4613F8012B0AB1252AF9D1F4 +S31508014808BAEB040B0BD05B46224629463846FFF716 +S315080148186BFF013000F0A780099A5A4409929AF861 +S315080148280030002B00F09F8000234FF0FF32CDE9BE +S3150801483805230AF1010A049307938DF853301A934D +S315080148485446052214F8011B4E48FFF7B7F8049A8F +S31508014858D8B9D00644BF20238DF85330110744BF71 +S315080148682B238DF853309AF800302A2B15D0544645 +S3150801487800204FF00A0C079A214611F8013B303BF4 +S31508014888092B4BD9B0B1079214E0A0EB080309FA32 +S3150801489803F31343A2460493D2E7039B191D1B6826 +S315080148A80391002BBBBF5B4242F0020207930793B1 +S315080148B8B8BF049223782E2B0AD163782A2B32D1D2 +S315080148C8039B02341A1D1B68039243EAE373059393 +S315080148D8DFF8B4A0032250462178FFF76FF838B1FC +S315080148E84022049BA0EB0A00824013430134049337 +S315080148F814F8011B062225488DF82810FFF75EF8DB +S31508014908002836D0224B1BBB039B073323F007032A +S3150801491808330393099B334409936AE70C46012034 +S315080149280CFB0232A8E700234FF00A0C194601349A +S315080149380593204610F8012B303A092A03D9002B8A +S31508014948C6D00591C4E7044601230CFB0121F0E70B +S3150801495803AB00932A4638460E4B04A9FEF728FBF3 +S31508014968421C0646D6D1AB895B063FF52DAF099899 +S315080149782CE703AB00932A463846064B04A9FEF7EB +S31508014988B5FDEDE7156101081B6101081F610108FD +S31508014998B92F0108F1460108936810B4013B002BA9 +S315080149A8936007DA9469A34201DB0A2902D110BC8C +S315080149B800F08EBE1368581C10601970084610BCA2 +S315080149C87047F8B506460F461446D518AC4201D1C4 +S315080149D8002007E03A46304614F8011BFFF7DCFFCA +S315080149E8431CF3D1F8BD00002DE9F04F0D461446D6 +S315080149F8984606469DB018B1036A0BB9FEF720FF1B +S31508014A086B6ED90705D4AB899A0502D4A86DFEF74A +S31508014A18CEFFAB891B0701D52B699BB929463046B9 +S31508014A2800F094FE70B16B6EDC0704D54FF0FF30C9 +S31508014A381DB0BDE8F08FAB899805F7D4A86DFEF7C8 +S31508014A48B7FFF3E70023099320238DF8293030238C +S31508014A584FF00109CDF80C80DFF8A8818DF82A30C6 +S31508014A6823469A4613F8012B0AB1252AF9D1BAEB36 +S31508014A78040B0BD05B46224629463046FFF7A1FFB1 +S31508014A88013000F0A780099A5A4409929AF8003029 +S31508014A98002B00F09F8000234FF0FF32CDE9052354 +S31508014AA80AF1010A049307938DF853301A93544669 +S31508014AB8052214F8011B5348FEF780FF049AD8B952 +S31508014AC8D10644BF20238DF85330130744BF2B233F +S31508014AD88DF853309AF800302A2B15D05446002001 +S31508014AE84FF00A0C079A214611F8013B303B092B6E +S31508014AF84BD9B0B1079214E0A0EB080309FA03F3FE +S31508014B081343A2460493D2E7039B191D1B68039115 +S31508014B18002BBBBF5B4242F0020207930793B8BF5B +S31508014B28049223782E2B0AD163782A2B32D1039B38 +S31508014B3802341A1D1B68039243EAE3730593DFF8E7 +S31508014B48C8A0032250462178FEF738FF38B140221B +S31508014B58049BA0EB0A00824013430134049314F81A +S31508014B68011B062229488DF82810FEF727FF002879 +S31508014B783FD0274B1BBB039B073323F00703083397 +S31508014B880393099B3B4409936AE70C4601200CFBEE +S31508014B980232A8E700234FF00A0C19460134059397 +S31508014BA8204610F8012B303A092A03D9002BC6D01A +S31508014BB80591C4E7044601230CFB0121F0E703AB81 +S31508014BC800932A463046134B04A9FEF7F1F907461E +S31508014BD8781CD6D16B6ED90705D4AB899A0502D448 +S31508014BE8A86DFEF7E5FEAB895B063FF51FAF099889 +S31508014BF81EE703AB00932A463046064B04A9FEF77F +S31508014C0875FCE4E7156101081B6101081F610108C4 +S31508014C18B92F0108CB490108024B0146186800F06B +S31508014C2825B800BF8400002070B50F4E0C463168C0 +S31508014C38054611B900F090FE30602146284600F075 +S31508014C488BFE431C03D14FF0FF34204670BDC41CAC +S31508014C5824F00304A042F8D0211A284600F07CFE65 +S31508014C680130F2D1EFE700BF141300202DE9F8430C +S31508014C78CD1C25F0030508350C2D38BF0C25002D4C +S31508014C88064601DBA94204D90C2333600020BDE896 +S31508014C98F883DFF8D48000F011F9D8F800301C46FB +S31508014CA844BB29463046FFF7BFFF431C044658D183 +S31508014CB8D8F800402746002F43D1002C4BD023684B +S31508014CC83946304604EB030900F046FE814542D1D0 +S31508014CD8216830466D1A2946FFF7A6FF01303AD0F2 +S31508014CE823682B442360D8F800305A6862BBC8F891 +S31508014CF800700FE02268521B20D40B2A17D96119B4 +S31508014D08A342256018BF5960636808BFC8F8001030 +S31508014D1862514B60304600F0D7F804F10B00231DA9 +S31508014D2820F00700C21A1CBF1B1AA350AFE7626816 +S31508014D38A3420CBFC8F800205A60EBE7234664680B +S31508014D48AEE73C467F68B6E71A465B68A342FBD1DD +S31508014D5800235360DEE70C233046336000F0B4F8CD +S31508014D6894E70560D6E700BF18130020B1F90C20AF +S31508014D78F8B5160705460C4654D44B68002B02DCD1 +S31508014D880B6C002B48DDE66A002E45D0002312F489 +S31508014D9880522F68216A2B6030D0626DA389590722 +S31508014DA805D56368D21A636B0BB1236CD21A002333 +S31508014DB82846E66A216AB047431CA38906D12968A9 +S31508014DC81D292BD8284ACA40D60727D5002262604A +S31508014DD82269D904226004D5421C01D12B6803B97A +S31508014DE86065616B2F60B9B104F14403994202D039 +S31508014DF8284600F011FE002363630DE001232846C7 +S31508014E08B0470246501CC9D12B68002BC6D01D2BAA +S31508014E1801D0162B1DD12F60002021E043F0400355 +S31508014E281BB21AE00F69002FF6D0930718BF0023A3 +S31508014E380E6808BF4B69F61B0F608B60002EEBDD09 +S31508014E4833463A462846216AD4F828C0E047002856 +S31508014E5807DCB4F90C3043F040034FF0FF30A38167 +S31508014E68F8BD0744361AE9E70100402038B50B6949 +S31508014E7805460C4613B90025284638BD18B1036AF4 +S31508014E880BB9FEF7DDFCB4F90C30002BF3D0626ED2 +S31508014E98D00704D4990502D4A06DFEF788FD2846E3 +S31508014EA82146FFF763FF636E0546DA07E4D4A3894B +S31508014EB89B05E1D4A06DFEF77BFDDDE70148FEF70A +S31508014EC876BD00BF101300200148FEF771BD00BF6B +S31508014ED81013002070B5C66904460D4676B9102028 +S31508014EE8FFF79AFE0246E06120B96B21174B18486D +S31508014EF8FEF780FDC0E901660660C660E669F368E3 +S31508014F0883B1E369DB6853F82500B8B9012101FAC9 +S31508014F1805F6721D2046920000F069FD60B1C0E9E8 +S31508014F2801560EE021220421204600F060FDE369BE +S31508014F38F060DB68002BE4D1002070BD026843F8F5 +S31508014F4825200023C0E90333F7E700BF9560010868 +S31508014F582661010870B5C66905460C4676B910205A +S31508014F68FFF75AFE0246E86120B98F21084B09481E +S31508014F78FEF740FDC0E901660660C6603CB1EB690B +S31508014F886268DB6853F82210216043F8224070BD35 +S31508014F9895600108266101082DE9F04107460C4686 +S31508014FA81E4600200D6901F1140CDCF800300130A9 +S31508014FB899B202FB01611E0C0B0C02FB063389B27E +S31508014FC801EB034185424FEA13464CF8041BECDC16 +S31508014FD80EB3A368AB4219DC616838460131FFF79D +S31508014FE879FF804628B90246BA210C4B0C48FEF7C8 +S31508014FF801FD226904F10C01023292000C30FEF718 +S31508015008EBFC21463846FFF7A5FF444604EB850322 +S3150801501801355E6125612046BDE8F0810461010814 +S31508015028266101080346B0F5803F3ABF03041020FC +S315080150380020B3F1807F3CBF1B020830B3F1805FC3 +S315080150483CBF1B010430B3F1804F3CBF9B000230C3 +S31508015058002B05DB13F0804F00F1010008BF202063 +S3150801506870470368024613F007000BD0D90721D405 +S31508015078980749BF5B089B08012013605CBF02209B +S315080150881360704799B209B910201B0CD9B209B92E +S3150801509808301B0A190704BF1B090430990704BFFE +S315080150A89B080230D90703D45B0800F1010003D035 +S315080150B813607047002070472020704710B50C46CA +S315080150C80121FFF707FF024628B940F24511044BAB +S315080150D80448FEF78FFC01234461036110BD00BF34 +S315080150E804610108266101082DE9F04F17460A6986 +S315080150F83B6989469A42A2BF3B460F4699463D698E +S31508015108D9F810A0BB68796805EB0A06B34285B0D9 +S31508015118B8BF0131FFF7DEFE30B902464FF4B17167 +S31508015128404B4148FEF766FC00F114042346002269 +S3150801513804EB860E734520D307F1140809F1140107 +S3150801514808EB850501EB8A030293EB1B153B23F054 +S31508015158030304331537BD4238BF04230193029B61 +S3150801516803918B420CD8002E03DD5EF8043D002B13 +S3150801517855D0066105B0BDE8F08F43F8042BD9E789 +S31508015188B1F800A0BAF1000F1FD0C446A1460027FE +S315080151985CF8042BD9F800301FFA82FB9BB20AFB8C +S315080151A80B333B44D9F80070120C3F0C0AFB027208 +S315080151B802EB13429BB243EA024365454FEA12479B +S315080151C849F8043BE4D8019BE750039B0431B3F83B +S315080151D80290B9F1000F20D04746A4464FF0000ABD +S315080151E82368B7F800B0BCF802209BB209FB0B226A +S315080151F8524443EA02434CF8043B57F8043B4FEA46 +S31508015208134ABCF80030BD4209FB0A3303EB1243C3 +S315080152184FEA134AE5D8019AA35004349FE7013E99 +S31508015228A1E700BF04610108266101082DE9F843D1 +S31508015238154612F0030207460E4607D0254C013AD1 +S31508015248002354F82220FFF7A7FE0646AD103DD0E5 +S31508015258FC697CB91020FFF7DFFC0246F86128B91A +S3150801526840F2B3111C4B1D48FEF7C4FBC0E90144C3 +S315080152780460C460D7F81C80D8F808404CB940F2D5 +S3150801528871213846FFF71AFF00230446C8F80800B3 +S3150801529803604FF00009EB070AD53146224638461E +S315080152A8FFF722FF804631463846FFF753FE464642 +S315080152B86D100BD0206838B9224621463846FFF7C3 +S315080152C813FF2060C0F800900446E4E73046BDE8BD +S315080152D8F88300BF8C6101089560010826610108F9 +S315080152E82DE9F0470C46074691462369496803EBB9 +S315080152F86218A3684FEA621A08F10106B3420BDB82 +S315080153083846FFF7E7FD054648B902464FF4EF71F7 +S31508015318274B2848FEF76EFB01315B00EEE70023B1 +S3150801532800F1140100F110021846534533DB2069D0 +S315080153382AEAEA7A04F1140319F01F0901EB8A012A +S3150801534803EB800C2BD08A460022C9F1200E186877 +S3150801535800FA09F010434AF8040B53F8042B9C4544 +S3150801536822FA0EF2F3D8ACEB0403153B23F0030338 +S31508015378043304F11500604588BF0423CA500AB1ED +S3150801538808F10206013E384621462E61FFF7E2FD7D +S315080153982846BDE8F08742F8040F0133C5E7043902 +S315080153A853F8042B9C4541F8042FF9D8EAE700BFBE +S315080153B8046101082661010803460A69006930B5CE +S315080153C8801A0ED11433143103EB820401EB8201DE +S315080153D854F8045D51F8042D954203D005D24FF0CF +S315080153E8FF3030BDA342F3D3FBE70120F9E70000FC +S315080153F82DE9F74F89460646114648461446FFF7EA +S31508015408DBFF051E12D129463046FFF763FD024622 +S3150801541828B940F237213E4B3E48FEF7EBFA0123FD +S31508015428C0E90435104603B0BDE8F08FBCBF4B464A +S31508015438A1463046D9F80410BABF1C4601250025ED +S31508015448FFF748FD024618B940F24521304BE3E714 +S3150801545800F1140BD9F8107009F11003C5604FF063 +S31508015468000C09F11405D946266904F1140E05EB51 +S3150801547887080EEB86060193019B5EF8040B53F821 +S3150801548804AF81B201931FFA8AF35B1A000C6344CD +S31508015498C0EB1A4000EB23409BB243EA004376452A +S315080154A84FEA204C49F8043BE6D8331B153B23F051 +S315080154B8030315340433A64238BF04231D445B4449 +S315080154C81E462C4644450ED308F10301491B21F013 +S315080154D80301033DA84538BF00210B4453F8041DB1 +S315080154E899B117619EE7E64654F8041B1FFA81FC31 +S315080154F8F444080C714400EB2C4089B241EA004196 +S315080155084FEA204C46F8041BDCE7013FE6E700BFF3 +S3150801551804610108266101082DE9734301219046B2 +S315080155289946089EFFF7D6FC044630B9024640F26A +S315080155380F31234B2348FEF75DFAC9F30A55C9F318 +S3150801554813030DB143F480130193B8F1000324D072 +S3150801555868460093FFF785FDDDE90012D8B1C0F169 +S31508015568200302FA03F30B43C24063610192019BCC +S31508015578002B0CBF01220222A3612261ADB1A5F25B +S31508015588334505443560C0F13500099B1860204646 +S3150801559802B0BDE870836161E9E701A8FFF761FD1B +S315080155A8019B012263612030E7E7A0F2324004EB50 +S315080155B8820330601869FFF735FDC0EB4210E4E74E +S315080155C8046101082661010810B50C46B1F90E10E7 +S315080155D800F0B0F90028ABBF636DA3891B1823F443 +S315080155E88053ACBF6365A38110BD2DE9F0411F4601 +S315080155F88B890546DB050C46164605D50223002286 +S31508015608B1F90E1000F084F9A389324623F48053C0 +S31508015618A38128463B46B4F90E10BDE8F04100F0CF +S31508015628ABB910B50C46B1F90E1000F071F9431C67 +S31508015638A38915BF606523F4805343F48053A38176 +S3150801564818BFA38110BDB1F90E1000F0A7B9000063 +S315080156580EB403B5014603AB054853F8042B006895 +S315080156680193FFF7C1F902B05DF804EB03B070477F +S31508015678840000202DE9F041074614460D4621B954 +S315080156881146BDE8F041FFF7F1BA2AB900F0C4F9A5 +S3150801569825462846BDE8F08100F018FA84420646F0 +S315080156A802D8B4EB500FF4D821463846FFF7DEFA8C +S315080156B8804608B94546ECE7B4422246294628BF3A +S315080156C83246FEF789F92946384600F0A5F9F1E781 +S315080156D8F8B50E461446054618B1036A0BB9FEF71E +S315080156E8AFF8A369A360A3891A0701D5236943B942 +S315080156F82146284600F02AF818B14FF0FF373846F0 +S31508015708F8BD23682269F6B2981A6369374683424F +S3150801571805DC21462846FFF7A9FB0028EDD1A36831 +S31508015728013BA36023685A1C22601E706269431CE8 +S315080157389A4204D0A389DB07E1D50A2EDFD121468F +S315080157482846FFF793FB0028D9D0D6E738B5294B61 +S31508015758054618680C4618B1036A0BB9FEF770F8BE +S31508015768B4F90C30190722D4DA0607D409222A60B3 +S3150801577843F040034FF0FF30A38133E0580712D5B1 +S31508015788616B41B104F14403994202D0284600F0FD +S3150801579843F900236363A38923F02403A381002320 +S315080157A8636023692360A38943F00803A3812369F6 +S315080157B84BB9A38903F42073B3F5007F03D02146B7 +S315080157C8284600F03EF8B4F90C3013F001020AD065 +S315080157D80022A26062695242A261226942B913F0A3 +S315080157E88000C5D138BD990758BF6269A260F4E738 +S315080157F80020F7E78400002070B50C46B1F90E10B1 +S31508015808154600291E4696B00CDAA389002113F01D +S31508015818800F14BF40234FF48063002031602B604A +S3150801582816B070BD6A4600F0C9F80028EDDB019983 +S3150801583801F47041A1F50053594259414FF4806367 +S31508015848EBE78B89F7B59D0706460C4607D504F19C +S315080158584703236023610123636103B0F0BD6A46E8 +S3150801586801ABFFF7C9FF009F054639463046FFF7E2 +S31508015878FDF948B9B4F90C309A05EED423F00303B7 +S3150801588843F00203A381E2E7A389C4E9040743F0C5 +S315080158988003A381019B20605BB13046B4F90E10E1 +S315080158A800F026F828B1A38923F0030343F001037E +S315080158B8A381A3891D43A581CFE7884210B501EBCA +S315080158C8020402D98442234607D8431EA14208D0B6 +S315080158D811F8012B03F8012FF8E7014602448A4219 +S315080158E800D110BD13F8014D02F8014DF7E7000084 +S315080158F838B50023054D044608462B60F7F767FBBC +S31508015908431C02D12B6803B1236038BD1C13002040 +S3150801591838B50446084611460022054D2A601A4636 +S31508015928F7F75FFB431C02D12B6803B1236038BD27 +S315080159381C13002038B50446084611460022054DB1 +S315080159482A601A46F7F70CFB431C02D12B6803B1E8 +S31508015958236038BD1C13002038B50023054D0446BD +S3150801596808462B60F7F74AFB431C02D12B6803B19B +S31508015978236038BD1C13002038B50446084611466D +S315080159880022054D2A601A46F4F74CFC431C02D13D +S315080159982B6803B1236038BD1C13002038B50023D2 +S315080159A8054D044608462B60F7F7F7FA431C02D15A +S315080159B82B6803B1236038BD1C13002038B50023B2 +S315080159C8064D0446084611462B60F7F7F1FA431CBB +S315080159D802D12B6803B1236038BD00BF1C13002010 +S315080159E8062008B500F0B0F80120F7F7AEFA70B549 +S315080159F8A1FB025434B92946FFF738F9064628B9EE +S31508015A08304670BD0C2200260260F9E72A4621466F +S31508015A18FDF79AFFF4E7000038B50546002940D096 +S31508015A2851F8043C0C1F002BB8BFE418FFF746FAD7 +S31508015A381C4A136833B9636014602846BDE83840C0 +S31508015A48FFF742BAA34208D9206821188B4201BF39 +S31508015A5819685B6809182160EDE71A465B680BB196 +S31508015A68A342FAD911685018A0420BD120680144FB +S31508015A78501883421160E0D118685B6808441060C1 +S31508015A885360DAE702D90C232B60D6E72068211878 +S31508015A988B4201BF19685B68091821606360546005 +S31508015AA8CBE738BD1813002082B001B901A942B164 +S31508015AB84BB113780B601278101E18BF012002B07B +S31508015AC870471046FBE76FF00100F8E751F8043C08 +S31508015AD8181F002BBCBF0B58C01870470346084649 +S31508015AE841B1FF2A04D98A224FF0FF301A6070475C +S31508015AF801200A7070471F2938B505460C4604D98E +S31508015B08162303604FF0FF3038BDC26B12B152F845 +S31508015B1821304BB9284600F031F822460146284675 +S31508015B28BDE8384000F018B8012B0AD0591C03D132 +S31508015B38162303600120E7E70021204642F82410CE +S31508015B4898470020E0E70000024B01461868FFF76E +S31508015B58D2BF00BF8400002038B50023064D04468D +S31508015B68084611462B60F7F7E0F9431C02D12B6862 +S31508015B7803B1236038BD00BF1C130020F7F7CEB95F +S31508015B88F8B500BFF8BC08BC9E467047F8B500BF13 +S30D08015B98F8BC08BC9E467047E3 +S31508015BA0434F4E4E2564204572726F723A20256422 +S31508015BB00A000000436F6E6E6563746F723A205572 +S31508015BC06E6B6E6F776E0A00436F6E6E6563746FE8 +S31508015BD0723A20556E706C75676765640A00000035 +S31508015BE0436F6E6E6563746F723A204469736162BE +S31508015BF06C65640A00000000436F6E6E6563746F1E +S31508015C00723A20507265706172696E670A00000007 +S31508015C10436F6E6E6563746F723A2041757468528C +S31508015C20657175697265640A00000000436F6E6EDE +S31508015C306563746F723A2057616974696E67466F56 +S31508015C4072456E657267790A00000000436F6E6ED1 +S31508015C506563746F723A204368617267696E67504B +S31508015C60617573656445560A00000000436F6E6EE0 +S31508015C706563746F723A204368617267696E67502B +S31508015C806175736564455653450A0000436F6E6E28 +S31508015C906563746F723A204368617267696E670A51 +S31508015CA000000000436F6E6E6563746F723A20419F +S31508015CB075746854696D656F75740A00436F6E6E05 +S31508015CC06563746F723A2046696E69736865640A1A +S31508015CD000000000436F6E6E6563746F723A20466A +S31508015CE0696E6973686564455653450A0000000084 +S31508015CF0436F6E6E6563746F723A2046696E697397 +S31508015D0068656445560A0000436F6E6E6563746F75 +S31508015D10723A205265706C756767696E670A00008A +S31508015D20434F4E4E2564204368617267696E67204A +S31508015D3046696E69736865643A0A00004368617268 +S31508015D4067696E6720456E657267793A2025640A28 +S31508015D5000000000434353206D6F64756C65207322 +S31508015D60746172740A00000053657269616C206E71 +S31508015D70756D6265723A2025640A0000426F617288 +S31508015D8064207265766973696F6E3A2025640A0024 +S31508015D9046572076657273696F6E3A2025642E25FB +S31508015DA0642E25640A000000505355206F6E207436 +S31508015DB0696D656F75740A00436F6E746163746FFC +S31508015DC072206572726F722C2073746F7070696EAF +S31508015DD0672E2E2E0A000000505355206F66662046 +S31508015DE074696D656F75740A000000004553544F58 +S31508015DF050207472696767657265640A000000005D +S31508015E0053746F7070696E67206368617267696E33 +S31508015E10672E2E2E0A00000046696E69736865644E +S31508015E2045562C2073746F7070696E672E2E2E0A74 +S31508015E30000000004368617267696E6720657272C7 +S31508015E406F722025642C207374617465202D3E20A1 +S31508015E5064697361626C65640A0000004368617273 +S31508015E6067696E67207065726D69747465642C2044 +S31508015E707374617274206368617267696E670A0078 +S31508015E8043617220756E706C75676765640A0000F8 +S31508015E905265706C756767696E672E2E2E0A00004B +S31508015EA05265706C756767696E672066696E697396 +S31508015EB06865642C206275742063617220756E7042 +S31508015EC06C75676765640A005265706C7567676902 +S31508015ED06E672066696E69736865642C20636172F2 +S31508015EE020706C75676765642C207374617465200E +S31508015EF02D3E2061757468207265717569726564D5 +S31508015F000A000000457665726573742074696D65CB +S31508015F106F75740A0000000043435320696E697463 +S31508015F200A000000457665726573742072657365AB +S31508015F307420636F6D6D616E640A00005061636B56 +S31508015F40657420435243206572726F720A0000001D +S31508015F50556E6B6E6F776E20636D642030782530D1 +S31508015F6032780A005061636B6574206C656E206D2A +S31508015F7069736D6174636820636D643D307825309B +S31508015F8032780A0053657420436F6E6669673A2052 +S31508015F9025732025640A0000506F776572206C69A5 +S31508015FA06D69743A2025640A00000000436861722D +S31508015FB06765207065726D69743A2025640A000068 +S31508015FC0000000000000000001020304060708099A +S31508015FD00000000001020304000004050607080981 +S31508015FE000000000000D0000010203040506070871 +S31508015FF0090A0B0C0D0E0F10000004050607080907 +S3150801600000000000000D0000010203040506070850 +S31508016010090A0B0C0D0E0F10494E4600696E6600F3 +S315080160204E414E006E616E003000303132333435E8 +S3150801603036373839414243444546003031323334E4 +S315080160403536373839616263646566002C206675B2 +S315080160506E6374696F6E3A20006173736572746951 +S315080160606F6E2022257322206661696C65643A2069 +S3150801607066696C6520222573222C206C696E652061 +S315080160802564257325730A00496E66696E697479F4 +S31508016090004E614E005245454E54206D616C6C6F41 +S315080160A06320737563636565646564002F6275694A +S315080160B06C642F676E752D746F6F6C732D666F72B6 +S315080160C02D73746D33325F31332E332E72656C3115 +S315080160D02E32303234303932362D313731352F734D +S315080160E072632F6E65776C69622F6E65776C69626C +S315080160F02F6C6962632F7374646C69622F64746FA1 +S31508016100612E630042616C6C6F632073756363650E +S315080161106564656400232D302B2000686C4C00658E +S315080161206667454647002F6275696C642F676E7509 +S315080161302D746F6F6C732D666F722D73746D333298 +S315080161405F31332E332E72656C312E323032343054 +S315080161503932362D313731352F7372632F6E6577A4 +S315080161606C69622F6E65776C69622F6C6962632F41 +S315080161707374646C69622F6D707265632E63004374 +S3150801618000504F534958002E00000000050000003A +S31508016190190000007D0000000080E03779C3414303 +S315080161A0176E05B5B5B89346F5F93FE9034F384D6E +S315080161B0321D30F94877825A3CBF737FDD4F15751A +S315080161C0000000000000F03F00000000000024402D +S315080161D000000000000059400000000000408F4008 +S315080161E0000000000088C34000000000006AF84073 +S315080161F00000000080842E4100000000D012634197 +S315080162000000000084D797410000000065CDCD410C +S31508016210000000205FA00242000000E876483742ED +S31508016220000000A2941A6D42000040E59C30A2428B +S315080162300000901EC4BCD64200003426F56B0C4300 +S315080162400080E03779C3414300A0D88557347643A7 +S3150801625000C84E676DC1AB43003D9160E458E14308 +S31508016260408CB5781DAF154450EFE2D6E41A4B447D +S3150801627092D54D06CFF08044F64AE1C7022DB544C2 +S31508016280B49DD9794378EA44002020202020202093 +S3150801629020202828282828202020202020202020C7 +S315080162A020202020202020202088101010101010D7 +S315080162B01010101010101010100404040404040423 +S315080162C004040410101010101010414141414141BD +S315080162D0010101010101010101010101010101019F +S315080162E001010101101010101010424242424242AF +S315080162F0020202020202020202020202020202026F +S315080163000202020210101010200000000000000016 +S31508016310000000000000000000000000000000006E +S31508016320000000000000000000000000000000005E +S31508016330000000000000000000000000000000004E +S31508016340000000000000000000000000000000003E +S31508016350000000000000000000000000000000002E +S31508016360000000000000000000000000000000001E +S31508016370000000000000000000000000000000000E +S3110801638000000000000000000000000002 +S30D0801638C9C1EFF7F01000000C1 +S309080163940D8200085F +S30908016398E981000880 +S3150801639CE401000006000000400000320A32004009 +S315080163AC00000000008000320A3200008000000064 +S315080163BC0000FA320A32000000FA000000FF00322F +S315080163CC0A32000020000000FFFFFF320A3200FFEC +S315080163DCFFFF0000FF0000320A32002000006406AD +S315080163EC0100000000FFFF00000000000000000093 +S315080163FC52555301000000FE529E66000024F4001B +S3150801640C100000000100000000000000030000005D +S3150801641CD41100208800002000000000D4110020AF +S3150801642C3C120020A412002000000000000000000D +S3150801643C0000000000000000000000000000000041 +S3150801644C0000000000000000000000000000000031 +S3150801645C0000000000000000000000000000000021 +S3150801646C00000000430000000000000000000000CE +S3150801647C0000000000000000000000000000000001 +S3150801648C00000000430000000000000000000000AE +S3150801649C00000000000000000000000000000000E1 +S315080164AC000000004300000000000000000000008E +S315080164BC00000000000000000000000000000000C1 +S315080164CC000000004300000000000000000000006E +S315080164DC00000000000000000000000000000000A1 +S315080164EC000000004300000000000000000000004E +S315080164FC0000000000000000000000000000000081 +S3150801650C000000004300000000000000000000002D +S3150801651C0000000000000000000000000000000060 +S3150801652C000000004300000000000000000000000D +S3150801653C0000000000000000000000000000000040 +S3150801654C00000000E55A0108B15A010800000000D4 +S3150801655C886201088761010887600108876001085C +S3150801656C8760010887600108876001088760010850 +S3150801657C876001088760010887600108FFFFFFFF34 +S3150801658CFFFFFFFFFFFFFFFFFFFF00000100415365 +S3150801659C434949000000000000000000000000000B +S315080165AC000000000000000000000000000041533C +S315080165BC43494900000000000000000000000000EB +S315080165CC00000000000000000000000000000000B0 +S7050800D7D546 diff --git a/Debug/Core/Src/adc.cyclo b/Debug/Core/Src/adc.cyclo index a716d74..52957bf 100644 --- a/Debug/Core/Src/adc.cyclo +++ b/Debug/Core/Src/adc.cyclo @@ -1,3 +1,3 @@ ../Core/Src/adc.c:30:6:MX_ADC1_Init 3 ../Core/Src/adc.c:72:6:HAL_ADC_MspInit 2 -../Core/Src/adc.c:105:6:HAL_ADC_MspDeInit 2 +../Core/Src/adc.c:106:6:HAL_ADC_MspDeInit 2 diff --git a/Debug/Core/Src/board.cyclo b/Debug/Core/Src/board.cyclo index b497a98..7a7aca8 100644 --- a/Debug/Core/Src/board.cyclo +++ b/Debug/Core/Src/board.cyclo @@ -1,9 +1,13 @@ -../Core/Src/board.c:16:6:RELAY_Write 8 -../Core/Src/board.c:46:9:RELAY_Read 1 -../Core/Src/board.c:51:9:IN_ReadInput 8 -../Core/Src/board.c:72:9:GetBoardTemp 1 -../Core/Src/board.c:84:6:Init_Peripheral 1 -../Core/Src/board.c:96:7:pt1000_to_temperature 1 -../Core/Src/board.c:107:7:calculate_NTC_resistance 2 -../Core/Src/board.c:122:9:GBT_ReadTemp 3 -../Core/Src/board.c:152:6:ADC_Select_Channel 2 +../Core/Src/board.c:19:6:RELAY_Write 9 +../Core/Src/board.c:52:9:RELAY_Read 1 +../Core/Src/board.c:57:9:IN_ReadInput 8 +../Core/Src/board.c:78:9:GetBoardTemp 1 +../Core/Src/board.c:90:6:Init_Peripheral 1 +../Core/Src/board.c:106:7:pt1000_to_temperature 1 +../Core/Src/board.c:117:7:calculate_NTC_resistance 2 +../Core/Src/board.c:132:9:CONN_ReadTemp 4 +../Core/Src/board.c:169:9:GBT_ReadTemp 1 +../Core/Src/board.c:173:6:ADC_Select_Channel 2 +../Core/Src/board.c:184:9:ADC_TryLock 4 +../Core/Src/board.c:200:6:ADC_LockBlocking 2 +../Core/Src/board.c:206:6:ADC_Unlock 2 diff --git a/Debug/Core/Src/charger_control.cyclo b/Debug/Core/Src/charger_control.cyclo index 79ce2a0..c589682 100644 --- a/Debug/Core/Src/charger_control.cyclo +++ b/Debug/Core/Src/charger_control.cyclo @@ -1,3 +1,5 @@ -../Core/Src/charger_control.c:9:6:CONN_Init 1 -../Core/Src/charger_control.c:17:6:CONN_Loop 7 -../Core/Src/charger_control.c:41:6:CONN_PrintChargingTotal 1 +../Core/Src/charger_control.c:11:6:CONN_Init 1 +../Core/Src/charger_control.c:19:6:CONN_Loop 6 +../Core/Src/charger_control.c:41:6:CONN_Task 5 +../Core/Src/charger_control.c:57:6:CONN_SetState 16 +../Core/Src/charger_control.c:83:6:CONN_PrintChargingTotal 1 diff --git a/Debug/Core/Src/charger_gbt.cyclo b/Debug/Core/Src/charger_gbt.cyclo deleted file mode 100644 index 03ec813..0000000 --- a/Debug/Core/Src/charger_gbt.cyclo +++ /dev/null @@ -1,13 +0,0 @@ -../Core/Src/charger_gbt.c:71:6:GBT_Init 1 -../Core/Src/charger_gbt.c:82:6:GBT_SetConfig 1 -../Core/Src/charger_gbt.c:91:6:GBT_ChargerTask 95 -../Core/Src/charger_gbt.c:492:6:GBT_SwitchState 16 -../Core/Src/charger_gbt.c:513:10:GBT_StateTick 1 -../Core/Src/charger_gbt.c:517:6:GBT_Delay 1 -../Core/Src/charger_gbt.c:522:6:GBT_StopEV 3 -../Core/Src/charger_gbt.c:532:6:GBT_StopEVSE 2 -../Core/Src/charger_gbt.c:538:6:GBT_StopOCPP 2 -../Core/Src/charger_gbt.c:544:6:GBT_ForceStop 1 -../Core/Src/charger_gbt.c:553:6:GBT_Error 1 -../Core/Src/charger_gbt.c:561:6:GBT_Reset 1 -../Core/Src/charger_gbt.c:588:6:GBT_Start 1 diff --git a/Debug/Core/Src/connector.cyclo b/Debug/Core/Src/connector.cyclo index c631cfd..80190ea 100644 --- a/Debug/Core/Src/connector.cyclo +++ b/Debug/Core/Src/connector.cyclo @@ -1,6 +1,2 @@ -../Core/Src/connector.c:39:6:CONN_Task 35 -../Core/Src/connector.c:146:6:CONN_SetState 15 -../Core/Src/connector.c:167:6:CONN_CC_ReadStateFiltered 4 -../Core/Src/connector.c:186:9:CONN_CC_GetState 1 -../Core/Src/connector.c:189:9:CONN_CC_GetStateRaw 9 -../Core/Src/connector.c:202:7:CONN_CC_GetAdc 1 +../Core/Src/connector.c:12:6:CONN_Task 5 +../Core/Src/connector.c:28:6:CONN_SetState 16 diff --git a/Debug/Core/Src/cp.cyclo b/Debug/Core/Src/cp.cyclo new file mode 100644 index 0000000..196baae --- /dev/null +++ b/Debug/Core/Src/cp.cyclo @@ -0,0 +1,9 @@ +../Core/Src/cp.c:13:17:CP_ReadAdcChannel 1 +../Core/Src/cp.c:26:16:CP_ReadVoltageMv 1 +../Core/Src/cp.c:39:6:CP_Init 1 +../Core/Src/cp.c:56:6:CP_SetDuty 1 +../Core/Src/cp.c:69:9:CP_GetDuty 1 +../Core/Src/cp.c:73:9:CP_GetVoltage 1 +../Core/Src/cp.c:77:12:CP_GetState 12 +../Core/Src/cp.c:101:6:CP_Loop 1 +../Core/Src/cp.c:105:6:HAL_TIM_OC_DelayElapsedCallback 4 diff --git a/Debug/Core/Src/debug.cyclo b/Debug/Core/Src/debug.cyclo index 8eb6a57..334dc9c 100644 --- a/Debug/Core/Src/debug.cyclo +++ b/Debug/Core/Src/debug.cyclo @@ -1,5 +1,5 @@ -../Core/Src/debug.c:43:5:_write 1 -../Core/Src/debug.c:51:6:debug_buffer_add 3 -../Core/Src/debug.c:71:10:debug_buffer_available 1 -../Core/Src/debug.c:80:6:debug_buffer_send 5 -../Core/Src/debug.c:120:5:log_printf 3 +../Core/Src/debug.c:42:5:_write 1 +../Core/Src/debug.c:50:6:debug_buffer_add 3 +../Core/Src/debug.c:70:10:debug_buffer_available 1 +../Core/Src/debug.c:79:6:debug_buffer_send 5 +../Core/Src/debug.c:119:5:log_printf 3 diff --git a/Debug/Core/Src/gbt_packet.cyclo b/Debug/Core/Src/gbt_packet.cyclo deleted file mode 100644 index 4e20129..0000000 --- a/Debug/Core/Src/gbt_packet.cyclo +++ /dev/null @@ -1,9 +0,0 @@ -../Core/Src/gbt_packet.c:14:6:GBT_SendCTS 1 -../Core/Src/gbt_packet.c:30:6:GBT_SendCML 1 -../Core/Src/gbt_packet.c:46:6:GBT_SendCHM 1 -../Core/Src/gbt_packet.c:55:6:GBT_SendCRM 1 -../Core/Src/gbt_packet.c:70:6:GBT_SendCRO 1 -../Core/Src/gbt_packet.c:77:6:GBT_SendCCS 1 -../Core/Src/gbt_packet.c:94:6:GBT_SendCST 1 -../Core/Src/gbt_packet.c:104:6:GBT_SendCSD 1 -../Core/Src/gbt_packet.c:112:6:GBT_SendCEM 1 diff --git a/Debug/Core/Src/j1939.cyclo b/Debug/Core/Src/j1939.cyclo deleted file mode 100644 index 65cbe3a..0000000 --- a/Debug/Core/Src/j1939.cyclo +++ /dev/null @@ -1,6 +0,0 @@ -../Core/Src/j1939.c:20:6:HAL_CAN_RxFifo0MsgPendingCallback 20 -../Core/Src/j1939.c:117:6:GBT_CAN_ReInit 1 -../Core/Src/j1939.c:125:6:J_SendPacket 1 -../Core/Src/j1939.c:146:6:J_SendCTS 2 -../Core/Src/j1939.c:164:6:J_SendACK 1 -../Core/Src/j1939.c:179:6:GBT_CAN_FilterInit 2 diff --git a/Debug/Core/Src/lock.cyclo b/Debug/Core/Src/lock.cyclo deleted file mode 100644 index 23b64a9..0000000 --- a/Debug/Core/Src/lock.cyclo +++ /dev/null @@ -1,7 +0,0 @@ -../Core/Src/lock.c:26:6:GBT_ForceLock 1 -../Core/Src/lock.c:32:9:GBT_LockGetState 2 -../Core/Src/lock.c:43:6:GBT_Lock 1 -../Core/Src/lock.c:47:6:GBT_ManageLockSolenoid 2 -../Core/Src/lock.c:56:6:GBT_ManageLockMotor 17 -../Core/Src/lock.c:153:6:GBT_LockResetError 1 -../Core/Src/lock.c:159:6:GBT_ResetErrorTimeout 4 diff --git a/Debug/Core/Src/main.cyclo b/Debug/Core/Src/main.cyclo index 29bffda..6d85238 100644 --- a/Debug/Core/Src/main.cyclo +++ b/Debug/Core/Src/main.cyclo @@ -1,7 +1,8 @@ -../Core/Src/main.c:67:13:VectorBase_Config 1 -../Core/Src/main.c:78:9:ED_TraceWarning 3 -../Core/Src/main.c:90:6:ED_Delay 3 -../Core/Src/main.c:112:6:StopButtonControl 2 -../Core/Src/main.c:129:5:main 1 -../Core/Src/main.c:210:6:SystemClock_Config 4 -../Core/Src/main.c:270:6:Error_Handler 1 +../Core/Src/main.c:64:13:VectorBase_Config 1 +../Core/Src/main.c:75:9:ED_TraceWarning 3 +../Core/Src/main.c:87:6:ED_Delay 3 +../Core/Src/main.c:106:6:StopButtonControl 2 +../Core/Src/main.c:117:13:CAN1_MinimalReInit 3 +../Core/Src/main.c:135:5:main 1 +../Core/Src/main.c:216:6:SystemClock_Config 4 +../Core/Src/main.c:276:6:Error_Handler 1 diff --git a/Debug/Core/Src/psu_control.cyclo b/Debug/Core/Src/psu_control.cyclo index 703fe8c..7c72b45 100644 --- a/Debug/Core/Src/psu_control.cyclo +++ b/Debug/Core/Src/psu_control.cyclo @@ -1,12 +1,12 @@ -../Core/Src/psu_control.c:34:13:PSU_SwitchState 1 -../Core/Src/psu_control.c:39:17:PSU_StateTime 1 -../Core/Src/psu_control.c:43:6:HAL_CAN_RxFifo1MsgPendingCallback 9 -../Core/Src/psu_control.c:117:6:PSU_CAN_FilterInit 2 -../Core/Src/psu_control.c:140:6:PSU_Init 1 -../Core/Src/psu_control.c:157:6:PSU_Enable 3 -../Core/Src/psu_control.c:169:6:PSU_SetHVMode 2 -../Core/Src/psu_control.c:176:6:PSU_SetVoltageCurrent 5 -../Core/Src/psu_control.c:203:6:PSU_SendCmd 4 -../Core/Src/psu_control.c:239:10:max 2 -../Core/Src/psu_control.c:244:6:PSU_ReadWrite 5 -../Core/Src/psu_control.c:277:6:PSU_Task 41 +../Core/Src/psu_control.c:33:13:PSU_SwitchState 1 +../Core/Src/psu_control.c:38:17:PSU_StateTime 1 +../Core/Src/psu_control.c:42:6:HAL_CAN_RxFifo1MsgPendingCallback 9 +../Core/Src/psu_control.c:116:6:PSU_CAN_FilterInit 2 +../Core/Src/psu_control.c:139:6:PSU_Init 1 +../Core/Src/psu_control.c:156:6:PSU_Enable 3 +../Core/Src/psu_control.c:168:6:PSU_SetHVMode 2 +../Core/Src/psu_control.c:175:6:PSU_SetVoltageCurrent 5 +../Core/Src/psu_control.c:202:6:PSU_SendCmd 4 +../Core/Src/psu_control.c:238:10:max 2 +../Core/Src/psu_control.c:243:6:PSU_ReadWrite 5 +../Core/Src/psu_control.c:276:6:PSU_Task 41 diff --git a/Debug/Core/Src/serial.cyclo b/Debug/Core/Src/serial.cyclo new file mode 100644 index 0000000..f6c2eeb --- /dev/null +++ b/Debug/Core/Src/serial.cyclo @@ -0,0 +1,15 @@ +../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1 +../Core/Src/serial.c:51:6:CCS_RxEventCallback 4 +../Core/Src/serial.c:61:6:CCS_SerialLoop 41 +../Core/Src/serial.c:206:6:CCS_Init 1 +../Core/Src/serial.c:218:17:crc16_ibm 4 +../Core/Src/serial.c:233:17:CCS_BuildPacket 4 +../Core/Src/serial.c:249:13:CCS_SendPacket 2 +../Core/Src/serial.c:257:13:CCS_SendResetReason 1 +../Core/Src/serial.c:261:6:CCS_SendEmergencyStop 1 +../Core/Src/serial.c:265:6:CCS_SendStart 1 +../Core/Src/serial.c:269:13:CCS_CalculateEnergy 2 +../Core/Src/serial.c:284:13:send_state 2 +../Core/Src/serial.c:311:17:expected_payload_len 11 +../Core/Src/serial.c:327:13:apply_command 13 +../Core/Src/serial.c:394:16:process_received_packet 6 diff --git a/Debug/Core/Src/serial_control.cyclo b/Debug/Core/Src/serial_control.cyclo index c31c473..4e645a9 100644 --- a/Debug/Core/Src/serial_control.cyclo +++ b/Debug/Core/Src/serial_control.cyclo @@ -1,10 +1,10 @@ -../Core/Src/serial_control.c:58:6:ReadVersion 1 -../Core/Src/serial_control.c:70:6:SC_Init 1 -../Core/Src/serial_control.c:76:6:SC_Task 9 -../Core/Src/serial_control.c:101:6:HAL_UARTEx_RxEventCallback 5 -../Core/Src/serial_control.c:117:6:HAL_UART_TxCpltCallback 2 -../Core/Src/serial_control.c:127:17:calculate_crc32 4 -../Core/Src/serial_control.c:144:17:encode_packet 6 -../Core/Src/serial_control.c:177:6:SC_SendPacket 3 -../Core/Src/serial_control.c:194:16:parse_packet 4 -../Core/Src/serial_control.c:227:16:process_received_packet 2 +../Core/Src/serial_control.c:59:6:ReadVersion 1 +../Core/Src/serial_control.c:71:6:SC_Init 1 +../Core/Src/serial_control.c:77:6:SC_Task 9 +../Core/Src/serial_control.c:102:6:HAL_UARTEx_RxEventCallback 6 +../Core/Src/serial_control.c:120:6:HAL_UART_TxCpltCallback 2 +../Core/Src/serial_control.c:130:17:calculate_crc32 4 +../Core/Src/serial_control.c:147:17:encode_packet 6 +../Core/Src/serial_control.c:180:6:SC_SendPacket 3 +../Core/Src/serial_control.c:197:16:parse_packet 4 +../Core/Src/serial_control.c:230:16:process_received_packet 2 diff --git a/Debug/Core/Src/serial_handler.cyclo b/Debug/Core/Src/serial_handler.cyclo index 3ce6d76..300c0f8 100644 --- a/Debug/Core/Src/serial_handler.cyclo +++ b/Debug/Core/Src/serial_handler.cyclo @@ -1,3 +1,3 @@ ../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1 -../Core/Src/serial_handler.c:28:6:SC_CommandHandler 19 -../Core/Src/serial_handler.c:130:6:monitoring_data_callback 1 +../Core/Src/serial_handler.c:26:6:SC_CommandHandler 19 +../Core/Src/serial_handler.c:125:6:monitoring_data_callback 1 diff --git a/Debug/Core/Src/sma_filter.cyclo b/Debug/Core/Src/sma_filter.cyclo new file mode 100644 index 0000000..6481a5e --- /dev/null +++ b/Debug/Core/Src/sma_filter.cyclo @@ -0,0 +1,2 @@ +../Core/Src/sma_filter.c:3:6:SMAFilter_Init 3 +../Core/Src/sma_filter.c:16:9:SMAFilter_Update 6 diff --git a/Debug/Core/Src/stm32f1xx_it.cyclo b/Debug/Core/Src/stm32f1xx_it.cyclo index b508729..4cd56a1 100644 --- a/Debug/Core/Src/stm32f1xx_it.cyclo +++ b/Debug/Core/Src/stm32f1xx_it.cyclo @@ -1,16 +1,17 @@ -../Core/Src/stm32f1xx_it.c:74:6:NMI_Handler 1 -../Core/Src/stm32f1xx_it.c:89:6:HardFault_Handler 1 -../Core/Src/stm32f1xx_it.c:104:6:MemManage_Handler 1 -../Core/Src/stm32f1xx_it.c:119:6:BusFault_Handler 1 -../Core/Src/stm32f1xx_it.c:134:6:UsageFault_Handler 1 -../Core/Src/stm32f1xx_it.c:149:6:SVC_Handler 1 -../Core/Src/stm32f1xx_it.c:162:6:DebugMon_Handler 1 -../Core/Src/stm32f1xx_it.c:175:6:PendSV_Handler 1 -../Core/Src/stm32f1xx_it.c:188:6:SysTick_Handler 1 -../Core/Src/stm32f1xx_it.c:209:6:CAN1_RX0_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:223:6:USART1_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:237:6:USART2_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:251:6:USART3_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:265:6:UART5_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:279:6:CAN2_TX_IRQHandler 1 -../Core/Src/stm32f1xx_it.c:293:6:CAN2_RX1_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:75:6:NMI_Handler 1 +../Core/Src/stm32f1xx_it.c:90:6:HardFault_Handler 1 +../Core/Src/stm32f1xx_it.c:105:6:MemManage_Handler 1 +../Core/Src/stm32f1xx_it.c:120:6:BusFault_Handler 1 +../Core/Src/stm32f1xx_it.c:135:6:UsageFault_Handler 1 +../Core/Src/stm32f1xx_it.c:150:6:SVC_Handler 1 +../Core/Src/stm32f1xx_it.c:163:6:DebugMon_Handler 1 +../Core/Src/stm32f1xx_it.c:176:6:PendSV_Handler 1 +../Core/Src/stm32f1xx_it.c:189:6:SysTick_Handler 1 +../Core/Src/stm32f1xx_it.c:210:6:CAN1_RX0_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:224:6:TIM3_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:238:6:USART1_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:252:6:USART2_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:266:6:USART3_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:280:6:UART5_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:294:6:CAN2_TX_IRQHandler 1 +../Core/Src/stm32f1xx_it.c:308:6:CAN2_RX1_IRQHandler 1 diff --git a/Debug/Core/Src/subdir.mk b/Debug/Core/Src/subdir.mk index dcb5c58..19760d7 100755 --- a/Debug/Core/Src/subdir.mk +++ b/Debug/Core/Src/subdir.mk @@ -9,21 +9,19 @@ C_SRCS += \ ../Core/Src/board.c \ ../Core/Src/can.c \ ../Core/Src/charger_control.c \ -../Core/Src/charger_gbt.c \ -../Core/Src/connector.c \ +../Core/Src/cp.c \ ../Core/Src/crc.c \ ../Core/Src/debug.c \ -../Core/Src/gbt_packet.c \ ../Core/Src/gpio.c \ -../Core/Src/j1939.c \ -../Core/Src/lock.c \ ../Core/Src/main.c \ ../Core/Src/meter.c \ ../Core/Src/psu_control.c \ ../Core/Src/rgb_controller.c \ ../Core/Src/rtc.c \ +../Core/Src/serial.c \ ../Core/Src/serial_control.c \ ../Core/Src/serial_handler.c \ +../Core/Src/sma_filter.c \ ../Core/Src/soft_rtc.c \ ../Core/Src/stm32f1xx_hal_msp.c \ ../Core/Src/stm32f1xx_it.c \ @@ -38,21 +36,19 @@ C_DEPS += \ ./Core/Src/board.d \ ./Core/Src/can.d \ ./Core/Src/charger_control.d \ -./Core/Src/charger_gbt.d \ -./Core/Src/connector.d \ +./Core/Src/cp.d \ ./Core/Src/crc.d \ ./Core/Src/debug.d \ -./Core/Src/gbt_packet.d \ ./Core/Src/gpio.d \ -./Core/Src/j1939.d \ -./Core/Src/lock.d \ ./Core/Src/main.d \ ./Core/Src/meter.d \ ./Core/Src/psu_control.d \ ./Core/Src/rgb_controller.d \ ./Core/Src/rtc.d \ +./Core/Src/serial.d \ ./Core/Src/serial_control.d \ ./Core/Src/serial_handler.d \ +./Core/Src/sma_filter.d \ ./Core/Src/soft_rtc.d \ ./Core/Src/stm32f1xx_hal_msp.d \ ./Core/Src/stm32f1xx_it.d \ @@ -67,21 +63,19 @@ OBJS += \ ./Core/Src/board.o \ ./Core/Src/can.o \ ./Core/Src/charger_control.o \ -./Core/Src/charger_gbt.o \ -./Core/Src/connector.o \ +./Core/Src/cp.o \ ./Core/Src/crc.o \ ./Core/Src/debug.o \ -./Core/Src/gbt_packet.o \ ./Core/Src/gpio.o \ -./Core/Src/j1939.o \ -./Core/Src/lock.o \ ./Core/Src/main.o \ ./Core/Src/meter.o \ ./Core/Src/psu_control.o \ ./Core/Src/rgb_controller.o \ ./Core/Src/rtc.o \ +./Core/Src/serial.o \ ./Core/Src/serial_control.o \ ./Core/Src/serial_handler.o \ +./Core/Src/sma_filter.o \ ./Core/Src/soft_rtc.o \ ./Core/Src/stm32f1xx_hal_msp.o \ ./Core/Src/stm32f1xx_it.o \ @@ -99,7 +93,7 @@ Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk clean: clean-Core-2f-Src clean-Core-2f-Src: - -$(RM) ./Core/Src/adc.cyclo ./Core/Src/adc.d ./Core/Src/adc.o ./Core/Src/adc.su ./Core/Src/board.cyclo ./Core/Src/board.d ./Core/Src/board.o ./Core/Src/board.su ./Core/Src/can.cyclo ./Core/Src/can.d ./Core/Src/can.o ./Core/Src/can.su ./Core/Src/charger_control.cyclo ./Core/Src/charger_control.d ./Core/Src/charger_control.o ./Core/Src/charger_control.su ./Core/Src/charger_gbt.cyclo ./Core/Src/charger_gbt.d ./Core/Src/charger_gbt.o ./Core/Src/charger_gbt.su ./Core/Src/connector.cyclo ./Core/Src/connector.d ./Core/Src/connector.o ./Core/Src/connector.su ./Core/Src/crc.cyclo ./Core/Src/crc.d ./Core/Src/crc.o ./Core/Src/crc.su ./Core/Src/debug.cyclo ./Core/Src/debug.d ./Core/Src/debug.o ./Core/Src/debug.su ./Core/Src/gbt_packet.cyclo ./Core/Src/gbt_packet.d ./Core/Src/gbt_packet.o ./Core/Src/gbt_packet.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/j1939.cyclo ./Core/Src/j1939.d ./Core/Src/j1939.o ./Core/Src/j1939.su ./Core/Src/lock.cyclo ./Core/Src/lock.d ./Core/Src/lock.o ./Core/Src/lock.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/meter.cyclo ./Core/Src/meter.d ./Core/Src/meter.o ./Core/Src/meter.su ./Core/Src/psu_control.cyclo ./Core/Src/psu_control.d ./Core/Src/psu_control.o ./Core/Src/psu_control.su ./Core/Src/rgb_controller.cyclo ./Core/Src/rgb_controller.d ./Core/Src/rgb_controller.o ./Core/Src/rgb_controller.su ./Core/Src/rtc.cyclo ./Core/Src/rtc.d ./Core/Src/rtc.o ./Core/Src/rtc.su ./Core/Src/serial_control.cyclo ./Core/Src/serial_control.d ./Core/Src/serial_control.o ./Core/Src/serial_control.su ./Core/Src/serial_handler.cyclo ./Core/Src/serial_handler.d ./Core/Src/serial_handler.o ./Core/Src/serial_handler.su ./Core/Src/soft_rtc.cyclo ./Core/Src/soft_rtc.d ./Core/Src/soft_rtc.o ./Core/Src/soft_rtc.su ./Core/Src/stm32f1xx_hal_msp.cyclo ./Core/Src/stm32f1xx_hal_msp.d ./Core/Src/stm32f1xx_hal_msp.o ./Core/Src/stm32f1xx_hal_msp.su ./Core/Src/stm32f1xx_it.cyclo ./Core/Src/stm32f1xx_it.d ./Core/Src/stm32f1xx_it.o ./Core/Src/stm32f1xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f1xx.cyclo ./Core/Src/system_stm32f1xx.d ./Core/Src/system_stm32f1xx.o ./Core/Src/system_stm32f1xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su + -$(RM) ./Core/Src/adc.cyclo ./Core/Src/adc.d ./Core/Src/adc.o ./Core/Src/adc.su ./Core/Src/board.cyclo ./Core/Src/board.d ./Core/Src/board.o ./Core/Src/board.su ./Core/Src/can.cyclo ./Core/Src/can.d ./Core/Src/can.o ./Core/Src/can.su ./Core/Src/charger_control.cyclo ./Core/Src/charger_control.d ./Core/Src/charger_control.o ./Core/Src/charger_control.su ./Core/Src/cp.cyclo ./Core/Src/cp.d ./Core/Src/cp.o ./Core/Src/cp.su ./Core/Src/crc.cyclo ./Core/Src/crc.d ./Core/Src/crc.o ./Core/Src/crc.su ./Core/Src/debug.cyclo ./Core/Src/debug.d ./Core/Src/debug.o ./Core/Src/debug.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/meter.cyclo ./Core/Src/meter.d ./Core/Src/meter.o ./Core/Src/meter.su ./Core/Src/psu_control.cyclo ./Core/Src/psu_control.d ./Core/Src/psu_control.o ./Core/Src/psu_control.su ./Core/Src/rgb_controller.cyclo ./Core/Src/rgb_controller.d ./Core/Src/rgb_controller.o ./Core/Src/rgb_controller.su ./Core/Src/rtc.cyclo ./Core/Src/rtc.d ./Core/Src/rtc.o ./Core/Src/rtc.su ./Core/Src/serial.cyclo ./Core/Src/serial.d ./Core/Src/serial.o ./Core/Src/serial.su ./Core/Src/serial_control.cyclo ./Core/Src/serial_control.d ./Core/Src/serial_control.o ./Core/Src/serial_control.su ./Core/Src/serial_handler.cyclo ./Core/Src/serial_handler.d ./Core/Src/serial_handler.o ./Core/Src/serial_handler.su ./Core/Src/sma_filter.cyclo ./Core/Src/sma_filter.d ./Core/Src/sma_filter.o ./Core/Src/sma_filter.su ./Core/Src/soft_rtc.cyclo ./Core/Src/soft_rtc.d ./Core/Src/soft_rtc.o ./Core/Src/soft_rtc.su ./Core/Src/stm32f1xx_hal_msp.cyclo ./Core/Src/stm32f1xx_hal_msp.d ./Core/Src/stm32f1xx_hal_msp.o ./Core/Src/stm32f1xx_hal_msp.su ./Core/Src/stm32f1xx_it.cyclo ./Core/Src/stm32f1xx_it.d ./Core/Src/stm32f1xx_it.o ./Core/Src/stm32f1xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f1xx.cyclo ./Core/Src/system_stm32f1xx.d ./Core/Src/system_stm32f1xx.o ./Core/Src/system_stm32f1xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su .PHONY: clean-Core-2f-Src diff --git a/Debug/Core/Src/tim.cyclo b/Debug/Core/Src/tim.cyclo index ccc1d1c..053e4cd 100644 --- a/Debug/Core/Src/tim.cyclo +++ b/Debug/Core/Src/tim.cyclo @@ -1,4 +1,5 @@ -../Core/Src/tim.c:30:6:MX_TIM4_Init 8 -../Core/Src/tim.c:92:6:HAL_TIM_Base_MspInit 2 -../Core/Src/tim.c:107:6:HAL_TIM_MspPostInit 2 -../Core/Src/tim.c:137:6:HAL_TIM_Base_MspDeInit 2 +../Core/Src/tim.c:31:6:MX_TIM3_Init 8 +../Core/Src/tim.c:95:6:MX_TIM4_Init 8 +../Core/Src/tim.c:157:6:HAL_TIM_Base_MspInit 3 +../Core/Src/tim.c:187:6:HAL_TIM_MspPostInit 3 +../Core/Src/tim.c:235:6:HAL_TIM_Base_MspDeInit 3 diff --git a/Debug/GbTModuleSW30Web.bin b/Debug/GbTModuleSW30Web.bin deleted file mode 100755 index db4fa4487a1eb5d78607a09ba3091707905004c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62360 zcmdSCdwi2swm1G<(ll*DZz<5G1=0i&h+<1ok)Wnc3A8~96i00tNegOJEzX4T%%JI+nWv@LG*8>S-?g8lEtffG z&ikG}e!qS`JI}tZz4qQ~uf6tK>v_s?yrJtHr}^}coaWC6e?_=}FoM8c@|P6iG+79g zJq^z}6h8mo4cGrKz^nj_uOe)@1lA?PxhOet9FJVmZerQQ_&4MAemtT6ML_>QkXRQ9 z_1%lV%r}#kn;J{rQ8{$4tCk%-&v|*1$(?y}rN9{oP3JwlM)RiV$bVg|5LvnAB;~I` zIhBcaU4%DtbLC*Jo?qx*+9GkKLWuM4lQ>(^n^oabRaMxQ^lUgOL*qXf7BXh|*MvFk z?O{RN9Nw_DIegDrPWqF#D!gXR?|N^){cZmPW!g`#Dffm2p(QMed&3;JFU<3a^bOax z`io9xNnBM`m@lpx@D?l&XB7(pYgt`yDX(MsV#)Hbu0#l|E?eJg6RBrTdd2&4AFuki zK12GX9wC}OY>X!Ldvi;U+~Vz?|l6NH$&T5p;;F$;;O=nwJP*i6)s<$ zeZiaIm3-b4eO#5szb?E|yRwhtN_$nSO2bKf(aCk;_D)i-O-|y23d{iqHMuk3Y2sy%O|NDIgEswMz zsvSP#FAZz?gVz7hzv$=D+ZeT+00dE$+fWLXgIa<$LKdtDT!1#J6 z1!%oh{ycjo+C3c>Gp75wLe4-VU$ZtTXyqzOXZuS*HAN?LE_hXo{rm-QR?$hC>m|}? zY3YEQ$Bc7DCkeiu!J$41{AqTS()bdvKQWb?-rx|f0i2fQ0p zee+d-k%YjnJa^^tO!T+RZ!M!bx1dfLR`E}KRk#>IaL@2(OU<@JQgc;{DM#g}ewDtQ+X?SNjHUoEfSo|KfCYL_4UMNk!ApdHQ>eBoj^VoS(`#=XIQ?3c zBns=oXSBI~aem?{^qvv0x*``9hYe9$6LHiUPREL2<;ze0h4Z`7M@+kXAhf93lmz7cJ!|HOsR=IN(@nxOym1pT{Dq8GazyW1KTIAF)W(Ysdl zzW;Z<+N9F3YL)vW;RX!S`NiD%A9{28Zpiq9pEF>FOWmMQPGwkpJ!m;ULCZ-TcB(?p zN&N&9HOmT7JF~ab4a)tptXIw79k!)oM}<4x1cOmI+Nsbki6}kMj0l?bm00e?49Sz%KJuCDo~Md zs#a4Ko-e$mzo%DBQsPwu-pr~2?wYrHh4dZ0V!F})mVSrb8rE|0x|igy{RjC+{z3j3 z?)I=cJvUGlP6B3Ac2tGcQ>wxrh_>+RZB^m-vHuDR-V4$?r3FjF9OFQk;pK0gqdf3t z8)q1&?pwb+`r4blBDfsz)lTH`?vohriWNAca{eK0AN=FzF~LA*p$w z_qFVE;1G+|IGd{^UQ1^*J#UMsevMNar}3t>IH|#PD3%}KkD4Ni&5R;eSApRw1lgWiidj;|C1hXVvL~O)`nSykjoXg**00X)stW(i zWP_w*3$LsOPp>k8H|OFM!937@T#B_TN(!RHs_}2eZz3OaA1)Qz`$D#v{^J+8f-`-i zYbSMKA1|*8zb7mYuXMMAUs`+jao|;~|18N{RT$LuE!=v-k9vSqO58ELdiDE#xpX#Y zGoxB?G1fm?5N1{3PLl{(fc6bAJCC&xKfyU&U!6=;RWcnEFlx09Sb-_Qw6YZ8&H24Z z6OFWBzm{<`Ai0!^&tTP?!^Ta`Vbi9K*gM(vr+Rhkf95}xTWVcqEw#SwuPw_nx8lUZ zX4sCSkHc&V|5j1v z?6q>oE^ryT&SQPvW_70(JffHv&|-A%s#CAC*?E7ZGCL%@xR+LNR!C(0qS=0G_t#U$ zqTb;j^=Y*2y;^~Tr1S$n*Zcm;)n&Q16aIiT*XCaO3^;EKuu}WIz?GlRTi!f}brETd zv=2<13Il|xDnKbF*cik zS3d=<0dYNVFB8->njL7h(6J;S@crx`_-8}koJbxmvi_9 z)d(b)f@=D0y}}r+L4t&Asg$n_FDEG@Q64_yCVXSsf^cBSw@-4k2s~=pncB zTC0#t<13sV0Iut?Gcs-ARaq~{e6beu1UWh57Jmg-8t&Xu%UQ!bSKrqxjLe;O`uIg_ zikZfoqs4NKzk+rIq>5FB=0)%OPxZw_Yxw<@?xjRwG#~t;ub#>7%gZ?92lZIpOW*I~ zgi%zsH6>@iVc)3WYKaGOc6!n)2ek+$b0G_jGC_p>q5c07bkYB-NQNCpe z=d_mp`Z;ZUw7Gs7Z)%_jwQ~K%_&puO$T_8V!h0&opj8_C(}*Kf<$#W~8GNuz$Ouwf zG3dZ7Y3!P@cH?_biP4_C@;o;LUhEYGn&}FmDr_~}hq1o@S}1kvf7@kfnl1o#FC%TEl{ZP;g}K ztzWJ@dZ5gTy_4WYv?{bB&GWCk8aJN%pU&+!#^zRoIcgr*bChPOdBA;CV}Ixz#Z{QG zTL+dS{ouLrdH+=q@v`QDwMVfEw&sDwN7q5_{>SH>6*D$*e`n#GTOF>(sYkoG$va82t2sFI2zb=A`s+W_=GQ-4^*Yq6&Tb zg08slY!6Uq|ps^6&uehOB=s93@3iE*qX z^@LXLrPqETE!BMMDZ9$vYUj+A!N<#{+UvX8qkF$x@%q2A^F|#pM8)$zvD(5K%^TLL z@YEG=%cFfWqK^%y%UP|wtnD{xQD*a%rF6-;d|#}{EA@JPW!C=By~0hFa-Y6k9+lGN zOd}_2hhJ*PZNPS93DxELV)MPy@4ZKsSo?qHwUi4B!RxGC;Y+<*aoX#g@x1k;FSz+9 zKbIamP?pp+>2;)du25sYaPD|?UmrKe9^AG>=-gYz^=n!l)<1|H&l?WfxoiI%K+R=; zI>*iBq^G?!7H*zZ`mXnJJzpqlX$0Q(6YanXBPcKuJ}QjDSC$N%w0*IK!YLnMe&+qq z-ljh;kM^g_*(HLk8o(K9JHl!S7^QIP2x|S>E7vs z>L_}ucvl{Zq(}KtLsWe}Mb7;J&6_Qpj$0}}s*$x)fwnxHTK+aO^F@uZqL^j)xcwfd0?)3_m#pPHD z>&v}b6>h3eY*=EmpS5r3tP6bg^`ByPHuR>bR8jSp#wdS&y6qF1-3?sfigT~a{lmPr zG@M@QZO00fS?sUNgMAC_i|udQe`+_(da+j{fV-F8bB?!9J(p=Wp95v^^P>FlPps)t zHO9vGp*6GsQ&*gjMF>)l+8a4~=C=_NBx zzu221U=@Z^WK|?x&YSyqds#TOtZd1gQ}5=c^u>zbKUKEmy;I-s6Zl2tC(ixrlD1QC z_X^^s-efJm@T~pWbFcKKq*Rs@1k96`p!A#*?R(Az?Dw40*rR^|MJ*~i_al^9%Ja@u z*nQ^`J$`7X+8=@sGCA(ehmUbbEz>xo-dW@HIddI(m3rq?2WRv-C*xPYEr))0WIL(` zoW}0DOr&a@84lj4ubZ?iNqT-r#NOcpf)pOrm^@D2)ZyezvePmx&z^*G$8e&&dlVAP zjVJBilbc9)IFq+}-+UZ>H#(F1a>Ydd-A<1y-!-H1P}z;a>5jIBX_dACZrh={e8fe> zJawLiT*RkV+9Z{DsBSXlBW9_yG-M;5g?tV2Gg!Vxl%29mW9q0AO>!OelV?v|rk0vw z;zfCCTI9aN{xsE2qIzOL*=Do}xX~E^pDEA`Jj;FnKlac-;G9yu5mxc6) zk*SIDRg;iD5y?oDm!=~9MkJY~HH8|aejK4Y67Z^cch|4haDI(4j$GhRW60sHM=hz?kJe4JFSHe2E&)ISM!XX7T*NaGFGoB(lv$XL_$`QQLz==g#1|s24he;7#OEW9 zk(hGr@e%kL{xlAZL0Jp#XeQ|D_%LY+V}r#pu8_y`T08|j=in*gc@>^2JPTudVG^Fx zkXGZFhgJ4M2S_w{@Xf~<{b?PZI<3P}x2vJi6&rjG6kTAysiCnUHt36rxPcn%vB3&i zv=c4m+6ype2chF`DxaU_wH$l%QNV~e-*GlMEzXE*bTBkh@KWa&oN07$b4;+O*>mjE z>~ACgFC&yP*yq?s2N#Y~oNnc@!Bq6;soUkE{&M2GCEbx3Qn0B)X`Y?RG{7Lwz7QBz z0V|^STzf8XId+n?@=&>R+~`p&$9etUH(STnnKO$4je(Oa5h0X<=Z%r6n7wBsbUx-F z)-a^Q@1|%3RF@>(FeEn|ztFUq@5(Vv4oz}&)J?+NOv2nm8Y~S>4etPtM`Ku1;O&e> zFy7eUZ-7^Rd#>HUXpZK!q@)^nynxVD?q&1Sh+Qp%H(0O_J=lj@>_avBTa1w?+~eb6 z&QGIBtc~|g?&wrUE_l%thXx#nxRB4O!*91Ui}4~o_BeJ|b`9_Y_jpJPo>cQtDt>(r zrQo;wp=8S6siyp$D)hE=j2AtN-n=JYCO))*!~P!cEAxM;udK1Y?q+>`LVdZYucsKz zB}2ZrnCI1j=T!%tj(itivaV9+yqjX?wBT1AJq>HY)wpe)bv1}X54cUPlN;^;hx-ch z4d8Zb7`HQs9d#WInB{uTIX;rPD4i1@$<^_Z5FO71_9o;L-!7cMw+)w#WI8ZDGHktUB)P~xIGlr# zc-DK^2-tJLD|*&vRC?kgxD~j69;IJirV*7Q7K+mEP?Ym8RHzU1FhFZX{GWIZhk$is zyyp$>sD^0DO_WvRPQq`!)F5yi03=>?mX6B z@2G90ojJv!0&PwSO?BjZD4p#{MmjyDbJVhQx+4{7bx7-IYv#;CFqQh!%i6a~e|bZO#pREwmRrL+@^O z=v%!Gz4xJzS4mfT9K_8tex31QBA8t!_r0MeR=%rp8_F|2PX5s3UK`rU@*c$c|G+E; zx3iQG+RE0y0kgLS)KC#pNxuN6*o5eCyCyIhsc#KWVkxV18z7a9h<2j>L%3-y zd04-UlR8JT94XjaxfLo{kjkQ*bkm9L8qQz_?OG9LBa|b|L1;vni*PN%34{+3S`mKz z$tR!CzB`Qg%LvyXfXf?ZBG5hxA`HJL4ZnxIcyt23_b_}_BR_Q1HW9v4fbWuFPWn66 zErI30zN&u7%1P#tml#iYk>UBbq0!I2H35>9LHgtH5m3*OF?xB9(aSfms%28D(ESjd zice$JyLWuu(X%TFd}S(n)S}0?CiHkR-edppqpZjMtj9NpKKjf%p~qy_Cw7+%!p)#Q>7x2%>yBx>C724YK>^mLDhmwo(+q*M#<+Yjl?cXd@cRv7( zYIbg^NW%Q@9eQxA?xuL%O_h6PQFtb^XKJUOT6p^(+~;I%?qzLULrUMi;kwUiFjj>t z-$5}p;@c^b zTI^_R)!T1oDb3JAM-NgKmg0vNRW4$&;RsGum)^dRr7lFSbF}T&+pl%h?uMPmk-uB) z|JgR`p_rBbIdZk5dw1L8`GU@dS}d<8Vsy0a(c9;;)bAp5DwWu85u3yEeih-Qw;{(V z>t*f#Xs<55Ti)B7%=U!=d!%&Oz-H)praeORFCp#(&(FM<*W3sH zk(qd|L7@G!9Z%XrUOb;gcopG2gyqOPji-d5x{ucsA(SJmMgAH*AHZ`1p4dAhjd&g# zTZxHtDwf;fu=vl|us?ZL(iuLb{-WBI*(*U(+h?5>+ z*ti+zJ>0UIm0G1kEy_+j5naM|;%y9SbL`Qx*N;K{0U$(UwAP!W*kQXkGbin8nU3_) zA(eC$B%xBAadg)?H+)O{-1K-YSbvMx(mE$T=f3u988n( zRZ=V>*hzZr)E~bP-JIYO4@Rf6anA*};iTeN=~+FS5g|AWGvSFshQmoE1Wib7j~bbT zwKCJ@Lv*7K;SOG7PC7%k>TVX#`P7Xu{cUKIBMG&s&To)kV5b_tM9gS!U=Usz z{YmJ)F}{6IoNsTqgm0_6YZ%vF$J#tOddEd4N5@c&qw32M$e*HgV^px;!PempwtBTG zzV_7)pSKcyOvXMU$;j8f!cpV3BS(iEz5N*uCkp3lUk16YGEO^5K~Cx$Eyk*?9=bP_ zisy=0$vWNjY`ZU5gnVT1G7x|NBFW*bcD<41lmBvN%Mv zI0rP{hgNxLW&QHQ>_cVqyNt-cCo(T|T^uSOqnx#o*&*=j##FN@kcspf?D;o_riCcJ zBBF=fm5VS1AqOEFArm1TL5n~(Jq>~yVWO?y?-?xB^!HaH$W=MxLonf5x?U5Uh&Ow^aE>3!WgrvF2NMFy=Umw9PYn+Po ze3pJ}WG>QqNMFa&%_Fmr)+2olOYa;pBAt&kom$`nBXqkeKzbHS-#0=#avIVmmR>h9 z1?lNX8(8{|k!+-AAU%zxt47k1hKLu`v-HxDRHO@$p32gyah zneRrYD7`x>+EtimRi($Jb0&IE$drkC+V~Di!^-R3(DQ&2^zIbaM#Dxd1ZH5b=0o?D z(5ta?8-3B5(^wL)l>4oQwN0MTb_CknMBBg>+X?9N@^)wcVLR?9>1yY&$Zs;}{q zo-2wQI@7}|+ITlFy~^(Q#N$b(qBDff1G=Zso~84E=85DiI#=jCIEX;<*LNJCH}|ckuin!nY7;g>Q~L3RrZ04|sX(mq8l1Mgixzh+6MQ*0Ne;K_i^rjl2+|=Ub5@?0GtNJIak_ zeQ*t)xc>yxQ2I(FJG2sM9%(Jo-;Sh)mLn}7O{dTE(8W@{LlHZ2r<)stB(*#d+0J0T z7PBJPXx<#W70(3BJ(2rDkY&bT?ue`l-H3Do<^z#C7|e!9H5=c781+;isbZ;zS*kX& zjHUL(u0~6eRcI#4VzAe2;iTCZzhKS_n!t-Vb5c;0JUCfqV7Fw4L}>>!0R@apmG(b| zJDsMBN2^@y2E9`VO<_+NGTD>>!CW4rSu(+9L8%#$|MCPI<12L5OwUm0mv|EG-`_F% zRO~PEmYdo6L-RoMLiZ!wyP`A?G}kw>^oD3jd|no?^x7!SVT@J`(hUjcZWQ{+MitWY zSbBMsW+Mq{GfS68F$0Ziq-V4A;^+*dlaaoPr58l=k=7t>Wa(>|b(6s1G5V8@9FxpuvIW|t@(fXthX^@Yp>DNf!( z`jY4_UzsK#N_$W?31w+)#?wIo+tE6OwLX5~x#pzKBTvES`}$@8Y>!IBg~$_nKc0eOMMHH1z7}mQ*o$(MxsIjw#LGofRw$k2e1+wtzzgPUtEj(C@fs@AMV2ORWhuuMmEL>r zU#z}we$&dq-A&;Aa{4k+8j?2@YVrK-a2kG3jWjw_@H{e1P_Kn#t**$mj|?ur z8Dnu;AWtUFOR|al`jbDE5ua5%l3~+GTBee^;&|}zkx+E4|A9HM7kH43sKX|2hEhjyg1_A+~}Vvq8;NZ0bV3-`H*2lyz~ zSMc*V{4~4AyY(&T{7iDolF)3((5eM(?a+^I&h4CulzH3A?c|{wJd;vSAX|YSvcvQXRQ|I6GX?hOfcCs*ye!i4YZ-`EJ>j9g1WcgY{j84JoCPD-5oY zK?6bw(LvI(*q{(23ntOb$YscilKXNdSPl2UR<;{lArp49 zCT2IwWPT7k5q}8zJ5 z^2x$j&+-i-aW>9aRJacI)U6TDSTzt?^;N_-u{c*+i}<~W=N8r=R)?6k@J__mMqqoa z13e&+Cq@qJk}JUl-yBuN^M$eeO5}fkv(<7|}Gk9tvdG4@8}e}%QVIDZ=QD_Q-^v7dsn#lXS} zKbCCffsz3Q&2ZGZJoTQ9WP??ng6OHoO>Sc~Zhy1m_HkyL%;c?HE`kOj2SJO# z@z#TH{`#1e`P69RltTLjb0=_xjV={rY&u`9Qgus5LtFcj{(<^KWmai9Qu(RkK(p=m zg-umD*ugecasAqs;}`C)x&x{EkxD}97qG5<3R{_k=UZMmWbtI0ZwY!l`t}Y_etW)< z->$RexBJ?kC2m&u4DNUPBFTkO&q2q&h`R78hk&%E@CoQ;G=&F{mr^M2)~h;pleW5P zH)*UNaeNTr3LhrkSR6BFo^Dz0va9+sMOgZ`=GisUw}+qoJcENSddS0|rxsc~F^uOg z-ksQ!WVH%~wllpC=_)_N_o!}5KvUq$LbpW|F({=V9u1$Ym<>6e$ zSxS#1fjU((&~1g6P_>sZUL;#XblE6eJty#%w>am*GCtzqL#E&O(9HEO36 zbLQkg6^rqf?)KZ*xJg?|C06N4@3KoET^on=+ejIMlv3Cfvf`c_8~k$E;>ojnJh}D` zPt?Od!yO{8q(!Xk^I;1t0-oI{+a2AVC|khFx`$(f_Q;(f(zC<{JFf_ZbS$yKkFE%X z^eK4%VtD4V(LuZ;5h?)oslfiapl746J(sQa)c9&oW>0mYjy*MnS!`WW3KJAI3ASOb zI4wR$DQu47xbb4pP^Q2!#TkUCiT$d_BBxJ^>yYaeAC-c6lp2xwgtpKDF#3>az`Ox7nnx zh%$D$r(Okq)6qo!6FJyBxqOpL1f+w|L=?sMAi;b1m~z@B_ho9I099t0Ebiwcxy2s# ztG7QNnNpmG->JnP>-iGM)t@4#kkXy{9!OR=e^7I3afdr*k`XLhejmv!MlO4@b4iKe zq>{H->>6V-&X-MA_$9?PIdqDXUoFR7ii-}oOks0Nz2vZ1erj7g&N_D{R!?30KkKpX zk{)S26#qTU7vqe$58`Qo_n!x$gLwfW4IXZ(Cy7Fh8H5FoN%yd~;%rOsGqyGpeA75{ zj-NMirXI*yD%h|^x?OIC9+c)DvM%YfY0XJnhns4^TbKgwnF9$t1-@o##M2Sy%y>75 zK_R`G3T=pAj{Cr=nA|ZA719lZOLB=IjSM$Jx=;;mWqN$#B-k5FVppKb?oF(BCDq}^ zx!D*qtAf$S4)}X;(vQ6xSWZf?qj8_ai!_#X7|Y#kEb!^U&Al=pn7Q+>d&%a@o9708 z7`l_e%n00$wmk0OywOm&2IDz7oD<@WnT4wm|H*KA=(e%)%);f!`|+>}<%Yrv#9tX+ zf}PjxE{8^}+Ie573};Fc?tHe&?AAkNYdbl>xfS&e4RdJ0PR-$)up7JGH?kIv(Dm^a z#pb15vBAoVMlCnat9+)Bn~QN9IpeAJLuJYgc-$VWMM_|nBL>OnDvYw*ZDM1+DpUv? z8S&8>4*k~Y4t*2Sm?K?hKJct@>(Of`{7y-tBEQpaH`8}*&10NvPc$h+9HiULgDWUn z@=2IItZsltqQyw&v5}-AHfLDP>LxKP;&d~1Kc)3eB09j?sm4?H0IxBChY&51FHenI zMXjA8<91di!%>@S;&oCPEo1~Vu*Y(+qQK`B(sB|~r}Qe^jB#h^j18V<{D#`)06yJ; zMTe@=hx0q(AH@9?H%~8zGDW&i_?33-nt}TWXM)b(Bya23rGbwo-N$*{hAFM8h{C&5 z2KOJk_4yx88JBGZ=|%Z%$ZaJ5AMcCZnjN4Uz1}Y4UM4%!LZgGxSZwgA(b2&vqa%Yi zfKv{{cu6xPNRMJ19iWjY#?X73?p$%X*YCwRXnsV)$l%{$yQ5o_fOW&YpUM0Q{eo~b zHn=|~NboI&UV)RgMPh^BjgAcdc4%ZUZ+K+zwqahXjquXnQRlj$*x;^+ApIU8hOi2C zbZGNrtZLvnw*W7*k-_he@X(`iCf-O|7Stc&B~QcvYaZRcNYfG<+&ol(eW16Ko+UQu z8iHRiE1d#cE!}u>9Qpg(+Q~LPnbo)h{j`n52G7AeVGnSd3eS>lvp-E?%eEh?*P|u;_P~ADQ~v^RL0#w~NSne*`4Mw*=3#Ojbtja_1K0g$hSwz~RNe*9w z7CwZXdM)IM9~#ucS|+SgU&62gm>ueVx=bZQ+Ez}l_1?{IY2Z3Fk*2Kmuoa67tpxe+TgJP1#(2N5$G67AJyQ*fhW!&v+Kuu^(E z>ANB6lZnCO(0K1s^6qlz>k=?E!1XJRsxg>}{1iyA zU-zzZEE_9X;phRB<$&jKbh|1YZ3NA>tg_R&6lpv9$XDrX8oDJd^%Mu{aYoPbLd@w&Izjw`bu7BN|d1zNU1C{vpziCV1(cprgeI z3lRdK!!rm(L!aY0jG#iC=#qQ^h(^gytH@aC|AdSMIjau!;sTgI&&J3%UzAFtGr_I2@W$^MCW~S>_QXTr5*qA@WXIC} zqSZBZbXsC;uo;nVkxl}FJH8*r-<2SZ3fZ`bGaer%3&G?dJn^t6bb$_}6zPF9GDEwl zuHGmC=Dm>|aNR@0iCcg&g9?1|w+pJ7HyCNu#_gU-@-@pK_e9Qfb{QEdD(zb$*BK7cuZ{a6Igo;CHADBi8Tu zHexk9P-n*x#PkofF+Xu_fXBNp!-FqDhWaMBz;ifr4ie_>%n&af1b)vj{1o3Vbr-!U zGd%dj$YTV7Acx!}_y#vhgeMt{%Cat*r?AW^6EhxZv#V zj-EXPHKm0I&x#HHXoTJo;)l7jIG@0aw1H);g(iSEyD?)9%oyogB)Km{^%5RI*8Z^f z7V3AKmHDX=tUt)4n;9LPJ=_!G*?7(kQQx^$czf>w{W9CDTo6bnvwNb*%o=XgLL=+aF?Y@_~wc+sQ^jr`j~L8uz`&fvMt$ zxT{Np_7BQCz$56)B08rti_R-LtBC%ccy2&=7P9cmBo`yDtip!jVm1rOK{_X5gZ;xK zr7x9NhGK(v#%H6lYc|7kHp5w|_Xk$5M4rj8-Xkvz&0uRJ22;@fYI#1|FGPFAN6Xxm z%hqG+*m_Knr?8ezc^Yb(l%6){brGd#XamBQzP$o=AR3hv)C{ z?qD{aoe^Cq6VKm9GD7KiehfR67SEqYl0zCiA*X~?c>3e^M;hZA-1l-3W+D_JEJj#{ z;C+MMl_R@i7B~a+XE=K=wv=_W;-(SAjRy8JojqUh={s7V0VkLDLc>P4(8oW(ml;G^ z=pUNW7?(TNWM!j2hk;FQ&1^H4ZTIeooQG*tA6P(zhZ9jd|*9J96m5ic*b(p~~b zfS#xoTFQ1S{3*%vL^R(Qr{<9$r@8JFr>RAF65&Qj$2a2skY|VYByQIWDsF&n@o%HW zfKXg{s_{_SimrLIuie)Ym-j9WnH}azRY|rh%bth#PO|ad$t={JRhhl(P}!m`6SPly zw~^H?2^j$0fLlVI9j7~>&!{K>bpNOxE%cSE(ZbX<)ght<>4|E*1+cy50DAKLtk!25 z^SnMctSGG+mCvANW|x-E1vkmDHQp3>#!*TQel}6ZOqS6YWMojoNiXJl69Ub-8^MF1 z=o-^tw@-24y~+7C&SZM?aI25m@wa3C=#Cv5Y>4lphtYq%q7WDDomZ2|4c&a+sh+`-|g2q?bxNw74+f5cU@D-GI2 z^2gBc(m1;DMjE_7@eUUx1H8e7xo?@EZ^Hg1y#1Er|p>#D>>#Q(xPy$%EK zSG7vLxwvVUL0&YNQ-iY+*Uax}=WyGP8D~|PV9(ndy=trm?CPR+B4L&lQ@q>ugIBBe}tU$^bth4~} ztv?RMjOq${lhYO@-5zX7M!I_pV{C-`;WVrr;;&A^{KF=8n2m+x*+yvmJzkGX?;;;2 zU)hwP2X9*FD~P*#aVw{hJLx|o%$vy_GiF!NJF%0Zc_C^E-%+&Gv6h(?#8=m| zmPrA{k8u)mo&ts`70GDT4==rh{(#{J+z7|F)5me7xqcOCWp5Mj(YxTUiC#28niK z7v+3O$G&$Dc=r3sKJSzd;Js%TDSL@_T>fk1+8s%O|FbQTH1N4G84RX*J$ic-ykr;NM3Ng`CFJLI>hsj6N9} z89X!cIQD)my!Y~hm@{avl=C@j|1(W=(hLu7iEXnC=Pxi6_aE9Bd%8 z51c3`-ggXV(6{ieFoL@c^OaoGhJ7Oz9cH(1U;Fd8#cnIU_9u~=WO&@6|Jvh@?rp7(nq~y|qj(?rQOwdK;F@?R+gP)GA7Z}kE%;UL z%qoLC*n~SCal)>4Pi6Ie_HO<5`HpT-MF!7hPmiLkNfEdk(&)y zqXz@ly0mDf!?$}H+ATF09W}f25wja$8{D0X*b>7uyuX;YCq+oL)$YlMzSq~D4Oq*d ziS_NtM2$*AI^;b^$(;FFuGOwQXsJl^zb{g4pm!JcMb;ST_jUv6DECFa!cun_IKT2P z4ACq3%oB~0FZ^Kyy3dy5$#ncU#lH(~PWpY4;}U1{E_eWN;Pr`9n3av)8I+rVq5-aL z&*$%KZ*rwN_Q`_oo0*+cf2mJ{jw=oCB|#)=7j3oeJ@{Tm!kW$bNq3a^7RgOcvW2AD zMf=b3%`DPw=GxWL^k^e#C*ivngZ~BTW-Q?5o`xEi#kIB|6S?mo*MuA&a*nW^WAU7B zl#v}JG8 zc`GC-F4TY&nganWy?lqu8zlPkd+uVqwfNgv1I|NIj8$(O(%hX)yk*^KF{ zM>&-?aEwEB^wlHc6XX|~0UnT!d~bCpzG%~fd~dbK=>aX)GOMr&er0smps$I@c&kWu zkzd)EH5vB}@*$%$ozCrl?y20NmAY4mgWuCT*CeMa`-_*ZXSWT`ulVG^u7-Q-$MCJ8 zyXqS_E0lUF>1XjgIzJM5KZ)m+XO8FnIG#tcf1;20yDR>Ly+c^WOGEK`EDvKOIVO%V z^IC0m-sDu{{Ud0|p#3IkI^n~e-~#m39FiB$;dYJrnego&qUqES`#!$C15($!&R@0D z4uu?D*VN#FOfU7254K_zNZk09J`$WDk$aQV;)0EKwL(dkmJ-(EdE`N$czY9-jIAV> z`0h?lvp7xBT4(}yE8W)0Dj%?gzGaY)+tgd_!q{ZY@YN;LjMjIb@N{H?uGVZxb zoh0Z7$a7f19yDU$$e{-F9m>L-GkQtPBz@l|xexCq0Tz8xtQ+6=!aiZC@$ZavJN0!n zb-ubA9SecW4Y*G)*jnRU0G{o0&Ub8p9-O_SRYz}R`Re9D=Kdu+JNdxq;F}TLzN^VQ zYc{+{uSVH#*ojMJuS85p3(#`XoqTlg+wdW* z9@y$t@c+vOj6aRR*b}i#(;%08|9?N0yA`=wzydv#OBp1yUyV z6s;7~FOB*1_b{J+mDmZNe%h;wm+pl9h<1ukKYh=MzLS>l>7-dDelitWg;~KV-~f{= z6+c}a;|2!C4e-S_*!kf*TL&M3_*a*-un)-*yfNsaZwQf}DSKi*!o{GY&lW(?-OI81hjEB}AN(=`V3 zt~gBMUEDH)`AmFW;WN@M5CJI4Ju9r7Hg*AQ>>rH;& z2iSUNiXHVG8(R^7EKUcH#Oc5TZ(`al7I>F<*5lhx@D3@$KKL5=;b07Yj?7~OJ0PCF z3;De<4tI#_4ZO5!lzumko?$1_Hej_VxEYWiB&=+Q>NZg?h*|0_8ygUJp?C5+znAq6 zdIpVwlWn`S_j>g5HoScj9xLPh*P`TytpBUfbJi&R&K*6%`oA6h+k;h@i52u!z>?0o za3fktQK~jrNIPTjPcbnFuXEF zI)jzbUyNBEFt`Tu!mYn_U9wR!BQ^!Nc{X@9nWQ3-p3G02J)s@hkY4GD<9Ic&+crYK zPvFd37Ps%xejD>0hhBpA3iBTaebc#5H2KHK0%$U)jA)lls+d&CnS{{q?)-42s^r7m zC(4F8Q!7)K!zU{Q>)8Ak%jC`^>09u*jSZ6rD$WEP3CnTkTfPPFso{ABXT#_@(!0=i zv+`ZZY!-A*5qRZ|WZ*ukftT2GGM!w+6F7r_J)!99vT^dz+uC{ff@0IQ<8t45vI^(g z@s?R(6P zmu~PhMm6UDLGTmjG9=6$IGO4aXO9ObGg(i5iZQhzj^B;&r^Fo{JhYyE$+N1_6&>6# zO7d$Tw9fJlswILCkRSOsy)rC^R_PmF$~6tNR+}V2v`K;h=>rf*LhWhL+rVEuwVclO zt_zwYjHJy)S||}xY#Y8ehp*bhM+`T7)1n5Q%|cT19v-?}YNg=Q*1%h8L<>r>2iIHb z(g@>?IDO*%^dQb7PFUwd+hH1LD5cnaKEfOm^%{_|a>;1fx~QtV-Iz-=N=7^S8+J5hs5yz4phELshMQH}PisdSoxE53J_ zsCyltso34ajMyaj;U!upU)GwS0dh4wVNizol+>7!?s@@GC(;*Txfv9rcT%hk*f>qc zFF3D*)*ESf-~s=vG5j?w*9W@7&1c{R!ROQhUOv`W$?<0UoFeOiXm|XU#mxq@J6$78}$-J4%?*xIp9Z z;3atDl&kD9-qguP!DbV+irFZ8Fn@0Bv$?^-kcD~IP77GDPm{qd&%p-ofluHfP-FHf z>LK3+85FgNHmL_yoc@#^MAM6`heWM^54b~Bjslke&q*0l?i=#?eu9$M;Bcf_Idd+< zpv$$4rLtHmuffhz${KXJY%IkGb4-TN9Mg0LKd<3tmaC4pU&Kuu8re8l>Wn(r4w3q*IO{=6mtRAC*Rct z4E4YroWFd!C3ynwhc7A_@44Gab}ypB@s|In-FPc_JEIN02?Lq|$1u-lv^Nc$<0=-T zwdSxhX0cR)Q*huNN;`d!ZmBxvIp)(Qe8W0mrRs3;7SeHW=AmGMb1P>K>2M};fw5aK zcns0SzCYyKCh!_|-=mQM7w{3hC&qR}92amEpA%k#_y+Zh_}*fh_R_v#Cy*n~8SpLX zg)N=*LV`J$&2a)=R-CU~e(EH!C(+_G>?;YK5yxoxQk*B^J8#0=85zFtwFgf5 z!09_LEFBR5w zkE@nA>U>Cf^&VFeWJQC4H+{tLs%2Epng7hFT!Cd|XFPnp;;KYhf2JAy z8gEukp9Fqh;HS`aq8G{mZkN@xURINGFmIRDG+b7bav;N8Qj>J57xzxOSgM)dd?}uq zOKKV=$^o92)l^+plX7rwVMTgeOqOO6b!|f#{?8g9xN4@;ia|<+qyg&_R)cnk!7y=8 zC3NC95q2)zQQ4}?+vVN(ib+7;P2b1;srMdyc^gtigqzRKyM_<&F13<24eVa+8BZH6 zSp9qf*swgLpi7#8cjW1O!j1)u0;3EYzTQeT3Q)hNfx|ljRHB_wqNNg7o(d3LZS9L( zs~hqFbJ=`bWPYXv+>%PLE8D4uRNJnGWhFhZYScIh9&a{|!Ba3HXgEFoOK3e;gw_V^ zAnO4;)dcKRM$lF~Pw7ELJ&e`OnNT+;UYGKex;a#LBX3S-aA`i2{DQ=sk~GQYk29%5 z9=4ynM%qtwk4$)q;WoE{^fn2<9%Z-kX5z^7ZnMGQ!I%@&uk6>;5oN#r4qp}gulH*< z`pw7O)2XEFF`}Sxe6ap;d@iju)AHC1 zWnY5P8~dTrQuNUlaB`X-d8dp~wYlJ>fc*vfZYKKvvA2V)6YDwn7g3BuEQ!VFmcro{ z+W~)j5nL4S>tl_4R*OsT>;N2a`d|kj)+BX+T8CUIY$bC`^7*uKy%YZ>0W;XmQBA$= zN;PCxo~y&9hnIxXMpZ&^>6V)nlxgi)zOGzVLif!qmyM**33WZLnXV?qZ_H=;Pt!5h%H^9ST6!90!8P8+C?Rt0%XdMApc zJX)Vi^Jt|Kd1M_($X(;UqD}ap2yrUF-I}fb9$I~|r334jj`_~V8qzA`%TY)X-idJx zVjTI{-%4rnC8eLERF8Gc$GXE~1~Awi3*#aR(Xy2sFRh*Q!TD6d0}4vJq+O53Bst4K z#lZ7oc%(P!z9^R{LXjXyTcUxs`(kKHc?R`UHxU};=ckg_jqmb&tq=J%iF}Mjyl`e) zz6*Y^|y6{KIqM&F*H>a{G7Bu*s{wpeIfsQ#lv zsLgZ`GZ{qa+~7@0c^otj3e0*1<^b)+I83x>FabT0=d~qZ-lM=Q;ml(&=f`0pPk~vQ zfN4s!$M;YYFvs$|B?*}2Lo^380&T#9@sXwx+9ev_Hf26DjooaXXynkRpbph0EmJ;r zNVk(lJC{MB*-BygJ@FkcVD99>?~PC&R+MT3mW%rEVh#xo{$oKM)iJO>sLsSb^vs^m zvpxtvrH_2nBCbMx3=du-qdhDJgrgkqL&1^$-v{9sj!+HnSdEE2C^i1XYH&8_W*H0` z@zwxqwT<3Ll`$%!5%7kMHpD!zi74x-lqu9gW%NxK)^2^G9l=uCsS@o_W@9i(>vT&z z<}{lFPV>CeE6qlD$;~}&g>R+RJnM9kIWtgXHlEJJcn$FGgtidS^xohP6|9zc8U~8TVcP|7T9ZRx3)$u+_km0`Kv@>#F)PChDvmbS4NL(4N~Q|9b3% zk`8!MK;sYXe}d~kPK3`R*%4G|i!bW{PQsdyC`;Iz=PcG>)?_O$YSuz9D3C|6TKP%}i8MJb_o z*Al)1zyt6UJjbOr*~P{TyWIzU$)d_U+fQ#C$_=U#wOQ!G-m#Evz*7f%%lwW8x?yxf z%A%Wv&r04A@OVI87ic5Rsqs9$dH!f_>Zl8Cl5cG)JjTMJ2MK&eiIu!7$dJO zpHqeRf%MSRBrG_vp@cB@I1JJ;Tnk&OV%$En0_maUTo@O~jj|G>_z2b^QdGiWQ1_dJ)=;1Rekw0PXm=yFkmapKtcb;G5u43os}VD>*d2)Fu^8EOvsr8n zVyR>Gm>sG*KZKL9B$s}-O%7$6bg=4Wg{ma)wsgwVrLl4i{Z=QjS^{d3?XRq|+Ia^X z9o`p@W4r({1>+LL6pYDst6*G&n1b;<#1xEYA*NtF7cm9nIfyA3UyYc8G1dEj#ds<( zzH~J~UH7w-0nbL);icm?4lgHIH3$U=MF`~xcOq;;(5R4)P=rv9z)?WH_l*P0-+*-9 z;Pdc{X*i3!)kdZ#sI!3bq7C40@F16=vA0ThwpehN@?mUu2M*(R$7%Y#Gw>XKH=m~8 z)q!X6+i;qGmj|A~@A}j9YY!a6?^jP}_=!r_!Qx@|BLW6+I$yb z7vSpx*MQ6QxGeQ^*i%(vsh`PW8pLL>m=-ZTVr|&5LXf`eq+==ix(>ZZ?ZKGgwGv9i zYwASsH+T%;6zph-!BZb=0yP+ z?SkG(^C!Xwk8ZTDd-2tthUJwc8yu>`d#8{?c;=_G4BvNa(+DN_e}YB0nL*MK#WpS@ zuA`5-ba+d{ zCOfaIP7rYP^B!b9FTI*k)JgtOt}43~;QT3Eyil zvU(q*o&hPUHy!mpPSh(QczKQ*S1zmPK)oqQQN0}0bHwYBoK+aefQ>($)k||0V!kpcTAF zq@vh_bCsiWU!=DJAQ31Y1n{Zi(((OQI#uvZoLHk1Uzv8TW3+((S%EhVKEf&GVYUSF zF#QpI2?~@$GNXjALFKzlQbepqeXpo-rA-1PlWJ3Gup#n z%>1{Y-LVutc1r<;zE8UX=NV2fjCL2=?gylsQL?zw1g@&!(tHsv_u_j{gbUqFq~Ltk z>&V~(Xh;9wU|ywZ0DPH^VST*a2E2zOnkqy1uChyHQnwVGiMR=My{Jn#G&=DuAJ|yX z>w2Yi`9-bGpDx}ei)0F-E3yy$pX%NQzNsqP8{Q`;Urj?>Xu*;eNE5(9`3MBDP?VCihmWWr zMMUb1Nz+2oLR)E3gqfirj-t*Tq~1HwsDpM!9r1%AJVU8W&~XO6b9rtepg=*3U$J&R z(o#&?K=c0BIY~bdpSi#L-uL(X-onY*XMe7}_S$Q&z4qFBvk{w_XdBXhSD`ez%fFz} zn0hJo-^c5A$8ajgOy!p`w>oEp|7mh#oPr(2{6zmwfdhTyvi?uTR85?B6_a^G~Ve*^pS-AWEbC|9MzHky>f@=RZPh3ErSD4dHdMct05u?`NME z4aD=u=LiyoI(>KaQ(K}ByAOafEw9eW1m#JXA?=Qp(u)*L5=b#L#zce5KPTz~b;|&$ zyOqsZoN7(9&jnVBq1n~@W{dp@?H_|`Mhq&MNMq*Dr}pO>^kHYrpqy?Na~g^BBOsT7 z=F(z0qzuVn#OGrMau79O((H0BU?eU1Xdj(xNa?$;N%#w54V>^NLC|$+7-%fsQ#sf) z{d*)+Jd23ZoJX2u;Pm7EG-~vWvzNe;KzoeNSHk{IPk#>WF$icrNcY--7i}afKwca} zhWW_~a2L@t?7ROZ=1*&)WV`Yd)kD-Nr2C(M8jaVfXJMbiWLlkVv8%J)7k!kn_VO-yL45el8dnEALwPDwb2<3e2kloLwaK@eI}^% zFC`h|(_LKxoK&QXK6I)9QBZR%zr#cF`+Xbj2ae_EGl288mTSb`f2xFb!%)iSkdkO` zPk&0Hy#^X*iT0{lz6(57|JrP4s;65E-NbJKdq6}c*PQN9VZ*>f!b+LS{Hrl%jY>BXuT^OwdQTwI>bH$=9AKzU! zlc2_3ozPvv)&~%I@I^d|X1sB`Fv6Xk`fY3th%}VaXyI!^A3!N8p6q~9&Y>588>wVv zi}N6VCEA^XLMhiH1P9{N7%$B+B>kbnhdZ-etI&JfoHQe#IHZkI_=@1a9RBvAB8>jP zn@B?**PSB9q?j~T(afe8wtOl-jrqJd7L7!0x1z*imkj<3L|6zP3GlCJBOWY4LRhIl zTT<>kQMhZinESO*Z6qv88`UujgMnUJ)P~#WkX|ds_b{9x=oiQSI4(XCM}OeL5W@wH z{c%hYE@sAXL3~dQ`H^U%4ZWe&HEK}Z2nz|=pG%?k<)|;lizG3e1#t(OKy8_kK>7~N z;=kNa@?Qe1J86$R$vq$S4qAg1ZB3~y)3HC1WB?lfalYMB+Pwg-i`h{No-Je@O*19D zF(<(JOLw6Rvcaa_A9U13&;45{4#slQ5iS7LlfMQ2 zEhX4#7Yix!<-sjM%we8_GZo57SCq`l%n|5ZAg>7Z0(5SMJjZ57o|}&(c5QKM#8Wfo zx?hXPu(mWBrzY_cu8SF&=zsH)eGyqcy0Bhd7igbZ?Lg4hhUlP9aH~o||0q6O6 zSi)@(@i&X|@?d*gY7ep*#+fmIK|!qwtf+WC)~celF!IVq9#XtdWAR#lI9_c31*~;l z8tH5}&1Uf|!U&}F2-fX;?PPaCbA`ATkKmy5*rfg2;vP1vHIU7&w00m#hClV;`=O@> zjnYrRO?LP+>O2*pdO6gbQZ(4&@WLE zjkiz5N*d_NZ?@exFoyb8O8IRdE>MJimRJ&j)rG>p40T%CKdQz#huXJ9?3wu%k~tR+ z>bFv_wt~8iqK!(cD<7eMLI0+-)T^=IPYk6M_Y8Ng7)rfC;#~^=EYV$Ol;$neH@KWd ze%v00^fV^t!unNoJBdSNQ*4Ph0x!g0ENw>0KjxVQlx!>(khAChq(v%RGkc5%qiQdj59Z zcicbz{_rMF{V1Spv5QoRSrW-dU3D!kk&p2|#rd;1M}g=Sd@RqmNyKY1zX|>k$40UK z6p{(L1m_YtFIjw6(pQX+ZE;jCiMWVsYzF_5bw%88cR_PZoT5b4wr0stAG^p|THGRM zDFcD&e)uoXzxcp z+|N3w_9Pt+&fGVNwYUn>P z1C2n}6W>oP*~}Hkc;VkMp2TfI2V?wd=%+H+7K~(dPU{-;^t1xI6_$)-A$6M`+A_2l-UJH-fJG|4Zm%dc^_FVZ60z z|1U}Agv;B3OPm`LJG0i%mgkbkLgo(%8Ho^eEF^zOh`NpPSun&;8b_T-13LheLv_Dh zPnvOg|Mz@-qL^nqJYP?HIVdKzMFv`J4&-VUtVCbWaAlD;8aaXHu|5T>k8WmJT}rMD zgruT(W}u(eElm<#v~N{frymIy@rDdn8eG!e1`m1yt-D5Gd7mPN5yc=+(E?VY#=$-V z{RPt76w(Vb>}$iLrM~%djH~e-(%9hxT+EB@;dzsI0_rml^`V;$e;qqtX81TxJyJjL z+|m`DF7G|2Du%N&4RFZi!jLXsiv6Qa}<r5vn-a=2H_;e0;?=S2vlZ-PMjJ~s%0^A6*n^e+xh4+w^& z2LuD@2Ov1_pmhiAX@e{+_4~78Z9u#CV8KCnC2kvQjs7z(80K4&eFNz( zGB9RtanX8cGI|>IP}&tmYoWBZM0?C=WTh2RvgtAgtI;p>Fw#nEN?TmxuS+TN0i@8! zQjUwKgsej;TVp9HuR0lWa?{$>7WmR?8DZ~yNuD@DG?Z*{4WnHA_;#bFSSQCgOx9U$ zX)Z&0Hw%Jdscg))j=Wbx&Jy;r<`^u|GzfQO_5 z5k8axs~xP7dR&_UG3Aj7*r2sXh*}J3jfcPoRy>H2iWtNFd2Y-C#2FiAKlDbOrM;EN zE#}&SJyIm`^uj`r=x>W_HEN4f&PoPOsg!uz5Zm$oy3no;-Su_pZUbgfml)&^ zZD?;a)h2_B*N67#V3!D>hdmI&S_i`52WuhJhl@Zd-1{|9r`CVgKEQ3PMzZhKh^+CX8pXq?P2e}AMn$n2(Hk|&;09_GcMsI) zJmOG0o&SD~#4%`So$^o;XinVADbH!hj z*N5MsR4Uc``+27f&AYqWD&`%p74qJPyj%Kd?uT+8;9MS2Z!2-6xvmIcvWilJ*o&ak ziF1R&5appic*xQd*xM>%Pe(n+N;Q(GhU$Y=!v3>i2d8dv4eYC+`s>QKVC7ktFJVnr zE`>khA`2*-(Fa@(&SwDf0SUy`cBAo+<}q7hBTt+se4qLwalt{d6-iW* zY(@M>lC4I-rNu0h`gRNWS~12_Y4^7@s$M@@kVF;7-;HFdp>nkawU8uCto}m=q!A|{ zQhx+@&0vJ+ml)5BW1|5l+eq`Rw-K5l@^;Mmx_4Q0)Jt5e!Ru)bI9Vq0dY6<6k`Pi+ z-XvA(V|mh>W(4qshPGes7sofELFqh02{wIB7BC=MtUn>mU3F~{;DIO}w|nlO-}CsT z5+bfFv4jX9IS<+*Nv;l7%+RvJ!eRh7@f*bkN|Me@U2**z z#x?BX7f<8IiTo^Q3Rz88a5)qFq-CU1GcY#Mo5rX-QJ&L^XI&J1!{!qelVxWM;LmVr z%}2{Om*kbqDc@Ya;2Y8+L4S;WS|pYAmmtC}o%UaM_$5)_#2HV7cbK+_IpnR$tE8MG zWs&v9?qJP{a9u3qlW?8BcTLNh=E~km%6-e4EtM?i3sK%rGe=4z>nL4IX$wxK;P}W| z$}i2_TXnQ-OW7mqkFKXQd1ZO)V>`!CNAW}fK;7bOsSs-et+A16Bc?@dsy3JAmCjkW zd7W4rX9RXoU!gn?-Xy62Cy)Z_Fdrof_f!-uS?#3x3Bo}O;H^XA<;UW+RxF9dL%0}k zAfKsXu4%9z*-}mr<(1@tCt@s&)n;?mTxX=Dr+jV&LDYitR)#|4fu{Rfs8BqmNP>w< zzzr7t7$%4b63NOe%}i}7;@eKWJfF{tl{B}i*U{o=cK5nPT%(<(lBiB(dDbeHlp>Zy zQkqm3sU_p(eS%iyuIu#R9Z7^{W%%=S-jAA=)_+-UIg@6VcC! zuup80H1j86pZ-MnRXo2z=xqs9vPVB(Ysij?TM~f|Dd}?2^tD}CHx1|@9|Jhh1<}-e}ON3gQYHbJHE($ z9(3JW;c@E`;|ZiAUU(w>1nT)j3`0BM-eDps{6zSOh#@U7bOhLW7SAq(?n?OtZV5wA zxZ;DA6|ChSo28Ov1$R{?d=@zt1%(7pgziLaKGB$Ji$IQ5rkq+=$!~H?sDm z#lneGC;24WCAV7ak=uLZz*_uXqHjcADcR&>?WW(h{=eo!65)W90_}z*i99AsBKRe4 z9dQ{%87G37F73U+J1&u6hIAey2T4ryOWLv3qO=f~SZLqXU`ej-(7*Qca;*kh5oIMqD#gUiVJ2q;gFVL7Mj#!W`s4ujLY0}I`*Y%dPlr)$3 zin0f_bu7)Gkv;-gDXpa2q4TPw@;0wK>e%9V#C=p8?Wl#Nw1Zopc~`{jH{-e_aLjVb z5u=-ksq;I+u+_K1g8%xxu~IybINnFlFGymbcQITyLE@tEaUdVUIF-CWFTE{z!=A=T zxsQpGX645DBVW*2M3he`f6sp-|Gy17SvjtwiA&a5bk8#8E~M?EQ>2L+Qs^yWAp;U6 zVe`Gqw9-Jn4LJ8(hqWGZ-u?lrNzXdXg2oIe=BeIgR}aaTD~k`;y*MFu&wsrJEZK;~Wp1eU3MDO@arf z%``Aw0eY*;Bd$LhB-@LG(cBHgyL5EhBVU|QswaDvQ@RXprg>y64c7Ge(FHe7r@cWs zRew6NI0Li=G_#lbFP(iy=M%G>sqMjqV}uqj-^r|F1ZJFSeBwZwaKxJ?jA%%CA+9D||;f3zM0jn=Qj!kT-{FSs$fz{aELoVlLn}C^%nrCK1y4NjFctJ^Kz93!49|#^x4RaM-n5+6*z+^Pdc(nT6YJN;7?gI@j zedd5xxEOZTjS|M;{!SJ=c8$j>h`PQzBm*rb)t?2N3Az#V!OytWne+WhqZ6k;+MqQw+LgPL z(Bkr!hP}q`9@c4=oowf3I$ail)n_9|%`?%^=|0WgI$`0YVSBUvA7si}ovyu>{EM%3 z$}|u3KH0lm;O59Xm$6}pX^bW{Y!gz`xyeR{?1I7dk%~LRnT?L;!)C}`FZiT7HUt(< z^7>iMF<9pv4IJ$(OTKXKXy=;bbU&NqbR}NQa-=pJTt1ZyX%h>K*qz4`UM#y1AYaN+ zX6_Df#;(B9;95NFn|CR{MOJSx^H+t%hv_Uy47@umwi0O#`llIM44zm?F* zC43VY=7E*Z1*x>rvC?!@+MN5o<$0Ok=sKtR_y+RO9&xo=te_@HDQ!7|z{SRQRg52=uX6n0*0xCQkac{So9V zYh16XZ|q3miwkF580KjxoQoQrSKWGgnCG<)K0!mj{9dHpD>QeqWHY5z$I=2O3Z>N6 z!mXjrIE{KRT(7^W?&Q>e4Ggrxd;S-{mg=wBE#b4_O-(~$Czsd~m?03RrPey`|Hapu z2Afz%O993FqkqTOREwjXTrzi|RWnpt6Y7;=)vbL|Ou7rD{Jd1D%ze@&{IZurLg)4b)vCdi;yl^cR ze{@1O@s)+6(3hWdCAw8YJ?J7;Fx#IATX9G5#jt*trin9~?MByLrNwK;sRw5J1lP!* zQla$AJ4b82aLsgibo(ti7oJ5gHn><`I#$njD@~^t2)TgGD*FI9G5U-y1Lm7bSaGI# z*#t9A5M@fW_bV4*maDyg)2#@Pn5Xtm`1Y%f^_KU&9^K#44_kD&QBVzy+H!&NqI`Hi z@e|_P+%4}0O!`ad+rn11I`i3ZVTz$ZX5JpQro4x`8~Rgx?c-*jLmi_FlYjP%uxWao zpcNVf?F$?rQ=KiDj`K{XlfGjWevj12J1xo`VN3PgwpTix{K%Z|&T=o_9X1Bf-3I$E zJnrkB8~JtI&Z%$0^IJUe_`~K)Zt{=&y#cq`r5lssnrV-fYvPR0wV7Rd*XS`b>`Enf zW{it(D^y0#yxoJ-WT*1yryAE=h+Arms}>D!%W|1rYGqMaUMxGkSh>ji#=)xTW_y}f zV^kZLEn-=SnX<;kroC)ev}U=cS+jz2F3WE7jS>z=E_d>g;rE{SkuuEvbh^-D876d} zQ{x0hqw6!3`i#--01y4tYce8yp0YDKdv}JxVFQ297fy!RKK`|6=!-tiv_xzVxj2#< zUDlu;qrj${XD-?iF03}XX1K;F?-rqZK!k3F{hX@6E5#bqlwy1%FmX{kI3PxQr28%~ zN;noUyC%5O$2i<3`!r>Si#szK5{?TP7+uGVqXeVl9mHT+x-m2DV_hXK6UM;#z3QgA z47=UwGQxh3u=84ACPuA%!RYpZX5Ikpc~q&V+gyB%>%9yLkz!Ez^FHpDFI+r&#(qoJ zg^mE50J>IQ32X;Hs>j2ODTn34@pfiD-Yz#kYTvfay5_xYk2*#RYQy~|hC9`V*~XVR zOCS^B`2vs8skJ?4QTq5!m+V=K%;z&dhm$fFzFr2pYjXivEy9el*5U(#5=T0^n%VV&tisX=-H^e)5SPLLKfZm zB=7VwnSoM|!1vF+A0Q2-ZwK9SfamAU%zF}kWPZ@bT_2rBMrejOHWi@YvwI=WcessOo zYXskjnq~EhdYl1J!=8~p^F}zyX1a5uF*Y*h(Q2q=Bx>2~g4n=!&E&Wv}lDIvcJ7z;nTe z&mHbbGI3_!HwnDv_(G-CbxV67`H<=`?m*kGcA=N$Y;$q-TyRW}n0JT#K=ne(pBH2W z^%mx@UI@u9qbHCHT+4+qu8NAH=J7atc??c_b2;_Rw`D19O5l(0(F^X1W8dV05>#ks z%Hubnvlcwy#S55GEBM+OcgK?M&^4S+?QpQk?|5ZbUY#ksa(u%sOowEr=)KGN0oUdMYfk8bYbd(NoLjgEa+lFW@)rqt9& zIy-0E^1BY*4|{gD=)2dQ2Vk#wAab>fFYxG0OY*zc-*f<}J-W9ep{~-2Z%3};Oz7{f zbm;hky?Rw-gqiPnR3*Fh_mSY$r9p+7MYKVg=|ChL1@9O#S!-Y?KtAYtC z+0APUmUe&e6Kw=L>8J1Uax>n(vUlrl)_j3p`(oF+2ixrLx62>Y3&s-g_iZe@ z(eY~QEj@Q#d8uPc=QLjIezfTA5afvo}A*9HH*u?t>$A zs|(;}OTSHB0*ye2!OC}}Sa%=9nR}K?g-gFR+U`PM`1B*@=~$K1%z5N_&s%iD^i%U3 zx!^_*U1ix5S|{OF=T(U153}RrdbjtD>wWriV@DFt7mU!p*I~5CIx;PugVt|l)_0Mk zA%6j&`T8S*m!LN^OL-8{MPk>vh}fi%4sAyq$YkWj|p*7tS<|cHP&s z8hZum^OxA4vM)jnzQ7H16r!`|jC~99GR|PctVvb>s@H747|yJF&UVB*({BD&&5!U~ zx{_-Q4XO4IE~oNFE6!$lY`o{Q@QRm6hiiXK)5-HJxcb<|cBS!TyViKIT`NlS-JyGX zRl=$!$SFuW-jmw2(>5Ni&%)zh!tE``()M%pBlolVMUXSKMlSf1s~=p}tmJpGX`6hM z$1u;!UD4TpM48s$R-9R#pE}}KxJTQt*>*Xk>08%`nV#`-=vXxFlJ&_2lQ2xU4B65h z3w=}EZ$fkA%b~7oa)fq=R^Wz673SpR+Z{^o&2P#@==3Pfv%!mcSTi?&)btf+2?o23 z?>NCzN!_8|9+qwM0aNpn>(e}*jMZZod;i#pwIidvo*5H%ukgz26YAOYyw(Iy(y#Ig z;5KUN^`3;Bva^bu_r3BwJ-$Bhvhj_bGXAWW8_(yIp8f0_K3H^5?v#t|Y0j|)%C4DK zea^ecH=kGc@?mAy2Up;N{QyJQcRYKMzf0mPd(SunvZt5mVU^4Wr z=PeV@EfDFWKD=FE*;cbm<2^pCKs(Jk*`6|M>9;qhjl#T5%l(^;pLhzhn9HG4QS=v19!!=$bLWcYi|r|( zQzdsfbVBscZj(*y3S5Frh!F0KNLjo3kQc|zE=^J2@>PHZ->Rb=e`2Y#As4Yki2|{w zc_IVlE4j^gjvvmZq){oQ1(52_fya2RG85cSGXMd{2KMF%b`Vm%ut3H|8i9!yx6(yAvUF)%0OSU z!*?5YCni!#<7B}MI(`@BTk#g2Zlz+VI-fc#=4#8$UtF@~jl9zU9^I<}6_m zWYxn_HWgZ%y6H`C!P0Mz=(j&QNqoN&J<#^KN^wTQ@u$}~qlDp-fNWw};E14pZb#r| zTjE~6<9)sex0S6ZV3St(m_B>)Rz_Y@2el3L%wJoAbtBP`Cbl<7V#%>%HoK+ z(!0dz!^>i5xMLx%-{!dbVO5{(t})bl7ErF?`6Ta`p)kl4T`<6N~meFHa{T|SA+0Ogf&eGfFR-G+ZK#&g1q57-A6i#b4r&`ukj?lohZWhXOXKMubU(oL`wZb zlyBgme$rh}YL zehpDQ{BZN=JS9K~6jceqthnq&;jA0oHbCcY|nK6psH=&-x=#eBsc4V8; zE$?`gPj|CmRp0SWJxlPU7o-HofdIGH;T!sfnu~JJ@y<-f7f^a-0gv%Vj?{{aIzT}! zg1h^65grs5vmlWXWUoZ!0&ysZFH7L}aKS|MgyQoUwG2{<%hwV;#D_2@qec&JgS;b# zvEbL&h;J!`stbCLENAhBincV*A3JCB^8(Zds86Up_m97K_7HLq6uyro2IxpNth|(D;cz;L0#_m zEfU-==;W^{h3sY;A^(w8XM@buGTE)@)N-Yh8beYuDLG^`kqTEBzj~mnEjy! zw~%Dxq1;clC(fjM1@#_ngZu?LGdjUD+M4JY=AV;uvrmm4!d+B)W|*IX)_mGm*+MgB z5uXRtd)Xv;t9}n>O~9k~v&nzI$Qk&(iv&nB!G=CSwTlI1z?0k~yU^x8uln@NoSgIi zIY!Ed`Y?FS6fSShkyds*Rd>QU0#CWia z=D$mW8X1iXDnAPzzp4UmB+5q{2ajBxB#?YYRES=N(JmOEw)_w8j|FZbyLn~70GvV$ z&Nus5_Mrumg|GUhRtAqTz40Z0>E|fWb z+mWF7t^E%ccJ6l2=K?|R!Yx9$j9qs{ci}$fT=Zfqt9@ z?ZaJ|-~2u-Z#diRQx>|@}=-hHd7v(cKXQXchW@n%?t*RkQz??MCl$VfWJ9nT- zwL7hCUx%7cfLxtweF^mbQGoZ1hK7=VhUK()i!BzMWUoT0N4)ag#!b_(Ugq318MjXG z9@#9?Wb(VM-+ob}sQ)Z{XdiC?PB%qERpH#Ge1qJxuS3JO=cih^S@L>^K|NaFW-03RLJF{Fnwv10 zKgV+Z>{C4RegI>Mku(g!0FT+zWMDGMCjVVusHE4DsT4l;@84OhoPTBNTM2un^v6(& zG5&G&Z-GC7KL3K}Kk+DXIrWFjp#O8F9OCj=PQ6`q{#kdUg=^JJlKE5KfvwITQeCSu zQ|zOw)j|qxMhzcU3dx|1GwHA6d@!b0wavwxi|QE-U5HvUFZ;vCBswDc*&`@HL+MR? zd17;4XmwvjG46G#OxIN92kPjr~zUrom$_py_8KO*y z#`f>rqX>!de;OY}26R7RQ|0cB+E$R!^MTy${{nVEFe}&pUh*4V~*2I5^ z+9rwA))%^&LORCN2{Aok_2J~Zw89LRLKxo6g1h=mc5%fu_*9=YQ(POFr5CD? zy`MQg$jkRx!oDnBHt{%U>bv~^fPC(Q9+vc>Co?Amd4>8G?bKYab^@EK6u8#kS>)%m zMzfviNhkVQ_;ei$4)38AvfZm;$_g*T*Sx$&!xOpyGmNH8eN^-W^gUf(4S76eA79{=tj!~d%E{N z=Tn}K=4 zR@eUu=!9Z~MPR{EWdAgvHJSv}CwM6QY(QcE81+Am`qOw5K0HdLz)H}H(>Ca;Wfu}* zPrB&h*X3+lAx7m9*f}!Yl~tZ&H~C7|H}1R-vofdaBb~D%vB|jZBgkpl!q??lzTeJizH32AxB;aA2WKSeE%A;u0?#lf(H&;e`0e`asZ2EV;dR01f zQc1v*&HY_QGIUmKTE|7RFc-6{tn$<0?Bi_8>Ym!nCS(h_$KqV*rmK{OCAY%oi~Tj#-ua(7(ATHr+P}|uSWUbp!{EEsci`;Kfk~H zc}*Se64+Q5g$*fLc5B#>Uwtf|2kGNg$YU%<%wcZmSG5;F!<=dFL0N=zjMXM;Wf7%$ z=RvN6U+|a(8dKqpusq|h7n0s?bnUl{zTj{{CpseD4R&RsLO<^A$- zU#R11mN@SJHd=sw^cc_G@?*yY2d(D>w~_2b_2GpBIOA!qmzSsLnI3xwx6bos$kZmd z9)OFJlWXZbFV4$ED=J!3gLO+;C&$!Yy&h{5E}4*uUXwwlJq#=`@)L?yBXT?oO5Vt=&mE4gPKU9Ij;cU)g!d?wVH@*gRCPp zroS$O{(8j1#n4}Wd6x48mhm3>jJLzGU1WivhqmE20_oh1u$^WH-U-X}o`VUIM8om| z(tU$g^6te$n)Y{4+A&K)M1yse5mxf~>MYmLxJ*9l*8%SK7eUtpI1F1y3Rn}7se~j! z<(qH^H~)_(uM&1ptGqot(>4Y;d_RKTR3Nv%Z~p|k z?6YBY{v8N?FpH#4U6iy6AB5G6*5+73he~s124qqSGk}6;h_0eOL0F%X=+nD$n+@O$ z6q*{<+mDCYF1he!Kw48{-g(di4eCb=wV1m+gEiU3F218Az0tMw+Y%jSm}u|BR>~uA z4H^Zpz5nsx&9-d7S{dPH6tllWvO&9ZtTRQHE)*4-TlMbA-+sGU-kHXa4vtGeyK{U; zoi@k!Bq-yKg)ZqG$+ra7X}D`r#Ad)yM1Cv)aM1>|$2T(C+pz2_`e9QxaW2Q4$V>2RGc$)9FU zo56Q%mvbH4xfNmgkFfGR^U~)z8?@1#X^H4l)d`&`{GX^Twdf^^bHYS$owOuH$K&dxj-M;Bn(0A*ARN85?I2e_ zuJ_5y#X6>S798);<+BcBKCRI(>qDS%{T)Q(U!OI{`q#)=a`Ve#{~A+JTrgIcA`}!R zol!>w0*_F?5Dk5NRW1-m$nQ#?VYC^6n;-Rlcv*ALhtL=e zYqH{eU9SE}C*#NaT(Ay{h8}}{n2k8wM0y}Pbve=cUcS@8?dG7V(82~wW@vO69B(xJ zw#!_oD7eLbyz>^)AKCSS47{QGQHKK~=Bv?=;~MAT3{HpM6bS6=nwc-}*v^~m>6n4u za_xABCFM(TeoH)>cwtjdQVMiRSQFXrbwYZ`NH^lV?AN`{vc_#G$7naA_He|nI5m7F~x^*=4ZjX%C#5?%dy0tX6rD255Y93DXz91UvJUSV2<@-Go zAWhKN!-DC(J1j~;cJ@%mvgGcwQg8pXw@y$u7Yct39J0`iHQPH==nL)ap}8w;7kWAa z;loLwYlR@m7S}@U(METpy>X`wa~h-D+AK+}lf&sv=o`1@3gKg9AN1Y9JvyiRR^d^L z;sV8phJF`e*?;pl;w%}Ox3A7L*vD3vxUHEDuy$zN*{Zs9MlK!7$lQGLGxR+aAav0o}W{kw_ zPyXCvdsVBvCGMB(-2tW#1$HrvpfP$GDX>Xng?~GsJ>R&KWg&iYnm6CL6!woyKf|75 zA9bMmSUGU}A!f>dYvuNG-PH?Tyuym^v)s3UVs!+b+8H|hyh;gKMRi8rxe)d=Mh9nf zI>?^1T;TSTO$7V3g0yJB>$RRm%>-?O;_s(vw6q3gsMqI##+_J$S4sL5&ZD;%H?Xno#pMvUapxH8Z@2wt;0a60VXi|amz~>TF$$`)*0C>I)IMkxa8u%+>sd+ zcTTqJgivU~e<9A_F$=mrpTXr!`KNhY35|k%$^R*jb2ltQDb{7USesKrVlXe&N2ymI z22Tic`VdY8u0D)=BUjAA%sv{*?IBI639~k>flZXzdjgX&3SEOuE2so`f|c*2d>_V= zdD?MgG5ckDG$iz9E=hHno1OMFJN46C*xp!b?JMkm3FIE5 zxzqLoTr>AOOOvfBbyK1pw`h$`_i}m}I7*5T2~-6+77h@s>45beZ{n)s>5x3pk_(!m zljY~0gw;wE>+01DIlZR3df~W9R6ngCKQ}674U~KAy^0Y{%W-3at(oRXGr|U}6-adi zFFFE!neRT#bSXZkhb=8;1eWmlls%9}+kh`=z8npGgmVR{e-WJxZkzY64Q^ejZ9<^~ z$HIr1H~fzJofibs0AW%dlpufZCLwAJPETbx>LWxy}qn!V=ZODmKEKj-%#c#eMDa?`A*T-)K*njBfn|W zrfJ0Rs>&Y-MEb=wRqGtJZbW(5v7r*FsO*g!Hk4J?>epee=~!DfMenYx*%*seMisbG z8Ee-3U?GJok;9rQsuo*lS@FO_WgGM>CzMW`P%7cU;;5}H+khH8Qe76WXxz`~sCGEr zwfzW)`#)5*t`@MxqqBbhvdU5s!_#KfPyMa$!&#u0o=7!wS{n2-0RYi{|dORREeUc6r)QdmYag?kplloG;6V=o@HlPeb%)JhGE%hs^Ci;zttHFN#eFq@}{h+q223>1# zypkAwQd?c0Z#)de)@}qI2dA^#StORZxDs$U*10zmFirxrY{T{W0LNn7{(kSS)K_n) zTDzgFMkJtq|03$$*VQ@Zr+?U8>(X0`3XoHOe39d52EOA=2650AC5EJTR+WPKO`9gH zA|U$PW3K+5%8JUWhbxgj-bUm{t+_S^!+`(b<`^7**@m)e#|DYD4EA5JvDUS`?7@xh z4N_Kv!(wO@sy0acPr}VWS@G&Eb8M_BD=j3-9|HIF;YEdrF{lpl@axkNO#SS2Q2aqy z8gg*f0OrkSg*`=L5t z=Ounpr7T4&2IV_sNT9GE%x|C{YuJDr{Gz5z9B_zcMC5^oKP2*S4J#_!0P@yXZd_kd z79ZR!RgMj%NcNDs27?QVLyr{h)uVsMzrp_TpJ1haI50+uv{nnYj9zR~{+&b{7UD*=GAB-r)UWgGf^6>ar$gh+p!jF&4_>IC{C zH)C=|{F@Dv{6r5;qIOtPa>_poUwoIqz&F@k3+`f-j!G=QnP$v1&$?yyt+{g+SgZww z!XOVviL@qGp5Zn&75VLGjsOT8Mn^3WqQp9=k&_5hu67F;x9Oz(@9jA zzIHvmra2kNZeyjBWPrJP=BTMD+aSsVh6yzW{ThcG40f)54PJWknF4%PmI1#LY9@d& zEe6KH-5z0gIqv!&1hA&IlwdBct#SZB%k`KrPBrD|nQPr0tZdENLSf7nhFQNKv7DhP?*;ksTBL-Ip)E@_#A4pZKHnE)R?Ex*gLNP`Gb|Q+)6EmS%Bv*7*BLyK;u_e;;}*5jT3)pMqo@ZL4{{dYdbd)CA&6>rM!xZai#Ey4goD67b0n9GQ99tC%W;Xzh3gk3r|$?*ON0EC4aoc zoXAby6d=CnXZbxvRCM3+7uJA`x)~S`BM;YSWskLy!iist$!BI*#868EPa*$ diff --git a/Debug/GbTModuleSW30Web.list b/Debug/GbTModuleSW30Web.list deleted file mode 100644 index 2068c38..0000000 --- a/Debug/GbTModuleSW30Web.list +++ /dev/null @@ -1,33889 +0,0 @@ - -GbTModuleSW30Web.elf: file format elf32-littlearm - -Sections: -Idx Name Size VMA LMA File off Algn - 0 .isr_vector 000001e8 08008000 08008000 00001000 2**0 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 1 .text 0000e390 080081e8 080081e8 000011e8 2**3 - CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .rodata 00000bc4 08016578 08016578 0000f578 2**3 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 3 .ARM.extab 00000000 0801713c 0801713c 0001124c 2**0 - CONTENTS - 4 .ARM 00000008 0801713c 0801713c 0001013c 2**2 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 5 .preinit_array 00000000 08017144 08017144 0001124c 2**0 - CONTENTS, ALLOC, LOAD, DATA - 6 .init_array 00000004 08017144 08017144 00010144 2**2 - CONTENTS, ALLOC, LOAD, DATA - 7 .fini_array 00000004 08017148 08017148 00010148 2**2 - CONTENTS, ALLOC, LOAD, DATA - 8 .data 0000024c 20000000 0801714c 00011000 2**2 - CONTENTS, ALLOC, LOAD, DATA - 9 .bss 00000f8c 20000250 08017398 00011250 2**3 - ALLOC - 10 ._user_heap_stack 00000604 200011dc 08017398 000121dc 2**0 - ALLOC - 11 .ARM.attributes 00000029 00000000 00000000 0001124c 2**0 - CONTENTS, READONLY - 12 .debug_info 0001c1a2 00000000 00000000 00011275 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 13 .debug_abbrev 000058d4 00000000 00000000 0002d417 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 14 .debug_aranges 00001768 00000000 00000000 00032cf0 2**3 - CONTENTS, READONLY, DEBUGGING, OCTETS - 15 .debug_rnglists 000011ea 00000000 00000000 00034458 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 16 .debug_macro 00026df4 00000000 00000000 00035642 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 17 .debug_line 00022491 00000000 00000000 0005c436 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 18 .debug_str 000c989a 00000000 00000000 0007e8c7 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - 19 .comment 00000043 00000000 00000000 00148161 2**0 - CONTENTS, READONLY - 20 .debug_frame 00006fbc 00000000 00000000 001481a4 2**2 - CONTENTS, READONLY, DEBUGGING, OCTETS - 21 .debug_line_str 0000006e 00000000 00000000 0014f160 2**0 - CONTENTS, READONLY, DEBUGGING, OCTETS - -Disassembly of section .text: - -080081e8 <__do_global_dtors_aux>: - 80081e8: b510 push {r4, lr} - 80081ea: 4c05 ldr r4, [pc, #20] @ (8008200 <__do_global_dtors_aux+0x18>) - 80081ec: 7823 ldrb r3, [r4, #0] - 80081ee: b933 cbnz r3, 80081fe <__do_global_dtors_aux+0x16> - 80081f0: 4b04 ldr r3, [pc, #16] @ (8008204 <__do_global_dtors_aux+0x1c>) - 80081f2: b113 cbz r3, 80081fa <__do_global_dtors_aux+0x12> - 80081f4: 4804 ldr r0, [pc, #16] @ (8008208 <__do_global_dtors_aux+0x20>) - 80081f6: f3af 8000 nop.w - 80081fa: 2301 movs r3, #1 - 80081fc: 7023 strb r3, [r4, #0] - 80081fe: bd10 pop {r4, pc} - 8008200: 20000250 .word 0x20000250 - 8008204: 00000000 .word 0x00000000 - 8008208: 08016560 .word 0x08016560 - -0800820c : - 800820c: b508 push {r3, lr} - 800820e: 4b03 ldr r3, [pc, #12] @ (800821c ) - 8008210: b11b cbz r3, 800821a - 8008212: 4903 ldr r1, [pc, #12] @ (8008220 ) - 8008214: 4803 ldr r0, [pc, #12] @ (8008224 ) - 8008216: f3af 8000 nop.w - 800821a: bd08 pop {r3, pc} - 800821c: 00000000 .word 0x00000000 - 8008220: 20000254 .word 0x20000254 - 8008224: 08016560 .word 0x08016560 - -08008228 : - 8008228: 4603 mov r3, r0 - 800822a: f813 2b01 ldrb.w r2, [r3], #1 - 800822e: 2a00 cmp r2, #0 - 8008230: d1fb bne.n 800822a - 8008232: 1a18 subs r0, r3, r0 - 8008234: 3801 subs r0, #1 - 8008236: 4770 bx lr - -08008238 <__aeabi_drsub>: - 8008238: f081 4100 eor.w r1, r1, #2147483648 @ 0x80000000 - 800823c: e002 b.n 8008244 <__adddf3> - 800823e: bf00 nop - -08008240 <__aeabi_dsub>: - 8008240: f083 4300 eor.w r3, r3, #2147483648 @ 0x80000000 - -08008244 <__adddf3>: - 8008244: b530 push {r4, r5, lr} - 8008246: ea4f 0441 mov.w r4, r1, lsl #1 - 800824a: ea4f 0543 mov.w r5, r3, lsl #1 - 800824e: ea94 0f05 teq r4, r5 - 8008252: bf08 it eq - 8008254: ea90 0f02 teqeq r0, r2 - 8008258: bf1f itttt ne - 800825a: ea54 0c00 orrsne.w ip, r4, r0 - 800825e: ea55 0c02 orrsne.w ip, r5, r2 - 8008262: ea7f 5c64 mvnsne.w ip, r4, asr #21 - 8008266: ea7f 5c65 mvnsne.w ip, r5, asr #21 - 800826a: f000 80e2 beq.w 8008432 <__adddf3+0x1ee> - 800826e: ea4f 5454 mov.w r4, r4, lsr #21 - 8008272: ebd4 5555 rsbs r5, r4, r5, lsr #21 - 8008276: bfb8 it lt - 8008278: 426d neglt r5, r5 - 800827a: dd0c ble.n 8008296 <__adddf3+0x52> - 800827c: 442c add r4, r5 - 800827e: ea80 0202 eor.w r2, r0, r2 - 8008282: ea81 0303 eor.w r3, r1, r3 - 8008286: ea82 0000 eor.w r0, r2, r0 - 800828a: ea83 0101 eor.w r1, r3, r1 - 800828e: ea80 0202 eor.w r2, r0, r2 - 8008292: ea81 0303 eor.w r3, r1, r3 - 8008296: 2d36 cmp r5, #54 @ 0x36 - 8008298: bf88 it hi - 800829a: bd30 pophi {r4, r5, pc} - 800829c: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 - 80082a0: ea4f 3101 mov.w r1, r1, lsl #12 - 80082a4: f44f 1c80 mov.w ip, #1048576 @ 0x100000 - 80082a8: ea4c 3111 orr.w r1, ip, r1, lsr #12 - 80082ac: d002 beq.n 80082b4 <__adddf3+0x70> - 80082ae: 4240 negs r0, r0 - 80082b0: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 80082b4: f013 4f00 tst.w r3, #2147483648 @ 0x80000000 - 80082b8: ea4f 3303 mov.w r3, r3, lsl #12 - 80082bc: ea4c 3313 orr.w r3, ip, r3, lsr #12 - 80082c0: d002 beq.n 80082c8 <__adddf3+0x84> - 80082c2: 4252 negs r2, r2 - 80082c4: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 80082c8: ea94 0f05 teq r4, r5 - 80082cc: f000 80a7 beq.w 800841e <__adddf3+0x1da> - 80082d0: f1a4 0401 sub.w r4, r4, #1 - 80082d4: f1d5 0e20 rsbs lr, r5, #32 - 80082d8: db0d blt.n 80082f6 <__adddf3+0xb2> - 80082da: fa02 fc0e lsl.w ip, r2, lr - 80082de: fa22 f205 lsr.w r2, r2, r5 - 80082e2: 1880 adds r0, r0, r2 - 80082e4: f141 0100 adc.w r1, r1, #0 - 80082e8: fa03 f20e lsl.w r2, r3, lr - 80082ec: 1880 adds r0, r0, r2 - 80082ee: fa43 f305 asr.w r3, r3, r5 - 80082f2: 4159 adcs r1, r3 - 80082f4: e00e b.n 8008314 <__adddf3+0xd0> - 80082f6: f1a5 0520 sub.w r5, r5, #32 - 80082fa: f10e 0e20 add.w lr, lr, #32 - 80082fe: 2a01 cmp r2, #1 - 8008300: fa03 fc0e lsl.w ip, r3, lr - 8008304: bf28 it cs - 8008306: f04c 0c02 orrcs.w ip, ip, #2 - 800830a: fa43 f305 asr.w r3, r3, r5 - 800830e: 18c0 adds r0, r0, r3 - 8008310: eb51 71e3 adcs.w r1, r1, r3, asr #31 - 8008314: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 - 8008318: d507 bpl.n 800832a <__adddf3+0xe6> - 800831a: f04f 0e00 mov.w lr, #0 - 800831e: f1dc 0c00 rsbs ip, ip, #0 - 8008322: eb7e 0000 sbcs.w r0, lr, r0 - 8008326: eb6e 0101 sbc.w r1, lr, r1 - 800832a: f5b1 1f80 cmp.w r1, #1048576 @ 0x100000 - 800832e: d31b bcc.n 8008368 <__adddf3+0x124> - 8008330: f5b1 1f00 cmp.w r1, #2097152 @ 0x200000 - 8008334: d30c bcc.n 8008350 <__adddf3+0x10c> - 8008336: 0849 lsrs r1, r1, #1 - 8008338: ea5f 0030 movs.w r0, r0, rrx - 800833c: ea4f 0c3c mov.w ip, ip, rrx - 8008340: f104 0401 add.w r4, r4, #1 - 8008344: ea4f 5244 mov.w r2, r4, lsl #21 - 8008348: f512 0f80 cmn.w r2, #4194304 @ 0x400000 - 800834c: f080 809a bcs.w 8008484 <__adddf3+0x240> - 8008350: f1bc 4f00 cmp.w ip, #2147483648 @ 0x80000000 - 8008354: bf08 it eq - 8008356: ea5f 0c50 movseq.w ip, r0, lsr #1 - 800835a: f150 0000 adcs.w r0, r0, #0 - 800835e: eb41 5104 adc.w r1, r1, r4, lsl #20 - 8008362: ea41 0105 orr.w r1, r1, r5 - 8008366: bd30 pop {r4, r5, pc} - 8008368: ea5f 0c4c movs.w ip, ip, lsl #1 - 800836c: 4140 adcs r0, r0 - 800836e: eb41 0101 adc.w r1, r1, r1 - 8008372: 3c01 subs r4, #1 - 8008374: bf28 it cs - 8008376: f5b1 1f80 cmpcs.w r1, #1048576 @ 0x100000 - 800837a: d2e9 bcs.n 8008350 <__adddf3+0x10c> - 800837c: f091 0f00 teq r1, #0 - 8008380: bf04 itt eq - 8008382: 4601 moveq r1, r0 - 8008384: 2000 moveq r0, #0 - 8008386: fab1 f381 clz r3, r1 - 800838a: bf08 it eq - 800838c: 3320 addeq r3, #32 - 800838e: f1a3 030b sub.w r3, r3, #11 - 8008392: f1b3 0220 subs.w r2, r3, #32 - 8008396: da0c bge.n 80083b2 <__adddf3+0x16e> - 8008398: 320c adds r2, #12 - 800839a: dd08 ble.n 80083ae <__adddf3+0x16a> - 800839c: f102 0c14 add.w ip, r2, #20 - 80083a0: f1c2 020c rsb r2, r2, #12 - 80083a4: fa01 f00c lsl.w r0, r1, ip - 80083a8: fa21 f102 lsr.w r1, r1, r2 - 80083ac: e00c b.n 80083c8 <__adddf3+0x184> - 80083ae: f102 0214 add.w r2, r2, #20 - 80083b2: bfd8 it le - 80083b4: f1c2 0c20 rsble ip, r2, #32 - 80083b8: fa01 f102 lsl.w r1, r1, r2 - 80083bc: fa20 fc0c lsr.w ip, r0, ip - 80083c0: bfdc itt le - 80083c2: ea41 010c orrle.w r1, r1, ip - 80083c6: 4090 lslle r0, r2 - 80083c8: 1ae4 subs r4, r4, r3 - 80083ca: bfa2 ittt ge - 80083cc: eb01 5104 addge.w r1, r1, r4, lsl #20 - 80083d0: 4329 orrge r1, r5 - 80083d2: bd30 popge {r4, r5, pc} - 80083d4: ea6f 0404 mvn.w r4, r4 - 80083d8: 3c1f subs r4, #31 - 80083da: da1c bge.n 8008416 <__adddf3+0x1d2> - 80083dc: 340c adds r4, #12 - 80083de: dc0e bgt.n 80083fe <__adddf3+0x1ba> - 80083e0: f104 0414 add.w r4, r4, #20 - 80083e4: f1c4 0220 rsb r2, r4, #32 - 80083e8: fa20 f004 lsr.w r0, r0, r4 - 80083ec: fa01 f302 lsl.w r3, r1, r2 - 80083f0: ea40 0003 orr.w r0, r0, r3 - 80083f4: fa21 f304 lsr.w r3, r1, r4 - 80083f8: ea45 0103 orr.w r1, r5, r3 - 80083fc: bd30 pop {r4, r5, pc} - 80083fe: f1c4 040c rsb r4, r4, #12 - 8008402: f1c4 0220 rsb r2, r4, #32 - 8008406: fa20 f002 lsr.w r0, r0, r2 - 800840a: fa01 f304 lsl.w r3, r1, r4 - 800840e: ea40 0003 orr.w r0, r0, r3 - 8008412: 4629 mov r1, r5 - 8008414: bd30 pop {r4, r5, pc} - 8008416: fa21 f004 lsr.w r0, r1, r4 - 800841a: 4629 mov r1, r5 - 800841c: bd30 pop {r4, r5, pc} - 800841e: f094 0f00 teq r4, #0 - 8008422: f483 1380 eor.w r3, r3, #1048576 @ 0x100000 - 8008426: bf06 itte eq - 8008428: f481 1180 eoreq.w r1, r1, #1048576 @ 0x100000 - 800842c: 3401 addeq r4, #1 - 800842e: 3d01 subne r5, #1 - 8008430: e74e b.n 80082d0 <__adddf3+0x8c> - 8008432: ea7f 5c64 mvns.w ip, r4, asr #21 - 8008436: bf18 it ne - 8008438: ea7f 5c65 mvnsne.w ip, r5, asr #21 - 800843c: d029 beq.n 8008492 <__adddf3+0x24e> - 800843e: ea94 0f05 teq r4, r5 - 8008442: bf08 it eq - 8008444: ea90 0f02 teqeq r0, r2 - 8008448: d005 beq.n 8008456 <__adddf3+0x212> - 800844a: ea54 0c00 orrs.w ip, r4, r0 - 800844e: bf04 itt eq - 8008450: 4619 moveq r1, r3 - 8008452: 4610 moveq r0, r2 - 8008454: bd30 pop {r4, r5, pc} - 8008456: ea91 0f03 teq r1, r3 - 800845a: bf1e ittt ne - 800845c: 2100 movne r1, #0 - 800845e: 2000 movne r0, #0 - 8008460: bd30 popne {r4, r5, pc} - 8008462: ea5f 5c54 movs.w ip, r4, lsr #21 - 8008466: d105 bne.n 8008474 <__adddf3+0x230> - 8008468: 0040 lsls r0, r0, #1 - 800846a: 4149 adcs r1, r1 - 800846c: bf28 it cs - 800846e: f041 4100 orrcs.w r1, r1, #2147483648 @ 0x80000000 - 8008472: bd30 pop {r4, r5, pc} - 8008474: f514 0480 adds.w r4, r4, #4194304 @ 0x400000 - 8008478: bf3c itt cc - 800847a: f501 1180 addcc.w r1, r1, #1048576 @ 0x100000 - 800847e: bd30 popcc {r4, r5, pc} - 8008480: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 - 8008484: f045 41fe orr.w r1, r5, #2130706432 @ 0x7f000000 - 8008488: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000 - 800848c: f04f 0000 mov.w r0, #0 - 8008490: bd30 pop {r4, r5, pc} - 8008492: ea7f 5c64 mvns.w ip, r4, asr #21 - 8008496: bf1a itte ne - 8008498: 4619 movne r1, r3 - 800849a: 4610 movne r0, r2 - 800849c: ea7f 5c65 mvnseq.w ip, r5, asr #21 - 80084a0: bf1c itt ne - 80084a2: 460b movne r3, r1 - 80084a4: 4602 movne r2, r0 - 80084a6: ea50 3401 orrs.w r4, r0, r1, lsl #12 - 80084aa: bf06 itte eq - 80084ac: ea52 3503 orrseq.w r5, r2, r3, lsl #12 - 80084b0: ea91 0f03 teqeq r1, r3 - 80084b4: f441 2100 orrne.w r1, r1, #524288 @ 0x80000 - 80084b8: bd30 pop {r4, r5, pc} - 80084ba: bf00 nop - -080084bc <__aeabi_ui2d>: - 80084bc: f090 0f00 teq r0, #0 - 80084c0: bf04 itt eq - 80084c2: 2100 moveq r1, #0 - 80084c4: 4770 bxeq lr - 80084c6: b530 push {r4, r5, lr} - 80084c8: f44f 6480 mov.w r4, #1024 @ 0x400 - 80084cc: f104 0432 add.w r4, r4, #50 @ 0x32 - 80084d0: f04f 0500 mov.w r5, #0 - 80084d4: f04f 0100 mov.w r1, #0 - 80084d8: e750 b.n 800837c <__adddf3+0x138> - 80084da: bf00 nop - -080084dc <__aeabi_i2d>: - 80084dc: f090 0f00 teq r0, #0 - 80084e0: bf04 itt eq - 80084e2: 2100 moveq r1, #0 - 80084e4: 4770 bxeq lr - 80084e6: b530 push {r4, r5, lr} - 80084e8: f44f 6480 mov.w r4, #1024 @ 0x400 - 80084ec: f104 0432 add.w r4, r4, #50 @ 0x32 - 80084f0: f010 4500 ands.w r5, r0, #2147483648 @ 0x80000000 - 80084f4: bf48 it mi - 80084f6: 4240 negmi r0, r0 - 80084f8: f04f 0100 mov.w r1, #0 - 80084fc: e73e b.n 800837c <__adddf3+0x138> - 80084fe: bf00 nop - -08008500 <__aeabi_f2d>: - 8008500: 0042 lsls r2, r0, #1 - 8008502: ea4f 01e2 mov.w r1, r2, asr #3 - 8008506: ea4f 0131 mov.w r1, r1, rrx - 800850a: ea4f 7002 mov.w r0, r2, lsl #28 - 800850e: bf1f itttt ne - 8008510: f012 437f andsne.w r3, r2, #4278190080 @ 0xff000000 - 8008514: f093 4f7f teqne r3, #4278190080 @ 0xff000000 - 8008518: f081 5160 eorne.w r1, r1, #939524096 @ 0x38000000 - 800851c: 4770 bxne lr - 800851e: f032 427f bics.w r2, r2, #4278190080 @ 0xff000000 - 8008522: bf08 it eq - 8008524: 4770 bxeq lr - 8008526: f093 4f7f teq r3, #4278190080 @ 0xff000000 - 800852a: bf04 itt eq - 800852c: f441 2100 orreq.w r1, r1, #524288 @ 0x80000 - 8008530: 4770 bxeq lr - 8008532: b530 push {r4, r5, lr} - 8008534: f44f 7460 mov.w r4, #896 @ 0x380 - 8008538: f001 4500 and.w r5, r1, #2147483648 @ 0x80000000 - 800853c: f021 4100 bic.w r1, r1, #2147483648 @ 0x80000000 - 8008540: e71c b.n 800837c <__adddf3+0x138> - 8008542: bf00 nop - -08008544 <__aeabi_ul2d>: - 8008544: ea50 0201 orrs.w r2, r0, r1 - 8008548: bf08 it eq - 800854a: 4770 bxeq lr - 800854c: b530 push {r4, r5, lr} - 800854e: f04f 0500 mov.w r5, #0 - 8008552: e00a b.n 800856a <__aeabi_l2d+0x16> - -08008554 <__aeabi_l2d>: - 8008554: ea50 0201 orrs.w r2, r0, r1 - 8008558: bf08 it eq - 800855a: 4770 bxeq lr - 800855c: b530 push {r4, r5, lr} - 800855e: f011 4500 ands.w r5, r1, #2147483648 @ 0x80000000 - 8008562: d502 bpl.n 800856a <__aeabi_l2d+0x16> - 8008564: 4240 negs r0, r0 - 8008566: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 800856a: f44f 6480 mov.w r4, #1024 @ 0x400 - 800856e: f104 0432 add.w r4, r4, #50 @ 0x32 - 8008572: ea5f 5c91 movs.w ip, r1, lsr #22 - 8008576: f43f aed8 beq.w 800832a <__adddf3+0xe6> - 800857a: f04f 0203 mov.w r2, #3 - 800857e: ea5f 0cdc movs.w ip, ip, lsr #3 - 8008582: bf18 it ne - 8008584: 3203 addne r2, #3 - 8008586: ea5f 0cdc movs.w ip, ip, lsr #3 - 800858a: bf18 it ne - 800858c: 3203 addne r2, #3 - 800858e: eb02 02dc add.w r2, r2, ip, lsr #3 - 8008592: f1c2 0320 rsb r3, r2, #32 - 8008596: fa00 fc03 lsl.w ip, r0, r3 - 800859a: fa20 f002 lsr.w r0, r0, r2 - 800859e: fa01 fe03 lsl.w lr, r1, r3 - 80085a2: ea40 000e orr.w r0, r0, lr - 80085a6: fa21 f102 lsr.w r1, r1, r2 - 80085aa: 4414 add r4, r2 - 80085ac: e6bd b.n 800832a <__adddf3+0xe6> - 80085ae: bf00 nop - -080085b0 <__aeabi_dmul>: - 80085b0: b570 push {r4, r5, r6, lr} - 80085b2: f04f 0cff mov.w ip, #255 @ 0xff - 80085b6: f44c 6ce0 orr.w ip, ip, #1792 @ 0x700 - 80085ba: ea1c 5411 ands.w r4, ip, r1, lsr #20 - 80085be: bf1d ittte ne - 80085c0: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - 80085c4: ea94 0f0c teqne r4, ip - 80085c8: ea95 0f0c teqne r5, ip - 80085cc: f000 f8de bleq 800878c <__aeabi_dmul+0x1dc> - 80085d0: 442c add r4, r5 - 80085d2: ea81 0603 eor.w r6, r1, r3 - 80085d6: ea21 514c bic.w r1, r1, ip, lsl #21 - 80085da: ea23 534c bic.w r3, r3, ip, lsl #21 - 80085de: ea50 3501 orrs.w r5, r0, r1, lsl #12 - 80085e2: bf18 it ne - 80085e4: ea52 3503 orrsne.w r5, r2, r3, lsl #12 - 80085e8: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 - 80085ec: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 - 80085f0: d038 beq.n 8008664 <__aeabi_dmul+0xb4> - 80085f2: fba0 ce02 umull ip, lr, r0, r2 - 80085f6: f04f 0500 mov.w r5, #0 - 80085fa: fbe1 e502 umlal lr, r5, r1, r2 - 80085fe: f006 4200 and.w r2, r6, #2147483648 @ 0x80000000 - 8008602: fbe0 e503 umlal lr, r5, r0, r3 - 8008606: f04f 0600 mov.w r6, #0 - 800860a: fbe1 5603 umlal r5, r6, r1, r3 - 800860e: f09c 0f00 teq ip, #0 - 8008612: bf18 it ne - 8008614: f04e 0e01 orrne.w lr, lr, #1 - 8008618: f1a4 04ff sub.w r4, r4, #255 @ 0xff - 800861c: f5b6 7f00 cmp.w r6, #512 @ 0x200 - 8008620: f564 7440 sbc.w r4, r4, #768 @ 0x300 - 8008624: d204 bcs.n 8008630 <__aeabi_dmul+0x80> - 8008626: ea5f 0e4e movs.w lr, lr, lsl #1 - 800862a: 416d adcs r5, r5 - 800862c: eb46 0606 adc.w r6, r6, r6 - 8008630: ea42 21c6 orr.w r1, r2, r6, lsl #11 - 8008634: ea41 5155 orr.w r1, r1, r5, lsr #21 - 8008638: ea4f 20c5 mov.w r0, r5, lsl #11 - 800863c: ea40 505e orr.w r0, r0, lr, lsr #21 - 8008640: ea4f 2ece mov.w lr, lr, lsl #11 - 8008644: f1b4 0cfd subs.w ip, r4, #253 @ 0xfd - 8008648: bf88 it hi - 800864a: f5bc 6fe0 cmphi.w ip, #1792 @ 0x700 - 800864e: d81e bhi.n 800868e <__aeabi_dmul+0xde> - 8008650: f1be 4f00 cmp.w lr, #2147483648 @ 0x80000000 - 8008654: bf08 it eq - 8008656: ea5f 0e50 movseq.w lr, r0, lsr #1 - 800865a: f150 0000 adcs.w r0, r0, #0 - 800865e: eb41 5104 adc.w r1, r1, r4, lsl #20 - 8008662: bd70 pop {r4, r5, r6, pc} - 8008664: f006 4600 and.w r6, r6, #2147483648 @ 0x80000000 - 8008668: ea46 0101 orr.w r1, r6, r1 - 800866c: ea40 0002 orr.w r0, r0, r2 - 8008670: ea81 0103 eor.w r1, r1, r3 - 8008674: ebb4 045c subs.w r4, r4, ip, lsr #1 - 8008678: bfc2 ittt gt - 800867a: ebd4 050c rsbsgt r5, r4, ip - 800867e: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - 8008682: bd70 popgt {r4, r5, r6, pc} - 8008684: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 - 8008688: f04f 0e00 mov.w lr, #0 - 800868c: 3c01 subs r4, #1 - 800868e: f300 80ab bgt.w 80087e8 <__aeabi_dmul+0x238> - 8008692: f114 0f36 cmn.w r4, #54 @ 0x36 - 8008696: bfde ittt le - 8008698: 2000 movle r0, #0 - 800869a: f001 4100 andle.w r1, r1, #2147483648 @ 0x80000000 - 800869e: bd70 pople {r4, r5, r6, pc} - 80086a0: f1c4 0400 rsb r4, r4, #0 - 80086a4: 3c20 subs r4, #32 - 80086a6: da35 bge.n 8008714 <__aeabi_dmul+0x164> - 80086a8: 340c adds r4, #12 - 80086aa: dc1b bgt.n 80086e4 <__aeabi_dmul+0x134> - 80086ac: f104 0414 add.w r4, r4, #20 - 80086b0: f1c4 0520 rsb r5, r4, #32 - 80086b4: fa00 f305 lsl.w r3, r0, r5 - 80086b8: fa20 f004 lsr.w r0, r0, r4 - 80086bc: fa01 f205 lsl.w r2, r1, r5 - 80086c0: ea40 0002 orr.w r0, r0, r2 - 80086c4: f001 4200 and.w r2, r1, #2147483648 @ 0x80000000 - 80086c8: f021 4100 bic.w r1, r1, #2147483648 @ 0x80000000 - 80086cc: eb10 70d3 adds.w r0, r0, r3, lsr #31 - 80086d0: fa21 f604 lsr.w r6, r1, r4 - 80086d4: eb42 0106 adc.w r1, r2, r6 - 80086d8: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 80086dc: bf08 it eq - 80086de: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 80086e2: bd70 pop {r4, r5, r6, pc} - 80086e4: f1c4 040c rsb r4, r4, #12 - 80086e8: f1c4 0520 rsb r5, r4, #32 - 80086ec: fa00 f304 lsl.w r3, r0, r4 - 80086f0: fa20 f005 lsr.w r0, r0, r5 - 80086f4: fa01 f204 lsl.w r2, r1, r4 - 80086f8: ea40 0002 orr.w r0, r0, r2 - 80086fc: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 - 8008700: eb10 70d3 adds.w r0, r0, r3, lsr #31 - 8008704: f141 0100 adc.w r1, r1, #0 - 8008708: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 800870c: bf08 it eq - 800870e: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 8008712: bd70 pop {r4, r5, r6, pc} - 8008714: f1c4 0520 rsb r5, r4, #32 - 8008718: fa00 f205 lsl.w r2, r0, r5 - 800871c: ea4e 0e02 orr.w lr, lr, r2 - 8008720: fa20 f304 lsr.w r3, r0, r4 - 8008724: fa01 f205 lsl.w r2, r1, r5 - 8008728: ea43 0302 orr.w r3, r3, r2 - 800872c: fa21 f004 lsr.w r0, r1, r4 - 8008730: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 - 8008734: fa21 f204 lsr.w r2, r1, r4 - 8008738: ea20 0002 bic.w r0, r0, r2 - 800873c: eb00 70d3 add.w r0, r0, r3, lsr #31 - 8008740: ea5e 0e43 orrs.w lr, lr, r3, lsl #1 - 8008744: bf08 it eq - 8008746: ea20 70d3 biceq.w r0, r0, r3, lsr #31 - 800874a: bd70 pop {r4, r5, r6, pc} - 800874c: f094 0f00 teq r4, #0 - 8008750: d10f bne.n 8008772 <__aeabi_dmul+0x1c2> - 8008752: f001 4600 and.w r6, r1, #2147483648 @ 0x80000000 - 8008756: 0040 lsls r0, r0, #1 - 8008758: eb41 0101 adc.w r1, r1, r1 - 800875c: f411 1f80 tst.w r1, #1048576 @ 0x100000 - 8008760: bf08 it eq - 8008762: 3c01 subeq r4, #1 - 8008764: d0f7 beq.n 8008756 <__aeabi_dmul+0x1a6> - 8008766: ea41 0106 orr.w r1, r1, r6 - 800876a: f095 0f00 teq r5, #0 - 800876e: bf18 it ne - 8008770: 4770 bxne lr - 8008772: f003 4600 and.w r6, r3, #2147483648 @ 0x80000000 - 8008776: 0052 lsls r2, r2, #1 - 8008778: eb43 0303 adc.w r3, r3, r3 - 800877c: f413 1f80 tst.w r3, #1048576 @ 0x100000 - 8008780: bf08 it eq - 8008782: 3d01 subeq r5, #1 - 8008784: d0f7 beq.n 8008776 <__aeabi_dmul+0x1c6> - 8008786: ea43 0306 orr.w r3, r3, r6 - 800878a: 4770 bx lr - 800878c: ea94 0f0c teq r4, ip - 8008790: ea0c 5513 and.w r5, ip, r3, lsr #20 - 8008794: bf18 it ne - 8008796: ea95 0f0c teqne r5, ip - 800879a: d00c beq.n 80087b6 <__aeabi_dmul+0x206> - 800879c: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 80087a0: bf18 it ne - 80087a2: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 80087a6: d1d1 bne.n 800874c <__aeabi_dmul+0x19c> - 80087a8: ea81 0103 eor.w r1, r1, r3 - 80087ac: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 - 80087b0: f04f 0000 mov.w r0, #0 - 80087b4: bd70 pop {r4, r5, r6, pc} - 80087b6: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 80087ba: bf06 itte eq - 80087bc: 4610 moveq r0, r2 - 80087be: 4619 moveq r1, r3 - 80087c0: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 80087c4: d019 beq.n 80087fa <__aeabi_dmul+0x24a> - 80087c6: ea94 0f0c teq r4, ip - 80087ca: d102 bne.n 80087d2 <__aeabi_dmul+0x222> - 80087cc: ea50 3601 orrs.w r6, r0, r1, lsl #12 - 80087d0: d113 bne.n 80087fa <__aeabi_dmul+0x24a> - 80087d2: ea95 0f0c teq r5, ip - 80087d6: d105 bne.n 80087e4 <__aeabi_dmul+0x234> - 80087d8: ea52 3603 orrs.w r6, r2, r3, lsl #12 - 80087dc: bf1c itt ne - 80087de: 4610 movne r0, r2 - 80087e0: 4619 movne r1, r3 - 80087e2: d10a bne.n 80087fa <__aeabi_dmul+0x24a> - 80087e4: ea81 0103 eor.w r1, r1, r3 - 80087e8: f001 4100 and.w r1, r1, #2147483648 @ 0x80000000 - 80087ec: f041 41fe orr.w r1, r1, #2130706432 @ 0x7f000000 - 80087f0: f441 0170 orr.w r1, r1, #15728640 @ 0xf00000 - 80087f4: f04f 0000 mov.w r0, #0 - 80087f8: bd70 pop {r4, r5, r6, pc} - 80087fa: f041 41fe orr.w r1, r1, #2130706432 @ 0x7f000000 - 80087fe: f441 0178 orr.w r1, r1, #16252928 @ 0xf80000 - 8008802: bd70 pop {r4, r5, r6, pc} - -08008804 <__aeabi_ddiv>: - 8008804: b570 push {r4, r5, r6, lr} - 8008806: f04f 0cff mov.w ip, #255 @ 0xff - 800880a: f44c 6ce0 orr.w ip, ip, #1792 @ 0x700 - 800880e: ea1c 5411 ands.w r4, ip, r1, lsr #20 - 8008812: bf1d ittte ne - 8008814: ea1c 5513 andsne.w r5, ip, r3, lsr #20 - 8008818: ea94 0f0c teqne r4, ip - 800881c: ea95 0f0c teqne r5, ip - 8008820: f000 f8a7 bleq 8008972 <__aeabi_ddiv+0x16e> - 8008824: eba4 0405 sub.w r4, r4, r5 - 8008828: ea81 0e03 eor.w lr, r1, r3 - 800882c: ea52 3503 orrs.w r5, r2, r3, lsl #12 - 8008830: ea4f 3101 mov.w r1, r1, lsl #12 - 8008834: f000 8088 beq.w 8008948 <__aeabi_ddiv+0x144> - 8008838: ea4f 3303 mov.w r3, r3, lsl #12 - 800883c: f04f 5580 mov.w r5, #268435456 @ 0x10000000 - 8008840: ea45 1313 orr.w r3, r5, r3, lsr #4 - 8008844: ea43 6312 orr.w r3, r3, r2, lsr #24 - 8008848: ea4f 2202 mov.w r2, r2, lsl #8 - 800884c: ea45 1511 orr.w r5, r5, r1, lsr #4 - 8008850: ea45 6510 orr.w r5, r5, r0, lsr #24 - 8008854: ea4f 2600 mov.w r6, r0, lsl #8 - 8008858: f00e 4100 and.w r1, lr, #2147483648 @ 0x80000000 - 800885c: 429d cmp r5, r3 - 800885e: bf08 it eq - 8008860: 4296 cmpeq r6, r2 - 8008862: f144 04fd adc.w r4, r4, #253 @ 0xfd - 8008866: f504 7440 add.w r4, r4, #768 @ 0x300 - 800886a: d202 bcs.n 8008872 <__aeabi_ddiv+0x6e> - 800886c: 085b lsrs r3, r3, #1 - 800886e: ea4f 0232 mov.w r2, r2, rrx - 8008872: 1ab6 subs r6, r6, r2 - 8008874: eb65 0503 sbc.w r5, r5, r3 - 8008878: 085b lsrs r3, r3, #1 - 800887a: ea4f 0232 mov.w r2, r2, rrx - 800887e: f44f 1080 mov.w r0, #1048576 @ 0x100000 - 8008882: f44f 2c00 mov.w ip, #524288 @ 0x80000 - 8008886: ebb6 0e02 subs.w lr, r6, r2 - 800888a: eb75 0e03 sbcs.w lr, r5, r3 - 800888e: bf22 ittt cs - 8008890: 1ab6 subcs r6, r6, r2 - 8008892: 4675 movcs r5, lr - 8008894: ea40 000c orrcs.w r0, r0, ip - 8008898: 085b lsrs r3, r3, #1 - 800889a: ea4f 0232 mov.w r2, r2, rrx - 800889e: ebb6 0e02 subs.w lr, r6, r2 - 80088a2: eb75 0e03 sbcs.w lr, r5, r3 - 80088a6: bf22 ittt cs - 80088a8: 1ab6 subcs r6, r6, r2 - 80088aa: 4675 movcs r5, lr - 80088ac: ea40 005c orrcs.w r0, r0, ip, lsr #1 - 80088b0: 085b lsrs r3, r3, #1 - 80088b2: ea4f 0232 mov.w r2, r2, rrx - 80088b6: ebb6 0e02 subs.w lr, r6, r2 - 80088ba: eb75 0e03 sbcs.w lr, r5, r3 - 80088be: bf22 ittt cs - 80088c0: 1ab6 subcs r6, r6, r2 - 80088c2: 4675 movcs r5, lr - 80088c4: ea40 009c orrcs.w r0, r0, ip, lsr #2 - 80088c8: 085b lsrs r3, r3, #1 - 80088ca: ea4f 0232 mov.w r2, r2, rrx - 80088ce: ebb6 0e02 subs.w lr, r6, r2 - 80088d2: eb75 0e03 sbcs.w lr, r5, r3 - 80088d6: bf22 ittt cs - 80088d8: 1ab6 subcs r6, r6, r2 - 80088da: 4675 movcs r5, lr - 80088dc: ea40 00dc orrcs.w r0, r0, ip, lsr #3 - 80088e0: ea55 0e06 orrs.w lr, r5, r6 - 80088e4: d018 beq.n 8008918 <__aeabi_ddiv+0x114> - 80088e6: ea4f 1505 mov.w r5, r5, lsl #4 - 80088ea: ea45 7516 orr.w r5, r5, r6, lsr #28 - 80088ee: ea4f 1606 mov.w r6, r6, lsl #4 - 80088f2: ea4f 03c3 mov.w r3, r3, lsl #3 - 80088f6: ea43 7352 orr.w r3, r3, r2, lsr #29 - 80088fa: ea4f 02c2 mov.w r2, r2, lsl #3 - 80088fe: ea5f 1c1c movs.w ip, ip, lsr #4 - 8008902: d1c0 bne.n 8008886 <__aeabi_ddiv+0x82> - 8008904: f411 1f80 tst.w r1, #1048576 @ 0x100000 - 8008908: d10b bne.n 8008922 <__aeabi_ddiv+0x11e> - 800890a: ea41 0100 orr.w r1, r1, r0 - 800890e: f04f 0000 mov.w r0, #0 - 8008912: f04f 4c00 mov.w ip, #2147483648 @ 0x80000000 - 8008916: e7b6 b.n 8008886 <__aeabi_ddiv+0x82> - 8008918: f411 1f80 tst.w r1, #1048576 @ 0x100000 - 800891c: bf04 itt eq - 800891e: 4301 orreq r1, r0 - 8008920: 2000 moveq r0, #0 - 8008922: f1b4 0cfd subs.w ip, r4, #253 @ 0xfd - 8008926: bf88 it hi - 8008928: f5bc 6fe0 cmphi.w ip, #1792 @ 0x700 - 800892c: f63f aeaf bhi.w 800868e <__aeabi_dmul+0xde> - 8008930: ebb5 0c03 subs.w ip, r5, r3 - 8008934: bf04 itt eq - 8008936: ebb6 0c02 subseq.w ip, r6, r2 - 800893a: ea5f 0c50 movseq.w ip, r0, lsr #1 - 800893e: f150 0000 adcs.w r0, r0, #0 - 8008942: eb41 5104 adc.w r1, r1, r4, lsl #20 - 8008946: bd70 pop {r4, r5, r6, pc} - 8008948: f00e 4e00 and.w lr, lr, #2147483648 @ 0x80000000 - 800894c: ea4e 3111 orr.w r1, lr, r1, lsr #12 - 8008950: eb14 045c adds.w r4, r4, ip, lsr #1 - 8008954: bfc2 ittt gt - 8008956: ebd4 050c rsbsgt r5, r4, ip - 800895a: ea41 5104 orrgt.w r1, r1, r4, lsl #20 - 800895e: bd70 popgt {r4, r5, r6, pc} - 8008960: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 - 8008964: f04f 0e00 mov.w lr, #0 - 8008968: 3c01 subs r4, #1 - 800896a: e690 b.n 800868e <__aeabi_dmul+0xde> - 800896c: ea45 0e06 orr.w lr, r5, r6 - 8008970: e68d b.n 800868e <__aeabi_dmul+0xde> - 8008972: ea0c 5513 and.w r5, ip, r3, lsr #20 - 8008976: ea94 0f0c teq r4, ip - 800897a: bf08 it eq - 800897c: ea95 0f0c teqeq r5, ip - 8008980: f43f af3b beq.w 80087fa <__aeabi_dmul+0x24a> - 8008984: ea94 0f0c teq r4, ip - 8008988: d10a bne.n 80089a0 <__aeabi_ddiv+0x19c> - 800898a: ea50 3401 orrs.w r4, r0, r1, lsl #12 - 800898e: f47f af34 bne.w 80087fa <__aeabi_dmul+0x24a> - 8008992: ea95 0f0c teq r5, ip - 8008996: f47f af25 bne.w 80087e4 <__aeabi_dmul+0x234> - 800899a: 4610 mov r0, r2 - 800899c: 4619 mov r1, r3 - 800899e: e72c b.n 80087fa <__aeabi_dmul+0x24a> - 80089a0: ea95 0f0c teq r5, ip - 80089a4: d106 bne.n 80089b4 <__aeabi_ddiv+0x1b0> - 80089a6: ea52 3503 orrs.w r5, r2, r3, lsl #12 - 80089aa: f43f aefd beq.w 80087a8 <__aeabi_dmul+0x1f8> - 80089ae: 4610 mov r0, r2 - 80089b0: 4619 mov r1, r3 - 80089b2: e722 b.n 80087fa <__aeabi_dmul+0x24a> - 80089b4: ea50 0641 orrs.w r6, r0, r1, lsl #1 - 80089b8: bf18 it ne - 80089ba: ea52 0643 orrsne.w r6, r2, r3, lsl #1 - 80089be: f47f aec5 bne.w 800874c <__aeabi_dmul+0x19c> - 80089c2: ea50 0441 orrs.w r4, r0, r1, lsl #1 - 80089c6: f47f af0d bne.w 80087e4 <__aeabi_dmul+0x234> - 80089ca: ea52 0543 orrs.w r5, r2, r3, lsl #1 - 80089ce: f47f aeeb bne.w 80087a8 <__aeabi_dmul+0x1f8> - 80089d2: e712 b.n 80087fa <__aeabi_dmul+0x24a> - -080089d4 <__gedf2>: - 80089d4: f04f 3cff mov.w ip, #4294967295 @ 0xffffffff - 80089d8: e006 b.n 80089e8 <__cmpdf2+0x4> - 80089da: bf00 nop - -080089dc <__ledf2>: - 80089dc: f04f 0c01 mov.w ip, #1 - 80089e0: e002 b.n 80089e8 <__cmpdf2+0x4> - 80089e2: bf00 nop - -080089e4 <__cmpdf2>: - 80089e4: f04f 0c01 mov.w ip, #1 - 80089e8: f84d cd04 str.w ip, [sp, #-4]! - 80089ec: ea4f 0c41 mov.w ip, r1, lsl #1 - 80089f0: ea7f 5c6c mvns.w ip, ip, asr #21 - 80089f4: ea4f 0c43 mov.w ip, r3, lsl #1 - 80089f8: bf18 it ne - 80089fa: ea7f 5c6c mvnsne.w ip, ip, asr #21 - 80089fe: d01b beq.n 8008a38 <__cmpdf2+0x54> - 8008a00: b001 add sp, #4 - 8008a02: ea50 0c41 orrs.w ip, r0, r1, lsl #1 - 8008a06: bf0c ite eq - 8008a08: ea52 0c43 orrseq.w ip, r2, r3, lsl #1 - 8008a0c: ea91 0f03 teqne r1, r3 - 8008a10: bf02 ittt eq - 8008a12: ea90 0f02 teqeq r0, r2 - 8008a16: 2000 moveq r0, #0 - 8008a18: 4770 bxeq lr - 8008a1a: f110 0f00 cmn.w r0, #0 - 8008a1e: ea91 0f03 teq r1, r3 - 8008a22: bf58 it pl - 8008a24: 4299 cmppl r1, r3 - 8008a26: bf08 it eq - 8008a28: 4290 cmpeq r0, r2 - 8008a2a: bf2c ite cs - 8008a2c: 17d8 asrcs r0, r3, #31 - 8008a2e: ea6f 70e3 mvncc.w r0, r3, asr #31 - 8008a32: f040 0001 orr.w r0, r0, #1 - 8008a36: 4770 bx lr - 8008a38: ea4f 0c41 mov.w ip, r1, lsl #1 - 8008a3c: ea7f 5c6c mvns.w ip, ip, asr #21 - 8008a40: d102 bne.n 8008a48 <__cmpdf2+0x64> - 8008a42: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - 8008a46: d107 bne.n 8008a58 <__cmpdf2+0x74> - 8008a48: ea4f 0c43 mov.w ip, r3, lsl #1 - 8008a4c: ea7f 5c6c mvns.w ip, ip, asr #21 - 8008a50: d1d6 bne.n 8008a00 <__cmpdf2+0x1c> - 8008a52: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - 8008a56: d0d3 beq.n 8008a00 <__cmpdf2+0x1c> - 8008a58: f85d 0b04 ldr.w r0, [sp], #4 - 8008a5c: 4770 bx lr - 8008a5e: bf00 nop - -08008a60 <__aeabi_cdrcmple>: - 8008a60: 4684 mov ip, r0 - 8008a62: 4610 mov r0, r2 - 8008a64: 4662 mov r2, ip - 8008a66: 468c mov ip, r1 - 8008a68: 4619 mov r1, r3 - 8008a6a: 4663 mov r3, ip - 8008a6c: e000 b.n 8008a70 <__aeabi_cdcmpeq> - 8008a6e: bf00 nop - -08008a70 <__aeabi_cdcmpeq>: - 8008a70: b501 push {r0, lr} - 8008a72: f7ff ffb7 bl 80089e4 <__cmpdf2> - 8008a76: 2800 cmp r0, #0 - 8008a78: bf48 it mi - 8008a7a: f110 0f00 cmnmi.w r0, #0 - 8008a7e: bd01 pop {r0, pc} - -08008a80 <__aeabi_dcmpeq>: - 8008a80: f84d ed08 str.w lr, [sp, #-8]! - 8008a84: f7ff fff4 bl 8008a70 <__aeabi_cdcmpeq> - 8008a88: bf0c ite eq - 8008a8a: 2001 moveq r0, #1 - 8008a8c: 2000 movne r0, #0 - 8008a8e: f85d fb08 ldr.w pc, [sp], #8 - 8008a92: bf00 nop - -08008a94 <__aeabi_dcmplt>: - 8008a94: f84d ed08 str.w lr, [sp, #-8]! - 8008a98: f7ff ffea bl 8008a70 <__aeabi_cdcmpeq> - 8008a9c: bf34 ite cc - 8008a9e: 2001 movcc r0, #1 - 8008aa0: 2000 movcs r0, #0 - 8008aa2: f85d fb08 ldr.w pc, [sp], #8 - 8008aa6: bf00 nop - -08008aa8 <__aeabi_dcmple>: - 8008aa8: f84d ed08 str.w lr, [sp, #-8]! - 8008aac: f7ff ffe0 bl 8008a70 <__aeabi_cdcmpeq> - 8008ab0: bf94 ite ls - 8008ab2: 2001 movls r0, #1 - 8008ab4: 2000 movhi r0, #0 - 8008ab6: f85d fb08 ldr.w pc, [sp], #8 - 8008aba: bf00 nop - -08008abc <__aeabi_dcmpge>: - 8008abc: f84d ed08 str.w lr, [sp, #-8]! - 8008ac0: f7ff ffce bl 8008a60 <__aeabi_cdrcmple> - 8008ac4: bf94 ite ls - 8008ac6: 2001 movls r0, #1 - 8008ac8: 2000 movhi r0, #0 - 8008aca: f85d fb08 ldr.w pc, [sp], #8 - 8008ace: bf00 nop - -08008ad0 <__aeabi_dcmpgt>: - 8008ad0: f84d ed08 str.w lr, [sp, #-8]! - 8008ad4: f7ff ffc4 bl 8008a60 <__aeabi_cdrcmple> - 8008ad8: bf34 ite cc - 8008ada: 2001 movcc r0, #1 - 8008adc: 2000 movcs r0, #0 - 8008ade: f85d fb08 ldr.w pc, [sp], #8 - 8008ae2: bf00 nop - -08008ae4 <__aeabi_dcmpun>: - 8008ae4: ea4f 0c41 mov.w ip, r1, lsl #1 - 8008ae8: ea7f 5c6c mvns.w ip, ip, asr #21 - 8008aec: d102 bne.n 8008af4 <__aeabi_dcmpun+0x10> - 8008aee: ea50 3c01 orrs.w ip, r0, r1, lsl #12 - 8008af2: d10a bne.n 8008b0a <__aeabi_dcmpun+0x26> - 8008af4: ea4f 0c43 mov.w ip, r3, lsl #1 - 8008af8: ea7f 5c6c mvns.w ip, ip, asr #21 - 8008afc: d102 bne.n 8008b04 <__aeabi_dcmpun+0x20> - 8008afe: ea52 3c03 orrs.w ip, r2, r3, lsl #12 - 8008b02: d102 bne.n 8008b0a <__aeabi_dcmpun+0x26> - 8008b04: f04f 0000 mov.w r0, #0 - 8008b08: 4770 bx lr - 8008b0a: f04f 0001 mov.w r0, #1 - 8008b0e: 4770 bx lr - -08008b10 <__aeabi_d2iz>: - 8008b10: ea4f 0241 mov.w r2, r1, lsl #1 - 8008b14: f512 1200 adds.w r2, r2, #2097152 @ 0x200000 - 8008b18: d215 bcs.n 8008b46 <__aeabi_d2iz+0x36> - 8008b1a: d511 bpl.n 8008b40 <__aeabi_d2iz+0x30> - 8008b1c: f46f 7378 mvn.w r3, #992 @ 0x3e0 - 8008b20: ebb3 5262 subs.w r2, r3, r2, asr #21 - 8008b24: d912 bls.n 8008b4c <__aeabi_d2iz+0x3c> - 8008b26: ea4f 23c1 mov.w r3, r1, lsl #11 - 8008b2a: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000 - 8008b2e: ea43 5350 orr.w r3, r3, r0, lsr #21 - 8008b32: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 - 8008b36: fa23 f002 lsr.w r0, r3, r2 - 8008b3a: bf18 it ne - 8008b3c: 4240 negne r0, r0 - 8008b3e: 4770 bx lr - 8008b40: f04f 0000 mov.w r0, #0 - 8008b44: 4770 bx lr - 8008b46: ea50 3001 orrs.w r0, r0, r1, lsl #12 - 8008b4a: d105 bne.n 8008b58 <__aeabi_d2iz+0x48> - 8008b4c: f011 4000 ands.w r0, r1, #2147483648 @ 0x80000000 - 8008b50: bf08 it eq - 8008b52: f06f 4000 mvneq.w r0, #2147483648 @ 0x80000000 - 8008b56: 4770 bx lr - 8008b58: f04f 0000 mov.w r0, #0 - 8008b5c: 4770 bx lr - 8008b5e: bf00 nop - -08008b60 <__aeabi_d2f>: - 8008b60: ea4f 0241 mov.w r2, r1, lsl #1 - 8008b64: f1b2 43e0 subs.w r3, r2, #1879048192 @ 0x70000000 - 8008b68: bf24 itt cs - 8008b6a: f5b3 1c00 subscs.w ip, r3, #2097152 @ 0x200000 - 8008b6e: f1dc 5cfe rsbscs ip, ip, #532676608 @ 0x1fc00000 - 8008b72: d90d bls.n 8008b90 <__aeabi_d2f+0x30> - 8008b74: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 - 8008b78: ea4f 02c0 mov.w r2, r0, lsl #3 - 8008b7c: ea4c 7050 orr.w r0, ip, r0, lsr #29 - 8008b80: f1b2 4f00 cmp.w r2, #2147483648 @ 0x80000000 - 8008b84: eb40 0083 adc.w r0, r0, r3, lsl #2 - 8008b88: bf08 it eq - 8008b8a: f020 0001 biceq.w r0, r0, #1 - 8008b8e: 4770 bx lr - 8008b90: f011 4f80 tst.w r1, #1073741824 @ 0x40000000 - 8008b94: d121 bne.n 8008bda <__aeabi_d2f+0x7a> - 8008b96: f113 7238 adds.w r2, r3, #48234496 @ 0x2e00000 - 8008b9a: bfbc itt lt - 8008b9c: f001 4000 andlt.w r0, r1, #2147483648 @ 0x80000000 - 8008ba0: 4770 bxlt lr - 8008ba2: f441 1180 orr.w r1, r1, #1048576 @ 0x100000 - 8008ba6: ea4f 5252 mov.w r2, r2, lsr #21 - 8008baa: f1c2 0218 rsb r2, r2, #24 - 8008bae: f1c2 0c20 rsb ip, r2, #32 - 8008bb2: fa10 f30c lsls.w r3, r0, ip - 8008bb6: fa20 f002 lsr.w r0, r0, r2 - 8008bba: bf18 it ne - 8008bbc: f040 0001 orrne.w r0, r0, #1 - 8008bc0: ea4f 23c1 mov.w r3, r1, lsl #11 - 8008bc4: ea4f 23d3 mov.w r3, r3, lsr #11 - 8008bc8: fa03 fc0c lsl.w ip, r3, ip - 8008bcc: ea40 000c orr.w r0, r0, ip - 8008bd0: fa23 f302 lsr.w r3, r3, r2 - 8008bd4: ea4f 0343 mov.w r3, r3, lsl #1 - 8008bd8: e7cc b.n 8008b74 <__aeabi_d2f+0x14> - 8008bda: ea7f 5362 mvns.w r3, r2, asr #21 - 8008bde: d107 bne.n 8008bf0 <__aeabi_d2f+0x90> - 8008be0: ea50 3301 orrs.w r3, r0, r1, lsl #12 - 8008be4: bf1e ittt ne - 8008be6: f04f 40fe movne.w r0, #2130706432 @ 0x7f000000 - 8008bea: f440 0040 orrne.w r0, r0, #12582912 @ 0xc00000 - 8008bee: 4770 bxne lr - 8008bf0: f001 4000 and.w r0, r1, #2147483648 @ 0x80000000 - 8008bf4: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 - 8008bf8: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8008bfc: 4770 bx lr - 8008bfe: bf00 nop - -08008c00 <__aeabi_frsub>: - 8008c00: f080 4000 eor.w r0, r0, #2147483648 @ 0x80000000 - 8008c04: e002 b.n 8008c0c <__addsf3> - 8008c06: bf00 nop - -08008c08 <__aeabi_fsub>: - 8008c08: f081 4100 eor.w r1, r1, #2147483648 @ 0x80000000 - -08008c0c <__addsf3>: - 8008c0c: 0042 lsls r2, r0, #1 - 8008c0e: bf1f itttt ne - 8008c10: ea5f 0341 movsne.w r3, r1, lsl #1 - 8008c14: ea92 0f03 teqne r2, r3 - 8008c18: ea7f 6c22 mvnsne.w ip, r2, asr #24 - 8008c1c: ea7f 6c23 mvnsne.w ip, r3, asr #24 - 8008c20: d06a beq.n 8008cf8 <__addsf3+0xec> - 8008c22: ea4f 6212 mov.w r2, r2, lsr #24 - 8008c26: ebd2 6313 rsbs r3, r2, r3, lsr #24 - 8008c2a: bfc1 itttt gt - 8008c2c: 18d2 addgt r2, r2, r3 - 8008c2e: 4041 eorgt r1, r0 - 8008c30: 4048 eorgt r0, r1 - 8008c32: 4041 eorgt r1, r0 - 8008c34: bfb8 it lt - 8008c36: 425b neglt r3, r3 - 8008c38: 2b19 cmp r3, #25 - 8008c3a: bf88 it hi - 8008c3c: 4770 bxhi lr - 8008c3e: f010 4f00 tst.w r0, #2147483648 @ 0x80000000 - 8008c42: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8008c46: f020 407f bic.w r0, r0, #4278190080 @ 0xff000000 - 8008c4a: bf18 it ne - 8008c4c: 4240 negne r0, r0 - 8008c4e: f011 4f00 tst.w r1, #2147483648 @ 0x80000000 - 8008c52: f441 0100 orr.w r1, r1, #8388608 @ 0x800000 - 8008c56: f021 417f bic.w r1, r1, #4278190080 @ 0xff000000 - 8008c5a: bf18 it ne - 8008c5c: 4249 negne r1, r1 - 8008c5e: ea92 0f03 teq r2, r3 - 8008c62: d03f beq.n 8008ce4 <__addsf3+0xd8> - 8008c64: f1a2 0201 sub.w r2, r2, #1 - 8008c68: fa41 fc03 asr.w ip, r1, r3 - 8008c6c: eb10 000c adds.w r0, r0, ip - 8008c70: f1c3 0320 rsb r3, r3, #32 - 8008c74: fa01 f103 lsl.w r1, r1, r3 - 8008c78: f000 4300 and.w r3, r0, #2147483648 @ 0x80000000 - 8008c7c: d502 bpl.n 8008c84 <__addsf3+0x78> - 8008c7e: 4249 negs r1, r1 - 8008c80: eb60 0040 sbc.w r0, r0, r0, lsl #1 - 8008c84: f5b0 0f00 cmp.w r0, #8388608 @ 0x800000 - 8008c88: d313 bcc.n 8008cb2 <__addsf3+0xa6> - 8008c8a: f1b0 7f80 cmp.w r0, #16777216 @ 0x1000000 - 8008c8e: d306 bcc.n 8008c9e <__addsf3+0x92> - 8008c90: 0840 lsrs r0, r0, #1 - 8008c92: ea4f 0131 mov.w r1, r1, rrx - 8008c96: f102 0201 add.w r2, r2, #1 - 8008c9a: 2afe cmp r2, #254 @ 0xfe - 8008c9c: d251 bcs.n 8008d42 <__addsf3+0x136> - 8008c9e: f1b1 4f00 cmp.w r1, #2147483648 @ 0x80000000 - 8008ca2: eb40 50c2 adc.w r0, r0, r2, lsl #23 - 8008ca6: bf08 it eq - 8008ca8: f020 0001 biceq.w r0, r0, #1 - 8008cac: ea40 0003 orr.w r0, r0, r3 - 8008cb0: 4770 bx lr - 8008cb2: 0049 lsls r1, r1, #1 - 8008cb4: eb40 0000 adc.w r0, r0, r0 - 8008cb8: 3a01 subs r2, #1 - 8008cba: bf28 it cs - 8008cbc: f5b0 0f00 cmpcs.w r0, #8388608 @ 0x800000 - 8008cc0: d2ed bcs.n 8008c9e <__addsf3+0x92> - 8008cc2: fab0 fc80 clz ip, r0 - 8008cc6: f1ac 0c08 sub.w ip, ip, #8 - 8008cca: ebb2 020c subs.w r2, r2, ip - 8008cce: fa00 f00c lsl.w r0, r0, ip - 8008cd2: bfaa itet ge - 8008cd4: eb00 50c2 addge.w r0, r0, r2, lsl #23 - 8008cd8: 4252 neglt r2, r2 - 8008cda: 4318 orrge r0, r3 - 8008cdc: bfbc itt lt - 8008cde: 40d0 lsrlt r0, r2 - 8008ce0: 4318 orrlt r0, r3 - 8008ce2: 4770 bx lr - 8008ce4: f092 0f00 teq r2, #0 - 8008ce8: f481 0100 eor.w r1, r1, #8388608 @ 0x800000 - 8008cec: bf06 itte eq - 8008cee: f480 0000 eoreq.w r0, r0, #8388608 @ 0x800000 - 8008cf2: 3201 addeq r2, #1 - 8008cf4: 3b01 subne r3, #1 - 8008cf6: e7b5 b.n 8008c64 <__addsf3+0x58> - 8008cf8: ea4f 0341 mov.w r3, r1, lsl #1 - 8008cfc: ea7f 6c22 mvns.w ip, r2, asr #24 - 8008d00: bf18 it ne - 8008d02: ea7f 6c23 mvnsne.w ip, r3, asr #24 - 8008d06: d021 beq.n 8008d4c <__addsf3+0x140> - 8008d08: ea92 0f03 teq r2, r3 - 8008d0c: d004 beq.n 8008d18 <__addsf3+0x10c> - 8008d0e: f092 0f00 teq r2, #0 - 8008d12: bf08 it eq - 8008d14: 4608 moveq r0, r1 - 8008d16: 4770 bx lr - 8008d18: ea90 0f01 teq r0, r1 - 8008d1c: bf1c itt ne - 8008d1e: 2000 movne r0, #0 - 8008d20: 4770 bxne lr - 8008d22: f012 4f7f tst.w r2, #4278190080 @ 0xff000000 - 8008d26: d104 bne.n 8008d32 <__addsf3+0x126> - 8008d28: 0040 lsls r0, r0, #1 - 8008d2a: bf28 it cs - 8008d2c: f040 4000 orrcs.w r0, r0, #2147483648 @ 0x80000000 - 8008d30: 4770 bx lr - 8008d32: f112 7200 adds.w r2, r2, #33554432 @ 0x2000000 - 8008d36: bf3c itt cc - 8008d38: f500 0000 addcc.w r0, r0, #8388608 @ 0x800000 - 8008d3c: 4770 bxcc lr - 8008d3e: f000 4300 and.w r3, r0, #2147483648 @ 0x80000000 - 8008d42: f043 40fe orr.w r0, r3, #2130706432 @ 0x7f000000 - 8008d46: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8008d4a: 4770 bx lr - 8008d4c: ea7f 6222 mvns.w r2, r2, asr #24 - 8008d50: bf16 itet ne - 8008d52: 4608 movne r0, r1 - 8008d54: ea7f 6323 mvnseq.w r3, r3, asr #24 - 8008d58: 4601 movne r1, r0 - 8008d5a: 0242 lsls r2, r0, #9 - 8008d5c: bf06 itte eq - 8008d5e: ea5f 2341 movseq.w r3, r1, lsl #9 - 8008d62: ea90 0f01 teqeq r0, r1 - 8008d66: f440 0080 orrne.w r0, r0, #4194304 @ 0x400000 - 8008d6a: 4770 bx lr - -08008d6c <__aeabi_ui2f>: - 8008d6c: f04f 0300 mov.w r3, #0 - 8008d70: e004 b.n 8008d7c <__aeabi_i2f+0x8> - 8008d72: bf00 nop - -08008d74 <__aeabi_i2f>: - 8008d74: f010 4300 ands.w r3, r0, #2147483648 @ 0x80000000 - 8008d78: bf48 it mi - 8008d7a: 4240 negmi r0, r0 - 8008d7c: ea5f 0c00 movs.w ip, r0 - 8008d80: bf08 it eq - 8008d82: 4770 bxeq lr - 8008d84: f043 4396 orr.w r3, r3, #1258291200 @ 0x4b000000 - 8008d88: 4601 mov r1, r0 - 8008d8a: f04f 0000 mov.w r0, #0 - 8008d8e: e01c b.n 8008dca <__aeabi_l2f+0x2a> - -08008d90 <__aeabi_ul2f>: - 8008d90: ea50 0201 orrs.w r2, r0, r1 - 8008d94: bf08 it eq - 8008d96: 4770 bxeq lr - 8008d98: f04f 0300 mov.w r3, #0 - 8008d9c: e00a b.n 8008db4 <__aeabi_l2f+0x14> - 8008d9e: bf00 nop - -08008da0 <__aeabi_l2f>: - 8008da0: ea50 0201 orrs.w r2, r0, r1 - 8008da4: bf08 it eq - 8008da6: 4770 bxeq lr - 8008da8: f011 4300 ands.w r3, r1, #2147483648 @ 0x80000000 - 8008dac: d502 bpl.n 8008db4 <__aeabi_l2f+0x14> - 8008dae: 4240 negs r0, r0 - 8008db0: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 8008db4: ea5f 0c01 movs.w ip, r1 - 8008db8: bf02 ittt eq - 8008dba: 4684 moveq ip, r0 - 8008dbc: 4601 moveq r1, r0 - 8008dbe: 2000 moveq r0, #0 - 8008dc0: f043 43b6 orr.w r3, r3, #1526726656 @ 0x5b000000 - 8008dc4: bf08 it eq - 8008dc6: f1a3 5380 subeq.w r3, r3, #268435456 @ 0x10000000 - 8008dca: f5a3 0300 sub.w r3, r3, #8388608 @ 0x800000 - 8008dce: fabc f28c clz r2, ip - 8008dd2: 3a08 subs r2, #8 - 8008dd4: eba3 53c2 sub.w r3, r3, r2, lsl #23 - 8008dd8: db10 blt.n 8008dfc <__aeabi_l2f+0x5c> - 8008dda: fa01 fc02 lsl.w ip, r1, r2 - 8008dde: 4463 add r3, ip - 8008de0: fa00 fc02 lsl.w ip, r0, r2 - 8008de4: f1c2 0220 rsb r2, r2, #32 - 8008de8: f1bc 4f00 cmp.w ip, #2147483648 @ 0x80000000 - 8008dec: fa20 f202 lsr.w r2, r0, r2 - 8008df0: eb43 0002 adc.w r0, r3, r2 - 8008df4: bf08 it eq - 8008df6: f020 0001 biceq.w r0, r0, #1 - 8008dfa: 4770 bx lr - 8008dfc: f102 0220 add.w r2, r2, #32 - 8008e00: fa01 fc02 lsl.w ip, r1, r2 - 8008e04: f1c2 0220 rsb r2, r2, #32 - 8008e08: ea50 004c orrs.w r0, r0, ip, lsl #1 - 8008e0c: fa21 f202 lsr.w r2, r1, r2 - 8008e10: eb43 0002 adc.w r0, r3, r2 - 8008e14: bf08 it eq - 8008e16: ea20 70dc biceq.w r0, r0, ip, lsr #31 - 8008e1a: 4770 bx lr - -08008e1c <__aeabi_fmul>: - 8008e1c: f04f 0cff mov.w ip, #255 @ 0xff - 8008e20: ea1c 52d0 ands.w r2, ip, r0, lsr #23 - 8008e24: bf1e ittt ne - 8008e26: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 - 8008e2a: ea92 0f0c teqne r2, ip - 8008e2e: ea93 0f0c teqne r3, ip - 8008e32: d06f beq.n 8008f14 <__aeabi_fmul+0xf8> - 8008e34: 441a add r2, r3 - 8008e36: ea80 0c01 eor.w ip, r0, r1 - 8008e3a: 0240 lsls r0, r0, #9 - 8008e3c: bf18 it ne - 8008e3e: ea5f 2141 movsne.w r1, r1, lsl #9 - 8008e42: d01e beq.n 8008e82 <__aeabi_fmul+0x66> - 8008e44: f04f 6300 mov.w r3, #134217728 @ 0x8000000 - 8008e48: ea43 1050 orr.w r0, r3, r0, lsr #5 - 8008e4c: ea43 1151 orr.w r1, r3, r1, lsr #5 - 8008e50: fba0 3101 umull r3, r1, r0, r1 - 8008e54: f00c 4000 and.w r0, ip, #2147483648 @ 0x80000000 - 8008e58: f5b1 0f00 cmp.w r1, #8388608 @ 0x800000 - 8008e5c: bf3e ittt cc - 8008e5e: 0049 lslcc r1, r1, #1 - 8008e60: ea41 71d3 orrcc.w r1, r1, r3, lsr #31 - 8008e64: 005b lslcc r3, r3, #1 - 8008e66: ea40 0001 orr.w r0, r0, r1 - 8008e6a: f162 027f sbc.w r2, r2, #127 @ 0x7f - 8008e6e: 2afd cmp r2, #253 @ 0xfd - 8008e70: d81d bhi.n 8008eae <__aeabi_fmul+0x92> - 8008e72: f1b3 4f00 cmp.w r3, #2147483648 @ 0x80000000 - 8008e76: eb40 50c2 adc.w r0, r0, r2, lsl #23 - 8008e7a: bf08 it eq - 8008e7c: f020 0001 biceq.w r0, r0, #1 - 8008e80: 4770 bx lr - 8008e82: f090 0f00 teq r0, #0 - 8008e86: f00c 4c00 and.w ip, ip, #2147483648 @ 0x80000000 - 8008e8a: bf08 it eq - 8008e8c: 0249 lsleq r1, r1, #9 - 8008e8e: ea4c 2050 orr.w r0, ip, r0, lsr #9 - 8008e92: ea40 2051 orr.w r0, r0, r1, lsr #9 - 8008e96: 3a7f subs r2, #127 @ 0x7f - 8008e98: bfc2 ittt gt - 8008e9a: f1d2 03ff rsbsgt r3, r2, #255 @ 0xff - 8008e9e: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 - 8008ea2: 4770 bxgt lr - 8008ea4: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8008ea8: f04f 0300 mov.w r3, #0 - 8008eac: 3a01 subs r2, #1 - 8008eae: dc5d bgt.n 8008f6c <__aeabi_fmul+0x150> - 8008eb0: f112 0f19 cmn.w r2, #25 - 8008eb4: bfdc itt le - 8008eb6: f000 4000 andle.w r0, r0, #2147483648 @ 0x80000000 - 8008eba: 4770 bxle lr - 8008ebc: f1c2 0200 rsb r2, r2, #0 - 8008ec0: 0041 lsls r1, r0, #1 - 8008ec2: fa21 f102 lsr.w r1, r1, r2 - 8008ec6: f1c2 0220 rsb r2, r2, #32 - 8008eca: fa00 fc02 lsl.w ip, r0, r2 - 8008ece: ea5f 0031 movs.w r0, r1, rrx - 8008ed2: f140 0000 adc.w r0, r0, #0 - 8008ed6: ea53 034c orrs.w r3, r3, ip, lsl #1 - 8008eda: bf08 it eq - 8008edc: ea20 70dc biceq.w r0, r0, ip, lsr #31 - 8008ee0: 4770 bx lr - 8008ee2: f092 0f00 teq r2, #0 - 8008ee6: f000 4c00 and.w ip, r0, #2147483648 @ 0x80000000 - 8008eea: bf02 ittt eq - 8008eec: 0040 lsleq r0, r0, #1 - 8008eee: f410 0f00 tsteq.w r0, #8388608 @ 0x800000 - 8008ef2: 3a01 subeq r2, #1 - 8008ef4: d0f9 beq.n 8008eea <__aeabi_fmul+0xce> - 8008ef6: ea40 000c orr.w r0, r0, ip - 8008efa: f093 0f00 teq r3, #0 - 8008efe: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 - 8008f02: bf02 ittt eq - 8008f04: 0049 lsleq r1, r1, #1 - 8008f06: f411 0f00 tsteq.w r1, #8388608 @ 0x800000 - 8008f0a: 3b01 subeq r3, #1 - 8008f0c: d0f9 beq.n 8008f02 <__aeabi_fmul+0xe6> - 8008f0e: ea41 010c orr.w r1, r1, ip - 8008f12: e78f b.n 8008e34 <__aeabi_fmul+0x18> - 8008f14: ea0c 53d1 and.w r3, ip, r1, lsr #23 - 8008f18: ea92 0f0c teq r2, ip - 8008f1c: bf18 it ne - 8008f1e: ea93 0f0c teqne r3, ip - 8008f22: d00a beq.n 8008f3a <__aeabi_fmul+0x11e> - 8008f24: f030 4c00 bics.w ip, r0, #2147483648 @ 0x80000000 - 8008f28: bf18 it ne - 8008f2a: f031 4c00 bicsne.w ip, r1, #2147483648 @ 0x80000000 - 8008f2e: d1d8 bne.n 8008ee2 <__aeabi_fmul+0xc6> - 8008f30: ea80 0001 eor.w r0, r0, r1 - 8008f34: f000 4000 and.w r0, r0, #2147483648 @ 0x80000000 - 8008f38: 4770 bx lr - 8008f3a: f090 0f00 teq r0, #0 - 8008f3e: bf17 itett ne - 8008f40: f090 4f00 teqne r0, #2147483648 @ 0x80000000 - 8008f44: 4608 moveq r0, r1 - 8008f46: f091 0f00 teqne r1, #0 - 8008f4a: f091 4f00 teqne r1, #2147483648 @ 0x80000000 - 8008f4e: d014 beq.n 8008f7a <__aeabi_fmul+0x15e> - 8008f50: ea92 0f0c teq r2, ip - 8008f54: d101 bne.n 8008f5a <__aeabi_fmul+0x13e> - 8008f56: 0242 lsls r2, r0, #9 - 8008f58: d10f bne.n 8008f7a <__aeabi_fmul+0x15e> - 8008f5a: ea93 0f0c teq r3, ip - 8008f5e: d103 bne.n 8008f68 <__aeabi_fmul+0x14c> - 8008f60: 024b lsls r3, r1, #9 - 8008f62: bf18 it ne - 8008f64: 4608 movne r0, r1 - 8008f66: d108 bne.n 8008f7a <__aeabi_fmul+0x15e> - 8008f68: ea80 0001 eor.w r0, r0, r1 - 8008f6c: f000 4000 and.w r0, r0, #2147483648 @ 0x80000000 - 8008f70: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 - 8008f74: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8008f78: 4770 bx lr - 8008f7a: f040 40fe orr.w r0, r0, #2130706432 @ 0x7f000000 - 8008f7e: f440 0040 orr.w r0, r0, #12582912 @ 0xc00000 - 8008f82: 4770 bx lr - -08008f84 <__aeabi_fdiv>: - 8008f84: f04f 0cff mov.w ip, #255 @ 0xff - 8008f88: ea1c 52d0 ands.w r2, ip, r0, lsr #23 - 8008f8c: bf1e ittt ne - 8008f8e: ea1c 53d1 andsne.w r3, ip, r1, lsr #23 - 8008f92: ea92 0f0c teqne r2, ip - 8008f96: ea93 0f0c teqne r3, ip - 8008f9a: d069 beq.n 8009070 <__aeabi_fdiv+0xec> - 8008f9c: eba2 0203 sub.w r2, r2, r3 - 8008fa0: ea80 0c01 eor.w ip, r0, r1 - 8008fa4: 0249 lsls r1, r1, #9 - 8008fa6: ea4f 2040 mov.w r0, r0, lsl #9 - 8008faa: d037 beq.n 800901c <__aeabi_fdiv+0x98> - 8008fac: f04f 5380 mov.w r3, #268435456 @ 0x10000000 - 8008fb0: ea43 1111 orr.w r1, r3, r1, lsr #4 - 8008fb4: ea43 1310 orr.w r3, r3, r0, lsr #4 - 8008fb8: f00c 4000 and.w r0, ip, #2147483648 @ 0x80000000 - 8008fbc: 428b cmp r3, r1 - 8008fbe: bf38 it cc - 8008fc0: 005b lslcc r3, r3, #1 - 8008fc2: f142 027d adc.w r2, r2, #125 @ 0x7d - 8008fc6: f44f 0c00 mov.w ip, #8388608 @ 0x800000 - 8008fca: 428b cmp r3, r1 - 8008fcc: bf24 itt cs - 8008fce: 1a5b subcs r3, r3, r1 - 8008fd0: ea40 000c orrcs.w r0, r0, ip - 8008fd4: ebb3 0f51 cmp.w r3, r1, lsr #1 - 8008fd8: bf24 itt cs - 8008fda: eba3 0351 subcs.w r3, r3, r1, lsr #1 - 8008fde: ea40 005c orrcs.w r0, r0, ip, lsr #1 - 8008fe2: ebb3 0f91 cmp.w r3, r1, lsr #2 - 8008fe6: bf24 itt cs - 8008fe8: eba3 0391 subcs.w r3, r3, r1, lsr #2 - 8008fec: ea40 009c orrcs.w r0, r0, ip, lsr #2 - 8008ff0: ebb3 0fd1 cmp.w r3, r1, lsr #3 - 8008ff4: bf24 itt cs - 8008ff6: eba3 03d1 subcs.w r3, r3, r1, lsr #3 - 8008ffa: ea40 00dc orrcs.w r0, r0, ip, lsr #3 - 8008ffe: 011b lsls r3, r3, #4 - 8009000: bf18 it ne - 8009002: ea5f 1c1c movsne.w ip, ip, lsr #4 - 8009006: d1e0 bne.n 8008fca <__aeabi_fdiv+0x46> - 8009008: 2afd cmp r2, #253 @ 0xfd - 800900a: f63f af50 bhi.w 8008eae <__aeabi_fmul+0x92> - 800900e: 428b cmp r3, r1 - 8009010: eb40 50c2 adc.w r0, r0, r2, lsl #23 - 8009014: bf08 it eq - 8009016: f020 0001 biceq.w r0, r0, #1 - 800901a: 4770 bx lr - 800901c: f00c 4c00 and.w ip, ip, #2147483648 @ 0x80000000 - 8009020: ea4c 2050 orr.w r0, ip, r0, lsr #9 - 8009024: 327f adds r2, #127 @ 0x7f - 8009026: bfc2 ittt gt - 8009028: f1d2 03ff rsbsgt r3, r2, #255 @ 0xff - 800902c: ea40 50c2 orrgt.w r0, r0, r2, lsl #23 - 8009030: 4770 bxgt lr - 8009032: f440 0000 orr.w r0, r0, #8388608 @ 0x800000 - 8009036: f04f 0300 mov.w r3, #0 - 800903a: 3a01 subs r2, #1 - 800903c: e737 b.n 8008eae <__aeabi_fmul+0x92> - 800903e: f092 0f00 teq r2, #0 - 8009042: f000 4c00 and.w ip, r0, #2147483648 @ 0x80000000 - 8009046: bf02 ittt eq - 8009048: 0040 lsleq r0, r0, #1 - 800904a: f410 0f00 tsteq.w r0, #8388608 @ 0x800000 - 800904e: 3a01 subeq r2, #1 - 8009050: d0f9 beq.n 8009046 <__aeabi_fdiv+0xc2> - 8009052: ea40 000c orr.w r0, r0, ip - 8009056: f093 0f00 teq r3, #0 - 800905a: f001 4c00 and.w ip, r1, #2147483648 @ 0x80000000 - 800905e: bf02 ittt eq - 8009060: 0049 lsleq r1, r1, #1 - 8009062: f411 0f00 tsteq.w r1, #8388608 @ 0x800000 - 8009066: 3b01 subeq r3, #1 - 8009068: d0f9 beq.n 800905e <__aeabi_fdiv+0xda> - 800906a: ea41 010c orr.w r1, r1, ip - 800906e: e795 b.n 8008f9c <__aeabi_fdiv+0x18> - 8009070: ea0c 53d1 and.w r3, ip, r1, lsr #23 - 8009074: ea92 0f0c teq r2, ip - 8009078: d108 bne.n 800908c <__aeabi_fdiv+0x108> - 800907a: 0242 lsls r2, r0, #9 - 800907c: f47f af7d bne.w 8008f7a <__aeabi_fmul+0x15e> - 8009080: ea93 0f0c teq r3, ip - 8009084: f47f af70 bne.w 8008f68 <__aeabi_fmul+0x14c> - 8009088: 4608 mov r0, r1 - 800908a: e776 b.n 8008f7a <__aeabi_fmul+0x15e> - 800908c: ea93 0f0c teq r3, ip - 8009090: d104 bne.n 800909c <__aeabi_fdiv+0x118> - 8009092: 024b lsls r3, r1, #9 - 8009094: f43f af4c beq.w 8008f30 <__aeabi_fmul+0x114> - 8009098: 4608 mov r0, r1 - 800909a: e76e b.n 8008f7a <__aeabi_fmul+0x15e> - 800909c: f030 4c00 bics.w ip, r0, #2147483648 @ 0x80000000 - 80090a0: bf18 it ne - 80090a2: f031 4c00 bicsne.w ip, r1, #2147483648 @ 0x80000000 - 80090a6: d1ca bne.n 800903e <__aeabi_fdiv+0xba> - 80090a8: f030 4200 bics.w r2, r0, #2147483648 @ 0x80000000 - 80090ac: f47f af5c bne.w 8008f68 <__aeabi_fmul+0x14c> - 80090b0: f031 4300 bics.w r3, r1, #2147483648 @ 0x80000000 - 80090b4: f47f af3c bne.w 8008f30 <__aeabi_fmul+0x114> - 80090b8: e75f b.n 8008f7a <__aeabi_fmul+0x15e> - 80090ba: bf00 nop - -080090bc <__gesf2>: - 80090bc: f04f 3cff mov.w ip, #4294967295 @ 0xffffffff - 80090c0: e006 b.n 80090d0 <__cmpsf2+0x4> - 80090c2: bf00 nop - -080090c4 <__lesf2>: - 80090c4: f04f 0c01 mov.w ip, #1 - 80090c8: e002 b.n 80090d0 <__cmpsf2+0x4> - 80090ca: bf00 nop - -080090cc <__cmpsf2>: - 80090cc: f04f 0c01 mov.w ip, #1 - 80090d0: f84d cd04 str.w ip, [sp, #-4]! - 80090d4: ea4f 0240 mov.w r2, r0, lsl #1 - 80090d8: ea4f 0341 mov.w r3, r1, lsl #1 - 80090dc: ea7f 6c22 mvns.w ip, r2, asr #24 - 80090e0: bf18 it ne - 80090e2: ea7f 6c23 mvnsne.w ip, r3, asr #24 - 80090e6: d011 beq.n 800910c <__cmpsf2+0x40> - 80090e8: b001 add sp, #4 - 80090ea: ea52 0c53 orrs.w ip, r2, r3, lsr #1 - 80090ee: bf18 it ne - 80090f0: ea90 0f01 teqne r0, r1 - 80090f4: bf58 it pl - 80090f6: ebb2 0003 subspl.w r0, r2, r3 - 80090fa: bf88 it hi - 80090fc: 17c8 asrhi r0, r1, #31 - 80090fe: bf38 it cc - 8009100: ea6f 70e1 mvncc.w r0, r1, asr #31 - 8009104: bf18 it ne - 8009106: f040 0001 orrne.w r0, r0, #1 - 800910a: 4770 bx lr - 800910c: ea7f 6c22 mvns.w ip, r2, asr #24 - 8009110: d102 bne.n 8009118 <__cmpsf2+0x4c> - 8009112: ea5f 2c40 movs.w ip, r0, lsl #9 - 8009116: d105 bne.n 8009124 <__cmpsf2+0x58> - 8009118: ea7f 6c23 mvns.w ip, r3, asr #24 - 800911c: d1e4 bne.n 80090e8 <__cmpsf2+0x1c> - 800911e: ea5f 2c41 movs.w ip, r1, lsl #9 - 8009122: d0e1 beq.n 80090e8 <__cmpsf2+0x1c> - 8009124: f85d 0b04 ldr.w r0, [sp], #4 - 8009128: 4770 bx lr - 800912a: bf00 nop - -0800912c <__aeabi_cfrcmple>: - 800912c: 4684 mov ip, r0 - 800912e: 4608 mov r0, r1 - 8009130: 4661 mov r1, ip - 8009132: e7ff b.n 8009134 <__aeabi_cfcmpeq> - -08009134 <__aeabi_cfcmpeq>: - 8009134: b50f push {r0, r1, r2, r3, lr} - 8009136: f7ff ffc9 bl 80090cc <__cmpsf2> - 800913a: 2800 cmp r0, #0 - 800913c: bf48 it mi - 800913e: f110 0f00 cmnmi.w r0, #0 - 8009142: bd0f pop {r0, r1, r2, r3, pc} - -08009144 <__aeabi_fcmpeq>: - 8009144: f84d ed08 str.w lr, [sp, #-8]! - 8009148: f7ff fff4 bl 8009134 <__aeabi_cfcmpeq> - 800914c: bf0c ite eq - 800914e: 2001 moveq r0, #1 - 8009150: 2000 movne r0, #0 - 8009152: f85d fb08 ldr.w pc, [sp], #8 - 8009156: bf00 nop - -08009158 <__aeabi_fcmplt>: - 8009158: f84d ed08 str.w lr, [sp, #-8]! - 800915c: f7ff ffea bl 8009134 <__aeabi_cfcmpeq> - 8009160: bf34 ite cc - 8009162: 2001 movcc r0, #1 - 8009164: 2000 movcs r0, #0 - 8009166: f85d fb08 ldr.w pc, [sp], #8 - 800916a: bf00 nop - -0800916c <__aeabi_fcmple>: - 800916c: f84d ed08 str.w lr, [sp, #-8]! - 8009170: f7ff ffe0 bl 8009134 <__aeabi_cfcmpeq> - 8009174: bf94 ite ls - 8009176: 2001 movls r0, #1 - 8009178: 2000 movhi r0, #0 - 800917a: f85d fb08 ldr.w pc, [sp], #8 - 800917e: bf00 nop - -08009180 <__aeabi_fcmpge>: - 8009180: f84d ed08 str.w lr, [sp, #-8]! - 8009184: f7ff ffd2 bl 800912c <__aeabi_cfrcmple> - 8009188: bf94 ite ls - 800918a: 2001 movls r0, #1 - 800918c: 2000 movhi r0, #0 - 800918e: f85d fb08 ldr.w pc, [sp], #8 - 8009192: bf00 nop - -08009194 <__aeabi_fcmpgt>: - 8009194: f84d ed08 str.w lr, [sp, #-8]! - 8009198: f7ff ffc8 bl 800912c <__aeabi_cfrcmple> - 800919c: bf34 ite cc - 800919e: 2001 movcc r0, #1 - 80091a0: 2000 movcs r0, #0 - 80091a2: f85d fb08 ldr.w pc, [sp], #8 - 80091a6: bf00 nop - -080091a8 <__aeabi_f2iz>: - 80091a8: ea4f 0240 mov.w r2, r0, lsl #1 - 80091ac: f1b2 4ffe cmp.w r2, #2130706432 @ 0x7f000000 - 80091b0: d30f bcc.n 80091d2 <__aeabi_f2iz+0x2a> - 80091b2: f04f 039e mov.w r3, #158 @ 0x9e - 80091b6: ebb3 6212 subs.w r2, r3, r2, lsr #24 - 80091ba: d90d bls.n 80091d8 <__aeabi_f2iz+0x30> - 80091bc: ea4f 2300 mov.w r3, r0, lsl #8 - 80091c0: f043 4300 orr.w r3, r3, #2147483648 @ 0x80000000 - 80091c4: f010 4f00 tst.w r0, #2147483648 @ 0x80000000 - 80091c8: fa23 f002 lsr.w r0, r3, r2 - 80091cc: bf18 it ne - 80091ce: 4240 negne r0, r0 - 80091d0: 4770 bx lr - 80091d2: f04f 0000 mov.w r0, #0 - 80091d6: 4770 bx lr - 80091d8: f112 0f61 cmn.w r2, #97 @ 0x61 - 80091dc: d101 bne.n 80091e2 <__aeabi_f2iz+0x3a> - 80091de: 0242 lsls r2, r0, #9 - 80091e0: d105 bne.n 80091ee <__aeabi_f2iz+0x46> - 80091e2: f010 4000 ands.w r0, r0, #2147483648 @ 0x80000000 - 80091e6: bf08 it eq - 80091e8: f06f 4000 mvneq.w r0, #2147483648 @ 0x80000000 - 80091ec: 4770 bx lr - 80091ee: f04f 0000 mov.w r0, #0 - 80091f2: 4770 bx lr - -080091f4 <__aeabi_ldivmod>: - 80091f4: b97b cbnz r3, 8009216 <__aeabi_ldivmod+0x22> - 80091f6: b972 cbnz r2, 8009216 <__aeabi_ldivmod+0x22> - 80091f8: 2900 cmp r1, #0 - 80091fa: bfbe ittt lt - 80091fc: 2000 movlt r0, #0 - 80091fe: f04f 4100 movlt.w r1, #2147483648 @ 0x80000000 - 8009202: e006 blt.n 8009212 <__aeabi_ldivmod+0x1e> - 8009204: bf08 it eq - 8009206: 2800 cmpeq r0, #0 - 8009208: bf1c itt ne - 800920a: f06f 4100 mvnne.w r1, #2147483648 @ 0x80000000 - 800920e: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff - 8009212: f000 b9d7 b.w 80095c4 <__aeabi_idiv0> - 8009216: f1ad 0c08 sub.w ip, sp, #8 - 800921a: e96d ce04 strd ip, lr, [sp, #-16]! - 800921e: 2900 cmp r1, #0 - 8009220: db09 blt.n 8009236 <__aeabi_ldivmod+0x42> - 8009222: 2b00 cmp r3, #0 - 8009224: db1a blt.n 800925c <__aeabi_ldivmod+0x68> - 8009226: f000 f84d bl 80092c4 <__udivmoddi4> - 800922a: f8dd e004 ldr.w lr, [sp, #4] - 800922e: e9dd 2302 ldrd r2, r3, [sp, #8] - 8009232: b004 add sp, #16 - 8009234: 4770 bx lr - 8009236: 4240 negs r0, r0 - 8009238: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 800923c: 2b00 cmp r3, #0 - 800923e: db1b blt.n 8009278 <__aeabi_ldivmod+0x84> - 8009240: f000 f840 bl 80092c4 <__udivmoddi4> - 8009244: f8dd e004 ldr.w lr, [sp, #4] - 8009248: e9dd 2302 ldrd r2, r3, [sp, #8] - 800924c: b004 add sp, #16 - 800924e: 4240 negs r0, r0 - 8009250: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 8009254: 4252 negs r2, r2 - 8009256: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 800925a: 4770 bx lr - 800925c: 4252 negs r2, r2 - 800925e: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 8009262: f000 f82f bl 80092c4 <__udivmoddi4> - 8009266: f8dd e004 ldr.w lr, [sp, #4] - 800926a: e9dd 2302 ldrd r2, r3, [sp, #8] - 800926e: b004 add sp, #16 - 8009270: 4240 negs r0, r0 - 8009272: eb61 0141 sbc.w r1, r1, r1, lsl #1 - 8009276: 4770 bx lr - 8009278: 4252 negs r2, r2 - 800927a: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 800927e: f000 f821 bl 80092c4 <__udivmoddi4> - 8009282: f8dd e004 ldr.w lr, [sp, #4] - 8009286: e9dd 2302 ldrd r2, r3, [sp, #8] - 800928a: b004 add sp, #16 - 800928c: 4252 negs r2, r2 - 800928e: eb63 0343 sbc.w r3, r3, r3, lsl #1 - 8009292: 4770 bx lr - -08009294 <__aeabi_uldivmod>: - 8009294: b953 cbnz r3, 80092ac <__aeabi_uldivmod+0x18> - 8009296: b94a cbnz r2, 80092ac <__aeabi_uldivmod+0x18> - 8009298: 2900 cmp r1, #0 - 800929a: bf08 it eq - 800929c: 2800 cmpeq r0, #0 - 800929e: bf1c itt ne - 80092a0: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff - 80092a4: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff - 80092a8: f000 b98c b.w 80095c4 <__aeabi_idiv0> - 80092ac: f1ad 0c08 sub.w ip, sp, #8 - 80092b0: e96d ce04 strd ip, lr, [sp, #-16]! - 80092b4: f000 f806 bl 80092c4 <__udivmoddi4> - 80092b8: f8dd e004 ldr.w lr, [sp, #4] - 80092bc: e9dd 2302 ldrd r2, r3, [sp, #8] - 80092c0: b004 add sp, #16 - 80092c2: 4770 bx lr - -080092c4 <__udivmoddi4>: - 80092c4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 80092c8: 9d08 ldr r5, [sp, #32] - 80092ca: 468e mov lr, r1 - 80092cc: 4604 mov r4, r0 - 80092ce: 4688 mov r8, r1 - 80092d0: 2b00 cmp r3, #0 - 80092d2: d14a bne.n 800936a <__udivmoddi4+0xa6> - 80092d4: 428a cmp r2, r1 - 80092d6: 4617 mov r7, r2 - 80092d8: d962 bls.n 80093a0 <__udivmoddi4+0xdc> - 80092da: fab2 f682 clz r6, r2 - 80092de: b14e cbz r6, 80092f4 <__udivmoddi4+0x30> - 80092e0: f1c6 0320 rsb r3, r6, #32 - 80092e4: fa01 f806 lsl.w r8, r1, r6 - 80092e8: fa20 f303 lsr.w r3, r0, r3 - 80092ec: 40b7 lsls r7, r6 - 80092ee: ea43 0808 orr.w r8, r3, r8 - 80092f2: 40b4 lsls r4, r6 - 80092f4: ea4f 4e17 mov.w lr, r7, lsr #16 - 80092f8: fbb8 f1fe udiv r1, r8, lr - 80092fc: fa1f fc87 uxth.w ip, r7 - 8009300: fb0e 8811 mls r8, lr, r1, r8 - 8009304: fb01 f20c mul.w r2, r1, ip - 8009308: 0c23 lsrs r3, r4, #16 - 800930a: ea43 4308 orr.w r3, r3, r8, lsl #16 - 800930e: 429a cmp r2, r3 - 8009310: d909 bls.n 8009326 <__udivmoddi4+0x62> - 8009312: 18fb adds r3, r7, r3 - 8009314: f101 30ff add.w r0, r1, #4294967295 @ 0xffffffff - 8009318: f080 80eb bcs.w 80094f2 <__udivmoddi4+0x22e> - 800931c: 429a cmp r2, r3 - 800931e: f240 80e8 bls.w 80094f2 <__udivmoddi4+0x22e> - 8009322: 3902 subs r1, #2 - 8009324: 443b add r3, r7 - 8009326: 1a9a subs r2, r3, r2 - 8009328: fbb2 f0fe udiv r0, r2, lr - 800932c: fb0e 2210 mls r2, lr, r0, r2 - 8009330: fb00 fc0c mul.w ip, r0, ip - 8009334: b2a3 uxth r3, r4 - 8009336: ea43 4302 orr.w r3, r3, r2, lsl #16 - 800933a: 459c cmp ip, r3 - 800933c: d909 bls.n 8009352 <__udivmoddi4+0x8e> - 800933e: 18fb adds r3, r7, r3 - 8009340: f100 32ff add.w r2, r0, #4294967295 @ 0xffffffff - 8009344: f080 80d7 bcs.w 80094f6 <__udivmoddi4+0x232> - 8009348: 459c cmp ip, r3 - 800934a: f240 80d4 bls.w 80094f6 <__udivmoddi4+0x232> - 800934e: 443b add r3, r7 - 8009350: 3802 subs r0, #2 - 8009352: ea40 4001 orr.w r0, r0, r1, lsl #16 - 8009356: 2100 movs r1, #0 - 8009358: eba3 030c sub.w r3, r3, ip - 800935c: b11d cbz r5, 8009366 <__udivmoddi4+0xa2> - 800935e: 2200 movs r2, #0 - 8009360: 40f3 lsrs r3, r6 - 8009362: e9c5 3200 strd r3, r2, [r5] - 8009366: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 800936a: 428b cmp r3, r1 - 800936c: d905 bls.n 800937a <__udivmoddi4+0xb6> - 800936e: b10d cbz r5, 8009374 <__udivmoddi4+0xb0> - 8009370: e9c5 0100 strd r0, r1, [r5] - 8009374: 2100 movs r1, #0 - 8009376: 4608 mov r0, r1 - 8009378: e7f5 b.n 8009366 <__udivmoddi4+0xa2> - 800937a: fab3 f183 clz r1, r3 - 800937e: 2900 cmp r1, #0 - 8009380: d146 bne.n 8009410 <__udivmoddi4+0x14c> - 8009382: 4573 cmp r3, lr - 8009384: d302 bcc.n 800938c <__udivmoddi4+0xc8> - 8009386: 4282 cmp r2, r0 - 8009388: f200 8108 bhi.w 800959c <__udivmoddi4+0x2d8> - 800938c: 1a84 subs r4, r0, r2 - 800938e: eb6e 0203 sbc.w r2, lr, r3 - 8009392: 2001 movs r0, #1 - 8009394: 4690 mov r8, r2 - 8009396: 2d00 cmp r5, #0 - 8009398: d0e5 beq.n 8009366 <__udivmoddi4+0xa2> - 800939a: e9c5 4800 strd r4, r8, [r5] - 800939e: e7e2 b.n 8009366 <__udivmoddi4+0xa2> - 80093a0: 2a00 cmp r2, #0 - 80093a2: f000 8091 beq.w 80094c8 <__udivmoddi4+0x204> - 80093a6: fab2 f682 clz r6, r2 - 80093aa: 2e00 cmp r6, #0 - 80093ac: f040 80a5 bne.w 80094fa <__udivmoddi4+0x236> - 80093b0: 1a8a subs r2, r1, r2 - 80093b2: 2101 movs r1, #1 - 80093b4: 0c03 lsrs r3, r0, #16 - 80093b6: ea4f 4e17 mov.w lr, r7, lsr #16 - 80093ba: b280 uxth r0, r0 - 80093bc: b2bc uxth r4, r7 - 80093be: fbb2 fcfe udiv ip, r2, lr - 80093c2: fb0e 221c mls r2, lr, ip, r2 - 80093c6: ea43 4302 orr.w r3, r3, r2, lsl #16 - 80093ca: fb04 f20c mul.w r2, r4, ip - 80093ce: 429a cmp r2, r3 - 80093d0: d907 bls.n 80093e2 <__udivmoddi4+0x11e> - 80093d2: 18fb adds r3, r7, r3 - 80093d4: f10c 38ff add.w r8, ip, #4294967295 @ 0xffffffff - 80093d8: d202 bcs.n 80093e0 <__udivmoddi4+0x11c> - 80093da: 429a cmp r2, r3 - 80093dc: f200 80e3 bhi.w 80095a6 <__udivmoddi4+0x2e2> - 80093e0: 46c4 mov ip, r8 - 80093e2: 1a9b subs r3, r3, r2 - 80093e4: fbb3 f2fe udiv r2, r3, lr - 80093e8: fb0e 3312 mls r3, lr, r2, r3 - 80093ec: fb02 f404 mul.w r4, r2, r4 - 80093f0: ea40 4303 orr.w r3, r0, r3, lsl #16 - 80093f4: 429c cmp r4, r3 - 80093f6: d907 bls.n 8009408 <__udivmoddi4+0x144> - 80093f8: 18fb adds r3, r7, r3 - 80093fa: f102 30ff add.w r0, r2, #4294967295 @ 0xffffffff - 80093fe: d202 bcs.n 8009406 <__udivmoddi4+0x142> - 8009400: 429c cmp r4, r3 - 8009402: f200 80cd bhi.w 80095a0 <__udivmoddi4+0x2dc> - 8009406: 4602 mov r2, r0 - 8009408: 1b1b subs r3, r3, r4 - 800940a: ea42 400c orr.w r0, r2, ip, lsl #16 - 800940e: e7a5 b.n 800935c <__udivmoddi4+0x98> - 8009410: f1c1 0620 rsb r6, r1, #32 - 8009414: 408b lsls r3, r1 - 8009416: fa22 f706 lsr.w r7, r2, r6 - 800941a: 431f orrs r7, r3 - 800941c: fa2e fa06 lsr.w sl, lr, r6 - 8009420: ea4f 4917 mov.w r9, r7, lsr #16 - 8009424: fbba f8f9 udiv r8, sl, r9 - 8009428: fa0e fe01 lsl.w lr, lr, r1 - 800942c: fa20 f306 lsr.w r3, r0, r6 - 8009430: fb09 aa18 mls sl, r9, r8, sl - 8009434: fa1f fc87 uxth.w ip, r7 - 8009438: ea43 030e orr.w r3, r3, lr - 800943c: fa00 fe01 lsl.w lr, r0, r1 - 8009440: fb08 f00c mul.w r0, r8, ip - 8009444: 0c1c lsrs r4, r3, #16 - 8009446: ea44 440a orr.w r4, r4, sl, lsl #16 - 800944a: 42a0 cmp r0, r4 - 800944c: fa02 f201 lsl.w r2, r2, r1 - 8009450: d90a bls.n 8009468 <__udivmoddi4+0x1a4> - 8009452: 193c adds r4, r7, r4 - 8009454: f108 3aff add.w sl, r8, #4294967295 @ 0xffffffff - 8009458: f080 809e bcs.w 8009598 <__udivmoddi4+0x2d4> - 800945c: 42a0 cmp r0, r4 - 800945e: f240 809b bls.w 8009598 <__udivmoddi4+0x2d4> - 8009462: f1a8 0802 sub.w r8, r8, #2 - 8009466: 443c add r4, r7 - 8009468: 1a24 subs r4, r4, r0 - 800946a: b298 uxth r0, r3 - 800946c: fbb4 f3f9 udiv r3, r4, r9 - 8009470: fb09 4413 mls r4, r9, r3, r4 - 8009474: fb03 fc0c mul.w ip, r3, ip - 8009478: ea40 4404 orr.w r4, r0, r4, lsl #16 - 800947c: 45a4 cmp ip, r4 - 800947e: d909 bls.n 8009494 <__udivmoddi4+0x1d0> - 8009480: 193c adds r4, r7, r4 - 8009482: f103 30ff add.w r0, r3, #4294967295 @ 0xffffffff - 8009486: f080 8085 bcs.w 8009594 <__udivmoddi4+0x2d0> - 800948a: 45a4 cmp ip, r4 - 800948c: f240 8082 bls.w 8009594 <__udivmoddi4+0x2d0> - 8009490: 3b02 subs r3, #2 - 8009492: 443c add r4, r7 - 8009494: ea43 4008 orr.w r0, r3, r8, lsl #16 - 8009498: eba4 040c sub.w r4, r4, ip - 800949c: fba0 8c02 umull r8, ip, r0, r2 - 80094a0: 4564 cmp r4, ip - 80094a2: 4643 mov r3, r8 - 80094a4: 46e1 mov r9, ip - 80094a6: d364 bcc.n 8009572 <__udivmoddi4+0x2ae> - 80094a8: d061 beq.n 800956e <__udivmoddi4+0x2aa> - 80094aa: b15d cbz r5, 80094c4 <__udivmoddi4+0x200> - 80094ac: ebbe 0203 subs.w r2, lr, r3 - 80094b0: eb64 0409 sbc.w r4, r4, r9 - 80094b4: fa04 f606 lsl.w r6, r4, r6 - 80094b8: fa22 f301 lsr.w r3, r2, r1 - 80094bc: 431e orrs r6, r3 - 80094be: 40cc lsrs r4, r1 - 80094c0: e9c5 6400 strd r6, r4, [r5] - 80094c4: 2100 movs r1, #0 - 80094c6: e74e b.n 8009366 <__udivmoddi4+0xa2> - 80094c8: fbb1 fcf2 udiv ip, r1, r2 - 80094cc: 0c01 lsrs r1, r0, #16 - 80094ce: ea41 410e orr.w r1, r1, lr, lsl #16 - 80094d2: b280 uxth r0, r0 - 80094d4: ea40 4201 orr.w r2, r0, r1, lsl #16 - 80094d8: 463b mov r3, r7 - 80094da: fbb1 f1f7 udiv r1, r1, r7 - 80094de: 4638 mov r0, r7 - 80094e0: 463c mov r4, r7 - 80094e2: 46b8 mov r8, r7 - 80094e4: 46be mov lr, r7 - 80094e6: 2620 movs r6, #32 - 80094e8: eba2 0208 sub.w r2, r2, r8 - 80094ec: ea41 410c orr.w r1, r1, ip, lsl #16 - 80094f0: e765 b.n 80093be <__udivmoddi4+0xfa> - 80094f2: 4601 mov r1, r0 - 80094f4: e717 b.n 8009326 <__udivmoddi4+0x62> - 80094f6: 4610 mov r0, r2 - 80094f8: e72b b.n 8009352 <__udivmoddi4+0x8e> - 80094fa: f1c6 0120 rsb r1, r6, #32 - 80094fe: fa2e fc01 lsr.w ip, lr, r1 - 8009502: 40b7 lsls r7, r6 - 8009504: fa0e fe06 lsl.w lr, lr, r6 - 8009508: fa20 f101 lsr.w r1, r0, r1 - 800950c: ea41 010e orr.w r1, r1, lr - 8009510: ea4f 4e17 mov.w lr, r7, lsr #16 - 8009514: fbbc f8fe udiv r8, ip, lr - 8009518: b2bc uxth r4, r7 - 800951a: fb0e cc18 mls ip, lr, r8, ip - 800951e: fb08 f904 mul.w r9, r8, r4 - 8009522: 0c0a lsrs r2, r1, #16 - 8009524: ea42 420c orr.w r2, r2, ip, lsl #16 - 8009528: 40b0 lsls r0, r6 - 800952a: 4591 cmp r9, r2 - 800952c: ea4f 4310 mov.w r3, r0, lsr #16 - 8009530: b280 uxth r0, r0 - 8009532: d93e bls.n 80095b2 <__udivmoddi4+0x2ee> - 8009534: 18ba adds r2, r7, r2 - 8009536: f108 3cff add.w ip, r8, #4294967295 @ 0xffffffff - 800953a: d201 bcs.n 8009540 <__udivmoddi4+0x27c> - 800953c: 4591 cmp r9, r2 - 800953e: d81f bhi.n 8009580 <__udivmoddi4+0x2bc> - 8009540: eba2 0209 sub.w r2, r2, r9 - 8009544: fbb2 f9fe udiv r9, r2, lr - 8009548: fb09 f804 mul.w r8, r9, r4 - 800954c: fb0e 2a19 mls sl, lr, r9, r2 - 8009550: b28a uxth r2, r1 - 8009552: ea42 420a orr.w r2, r2, sl, lsl #16 - 8009556: 4542 cmp r2, r8 - 8009558: d229 bcs.n 80095ae <__udivmoddi4+0x2ea> - 800955a: 18ba adds r2, r7, r2 - 800955c: f109 31ff add.w r1, r9, #4294967295 @ 0xffffffff - 8009560: d2c2 bcs.n 80094e8 <__udivmoddi4+0x224> - 8009562: 4542 cmp r2, r8 - 8009564: d2c0 bcs.n 80094e8 <__udivmoddi4+0x224> - 8009566: f1a9 0102 sub.w r1, r9, #2 - 800956a: 443a add r2, r7 - 800956c: e7bc b.n 80094e8 <__udivmoddi4+0x224> - 800956e: 45c6 cmp lr, r8 - 8009570: d29b bcs.n 80094aa <__udivmoddi4+0x1e6> - 8009572: ebb8 0302 subs.w r3, r8, r2 - 8009576: eb6c 0c07 sbc.w ip, ip, r7 - 800957a: 3801 subs r0, #1 - 800957c: 46e1 mov r9, ip - 800957e: e794 b.n 80094aa <__udivmoddi4+0x1e6> - 8009580: eba7 0909 sub.w r9, r7, r9 - 8009584: 444a add r2, r9 - 8009586: fbb2 f9fe udiv r9, r2, lr - 800958a: f1a8 0c02 sub.w ip, r8, #2 - 800958e: fb09 f804 mul.w r8, r9, r4 - 8009592: e7db b.n 800954c <__udivmoddi4+0x288> - 8009594: 4603 mov r3, r0 - 8009596: e77d b.n 8009494 <__udivmoddi4+0x1d0> - 8009598: 46d0 mov r8, sl - 800959a: e765 b.n 8009468 <__udivmoddi4+0x1a4> - 800959c: 4608 mov r0, r1 - 800959e: e6fa b.n 8009396 <__udivmoddi4+0xd2> - 80095a0: 443b add r3, r7 - 80095a2: 3a02 subs r2, #2 - 80095a4: e730 b.n 8009408 <__udivmoddi4+0x144> - 80095a6: f1ac 0c02 sub.w ip, ip, #2 - 80095aa: 443b add r3, r7 - 80095ac: e719 b.n 80093e2 <__udivmoddi4+0x11e> - 80095ae: 4649 mov r1, r9 - 80095b0: e79a b.n 80094e8 <__udivmoddi4+0x224> - 80095b2: eba2 0209 sub.w r2, r2, r9 - 80095b6: fbb2 f9fe udiv r9, r2, lr - 80095ba: 46c4 mov ip, r8 - 80095bc: fb09 f804 mul.w r8, r9, r4 - 80095c0: e7c4 b.n 800954c <__udivmoddi4+0x288> - 80095c2: bf00 nop - -080095c4 <__aeabi_idiv0>: - 80095c4: 4770 bx lr - 80095c6: bf00 nop - -080095c8 : - -ADC_HandleTypeDef hadc1; - -/* ADC1 init function */ -void MX_ADC1_Init(void) -{ - 80095c8: b580 push {r7, lr} - 80095ca: b084 sub sp, #16 - 80095cc: af00 add r7, sp, #0 - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - 80095ce: 1d3b adds r3, r7, #4 - 80095d0: 2200 movs r2, #0 - 80095d2: 601a str r2, [r3, #0] - 80095d4: 605a str r2, [r3, #4] - 80095d6: 609a str r2, [r3, #8] - - /* USER CODE END ADC1_Init 1 */ - - /** Common config - */ - hadc1.Instance = ADC1; - 80095d8: 4b18 ldr r3, [pc, #96] @ (800963c ) - 80095da: 4a19 ldr r2, [pc, #100] @ (8009640 ) - 80095dc: 601a str r2, [r3, #0] - hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; - 80095de: 4b17 ldr r3, [pc, #92] @ (800963c ) - 80095e0: 2200 movs r2, #0 - 80095e2: 609a str r2, [r3, #8] - hadc1.Init.ContinuousConvMode = DISABLE; - 80095e4: 4b15 ldr r3, [pc, #84] @ (800963c ) - 80095e6: 2200 movs r2, #0 - 80095e8: 731a strb r2, [r3, #12] - hadc1.Init.DiscontinuousConvMode = DISABLE; - 80095ea: 4b14 ldr r3, [pc, #80] @ (800963c ) - 80095ec: 2200 movs r2, #0 - 80095ee: 751a strb r2, [r3, #20] - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - 80095f0: 4b12 ldr r3, [pc, #72] @ (800963c ) - 80095f2: f44f 2260 mov.w r2, #917504 @ 0xe0000 - 80095f6: 61da str r2, [r3, #28] - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - 80095f8: 4b10 ldr r3, [pc, #64] @ (800963c ) - 80095fa: 2200 movs r2, #0 - 80095fc: 605a str r2, [r3, #4] - hadc1.Init.NbrOfConversion = 1; - 80095fe: 4b0f ldr r3, [pc, #60] @ (800963c ) - 8009600: 2201 movs r2, #1 - 8009602: 611a str r2, [r3, #16] - if (HAL_ADC_Init(&hadc1) != HAL_OK) - 8009604: 480d ldr r0, [pc, #52] @ (800963c ) - 8009606: f005 f997 bl 800e938 - 800960a: 4603 mov r3, r0 - 800960c: 2b00 cmp r3, #0 - 800960e: d001 beq.n 8009614 - { - Error_Handler(); - 8009610: f002 feea bl 800c3e8 - } - - /** Configure Regular Channel - */ - sConfig.Channel = ADC_CHANNEL_8; - 8009614: 2308 movs r3, #8 - 8009616: 607b str r3, [r7, #4] - sConfig.Rank = ADC_REGULAR_RANK_1; - 8009618: 2301 movs r3, #1 - 800961a: 60bb str r3, [r7, #8] - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; - 800961c: 2300 movs r3, #0 - 800961e: 60fb str r3, [r7, #12] - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - 8009620: 1d3b adds r3, r7, #4 - 8009622: 4619 mov r1, r3 - 8009624: 4805 ldr r0, [pc, #20] @ (800963c ) - 8009626: f005 fc4b bl 800eec0 - 800962a: 4603 mov r3, r0 - 800962c: 2b00 cmp r3, #0 - 800962e: d001 beq.n 8009634 - { - Error_Handler(); - 8009630: f002 feda bl 800c3e8 - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - 8009634: bf00 nop - 8009636: 3710 adds r7, #16 - 8009638: 46bd mov sp, r7 - 800963a: bd80 pop {r7, pc} - 800963c: 2000026c .word 0x2000026c - 8009640: 40012400 .word 0x40012400 - -08009644 : - -void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle) -{ - 8009644: b580 push {r7, lr} - 8009646: b08a sub sp, #40 @ 0x28 - 8009648: af00 add r7, sp, #0 - 800964a: 6078 str r0, [r7, #4] - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 800964c: f107 0318 add.w r3, r7, #24 - 8009650: 2200 movs r2, #0 - 8009652: 601a str r2, [r3, #0] - 8009654: 605a str r2, [r3, #4] - 8009656: 609a str r2, [r3, #8] - 8009658: 60da str r2, [r3, #12] - if(adcHandle->Instance==ADC1) - 800965a: 687b ldr r3, [r7, #4] - 800965c: 681b ldr r3, [r3, #0] - 800965e: 4a1f ldr r2, [pc, #124] @ (80096dc ) - 8009660: 4293 cmp r3, r2 - 8009662: d137 bne.n 80096d4 - { - /* USER CODE BEGIN ADC1_MspInit 0 */ - - /* USER CODE END ADC1_MspInit 0 */ - /* ADC1 clock enable */ - __HAL_RCC_ADC1_CLK_ENABLE(); - 8009664: 4b1e ldr r3, [pc, #120] @ (80096e0 ) - 8009666: 699b ldr r3, [r3, #24] - 8009668: 4a1d ldr r2, [pc, #116] @ (80096e0 ) - 800966a: f443 7300 orr.w r3, r3, #512 @ 0x200 - 800966e: 6193 str r3, [r2, #24] - 8009670: 4b1b ldr r3, [pc, #108] @ (80096e0 ) - 8009672: 699b ldr r3, [r3, #24] - 8009674: f403 7300 and.w r3, r3, #512 @ 0x200 - 8009678: 617b str r3, [r7, #20] - 800967a: 697b ldr r3, [r7, #20] - - __HAL_RCC_GPIOA_CLK_ENABLE(); - 800967c: 4b18 ldr r3, [pc, #96] @ (80096e0 ) - 800967e: 699b ldr r3, [r3, #24] - 8009680: 4a17 ldr r2, [pc, #92] @ (80096e0 ) - 8009682: f043 0304 orr.w r3, r3, #4 - 8009686: 6193 str r3, [r2, #24] - 8009688: 4b15 ldr r3, [pc, #84] @ (80096e0 ) - 800968a: 699b ldr r3, [r3, #24] - 800968c: f003 0304 and.w r3, r3, #4 - 8009690: 613b str r3, [r7, #16] - 8009692: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOB_CLK_ENABLE(); - 8009694: 4b12 ldr r3, [pc, #72] @ (80096e0 ) - 8009696: 699b ldr r3, [r3, #24] - 8009698: 4a11 ldr r2, [pc, #68] @ (80096e0 ) - 800969a: f043 0308 orr.w r3, r3, #8 - 800969e: 6193 str r3, [r2, #24] - 80096a0: 4b0f ldr r3, [pc, #60] @ (80096e0 ) - 80096a2: 699b ldr r3, [r3, #24] - 80096a4: f003 0308 and.w r3, r3, #8 - 80096a8: 60fb str r3, [r7, #12] - 80096aa: 68fb ldr r3, [r7, #12] - /**ADC1 GPIO Configuration - PA3 ------> ADC1_IN3 - PB0 ------> ADC1_IN8 - PB1 ------> ADC1_IN9 - */ - GPIO_InitStruct.Pin = GPIO_PIN_3; - 80096ac: 2308 movs r3, #8 - 80096ae: 61bb str r3, [r7, #24] - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - 80096b0: 2303 movs r3, #3 - 80096b2: 61fb str r3, [r7, #28] - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - 80096b4: f107 0318 add.w r3, r7, #24 - 80096b8: 4619 mov r1, r3 - 80096ba: 480a ldr r0, [pc, #40] @ (80096e4 ) - 80096bc: f006 ff7a bl 80105b4 - - GPIO_InitStruct.Pin = ADC_NTC1_Pin|ADC_NTC2_Pin; - 80096c0: 2303 movs r3, #3 - 80096c2: 61bb str r3, [r7, #24] - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - 80096c4: 2303 movs r3, #3 - 80096c6: 61fb str r3, [r7, #28] - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 80096c8: f107 0318 add.w r3, r7, #24 - 80096cc: 4619 mov r1, r3 - 80096ce: 4806 ldr r0, [pc, #24] @ (80096e8 ) - 80096d0: f006 ff70 bl 80105b4 - - /* USER CODE BEGIN ADC1_MspInit 1 */ - - /* USER CODE END ADC1_MspInit 1 */ - } -} - 80096d4: bf00 nop - 80096d6: 3728 adds r7, #40 @ 0x28 - 80096d8: 46bd mov sp, r7 - 80096da: bd80 pop {r7, pc} - 80096dc: 40012400 .word 0x40012400 - 80096e0: 40021000 .word 0x40021000 - 80096e4: 40010800 .word 0x40010800 - 80096e8: 40010c00 .word 0x40010c00 - -080096ec : - -InfoBlock_t *InfoBlock = (InfoBlock_t *)(VERSION_OFFSET); - -uint8_t RELAY_State[RELAY_COUNT]; - -void RELAY_Write(relay_t num, uint8_t state){ - 80096ec: b580 push {r7, lr} - 80096ee: b082 sub sp, #8 - 80096f0: af00 add r7, sp, #0 - 80096f2: 4603 mov r3, r0 - 80096f4: 460a mov r2, r1 - 80096f6: 71fb strb r3, [r7, #7] - 80096f8: 4613 mov r3, r2 - 80096fa: 71bb strb r3, [r7, #6] - switch (num) { - 80096fc: 79fb ldrb r3, [r7, #7] - 80096fe: 2b06 cmp r3, #6 - 8009700: d847 bhi.n 8009792 - 8009702: a201 add r2, pc, #4 @ (adr r2, 8009708 ) - 8009704: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8009708: 08009725 .word 0x08009725 - 800970c: 08009735 .word 0x08009735 - 8009710: 08009745 .word 0x08009745 - 8009714: 08009755 .word 0x08009755 - 8009718: 08009765 .word 0x08009765 - 800971c: 08009775 .word 0x08009775 - 8009720: 08009785 .word 0x08009785 - case RELAY_AUX0: - HAL_GPIO_WritePin(RELAY1_GPIO_Port, RELAY1_Pin, state); - 8009724: 79bb ldrb r3, [r7, #6] - 8009726: 461a mov r2, r3 - 8009728: f44f 7180 mov.w r1, #256 @ 0x100 - 800972c: 481d ldr r0, [pc, #116] @ (80097a4 ) - 800972e: f007 f8dc bl 80108ea - break; - 8009732: e02f b.n 8009794 - case RELAY_AUX1: - HAL_GPIO_WritePin(RELAY2_GPIO_Port, RELAY2_Pin, state); - 8009734: 79bb ldrb r3, [r7, #6] - 8009736: 461a mov r2, r3 - 8009738: f44f 7100 mov.w r1, #512 @ 0x200 - 800973c: 4819 ldr r0, [pc, #100] @ (80097a4 ) - 800973e: f007 f8d4 bl 80108ea - break; - 8009742: e027 b.n 8009794 - case RELAY3: - HAL_GPIO_WritePin(RELAY3_GPIO_Port, RELAY3_Pin, state); - 8009744: 79bb ldrb r3, [r7, #6] - 8009746: 461a mov r2, r3 - 8009748: f44f 6180 mov.w r1, #1024 @ 0x400 - 800974c: 4815 ldr r0, [pc, #84] @ (80097a4 ) - 800974e: f007 f8cc bl 80108ea - break; - 8009752: e01f b.n 8009794 - case RELAY_DC: - HAL_GPIO_WritePin(RELAY4_GPIO_Port, RELAY4_Pin, state); - 8009754: 79bb ldrb r3, [r7, #6] - 8009756: 461a mov r2, r3 - 8009758: f44f 6100 mov.w r1, #2048 @ 0x800 - 800975c: 4811 ldr r0, [pc, #68] @ (80097a4 ) - 800975e: f007 f8c4 bl 80108ea - break; - 8009762: e017 b.n 8009794 - case RELAY_AC: - HAL_GPIO_WritePin(RELAY5_GPIO_Port, RELAY5_Pin, state); - 8009764: 79bb ldrb r3, [r7, #6] - 8009766: 461a mov r2, r3 - 8009768: f44f 5180 mov.w r1, #4096 @ 0x1000 - 800976c: 480d ldr r0, [pc, #52] @ (80097a4 ) - 800976e: f007 f8bc bl 80108ea - break; - 8009772: e00f b.n 8009794 - case RELAY_CC: - HAL_GPIO_WritePin(RELAY_CC_GPIO_Port, RELAY_CC_Pin, state); - 8009774: 79bb ldrb r3, [r7, #6] - 8009776: 461a mov r2, r3 - 8009778: f44f 4100 mov.w r1, #32768 @ 0x8000 - 800977c: 480a ldr r0, [pc, #40] @ (80097a8 ) - 800977e: f007 f8b4 bl 80108ea - break; - 8009782: e007 b.n 8009794 - case RELAY_DC1: - HAL_GPIO_WritePin(RELAY_DC_GPIO_Port, RELAY_DC_Pin, state); - 8009784: 79bb ldrb r3, [r7, #6] - 8009786: 461a mov r2, r3 - 8009788: 2108 movs r1, #8 - 800978a: 4808 ldr r0, [pc, #32] @ (80097ac ) - 800978c: f007 f8ad bl 80108ea - break; - 8009790: e000 b.n 8009794 - default: - break; - 8009792: bf00 nop - } - - RELAY_State[num] = state; - 8009794: 79fb ldrb r3, [r7, #7] - 8009796: 4906 ldr r1, [pc, #24] @ (80097b0 ) - 8009798: 79ba ldrb r2, [r7, #6] - 800979a: 54ca strb r2, [r1, r3] -} - 800979c: bf00 nop - 800979e: 3708 adds r7, #8 - 80097a0: 46bd mov sp, r7 - 80097a2: bd80 pop {r7, pc} - 80097a4: 40011800 .word 0x40011800 - 80097a8: 40010800 .word 0x40010800 - 80097ac: 40011400 .word 0x40011400 - 80097b0: 2000029c .word 0x2000029c - -080097b4 : - -uint8_t RELAY_Read(relay_t num){ - 80097b4: b480 push {r7} - 80097b6: b083 sub sp, #12 - 80097b8: af00 add r7, sp, #0 - 80097ba: 4603 mov r3, r0 - 80097bc: 71fb strb r3, [r7, #7] - return RELAY_State[num]; - 80097be: 79fb ldrb r3, [r7, #7] - 80097c0: 4a03 ldr r2, [pc, #12] @ (80097d0 ) - 80097c2: 5cd3 ldrb r3, [r2, r3] -} - 80097c4: 4618 mov r0, r3 - 80097c6: 370c adds r7, #12 - 80097c8: 46bd mov sp, r7 - 80097ca: bc80 pop {r7} - 80097cc: 4770 bx lr - 80097ce: bf00 nop - 80097d0: 2000029c .word 0x2000029c - -080097d4 : - - -uint8_t IN_ReadInput(inputNum_t input_n){ - 80097d4: b580 push {r7, lr} - 80097d6: b082 sub sp, #8 - 80097d8: af00 add r7, sp, #0 - 80097da: 4603 mov r3, r0 - 80097dc: 71fb strb r3, [r7, #7] - switch(input_n){ - 80097de: 79fb ldrb r3, [r7, #7] - 80097e0: 2b06 cmp r3, #6 - 80097e2: d83b bhi.n 800985c - 80097e4: a201 add r2, pc, #4 @ (adr r2, 80097ec ) - 80097e6: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 80097ea: bf00 nop - 80097ec: 08009809 .word 0x08009809 - 80097f0: 08009815 .word 0x08009815 - 80097f4: 08009821 .word 0x08009821 - 80097f8: 0800982d .word 0x0800982d - 80097fc: 08009839 .word 0x08009839 - 8009800: 08009845 .word 0x08009845 - 8009804: 08009851 .word 0x08009851 - case IN_SW0: - return HAL_GPIO_ReadPin(IN_SW0_GPIO_Port, IN_SW0_Pin); - 8009808: 2102 movs r1, #2 - 800980a: 4817 ldr r0, [pc, #92] @ (8009868 ) - 800980c: f007 f856 bl 80108bc - 8009810: 4603 mov r3, r0 - 8009812: e024 b.n 800985e - case IN_SW1: - return HAL_GPIO_ReadPin(IN_SW1_GPIO_Port, IN_SW1_Pin); - 8009814: 2104 movs r1, #4 - 8009816: 4814 ldr r0, [pc, #80] @ (8009868 ) - 8009818: f007 f850 bl 80108bc - 800981c: 4603 mov r3, r0 - 800981e: e01e b.n 800985e - case IN0: - return HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); - 8009820: 2180 movs r1, #128 @ 0x80 - 8009822: 4812 ldr r0, [pc, #72] @ (800986c ) - 8009824: f007 f84a bl 80108bc - 8009828: 4603 mov r3, r0 - 800982a: e018 b.n 800985e - case IN_ESTOP: - return HAL_GPIO_ReadPin(IN_ESTOP_GPIO_Port, IN_ESTOP_Pin); - 800982c: 2180 movs r1, #128 @ 0x80 - 800982e: 4810 ldr r0, [pc, #64] @ (8009870 ) - 8009830: f007 f844 bl 80108bc - 8009834: 4603 mov r3, r0 - 8009836: e012 b.n 800985e - case IN_FB1: - return HAL_GPIO_ReadPin(IN_FB1_GPIO_Port, IN_FB1_Pin); - 8009838: 2110 movs r1, #16 - 800983a: 480e ldr r0, [pc, #56] @ (8009874 ) - 800983c: f007 f83e bl 80108bc - 8009840: 4603 mov r3, r0 - 8009842: e00c b.n 800985e - case IN_CONT_FB_DC: - return HAL_GPIO_ReadPin(IN_FB2_GPIO_Port, IN_FB2_Pin); - 8009844: 2108 movs r1, #8 - 8009846: 480b ldr r0, [pc, #44] @ (8009874 ) - 8009848: f007 f838 bl 80108bc - 800984c: 4603 mov r3, r0 - 800984e: e006 b.n 800985e - case ISO_IN: - return HAL_GPIO_ReadPin(ISO_IN_GPIO_Port, ISO_IN_Pin); - 8009850: 2102 movs r1, #2 - 8009852: 4806 ldr r0, [pc, #24] @ (800986c ) - 8009854: f007 f832 bl 80108bc - 8009858: 4603 mov r3, r0 - 800985a: e000 b.n 800985e - default: - return 0; - 800985c: 2300 movs r3, #0 - } -} - 800985e: 4618 mov r0, r3 - 8009860: 3708 adds r7, #8 - 8009862: 46bd mov sp, r7 - 8009864: bd80 pop {r7, pc} - 8009866: bf00 nop - 8009868: 40010800 .word 0x40010800 - 800986c: 40011800 .word 0x40011800 - 8009870: 40011400 .word 0x40011400 - 8009874: 40010c00 .word 0x40010c00 - -08009878 : -// -// HAL_ADC_Stop(&hadc1); // stop adc - return 0; -} - -void Init_Peripheral(){ - 8009878: b580 push {r7, lr} - 800987a: af00 add r7, sp, #0 - HAL_ADCEx_Calibration_Start(&hadc1); - 800987c: 4810 ldr r0, [pc, #64] @ (80098c0 ) - 800987e: f005 fcb3 bl 800f1e8 - - RELAY_Write(RELAY_AUX0, 0); - 8009882: 2100 movs r1, #0 - 8009884: 2000 movs r0, #0 - 8009886: f7ff ff31 bl 80096ec - RELAY_Write(RELAY_AUX1, 0); - 800988a: 2100 movs r1, #0 - 800988c: 2001 movs r0, #1 - 800988e: f7ff ff2d bl 80096ec - RELAY_Write(RELAY3, 0); - 8009892: 2100 movs r1, #0 - 8009894: 2002 movs r0, #2 - 8009896: f7ff ff29 bl 80096ec - RELAY_Write(RELAY_DC, 0); - 800989a: 2100 movs r1, #0 - 800989c: 2003 movs r0, #3 - 800989e: f7ff ff25 bl 80096ec - RELAY_Write(RELAY_AC, 0); - 80098a2: 2100 movs r1, #0 - 80098a4: 2004 movs r0, #4 - 80098a6: f7ff ff21 bl 80096ec - RELAY_Write(RELAY_CC, 1); - 80098aa: 2101 movs r1, #1 - 80098ac: 2005 movs r0, #5 - 80098ae: f7ff ff1d bl 80096ec - RELAY_Write(RELAY_DC1, 0); - 80098b2: 2100 movs r1, #0 - 80098b4: 2006 movs r0, #6 - 80098b6: f7ff ff19 bl 80096ec -} - 80098ba: bf00 nop - 80098bc: bd80 pop {r7, pc} - 80098be: bf00 nop - 80098c0: 2000026c .word 0x2000026c - -080098c4 : - -float pt1000_to_temperature(float resistance) { - 80098c4: b590 push {r4, r7, lr} - 80098c6: b087 sub sp, #28 - 80098c8: af00 add r7, sp, #0 - 80098ca: 6078 str r0, [r7, #4] - // Константы для PT1000 - const float R0 = 1000.0; // Сопротивление при 0 °C - 80098cc: 4b0c ldr r3, [pc, #48] @ (8009900 ) - 80098ce: 617b str r3, [r7, #20] - const float C_A = 3.9083E-3f; - 80098d0: 4b0c ldr r3, [pc, #48] @ (8009904 ) - 80098d2: 613b str r3, [r7, #16] - - float temperature = (resistance-R0) / ( R0 * C_A); - 80098d4: 6979 ldr r1, [r7, #20] - 80098d6: 6878 ldr r0, [r7, #4] - 80098d8: f7ff f996 bl 8008c08 <__aeabi_fsub> - 80098dc: 4603 mov r3, r0 - 80098de: 461c mov r4, r3 - 80098e0: 6939 ldr r1, [r7, #16] - 80098e2: 6978 ldr r0, [r7, #20] - 80098e4: f7ff fa9a bl 8008e1c <__aeabi_fmul> - 80098e8: 4603 mov r3, r0 - 80098ea: 4619 mov r1, r3 - 80098ec: 4620 mov r0, r4 - 80098ee: f7ff fb49 bl 8008f84 <__aeabi_fdiv> - 80098f2: 4603 mov r3, r0 - 80098f4: 60fb str r3, [r7, #12] - - return temperature; - 80098f6: 68fb ldr r3, [r7, #12] -} - 80098f8: 4618 mov r0, r3 - 80098fa: 371c adds r7, #28 - 80098fc: 46bd mov sp, r7 - 80098fe: bd90 pop {r4, r7, pc} - 8009900: 447a0000 .word 0x447a0000 - 8009904: 3b801132 .word 0x3b801132 - -08009908 : - - -float calculate_NTC_resistance(int adc_value, float Vref, float Vin, float R) { - 8009908: b5b0 push {r4, r5, r7, lr} - 800990a: b086 sub sp, #24 - 800990c: af00 add r7, sp, #0 - 800990e: 60f8 str r0, [r7, #12] - 8009910: 60b9 str r1, [r7, #8] - 8009912: 607a str r2, [r7, #4] - 8009914: 603b str r3, [r7, #0] - // Преобразуем значение АЦП в выходное напряжение - float Vout = (adc_value / 4095.0) * Vref; - 8009916: 68f8 ldr r0, [r7, #12] - 8009918: f7fe fde0 bl 80084dc <__aeabi_i2d> - 800991c: a31c add r3, pc, #112 @ (adr r3, 8009990 ) - 800991e: e9d3 2300 ldrd r2, r3, [r3] - 8009922: f7fe ff6f bl 8008804 <__aeabi_ddiv> - 8009926: 4602 mov r2, r0 - 8009928: 460b mov r3, r1 - 800992a: 4614 mov r4, r2 - 800992c: 461d mov r5, r3 - 800992e: 68b8 ldr r0, [r7, #8] - 8009930: f7fe fde6 bl 8008500 <__aeabi_f2d> - 8009934: 4602 mov r2, r0 - 8009936: 460b mov r3, r1 - 8009938: 4620 mov r0, r4 - 800993a: 4629 mov r1, r5 - 800993c: f7fe fe38 bl 80085b0 <__aeabi_dmul> - 8009940: 4602 mov r2, r0 - 8009942: 460b mov r3, r1 - 8009944: 4610 mov r0, r2 - 8009946: 4619 mov r1, r3 - 8009948: f7ff f90a bl 8008b60 <__aeabi_d2f> - 800994c: 4603 mov r3, r0 - 800994e: 617b str r3, [r7, #20] - - // Проверяем, чтобы Vout не было равно Vin - if (Vout >= Vin) { - 8009950: 6879 ldr r1, [r7, #4] - 8009952: 6978 ldr r0, [r7, #20] - 8009954: f7ff fc14 bl 8009180 <__aeabi_fcmpge> - 8009958: 4603 mov r3, r0 - 800995a: 2b00 cmp r3, #0 - 800995c: d001 beq.n 8009962 - return -1; // Ошибка: Vout не может быть больше или равно Vin - 800995e: 4b0e ldr r3, [pc, #56] @ (8009998 ) - 8009960: e010 b.n 8009984 - } - - // Вычисляем сопротивление термистора - float R_NTC = R * (Vout / (Vin - Vout)); - 8009962: 6979 ldr r1, [r7, #20] - 8009964: 6878 ldr r0, [r7, #4] - 8009966: f7ff f94f bl 8008c08 <__aeabi_fsub> - 800996a: 4603 mov r3, r0 - 800996c: 4619 mov r1, r3 - 800996e: 6978 ldr r0, [r7, #20] - 8009970: f7ff fb08 bl 8008f84 <__aeabi_fdiv> - 8009974: 4603 mov r3, r0 - 8009976: 4619 mov r1, r3 - 8009978: 6838 ldr r0, [r7, #0] - 800997a: f7ff fa4f bl 8008e1c <__aeabi_fmul> - 800997e: 4603 mov r3, r0 - 8009980: 613b str r3, [r7, #16] - - return R_NTC; - 8009982: 693b ldr r3, [r7, #16] -} - 8009984: 4618 mov r0, r3 - 8009986: 3718 adds r7, #24 - 8009988: 46bd mov sp, r7 - 800998a: bdb0 pop {r4, r5, r7, pc} - 800998c: f3af 8000 nop.w - 8009990: 00000000 .word 0x00000000 - 8009994: 40affe00 .word 0x40affe00 - 8009998: bf800000 .word 0xbf800000 - -0800999c : - -int16_t GBT_ReadTemp(uint8_t ch){ - 800999c: b580 push {r7, lr} - 800999e: b088 sub sp, #32 - 80099a0: af00 add r7, sp, #0 - 80099a2: 4603 mov r3, r0 - 80099a4: 71fb strb r3, [r7, #7] - //TODO - if(ch)ADC_Select_Channel(ADC_CHANNEL_8); - 80099a6: 79fb ldrb r3, [r7, #7] - 80099a8: 2b00 cmp r3, #0 - 80099aa: d003 beq.n 80099b4 - 80099ac: 2008 movs r0, #8 - 80099ae: f000 f83b bl 8009a28 - 80099b2: e002 b.n 80099ba - else ADC_Select_Channel(ADC_CHANNEL_9); - 80099b4: 2009 movs r0, #9 - 80099b6: f000 f837 bl 8009a28 - // Начало конверсии - HAL_ADC_Start(&hadc1); - 80099ba: 4817 ldr r0, [pc, #92] @ (8009a18 ) - 80099bc: f005 f894 bl 800eae8 - - - // Ожидание окончания конверсии - HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); - 80099c0: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff - 80099c4: 4814 ldr r0, [pc, #80] @ (8009a18 ) - 80099c6: f005 f969 bl 800ec9c - - // Получение значения - uint32_t adcValue = HAL_ADC_GetValue(&hadc1); - 80099ca: 4813 ldr r0, [pc, #76] @ (8009a18 ) - 80099cc: f005 fa6c bl 800eea8 - 80099d0: 61f8 str r0, [r7, #28] - - // Остановка АЦП (по желанию) - HAL_ADC_Stop(&hadc1); - 80099d2: 4811 ldr r0, [pc, #68] @ (8009a18 ) - 80099d4: f005 f936 bl 800ec44 - - if(adcValue>4000) return 20; //Термодатчик не подключен - 80099d8: 69fb ldr r3, [r7, #28] - 80099da: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 - 80099de: d901 bls.n 80099e4 - 80099e0: 2314 movs r3, #20 - 80099e2: e015 b.n 8009a10 - -// int adc_value = 2048; // Пример значения АЦП - float Vref = 3.3; // Напряжение опорное - 80099e4: 4b0d ldr r3, [pc, #52] @ (8009a1c ) - 80099e6: 61bb str r3, [r7, #24] - float Vin = 5.0; // Входное напряжение - 80099e8: 4b0d ldr r3, [pc, #52] @ (8009a20 ) - 80099ea: 617b str r3, [r7, #20] - float R = 1000; // Сопротивление резистора в Омах - 80099ec: 4b0d ldr r3, [pc, #52] @ (8009a24 ) - 80099ee: 613b str r3, [r7, #16] - - float temp = pt1000_to_temperature(calculate_NTC_resistance(adcValue, Vref, Vin, R)); - 80099f0: 69f8 ldr r0, [r7, #28] - 80099f2: 693b ldr r3, [r7, #16] - 80099f4: 697a ldr r2, [r7, #20] - 80099f6: 69b9 ldr r1, [r7, #24] - 80099f8: f7ff ff86 bl 8009908 - 80099fc: 4603 mov r3, r0 - 80099fe: 4618 mov r0, r3 - 8009a00: f7ff ff60 bl 80098c4 - 8009a04: 60f8 str r0, [r7, #12] - - return (int16_t)temp; - 8009a06: 68f8 ldr r0, [r7, #12] - 8009a08: f7ff fbce bl 80091a8 <__aeabi_f2iz> - 8009a0c: 4603 mov r3, r0 - 8009a0e: b21b sxth r3, r3 - -} - 8009a10: 4618 mov r0, r3 - 8009a12: 3720 adds r7, #32 - 8009a14: 46bd mov sp, r7 - 8009a16: bd80 pop {r7, pc} - 8009a18: 2000026c .word 0x2000026c - 8009a1c: 40533333 .word 0x40533333 - 8009a20: 40a00000 .word 0x40a00000 - 8009a24: 447a0000 .word 0x447a0000 - -08009a28 : - -void ADC_Select_Channel(uint32_t ch) { - 8009a28: b580 push {r7, lr} - 8009a2a: b086 sub sp, #24 - 8009a2c: af00 add r7, sp, #0 - 8009a2e: 6078 str r0, [r7, #4] - ADC_ChannelConfTypeDef conf = { - 8009a30: 687b ldr r3, [r7, #4] - 8009a32: 60fb str r3, [r7, #12] - 8009a34: 2301 movs r3, #1 - 8009a36: 613b str r3, [r7, #16] - 8009a38: 2303 movs r3, #3 - 8009a3a: 617b str r3, [r7, #20] - .Channel = ch, - .Rank = 1, - .SamplingTime = ADC_SAMPLETIME_28CYCLES_5, - }; - if (HAL_ADC_ConfigChannel(&hadc1, &conf) != HAL_OK) { - 8009a3c: f107 030c add.w r3, r7, #12 - 8009a40: 4619 mov r1, r3 - 8009a42: 4806 ldr r0, [pc, #24] @ (8009a5c ) - 8009a44: f005 fa3c bl 800eec0 - 8009a48: 4603 mov r3, r0 - 8009a4a: 2b00 cmp r3, #0 - 8009a4c: d001 beq.n 8009a52 - Error_Handler(); - 8009a4e: f002 fccb bl 800c3e8 - } -} - 8009a52: bf00 nop - 8009a54: 3718 adds r7, #24 - 8009a56: 46bd mov sp, r7 - 8009a58: bd80 pop {r7, pc} - 8009a5a: bf00 nop - 8009a5c: 2000026c .word 0x2000026c - -08009a60 : -CAN_HandleTypeDef hcan1; -CAN_HandleTypeDef hcan2; - -/* CAN1 init function */ -void MX_CAN1_Init(void) -{ - 8009a60: b580 push {r7, lr} - 8009a62: af00 add r7, sp, #0 - /* USER CODE END CAN1_Init 0 */ - - /* USER CODE BEGIN CAN1_Init 1 */ - - /* USER CODE END CAN1_Init 1 */ - hcan1.Instance = CAN1; - 8009a64: 4b17 ldr r3, [pc, #92] @ (8009ac4 ) - 8009a66: 4a18 ldr r2, [pc, #96] @ (8009ac8 ) - 8009a68: 601a str r2, [r3, #0] - hcan1.Init.Prescaler = 8; - 8009a6a: 4b16 ldr r3, [pc, #88] @ (8009ac4 ) - 8009a6c: 2208 movs r2, #8 - 8009a6e: 605a str r2, [r3, #4] - hcan1.Init.Mode = CAN_MODE_NORMAL; - 8009a70: 4b14 ldr r3, [pc, #80] @ (8009ac4 ) - 8009a72: 2200 movs r2, #0 - 8009a74: 609a str r2, [r3, #8] - hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; - 8009a76: 4b13 ldr r3, [pc, #76] @ (8009ac4 ) - 8009a78: 2200 movs r2, #0 - 8009a7a: 60da str r2, [r3, #12] - hcan1.Init.TimeSeg1 = CAN_BS1_15TQ; - 8009a7c: 4b11 ldr r3, [pc, #68] @ (8009ac4 ) - 8009a7e: f44f 2260 mov.w r2, #917504 @ 0xe0000 - 8009a82: 611a str r2, [r3, #16] - hcan1.Init.TimeSeg2 = CAN_BS2_2TQ; - 8009a84: 4b0f ldr r3, [pc, #60] @ (8009ac4 ) - 8009a86: f44f 1280 mov.w r2, #1048576 @ 0x100000 - 8009a8a: 615a str r2, [r3, #20] - hcan1.Init.TimeTriggeredMode = DISABLE; - 8009a8c: 4b0d ldr r3, [pc, #52] @ (8009ac4 ) - 8009a8e: 2200 movs r2, #0 - 8009a90: 761a strb r2, [r3, #24] - hcan1.Init.AutoBusOff = ENABLE; - 8009a92: 4b0c ldr r3, [pc, #48] @ (8009ac4 ) - 8009a94: 2201 movs r2, #1 - 8009a96: 765a strb r2, [r3, #25] - hcan1.Init.AutoWakeUp = ENABLE; - 8009a98: 4b0a ldr r3, [pc, #40] @ (8009ac4 ) - 8009a9a: 2201 movs r2, #1 - 8009a9c: 769a strb r2, [r3, #26] - hcan1.Init.AutoRetransmission = ENABLE; - 8009a9e: 4b09 ldr r3, [pc, #36] @ (8009ac4 ) - 8009aa0: 2201 movs r2, #1 - 8009aa2: 76da strb r2, [r3, #27] - hcan1.Init.ReceiveFifoLocked = DISABLE; - 8009aa4: 4b07 ldr r3, [pc, #28] @ (8009ac4 ) - 8009aa6: 2200 movs r2, #0 - 8009aa8: 771a strb r2, [r3, #28] - hcan1.Init.TransmitFifoPriority = ENABLE; - 8009aaa: 4b06 ldr r3, [pc, #24] @ (8009ac4 ) - 8009aac: 2201 movs r2, #1 - 8009aae: 775a strb r2, [r3, #29] - if (HAL_CAN_Init(&hcan1) != HAL_OK) - 8009ab0: 4804 ldr r0, [pc, #16] @ (8009ac4 ) - 8009ab2: f005 fc47 bl 800f344 - 8009ab6: 4603 mov r3, r0 - 8009ab8: 2b00 cmp r3, #0 - 8009aba: d001 beq.n 8009ac0 - { - Error_Handler(); - 8009abc: f002 fc94 bl 800c3e8 - } - /* USER CODE BEGIN CAN1_Init 2 */ - - /* USER CODE END CAN1_Init 2 */ - -} - 8009ac0: bf00 nop - 8009ac2: bd80 pop {r7, pc} - 8009ac4: 200002a4 .word 0x200002a4 - 8009ac8: 40006400 .word 0x40006400 - -08009acc : -/* CAN2 init function */ -void MX_CAN2_Init(void) -{ - 8009acc: b580 push {r7, lr} - 8009ace: af00 add r7, sp, #0 - /* USER CODE END CAN2_Init 0 */ - - /* USER CODE BEGIN CAN2_Init 1 */ - - /* USER CODE END CAN2_Init 1 */ - hcan2.Instance = CAN2; - 8009ad0: 4b17 ldr r3, [pc, #92] @ (8009b30 ) - 8009ad2: 4a18 ldr r2, [pc, #96] @ (8009b34 ) - 8009ad4: 601a str r2, [r3, #0] - hcan2.Init.Prescaler = 16; - 8009ad6: 4b16 ldr r3, [pc, #88] @ (8009b30 ) - 8009ad8: 2210 movs r2, #16 - 8009ada: 605a str r2, [r3, #4] - hcan2.Init.Mode = CAN_MODE_NORMAL; - 8009adc: 4b14 ldr r3, [pc, #80] @ (8009b30 ) - 8009ade: 2200 movs r2, #0 - 8009ae0: 609a str r2, [r3, #8] - hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ; - 8009ae2: 4b13 ldr r3, [pc, #76] @ (8009b30 ) - 8009ae4: 2200 movs r2, #0 - 8009ae6: 60da str r2, [r3, #12] - hcan2.Init.TimeSeg1 = CAN_BS1_15TQ; - 8009ae8: 4b11 ldr r3, [pc, #68] @ (8009b30 ) - 8009aea: f44f 2260 mov.w r2, #917504 @ 0xe0000 - 8009aee: 611a str r2, [r3, #16] - hcan2.Init.TimeSeg2 = CAN_BS2_2TQ; - 8009af0: 4b0f ldr r3, [pc, #60] @ (8009b30 ) - 8009af2: f44f 1280 mov.w r2, #1048576 @ 0x100000 - 8009af6: 615a str r2, [r3, #20] - hcan2.Init.TimeTriggeredMode = DISABLE; - 8009af8: 4b0d ldr r3, [pc, #52] @ (8009b30 ) - 8009afa: 2200 movs r2, #0 - 8009afc: 761a strb r2, [r3, #24] - hcan2.Init.AutoBusOff = ENABLE; - 8009afe: 4b0c ldr r3, [pc, #48] @ (8009b30 ) - 8009b00: 2201 movs r2, #1 - 8009b02: 765a strb r2, [r3, #25] - hcan2.Init.AutoWakeUp = ENABLE; - 8009b04: 4b0a ldr r3, [pc, #40] @ (8009b30 ) - 8009b06: 2201 movs r2, #1 - 8009b08: 769a strb r2, [r3, #26] - hcan2.Init.AutoRetransmission = ENABLE; - 8009b0a: 4b09 ldr r3, [pc, #36] @ (8009b30 ) - 8009b0c: 2201 movs r2, #1 - 8009b0e: 76da strb r2, [r3, #27] - hcan2.Init.ReceiveFifoLocked = DISABLE; - 8009b10: 4b07 ldr r3, [pc, #28] @ (8009b30 ) - 8009b12: 2200 movs r2, #0 - 8009b14: 771a strb r2, [r3, #28] - hcan2.Init.TransmitFifoPriority = ENABLE; - 8009b16: 4b06 ldr r3, [pc, #24] @ (8009b30 ) - 8009b18: 2201 movs r2, #1 - 8009b1a: 775a strb r2, [r3, #29] - if (HAL_CAN_Init(&hcan2) != HAL_OK) - 8009b1c: 4804 ldr r0, [pc, #16] @ (8009b30 ) - 8009b1e: f005 fc11 bl 800f344 - 8009b22: 4603 mov r3, r0 - 8009b24: 2b00 cmp r3, #0 - 8009b26: d001 beq.n 8009b2c - { - Error_Handler(); - 8009b28: f002 fc5e bl 800c3e8 - } - /* USER CODE BEGIN CAN2_Init 2 */ - - /* USER CODE END CAN2_Init 2 */ - -} - 8009b2c: bf00 nop - 8009b2e: bd80 pop {r7, pc} - 8009b30: 200002cc .word 0x200002cc - 8009b34: 40006800 .word 0x40006800 - -08009b38 : - -static uint32_t HAL_RCC_CAN1_CLK_ENABLED=0; - -void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) -{ - 8009b38: b580 push {r7, lr} - 8009b3a: b08e sub sp, #56 @ 0x38 - 8009b3c: af00 add r7, sp, #0 - 8009b3e: 6078 str r0, [r7, #4] - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 8009b40: f107 0320 add.w r3, r7, #32 - 8009b44: 2200 movs r2, #0 - 8009b46: 601a str r2, [r3, #0] - 8009b48: 605a str r2, [r3, #4] - 8009b4a: 609a str r2, [r3, #8] - 8009b4c: 60da str r2, [r3, #12] - if(canHandle->Instance==CAN1) - 8009b4e: 687b ldr r3, [r7, #4] - 8009b50: 681b ldr r3, [r3, #0] - 8009b52: 4a61 ldr r2, [pc, #388] @ (8009cd8 ) - 8009b54: 4293 cmp r3, r2 - 8009b56: d153 bne.n 8009c00 - { - /* USER CODE BEGIN CAN1_MspInit 0 */ - - /* USER CODE END CAN1_MspInit 0 */ - /* CAN1 clock enable */ - HAL_RCC_CAN1_CLK_ENABLED++; - 8009b58: 4b60 ldr r3, [pc, #384] @ (8009cdc ) - 8009b5a: 681b ldr r3, [r3, #0] - 8009b5c: 3301 adds r3, #1 - 8009b5e: 4a5f ldr r2, [pc, #380] @ (8009cdc ) - 8009b60: 6013 str r3, [r2, #0] - if(HAL_RCC_CAN1_CLK_ENABLED==1){ - 8009b62: 4b5e ldr r3, [pc, #376] @ (8009cdc ) - 8009b64: 681b ldr r3, [r3, #0] - 8009b66: 2b01 cmp r3, #1 - 8009b68: d10b bne.n 8009b82 - __HAL_RCC_CAN1_CLK_ENABLE(); - 8009b6a: 4b5d ldr r3, [pc, #372] @ (8009ce0 ) - 8009b6c: 69db ldr r3, [r3, #28] - 8009b6e: 4a5c ldr r2, [pc, #368] @ (8009ce0 ) - 8009b70: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 - 8009b74: 61d3 str r3, [r2, #28] - 8009b76: 4b5a ldr r3, [pc, #360] @ (8009ce0 ) - 8009b78: 69db ldr r3, [r3, #28] - 8009b7a: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 8009b7e: 61fb str r3, [r7, #28] - 8009b80: 69fb ldr r3, [r7, #28] - } - - __HAL_RCC_GPIOD_CLK_ENABLE(); - 8009b82: 4b57 ldr r3, [pc, #348] @ (8009ce0 ) - 8009b84: 699b ldr r3, [r3, #24] - 8009b86: 4a56 ldr r2, [pc, #344] @ (8009ce0 ) - 8009b88: f043 0320 orr.w r3, r3, #32 - 8009b8c: 6193 str r3, [r2, #24] - 8009b8e: 4b54 ldr r3, [pc, #336] @ (8009ce0 ) - 8009b90: 699b ldr r3, [r3, #24] - 8009b92: f003 0320 and.w r3, r3, #32 - 8009b96: 61bb str r3, [r7, #24] - 8009b98: 69bb ldr r3, [r7, #24] - /**CAN1 GPIO Configuration - PD0 ------> CAN1_RX - PD1 ------> CAN1_TX - */ - GPIO_InitStruct.Pin = GPIO_PIN_0; - 8009b9a: 2301 movs r3, #1 - 8009b9c: 623b str r3, [r7, #32] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 8009b9e: 2300 movs r3, #0 - 8009ba0: 627b str r3, [r7, #36] @ 0x24 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8009ba2: 2300 movs r3, #0 - 8009ba4: 62bb str r3, [r7, #40] @ 0x28 - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 8009ba6: f107 0320 add.w r3, r7, #32 - 8009baa: 4619 mov r1, r3 - 8009bac: 484d ldr r0, [pc, #308] @ (8009ce4 ) - 8009bae: f006 fd01 bl 80105b4 - - GPIO_InitStruct.Pin = GPIO_PIN_1; - 8009bb2: 2302 movs r3, #2 - 8009bb4: 623b str r3, [r7, #32] - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8009bb6: 2302 movs r3, #2 - 8009bb8: 627b str r3, [r7, #36] @ 0x24 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8009bba: 2303 movs r3, #3 - 8009bbc: 62fb str r3, [r7, #44] @ 0x2c - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 8009bbe: f107 0320 add.w r3, r7, #32 - 8009bc2: 4619 mov r1, r3 - 8009bc4: 4847 ldr r0, [pc, #284] @ (8009ce4 ) - 8009bc6: f006 fcf5 bl 80105b4 - - __HAL_AFIO_REMAP_CAN1_3(); - 8009bca: 4b47 ldr r3, [pc, #284] @ (8009ce8 ) - 8009bcc: 685b ldr r3, [r3, #4] - 8009bce: 633b str r3, [r7, #48] @ 0x30 - 8009bd0: 6b3b ldr r3, [r7, #48] @ 0x30 - 8009bd2: f423 43c0 bic.w r3, r3, #24576 @ 0x6000 - 8009bd6: 633b str r3, [r7, #48] @ 0x30 - 8009bd8: 6b3b ldr r3, [r7, #48] @ 0x30 - 8009bda: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 8009bde: 633b str r3, [r7, #48] @ 0x30 - 8009be0: 6b3b ldr r3, [r7, #48] @ 0x30 - 8009be2: f443 43c0 orr.w r3, r3, #24576 @ 0x6000 - 8009be6: 633b str r3, [r7, #48] @ 0x30 - 8009be8: 4a3f ldr r2, [pc, #252] @ (8009ce8 ) - 8009bea: 6b3b ldr r3, [r7, #48] @ 0x30 - 8009bec: 6053 str r3, [r2, #4] - - /* CAN1 interrupt Init */ - HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0); - 8009bee: 2200 movs r2, #0 - 8009bf0: 2100 movs r1, #0 - 8009bf2: 2014 movs r0, #20 - 8009bf4: f006 fb49 bl 801028a - HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); - 8009bf8: 2014 movs r0, #20 - 8009bfa: f006 fb62 bl 80102c2 - HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn); - /* USER CODE BEGIN CAN2_MspInit 1 */ - - /* USER CODE END CAN2_MspInit 1 */ - } -} - 8009bfe: e067 b.n 8009cd0 - else if(canHandle->Instance==CAN2) - 8009c00: 687b ldr r3, [r7, #4] - 8009c02: 681b ldr r3, [r3, #0] - 8009c04: 4a39 ldr r2, [pc, #228] @ (8009cec ) - 8009c06: 4293 cmp r3, r2 - 8009c08: d162 bne.n 8009cd0 - __HAL_RCC_CAN2_CLK_ENABLE(); - 8009c0a: 4b35 ldr r3, [pc, #212] @ (8009ce0 ) - 8009c0c: 69db ldr r3, [r3, #28] - 8009c0e: 4a34 ldr r2, [pc, #208] @ (8009ce0 ) - 8009c10: f043 6380 orr.w r3, r3, #67108864 @ 0x4000000 - 8009c14: 61d3 str r3, [r2, #28] - 8009c16: 4b32 ldr r3, [pc, #200] @ (8009ce0 ) - 8009c18: 69db ldr r3, [r3, #28] - 8009c1a: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 - 8009c1e: 617b str r3, [r7, #20] - 8009c20: 697b ldr r3, [r7, #20] - HAL_RCC_CAN1_CLK_ENABLED++; - 8009c22: 4b2e ldr r3, [pc, #184] @ (8009cdc ) - 8009c24: 681b ldr r3, [r3, #0] - 8009c26: 3301 adds r3, #1 - 8009c28: 4a2c ldr r2, [pc, #176] @ (8009cdc ) - 8009c2a: 6013 str r3, [r2, #0] - if(HAL_RCC_CAN1_CLK_ENABLED==1){ - 8009c2c: 4b2b ldr r3, [pc, #172] @ (8009cdc ) - 8009c2e: 681b ldr r3, [r3, #0] - 8009c30: 2b01 cmp r3, #1 - 8009c32: d10b bne.n 8009c4c - __HAL_RCC_CAN1_CLK_ENABLE(); - 8009c34: 4b2a ldr r3, [pc, #168] @ (8009ce0 ) - 8009c36: 69db ldr r3, [r3, #28] - 8009c38: 4a29 ldr r2, [pc, #164] @ (8009ce0 ) - 8009c3a: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 - 8009c3e: 61d3 str r3, [r2, #28] - 8009c40: 4b27 ldr r3, [pc, #156] @ (8009ce0 ) - 8009c42: 69db ldr r3, [r3, #28] - 8009c44: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 8009c48: 613b str r3, [r7, #16] - 8009c4a: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOB_CLK_ENABLE(); - 8009c4c: 4b24 ldr r3, [pc, #144] @ (8009ce0 ) - 8009c4e: 699b ldr r3, [r3, #24] - 8009c50: 4a23 ldr r2, [pc, #140] @ (8009ce0 ) - 8009c52: f043 0308 orr.w r3, r3, #8 - 8009c56: 6193 str r3, [r2, #24] - 8009c58: 4b21 ldr r3, [pc, #132] @ (8009ce0 ) - 8009c5a: 699b ldr r3, [r3, #24] - 8009c5c: f003 0308 and.w r3, r3, #8 - 8009c60: 60fb str r3, [r7, #12] - 8009c62: 68fb ldr r3, [r7, #12] - GPIO_InitStruct.Pin = GPIO_PIN_5; - 8009c64: 2320 movs r3, #32 - 8009c66: 623b str r3, [r7, #32] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 8009c68: 2300 movs r3, #0 - 8009c6a: 627b str r3, [r7, #36] @ 0x24 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 8009c6c: 2300 movs r3, #0 - 8009c6e: 62bb str r3, [r7, #40] @ 0x28 - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 8009c70: f107 0320 add.w r3, r7, #32 - 8009c74: 4619 mov r1, r3 - 8009c76: 481e ldr r0, [pc, #120] @ (8009cf0 ) - 8009c78: f006 fc9c bl 80105b4 - GPIO_InitStruct.Pin = GPIO_PIN_6; - 8009c7c: 2340 movs r3, #64 @ 0x40 - 8009c7e: 623b str r3, [r7, #32] - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 8009c80: 2302 movs r3, #2 - 8009c82: 627b str r3, [r7, #36] @ 0x24 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 8009c84: 2303 movs r3, #3 - 8009c86: 62fb str r3, [r7, #44] @ 0x2c - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 8009c88: f107 0320 add.w r3, r7, #32 - 8009c8c: 4619 mov r1, r3 - 8009c8e: 4818 ldr r0, [pc, #96] @ (8009cf0 ) - 8009c90: f006 fc90 bl 80105b4 - __HAL_AFIO_REMAP_CAN2_ENABLE(); - 8009c94: 4b14 ldr r3, [pc, #80] @ (8009ce8 ) - 8009c96: 685b ldr r3, [r3, #4] - 8009c98: 637b str r3, [r7, #52] @ 0x34 - 8009c9a: 6b7b ldr r3, [r7, #52] @ 0x34 - 8009c9c: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 8009ca0: 637b str r3, [r7, #52] @ 0x34 - 8009ca2: 6b7b ldr r3, [r7, #52] @ 0x34 - 8009ca4: f443 0380 orr.w r3, r3, #4194304 @ 0x400000 - 8009ca8: 637b str r3, [r7, #52] @ 0x34 - 8009caa: 4a0f ldr r2, [pc, #60] @ (8009ce8 ) - 8009cac: 6b7b ldr r3, [r7, #52] @ 0x34 - 8009cae: 6053 str r3, [r2, #4] - HAL_NVIC_SetPriority(CAN2_TX_IRQn, 0, 0); - 8009cb0: 2200 movs r2, #0 - 8009cb2: 2100 movs r1, #0 - 8009cb4: 203f movs r0, #63 @ 0x3f - 8009cb6: f006 fae8 bl 801028a - HAL_NVIC_EnableIRQ(CAN2_TX_IRQn); - 8009cba: 203f movs r0, #63 @ 0x3f - 8009cbc: f006 fb01 bl 80102c2 - HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 0, 0); - 8009cc0: 2200 movs r2, #0 - 8009cc2: 2100 movs r1, #0 - 8009cc4: 2041 movs r0, #65 @ 0x41 - 8009cc6: f006 fae0 bl 801028a - HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn); - 8009cca: 2041 movs r0, #65 @ 0x41 - 8009ccc: f006 faf9 bl 80102c2 -} - 8009cd0: bf00 nop - 8009cd2: 3738 adds r7, #56 @ 0x38 - 8009cd4: 46bd mov sp, r7 - 8009cd6: bd80 pop {r7, pc} - 8009cd8: 40006400 .word 0x40006400 - 8009cdc: 200002f4 .word 0x200002f4 - 8009ce0: 40021000 .word 0x40021000 - 8009ce4: 40011400 .word 0x40011400 - 8009ce8: 40010000 .word 0x40010000 - 8009cec: 40006800 .word 0x40006800 - 8009cf0: 40010c00 .word 0x40010c00 - -08009cf4 : -#include "lock.h" -#include "psu_control.h" - -ChargingConnector_t CONN; - -void CONN_Init(){ - 8009cf4: b480 push {r7} - 8009cf6: af00 add r7, sp, #0 - - CONN.connControl = CMD_NONE; - 8009cf8: 4b08 ldr r3, [pc, #32] @ (8009d1c ) - 8009cfa: 2200 movs r2, #0 - 8009cfc: 701a strb r2, [r3, #0] - CONN.connState = Unknown; - 8009cfe: 4b07 ldr r3, [pc, #28] @ (8009d1c ) - 8009d00: 2200 movs r2, #0 - 8009d02: 705a strb r2, [r3, #1] - CONN.RequestedVoltage = PSU_MIN_VOLTAGE; - 8009d04: 4b05 ldr r3, [pc, #20] @ (8009d1c ) - 8009d06: 2200 movs r2, #0 - 8009d08: f062 0269 orn r2, r2, #105 @ 0x69 - 8009d0c: 73da strb r2, [r3, #15] - 8009d0e: 2200 movs r2, #0 - 8009d10: 741a strb r2, [r3, #16] - -} - 8009d12: bf00 nop - 8009d14: 46bd mov sp, r7 - 8009d16: bc80 pop {r7} - 8009d18: 4770 bx lr - 8009d1a: bf00 nop - 8009d1c: 200002f8 .word 0x200002f8 - -08009d20 : - -void CONN_Loop(){ - 8009d20: b580 push {r7, lr} - 8009d22: af00 add r7, sp, #0 - static CONN_State_t last_connState = Unknown; - if(last_connState != CONN.connState){ - 8009d24: 4b1e ldr r3, [pc, #120] @ (8009da0 ) - 8009d26: 785a ldrb r2, [r3, #1] - 8009d28: 4b1e ldr r3, [pc, #120] @ (8009da4 ) - 8009d2a: 781b ldrb r3, [r3, #0] - 8009d2c: 429a cmp r2, r3 - 8009d2e: d006 beq.n 8009d3e - last_connState = CONN.connState; - 8009d30: 4b1b ldr r3, [pc, #108] @ (8009da0 ) - 8009d32: 785a ldrb r2, [r3, #1] - 8009d34: 4b1b ldr r3, [pc, #108] @ (8009da4 ) - 8009d36: 701a strb r2, [r3, #0] - CONN.connControl = CMD_NONE; - 8009d38: 4b19 ldr r3, [pc, #100] @ (8009da0 ) - 8009d3a: 2200 movs r2, #0 - 8009d3c: 701a strb r2, [r3, #0] - } - - if(GBT_LockState.error){ - 8009d3e: 4b1a ldr r3, [pc, #104] @ (8009da8 ) - 8009d40: 785b ldrb r3, [r3, #1] - 8009d42: 2b00 cmp r3, #0 - 8009d44: d003 beq.n 8009d4e - CONN.chargingError = CONN_ERR_LOCK; - 8009d46: 4b16 ldr r3, [pc, #88] @ (8009da0 ) - 8009d48: 2204 movs r2, #4 - 8009d4a: 775a strb r2, [r3, #29] - 8009d4c: e016 b.n 8009d7c - } else if(PSU0.cont_fault){ - 8009d4e: 4b17 ldr r3, [pc, #92] @ (8009dac ) - 8009d50: 7b1b ldrb r3, [r3, #12] - 8009d52: 2b00 cmp r3, #0 - 8009d54: d003 beq.n 8009d5e - CONN.chargingError = CONN_ERR_CONTACTOR; - 8009d56: 4b12 ldr r3, [pc, #72] @ (8009da0 ) - 8009d58: 2207 movs r2, #7 - 8009d5a: 775a strb r2, [r3, #29] - 8009d5c: e00e b.n 8009d7c - } else if(PSU0.psu_fault){ - 8009d5e: 4b13 ldr r3, [pc, #76] @ (8009dac ) - 8009d60: 7b5b ldrb r3, [r3, #13] - 8009d62: 2b00 cmp r3, #0 - 8009d64: d003 beq.n 8009d6e - CONN.chargingError = CONN_ERR_PSU_FAULT; - 8009d66: 4b0e ldr r3, [pc, #56] @ (8009da0 ) - 8009d68: 220a movs r2, #10 - 8009d6a: 775a strb r2, [r3, #29] - 8009d6c: e006 b.n 8009d7c - // } else if(!CTRL.ac_ok) { - // CONN.chargingError = CONN_ERR_AC_FAULT; - // } else - }else if (CONN.EvConnected == 0){ - 8009d6e: 4b0c ldr r3, [pc, #48] @ (8009da0 ) - 8009d70: 7f9b ldrb r3, [r3, #30] - 8009d72: 2b00 cmp r3, #0 - 8009d74: d102 bne.n 8009d7c - CONN.chargingError = CONN_NO_ERROR; - 8009d76: 4b0a ldr r3, [pc, #40] @ (8009da0 ) - 8009d78: 2200 movs r2, #0 - 8009d7a: 775a strb r2, [r3, #29] - } - - if(ED_TraceWarning(CONN.chargingError, 0)) printf("CONN%d Error: %d\n", 0, CONN.chargingError); - 8009d7c: 4b08 ldr r3, [pc, #32] @ (8009da0 ) - 8009d7e: 7f5b ldrb r3, [r3, #29] - 8009d80: 2100 movs r1, #0 - 8009d82: 4618 mov r0, r3 - 8009d84: f002 f9de bl 800c144 - 8009d88: 4603 mov r3, r0 - 8009d8a: 2b00 cmp r3, #0 - 8009d8c: d006 beq.n 8009d9c - 8009d8e: 4b04 ldr r3, [pc, #16] @ (8009da0 ) - 8009d90: 7f5b ldrb r3, [r3, #29] - 8009d92: 461a mov r2, r3 - 8009d94: 2100 movs r1, #0 - 8009d96: 4806 ldr r0, [pc, #24] @ (8009db0 ) - 8009d98: f00a f9ee bl 8014178 - -} - 8009d9c: bf00 nop - 8009d9e: bd80 pop {r7, pc} - 8009da0: 200002f8 .word 0x200002f8 - 8009da4: 20000317 .word 0x20000317 - 8009da8: 20000008 .word 0x20000008 - 8009dac: 20000a14 .word 0x20000a14 - 8009db0: 08016578 .word 0x08016578 - -08009db4 : - -GBT_StopSource_t GBT_StopSource; - -extern ConfigBlock_t config; - -void GBT_Init(){ - 8009db4: b580 push {r7, lr} - 8009db6: af00 add r7, sp, #0 - GBT_State = GBT_DISABLED; - 8009db8: 4b0b ldr r3, [pc, #44] @ (8009de8 ) - 8009dba: 2210 movs r2, #16 - 8009dbc: 701a strb r2, [r3, #0] - GBT_Reset(); - 8009dbe: f000 ff77 bl 800acb0 - - GBT_MaxLoad.maxOutputVoltage = PSU_MAX_VOLTAGE*10; // 1000V - 8009dc2: 4b0a ldr r3, [pc, #40] @ (8009dec ) - 8009dc4: f242 7210 movw r2, #10000 @ 0x2710 - 8009dc8: 801a strh r2, [r3, #0] - GBT_MaxLoad.minOutputVoltage = PSU_MIN_VOLTAGE*10; //150V - 8009dca: 4b08 ldr r3, [pc, #32] @ (8009dec ) - 8009dcc: f240 52dc movw r2, #1500 @ 0x5dc - 8009dd0: 805a strh r2, [r3, #2] - GBT_MaxLoad.maxOutputCurrent = 4000 - (PSU_MAX_CURRENT*10); //100A - 8009dd2: 4b06 ldr r3, [pc, #24] @ (8009dec ) - 8009dd4: f640 32b8 movw r2, #3000 @ 0xbb8 - 8009dd8: 809a strh r2, [r3, #4] - GBT_MaxLoad.minOutputCurrent = 4000 - (PSU_MIN_CURRENT*10); //1A - 8009dda: 4b04 ldr r3, [pc, #16] @ (8009dec ) - 8009ddc: f640 7296 movw r2, #3990 @ 0xf96 - 8009de0: 80da strh r2, [r3, #6] - -} - 8009de2: bf00 nop - 8009de4: bd80 pop {r7, pc} - 8009de6: bf00 nop - 8009de8: 20000318 .word 0x20000318 - 8009dec: 20000330 .word 0x20000330 - -08009df0 : - -void GBT_SetConfig(){ - 8009df0: b580 push {r7, lr} - 8009df2: af00 add r7, sp, #0 - set_Time(config.unixTime); - 8009df4: 4b0c ldr r3, [pc, #48] @ (8009e28 ) - 8009df6: f8d3 3007 ldr.w r3, [r3, #7] - 8009dfa: 4618 mov r0, r3 - 8009dfc: f003 ff74 bl 800dce8 - GBT_ChargerInfo.chargerLocation[0] = config.location[0]; - 8009e00: 4b09 ldr r3, [pc, #36] @ (8009e28 ) - 8009e02: 781a ldrb r2, [r3, #0] - 8009e04: 4b09 ldr r3, [pc, #36] @ (8009e2c ) - 8009e06: 715a strb r2, [r3, #5] - GBT_ChargerInfo.chargerLocation[1] = config.location[1]; - 8009e08: 4b07 ldr r3, [pc, #28] @ (8009e28 ) - 8009e0a: 785a ldrb r2, [r3, #1] - 8009e0c: 4b07 ldr r3, [pc, #28] @ (8009e2c ) - 8009e0e: 719a strb r2, [r3, #6] - GBT_ChargerInfo.chargerLocation[2] = config.location[2]; - 8009e10: 4b05 ldr r3, [pc, #20] @ (8009e28 ) - 8009e12: 789a ldrb r2, [r3, #2] - 8009e14: 4b05 ldr r3, [pc, #20] @ (8009e2c ) - 8009e16: 71da strb r2, [r3, #7] - GBT_ChargerInfo.chargerNumber = config.chargerNumber; - 8009e18: 4b03 ldr r3, [pc, #12] @ (8009e28 ) - 8009e1a: f8d3 3003 ldr.w r3, [r3, #3] - 8009e1e: 4a03 ldr r2, [pc, #12] @ (8009e2c ) - 8009e20: f8c2 3001 str.w r3, [r2, #1] -} - 8009e24: bf00 nop - 8009e26: bd80 pop {r7, pc} - 8009e28: 2000006c .word 0x2000006c - 8009e2c: 20000338 .word 0x20000338 - -08009e30 : - - -void GBT_ChargerTask(){ - 8009e30: b5b0 push {r4, r5, r7, lr} - 8009e32: b084 sub sp, #16 - 8009e34: af02 add r7, sp, #8 - - //GBT_LockTask(); - if(j_rx.state == 2){ - 8009e36: 4bab ldr r3, [pc, #684] @ (800a0e4 ) - 8009e38: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 8009e3c: 2b02 cmp r3, #2 - 8009e3e: f040 80d1 bne.w 8009fe4 - switch (j_rx.PGN){ - 8009e42: 4ba8 ldr r3, [pc, #672] @ (800a0e4 ) - 8009e44: f8d3 3100 ldr.w r3, [r3, #256] @ 0x100 - 8009e48: f5b3 5f1c cmp.w r3, #9984 @ 0x2700 - 8009e4c: d047 beq.n 8009ede - 8009e4e: f5b3 5f1c cmp.w r3, #9984 @ 0x2700 - 8009e52: f200 80c3 bhi.w 8009fdc - 8009e56: f5b3 5fe0 cmp.w r3, #7168 @ 0x1c00 - 8009e5a: f000 80b6 beq.w 8009fca - 8009e5e: f5b3 5fe0 cmp.w r3, #7168 @ 0x1c00 - 8009e62: f200 80bb bhi.w 8009fdc - 8009e66: f5b3 5fb8 cmp.w r3, #5888 @ 0x1700 - 8009e6a: f000 80b2 beq.w 8009fd2 - 8009e6e: f5b3 5fb8 cmp.w r3, #5888 @ 0x1700 - 8009e72: f200 80b3 bhi.w 8009fdc - 8009e76: f5b3 5fb0 cmp.w r3, #5632 @ 0x1600 - 8009e7a: f000 80ac beq.w 8009fd6 - 8009e7e: f5b3 5fb0 cmp.w r3, #5632 @ 0x1600 - 8009e82: f200 80ab bhi.w 8009fdc - 8009e86: f5b3 5fa8 cmp.w r3, #5376 @ 0x1500 - 8009e8a: f000 80a6 beq.w 8009fda - 8009e8e: f5b3 5fa8 cmp.w r3, #5376 @ 0x1500 - 8009e92: f200 80a3 bhi.w 8009fdc - 8009e96: f5b3 5f98 cmp.w r3, #4864 @ 0x1300 - 8009e9a: f000 8086 beq.w 8009faa - 8009e9e: f5b3 5f98 cmp.w r3, #4864 @ 0x1300 - 8009ea2: f200 809b bhi.w 8009fdc - 8009ea6: f5b3 5f88 cmp.w r3, #4352 @ 0x1100 - 8009eaa: d06f beq.n 8009f8c - 8009eac: f5b3 5f88 cmp.w r3, #4352 @ 0x1100 - 8009eb0: f200 8094 bhi.w 8009fdc - 8009eb4: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 8009eb8: d046 beq.n 8009f48 - 8009eba: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 8009ebe: f200 808d bhi.w 8009fdc - 8009ec2: f5b3 6f10 cmp.w r3, #2304 @ 0x900 - 8009ec6: d02c beq.n 8009f22 - 8009ec8: f5b3 6f10 cmp.w r3, #2304 @ 0x900 - 8009ecc: f200 8086 bhi.w 8009fdc - 8009ed0: f5b3 7f00 cmp.w r3, #512 @ 0x200 - 8009ed4: d00b beq.n 8009eee - 8009ed6: f5b3 6fc0 cmp.w r3, #1536 @ 0x600 - 8009eda: d018 beq.n 8009f0e - 8009edc: e07e b.n 8009fdc - case 0x2700: //PGN BHM - GBT_BHM_recv = 1; - 8009ede: 4b82 ldr r3, [pc, #520] @ (800a0e8 ) - 8009ee0: 2201 movs r2, #1 - 8009ee2: 701a strb r2, [r3, #0] - memcpy (&GBT_MaxVoltage, j_rx.data, sizeof(GBT_MaxVoltage)); - 8009ee4: 4b7f ldr r3, [pc, #508] @ (800a0e4 ) - 8009ee6: 881a ldrh r2, [r3, #0] - 8009ee8: 4b80 ldr r3, [pc, #512] @ (800a0ec ) - 8009eea: 801a strh r2, [r3, #0] - - break; - 8009eec: e076 b.n 8009fdc - - case 0x0200: //PGN BRM LONG - GBT_BAT_INFO_recv = 1; - 8009eee: 4b80 ldr r3, [pc, #512] @ (800a0f0 ) - 8009ef0: 2201 movs r2, #1 - 8009ef2: 701a strb r2, [r3, #0] - memcpy (&GBT_EVInfo, j_rx.data, sizeof(GBT_EVInfo)); - 8009ef4: 4a7f ldr r2, [pc, #508] @ (800a0f4 ) - 8009ef6: 4b7b ldr r3, [pc, #492] @ (800a0e4 ) - 8009ef8: 4614 mov r4, r2 - 8009efa: 461d mov r5, r3 - 8009efc: cd0f ldmia r5!, {r0, r1, r2, r3} - 8009efe: c40f stmia r4!, {r0, r1, r2, r3} - 8009f00: cd0f ldmia r5!, {r0, r1, r2, r3} - 8009f02: c40f stmia r4!, {r0, r1, r2, r3} - 8009f04: cd0f ldmia r5!, {r0, r1, r2, r3} - 8009f06: c40f stmia r4!, {r0, r1, r2, r3} - 8009f08: 682b ldr r3, [r5, #0] - 8009f0a: 7023 strb r3, [r4, #0] - - break; - 8009f0c: e066 b.n 8009fdc - - case 0x0600: //PGN BCP LONG - GBT_BAT_STAT_recv = 1; - 8009f0e: 4b7a ldr r3, [pc, #488] @ (800a0f8 ) - 8009f10: 2201 movs r2, #1 - 8009f12: 701a strb r2, [r3, #0] - memcpy (&GBT_BATStat, j_rx.data, sizeof(GBT_BATStat)); - 8009f14: 4a79 ldr r2, [pc, #484] @ (800a0fc ) - 8009f16: 4b73 ldr r3, [pc, #460] @ (800a0e4 ) - 8009f18: 4614 mov r4, r2 - 8009f1a: cb0f ldmia r3, {r0, r1, r2, r3} - 8009f1c: c407 stmia r4!, {r0, r1, r2} - 8009f1e: 7023 strb r3, [r4, #0] - break; - 8009f20: e05c b.n 8009fdc - - case 0x0900: //PGN BRO - GBT_BRO_recv = 1; - 8009f22: 4b77 ldr r3, [pc, #476] @ (800a100 ) - 8009f24: 2201 movs r2, #1 - 8009f26: 701a strb r2, [r3, #0] - if(j_rx.data[0] == 0xAA) EV_ready = 1; - 8009f28: 4b6e ldr r3, [pc, #440] @ (800a0e4 ) - 8009f2a: 781b ldrb r3, [r3, #0] - 8009f2c: 2baa cmp r3, #170 @ 0xaa - 8009f2e: d103 bne.n 8009f38 - 8009f30: 4b74 ldr r3, [pc, #464] @ (800a104 ) - 8009f32: 2201 movs r2, #1 - 8009f34: 701a strb r2, [r3, #0] - 8009f36: e002 b.n 8009f3e - else EV_ready = 0; - 8009f38: 4b72 ldr r3, [pc, #456] @ (800a104 ) - 8009f3a: 2200 movs r2, #0 - 8009f3c: 701a strb r2, [r3, #0] - GBT_BRO = j_rx.data[0]; - 8009f3e: 4b69 ldr r3, [pc, #420] @ (800a0e4 ) - 8009f40: 781a ldrb r2, [r3, #0] - 8009f42: 4b71 ldr r3, [pc, #452] @ (800a108 ) - 8009f44: 701a strb r2, [r3, #0] - break; - 8009f46: e049 b.n 8009fdc - - case 0x1000: //PGN BCL - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - 8009f48: f004 fcc8 bl 800e8dc - 8009f4c: 4603 mov r3, r0 - 8009f4e: 4a6f ldr r2, [pc, #444] @ (800a10c ) - 8009f50: 6013 str r3, [r2, #0] - //TODO: power block - memcpy (&GBT_ReqPower, j_rx.data, sizeof(GBT_ReqPower)); - 8009f52: 4b6f ldr r3, [pc, #444] @ (800a110 ) - 8009f54: 4a63 ldr r2, [pc, #396] @ (800a0e4 ) - 8009f56: e892 0003 ldmia.w r2, {r0, r1} - 8009f5a: 6018 str r0, [r3, #0] - 8009f5c: 3304 adds r3, #4 - 8009f5e: 7019 strb r1, [r3, #0] - - uint16_t volt = GBT_ReqPower.requestedVoltage; // 0.1V/bit - 8009f60: 4b6b ldr r3, [pc, #428] @ (800a110 ) - 8009f62: 881b ldrh r3, [r3, #0] - 8009f64: 80fb strh r3, [r7, #6] - uint16_t curr = 4000 - GBT_ReqPower.requestedCurrent; // 0.1A/bit - 8009f66: 4b6a ldr r3, [pc, #424] @ (800a110 ) - 8009f68: 885b ldrh r3, [r3, #2] - 8009f6a: f5c3 637a rsb r3, r3, #4000 @ 0xfa0 - 8009f6e: 80bb strh r3, [r7, #4] - CONN.RequestedVoltage = volt / 10; // В - 8009f70: 88fb ldrh r3, [r7, #6] - 8009f72: 4a68 ldr r2, [pc, #416] @ (800a114 ) - 8009f74: fba2 2303 umull r2, r3, r2, r3 - 8009f78: 08db lsrs r3, r3, #3 - 8009f7a: b29a uxth r2, r3 - 8009f7c: 4b66 ldr r3, [pc, #408] @ (800a118 ) - 8009f7e: f8a3 200f strh.w r2, [r3, #15] - CONN.WantedCurrent = curr; // 0.1A - 8009f82: 4b65 ldr r3, [pc, #404] @ (800a118 ) - 8009f84: 88ba ldrh r2, [r7, #4] - 8009f86: f8a3 201b strh.w r2, [r3, #27] - - break; - 8009f8a: e027 b.n 8009fdc - - case 0x1100: //PGN BCS - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - 8009f8c: f004 fca6 bl 800e8dc - 8009f90: 4603 mov r3, r0 - 8009f92: 4a5e ldr r2, [pc, #376] @ (800a10c ) - 8009f94: 6013 str r3, [r2, #0] - //TODO - memcpy (&GBT_ChargingStatus, j_rx.data, sizeof(GBT_ChargingStatus)); - 8009f96: 4b61 ldr r3, [pc, #388] @ (800a11c ) - 8009f98: 4a52 ldr r2, [pc, #328] @ (800a0e4 ) - 8009f9a: ca07 ldmia r2, {r0, r1, r2} - 8009f9c: c303 stmia r3!, {r0, r1} - 8009f9e: 701a strb r2, [r3, #0] - CONN.SOC = GBT_ChargingStatus.currentChargeState; - 8009fa0: 4b5e ldr r3, [pc, #376] @ (800a11c ) - 8009fa2: 799a ldrb r2, [r3, #6] - 8009fa4: 4b5c ldr r3, [pc, #368] @ (800a118 ) - 8009fa6: 709a strb r2, [r3, #2] - break; - 8009fa8: e018 b.n 8009fdc - - case 0x1300: //PGN BSM - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - 8009faa: f004 fc97 bl 800e8dc - 8009fae: 4603 mov r3, r0 - 8009fb0: 4a56 ldr r2, [pc, #344] @ (800a10c ) - 8009fb2: 6013 str r3, [r2, #0] - //TODO - memcpy (&GBT_BatteryStatus, j_rx.data, sizeof(GBT_BatteryStatus)); - 8009fb4: 4b5a ldr r3, [pc, #360] @ (800a120 ) - 8009fb6: 4a4b ldr r2, [pc, #300] @ (800a0e4 ) - 8009fb8: e892 0003 ldmia.w r2, {r0, r1} - 8009fbc: 6018 str r0, [r3, #0] - 8009fbe: 3304 adds r3, #4 - 8009fc0: 8019 strh r1, [r3, #0] - 8009fc2: 3302 adds r3, #2 - 8009fc4: 0c0a lsrs r2, r1, #16 - 8009fc6: 701a strb r2, [r3, #0] - break; - 8009fc8: e008 b.n 8009fdc -// case 0x1900: //PGN BST -// break; - - case 0x1C00: //PGN BSD - //TODO SOC Voltage Temp - GBT_BSD_recv = 1; - 8009fca: 4b56 ldr r3, [pc, #344] @ (800a124 ) - 8009fcc: 2201 movs r2, #1 - 8009fce: 701a strb r2, [r3, #0] - break; - 8009fd0: e004 b.n 8009fdc - break; - 8009fd2: bf00 nop - 8009fd4: e002 b.n 8009fdc - break; - 8009fd6: bf00 nop - 8009fd8: e000 b.n 8009fdc - break; - 8009fda: bf00 nop -// break; - - //BSM BMV BMT BSP BST BSD BEM - - } - j_rx.state = 0; - 8009fdc: 4b41 ldr r3, [pc, #260] @ (800a0e4 ) - 8009fde: 2200 movs r2, #0 - 8009fe0: f883 210a strb.w r2, [r3, #266] @ 0x10a - } - - if((HAL_GetTick() - GBT_delay_start) < GBT_delay){ - 8009fe4: f004 fc7a bl 800e8dc - 8009fe8: 4602 mov r2, r0 - 8009fea: 4b4f ldr r3, [pc, #316] @ (800a128 ) - 8009fec: 681b ldr r3, [r3, #0] - 8009fee: 1ad2 subs r2, r2, r3 - 8009ff0: 4b4e ldr r3, [pc, #312] @ (800a12c ) - 8009ff2: 681b ldr r3, [r3, #0] - 8009ff4: 429a cmp r2, r3 - 8009ff6: f0c0 84c7 bcc.w 800a988 - //waiting - }else switch (GBT_State){ - 8009ffa: 4b4d ldr r3, [pc, #308] @ (800a130 ) - 8009ffc: 781b ldrb r3, [r3, #0] - 8009ffe: 3b10 subs r3, #16 - 800a000: 2b12 cmp r3, #18 - 800a002: f200 84a2 bhi.w 800a94a - 800a006: a201 add r2, pc, #4 @ (adr r2, 800a00c ) - 800a008: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800a00c: 0800a059 .word 0x0800a059 - 800a010: 0800a94b .word 0x0800a94b - 800a014: 0800a94b .word 0x0800a94b - 800a018: 0800a07f .word 0x0800a07f - 800a01c: 0800a091 .word 0x0800a091 - 800a020: 0800a141 .word 0x0800a141 - 800a024: 0800a18b .word 0x0800a18b - 800a028: 0800a1fd .word 0x0800a1fd - 800a02c: 0800a29f .word 0x0800a29f - 800a030: 0800a2f1 .word 0x0800a2f1 - 800a034: 0800a47d .word 0x0800a47d - 800a038: 0800a581 .word 0x0800a581 - 800a03c: 0800a613 .word 0x0800a613 - 800a040: 0800a669 .word 0x0800a669 - 800a044: 0800a6db .word 0x0800a6db - 800a048: 0800a8c3 .word 0x0800a8c3 - 800a04c: 0800a905 .word 0x0800a905 - 800a050: 0800a925 .word 0x0800a925 - 800a054: 0800a937 .word 0x0800a937 - case GBT_DISABLED: - RELAY_Write(RELAY_AUX0, 0); - 800a058: 2100 movs r1, #0 - 800a05a: 2000 movs r0, #0 - 800a05c: f7ff fb46 bl 80096ec - RELAY_Write(RELAY_AUX1, 0); - 800a060: 2100 movs r1, #0 - 800a062: 2001 movs r0, #1 - 800a064: f7ff fb42 bl 80096ec - if(connectorState == Preparing){ - 800a068: 4b32 ldr r3, [pc, #200] @ (800a134 ) - 800a06a: 781b ldrb r3, [r3, #0] - 800a06c: 2b03 cmp r3, #3 - 800a06e: f040 8470 bne.w 800a952 - GBT_Reset(); - 800a072: f000 fe1d bl 800acb0 - GBT_Start();//TODO IF protections (maybe not needed) - 800a076: f000 fea9 bl 800adcc - } - break; - 800a07a: f000 bc6a b.w 800a952 - - case GBT_S3_STARTED: - GBT_SwitchState(GBT_S31_WAIT_BHM); - 800a07e: 2014 movs r0, #20 - 800a080: f000 fcb4 bl 800a9ec - GBT_Delay(500); - 800a084: f44f 70fa mov.w r0, #500 @ 0x1f4 - 800a088: f000 fd68 bl 800ab5c - break; - 800a08c: f000 bc7c b.w 800a988 - - case GBT_S31_WAIT_BHM: - if(j_rx.state == 0) GBT_SendCHM(); - 800a090: 4b14 ldr r3, [pc, #80] @ (800a0e4 ) - 800a092: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a096: 2b00 cmp r3, #0 - 800a098: d101 bne.n 800a09e - 800a09a: f001 fabd bl 800b618 - GBT_Delay(250); - 800a09e: 20fa movs r0, #250 @ 0xfa - 800a0a0: f000 fd5c bl 800ab5c - - if(GBT_BHM_recv) { - 800a0a4: 4b10 ldr r3, [pc, #64] @ (800a0e8 ) - 800a0a6: 781b ldrb r3, [r3, #0] - 800a0a8: 2b00 cmp r3, #0 - 800a0aa: d002 beq.n 800a0b2 - GBT_SwitchState(GBT_S4_WAIT_PSU_READY); - 800a0ac: 2015 movs r0, #21 - 800a0ae: f000 fc9d bl 800a9ec - } - - //Timeout 10S - if((GBT_BHM_recv == 0) && (GBT_StateTick()>10000)) { //BHM Timeout - 800a0b2: 4b0d ldr r3, [pc, #52] @ (800a0e8 ) - 800a0b4: 781b ldrb r3, [r3, #0] - 800a0b6: 2b00 cmp r3, #0 - 800a0b8: f040 844d bne.w 800a956 - 800a0bc: f000 fd42 bl 800ab44 - 800a0c0: 4603 mov r3, r0 - 800a0c2: f242 7210 movw r2, #10000 @ 0x2710 - 800a0c6: 4293 cmp r3, r2 - 800a0c8: f240 8445 bls.w 800a956 - GBT_Error(0xFCF0C0FC); - 800a0cc: 481a ldr r0, [pc, #104] @ (800a138 ) - 800a0ce: f000 fdd3 bl 800ac78 - CONN.chargingError = CONN_ERR_EV_COMM; - 800a0d2: 4b11 ldr r3, [pc, #68] @ (800a118 ) - 800a0d4: 2209 movs r2, #9 - 800a0d6: 775a strb r2, [r3, #29] - log_printf(LOG_ERR, "BHM Timeout\n"); - 800a0d8: 4918 ldr r1, [pc, #96] @ (800a13c ) - 800a0da: 2004 movs r0, #4 - 800a0dc: f001 fa42 bl 800b564 - } - break; - 800a0e0: f000 bc39 b.w 800a956 - 800a0e4: 20000874 .word 0x20000874 - 800a0e8: 2000032b .word 0x2000032b - 800a0ec: 20000340 .word 0x20000340 - 800a0f0: 20000328 .word 0x20000328 - 800a0f4: 20000344 .word 0x20000344 - 800a0f8: 20000329 .word 0x20000329 - 800a0fc: 20000378 .word 0x20000378 - 800a100: 2000032a .word 0x2000032a - 800a104: 2000032d .word 0x2000032d - 800a108: 200003bc .word 0x200003bc - 800a10c: 200003c4 .word 0x200003c4 - 800a110: 20000388 .word 0x20000388 - 800a114: cccccccd .word 0xcccccccd - 800a118: 200002f8 .word 0x200002f8 - 800a11c: 20000398 .word 0x20000398 - 800a120: 200003a4 .word 0x200003a4 - 800a124: 2000032c .word 0x2000032c - 800a128: 20000320 .word 0x20000320 - 800a12c: 20000324 .word 0x20000324 - 800a130: 20000318 .word 0x20000318 - 800a134: 200003d1 .word 0x200003d1 - 800a138: fcf0c0fc .word 0xfcf0c0fc - 800a13c: 080165c0 .word 0x080165c0 - case GBT_S4_WAIT_PSU_READY: - if(j_rx.state == 0) GBT_SendCHM(); - 800a140: 4baf ldr r3, [pc, #700] @ (800a400 ) - 800a142: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a146: 2b00 cmp r3, #0 - 800a148: d101 bne.n 800a14e - 800a14a: f001 fa65 bl 800b618 - GBT_Delay(250); - 800a14e: 20fa movs r0, #250 @ 0xfa - 800a150: f000 fd04 bl 800ab5c - if(PSU0.ready){ - 800a154: 4bab ldr r3, [pc, #684] @ (800a404 ) - 800a156: 7a5b ldrb r3, [r3, #9] - 800a158: 2b00 cmp r3, #0 - 800a15a: d002 beq.n 800a162 - GBT_SwitchState(GBT_S4_WAIT_PSU_ON); - 800a15c: 2016 movs r0, #22 - 800a15e: f000 fc45 bl 800a9ec - } - if(GBT_StateTick()>10000){ - 800a162: f000 fcef bl 800ab44 - 800a166: 4603 mov r3, r0 - 800a168: f242 7210 movw r2, #10000 @ 0x2710 - 800a16c: 4293 cmp r3, r2 - 800a16e: f240 83f4 bls.w 800a95a - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a172: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a176: f000 fd2b bl 800abd0 - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800a17a: 4ba3 ldr r3, [pc, #652] @ (800a408 ) - 800a17c: 220a movs r2, #10 - 800a17e: 775a strb r2, [r3, #29] - log_printf(LOG_ERR, "PSU ready timeout, stopping...\n"); - 800a180: 49a2 ldr r1, [pc, #648] @ (800a40c ) - 800a182: 2004 movs r0, #4 - 800a184: f001 f9ee bl 800b564 - break; - 800a188: e3fe b.n 800a988 - } - break; - - case GBT_S4_WAIT_PSU_ON: - if(j_rx.state == 0) GBT_SendCHM(); - 800a18a: 4b9d ldr r3, [pc, #628] @ (800a400 ) - 800a18c: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a190: 2b00 cmp r3, #0 - 800a192: d101 bne.n 800a198 - 800a194: f001 fa40 bl 800b618 - GBT_Delay(250); - 800a198: 20fa movs r0, #250 @ 0xfa - 800a19a: f000 fcdf bl 800ab5c - CONN.RequestedVoltage = GBT_MaxVoltage.maxOutputVoltage / 10; // 0.1V -> V - 800a19e: 4b9c ldr r3, [pc, #624] @ (800a410 ) - 800a1a0: 881b ldrh r3, [r3, #0] - 800a1a2: 4a9c ldr r2, [pc, #624] @ (800a414 ) - 800a1a4: fba2 2303 umull r2, r3, r2, r3 - 800a1a8: 08db lsrs r3, r3, #3 - 800a1aa: b29a uxth r2, r3 - 800a1ac: 4b96 ldr r3, [pc, #600] @ (800a408 ) - 800a1ae: f8a3 200f strh.w r2, [r3, #15] - CONN.WantedCurrent = 10; // 1A max (0.1A units) - 800a1b2: 4b95 ldr r3, [pc, #596] @ (800a408 ) - 800a1b4: 2200 movs r2, #0 - 800a1b6: f042 020a orr.w r2, r2, #10 - 800a1ba: 76da strb r2, [r3, #27] - 800a1bc: 2200 movs r2, #0 - 800a1be: 771a strb r2, [r3, #28] - CONN.EnableOutput = 1; - 800a1c0: 4b91 ldr r3, [pc, #580] @ (800a408 ) - 800a1c2: 2201 movs r2, #1 - 800a1c4: 75da strb r2, [r3, #23] - if(PSU0.state == PSU_CONNECTED){ - 800a1c6: 4b8f ldr r3, [pc, #572] @ (800a404 ) - 800a1c8: 79db ldrb r3, [r3, #7] - 800a1ca: 2b05 cmp r3, #5 - 800a1cc: d102 bne.n 800a1d4 - GBT_SwitchState(GBT_S4_ISOTEST); - 800a1ce: 2017 movs r0, #23 - 800a1d0: f000 fc0c bl 800a9ec - } - if(GBT_StateTick()>10000){ - 800a1d4: f000 fcb6 bl 800ab44 - 800a1d8: 4603 mov r3, r0 - 800a1da: f242 7210 movw r2, #10000 @ 0x2710 - 800a1de: 4293 cmp r3, r2 - 800a1e0: f240 83bd bls.w 800a95e - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a1e4: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a1e8: f000 fcf2 bl 800abd0 - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800a1ec: 4b86 ldr r3, [pc, #536] @ (800a408 ) - 800a1ee: 220a movs r2, #10 - 800a1f0: 775a strb r2, [r3, #29] - log_printf(LOG_ERR, "PSU on timeout, stopping...\n"); - 800a1f2: 4989 ldr r1, [pc, #548] @ (800a418 ) - 800a1f4: 2004 movs r0, #4 - 800a1f6: f001 f9b5 bl 800b564 - break; - 800a1fa: e3c5 b.n 800a988 - } - break; - - case GBT_S4_ISOTEST: - if(j_rx.state == 0) GBT_SendCHM(); - 800a1fc: 4b80 ldr r3, [pc, #512] @ (800a400 ) - 800a1fe: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a202: 2b00 cmp r3, #0 - 800a204: d101 bne.n 800a20a - 800a206: f001 fa07 bl 800b618 - GBT_Delay(250); - 800a20a: 20fa movs r0, #250 @ 0xfa - 800a20c: f000 fca6 bl 800ab5c - //TODO: Isolation test trigger - if(CONN.chargingError != CONN_NO_ERROR){ - 800a210: 4b7d ldr r3, [pc, #500] @ (800a408 ) - 800a212: 7f5b ldrb r3, [r3, #29] - 800a214: 2b00 cmp r3, #0 - 800a216: d003 beq.n 800a220 - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a218: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a21c: f000 fcd8 bl 800abd0 - } - if(GBT_StateTick()>5000){ - 800a220: f000 fc90 bl 800ab44 - 800a224: 4603 mov r3, r0 - 800a226: f241 3288 movw r2, #5000 @ 0x1388 - 800a22a: 4293 cmp r3, r2 - 800a22c: d902 bls.n 800a234 - GBT_SwitchState(GBT_S4_WAIT_PSU_OFF); - 800a22e: 2018 movs r0, #24 - 800a230: f000 fbdc bl 800a9ec - } - if(ISO.isolationResistance < (ISO.voltageComm/2)){ // *100/1000 - 800a234: 4b79 ldr r3, [pc, #484] @ (800a41c ) - 800a236: f8b3 3001 ldrh.w r3, [r3, #1] - 800a23a: b29b uxth r3, r3 - 800a23c: 4619 mov r1, r3 - 800a23e: 4b77 ldr r3, [pc, #476] @ (800a41c ) - 800a240: f9b3 3007 ldrsh.w r3, [r3, #7] - 800a244: b21b sxth r3, r3 - 800a246: 0fda lsrs r2, r3, #31 - 800a248: 4413 add r3, r2 - 800a24a: 105b asrs r3, r3, #1 - 800a24c: b21b sxth r3, r3 - 800a24e: 4299 cmp r1, r3 - 800a250: da06 bge.n 800a260 - CONN.chargingError = CONN_ERR_INSULATION; - 800a252: 4b6d ldr r3, [pc, #436] @ (800a408 ) - 800a254: 2201 movs r2, #1 - 800a256: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Isolation warning\n"); - 800a258: 4971 ldr r1, [pc, #452] @ (800a420 ) - 800a25a: 2005 movs r0, #5 - 800a25c: f001 f982 bl 800b564 - } // 500 Ohm/V - - if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000 - 800a260: 4b6e ldr r3, [pc, #440] @ (800a41c ) - 800a262: f8b3 3001 ldrh.w r3, [r3, #1] - 800a266: b29b uxth r3, r3 - 800a268: 4619 mov r1, r3 - 800a26a: 4b6c ldr r3, [pc, #432] @ (800a41c ) - 800a26c: f9b3 3007 ldrsh.w r3, [r3, #7] - 800a270: b21b sxth r3, r3 - 800a272: 4a6c ldr r2, [pc, #432] @ (800a424 ) - 800a274: fb82 0203 smull r0, r2, r2, r3 - 800a278: 1092 asrs r2, r2, #2 - 800a27a: 17db asrs r3, r3, #31 - 800a27c: 1ad3 subs r3, r2, r3 - 800a27e: b21b sxth r3, r3 - 800a280: 4299 cmp r1, r3 - 800a282: f280 836e bge.w 800a962 - CONN.chargingError = CONN_ERR_INSULATION; - 800a286: 4b60 ldr r3, [pc, #384] @ (800a408 ) - 800a288: 2201 movs r2, #1 - 800a28a: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n"); - 800a28c: 4966 ldr r1, [pc, #408] @ (800a428 ) - 800a28e: 2005 movs r0, #5 - 800a290: f001 f968 bl 800b564 - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a294: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a298: f000 fc9a bl 800abd0 - } // 100 Ohm/V - - break; - 800a29c: e361 b.n 800a962 - - case GBT_S4_WAIT_PSU_OFF: - CONN.RequestedVoltage = 0; - 800a29e: 4b5a ldr r3, [pc, #360] @ (800a408 ) - 800a2a0: 2200 movs r2, #0 - 800a2a2: 73da strb r2, [r3, #15] - 800a2a4: 2200 movs r2, #0 - 800a2a6: 741a strb r2, [r3, #16] - CONN.WantedCurrent = 0; - 800a2a8: 4b57 ldr r3, [pc, #348] @ (800a408 ) - 800a2aa: 2200 movs r2, #0 - 800a2ac: 76da strb r2, [r3, #27] - 800a2ae: 2200 movs r2, #0 - 800a2b0: 771a strb r2, [r3, #28] - CONN.EnableOutput = 0; - 800a2b2: 4b55 ldr r3, [pc, #340] @ (800a408 ) - 800a2b4: 2200 movs r2, #0 - 800a2b6: 75da strb r2, [r3, #23] - if(GBT_StateTick()>5000){ - 800a2b8: f000 fc44 bl 800ab44 - 800a2bc: 4603 mov r3, r0 - 800a2be: f241 3288 movw r2, #5000 @ 0x1388 - 800a2c2: 4293 cmp r3, r2 - 800a2c4: d90b bls.n 800a2de - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a2c6: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a2ca: f000 fc81 bl 800abd0 - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800a2ce: 4b4e ldr r3, [pc, #312] @ (800a408 ) - 800a2d0: 220a movs r2, #10 - 800a2d2: 775a strb r2, [r3, #29] - log_printf(LOG_ERR, "PSU off timeout, stopping...\n"); - 800a2d4: 4955 ldr r1, [pc, #340] @ (800a42c ) - 800a2d6: 2004 movs r0, #4 - 800a2d8: f001 f944 bl 800b564 - break; - 800a2dc: e354 b.n 800a988 - } - if(PSU0.PSU_enabled == 0){ - 800a2de: 4b49 ldr r3, [pc, #292] @ (800a404 ) - 800a2e0: 7a9b ldrb r3, [r3, #10] - 800a2e2: 2b00 cmp r3, #0 - 800a2e4: f040 833f bne.w 800a966 - GBT_SwitchState(GBT_S5_BAT_INFO); - 800a2e8: 2019 movs r0, #25 - 800a2ea: f000 fb7f bl 800a9ec - } - break; - 800a2ee: e33a b.n 800a966 - - case GBT_S5_BAT_INFO: - if(j_rx.state == 0) GBT_SendCRM(0x00); - 800a2f0: 4b43 ldr r3, [pc, #268] @ (800a400 ) - 800a2f2: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a2f6: 2b00 cmp r3, #0 - 800a2f8: d102 bne.n 800a300 - 800a2fa: 2000 movs r0, #0 - 800a2fc: f001 f9a0 bl 800b640 - GBT_Delay(250); - 800a300: 20fa movs r0, #250 @ 0xfa - 800a302: f000 fc2b bl 800ab5c - if(GBT_BAT_INFO_recv){ //BRM - 800a306: 4b4a ldr r3, [pc, #296] @ (800a430 ) - 800a308: 781b ldrb r3, [r3, #0] - 800a30a: 2b00 cmp r3, #0 - 800a30c: d060 beq.n 800a3d0 - //Got battery info - GBT_SwitchState(GBT_S6_BAT_STAT); - 800a30e: 201a movs r0, #26 - 800a310: f000 fb6c bl 800a9ec - log_printf(LOG_INFO, "EV info:\n"); - 800a314: 4947 ldr r1, [pc, #284] @ (800a434 ) - 800a316: 2007 movs r0, #7 - 800a318: f001 f924 bl 800b564 - log_printf(LOG_INFO, "GBT_ver V%d.%d%d\n",GBT_EVInfo.version[0],GBT_EVInfo.version[1],GBT_EVInfo.version[2]); - 800a31c: 4b46 ldr r3, [pc, #280] @ (800a438 ) - 800a31e: 781b ldrb r3, [r3, #0] - 800a320: 461a mov r2, r3 - 800a322: 4b45 ldr r3, [pc, #276] @ (800a438 ) - 800a324: 785b ldrb r3, [r3, #1] - 800a326: 4619 mov r1, r3 - 800a328: 4b43 ldr r3, [pc, #268] @ (800a438 ) - 800a32a: 789b ldrb r3, [r3, #2] - 800a32c: 9300 str r3, [sp, #0] - 800a32e: 460b mov r3, r1 - 800a330: 4942 ldr r1, [pc, #264] @ (800a43c ) - 800a332: 2007 movs r0, #7 - 800a334: f001 f916 bl 800b564 - log_printf(LOG_INFO, "Battery type: %d\n",GBT_EVInfo.batteryType); - 800a338: 4b3f ldr r3, [pc, #252] @ (800a438 ) - 800a33a: 78db ldrb r3, [r3, #3] - 800a33c: 461a mov r2, r3 - 800a33e: 4940 ldr r1, [pc, #256] @ (800a440 ) - 800a340: 2007 movs r0, #7 - 800a342: f001 f90f bl 800b564 - log_printf(LOG_INFO, "Battery capacity: %d\n", GBT_EVInfo.batteryCapacity); // 0.1Ah/bit - 800a346: 4b3c ldr r3, [pc, #240] @ (800a438 ) - 800a348: 889b ldrh r3, [r3, #4] - 800a34a: 461a mov r2, r3 - 800a34c: 493d ldr r1, [pc, #244] @ (800a444 ) - 800a34e: 2007 movs r0, #7 - 800a350: f001 f908 bl 800b564 - log_printf(LOG_INFO, "Battery voltage: %d\n", GBT_EVInfo.batteryVoltage); // 0.1V/bit - 800a354: 4b38 ldr r3, [pc, #224] @ (800a438 ) - 800a356: 88db ldrh r3, [r3, #6] - 800a358: 461a mov r2, r3 - 800a35a: 493b ldr r1, [pc, #236] @ (800a448 ) - 800a35c: 2007 movs r0, #7 - 800a35e: f001 f901 bl 800b564 - log_printf(LOG_INFO, "Battery vendor: %.4s\n", GBT_EVInfo.batteryVendor); // Battery vendor (ASCII string) - 800a362: 4a3a ldr r2, [pc, #232] @ (800a44c ) - 800a364: 493a ldr r1, [pc, #232] @ (800a450 ) - 800a366: 2007 movs r0, #7 - 800a368: f001 f8fc bl 800b564 - log_printf(LOG_INFO, "Battery SN: %lu\n", GBT_EVInfo.batterySN); // int - 800a36c: 4b32 ldr r3, [pc, #200] @ (800a438 ) - 800a36e: 68db ldr r3, [r3, #12] - 800a370: 461a mov r2, r3 - 800a372: 4938 ldr r1, [pc, #224] @ (800a454 ) - 800a374: 2007 movs r0, #7 - 800a376: f001 f8f5 bl 800b564 - log_printf(LOG_INFO, "Battery manufacture date: %02d.%02d.%04d\n", GBT_EVInfo.batteryManuD, GBT_EVInfo.batteryManuM ,GBT_EVInfo.batteryManuY+1985); // year (offset 1985) - 800a37a: 4b2f ldr r3, [pc, #188] @ (800a438 ) - 800a37c: 7c9b ldrb r3, [r3, #18] - 800a37e: 461a mov r2, r3 - 800a380: 4b2d ldr r3, [pc, #180] @ (800a438 ) - 800a382: 7c5b ldrb r3, [r3, #17] - 800a384: 4619 mov r1, r3 - 800a386: 4b2c ldr r3, [pc, #176] @ (800a438 ) - 800a388: 7c1b ldrb r3, [r3, #16] - 800a38a: f203 73c1 addw r3, r3, #1985 @ 0x7c1 - 800a38e: 9300 str r3, [sp, #0] - 800a390: 460b mov r3, r1 - 800a392: 4931 ldr r1, [pc, #196] @ (800a458 ) - 800a394: 2007 movs r0, #7 - 800a396: f001 f8e5 bl 800b564 - log_printf(LOG_INFO, "Battery cycles: %d\n", GBT_EVInfo.batteryCycleCount); //uint24_t - 800a39a: 4b27 ldr r3, [pc, #156] @ (800a438 ) - 800a39c: 7cda ldrb r2, [r3, #19] - 800a39e: 8a9b ldrh r3, [r3, #20] - 800a3a0: 021b lsls r3, r3, #8 - 800a3a2: 4313 orrs r3, r2 - 800a3a4: 461a mov r2, r3 - 800a3a6: 492d ldr r1, [pc, #180] @ (800a45c ) - 800a3a8: 2007 movs r0, #7 - 800a3aa: f001 f8db bl 800b564 - log_printf(LOG_INFO, "Own auto: %d\n", GBT_EVInfo.ownAuto); // 0 = lizing, 1 = own auto - 800a3ae: 4b22 ldr r3, [pc, #136] @ (800a438 ) - 800a3b0: 7d9b ldrb r3, [r3, #22] - 800a3b2: 461a mov r2, r3 - 800a3b4: 492a ldr r1, [pc, #168] @ (800a460 ) - 800a3b6: 2007 movs r0, #7 - 800a3b8: f001 f8d4 bl 800b564 - log_printf(LOG_INFO, "EVIN: %.17s\n", GBT_EVInfo.EVIN); //EVIN - 800a3bc: 4a29 ldr r2, [pc, #164] @ (800a464 ) - 800a3be: 492a ldr r1, [pc, #168] @ (800a468 ) - 800a3c0: 2007 movs r0, #7 - 800a3c2: f001 f8cf bl 800b564 - log_printf(LOG_INFO, "EV_SW_VER: %.8s\n", GBT_EVInfo.EV_SW_VER); - 800a3c6: 4a29 ldr r2, [pc, #164] @ (800a46c ) - 800a3c8: 4929 ldr r1, [pc, #164] @ (800a470 ) - 800a3ca: 2007 movs r0, #7 - 800a3cc: f001 f8ca bl 800b564 - - } - //Timeout - if((GBT_StateTick()>5000) && (GBT_BAT_INFO_recv == 0)){ - 800a3d0: f000 fbb8 bl 800ab44 - 800a3d4: 4603 mov r3, r0 - 800a3d6: f241 3288 movw r2, #5000 @ 0x1388 - 800a3da: 4293 cmp r3, r2 - 800a3dc: f240 82c5 bls.w 800a96a - 800a3e0: 4b13 ldr r3, [pc, #76] @ (800a430 ) - 800a3e2: 781b ldrb r3, [r3, #0] - 800a3e4: 2b00 cmp r3, #0 - 800a3e6: f040 82c0 bne.w 800a96a - CONN.chargingError = CONN_ERR_EV_COMM; - 800a3ea: 4b07 ldr r3, [pc, #28] @ (800a408 ) - 800a3ec: 2209 movs r2, #9 - 800a3ee: 775a strb r2, [r3, #29] - GBT_Error(0xFDF0C0FC); //BRM Timeout - 800a3f0: 4820 ldr r0, [pc, #128] @ (800a474 ) - 800a3f2: f000 fc41 bl 800ac78 - log_printf(LOG_ERR, "BRM Timeout\n"); - 800a3f6: 4920 ldr r1, [pc, #128] @ (800a478 ) - 800a3f8: 2004 movs r0, #4 - 800a3fa: f001 f8b3 bl 800b564 - } - break; - 800a3fe: e2b4 b.n 800a96a - 800a400: 20000874 .word 0x20000874 - 800a404: 20000a14 .word 0x20000a14 - 800a408: 200002f8 .word 0x200002f8 - 800a40c: 080165d0 .word 0x080165d0 - 800a410: 20000340 .word 0x20000340 - 800a414: cccccccd .word 0xcccccccd - 800a418: 080165f0 .word 0x080165f0 - 800a41c: 20000060 .word 0x20000060 - 800a420: 08016610 .word 0x08016610 - 800a424: 66666667 .word 0x66666667 - 800a428: 08016624 .word 0x08016624 - 800a42c: 08016654 .word 0x08016654 - 800a430: 20000328 .word 0x20000328 - 800a434: 08016674 .word 0x08016674 - 800a438: 20000344 .word 0x20000344 - 800a43c: 08016680 .word 0x08016680 - 800a440: 08016694 .word 0x08016694 - 800a444: 080166a8 .word 0x080166a8 - 800a448: 080166c0 .word 0x080166c0 - 800a44c: 2000034c .word 0x2000034c - 800a450: 080166d8 .word 0x080166d8 - 800a454: 080166f0 .word 0x080166f0 - 800a458: 08016704 .word 0x08016704 - 800a45c: 08016730 .word 0x08016730 - 800a460: 08016744 .word 0x08016744 - 800a464: 2000035c .word 0x2000035c - 800a468: 08016754 .word 0x08016754 - 800a46c: 2000036d .word 0x2000036d - 800a470: 08016764 .word 0x08016764 - 800a474: fdf0c0fc .word 0xfdf0c0fc - 800a478: 08016778 .word 0x08016778 - - case GBT_S6_BAT_STAT: - if(j_rx.state == 0) GBT_SendCRM(0xAA); - 800a47c: 4bb0 ldr r3, [pc, #704] @ (800a740 ) - 800a47e: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a482: 2b00 cmp r3, #0 - 800a484: d102 bne.n 800a48c - 800a486: 20aa movs r0, #170 @ 0xaa - 800a488: f001 f8da bl 800b640 - GBT_Delay(250); - 800a48c: 20fa movs r0, #250 @ 0xfa - 800a48e: f000 fb65 bl 800ab5c - if(GBT_BAT_STAT_recv){ - 800a492: 4bac ldr r3, [pc, #688] @ (800a744 ) - 800a494: 781b ldrb r3, [r3, #0] - 800a496: 2b00 cmp r3, #0 - 800a498: d05a beq.n 800a550 - //Got battery status - GBT_SwitchState(GBT_S7_BMS_WAIT); - 800a49a: 201b movs r0, #27 - 800a49c: f000 faa6 bl 800a9ec - log_printf(LOG_INFO, "Battery info:\n"); - 800a4a0: 49a9 ldr r1, [pc, #676] @ (800a748 ) - 800a4a2: 2007 movs r0, #7 - 800a4a4: f001 f85e bl 800b564 - log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxCellVoltage/100); // 0.01v/bit - 800a4a8: 4ba8 ldr r3, [pc, #672] @ (800a74c ) - 800a4aa: 881b ldrh r3, [r3, #0] - 800a4ac: 4aa8 ldr r2, [pc, #672] @ (800a750 ) - 800a4ae: fba2 2303 umull r2, r3, r2, r3 - 800a4b2: 095b lsrs r3, r3, #5 - 800a4b4: b29b uxth r3, r3 - 800a4b6: 461a mov r2, r3 - 800a4b8: 49a6 ldr r1, [pc, #664] @ (800a754 ) - 800a4ba: 2007 movs r0, #7 - 800a4bc: f001 f852 bl 800b564 - log_printf(LOG_INFO, "maxCC %dA\n",GBT_BATStat.maxChargingCurrent/10); // 0.1A/bit - 800a4c0: 4ba2 ldr r3, [pc, #648] @ (800a74c ) - 800a4c2: 885b ldrh r3, [r3, #2] - 800a4c4: 4aa4 ldr r2, [pc, #656] @ (800a758 ) - 800a4c6: fba2 2303 umull r2, r3, r2, r3 - 800a4ca: 08db lsrs r3, r3, #3 - 800a4cc: b29b uxth r3, r3 - 800a4ce: 461a mov r2, r3 - 800a4d0: 49a2 ldr r1, [pc, #648] @ (800a75c ) - 800a4d2: 2007 movs r0, #7 - 800a4d4: f001 f846 bl 800b564 - log_printf(LOG_INFO, "totE %dkWh\n",GBT_BATStat.totalEnergy/10); // 0.1kWh - 800a4d8: 4b9c ldr r3, [pc, #624] @ (800a74c ) - 800a4da: 889b ldrh r3, [r3, #4] - 800a4dc: 4a9e ldr r2, [pc, #632] @ (800a758 ) - 800a4de: fba2 2303 umull r2, r3, r2, r3 - 800a4e2: 08db lsrs r3, r3, #3 - 800a4e4: b29b uxth r3, r3 - 800a4e6: 461a mov r2, r3 - 800a4e8: 499d ldr r1, [pc, #628] @ (800a760 ) - 800a4ea: 2007 movs r0, #7 - 800a4ec: f001 f83a bl 800b564 - log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxChargingVoltage/10); // 0.1V/ bit - 800a4f0: 4b96 ldr r3, [pc, #600] @ (800a74c ) - 800a4f2: 88db ldrh r3, [r3, #6] - 800a4f4: 4a98 ldr r2, [pc, #608] @ (800a758 ) - 800a4f6: fba2 2303 umull r2, r3, r2, r3 - 800a4fa: 08db lsrs r3, r3, #3 - 800a4fc: b29b uxth r3, r3 - 800a4fe: 461a mov r2, r3 - 800a500: 4994 ldr r1, [pc, #592] @ (800a754 ) - 800a502: 2007 movs r0, #7 - 800a504: f001 f82e bl 800b564 - log_printf(LOG_INFO, "maxT %dC\n",(int16_t)GBT_BATStat.maxTemp-50); // 1C/bit, -50C offset - 800a508: 4b90 ldr r3, [pc, #576] @ (800a74c ) - 800a50a: 7a1b ldrb r3, [r3, #8] - 800a50c: 3b32 subs r3, #50 @ 0x32 - 800a50e: 461a mov r2, r3 - 800a510: 4994 ldr r1, [pc, #592] @ (800a764 ) - 800a512: 2007 movs r0, #7 - 800a514: f001 f826 bl 800b564 - log_printf(LOG_INFO, "SOC %dp\n",GBT_BATStat.SOC/10); // 0.1%/bit , 0..100% - 800a518: 4b8c ldr r3, [pc, #560] @ (800a74c ) - 800a51a: f8b3 3009 ldrh.w r3, [r3, #9] - 800a51e: b29b uxth r3, r3 - 800a520: 4a8d ldr r2, [pc, #564] @ (800a758 ) - 800a522: fba2 2303 umull r2, r3, r2, r3 - 800a526: 08db lsrs r3, r3, #3 - 800a528: b29b uxth r3, r3 - 800a52a: 461a mov r2, r3 - 800a52c: 498e ldr r1, [pc, #568] @ (800a768 ) - 800a52e: 2007 movs r0, #7 - 800a530: f001 f818 bl 800b564 - log_printf(LOG_INFO, "Volt. %dV\n",GBT_BATStat.measVoltage/10); // 0.1V/bit - 800a534: 4b85 ldr r3, [pc, #532] @ (800a74c ) - 800a536: f8b3 300b ldrh.w r3, [r3, #11] - 800a53a: b29b uxth r3, r3 - 800a53c: 4a86 ldr r2, [pc, #536] @ (800a758 ) - 800a53e: fba2 2303 umull r2, r3, r2, r3 - 800a542: 08db lsrs r3, r3, #3 - 800a544: b29b uxth r3, r3 - 800a546: 461a mov r2, r3 - 800a548: 4988 ldr r1, [pc, #544] @ (800a76c ) - 800a54a: 2007 movs r0, #7 - 800a54c: f001 f80a bl 800b564 - - } - if((GBT_StateTick()>5000) && (GBT_BAT_STAT_recv == 0)){ - 800a550: f000 faf8 bl 800ab44 - 800a554: 4603 mov r3, r0 - 800a556: f241 3288 movw r2, #5000 @ 0x1388 - 800a55a: 4293 cmp r3, r2 - 800a55c: f240 8207 bls.w 800a96e - 800a560: 4b78 ldr r3, [pc, #480] @ (800a744 ) - 800a562: 781b ldrb r3, [r3, #0] - 800a564: 2b00 cmp r3, #0 - 800a566: f040 8202 bne.w 800a96e - CONN.chargingError = CONN_ERR_EV_COMM; - 800a56a: 4b81 ldr r3, [pc, #516] @ (800a770 ) - 800a56c: 2209 movs r2, #9 - 800a56e: 775a strb r2, [r3, #29] - GBT_Error(0xFCF1C0FC); //BCP Timeout - 800a570: 4880 ldr r0, [pc, #512] @ (800a774 ) - 800a572: f000 fb81 bl 800ac78 - log_printf(LOG_ERR, "BCP Timeout\n"); - 800a576: 4980 ldr r1, [pc, #512] @ (800a778 ) - 800a578: 2004 movs r0, #4 - 800a57a: f000 fff3 bl 800b564 - } - break; - 800a57e: e1f6 b.n 800a96e - - case GBT_S7_BMS_WAIT: - if(j_rx.state == 0) GBT_SendCTS(); - 800a580: 4b6f ldr r3, [pc, #444] @ (800a740 ) - 800a582: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a586: 2b00 cmp r3, #0 - 800a588: d101 bne.n 800a58e - 800a58a: f001 f821 bl 800b5d0 - HAL_Delay(2); - 800a58e: 2002 movs r0, #2 - 800a590: f004 f9ae bl 800e8f0 - if(j_rx.state == 0) GBT_SendCML(); - 800a594: 4b6a ldr r3, [pc, #424] @ (800a740 ) - 800a596: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a59a: 2b00 cmp r3, #0 - 800a59c: d101 bne.n 800a5a2 - 800a59e: f001 f82d bl 800b5fc - GBT_Delay(250); - 800a5a2: 20fa movs r0, #250 @ 0xfa - 800a5a4: f000 fada bl 800ab5c - if((GBT_StateTick()>5000) && (GBT_BRO_recv == 0)){ - 800a5a8: f000 facc bl 800ab44 - 800a5ac: 4603 mov r3, r0 - 800a5ae: f241 3288 movw r2, #5000 @ 0x1388 - 800a5b2: 4293 cmp r3, r2 - 800a5b4: d90d bls.n 800a5d2 - 800a5b6: 4b71 ldr r3, [pc, #452] @ (800a77c ) - 800a5b8: 781b ldrb r3, [r3, #0] - 800a5ba: 2b00 cmp r3, #0 - 800a5bc: d109 bne.n 800a5d2 - CONN.chargingError = CONN_ERR_EV_COMM; - 800a5be: 4b6c ldr r3, [pc, #432] @ (800a770 ) - 800a5c0: 2209 movs r2, #9 - 800a5c2: 775a strb r2, [r3, #29] - GBT_Error(0xFCF4C0FC); //BRO Timeout - 800a5c4: 486e ldr r0, [pc, #440] @ (800a780 ) - 800a5c6: f000 fb57 bl 800ac78 - log_printf(LOG_ERR, "BRO Timeout\n"); - 800a5ca: 496e ldr r1, [pc, #440] @ (800a784 ) - 800a5cc: 2004 movs r0, #4 - 800a5ce: f000 ffc9 bl 800b564 - } - if(EV_ready){ - 800a5d2: 4b6d ldr r3, [pc, #436] @ (800a788 ) - 800a5d4: 781b ldrb r3, [r3, #0] - 800a5d6: 2b00 cmp r3, #0 - 800a5d8: d003 beq.n 800a5e2 - //EV ready (AA) - GBT_SwitchState(GBT_S8_INIT_CHARGER); - 800a5da: 201c movs r0, #28 - 800a5dc: f000 fa06 bl 800a9ec - CONN.chargingError = CONN_ERR_EV_COMM; - GBT_Error(0xFCF4C0FC); //BRO Timeout - log_printf(LOG_ERR, "EV not ready for a 60s\n"); - } - } - break; - 800a5e0: e1c7 b.n 800a972 - if((GBT_StateTick()>60000) && (GBT_BRO_recv == 1)){ - 800a5e2: f000 faaf bl 800ab44 - 800a5e6: 4603 mov r3, r0 - 800a5e8: f64e 2260 movw r2, #60000 @ 0xea60 - 800a5ec: 4293 cmp r3, r2 - 800a5ee: f240 81c0 bls.w 800a972 - 800a5f2: 4b62 ldr r3, [pc, #392] @ (800a77c ) - 800a5f4: 781b ldrb r3, [r3, #0] - 800a5f6: 2b01 cmp r3, #1 - 800a5f8: f040 81bb bne.w 800a972 - CONN.chargingError = CONN_ERR_EV_COMM; - 800a5fc: 4b5c ldr r3, [pc, #368] @ (800a770 ) - 800a5fe: 2209 movs r2, #9 - 800a600: 775a strb r2, [r3, #29] - GBT_Error(0xFCF4C0FC); //BRO Timeout - 800a602: 485f ldr r0, [pc, #380] @ (800a780 ) - 800a604: f000 fb38 bl 800ac78 - log_printf(LOG_ERR, "EV not ready for a 60s\n"); - 800a608: 4960 ldr r1, [pc, #384] @ (800a78c ) - 800a60a: 2004 movs r0, #4 - 800a60c: f000 ffaa bl 800b564 - break; - 800a610: e1af b.n 800a972 - - case GBT_S8_INIT_CHARGER: - if(j_rx.state == 0) GBT_SendCRO(0x00); - 800a612: 4b4b ldr r3, [pc, #300] @ (800a740 ) - 800a614: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a618: 2b00 cmp r3, #0 - 800a61a: d102 bne.n 800a622 - 800a61c: 2000 movs r0, #0 - 800a61e: f001 f825 bl 800b66c - //TODO - GBT_Delay(250); - 800a622: 20fa movs r0, #250 @ 0xfa - 800a624: f000 fa9a bl 800ab5c - // if(GBT_StateTick()>1500){ - if(PSU0.ready){ - 800a628: 4b59 ldr r3, [pc, #356] @ (800a790 ) - 800a62a: 7a5b ldrb r3, [r3, #9] - 800a62c: 2b00 cmp r3, #0 - 800a62e: d002 beq.n 800a636 - //Power Modules initiated - GBT_SwitchState(GBT_S9_WAIT_BCL); - 800a630: 201d movs r0, #29 - 800a632: f000 f9db bl 800a9ec - } - if((GBT_StateTick()>6000) && (PSU0.ready == 0)){ - 800a636: f000 fa85 bl 800ab44 - 800a63a: 4603 mov r3, r0 - 800a63c: f241 7270 movw r2, #6000 @ 0x1770 - 800a640: 4293 cmp r3, r2 - 800a642: f240 8198 bls.w 800a976 - 800a646: 4b52 ldr r3, [pc, #328] @ (800a790 ) - 800a648: 7a5b ldrb r3, [r3, #9] - 800a64a: 2b00 cmp r3, #0 - 800a64c: f040 8193 bne.w 800a976 - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a650: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a654: f000 fabc bl 800abd0 - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800a658: 4b45 ldr r3, [pc, #276] @ (800a770 ) - 800a65a: 220a movs r2, #10 - 800a65c: 775a strb r2, [r3, #29] - log_printf(LOG_ERR, "PSU not ready, stopping...\n"); - 800a65e: 494d ldr r1, [pc, #308] @ (800a794 ) - 800a660: 2004 movs r0, #4 - 800a662: f000 ff7f bl 800b564 - } - break; - 800a666: e186 b.n 800a976 - - case GBT_S9_WAIT_BCL: - if(j_rx.state == 0) GBT_SendCRO(0xAA); - 800a668: 4b35 ldr r3, [pc, #212] @ (800a740 ) - 800a66a: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a66e: 2b00 cmp r3, #0 - 800a670: d102 bne.n 800a678 - 800a672: 20aa movs r0, #170 @ 0xaa - 800a674: f000 fffa bl 800b66c - GBT_Delay(250); - 800a678: 20fa movs r0, #250 @ 0xfa - 800a67a: f000 fa6f bl 800ab5c - if(GBT_ReqPower.chargingMode != 0){ //REFACTORING - 800a67e: 4b46 ldr r3, [pc, #280] @ (800a798 ) - 800a680: 791b ldrb r3, [r3, #4] - 800a682: 2b00 cmp r3, #0 - 800a684: f000 8179 beq.w 800a97a - //BCL power requirements received - - GBT_SwitchState(GBT_S10_CHARGING); - 800a688: 201e movs r0, #30 - 800a68a: f000 f9af bl 800a9ec - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - 800a68e: f004 f925 bl 800e8dc - 800a692: 4603 mov r3, r0 - 800a694: 4a41 ldr r2, [pc, #260] @ (800a79c ) - 800a696: 6013 str r3, [r2, #0] - CONN_SetState(Charging); - 800a698: 2008 movs r0, #8 - 800a69a: f000 fce7 bl 800b06c - - uint16_t curr = 4000 - GBT_ReqPower.requestedCurrent; - 800a69e: 4b3e ldr r3, [pc, #248] @ (800a798 ) - 800a6a0: 885b ldrh r3, [r3, #2] - 800a6a2: f5c3 637a rsb r3, r3, #4000 @ 0xfa0 - 800a6a6: 807b strh r3, [r7, #2] - uint16_t volt = GBT_ReqPower.requestedVoltage; - 800a6a8: 4b3b ldr r3, [pc, #236] @ (800a798 ) - 800a6aa: 881b ldrh r3, [r3, #0] - 800a6ac: 803b strh r3, [r7, #0] - //TODO Limits - CONN.RequestedVoltage = volt / 10; // В - 800a6ae: 883b ldrh r3, [r7, #0] - 800a6b0: 4a29 ldr r2, [pc, #164] @ (800a758 ) - 800a6b2: fba2 2303 umull r2, r3, r2, r3 - 800a6b6: 08db lsrs r3, r3, #3 - 800a6b8: b29a uxth r2, r3 - 800a6ba: 4b2d ldr r3, [pc, #180] @ (800a770 ) - 800a6bc: f8a3 200f strh.w r2, [r3, #15] - CONN.WantedCurrent = curr; // 0.1A - 800a6c0: 4b2b ldr r3, [pc, #172] @ (800a770 ) - 800a6c2: 887a ldrh r2, [r7, #2] - 800a6c4: f8a3 201b strh.w r2, [r3, #27] - CONN.EnableOutput = 1; - 800a6c8: 4b29 ldr r3, [pc, #164] @ (800a770 ) - 800a6ca: 2201 movs r2, #1 - 800a6cc: 75da strb r2, [r3, #23] - GBT_TimeChargingStarted = get_Current_Time(); - 800a6ce: f003 fb01 bl 800dcd4 - 800a6d2: 4603 mov r3, r0 - 800a6d4: 4a32 ldr r2, [pc, #200] @ (800a7a0 ) - 800a6d6: 6013 str r3, [r2, #0] - - } - break; - 800a6d8: e14f b.n 800a97a - - case GBT_S10_CHARGING: - //CHARGING - if((HAL_GetTick() - GBT_last_BCL_BCS_BSM_tick) > GBT_BCL_BCS_BSM_TIMEOUT_MS){ - 800a6da: f004 f8ff bl 800e8dc - 800a6de: 4602 mov r2, r0 - 800a6e0: 4b2e ldr r3, [pc, #184] @ (800a79c ) - 800a6e2: 681b ldr r3, [r3, #0] - 800a6e4: 1ad3 subs r3, r2, r3 - 800a6e6: f5b3 6ffa cmp.w r3, #2000 @ 0x7d0 - 800a6ea: d90b bls.n 800a704 - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a6ec: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a6f0: f000 fa6e bl 800abd0 - CONN.chargingError = CONN_ERR_EV_COMM; - 800a6f4: 4b1e ldr r3, [pc, #120] @ (800a770 ) - 800a6f6: 2209 movs r2, #9 - 800a6f8: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "BCL/BCS/BSM timeout, stopping...\n"); - 800a6fa: 492a ldr r1, [pc, #168] @ (800a7a4 ) - 800a6fc: 2005 movs r0, #5 - 800a6fe: f000 ff31 bl 800b564 - break; - 800a702: e141 b.n 800a988 - } - if(CONN.connControl == CMD_STOP) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY); - 800a704: 4b1a ldr r3, [pc, #104] @ (800a770 ) - 800a706: 781b ldrb r3, [r3, #0] - 800a708: 2b01 cmp r3, #1 - 800a70a: d102 bne.n 800a712 - 800a70c: 4826 ldr r0, [pc, #152] @ (800a7a8 ) - 800a70e: f000 fa7b bl 800ac08 - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_StopOCPP(GBT_CST_SUSPENDS_ARTIFICIALLY); // --> Finished - 800a712: 4b17 ldr r3, [pc, #92] @ (800a770 ) - 800a714: 781b ldrb r3, [r3, #0] - 800a716: 2b03 cmp r3, #3 - 800a718: d102 bne.n 800a720 - 800a71a: 4823 ldr r0, [pc, #140] @ (800a7a8 ) - 800a71c: f000 fa74 bl 800ac08 - if(GBT_LockState.error) { - 800a720: 4b22 ldr r3, [pc, #136] @ (800a7ac ) - 800a722: 785b ldrb r3, [r3, #1] - 800a724: 2b00 cmp r3, #0 - 800a726: d045 beq.n 800a7b4 - GBT_StopEVSE(GBT_CST_OTHERFALUT); // --> Suspend EVSE - 800a728: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a72c: f000 fa50 bl 800abd0 - CONN.chargingError = CONN_ERR_LOCK; - 800a730: 4b0f ldr r3, [pc, #60] @ (800a770 ) - 800a732: 2204 movs r2, #4 - 800a734: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Lock error, stopping...\n"); - 800a736: 491e ldr r1, [pc, #120] @ (800a7b0 ) - 800a738: 2005 movs r0, #5 - 800a73a: f000 ff13 bl 800b564 - break; - 800a73e: e123 b.n 800a988 - 800a740: 20000874 .word 0x20000874 - 800a744: 20000329 .word 0x20000329 - 800a748: 08016788 .word 0x08016788 - 800a74c: 20000378 .word 0x20000378 - 800a750: 51eb851f .word 0x51eb851f - 800a754: 08016798 .word 0x08016798 - 800a758: cccccccd .word 0xcccccccd - 800a75c: 080167a4 .word 0x080167a4 - 800a760: 080167b0 .word 0x080167b0 - 800a764: 080167bc .word 0x080167bc - 800a768: 080167c8 .word 0x080167c8 - 800a76c: 080167d4 .word 0x080167d4 - 800a770: 200002f8 .word 0x200002f8 - 800a774: fcf1c0fc .word 0xfcf1c0fc - 800a778: 080167e0 .word 0x080167e0 - 800a77c: 2000032a .word 0x2000032a - 800a780: fcf4c0fc .word 0xfcf4c0fc - 800a784: 080167f0 .word 0x080167f0 - 800a788: 2000032d .word 0x2000032d - 800a78c: 08016800 .word 0x08016800 - 800a790: 20000a14 .word 0x20000a14 - 800a794: 08016818 .word 0x08016818 - 800a798: 20000388 .word 0x20000388 - 800a79c: 200003c4 .word 0x200003c4 - 800a7a0: 200003c0 .word 0x200003c0 - 800a7a4: 08016834 .word 0x08016834 - 800a7a8: 0400f0f0 .word 0x0400f0f0 - 800a7ac: 20000008 .word 0x20000008 - 800a7b0: 08016858 .word 0x08016858 - } - if(CONN_CC_GetState()!=GBT_CC_4V){ - 800a7b4: f000 fd36 bl 800b224 - 800a7b8: 4603 mov r3, r0 - 800a7ba: 2b03 cmp r3, #3 - 800a7bc: d00b beq.n 800a7d6 - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a7be: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a7c2: f000 fa05 bl 800abd0 - CONN.chargingError = CONN_ERR_HOTPLUG; - 800a7c6: 4b78 ldr r3, [pc, #480] @ (800a9a8 ) - 800a7c8: 2208 movs r2, #8 - 800a7ca: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Hotplug detected, stopping...\n"); - 800a7cc: 4977 ldr r1, [pc, #476] @ (800a9ac ) - 800a7ce: 2005 movs r0, #5 - 800a7d0: f000 fec8 bl 800b564 - break; - 800a7d4: e0d8 b.n 800a988 - } - if((GBT_ReadTemp(0) > 90) || (GBT_ReadTemp(1) > 90)) { - 800a7d6: 2000 movs r0, #0 - 800a7d8: f7ff f8e0 bl 800999c - 800a7dc: 4603 mov r3, r0 - 800a7de: 2b5a cmp r3, #90 @ 0x5a - 800a7e0: dc05 bgt.n 800a7ee - 800a7e2: 2001 movs r0, #1 - 800a7e4: f7ff f8da bl 800999c - 800a7e8: 4603 mov r3, r0 - 800a7ea: 2b5a cmp r3, #90 @ 0x5a - 800a7ec: dd14 ble.n 800a818 - GBT_StopEVSE(GBT_CST_CONNECTOR_OVER_TEMP); - 800a7ee: 4870 ldr r0, [pc, #448] @ (800a9b0 ) - 800a7f0: f000 f9ee bl 800abd0 - CONN.chargingError = CONN_ERR_CONN_TEMP; - 800a7f4: 4b6c ldr r3, [pc, #432] @ (800a9a8 ) - 800a7f6: 2205 movs r2, #5 - 800a7f8: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Connector overheat %d %d, stopping...\n", GBT_ReadTemp(0), GBT_ReadTemp(1)); - 800a7fa: 2000 movs r0, #0 - 800a7fc: f7ff f8ce bl 800999c - 800a800: 4603 mov r3, r0 - 800a802: 461c mov r4, r3 - 800a804: 2001 movs r0, #1 - 800a806: f7ff f8c9 bl 800999c - 800a80a: 4603 mov r3, r0 - 800a80c: 4622 mov r2, r4 - 800a80e: 4969 ldr r1, [pc, #420] @ (800a9b4 ) - 800a810: 2005 movs r0, #5 - 800a812: f000 fea7 bl 800b564 - break; - 800a816: e0b7 b.n 800a988 - } - if(ISO.isolationResistance < (ISO.voltageComm/10)){ // *100/1000 - 800a818: 4b67 ldr r3, [pc, #412] @ (800a9b8 ) - 800a81a: f8b3 3001 ldrh.w r3, [r3, #1] - 800a81e: b29b uxth r3, r3 - 800a820: 4619 mov r1, r3 - 800a822: 4b65 ldr r3, [pc, #404] @ (800a9b8 ) - 800a824: f9b3 3007 ldrsh.w r3, [r3, #7] - 800a828: b21b sxth r3, r3 - 800a82a: 4a64 ldr r2, [pc, #400] @ (800a9bc ) - 800a82c: fb82 0203 smull r0, r2, r2, r3 - 800a830: 1092 asrs r2, r2, #2 - 800a832: 17db asrs r3, r3, #31 - 800a834: 1ad3 subs r3, r2, r3 - 800a836: b21b sxth r3, r3 - 800a838: 4299 cmp r1, r3 - 800a83a: da06 bge.n 800a84a - CONN.chargingError = CONN_ERR_INSULATION; - 800a83c: 4b5a ldr r3, [pc, #360] @ (800a9a8 ) - 800a83e: 2201 movs r2, #1 - 800a840: 775a strb r2, [r3, #29] - log_printf(LOG_WARN, "Current leakage, insulation error, stopping...\n"); - 800a842: 495f ldr r1, [pc, #380] @ (800a9c0 ) - 800a844: 2005 movs r0, #5 - 800a846: f000 fe8d bl 800b564 - } // 100 Ohm/V - - if(CONN.chargingError != CONN_NO_ERROR){ // --> Suspend EVSE - 800a84a: 4b57 ldr r3, [pc, #348] @ (800a9a8 ) - 800a84c: 7f5b ldrb r3, [r3, #29] - 800a84e: 2b00 cmp r3, #0 - 800a850: d003 beq.n 800a85a - GBT_StopEVSE(GBT_CST_OTHERFALUT); - 800a852: f24f 40f0 movw r0, #62704 @ 0xf4f0 - 800a856: f000 f9bb bl 800abd0 - - } - - //GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111100;//NOT PERMITTED - GBT_ChargerCurrentStatus.chargingPermissible = 0b1111111111111101; - 800a85a: 4b5a ldr r3, [pc, #360] @ (800a9c4 ) - 800a85c: f64f 72fd movw r2, #65533 @ 0xfffd - 800a860: 80da strh r2, [r3, #6] - GBT_ChargerCurrentStatus.chargingTime = (get_Current_Time() - GBT_TimeChargingStarted)/60; - 800a862: f003 fa37 bl 800dcd4 - 800a866: 4602 mov r2, r0 - 800a868: 4b57 ldr r3, [pc, #348] @ (800a9c8 ) - 800a86a: 681b ldr r3, [r3, #0] - 800a86c: 1ad3 subs r3, r2, r3 - 800a86e: 4a57 ldr r2, [pc, #348] @ (800a9cc ) - 800a870: fba2 2303 umull r2, r3, r2, r3 - 800a874: 095b lsrs r3, r3, #5 - 800a876: b29a uxth r2, r3 - 800a878: 4b52 ldr r3, [pc, #328] @ (800a9c4 ) - 800a87a: 809a strh r2, [r3, #4] - GBT_ChargerCurrentStatus.outputCurrent = 4000 - CONN.MeasuredCurrent; // 0.1A - 800a87c: 4b4a ldr r3, [pc, #296] @ (800a9a8 ) - 800a87e: f8b3 3015 ldrh.w r3, [r3, #21] - 800a882: b29b uxth r3, r3 - 800a884: f5c3 637a rsb r3, r3, #4000 @ 0xfa0 - 800a888: b29a uxth r2, r3 - 800a88a: 4b4e ldr r3, [pc, #312] @ (800a9c4 ) - 800a88c: 805a strh r2, [r3, #2] - GBT_ChargerCurrentStatus.outputVoltage = CONN.MeasuredVoltage * 10; // V -> 0.1V - 800a88e: 4b46 ldr r3, [pc, #280] @ (800a9a8 ) - 800a890: f8b3 3013 ldrh.w r3, [r3, #19] - 800a894: b29b uxth r3, r3 - 800a896: 461a mov r2, r3 - 800a898: 0092 lsls r2, r2, #2 - 800a89a: 4413 add r3, r2 - 800a89c: 005b lsls r3, r3, #1 - 800a89e: b29a uxth r2, r3 - 800a8a0: 4b48 ldr r3, [pc, #288] @ (800a9c4 ) - 800a8a2: 801a strh r2, [r3, #0] - - if(j_rx.state == 0) { - 800a8a4: 4b4a ldr r3, [pc, #296] @ (800a9d0 ) - 800a8a6: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800a8aa: 2b00 cmp r3, #0 - 800a8ac: d105 bne.n 800a8ba - GBT_SendCCS(); - 800a8ae: f000 fef1 bl 800b694 - GBT_Delay(49); - 800a8b2: 2031 movs r0, #49 @ 0x31 - 800a8b4: f000 f952 bl 800ab5c - } - - - //TODO: снижение тока если перегрев контактов - - break; - 800a8b8: e066 b.n 800a988 - GBT_Delay(10); // Resend packet if not sent - 800a8ba: 200a movs r0, #10 - 800a8bc: f000 f94e bl 800ab5c - break; - 800a8c0: e062 b.n 800a988 - - case GBT_STOP: - GBT_Delay(10); - 800a8c2: 200a movs r0, #10 - 800a8c4: f000 f94a bl 800ab5c - CONN.EnableOutput = 0; - 800a8c8: 4b37 ldr r3, [pc, #220] @ (800a9a8 ) - 800a8ca: 2200 movs r2, #0 - 800a8cc: 75da strb r2, [r3, #23] - GBT_SendCST(GBT_StopCauseCode); - 800a8ce: 4b41 ldr r3, [pc, #260] @ (800a9d4 ) - 800a8d0: 681b ldr r3, [r3, #0] - 800a8d2: 4618 mov r0, r3 - 800a8d4: f000 feec bl 800b6b0 - //RELAY_Write(RELAY_OUTPUT, 0); - //GBT_SwitchState(GBT_DISABLED); - if(GBT_StateTick()>10000){ - 800a8d8: f000 f934 bl 800ab44 - 800a8dc: 4603 mov r3, r0 - 800a8de: f242 7210 movw r2, #10000 @ 0x2710 - 800a8e2: 4293 cmp r3, r2 - 800a8e4: d906 bls.n 800a8f4 - log_printf(LOG_ERR, "BSD Timeout\n"); - 800a8e6: 493c ldr r1, [pc, #240] @ (800a9d8 ) - 800a8e8: 2004 movs r0, #4 - 800a8ea: f000 fe3b bl 800b564 - GBT_Error(0xFCF0C0FD); //BSD Timeout - 800a8ee: 483b ldr r0, [pc, #236] @ (800a9dc ) - 800a8f0: f000 f9c2 bl 800ac78 - } - - if(GBT_BSD_recv != 0){ - 800a8f4: 4b3a ldr r3, [pc, #232] @ (800a9e0 ) - 800a8f6: 781b ldrb r3, [r3, #0] - 800a8f8: 2b00 cmp r3, #0 - 800a8fa: d040 beq.n 800a97e - GBT_SwitchState(GBT_STOP_CSD); - 800a8fc: 2020 movs r0, #32 - 800a8fe: f000 f875 bl 800a9ec - } - - break; - 800a902: e03c b.n 800a97e - case GBT_STOP_CSD: - GBT_Delay(250); - 800a904: 20fa movs r0, #250 @ 0xfa - 800a906: f000 f929 bl 800ab5c - GBT_SendCSD(); - 800a90a: f000 fef1 bl 800b6f0 - if(GBT_StateTick()>2500){ //2.5S - 800a90e: f000 f919 bl 800ab44 - 800a912: 4603 mov r3, r0 - 800a914: f640 12c4 movw r2, #2500 @ 0x9c4 - 800a918: 4293 cmp r3, r2 - 800a91a: d932 bls.n 800a982 - GBT_SwitchState(GBT_COMPLETE); - 800a91c: 2022 movs r0, #34 @ 0x22 - 800a91e: f000 f865 bl 800a9ec - - } - break; - 800a922: e02e b.n 800a982 - - - case GBT_ERROR: - GBT_SendCEM(GBT_ErrorCode); //2.5S - 800a924: 4b2f ldr r3, [pc, #188] @ (800a9e4 ) - 800a926: 681b ldr r3, [r3, #0] - 800a928: 4618 mov r0, r3 - 800a92a: f000 ff01 bl 800b730 - GBT_SwitchState(GBT_COMPLETE); - 800a92e: 2022 movs r0, #34 @ 0x22 - 800a930: f000 f85c bl 800a9ec - - break; - 800a934: e028 b.n 800a988 - - case GBT_COMPLETE: - if(connectorState != Finished) { - 800a936: 4b2c ldr r3, [pc, #176] @ (800a9e8 ) - 800a938: 781b ldrb r3, [r3, #0] - 800a93a: 2b0a cmp r3, #10 - 800a93c: d023 beq.n 800a986 - GBT_SwitchState(GBT_DISABLED); - 800a93e: 2010 movs r0, #16 - 800a940: f000 f854 bl 800a9ec - GBT_Reset();//CHECK - 800a944: f000 f9b4 bl 800acb0 - } - break; - 800a948: e01d b.n 800a986 - - default: - GBT_SwitchState(GBT_DISABLED); - 800a94a: 2010 movs r0, #16 - 800a94c: f000 f84e bl 800a9ec - 800a950: e01a b.n 800a988 - break; - 800a952: bf00 nop - 800a954: e018 b.n 800a988 - break; - 800a956: bf00 nop - 800a958: e016 b.n 800a988 - break; - 800a95a: bf00 nop - 800a95c: e014 b.n 800a988 - break; - 800a95e: bf00 nop - 800a960: e012 b.n 800a988 - break; - 800a962: bf00 nop - 800a964: e010 b.n 800a988 - break; - 800a966: bf00 nop - 800a968: e00e b.n 800a988 - break; - 800a96a: bf00 nop - 800a96c: e00c b.n 800a988 - break; - 800a96e: bf00 nop - 800a970: e00a b.n 800a988 - break; - 800a972: bf00 nop - 800a974: e008 b.n 800a988 - break; - 800a976: bf00 nop - 800a978: e006 b.n 800a988 - break; - 800a97a: bf00 nop - 800a97c: e004 b.n 800a988 - break; - 800a97e: bf00 nop - 800a980: e002 b.n 800a988 - break; - 800a982: bf00 nop - 800a984: e000 b.n 800a988 - break; - 800a986: bf00 nop - } - if (CONN_CC_GetState()==GBT_CC_4V) CONN.EvConnected = 1; - 800a988: f000 fc4c bl 800b224 - 800a98c: 4603 mov r3, r0 - 800a98e: 2b03 cmp r3, #3 - 800a990: d103 bne.n 800a99a - 800a992: 4b05 ldr r3, [pc, #20] @ (800a9a8 ) - 800a994: 2201 movs r2, #1 - 800a996: 779a strb r2, [r3, #30] - else CONN.EvConnected = 0; -} - 800a998: e002 b.n 800a9a0 - else CONN.EvConnected = 0; - 800a99a: 4b03 ldr r3, [pc, #12] @ (800a9a8 ) - 800a99c: 2200 movs r2, #0 - 800a99e: 779a strb r2, [r3, #30] -} - 800a9a0: bf00 nop - 800a9a2: 3708 adds r7, #8 - 800a9a4: 46bd mov sp, r7 - 800a9a6: bdb0 pop {r4, r5, r7, pc} - 800a9a8: 200002f8 .word 0x200002f8 - 800a9ac: 08016874 .word 0x08016874 - 800a9b0: 0001f0f0 .word 0x0001f0f0 - 800a9b4: 08016894 .word 0x08016894 - 800a9b8: 20000060 .word 0x20000060 - 800a9bc: 66666667 .word 0x66666667 - 800a9c0: 08016624 .word 0x08016624 - 800a9c4: 200003ac .word 0x200003ac - 800a9c8: 200003c0 .word 0x200003c0 - 800a9cc: 88888889 .word 0x88888889 - 800a9d0: 20000874 .word 0x20000874 - 800a9d4: 200003c8 .word 0x200003c8 - 800a9d8: 080168bc .word 0x080168bc - 800a9dc: fcf0c0fd .word 0xfcf0c0fd - 800a9e0: 2000032c .word 0x2000032c - 800a9e4: 200003cc .word 0x200003cc - 800a9e8: 200003d1 .word 0x200003d1 - -0800a9ec : - - - -void GBT_SwitchState(gbtState_t state){ - 800a9ec: b580 push {r7, lr} - 800a9ee: b082 sub sp, #8 - 800a9f0: af00 add r7, sp, #0 - 800a9f2: 4603 mov r3, r0 - 800a9f4: 71fb strb r3, [r7, #7] - GBT_State = state; - 800a9f6: 4a42 ldr r2, [pc, #264] @ (800ab00 ) - 800a9f8: 79fb ldrb r3, [r7, #7] - 800a9fa: 7013 strb r3, [r2, #0] - GBT_state_tick = HAL_GetTick(); - 800a9fc: f003 ff6e bl 800e8dc - 800aa00: 4603 mov r3, r0 - 800aa02: 4a40 ldr r2, [pc, #256] @ (800ab04 ) - 800aa04: 6013 str r3, [r2, #0] - - if(GBT_State == GBT_DISABLED) log_printf(LOG_INFO, "Disabled\n"); - 800aa06: 4b3e ldr r3, [pc, #248] @ (800ab00 ) - 800aa08: 781b ldrb r3, [r3, #0] - 800aa0a: 2b10 cmp r3, #16 - 800aa0c: d103 bne.n 800aa16 - 800aa0e: 493e ldr r1, [pc, #248] @ (800ab08 ) - 800aa10: 2007 movs r0, #7 - 800aa12: f000 fda7 bl 800b564 - if(GBT_State == GBT_S3_STARTED) log_printf(LOG_INFO, "Charging started\n"); - 800aa16: 4b3a ldr r3, [pc, #232] @ (800ab00 ) - 800aa18: 781b ldrb r3, [r3, #0] - 800aa1a: 2b13 cmp r3, #19 - 800aa1c: d103 bne.n 800aa26 - 800aa1e: 493b ldr r1, [pc, #236] @ (800ab0c ) - 800aa20: 2007 movs r0, #7 - 800aa22: f000 fd9f bl 800b564 - if(GBT_State == GBT_S31_WAIT_BHM) log_printf(LOG_INFO, "Waiting for BHM\n"); - 800aa26: 4b36 ldr r3, [pc, #216] @ (800ab00 ) - 800aa28: 781b ldrb r3, [r3, #0] - 800aa2a: 2b14 cmp r3, #20 - 800aa2c: d103 bne.n 800aa36 - 800aa2e: 4938 ldr r1, [pc, #224] @ (800ab10 ) - 800aa30: 2007 movs r0, #7 - 800aa32: f000 fd97 bl 800b564 - if(GBT_State == GBT_S4_WAIT_PSU_READY) log_printf(LOG_INFO, "Waiting for PSU ready\n"); - 800aa36: 4b32 ldr r3, [pc, #200] @ (800ab00 ) - 800aa38: 781b ldrb r3, [r3, #0] - 800aa3a: 2b15 cmp r3, #21 - 800aa3c: d103 bne.n 800aa46 - 800aa3e: 4935 ldr r1, [pc, #212] @ (800ab14 ) - 800aa40: 2007 movs r0, #7 - 800aa42: f000 fd8f bl 800b564 - if(GBT_State == GBT_S4_ISOTEST) log_printf(LOG_INFO, "Isolation test\n"); - 800aa46: 4b2e ldr r3, [pc, #184] @ (800ab00 ) - 800aa48: 781b ldrb r3, [r3, #0] - 800aa4a: 2b17 cmp r3, #23 - 800aa4c: d103 bne.n 800aa56 - 800aa4e: 4932 ldr r1, [pc, #200] @ (800ab18 ) - 800aa50: 2007 movs r0, #7 - 800aa52: f000 fd87 bl 800b564 - if(GBT_State == GBT_S5_BAT_INFO) log_printf(LOG_INFO, "Waiting for battery info\n"); - 800aa56: 4b2a ldr r3, [pc, #168] @ (800ab00 ) - 800aa58: 781b ldrb r3, [r3, #0] - 800aa5a: 2b19 cmp r3, #25 - 800aa5c: d103 bne.n 800aa66 - 800aa5e: 492f ldr r1, [pc, #188] @ (800ab1c ) - 800aa60: 2007 movs r0, #7 - 800aa62: f000 fd7f bl 800b564 - if(GBT_State == GBT_S6_BAT_STAT) log_printf(LOG_INFO, "Waiting for battery status\n"); - 800aa66: 4b26 ldr r3, [pc, #152] @ (800ab00 ) - 800aa68: 781b ldrb r3, [r3, #0] - 800aa6a: 2b1a cmp r3, #26 - 800aa6c: d103 bne.n 800aa76 - 800aa6e: 492c ldr r1, [pc, #176] @ (800ab20 ) - 800aa70: 2007 movs r0, #7 - 800aa72: f000 fd77 bl 800b564 - if(GBT_State == GBT_S7_BMS_WAIT) log_printf(LOG_INFO, "Waiting for BMS\n"); - 800aa76: 4b22 ldr r3, [pc, #136] @ (800ab00 ) - 800aa78: 781b ldrb r3, [r3, #0] - 800aa7a: 2b1b cmp r3, #27 - 800aa7c: d103 bne.n 800aa86 - 800aa7e: 4929 ldr r1, [pc, #164] @ (800ab24 ) - 800aa80: 2007 movs r0, #7 - 800aa82: f000 fd6f bl 800b564 - if(GBT_State == GBT_S8_INIT_CHARGER)log_printf(LOG_INFO, "Initializing charger\n"); - 800aa86: 4b1e ldr r3, [pc, #120] @ (800ab00 ) - 800aa88: 781b ldrb r3, [r3, #0] - 800aa8a: 2b1c cmp r3, #28 - 800aa8c: d103 bne.n 800aa96 - 800aa8e: 4926 ldr r1, [pc, #152] @ (800ab28 ) - 800aa90: 2007 movs r0, #7 - 800aa92: f000 fd67 bl 800b564 - if(GBT_State == GBT_S9_WAIT_BCL) log_printf(LOG_INFO, "Waiting for BCL\n"); - 800aa96: 4b1a ldr r3, [pc, #104] @ (800ab00 ) - 800aa98: 781b ldrb r3, [r3, #0] - 800aa9a: 2b1d cmp r3, #29 - 800aa9c: d103 bne.n 800aaa6 - 800aa9e: 4923 ldr r1, [pc, #140] @ (800ab2c ) - 800aaa0: 2007 movs r0, #7 - 800aaa2: f000 fd5f bl 800b564 - if(GBT_State == GBT_S10_CHARGING) log_printf(LOG_INFO, "Charging in progress\n"); - 800aaa6: 4b16 ldr r3, [pc, #88] @ (800ab00 ) - 800aaa8: 781b ldrb r3, [r3, #0] - 800aaaa: 2b1e cmp r3, #30 - 800aaac: d103 bne.n 800aab6 - 800aaae: 4920 ldr r1, [pc, #128] @ (800ab30 ) - 800aab0: 2007 movs r0, #7 - 800aab2: f000 fd57 bl 800b564 - if(GBT_State == GBT_STOP) log_printf(LOG_INFO, "Charging Stopped\n"); - 800aab6: 4b12 ldr r3, [pc, #72] @ (800ab00 ) - 800aab8: 781b ldrb r3, [r3, #0] - 800aaba: 2b1f cmp r3, #31 - 800aabc: d103 bne.n 800aac6 - 800aabe: 491d ldr r1, [pc, #116] @ (800ab34 ) - 800aac0: 2007 movs r0, #7 - 800aac2: f000 fd4f bl 800b564 - if(GBT_State == GBT_STOP_CSD) log_printf(LOG_INFO, "Charging Stopped with CSD\n"); - 800aac6: 4b0e ldr r3, [pc, #56] @ (800ab00 ) - 800aac8: 781b ldrb r3, [r3, #0] - 800aaca: 2b20 cmp r3, #32 - 800aacc: d103 bne.n 800aad6 - 800aace: 491a ldr r1, [pc, #104] @ (800ab38 ) - 800aad0: 2007 movs r0, #7 - 800aad2: f000 fd47 bl 800b564 - if(GBT_State == GBT_ERROR) log_printf(LOG_INFO, "Charging Error\n"); - 800aad6: 4b0a ldr r3, [pc, #40] @ (800ab00 ) - 800aad8: 781b ldrb r3, [r3, #0] - 800aada: 2b21 cmp r3, #33 @ 0x21 - 800aadc: d103 bne.n 800aae6 - 800aade: 4917 ldr r1, [pc, #92] @ (800ab3c ) - 800aae0: 2007 movs r0, #7 - 800aae2: f000 fd3f bl 800b564 - if(GBT_State == GBT_COMPLETE) log_printf(LOG_INFO, "Charging Finished\n"); - 800aae6: 4b06 ldr r3, [pc, #24] @ (800ab00 ) - 800aae8: 781b ldrb r3, [r3, #0] - 800aaea: 2b22 cmp r3, #34 @ 0x22 - 800aaec: d103 bne.n 800aaf6 - 800aaee: 4914 ldr r1, [pc, #80] @ (800ab40 ) - 800aaf0: 2007 movs r0, #7 - 800aaf2: f000 fd37 bl 800b564 -} - 800aaf6: bf00 nop - 800aaf8: 3708 adds r7, #8 - 800aafa: 46bd mov sp, r7 - 800aafc: bd80 pop {r7, pc} - 800aafe: bf00 nop - 800ab00: 20000318 .word 0x20000318 - 800ab04: 2000031c .word 0x2000031c - 800ab08: 080168cc .word 0x080168cc - 800ab0c: 080168d8 .word 0x080168d8 - 800ab10: 080168ec .word 0x080168ec - 800ab14: 08016900 .word 0x08016900 - 800ab18: 08016918 .word 0x08016918 - 800ab1c: 08016928 .word 0x08016928 - 800ab20: 08016944 .word 0x08016944 - 800ab24: 08016960 .word 0x08016960 - 800ab28: 08016974 .word 0x08016974 - 800ab2c: 0801698c .word 0x0801698c - 800ab30: 080169a0 .word 0x080169a0 - 800ab34: 080169b8 .word 0x080169b8 - 800ab38: 080169cc .word 0x080169cc - 800ab3c: 080169e8 .word 0x080169e8 - 800ab40: 080169f8 .word 0x080169f8 - -0800ab44 : - -uint32_t GBT_StateTick(){ - 800ab44: b580 push {r7, lr} - 800ab46: af00 add r7, sp, #0 - return HAL_GetTick() - GBT_state_tick; - 800ab48: f003 fec8 bl 800e8dc - 800ab4c: 4602 mov r2, r0 - 800ab4e: 4b02 ldr r3, [pc, #8] @ (800ab58 ) - 800ab50: 681b ldr r3, [r3, #0] - 800ab52: 1ad3 subs r3, r2, r3 -} - 800ab54: 4618 mov r0, r3 - 800ab56: bd80 pop {r7, pc} - 800ab58: 2000031c .word 0x2000031c - -0800ab5c : - -void GBT_Delay(uint32_t delay){ - 800ab5c: b580 push {r7, lr} - 800ab5e: b082 sub sp, #8 - 800ab60: af00 add r7, sp, #0 - 800ab62: 6078 str r0, [r7, #4] - GBT_delay_start = HAL_GetTick(); - 800ab64: f003 feba bl 800e8dc - 800ab68: 4603 mov r3, r0 - 800ab6a: 4a04 ldr r2, [pc, #16] @ (800ab7c ) - 800ab6c: 6013 str r3, [r2, #0] - GBT_delay = delay; - 800ab6e: 4a04 ldr r2, [pc, #16] @ (800ab80 ) - 800ab70: 687b ldr r3, [r7, #4] - 800ab72: 6013 str r3, [r2, #0] -} - 800ab74: bf00 nop - 800ab76: 3708 adds r7, #8 - 800ab78: 46bd mov sp, r7 - 800ab7a: bd80 pop {r7, pc} - 800ab7c: 20000320 .word 0x20000320 - 800ab80: 20000324 .word 0x20000324 - -0800ab84 : - -void GBT_StopEV(uint32_t causecode){ // --> Suspend EV - 800ab84: b580 push {r7, lr} - 800ab86: b082 sub sp, #8 - 800ab88: af00 add r7, sp, #0 - 800ab8a: 6078 str r0, [r7, #4] - if (CONN.chargingError){ - 800ab8c: 4b0c ldr r3, [pc, #48] @ (800abc0 ) - 800ab8e: 7f5b ldrb r3, [r3, #29] - 800ab90: 2b00 cmp r3, #0 - 800ab92: d003 beq.n 800ab9c - GBT_StopSource = GBT_STOP_EVSE; - 800ab94: 4b0b ldr r3, [pc, #44] @ (800abc4 ) - 800ab96: 2200 movs r2, #0 - 800ab98: 701a strb r2, [r3, #0] - 800ab9a: e002 b.n 800aba2 - }else{ - GBT_StopSource = GBT_STOP_EV; - 800ab9c: 4b09 ldr r3, [pc, #36] @ (800abc4 ) - 800ab9e: 2201 movs r2, #1 - 800aba0: 701a strb r2, [r3, #0] - } - GBT_StopCauseCode = causecode; - 800aba2: 4a09 ldr r2, [pc, #36] @ (800abc8 ) - 800aba4: 687b ldr r3, [r7, #4] - 800aba6: 6013 str r3, [r2, #0] - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); - 800aba8: 4b08 ldr r3, [pc, #32] @ (800abcc ) - 800abaa: 781b ldrb r3, [r3, #0] - 800abac: 2b1f cmp r3, #31 - 800abae: d002 beq.n 800abb6 - 800abb0: 201f movs r0, #31 - 800abb2: f7ff ff1b bl 800a9ec -} - 800abb6: bf00 nop - 800abb8: 3708 adds r7, #8 - 800abba: 46bd mov sp, r7 - 800abbc: bd80 pop {r7, pc} - 800abbe: bf00 nop - 800abc0: 200002f8 .word 0x200002f8 - 800abc4: 200003d0 .word 0x200003d0 - 800abc8: 200003c8 .word 0x200003c8 - 800abcc: 20000318 .word 0x20000318 - -0800abd0 : - -void GBT_StopEVSE(uint32_t causecode){ // --> Suspend EVSE - 800abd0: b580 push {r7, lr} - 800abd2: b082 sub sp, #8 - 800abd4: af00 add r7, sp, #0 - 800abd6: 6078 str r0, [r7, #4] - GBT_StopSource = GBT_STOP_EVSE; - 800abd8: 4b08 ldr r3, [pc, #32] @ (800abfc ) - 800abda: 2200 movs r2, #0 - 800abdc: 701a strb r2, [r3, #0] - GBT_StopCauseCode = causecode; - 800abde: 4a08 ldr r2, [pc, #32] @ (800ac00 ) - 800abe0: 687b ldr r3, [r7, #4] - 800abe2: 6013 str r3, [r2, #0] - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); - 800abe4: 4b07 ldr r3, [pc, #28] @ (800ac04 ) - 800abe6: 781b ldrb r3, [r3, #0] - 800abe8: 2b1f cmp r3, #31 - 800abea: d002 beq.n 800abf2 - 800abec: 201f movs r0, #31 - 800abee: f7ff fefd bl 800a9ec -} - 800abf2: bf00 nop - 800abf4: 3708 adds r7, #8 - 800abf6: 46bd mov sp, r7 - 800abf8: bd80 pop {r7, pc} - 800abfa: bf00 nop - 800abfc: 200003d0 .word 0x200003d0 - 800ac00: 200003c8 .word 0x200003c8 - 800ac04: 20000318 .word 0x20000318 - -0800ac08 : - -void GBT_StopOCPP(uint32_t causecode){ // --> Finished - 800ac08: b580 push {r7, lr} - 800ac0a: b082 sub sp, #8 - 800ac0c: af00 add r7, sp, #0 - 800ac0e: 6078 str r0, [r7, #4] - GBT_StopSource = GBT_STOP_OCPP; - 800ac10: 4b08 ldr r3, [pc, #32] @ (800ac34 ) - 800ac12: 2202 movs r2, #2 - 800ac14: 701a strb r2, [r3, #0] - GBT_StopCauseCode = causecode; - 800ac16: 4a08 ldr r2, [pc, #32] @ (800ac38 ) - 800ac18: 687b ldr r3, [r7, #4] - 800ac1a: 6013 str r3, [r2, #0] - if(GBT_State != GBT_STOP) GBT_SwitchState(GBT_STOP); - 800ac1c: 4b07 ldr r3, [pc, #28] @ (800ac3c ) - 800ac1e: 781b ldrb r3, [r3, #0] - 800ac20: 2b1f cmp r3, #31 - 800ac22: d002 beq.n 800ac2a - 800ac24: 201f movs r0, #31 - 800ac26: f7ff fee1 bl 800a9ec -} - 800ac2a: bf00 nop - 800ac2c: 3708 adds r7, #8 - 800ac2e: 46bd mov sp, r7 - 800ac30: bd80 pop {r7, pc} - 800ac32: bf00 nop - 800ac34: 200003d0 .word 0x200003d0 - 800ac38: 200003c8 .word 0x200003c8 - 800ac3c: 20000318 .word 0x20000318 - -0800ac40 : - -void GBT_ForceStop(){ // --> Suspend EV - 800ac40: b580 push {r7, lr} - 800ac42: af00 add r7, sp, #0 - GBT_StopSource = GBT_STOP_EV; - 800ac44: 4b0a ldr r3, [pc, #40] @ (800ac70 ) - 800ac46: 2201 movs r2, #1 - 800ac48: 701a strb r2, [r3, #0] - CONN.EnableOutput = 0; - 800ac4a: 4b0a ldr r3, [pc, #40] @ (800ac74 ) - 800ac4c: 2200 movs r2, #0 - 800ac4e: 75da strb r2, [r3, #23] - GBT_SwitchState(GBT_COMPLETE); - 800ac50: 2022 movs r0, #34 @ 0x22 - 800ac52: f7ff fecb bl 800a9ec - GBT_Lock(0); - 800ac56: 2000 movs r0, #0 - 800ac58: f001 f92e bl 800beb8 - RELAY_Write(RELAY_AUX0, 0); - 800ac5c: 2100 movs r1, #0 - 800ac5e: 2000 movs r0, #0 - 800ac60: f7fe fd44 bl 80096ec - RELAY_Write(RELAY_AUX1, 0); - 800ac64: 2100 movs r1, #0 - 800ac66: 2001 movs r0, #1 - 800ac68: f7fe fd40 bl 80096ec -} - 800ac6c: bf00 nop - 800ac6e: bd80 pop {r7, pc} - 800ac70: 200003d0 .word 0x200003d0 - 800ac74: 200002f8 .word 0x200002f8 - -0800ac78 : - -void GBT_Error(uint32_t errorcode){ // --> Suspend EV - 800ac78: b580 push {r7, lr} - 800ac7a: b082 sub sp, #8 - 800ac7c: af00 add r7, sp, #0 - 800ac7e: 6078 str r0, [r7, #4] - GBT_StopSource = GBT_STOP_EV; - 800ac80: 4b08 ldr r3, [pc, #32] @ (800aca4 ) - 800ac82: 2201 movs r2, #1 - 800ac84: 701a strb r2, [r3, #0] - log_printf(LOG_ERR, "GBT Error code: 0x%X\n", errorcode); - 800ac86: 687a ldr r2, [r7, #4] - 800ac88: 4907 ldr r1, [pc, #28] @ (800aca8 ) - 800ac8a: 2004 movs r0, #4 - 800ac8c: f000 fc6a bl 800b564 - GBT_ErrorCode = errorcode; - 800ac90: 4a06 ldr r2, [pc, #24] @ (800acac ) - 800ac92: 687b ldr r3, [r7, #4] - 800ac94: 6013 str r3, [r2, #0] - GBT_SwitchState(GBT_ERROR); - 800ac96: 2021 movs r0, #33 @ 0x21 - 800ac98: f7ff fea8 bl 800a9ec -} - 800ac9c: bf00 nop - 800ac9e: 3708 adds r7, #8 - 800aca0: 46bd mov sp, r7 - 800aca2: bd80 pop {r7, pc} - 800aca4: 200003d0 .word 0x200003d0 - 800aca8: 08016a0c .word 0x08016a0c - 800acac: 200003cc .word 0x200003cc - -0800acb0 : - - -void GBT_Reset(){ - 800acb0: b580 push {r7, lr} - 800acb2: af00 add r7, sp, #0 - GBT_last_BCL_BCS_BSM_tick = HAL_GetTick(); - 800acb4: f003 fe12 bl 800e8dc - 800acb8: 4603 mov r3, r0 - 800acba: 4a31 ldr r2, [pc, #196] @ (800ad80 ) - 800acbc: 6013 str r3, [r2, #0] - GBT_BAT_INFO_recv = 0; - 800acbe: 4b31 ldr r3, [pc, #196] @ (800ad84 ) - 800acc0: 2200 movs r2, #0 - 800acc2: 701a strb r2, [r3, #0] - GBT_BAT_STAT_recv = 0; - 800acc4: 4b30 ldr r3, [pc, #192] @ (800ad88 ) - 800acc6: 2200 movs r2, #0 - 800acc8: 701a strb r2, [r3, #0] - GBT_BRO_recv = 0; - 800acca: 4b30 ldr r3, [pc, #192] @ (800ad8c ) - 800accc: 2200 movs r2, #0 - 800acce: 701a strb r2, [r3, #0] - GBT_BHM_recv = 0; - 800acd0: 4b2f ldr r3, [pc, #188] @ (800ad90 ) - 800acd2: 2200 movs r2, #0 - 800acd4: 701a strb r2, [r3, #0] - GBT_BSD_recv = 0; - 800acd6: 4b2f ldr r3, [pc, #188] @ (800ad94 ) - 800acd8: 2200 movs r2, #0 - 800acda: 701a strb r2, [r3, #0] - EV_ready = 0; - 800acdc: 4b2e ldr r3, [pc, #184] @ (800ad98 ) - 800acde: 2200 movs r2, #0 - 800ace0: 701a strb r2, [r3, #0] - CONN.SOC = 0; - 800ace2: 4b2e ldr r3, [pc, #184] @ (800ad9c ) - 800ace4: 2200 movs r2, #0 - 800ace6: 709a strb r2, [r3, #2] - CONN.EnableOutput = 0; - 800ace8: 4b2c ldr r3, [pc, #176] @ (800ad9c ) - 800acea: 2200 movs r2, #0 - 800acec: 75da strb r2, [r3, #23] - CONN.WantedCurrent = 0; - 800acee: 4b2b ldr r3, [pc, #172] @ (800ad9c ) - 800acf0: 2200 movs r2, #0 - 800acf2: 76da strb r2, [r3, #27] - 800acf4: 2200 movs r2, #0 - 800acf6: 771a strb r2, [r3, #28] - CONN.RequestedVoltage = 0; - 800acf8: 4b28 ldr r3, [pc, #160] @ (800ad9c ) - 800acfa: 2200 movs r2, #0 - 800acfc: 73da strb r2, [r3, #15] - 800acfe: 2200 movs r2, #0 - 800ad00: 741a strb r2, [r3, #16] - memset(&GBT_EVInfo, 0, sizeof (GBT_EVInfo)); - 800ad02: 2231 movs r2, #49 @ 0x31 - 800ad04: 2100 movs r1, #0 - 800ad06: 4826 ldr r0, [pc, #152] @ (800ada0 ) - 800ad08: f009 fa48 bl 801419c - memset(&GBT_BATStat, 0, sizeof (GBT_BATStat)); - 800ad0c: 220d movs r2, #13 - 800ad0e: 2100 movs r1, #0 - 800ad10: 4824 ldr r0, [pc, #144] @ (800ada4 ) - 800ad12: f009 fa43 bl 801419c - memset(&GBT_ReqPower, 0, sizeof (GBT_ReqPower)); - 800ad16: 2205 movs r2, #5 - 800ad18: 2100 movs r1, #0 - 800ad1a: 4823 ldr r0, [pc, #140] @ (800ada8 ) - 800ad1c: f009 fa3e bl 801419c - memset(&GBT_CurrPower, 0, sizeof (GBT_CurrPower)); - 800ad20: 2205 movs r2, #5 - 800ad22: 2100 movs r1, #0 - 800ad24: 4821 ldr r0, [pc, #132] @ (800adac ) - 800ad26: f009 fa39 bl 801419c - memset(&GBT_MaxVoltage, 0, sizeof (GBT_MaxVoltage)); - 800ad2a: 2202 movs r2, #2 - 800ad2c: 2100 movs r1, #0 - 800ad2e: 4820 ldr r0, [pc, #128] @ (800adb0 ) - 800ad30: f009 fa34 bl 801419c - memset(&GBT_ChargingStatus, 0, sizeof (GBT_ChargingStatus)); - 800ad34: 2209 movs r2, #9 - 800ad36: 2100 movs r1, #0 - 800ad38: 481e ldr r0, [pc, #120] @ (800adb4 ) - 800ad3a: f009 fa2f bl 801419c - memset(&GBT_BatteryStatus, 0, sizeof (GBT_BatteryStatus)); - 800ad3e: 2207 movs r2, #7 - 800ad40: 2100 movs r1, #0 - 800ad42: 481d ldr r0, [pc, #116] @ (800adb8 ) - 800ad44: f009 fa2a bl 801419c - memset(&GBT_ChargerCurrentStatus, 0, sizeof (GBT_ChargerCurrentStatus)); - 800ad48: 2208 movs r2, #8 - 800ad4a: 2100 movs r1, #0 - 800ad4c: 481b ldr r0, [pc, #108] @ (800adbc ) - 800ad4e: f009 fa25 bl 801419c - memset(&GBT_ChargerStop, 0, sizeof (GBT_ChargerStop)); - 800ad52: 2208 movs r2, #8 - 800ad54: 2100 movs r1, #0 - 800ad56: 481a ldr r0, [pc, #104] @ (800adc0 ) - 800ad58: f009 fa20 bl 801419c - GBT_CurrPower.requestedCurrent = 4000; //0A - 800ad5c: 4b13 ldr r3, [pc, #76] @ (800adac ) - 800ad5e: f44f 627a mov.w r2, #4000 @ 0xfa0 - 800ad62: 805a strh r2, [r3, #2] - GBT_CurrPower.requestedVoltage = 500; //50V - 800ad64: 4b11 ldr r3, [pc, #68] @ (800adac ) - 800ad66: f44f 72fa mov.w r2, #500 @ 0x1f4 - 800ad6a: 801a strh r2, [r3, #0] - GBT_TimeChargingStarted = 0; - 800ad6c: 4b15 ldr r3, [pc, #84] @ (800adc4 ) - 800ad6e: 2200 movs r2, #0 - 800ad70: 601a str r2, [r3, #0] - GBT_BRO = 0x00; - 800ad72: 4b15 ldr r3, [pc, #84] @ (800adc8 ) - 800ad74: 2200 movs r2, #0 - 800ad76: 701a strb r2, [r3, #0] - GBT_LockResetError(); - 800ad78: f001 f9a8 bl 800c0cc -} - 800ad7c: bf00 nop - 800ad7e: bd80 pop {r7, pc} - 800ad80: 200003c4 .word 0x200003c4 - 800ad84: 20000328 .word 0x20000328 - 800ad88: 20000329 .word 0x20000329 - 800ad8c: 2000032a .word 0x2000032a - 800ad90: 2000032b .word 0x2000032b - 800ad94: 2000032c .word 0x2000032c - 800ad98: 2000032d .word 0x2000032d - 800ad9c: 200002f8 .word 0x200002f8 - 800ada0: 20000344 .word 0x20000344 - 800ada4: 20000378 .word 0x20000378 - 800ada8: 20000388 .word 0x20000388 - 800adac: 20000390 .word 0x20000390 - 800adb0: 20000340 .word 0x20000340 - 800adb4: 20000398 .word 0x20000398 - 800adb8: 200003a4 .word 0x200003a4 - 800adbc: 200003ac .word 0x200003ac - 800adc0: 200003b4 .word 0x200003b4 - 800adc4: 200003c0 .word 0x200003c0 - 800adc8: 200003bc .word 0x200003bc - -0800adcc : -void GBT_Start(){ - 800adcc: b580 push {r7, lr} - 800adce: af00 add r7, sp, #0 - RELAY_Write(RELAY_AUX0, 1); - 800add0: 2101 movs r1, #1 - 800add2: 2000 movs r0, #0 - 800add4: f7fe fc8a bl 80096ec - RELAY_Write(RELAY_AUX1, 1); - 800add8: 2101 movs r1, #1 - 800adda: 2001 movs r0, #1 - 800addc: f7fe fc86 bl 80096ec - - GBT_SwitchState(GBT_S3_STARTED); - 800ade0: 2013 movs r0, #19 - 800ade2: f7ff fe03 bl 800a9ec -} - 800ade6: bf00 nop - 800ade8: bd80 pop {r7, pc} - ... - -0800adec : - name = 0; \ - } \ - __hold_result; \ -}) - -void CONN_Task(){ - 800adec: b580 push {r7, lr} - 800adee: b082 sub sp, #8 - 800adf0: af00 add r7, sp, #0 - - switch (connectorState){ - 800adf2: 4b98 ldr r3, [pc, #608] @ (800b054 ) - 800adf4: 781b ldrb r3, [r3, #0] - 800adf6: 2b0c cmp r3, #12 - 800adf8: f200 8116 bhi.w 800b028 - 800adfc: a201 add r2, pc, #4 @ (adr r2, 800ae04 ) - 800adfe: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800ae02: bf00 nop - 800ae04: 0800ae39 .word 0x0800ae39 - 800ae08: 0800ae77 .word 0x0800ae77 - 800ae0c: 0800ae51 .word 0x0800ae51 - 800ae10: 0800af03 .word 0x0800af03 - 800ae14: 0800aebd .word 0x0800aebd - 800ae18: 0800b029 .word 0x0800b029 - 800ae1c: 0800b029 .word 0x0800b029 - 800ae20: 0800b029 .word 0x0800b029 - 800ae24: 0800af57 .word 0x0800af57 - 800ae28: 0800b029 .word 0x0800b029 - 800ae2c: 0800afb9 .word 0x0800afb9 - 800ae30: 0800afab .word 0x0800afab - 800ae34: 0800af9d .word 0x0800af9d - case Unknown: // unlocked, waiting for config - GBT_Lock(0); - 800ae38: 2000 movs r0, #0 - 800ae3a: f001 f83d bl 800beb8 - if (config_initialized) { - 800ae3e: 4b86 ldr r3, [pc, #536] @ (800b058 ) - 800ae40: 781b ldrb r3, [r3, #0] - 800ae42: 2b00 cmp r3, #0 - 800ae44: f000 80f4 beq.w 800b030 - CONN_SetState(Unplugged); - 800ae48: 2001 movs r0, #1 - 800ae4a: f000 f90f bl 800b06c - } - break; - 800ae4e: e0ef b.n 800b030 - - case Disabled: // faulted, unlocked - GBT_Lock(0); - 800ae50: 2000 movs r0, #0 - 800ae52: f001 f831 bl 800beb8 - if(CONN.chargingError == 0) CONN_SetState(Unplugged); - 800ae56: 4b81 ldr r3, [pc, #516] @ (800b05c ) - 800ae58: 7f5b ldrb r3, [r3, #29] - 800ae5a: 2b00 cmp r3, #0 - 800ae5c: d102 bne.n 800ae64 - 800ae5e: 2001 movs r0, #1 - 800ae60: f000 f904 bl 800b06c - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - 800ae64: 4b7d ldr r3, [pc, #500] @ (800b05c ) - 800ae66: 781b ldrb r3, [r3, #0] - 800ae68: 2b03 cmp r3, #3 - 800ae6a: f040 80e3 bne.w 800b034 - 800ae6e: 2000 movs r0, #0 - 800ae70: f000 ffee bl 800be50 - break; - 800ae74: e0de b.n 800b034 - - case Unplugged: // unlocked, waiting to connect - GBT_Lock(0); - 800ae76: 2000 movs r0, #0 - 800ae78: f001 f81e bl 800beb8 - if(CONN.chargingError != 0) CONN_SetState(Disabled); - 800ae7c: 4b77 ldr r3, [pc, #476] @ (800b05c ) - 800ae7e: 7f5b ldrb r3, [r3, #29] - 800ae80: 2b00 cmp r3, #0 - 800ae82: d002 beq.n 800ae8a - 800ae84: 2002 movs r0, #2 - 800ae86: f000 f8f1 bl 800b06c - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - 800ae8a: 4b74 ldr r3, [pc, #464] @ (800b05c ) - 800ae8c: 781b ldrb r3, [r3, #0] - 800ae8e: 2b03 cmp r3, #3 - 800ae90: d102 bne.n 800ae98 - 800ae92: 2000 movs r0, #0 - 800ae94: f000 ffdc bl 800be50 - - if((CONN_CC_GetState()==GBT_CC_4V) && (CONN.connControl != CMD_FORCE_UNLOCK)){ - 800ae98: f000 f9c4 bl 800b224 - 800ae9c: 4603 mov r3, r0 - 800ae9e: 2b03 cmp r3, #3 - 800aea0: f040 80ca bne.w 800b038 - 800aea4: 4b6d ldr r3, [pc, #436] @ (800b05c ) - 800aea6: 781b ldrb r3, [r3, #0] - 800aea8: 2b03 cmp r3, #3 - 800aeaa: f000 80c5 beq.w 800b038 - CONN_SetState(AuthRequired); - 800aeae: 2004 movs r0, #4 - 800aeb0: f000 f8dc bl 800b06c - GBT_Lock(0); - 800aeb4: 2000 movs r0, #0 - 800aeb6: f000 ffff bl 800beb8 - } - break; - 800aeba: e0bd b.n 800b038 - - case AuthRequired: // plugged, waiting to start charge - GBT_Lock(0); - 800aebc: 2000 movs r0, #0 - 800aebe: f000 fffb bl 800beb8 - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - 800aec2: 4b66 ldr r3, [pc, #408] @ (800b05c ) - 800aec4: 781b ldrb r3, [r3, #0] - 800aec6: 2b03 cmp r3, #3 - 800aec8: d102 bne.n 800aed0 - 800aeca: 2000 movs r0, #0 - 800aecc: f000 ffc0 bl 800be50 - if(CONN_CC_GetState()==GBT_CC_4V){ - 800aed0: f000 f9a8 bl 800b224 - 800aed4: 4603 mov r3, r0 - 800aed6: 2b03 cmp r3, #3 - 800aed8: d10f bne.n 800aefa - if(CONN.connControl == CMD_START){ - 800aeda: 4b60 ldr r3, [pc, #384] @ (800b05c ) - 800aedc: 781b ldrb r3, [r3, #0] - 800aede: 2b02 cmp r3, #2 - 800aee0: d102 bne.n 800aee8 - CONN_SetState(Preparing); - 800aee2: 2003 movs r0, #3 - 800aee4: f000 f8c2 bl 800b06c - } - if(CONN.connControl == CMD_FORCE_UNLOCK){ - 800aee8: 4b5c ldr r3, [pc, #368] @ (800b05c ) - 800aeea: 781b ldrb r3, [r3, #0] - 800aeec: 2b03 cmp r3, #3 - 800aeee: f040 80a5 bne.w 800b03c - CONN_SetState(Unplugged); - 800aef2: 2001 movs r0, #1 - 800aef4: f000 f8ba bl 800b06c - } - // if CHARGING_NOT_ALLOWED — stay here - }else{ - CONN_SetState(Unplugged); - } - break; - 800aef8: e0a0 b.n 800b03c - CONN_SetState(Unplugged); - 800aefa: 2001 movs r0, #1 - 800aefc: f000 f8b6 bl 800b06c - break; - 800af00: e09c b.n 800b03c - - case Preparing: // charging, locked - GBT_Lock(1); - 800af02: 2001 movs r0, #1 - 800af04: f000 ffd8 bl 800beb8 - - if(GBT_State == GBT_COMPLETE){ - 800af08: 4b55 ldr r3, [pc, #340] @ (800b060 ) - 800af0a: 781b ldrb r3, [r3, #0] - 800af0c: 2b22 cmp r3, #34 @ 0x22 - 800af0e: d11a bne.n 800af46 - if(GBT_StopSource == GBT_STOP_EVSE){ - 800af10: 4b54 ldr r3, [pc, #336] @ (800b064 ) - 800af12: 781b ldrb r3, [r3, #0] - 800af14: 2b00 cmp r3, #0 - 800af16: d103 bne.n 800af20 - CONN_SetState(FinishedEVSE); - 800af18: 200b movs r0, #11 - 800af1a: f000 f8a7 bl 800b06c - 800af1e: e012 b.n 800af46 - }else if(GBT_StopSource == GBT_STOP_EV){ - 800af20: 4b50 ldr r3, [pc, #320] @ (800b064 ) - 800af22: 781b ldrb r3, [r3, #0] - 800af24: 2b01 cmp r3, #1 - 800af26: d103 bne.n 800af30 - CONN_SetState(FinishedEV); - 800af28: 200c movs r0, #12 - 800af2a: f000 f89f bl 800b06c - 800af2e: e00a b.n 800af46 - }else if(GBT_StopSource == GBT_STOP_OCPP){ - 800af30: 4b4c ldr r3, [pc, #304] @ (800b064 ) - 800af32: 781b ldrb r3, [r3, #0] - 800af34: 2b02 cmp r3, #2 - 800af36: d103 bne.n 800af40 - CONN_SetState(Finished); - 800af38: 200a movs r0, #10 - 800af3a: f000 f897 bl 800b06c - 800af3e: e002 b.n 800af46 - }else{ - CONN_SetState(FinishedEVSE); - 800af40: 200b movs r0, #11 - 800af42: f000 f893 bl 800b06c - } - } - if(GBT_State == GBT_S10_CHARGING){ - 800af46: 4b46 ldr r3, [pc, #280] @ (800b060 ) - 800af48: 781b ldrb r3, [r3, #0] - 800af4a: 2b1e cmp r3, #30 - 800af4c: d178 bne.n 800b040 - CONN_SetState(Charging); - 800af4e: 2008 movs r0, #8 - 800af50: f000 f88c bl 800b06c - } - break; - 800af54: e074 b.n 800b040 - case Charging: // charging, locked - GBT_Lock(1); - 800af56: 2001 movs r0, #1 - 800af58: f000 ffae bl 800beb8 - - if(GBT_State == GBT_COMPLETE){ - 800af5c: 4b40 ldr r3, [pc, #256] @ (800b060 ) - 800af5e: 781b ldrb r3, [r3, #0] - 800af60: 2b22 cmp r3, #34 @ 0x22 - 800af62: d16f bne.n 800b044 - if(GBT_StopSource == GBT_STOP_EVSE){ - 800af64: 4b3f ldr r3, [pc, #252] @ (800b064 ) - 800af66: 781b ldrb r3, [r3, #0] - 800af68: 2b00 cmp r3, #0 - 800af6a: d103 bne.n 800af74 - CONN_SetState(FinishedEVSE); - 800af6c: 200b movs r0, #11 - 800af6e: f000 f87d bl 800b06c - CONN_SetState(Finished); - }else{ - CONN_SetState(FinishedEVSE); - } - } - break; - 800af72: e067 b.n 800b044 - }else if(GBT_StopSource == GBT_STOP_EV){ - 800af74: 4b3b ldr r3, [pc, #236] @ (800b064 ) - 800af76: 781b ldrb r3, [r3, #0] - 800af78: 2b01 cmp r3, #1 - 800af7a: d103 bne.n 800af84 - CONN_SetState(FinishedEV); - 800af7c: 200c movs r0, #12 - 800af7e: f000 f875 bl 800b06c - break; - 800af82: e05f b.n 800b044 - }else if(GBT_StopSource == GBT_STOP_OCPP){ - 800af84: 4b37 ldr r3, [pc, #220] @ (800b064 ) - 800af86: 781b ldrb r3, [r3, #0] - 800af88: 2b02 cmp r3, #2 - 800af8a: d103 bne.n 800af94 - CONN_SetState(Finished); - 800af8c: 200a movs r0, #10 - 800af8e: f000 f86d bl 800b06c - break; - 800af92: e057 b.n 800b044 - CONN_SetState(FinishedEVSE); - 800af94: 200b movs r0, #11 - 800af96: f000 f869 bl 800b06c - break; - 800af9a: e053 b.n 800b044 - - case FinishedEV: // charging completed by EV, waiting to transaction stop - GBT_Lock(0); - 800af9c: 2000 movs r0, #0 - 800af9e: f000 ff8b bl 800beb8 - CONN_SetState(Finished); - 800afa2: 200a movs r0, #10 - 800afa4: f000 f862 bl 800b06c - break; - 800afa8: e04f b.n 800b04a - - case FinishedEVSE: // charging completed by EVSE, waiting to transaction stop - GBT_Lock(0); - 800afaa: 2000 movs r0, #0 - 800afac: f000 ff84 bl 800beb8 - CONN_SetState(Finished); - 800afb0: 200a movs r0, #10 - 800afb2: f000 f85b bl 800b06c - break; - 800afb6: e048 b.n 800b04a - - case Finished: // charging completed, waiting to disconnect, unlocked - GBT_Lock(0); - 800afb8: 2000 movs r0, #0 - 800afba: f000 ff7d bl 800beb8 - - //TODO Force unlock time limit - if(CONN.connControl == CMD_FORCE_UNLOCK) GBT_ForceLock(0); - 800afbe: 4b27 ldr r3, [pc, #156] @ (800b05c ) - 800afc0: 781b ldrb r3, [r3, #0] - 800afc2: 2b03 cmp r3, #3 - 800afc4: d102 bne.n 800afcc - 800afc6: 2000 movs r0, #0 - 800afc8: f000 ff42 bl 800be50 - - if(DELAYED_HOLD_MS(cc6v_hold_tick, CONN_CC_GetState()==GBT_CC_6V, 5000)){ - 800afcc: 2300 movs r3, #0 - 800afce: 71fb strb r3, [r7, #7] - 800afd0: f000 f928 bl 800b224 - 800afd4: 4603 mov r3, r0 - 800afd6: 2b02 cmp r3, #2 - 800afd8: d119 bne.n 800b00e - 800afda: 4b23 ldr r3, [pc, #140] @ (800b068 ) - 800afdc: 681b ldr r3, [r3, #0] - 800afde: 2b00 cmp r3, #0 - 800afe0: d105 bne.n 800afee - 800afe2: f003 fc7b bl 800e8dc - 800afe6: 4603 mov r3, r0 - 800afe8: 4a1f ldr r2, [pc, #124] @ (800b068 ) - 800afea: 6013 str r3, [r2, #0] - 800afec: e012 b.n 800b014 - 800afee: f003 fc75 bl 800e8dc - 800aff2: 4602 mov r2, r0 - 800aff4: 4b1c ldr r3, [pc, #112] @ (800b068 ) - 800aff6: 681b ldr r3, [r3, #0] - 800aff8: 1ad3 subs r3, r2, r3 - 800affa: f241 3287 movw r2, #4999 @ 0x1387 - 800affe: 4293 cmp r3, r2 - 800b000: d908 bls.n 800b014 - 800b002: 2301 movs r3, #1 - 800b004: 71fb strb r3, [r7, #7] - 800b006: 4b18 ldr r3, [pc, #96] @ (800b068 ) - 800b008: 2200 movs r2, #0 - 800b00a: 601a str r2, [r3, #0] - 800b00c: e002 b.n 800b014 - 800b00e: 4b16 ldr r3, [pc, #88] @ (800b068 ) - 800b010: 2200 movs r2, #0 - 800b012: 601a str r2, [r3, #0] - 800b014: 79fb ldrb r3, [r7, #7] - 800b016: 2b00 cmp r3, #0 - 800b018: d016 beq.n 800b048 - GBT_Lock(0); - 800b01a: 2000 movs r0, #0 - 800b01c: f000 ff4c bl 800beb8 - CONN_SetState(Unplugged); - 800b020: 2001 movs r0, #1 - 800b022: f000 f823 bl 800b06c - } - break; - 800b026: e00f b.n 800b048 - - default: - CONN_SetState(Unknown); - 800b028: 2000 movs r0, #0 - 800b02a: f000 f81f bl 800b06c - } - -} - 800b02e: e00c b.n 800b04a - break; - 800b030: bf00 nop - 800b032: e00a b.n 800b04a - break; - 800b034: bf00 nop - 800b036: e008 b.n 800b04a - break; - 800b038: bf00 nop - 800b03a: e006 b.n 800b04a - break; - 800b03c: bf00 nop - 800b03e: e004 b.n 800b04a - break; - 800b040: bf00 nop - 800b042: e002 b.n 800b04a - break; - 800b044: bf00 nop - 800b046: e000 b.n 800b04a - break; - 800b048: bf00 nop -} - 800b04a: bf00 nop - 800b04c: 3708 adds r7, #8 - 800b04e: 46bd mov sp, r7 - 800b050: bd80 pop {r7, pc} - 800b052: bf00 nop - 800b054: 200003d1 .word 0x200003d1 - 800b058: 20000f1e .word 0x20000f1e - 800b05c: 200002f8 .word 0x200002f8 - 800b060: 20000318 .word 0x20000318 - 800b064: 200003d0 .word 0x200003d0 - 800b068: 200003d4 .word 0x200003d4 - -0800b06c : -//external -//CONN_SetState(Disabled); - -void CONN_SetState(CONN_State_t state){ - 800b06c: b580 push {r7, lr} - 800b06e: b082 sub sp, #8 - 800b070: af00 add r7, sp, #0 - 800b072: 4603 mov r3, r0 - 800b074: 71fb strb r3, [r7, #7] - connectorState = state; - 800b076: 4a3d ldr r2, [pc, #244] @ (800b16c ) - 800b078: 79fb ldrb r3, [r7, #7] - 800b07a: 7013 strb r3, [r2, #0] - - if(connectorState == Unknown) log_printf(LOG_INFO, "Connector: Unknown\n"); - 800b07c: 4b3b ldr r3, [pc, #236] @ (800b16c ) - 800b07e: 781b ldrb r3, [r3, #0] - 800b080: 2b00 cmp r3, #0 - 800b082: d103 bne.n 800b08c - 800b084: 493a ldr r1, [pc, #232] @ (800b170 ) - 800b086: 2007 movs r0, #7 - 800b088: f000 fa6c bl 800b564 - if(connectorState == Unplugged) log_printf(LOG_INFO, "Connector: Unplugged\n"); - 800b08c: 4b37 ldr r3, [pc, #220] @ (800b16c ) - 800b08e: 781b ldrb r3, [r3, #0] - 800b090: 2b01 cmp r3, #1 - 800b092: d103 bne.n 800b09c - 800b094: 4937 ldr r1, [pc, #220] @ (800b174 ) - 800b096: 2007 movs r0, #7 - 800b098: f000 fa64 bl 800b564 - if(connectorState == Disabled) log_printf(LOG_INFO, "Connector: Disabled\n"); - 800b09c: 4b33 ldr r3, [pc, #204] @ (800b16c ) - 800b09e: 781b ldrb r3, [r3, #0] - 800b0a0: 2b02 cmp r3, #2 - 800b0a2: d103 bne.n 800b0ac - 800b0a4: 4934 ldr r1, [pc, #208] @ (800b178 ) - 800b0a6: 2007 movs r0, #7 - 800b0a8: f000 fa5c bl 800b564 - if(connectorState == Preparing) log_printf(LOG_INFO, "Connector: Preparing\n"); - 800b0ac: 4b2f ldr r3, [pc, #188] @ (800b16c ) - 800b0ae: 781b ldrb r3, [r3, #0] - 800b0b0: 2b03 cmp r3, #3 - 800b0b2: d103 bne.n 800b0bc - 800b0b4: 4931 ldr r1, [pc, #196] @ (800b17c ) - 800b0b6: 2007 movs r0, #7 - 800b0b8: f000 fa54 bl 800b564 - if(connectorState == AuthRequired) log_printf(LOG_INFO, "Connector: AuthRequired\n"); - 800b0bc: 4b2b ldr r3, [pc, #172] @ (800b16c ) - 800b0be: 781b ldrb r3, [r3, #0] - 800b0c0: 2b04 cmp r3, #4 - 800b0c2: d103 bne.n 800b0cc - 800b0c4: 492e ldr r1, [pc, #184] @ (800b180 ) - 800b0c6: 2007 movs r0, #7 - 800b0c8: f000 fa4c bl 800b564 - if(connectorState == WaitingForEnergy) log_printf(LOG_INFO, "Connector: WaitingForEnergy\n"); - 800b0cc: 4b27 ldr r3, [pc, #156] @ (800b16c ) - 800b0ce: 781b ldrb r3, [r3, #0] - 800b0d0: 2b05 cmp r3, #5 - 800b0d2: d103 bne.n 800b0dc - 800b0d4: 492b ldr r1, [pc, #172] @ (800b184 ) - 800b0d6: 2007 movs r0, #7 - 800b0d8: f000 fa44 bl 800b564 - if(connectorState == ChargingPausedEV) log_printf(LOG_INFO, "Connector: ChargingPausedEV\n"); - 800b0dc: 4b23 ldr r3, [pc, #140] @ (800b16c ) - 800b0de: 781b ldrb r3, [r3, #0] - 800b0e0: 2b06 cmp r3, #6 - 800b0e2: d103 bne.n 800b0ec - 800b0e4: 4928 ldr r1, [pc, #160] @ (800b188 ) - 800b0e6: 2007 movs r0, #7 - 800b0e8: f000 fa3c bl 800b564 - if(connectorState == ChargingPausedEVSE) log_printf(LOG_INFO, "Connector: ChargingPausedEVSE\n"); - 800b0ec: 4b1f ldr r3, [pc, #124] @ (800b16c ) - 800b0ee: 781b ldrb r3, [r3, #0] - 800b0f0: 2b07 cmp r3, #7 - 800b0f2: d103 bne.n 800b0fc - 800b0f4: 4925 ldr r1, [pc, #148] @ (800b18c ) - 800b0f6: 2007 movs r0, #7 - 800b0f8: f000 fa34 bl 800b564 - if(connectorState == Charging) log_printf(LOG_INFO, "Connector: Charging\n"); - 800b0fc: 4b1b ldr r3, [pc, #108] @ (800b16c ) - 800b0fe: 781b ldrb r3, [r3, #0] - 800b100: 2b08 cmp r3, #8 - 800b102: d103 bne.n 800b10c - 800b104: 4922 ldr r1, [pc, #136] @ (800b190 ) - 800b106: 2007 movs r0, #7 - 800b108: f000 fa2c bl 800b564 - if(connectorState == AuthTimeout) log_printf(LOG_INFO, "Connector: AuthTimeout\n"); - 800b10c: 4b17 ldr r3, [pc, #92] @ (800b16c ) - 800b10e: 781b ldrb r3, [r3, #0] - 800b110: 2b09 cmp r3, #9 - 800b112: d103 bne.n 800b11c - 800b114: 491f ldr r1, [pc, #124] @ (800b194 ) - 800b116: 2007 movs r0, #7 - 800b118: f000 fa24 bl 800b564 - if(connectorState == Finished) log_printf(LOG_INFO, "Connector: Finished\n"); - 800b11c: 4b13 ldr r3, [pc, #76] @ (800b16c ) - 800b11e: 781b ldrb r3, [r3, #0] - 800b120: 2b0a cmp r3, #10 - 800b122: d103 bne.n 800b12c - 800b124: 491c ldr r1, [pc, #112] @ (800b198 ) - 800b126: 2007 movs r0, #7 - 800b128: f000 fa1c bl 800b564 - if(connectorState == FinishedEVSE) log_printf(LOG_INFO, "Connector: FinishedEVSE\n"); - 800b12c: 4b0f ldr r3, [pc, #60] @ (800b16c ) - 800b12e: 781b ldrb r3, [r3, #0] - 800b130: 2b0b cmp r3, #11 - 800b132: d103 bne.n 800b13c - 800b134: 4919 ldr r1, [pc, #100] @ (800b19c ) - 800b136: 2007 movs r0, #7 - 800b138: f000 fa14 bl 800b564 - if(connectorState == FinishedEV) log_printf(LOG_INFO, "Connector: FinishedEV\n"); - 800b13c: 4b0b ldr r3, [pc, #44] @ (800b16c ) - 800b13e: 781b ldrb r3, [r3, #0] - 800b140: 2b0c cmp r3, #12 - 800b142: d103 bne.n 800b14c - 800b144: 4916 ldr r1, [pc, #88] @ (800b1a0 ) - 800b146: 2007 movs r0, #7 - 800b148: f000 fa0c bl 800b564 - if(connectorState == Replugging) log_printf(LOG_INFO, "Connector: Replugging\n"); - 800b14c: 4b07 ldr r3, [pc, #28] @ (800b16c ) - 800b14e: 781b ldrb r3, [r3, #0] - 800b150: 2b0d cmp r3, #13 - 800b152: d103 bne.n 800b15c - 800b154: 4913 ldr r1, [pc, #76] @ (800b1a4 ) - 800b156: 2007 movs r0, #7 - 800b158: f000 fa04 bl 800b564 - - CONN.connState = state; - 800b15c: 4a12 ldr r2, [pc, #72] @ (800b1a8 ) - 800b15e: 79fb ldrb r3, [r7, #7] - 800b160: 7053 strb r3, [r2, #1] -} - 800b162: bf00 nop - 800b164: 3708 adds r7, #8 - 800b166: 46bd mov sp, r7 - 800b168: bd80 pop {r7, pc} - 800b16a: bf00 nop - 800b16c: 200003d1 .word 0x200003d1 - 800b170: 08016a24 .word 0x08016a24 - 800b174: 08016a38 .word 0x08016a38 - 800b178: 08016a50 .word 0x08016a50 - 800b17c: 08016a68 .word 0x08016a68 - 800b180: 08016a80 .word 0x08016a80 - 800b184: 08016a9c .word 0x08016a9c - 800b188: 08016abc .word 0x08016abc - 800b18c: 08016adc .word 0x08016adc - 800b190: 08016afc .word 0x08016afc - 800b194: 08016b14 .word 0x08016b14 - 800b198: 08016b2c .word 0x08016b2c - 800b19c: 08016b44 .word 0x08016b44 - 800b1a0: 08016b60 .word 0x08016b60 - 800b1a4: 08016b78 .word 0x08016b78 - 800b1a8: 200002f8 .word 0x200002f8 - -0800b1ac : - -void CONN_CC_ReadStateFiltered() { - 800b1ac: b580 push {r7, lr} - 800b1ae: b082 sub sp, #8 - 800b1b0: af00 add r7, sp, #0 - static uint32_t last_change_time = 0; - static uint32_t last_check_time = 0; - static uint8_t prev_state = 0; - - if((HAL_GetTick()-last_check_time)<100) return; - 800b1b2: f003 fb93 bl 800e8dc - 800b1b6: 4602 mov r2, r0 - 800b1b8: 4b16 ldr r3, [pc, #88] @ (800b214 ) - 800b1ba: 681b ldr r3, [r3, #0] - 800b1bc: 1ad3 subs r3, r2, r3 - 800b1be: 2b63 cmp r3, #99 @ 0x63 - 800b1c0: d924 bls.n 800b20c - - last_check_time = HAL_GetTick(); - 800b1c2: f003 fb8b bl 800e8dc - 800b1c6: 4603 mov r3, r0 - 800b1c8: 4a12 ldr r2, [pc, #72] @ (800b214 ) - 800b1ca: 6013 str r3, [r2, #0] - - uint8_t new_state = CONN_CC_GetStateRaw(); - 800b1cc: f000 f834 bl 800b238 - 800b1d0: 4603 mov r3, r0 - 800b1d2: 71fb strb r3, [r7, #7] - - if (new_state != prev_state) { - 800b1d4: 4b10 ldr r3, [pc, #64] @ (800b218 ) - 800b1d6: 781b ldrb r3, [r3, #0] - 800b1d8: 79fa ldrb r2, [r7, #7] - 800b1da: 429a cmp r2, r3 - 800b1dc: d008 beq.n 800b1f0 - last_change_time = HAL_GetTick(); - 800b1de: f003 fb7d bl 800e8dc - 800b1e2: 4603 mov r3, r0 - 800b1e4: 4a0d ldr r2, [pc, #52] @ (800b21c ) - 800b1e6: 6013 str r3, [r2, #0] - prev_state = new_state; - 800b1e8: 4a0b ldr r2, [pc, #44] @ (800b218 ) - 800b1ea: 79fb ldrb r3, [r7, #7] - 800b1ec: 7013 strb r3, [r2, #0] - 800b1ee: e00e b.n 800b20e - } else if ((HAL_GetTick() - last_change_time) >= 300) { - 800b1f0: f003 fb74 bl 800e8dc - 800b1f4: 4602 mov r2, r0 - 800b1f6: 4b09 ldr r3, [pc, #36] @ (800b21c ) - 800b1f8: 681b ldr r3, [r3, #0] - 800b1fa: 1ad3 subs r3, r2, r3 - 800b1fc: f5b3 7f96 cmp.w r3, #300 @ 0x12c - 800b200: d305 bcc.n 800b20e - CC_STATE_FILTERED = prev_state; - 800b202: 4b05 ldr r3, [pc, #20] @ (800b218 ) - 800b204: 781a ldrb r2, [r3, #0] - 800b206: 4b06 ldr r3, [pc, #24] @ (800b220 ) - 800b208: 701a strb r2, [r3, #0] - 800b20a: e000 b.n 800b20e - if((HAL_GetTick()-last_check_time)<100) return; - 800b20c: bf00 nop - } -} - 800b20e: 3708 adds r7, #8 - 800b210: 46bd mov sp, r7 - 800b212: bd80 pop {r7, pc} - 800b214: 200003d8 .word 0x200003d8 - 800b218: 200003dc .word 0x200003dc - 800b21c: 200003e0 .word 0x200003e0 - 800b220: 200003d2 .word 0x200003d2 - -0800b224 : - -uint8_t CONN_CC_GetState(){ - 800b224: b480 push {r7} - 800b226: af00 add r7, sp, #0 - return CC_STATE_FILTERED; - 800b228: 4b02 ldr r3, [pc, #8] @ (800b234 ) - 800b22a: 781b ldrb r3, [r3, #0] -} - 800b22c: 4618 mov r0, r3 - 800b22e: 46bd mov sp, r7 - 800b230: bc80 pop {r7} - 800b232: 4770 bx lr - 800b234: 200003d2 .word 0x200003d2 - -0800b238 : -uint8_t CONN_CC_GetStateRaw(){ - 800b238: b580 push {r7, lr} - 800b23a: b082 sub sp, #8 - 800b23c: af00 add r7, sp, #0 - float volt = CONN_CC_GetAdc(); - 800b23e: f000 f851 bl 800b2e4 - 800b242: 6078 str r0, [r7, #4] -// if((volt<12.6f) && (volt>11.4f)) return GBT_CC_12V; -// if((volt<6.8f) && (volt>5.2f)) return GBT_CC_6V; -// if((volt<4.8f) && (volt>3.2f)) return GBT_CC_4V; -// if((volt<2.8f) && (volt>1.2f)) return GBT_CC_2V; - if((volt<13.0f) && (volt>11.0f)) return GBT_CC_12V; - 800b244: 4922 ldr r1, [pc, #136] @ (800b2d0 ) - 800b246: 6878 ldr r0, [r7, #4] - 800b248: f7fd ff86 bl 8009158 <__aeabi_fcmplt> - 800b24c: 4603 mov r3, r0 - 800b24e: 2b00 cmp r3, #0 - 800b250: d008 beq.n 800b264 - 800b252: 4920 ldr r1, [pc, #128] @ (800b2d4 ) - 800b254: 6878 ldr r0, [r7, #4] - 800b256: f7fd ff9d bl 8009194 <__aeabi_fcmpgt> - 800b25a: 4603 mov r3, r0 - 800b25c: 2b00 cmp r3, #0 - 800b25e: d001 beq.n 800b264 - 800b260: 2301 movs r3, #1 - 800b262: e031 b.n 800b2c8 - if((volt<7.2f) && (volt>4.8f)) return GBT_CC_6V; - 800b264: 491c ldr r1, [pc, #112] @ (800b2d8 ) - 800b266: 6878 ldr r0, [r7, #4] - 800b268: f7fd ff76 bl 8009158 <__aeabi_fcmplt> - 800b26c: 4603 mov r3, r0 - 800b26e: 2b00 cmp r3, #0 - 800b270: d008 beq.n 800b284 - 800b272: 491a ldr r1, [pc, #104] @ (800b2dc ) - 800b274: 6878 ldr r0, [r7, #4] - 800b276: f7fd ff8d bl 8009194 <__aeabi_fcmpgt> - 800b27a: 4603 mov r3, r0 - 800b27c: 2b00 cmp r3, #0 - 800b27e: d001 beq.n 800b284 - 800b280: 2302 movs r3, #2 - 800b282: e021 b.n 800b2c8 - if((volt<4.8f) && (volt>3.0f)) return GBT_CC_4V; - 800b284: 4915 ldr r1, [pc, #84] @ (800b2dc ) - 800b286: 6878 ldr r0, [r7, #4] - 800b288: f7fd ff66 bl 8009158 <__aeabi_fcmplt> - 800b28c: 4603 mov r3, r0 - 800b28e: 2b00 cmp r3, #0 - 800b290: d008 beq.n 800b2a4 - 800b292: 4913 ldr r1, [pc, #76] @ (800b2e0 ) - 800b294: 6878 ldr r0, [r7, #4] - 800b296: f7fd ff7d bl 8009194 <__aeabi_fcmpgt> - 800b29a: 4603 mov r3, r0 - 800b29c: 2b00 cmp r3, #0 - 800b29e: d001 beq.n 800b2a4 - 800b2a0: 2303 movs r3, #3 - 800b2a2: e011 b.n 800b2c8 - if((volt<3.0f) && (volt>1.0f)) return GBT_CC_2V; - 800b2a4: 490e ldr r1, [pc, #56] @ (800b2e0 ) - 800b2a6: 6878 ldr r0, [r7, #4] - 800b2a8: f7fd ff56 bl 8009158 <__aeabi_fcmplt> - 800b2ac: 4603 mov r3, r0 - 800b2ae: 2b00 cmp r3, #0 - 800b2b0: d009 beq.n 800b2c6 - 800b2b2: f04f 517e mov.w r1, #1065353216 @ 0x3f800000 - 800b2b6: 6878 ldr r0, [r7, #4] - 800b2b8: f7fd ff6c bl 8009194 <__aeabi_fcmpgt> - 800b2bc: 4603 mov r3, r0 - 800b2be: 2b00 cmp r3, #0 - 800b2c0: d001 beq.n 800b2c6 - 800b2c2: 2304 movs r3, #4 - 800b2c4: e000 b.n 800b2c8 - return GBT_CC_UNKNOWN; - 800b2c6: 2300 movs r3, #0 -} - 800b2c8: 4618 mov r0, r3 - 800b2ca: 3708 adds r7, #8 - 800b2cc: 46bd mov sp, r7 - 800b2ce: bd80 pop {r7, pc} - 800b2d0: 41500000 .word 0x41500000 - 800b2d4: 41300000 .word 0x41300000 - 800b2d8: 40e66666 .word 0x40e66666 - 800b2dc: 4099999a .word 0x4099999a - 800b2e0: 40400000 .word 0x40400000 - -0800b2e4 : - -float CONN_CC_GetAdc(){ - 800b2e4: b580 push {r7, lr} - 800b2e6: b082 sub sp, #8 - 800b2e8: af00 add r7, sp, #0 - //Vin*k= 1.09v - //12vin = 1353 ADC - - uint32_t adc; - float volt; - ADC_Select_Channel(ADC_CHANNEL_3); - 800b2ea: 2003 movs r0, #3 - 800b2ec: f7fe fb9c bl 8009a28 - HAL_ADC_Start(&hadc1); - 800b2f0: 480e ldr r0, [pc, #56] @ (800b32c ) - 800b2f2: f003 fbf9 bl 800eae8 - HAL_ADC_PollForConversion(&hadc1, 100); - 800b2f6: 2164 movs r1, #100 @ 0x64 - 800b2f8: 480c ldr r0, [pc, #48] @ (800b32c ) - 800b2fa: f003 fccf bl 800ec9c - adc = HAL_ADC_GetValue(&hadc1); - 800b2fe: 480b ldr r0, [pc, #44] @ (800b32c ) - 800b300: f003 fdd2 bl 800eea8 - 800b304: 6078 str r0, [r7, #4] - HAL_ADC_Stop(&hadc1); - 800b306: 4809 ldr r0, [pc, #36] @ (800b32c ) - 800b308: f003 fc9c bl 800ec44 - - volt = (float)adc/113.4f; - 800b30c: 6878 ldr r0, [r7, #4] - 800b30e: f7fd fd2d bl 8008d6c <__aeabi_ui2f> - 800b312: 4603 mov r3, r0 - 800b314: 4906 ldr r1, [pc, #24] @ (800b330 ) - 800b316: 4618 mov r0, r3 - 800b318: f7fd fe34 bl 8008f84 <__aeabi_fdiv> - 800b31c: 4603 mov r3, r0 - 800b31e: 603b str r3, [r7, #0] - - return volt; - 800b320: 683b ldr r3, [r7, #0] -} - 800b322: 4618 mov r0, r3 - 800b324: 3708 adds r7, #8 - 800b326: 46bd mov sp, r7 - 800b328: bd80 pop {r7, pc} - 800b32a: bf00 nop - 800b32c: 2000026c .word 0x2000026c - 800b330: 42e2cccd .word 0x42e2cccd - -0800b334 : - -CRC_HandleTypeDef hcrc; - -/* CRC init function */ -void MX_CRC_Init(void) -{ - 800b334: b580 push {r7, lr} - 800b336: af00 add r7, sp, #0 - /* USER CODE END CRC_Init 0 */ - - /* USER CODE BEGIN CRC_Init 1 */ - - /* USER CODE END CRC_Init 1 */ - hcrc.Instance = CRC; - 800b338: 4b06 ldr r3, [pc, #24] @ (800b354 ) - 800b33a: 4a07 ldr r2, [pc, #28] @ (800b358 ) - 800b33c: 601a str r2, [r3, #0] - if (HAL_CRC_Init(&hcrc) != HAL_OK) - 800b33e: 4805 ldr r0, [pc, #20] @ (800b354 ) - 800b340: f004 ffd9 bl 80102f6 - 800b344: 4603 mov r3, r0 - 800b346: 2b00 cmp r3, #0 - 800b348: d001 beq.n 800b34e - { - Error_Handler(); - 800b34a: f001 f84d bl 800c3e8 - } - /* USER CODE BEGIN CRC_Init 2 */ - - /* USER CODE END CRC_Init 2 */ - -} - 800b34e: bf00 nop - 800b350: bd80 pop {r7, pc} - 800b352: bf00 nop - 800b354: 200003e4 .word 0x200003e4 - 800b358: 40023000 .word 0x40023000 - -0800b35c : - -void HAL_CRC_MspInit(CRC_HandleTypeDef* crcHandle) -{ - 800b35c: b480 push {r7} - 800b35e: b085 sub sp, #20 - 800b360: af00 add r7, sp, #0 - 800b362: 6078 str r0, [r7, #4] - - if(crcHandle->Instance==CRC) - 800b364: 687b ldr r3, [r7, #4] - 800b366: 681b ldr r3, [r3, #0] - 800b368: 4a09 ldr r2, [pc, #36] @ (800b390 ) - 800b36a: 4293 cmp r3, r2 - 800b36c: d10b bne.n 800b386 - { - /* USER CODE BEGIN CRC_MspInit 0 */ - - /* USER CODE END CRC_MspInit 0 */ - /* CRC clock enable */ - __HAL_RCC_CRC_CLK_ENABLE(); - 800b36e: 4b09 ldr r3, [pc, #36] @ (800b394 ) - 800b370: 695b ldr r3, [r3, #20] - 800b372: 4a08 ldr r2, [pc, #32] @ (800b394 ) - 800b374: f043 0340 orr.w r3, r3, #64 @ 0x40 - 800b378: 6153 str r3, [r2, #20] - 800b37a: 4b06 ldr r3, [pc, #24] @ (800b394 ) - 800b37c: 695b ldr r3, [r3, #20] - 800b37e: f003 0340 and.w r3, r3, #64 @ 0x40 - 800b382: 60fb str r3, [r7, #12] - 800b384: 68fb ldr r3, [r7, #12] - /* USER CODE BEGIN CRC_MspInit 1 */ - - /* USER CODE END CRC_MspInit 1 */ - } -} - 800b386: bf00 nop - 800b388: 3714 adds r7, #20 - 800b38a: 46bd mov sp, r7 - 800b38c: bc80 pop {r7} - 800b38e: 4770 bx lr - 800b390: 40023000 .word 0x40023000 - 800b394: 40021000 .word 0x40021000 - -0800b398 <_write>: - - - -#if defined(__GNUC__) -int _write(int fd, char * ptr, int len) -{ - 800b398: b580 push {r7, lr} - 800b39a: b084 sub sp, #16 - 800b39c: af00 add r7, sp, #0 - 800b39e: 60f8 str r0, [r7, #12] - 800b3a0: 60b9 str r1, [r7, #8] - 800b3a2: 607a str r2, [r7, #4] - debug_buffer_add((const uint8_t*)ptr, len); - 800b3a4: 687b ldr r3, [r7, #4] - 800b3a6: b29b uxth r3, r3 - 800b3a8: 4619 mov r1, r3 - 800b3aa: 68b8 ldr r0, [r7, #8] - 800b3ac: f000 f806 bl 800b3bc - return len; - 800b3b0: 687b ldr r3, [r7, #4] -} - 800b3b2: 4618 mov r0, r3 - 800b3b4: 3710 adds r7, #16 - 800b3b6: 46bd mov sp, r7 - 800b3b8: bd80 pop {r7, pc} - ... - -0800b3bc : -#endif - -// Добавляет данные в кольцевой буфер -void debug_buffer_add(const uint8_t* data, uint16_t len) -{ - 800b3bc: b480 push {r7} - 800b3be: b085 sub sp, #20 - 800b3c0: af00 add r7, sp, #0 - 800b3c2: 6078 str r0, [r7, #4] - 800b3c4: 460b mov r3, r1 - 800b3c6: 807b strh r3, [r7, #2] - \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"); - 800b3c8: b672 cpsid i -} - 800b3ca: bf00 nop - __disable_irq(); - - for (uint16_t i = 0; i < len; i++) { - 800b3cc: 2300 movs r3, #0 - 800b3ce: 81fb strh r3, [r7, #14] - 800b3d0: e045 b.n 800b45e - // Если буфер полон, перезаписываем старые данные - if (debug_buffer.count >= DEBUG_BUFFER_SIZE) { - 800b3d2: 4b28 ldr r3, [pc, #160] @ (800b474 ) - 800b3d4: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b3d8: b29b uxth r3, r3 - 800b3da: f5b3 6f80 cmp.w r3, #1024 @ 0x400 - 800b3de: d318 bcc.n 800b412 - debug_buffer.read_index = (debug_buffer.read_index + 1) % DEBUG_BUFFER_SIZE; - 800b3e0: 4b24 ldr r3, [pc, #144] @ (800b474 ) - 800b3e2: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 - 800b3e6: b29b uxth r3, r3 - 800b3e8: 3301 adds r3, #1 - 800b3ea: 425a negs r2, r3 - 800b3ec: f3c3 0309 ubfx r3, r3, #0, #10 - 800b3f0: f3c2 0209 ubfx r2, r2, #0, #10 - 800b3f4: bf58 it pl - 800b3f6: 4253 negpl r3, r2 - 800b3f8: b29a uxth r2, r3 - 800b3fa: 4b1e ldr r3, [pc, #120] @ (800b474 ) - 800b3fc: f8a3 2402 strh.w r2, [r3, #1026] @ 0x402 - debug_buffer.count--; - 800b400: 4b1c ldr r3, [pc, #112] @ (800b474 ) - 800b402: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b406: b29b uxth r3, r3 - 800b408: 3b01 subs r3, #1 - 800b40a: b29a uxth r2, r3 - 800b40c: 4b19 ldr r3, [pc, #100] @ (800b474 ) - 800b40e: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 - } - - debug_buffer.buffer[debug_buffer.write_index] = data[i]; - 800b412: 89fb ldrh r3, [r7, #14] - 800b414: 687a ldr r2, [r7, #4] - 800b416: 4413 add r3, r2 - 800b418: 4a16 ldr r2, [pc, #88] @ (800b474 ) - 800b41a: f8b2 2400 ldrh.w r2, [r2, #1024] @ 0x400 - 800b41e: b292 uxth r2, r2 - 800b420: 7819 ldrb r1, [r3, #0] - 800b422: 4b14 ldr r3, [pc, #80] @ (800b474 ) - 800b424: 5499 strb r1, [r3, r2] - debug_buffer.write_index = (debug_buffer.write_index + 1) % DEBUG_BUFFER_SIZE; - 800b426: 4b13 ldr r3, [pc, #76] @ (800b474 ) - 800b428: f8b3 3400 ldrh.w r3, [r3, #1024] @ 0x400 - 800b42c: b29b uxth r3, r3 - 800b42e: 3301 adds r3, #1 - 800b430: 425a negs r2, r3 - 800b432: f3c3 0309 ubfx r3, r3, #0, #10 - 800b436: f3c2 0209 ubfx r2, r2, #0, #10 - 800b43a: bf58 it pl - 800b43c: 4253 negpl r3, r2 - 800b43e: b29a uxth r2, r3 - 800b440: 4b0c ldr r3, [pc, #48] @ (800b474 ) - 800b442: f8a3 2400 strh.w r2, [r3, #1024] @ 0x400 - debug_buffer.count++; - 800b446: 4b0b ldr r3, [pc, #44] @ (800b474 ) - 800b448: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b44c: b29b uxth r3, r3 - 800b44e: 3301 adds r3, #1 - 800b450: b29a uxth r2, r3 - 800b452: 4b08 ldr r3, [pc, #32] @ (800b474 ) - 800b454: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 - for (uint16_t i = 0; i < len; i++) { - 800b458: 89fb ldrh r3, [r7, #14] - 800b45a: 3301 adds r3, #1 - 800b45c: 81fb strh r3, [r7, #14] - 800b45e: 89fa ldrh r2, [r7, #14] - 800b460: 887b ldrh r3, [r7, #2] - 800b462: 429a cmp r2, r3 - 800b464: d3b5 bcc.n 800b3d2 - __ASM volatile ("cpsie i" : : : "memory"); - 800b466: b662 cpsie i -} - 800b468: bf00 nop - } - - __enable_irq(); -} - 800b46a: bf00 nop - 800b46c: 3714 adds r7, #20 - 800b46e: 46bd mov sp, r7 - 800b470: bc80 pop {r7} - 800b472: 4770 bx lr - 800b474: 200003ec .word 0x200003ec - -0800b478 : - -// Возвращает количество доступных данных в буфере -uint16_t debug_buffer_available(void) -{ - 800b478: b480 push {r7} - 800b47a: b083 sub sp, #12 - 800b47c: af00 add r7, sp, #0 - __ASM volatile ("cpsid i" : : : "memory"); - 800b47e: b672 cpsid i -} - 800b480: bf00 nop - __disable_irq(); - uint16_t count = debug_buffer.count; - 800b482: 4b06 ldr r3, [pc, #24] @ (800b49c ) - 800b484: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b488: 80fb strh r3, [r7, #6] - __ASM volatile ("cpsie i" : : : "memory"); - 800b48a: b662 cpsie i -} - 800b48c: bf00 nop - __enable_irq(); - return count; - 800b48e: 88fb ldrh r3, [r7, #6] -} - 800b490: 4618 mov r0, r3 - 800b492: 370c adds r7, #12 - 800b494: 46bd mov sp, r7 - 800b496: bc80 pop {r7} - 800b498: 4770 bx lr - 800b49a: bf00 nop - 800b49c: 200003ec .word 0x200003ec - -0800b4a0 : - -// Отправляет один пакет данных из буфера через SC_SendPacket (не более 250 байт) -void debug_buffer_send(void) -{ - 800b4a0: b580 push {r7, lr} - 800b4a2: b082 sub sp, #8 - 800b4a4: af00 add r7, sp, #0 - __ASM volatile ("cpsid i" : : : "memory"); - 800b4a6: b672 cpsid i -} - 800b4a8: bf00 nop - __disable_irq(); - - // Если буфер пуст, ничего не делаем - if (debug_buffer.count == 0) { - 800b4aa: 4b2d ldr r3, [pc, #180] @ (800b560 ) - 800b4ac: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b4b0: b29b uxth r3, r3 - 800b4b2: 2b00 cmp r3, #0 - 800b4b4: d102 bne.n 800b4bc - __ASM volatile ("cpsie i" : : : "memory"); - 800b4b6: b662 cpsie i -} - 800b4b8: bf00 nop - __enable_irq(); - return; - 800b4ba: e04e b.n 800b55a - } - - // Определяем сколько байт можно отправить (не более 250) - uint16_t bytes_to_send = debug_buffer.count; - 800b4bc: 4b28 ldr r3, [pc, #160] @ (800b560 ) - 800b4be: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b4c2: 80fb strh r3, [r7, #6] - if (bytes_to_send > DEBUG_BUFFER_MAX_COUNT) { - 800b4c4: 88fb ldrh r3, [r7, #6] - 800b4c6: 2b80 cmp r3, #128 @ 0x80 - 800b4c8: d901 bls.n 800b4ce - bytes_to_send = DEBUG_BUFFER_MAX_COUNT; - 800b4ca: 2380 movs r3, #128 @ 0x80 - 800b4cc: 80fb strh r3, [r7, #6] - } - - // Вычисляем сколько байт до конца буфера - uint16_t bytes_to_end = DEBUG_BUFFER_SIZE - debug_buffer.read_index; - 800b4ce: 4b24 ldr r3, [pc, #144] @ (800b560 ) - 800b4d0: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 - 800b4d4: b29b uxth r3, r3 - 800b4d6: f5c3 6380 rsb r3, r3, #1024 @ 0x400 - 800b4da: 80bb strh r3, [r7, #4] - - // Отправляем только непрерывный блок (до конца буфера или до bytes_to_send) - if (bytes_to_send > bytes_to_end) { - 800b4dc: 88fa ldrh r2, [r7, #6] - 800b4de: 88bb ldrh r3, [r7, #4] - 800b4e0: 429a cmp r2, r3 - 800b4e2: d901 bls.n 800b4e8 - bytes_to_send = bytes_to_end; - 800b4e4: 88bb ldrh r3, [r7, #4] - 800b4e6: 80fb strh r3, [r7, #6] - } - - // Отправляем данные напрямую из буфера - if(bytes_to_send == debug_buffer.count){ - 800b4e8: 4b1d ldr r3, [pc, #116] @ (800b560 ) - 800b4ea: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b4ee: b29b uxth r3, r3 - 800b4f0: 88fa ldrh r2, [r7, #6] - 800b4f2: 429a cmp r2, r3 - 800b4f4: d10c bne.n 800b510 - SC_SendPacket(&debug_buffer.buffer[debug_buffer.read_index], bytes_to_send, CMD_GET_LOG); - 800b4f6: 4b1a ldr r3, [pc, #104] @ (800b560 ) - 800b4f8: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 - 800b4fc: b29b uxth r3, r3 - 800b4fe: 461a mov r2, r3 - 800b500: 4b17 ldr r3, [pc, #92] @ (800b560 ) - 800b502: 4413 add r3, r2 - 800b504: 88f9 ldrh r1, [r7, #6] - 800b506: 2250 movs r2, #80 @ 0x50 - 800b508: 4618 mov r0, r3 - 800b50a: f002 f8d3 bl 800d6b4 - 800b50e: e00b b.n 800b528 - }else{ - SC_SendPacket(&debug_buffer.buffer[debug_buffer.read_index], bytes_to_send, CMD_GET_LOG_CONTINUE); - 800b510: 4b13 ldr r3, [pc, #76] @ (800b560 ) - 800b512: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 - 800b516: b29b uxth r3, r3 - 800b518: 461a mov r2, r3 - 800b51a: 4b11 ldr r3, [pc, #68] @ (800b560 ) - 800b51c: 4413 add r3, r2 - 800b51e: 88f9 ldrh r1, [r7, #6] - 800b520: 2251 movs r2, #81 @ 0x51 - 800b522: 4618 mov r0, r3 - 800b524: f002 f8c6 bl 800d6b4 - } - debug_buffer.read_index = (debug_buffer.read_index + bytes_to_send) % DEBUG_BUFFER_SIZE; - 800b528: 4b0d ldr r3, [pc, #52] @ (800b560 ) - 800b52a: f8b3 3402 ldrh.w r3, [r3, #1026] @ 0x402 - 800b52e: b29a uxth r2, r3 - 800b530: 88fb ldrh r3, [r7, #6] - 800b532: 4413 add r3, r2 - 800b534: b29b uxth r3, r3 - 800b536: f3c3 0309 ubfx r3, r3, #0, #10 - 800b53a: b29a uxth r2, r3 - 800b53c: 4b08 ldr r3, [pc, #32] @ (800b560 ) - 800b53e: f8a3 2402 strh.w r2, [r3, #1026] @ 0x402 - debug_buffer.count -= bytes_to_send; - 800b542: 4b07 ldr r3, [pc, #28] @ (800b560 ) - 800b544: f8b3 3404 ldrh.w r3, [r3, #1028] @ 0x404 - 800b548: b29a uxth r2, r3 - 800b54a: 88fb ldrh r3, [r7, #6] - 800b54c: 1ad3 subs r3, r2, r3 - 800b54e: b29a uxth r2, r3 - 800b550: 4b03 ldr r3, [pc, #12] @ (800b560 ) - 800b552: f8a3 2404 strh.w r2, [r3, #1028] @ 0x404 - __ASM volatile ("cpsie i" : : : "memory"); - 800b556: b662 cpsie i -} - 800b558: bf00 nop - - __enable_irq(); -} - 800b55a: 3708 adds r7, #8 - 800b55c: 46bd mov sp, r7 - 800b55e: bd80 pop {r7, pc} - 800b560: 200003ec .word 0x200003ec - -0800b564 : -#define LOG_BUFFER_SIZE 128 -uint8_t log_buffer[LOG_BUFFER_SIZE]; - -// Кастомный printf с приоритетом лога -int log_printf(LogLevel_t level, const char *format, ...) -{ - 800b564: b40e push {r1, r2, r3} - 800b566: b580 push {r7, lr} - 800b568: b085 sub sp, #20 - 800b56a: af00 add r7, sp, #0 - 800b56c: 4603 mov r3, r0 - 800b56e: 71fb strb r3, [r7, #7] - va_list args; - int result; - - // Добавляем приоритет первым байтом - log_buffer[0] = (uint8_t)level; - 800b570: 4a15 ldr r2, [pc, #84] @ (800b5c8 ) - 800b572: 79fb ldrb r3, [r7, #7] - 800b574: 7013 strb r3, [r2, #0] - - // Форматируем строку начиная со второго байта - va_start(args, format); - 800b576: f107 0320 add.w r3, r7, #32 - 800b57a: 60bb str r3, [r7, #8] - result = vsnprintf((char*)&log_buffer[1], LOG_BUFFER_SIZE - 2, format, args); - 800b57c: 68bb ldr r3, [r7, #8] - 800b57e: 69fa ldr r2, [r7, #28] - 800b580: 217e movs r1, #126 @ 0x7e - 800b582: 4812 ldr r0, [pc, #72] @ (800b5cc ) - 800b584: f008 fdcc bl 8014120 - 800b588: 60f8 str r0, [r7, #12] - va_end(args); - - // Проверяем, не переполнился ли буфер - if (result < 0) { - 800b58a: 68fb ldr r3, [r7, #12] - 800b58c: 2b00 cmp r3, #0 - 800b58e: da01 bge.n 800b594 - return result; - 800b590: 68fb ldr r3, [r7, #12] - 800b592: e012 b.n 800b5ba - } - - // Ограничиваем размер, чтобы оставить место для нуль-терминатора - if (result >= (LOG_BUFFER_SIZE - 2)) { - 800b594: 68fb ldr r3, [r7, #12] - 800b596: 2b7d cmp r3, #125 @ 0x7d - 800b598: dd01 ble.n 800b59e - result = LOG_BUFFER_SIZE - 2; - 800b59a: 237e movs r3, #126 @ 0x7e - 800b59c: 60fb str r3, [r7, #12] - } - - // Добавляем нуль-терминатор в конец - log_buffer[result + 1] = '\0'; - 800b59e: 68fb ldr r3, [r7, #12] - 800b5a0: 3301 adds r3, #1 - 800b5a2: 4a09 ldr r2, [pc, #36] @ (800b5c8 ) - 800b5a4: 2100 movs r1, #0 - 800b5a6: 54d1 strb r1, [r2, r3] - - // Отправляем в буфер (приоритет + строка + нуль-терминатор) - debug_buffer_add(log_buffer, result + 2); - 800b5a8: 68fb ldr r3, [r7, #12] - 800b5aa: b29b uxth r3, r3 - 800b5ac: 3302 adds r3, #2 - 800b5ae: b29b uxth r3, r3 - 800b5b0: 4619 mov r1, r3 - 800b5b2: 4805 ldr r0, [pc, #20] @ (800b5c8 ) - 800b5b4: f7ff ff02 bl 800b3bc - - return result; - 800b5b8: 68fb ldr r3, [r7, #12] -} - 800b5ba: 4618 mov r0, r3 - 800b5bc: 3714 adds r7, #20 - 800b5be: 46bd mov sp, r7 - 800b5c0: e8bd 4080 ldmia.w sp!, {r7, lr} - 800b5c4: b003 add sp, #12 - 800b5c6: 4770 bx lr - 800b5c8: 200007f4 .word 0x200007f4 - 800b5cc: 200007f5 .word 0x200007f5 - -0800b5d0 : -// GB/T Time Synchronization Packet -#include "main.h" -#include "soft_rtc.h" -#include "charger_gbt.h" - -void GBT_SendCTS(){ - 800b5d0: b580 push {r7, lr} - 800b5d2: b082 sub sp, #8 - 800b5d4: af00 add r7, sp, #0 - - uint8_t data[7]; - unix_to_bcd(get_Current_Time(), data); - 800b5d6: f002 fb7d bl 800dcd4 - 800b5da: 4602 mov r2, r0 - 800b5dc: 463b mov r3, r7 - 800b5de: 4619 mov r1, r3 - 800b5e0: 4610 mov r0, r2 - 800b5e2: f002 fbb5 bl 800dd50 -// data[3] = 0x05; //days -// data[4] = 0x05; //month -// data[5] = 0x24; //years -// data[6] = 0x20; //centuries - - J_SendPacket(0x000700, 6, 7, data); - 800b5e6: 463b mov r3, r7 - 800b5e8: 2207 movs r2, #7 - 800b5ea: 2106 movs r1, #6 - 800b5ec: f44f 60e0 mov.w r0, #1792 @ 0x700 - 800b5f0: f000 fb60 bl 800bcb4 -} - 800b5f4: bf00 nop - 800b5f6: 3708 adds r7, #8 - 800b5f8: 46bd mov sp, r7 - 800b5fa: bd80 pop {r7, pc} - -0800b5fc : - -//GB/T Max Load Packet -void GBT_SendCML(){ - 800b5fc: b580 push {r7, lr} - 800b5fe: af00 add r7, sp, #0 -// data[4] = 0xC4; //-150A maximum output current -// data[5] = 0x09; // -// data[6] = 0x8C; //-2A minimum output current -// data[7] = 0x0F; // - - J_SendPacket(0x000800, 6, 8, (uint8_t*)&GBT_MaxLoad); - 800b600: 4b04 ldr r3, [pc, #16] @ (800b614 ) - 800b602: 2208 movs r2, #8 - 800b604: 2106 movs r1, #6 - 800b606: f44f 6000 mov.w r0, #2048 @ 0x800 - 800b60a: f000 fb53 bl 800bcb4 - -} - 800b60e: bf00 nop - 800b610: bd80 pop {r7, pc} - 800b612: bf00 nop - 800b614: 20000330 .word 0x20000330 - -0800b618 : - -//GB/T Version packet -void GBT_SendCHM(){ - 800b618: b580 push {r7, lr} - 800b61a: b082 sub sp, #8 - 800b61c: af00 add r7, sp, #0 - uint8_t data[3]; - data[0] = 0x01; - 800b61e: 2301 movs r3, #1 - 800b620: 713b strb r3, [r7, #4] - data[1] = 0x01; - 800b622: 2301 movs r3, #1 - 800b624: 717b strb r3, [r7, #5] - data[2] = 0x00; - 800b626: 2300 movs r3, #0 - 800b628: 71bb strb r3, [r7, #6] - J_SendPacket(0x2600, 6, 3, data); - 800b62a: 1d3b adds r3, r7, #4 - 800b62c: 2203 movs r2, #3 - 800b62e: 2106 movs r1, #6 - 800b630: f44f 5018 mov.w r0, #9728 @ 0x2600 - 800b634: f000 fb3e bl 800bcb4 -} - 800b638: bf00 nop - 800b63a: 3708 adds r7, #8 - 800b63c: 46bd mov sp, r7 - 800b63e: bd80 pop {r7, pc} - -0800b640 : - -//GB/T CRM Packet (state=BMS identified) -void GBT_SendCRM(uint8_t state){ - 800b640: b580 push {r7, lr} - 800b642: b082 sub sp, #8 - 800b644: af00 add r7, sp, #0 - 800b646: 4603 mov r3, r0 - 800b648: 71fb strb r3, [r7, #7] -// data[3] = 0x01; -// data[4] = 0x00; -// data[5] = 0x42; //TODO: location BFG -// data[6] = 0x46; -// data[7] = 0x47; - GBT_ChargerInfo.bmsIdentified = state; - 800b64a: 4a07 ldr r2, [pc, #28] @ (800b668 ) - 800b64c: 79fb ldrb r3, [r7, #7] - 800b64e: 7013 strb r3, [r2, #0] - J_SendPacket(0x100, 6, 8, (uint8_t *)&GBT_ChargerInfo); - 800b650: 4b05 ldr r3, [pc, #20] @ (800b668 ) - 800b652: 2208 movs r2, #8 - 800b654: 2106 movs r1, #6 - 800b656: f44f 7080 mov.w r0, #256 @ 0x100 - 800b65a: f000 fb2b bl 800bcb4 -} - 800b65e: bf00 nop - 800b660: 3708 adds r7, #8 - 800b662: 46bd mov sp, r7 - 800b664: bd80 pop {r7, pc} - 800b666: bf00 nop - 800b668: 20000338 .word 0x20000338 - -0800b66c : - -//GB/T CRO packet (Charger ready) -void GBT_SendCRO(uint8_t state){ - 800b66c: b580 push {r7, lr} - 800b66e: b084 sub sp, #16 - 800b670: af00 add r7, sp, #0 - 800b672: 4603 mov r3, r0 - 800b674: 71fb strb r3, [r7, #7] - uint8_t data[1]; - data[0] = state; - 800b676: 79fb ldrb r3, [r7, #7] - 800b678: 733b strb r3, [r7, #12] - J_SendPacket(0xA00, 4, 1, data); - 800b67a: f107 030c add.w r3, r7, #12 - 800b67e: 2201 movs r2, #1 - 800b680: 2104 movs r1, #4 - 800b682: f44f 6020 mov.w r0, #2560 @ 0xa00 - 800b686: f000 fb15 bl 800bcb4 -} - 800b68a: bf00 nop - 800b68c: 3710 adds r7, #16 - 800b68e: 46bd mov sp, r7 - 800b690: bd80 pop {r7, pc} - ... - -0800b694 : - -//GB/T CCS packet (Charger current status) -void GBT_SendCCS(){ - 800b694: b580 push {r7, lr} - 800b696: af00 add r7, sp, #0 -// data[3] = GBT_CurrPower.requestedCurrent>>8; //TODO: current -// data[4] = GBT_StateTick()/60000; //charging time (min) -// data[5] = 0; //TODO: 255 min+ -// data[6] = 0b11111101; //charging not permitted -// data[7] = 0xFF; - J_SendPacket(0x1200, 6, 8, (uint8_t *)&GBT_ChargerCurrentStatus); - 800b698: 4b04 ldr r3, [pc, #16] @ (800b6ac ) - 800b69a: 2208 movs r2, #8 - 800b69c: 2106 movs r1, #6 - 800b69e: f44f 5090 mov.w r0, #4608 @ 0x1200 - 800b6a2: f000 fb07 bl 800bcb4 -} - 800b6a6: bf00 nop - 800b6a8: bd80 pop {r7, pc} - 800b6aa: bf00 nop - 800b6ac: 200003ac .word 0x200003ac - -0800b6b0 : - -// GB/T Charging Stop packet -void GBT_SendCST(uint32_t Cause){ - 800b6b0: b580 push {r7, lr} - 800b6b2: b084 sub sp, #16 - 800b6b4: af00 add r7, sp, #0 - 800b6b6: 6078 str r0, [r7, #4] - uint8_t data[8]; - data[0] = (Cause>>24) & 0xFF; // Error - 800b6b8: 687b ldr r3, [r7, #4] - 800b6ba: 0e1b lsrs r3, r3, #24 - 800b6bc: b2db uxtb r3, r3 - 800b6be: 723b strb r3, [r7, #8] - data[1] = (Cause>>16) & 0xFF; // - 800b6c0: 687b ldr r3, [r7, #4] - 800b6c2: 0c1b lsrs r3, r3, #16 - 800b6c4: b2db uxtb r3, r3 - 800b6c6: 727b strb r3, [r7, #9] - data[2] = (Cause>>8) & 0xFF; // - 800b6c8: 687b ldr r3, [r7, #4] - 800b6ca: 0a1b lsrs r3, r3, #8 - 800b6cc: b2db uxtb r3, r3 - 800b6ce: 72bb strb r3, [r7, #10] - data[3] = Cause & 0xFF; // - 800b6d0: 687b ldr r3, [r7, #4] - 800b6d2: b2db uxtb r3, r3 - 800b6d4: 72fb strb r3, [r7, #11] - - J_SendPacket(0x1A00, 4, 4, data); - 800b6d6: f107 0308 add.w r3, r7, #8 - 800b6da: 2204 movs r2, #4 - 800b6dc: 2104 movs r1, #4 - 800b6de: f44f 50d0 mov.w r0, #6656 @ 0x1a00 - 800b6e2: f000 fae7 bl 800bcb4 -} - 800b6e6: bf00 nop - 800b6e8: 3710 adds r7, #16 - 800b6ea: 46bd mov sp, r7 - 800b6ec: bd80 pop {r7, pc} - ... - -0800b6f0 : - -void GBT_SendCSD(){ - 800b6f0: b580 push {r7, lr} - 800b6f2: af00 add r7, sp, #0 - GBT_ChargerStop.chargerNumber = GBT_ChargerInfo.chargerNumber; - 800b6f4: 4b0b ldr r3, [pc, #44] @ (800b724 ) - 800b6f6: f8d3 3001 ldr.w r3, [r3, #1] - 800b6fa: 4a0b ldr r2, [pc, #44] @ (800b728 ) - 800b6fc: 6053 str r3, [r2, #4] - GBT_ChargerStop.outputEnergy = 0; //TODO Energy meters - 800b6fe: 4b0a ldr r3, [pc, #40] @ (800b728 ) - 800b700: 2200 movs r2, #0 - 800b702: 709a strb r2, [r3, #2] - 800b704: 2200 movs r2, #0 - 800b706: 70da strb r2, [r3, #3] - GBT_ChargerStop.chargingTime = GBT_ChargerCurrentStatus.chargingTime; - 800b708: 4b08 ldr r3, [pc, #32] @ (800b72c ) - 800b70a: 889b ldrh r3, [r3, #4] - 800b70c: b29a uxth r2, r3 - 800b70e: 4b06 ldr r3, [pc, #24] @ (800b728 ) - 800b710: 801a strh r2, [r3, #0] - J_SendPacket(0x1D00, 6, 7, (uint8_t *)&GBT_ChargerStop); - 800b712: 4b05 ldr r3, [pc, #20] @ (800b728 ) - 800b714: 2207 movs r2, #7 - 800b716: 2106 movs r1, #6 - 800b718: f44f 50e8 mov.w r0, #7424 @ 0x1d00 - 800b71c: f000 faca bl 800bcb4 - -} - 800b720: bf00 nop - 800b722: bd80 pop {r7, pc} - 800b724: 20000338 .word 0x20000338 - 800b728: 200003b4 .word 0x200003b4 - 800b72c: 200003ac .word 0x200003ac - -0800b730 : - -void GBT_SendCEM(uint32_t ErrorCode){ - 800b730: b580 push {r7, lr} - 800b732: b084 sub sp, #16 - 800b734: af00 add r7, sp, #0 - 800b736: 6078 str r0, [r7, #4] - uint8_t data[8]; - data[0] = (ErrorCode>>24) & 0xFF; // Error - 800b738: 687b ldr r3, [r7, #4] - 800b73a: 0e1b lsrs r3, r3, #24 - 800b73c: b2db uxtb r3, r3 - 800b73e: 723b strb r3, [r7, #8] - data[1] = (ErrorCode>>16) & 0xFF; // - 800b740: 687b ldr r3, [r7, #4] - 800b742: 0c1b lsrs r3, r3, #16 - 800b744: b2db uxtb r3, r3 - 800b746: 727b strb r3, [r7, #9] - data[2] = (ErrorCode>>8) & 0xFF; // - 800b748: 687b ldr r3, [r7, #4] - 800b74a: 0a1b lsrs r3, r3, #8 - 800b74c: b2db uxtb r3, r3 - 800b74e: 72bb strb r3, [r7, #10] - data[3] = ErrorCode & 0xFF; // - 800b750: 687b ldr r3, [r7, #4] - 800b752: b2db uxtb r3, r3 - 800b754: 72fb strb r3, [r7, #11] - - J_SendPacket(0x1F00, 4, 4, data); - 800b756: f107 0308 add.w r3, r7, #8 - 800b75a: 2204 movs r2, #4 - 800b75c: 2104 movs r1, #4 - 800b75e: f44f 50f8 mov.w r0, #7936 @ 0x1f00 - 800b762: f000 faa7 bl 800bcb4 -} - 800b766: bf00 nop - 800b768: 3710 adds r7, #16 - 800b76a: 46bd mov sp, r7 - 800b76c: bd80 pop {r7, pc} - ... - -0800b770 : - * EXTI - PB8 ------> I2C1_SCL - PB9 ------> I2C1_SDA -*/ -void MX_GPIO_Init(void) -{ - 800b770: b580 push {r7, lr} - 800b772: b08a sub sp, #40 @ 0x28 - 800b774: af00 add r7, sp, #0 - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 800b776: f107 0314 add.w r3, r7, #20 - 800b77a: 2200 movs r2, #0 - 800b77c: 601a str r2, [r3, #0] - 800b77e: 605a str r2, [r3, #4] - 800b780: 609a str r2, [r3, #8] - 800b782: 60da str r2, [r3, #12] - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - 800b784: 4b7d ldr r3, [pc, #500] @ (800b97c ) - 800b786: 699b ldr r3, [r3, #24] - 800b788: 4a7c ldr r2, [pc, #496] @ (800b97c ) - 800b78a: f043 0310 orr.w r3, r3, #16 - 800b78e: 6193 str r3, [r2, #24] - 800b790: 4b7a ldr r3, [pc, #488] @ (800b97c ) - 800b792: 699b ldr r3, [r3, #24] - 800b794: f003 0310 and.w r3, r3, #16 - 800b798: 613b str r3, [r7, #16] - 800b79a: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOA_CLK_ENABLE(); - 800b79c: 4b77 ldr r3, [pc, #476] @ (800b97c ) - 800b79e: 699b ldr r3, [r3, #24] - 800b7a0: 4a76 ldr r2, [pc, #472] @ (800b97c ) - 800b7a2: f043 0304 orr.w r3, r3, #4 - 800b7a6: 6193 str r3, [r2, #24] - 800b7a8: 4b74 ldr r3, [pc, #464] @ (800b97c ) - 800b7aa: 699b ldr r3, [r3, #24] - 800b7ac: f003 0304 and.w r3, r3, #4 - 800b7b0: 60fb str r3, [r7, #12] - 800b7b2: 68fb ldr r3, [r7, #12] - __HAL_RCC_GPIOB_CLK_ENABLE(); - 800b7b4: 4b71 ldr r3, [pc, #452] @ (800b97c ) - 800b7b6: 699b ldr r3, [r3, #24] - 800b7b8: 4a70 ldr r2, [pc, #448] @ (800b97c ) - 800b7ba: f043 0308 orr.w r3, r3, #8 - 800b7be: 6193 str r3, [r2, #24] - 800b7c0: 4b6e ldr r3, [pc, #440] @ (800b97c ) - 800b7c2: 699b ldr r3, [r3, #24] - 800b7c4: f003 0308 and.w r3, r3, #8 - 800b7c8: 60bb str r3, [r7, #8] - 800b7ca: 68bb ldr r3, [r7, #8] - __HAL_RCC_GPIOE_CLK_ENABLE(); - 800b7cc: 4b6b ldr r3, [pc, #428] @ (800b97c ) - 800b7ce: 699b ldr r3, [r3, #24] - 800b7d0: 4a6a ldr r2, [pc, #424] @ (800b97c ) - 800b7d2: f043 0340 orr.w r3, r3, #64 @ 0x40 - 800b7d6: 6193 str r3, [r2, #24] - 800b7d8: 4b68 ldr r3, [pc, #416] @ (800b97c ) - 800b7da: 699b ldr r3, [r3, #24] - 800b7dc: f003 0340 and.w r3, r3, #64 @ 0x40 - 800b7e0: 607b str r3, [r7, #4] - 800b7e2: 687b ldr r3, [r7, #4] - __HAL_RCC_GPIOD_CLK_ENABLE(); - 800b7e4: 4b65 ldr r3, [pc, #404] @ (800b97c ) - 800b7e6: 699b ldr r3, [r3, #24] - 800b7e8: 4a64 ldr r2, [pc, #400] @ (800b97c ) - 800b7ea: f043 0320 orr.w r3, r3, #32 - 800b7ee: 6193 str r3, [r2, #24] - 800b7f0: 4b62 ldr r3, [pc, #392] @ (800b97c ) - 800b7f2: 699b ldr r3, [r3, #24] - 800b7f4: f003 0320 and.w r3, r3, #32 - 800b7f8: 603b str r3, [r7, #0] - 800b7fa: 683b ldr r3, [r7, #0] - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, LOCK_A_Pin|LOCK_B_Pin, GPIO_PIN_RESET); - 800b7fc: 2200 movs r2, #0 - 800b7fe: 2130 movs r1, #48 @ 0x30 - 800b800: 485f ldr r0, [pc, #380] @ (800b980 ) - 800b802: f005 f872 bl 80108ea - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOE, RELAY1_Pin|RELAY2_Pin|RELAY3_Pin|RELAY4_Pin - 800b806: 2200 movs r2, #0 - 800b808: f44f 51f8 mov.w r1, #7936 @ 0x1f00 - 800b80c: 485d ldr r0, [pc, #372] @ (800b984 ) - 800b80e: f005 f86c bl 80108ea - |RELAY5_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(RELAY_CC_GPIO_Port, RELAY_CC_Pin, GPIO_PIN_RESET); - 800b812: 2200 movs r2, #0 - 800b814: f44f 4100 mov.w r1, #32768 @ 0x8000 - 800b818: 485b ldr r0, [pc, #364] @ (800b988 ) - 800b81a: f005 f866 bl 80108ea - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOD, RELAY_DC_Pin|USART2_DIR_Pin, GPIO_PIN_RESET); - 800b81e: 2200 movs r2, #0 - 800b820: 2118 movs r1, #24 - 800b822: 485a ldr r0, [pc, #360] @ (800b98c ) - 800b824: f005 f861 bl 80108ea - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(EE_WP_GPIO_Port, EE_WP_Pin, GPIO_PIN_RESET); - 800b828: 2200 movs r2, #0 - 800b82a: 2180 movs r1, #128 @ 0x80 - 800b82c: 4858 ldr r0, [pc, #352] @ (800b990 ) - 800b82e: f005 f85c bl 80108ea - - /*Configure GPIO pin : IN_SW0_Pin */ - GPIO_InitStruct.Pin = IN_SW0_Pin; - 800b832: 2302 movs r3, #2 - 800b834: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800b836: 2300 movs r3, #0 - 800b838: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b83a: 2300 movs r3, #0 - 800b83c: 61fb str r3, [r7, #28] - HAL_GPIO_Init(IN_SW0_GPIO_Port, &GPIO_InitStruct); - 800b83e: f107 0314 add.w r3, r7, #20 - 800b842: 4619 mov r1, r3 - 800b844: 4850 ldr r0, [pc, #320] @ (800b988 ) - 800b846: f004 feb5 bl 80105b4 - - /*Configure GPIO pin : IN_SW1_Pin */ - GPIO_InitStruct.Pin = IN_SW1_Pin; - 800b84a: 2304 movs r3, #4 - 800b84c: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800b84e: 2300 movs r3, #0 - 800b850: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - 800b852: 2302 movs r3, #2 - 800b854: 61fb str r3, [r7, #28] - HAL_GPIO_Init(IN_SW1_GPIO_Port, &GPIO_InitStruct); - 800b856: f107 0314 add.w r3, r7, #20 - 800b85a: 4619 mov r1, r3 - 800b85c: 484a ldr r0, [pc, #296] @ (800b988 ) - 800b85e: f004 fea9 bl 80105b4 - - /*Configure GPIO pins : LOCK_A_Pin LOCK_B_Pin */ - GPIO_InitStruct.Pin = LOCK_A_Pin|LOCK_B_Pin; - 800b862: 2330 movs r3, #48 @ 0x30 - 800b864: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800b866: 2301 movs r3, #1 - 800b868: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b86a: 2300 movs r3, #0 - 800b86c: 61fb str r3, [r7, #28] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800b86e: 2302 movs r3, #2 - 800b870: 623b str r3, [r7, #32] - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 800b872: f107 0314 add.w r3, r7, #20 - 800b876: 4619 mov r1, r3 - 800b878: 4841 ldr r0, [pc, #260] @ (800b980 ) - 800b87a: f004 fe9b bl 80105b4 - - /*Configure GPIO pins : IN0_Pin AC_OK_Pin ISO_IN_Pin */ - GPIO_InitStruct.Pin = IN0_Pin|AC_OK_Pin|ISO_IN_Pin; - 800b87e: f244 0382 movw r3, #16514 @ 0x4082 - 800b882: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800b884: 2300 movs r3, #0 - 800b886: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b888: 2300 movs r3, #0 - 800b88a: 61fb str r3, [r7, #28] - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - 800b88c: f107 0314 add.w r3, r7, #20 - 800b890: 4619 mov r1, r3 - 800b892: 483c ldr r0, [pc, #240] @ (800b984 ) - 800b894: f004 fe8e bl 80105b4 - - /*Configure GPIO pins : RELAY1_Pin RELAY2_Pin RELAY3_Pin RELAY4_Pin - RELAY5_Pin */ - GPIO_InitStruct.Pin = RELAY1_Pin|RELAY2_Pin|RELAY3_Pin|RELAY4_Pin - 800b898: f44f 53f8 mov.w r3, #7936 @ 0x1f00 - 800b89c: 617b str r3, [r7, #20] - |RELAY5_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800b89e: 2301 movs r3, #1 - 800b8a0: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b8a2: 2300 movs r3, #0 - 800b8a4: 61fb str r3, [r7, #28] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800b8a6: 2302 movs r3, #2 - 800b8a8: 623b str r3, [r7, #32] - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - 800b8aa: f107 0314 add.w r3, r7, #20 - 800b8ae: 4619 mov r1, r3 - 800b8b0: 4834 ldr r0, [pc, #208] @ (800b984 ) - 800b8b2: f004 fe7f bl 80105b4 - - /*Configure GPIO pin : RELAY_CC_Pin */ - GPIO_InitStruct.Pin = RELAY_CC_Pin; - 800b8b6: f44f 4300 mov.w r3, #32768 @ 0x8000 - 800b8ba: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800b8bc: 2301 movs r3, #1 - 800b8be: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b8c0: 2300 movs r3, #0 - 800b8c2: 61fb str r3, [r7, #28] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800b8c4: 2302 movs r3, #2 - 800b8c6: 623b str r3, [r7, #32] - HAL_GPIO_Init(RELAY_CC_GPIO_Port, &GPIO_InitStruct); - 800b8c8: f107 0314 add.w r3, r7, #20 - 800b8cc: 4619 mov r1, r3 - 800b8ce: 482e ldr r0, [pc, #184] @ (800b988 ) - 800b8d0: f004 fe70 bl 80105b4 - - /*Configure GPIO pins : RELAY_DC_Pin USART2_DIR_Pin */ - GPIO_InitStruct.Pin = RELAY_DC_Pin|USART2_DIR_Pin; - 800b8d4: 2318 movs r3, #24 - 800b8d6: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800b8d8: 2301 movs r3, #1 - 800b8da: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b8dc: 2300 movs r3, #0 - 800b8de: 61fb str r3, [r7, #28] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800b8e0: 2302 movs r3, #2 - 800b8e2: 623b str r3, [r7, #32] - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 800b8e4: f107 0314 add.w r3, r7, #20 - 800b8e8: 4619 mov r1, r3 - 800b8ea: 4828 ldr r0, [pc, #160] @ (800b98c ) - 800b8ec: f004 fe62 bl 80105b4 - - /*Configure GPIO pin : IN_ESTOP_Pin */ - GPIO_InitStruct.Pin = IN_ESTOP_Pin; - 800b8f0: 2380 movs r3, #128 @ 0x80 - 800b8f2: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800b8f4: 2300 movs r3, #0 - 800b8f6: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b8f8: 2300 movs r3, #0 - 800b8fa: 61fb str r3, [r7, #28] - HAL_GPIO_Init(IN_ESTOP_GPIO_Port, &GPIO_InitStruct); - 800b8fc: f107 0314 add.w r3, r7, #20 - 800b900: 4619 mov r1, r3 - 800b902: 4822 ldr r0, [pc, #136] @ (800b98c ) - 800b904: f004 fe56 bl 80105b4 - - /*Configure GPIO pins : IN_FB2_Pin IN_FB1_Pin */ - GPIO_InitStruct.Pin = IN_FB2_Pin|IN_FB1_Pin; - 800b908: 2318 movs r3, #24 - 800b90a: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800b90c: 2300 movs r3, #0 - 800b90e: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b910: 2300 movs r3, #0 - 800b912: 61fb str r3, [r7, #28] - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 800b914: f107 0314 add.w r3, r7, #20 - 800b918: 4619 mov r1, r3 - 800b91a: 481d ldr r0, [pc, #116] @ (800b990 ) - 800b91c: f004 fe4a bl 80105b4 - - /*Configure GPIO pin : EE_WP_Pin */ - GPIO_InitStruct.Pin = EE_WP_Pin; - 800b920: 2380 movs r3, #128 @ 0x80 - 800b922: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - 800b924: 2301 movs r3, #1 - 800b926: 61bb str r3, [r7, #24] - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800b928: 2300 movs r3, #0 - 800b92a: 61fb str r3, [r7, #28] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800b92c: 2302 movs r3, #2 - 800b92e: 623b str r3, [r7, #32] - HAL_GPIO_Init(EE_WP_GPIO_Port, &GPIO_InitStruct); - 800b930: f107 0314 add.w r3, r7, #20 - 800b934: 4619 mov r1, r3 - 800b936: 4816 ldr r0, [pc, #88] @ (800b990 ) - 800b938: f004 fe3c bl 80105b4 - - /*Configure GPIO pins : PB8 PB9 */ - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; - 800b93c: f44f 7340 mov.w r3, #768 @ 0x300 - 800b940: 617b str r3, [r7, #20] - GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; - 800b942: 2312 movs r3, #18 - 800b944: 61bb str r3, [r7, #24] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800b946: 2303 movs r3, #3 - 800b948: 623b str r3, [r7, #32] - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - 800b94a: f107 0314 add.w r3, r7, #20 - 800b94e: 4619 mov r1, r3 - 800b950: 480f ldr r0, [pc, #60] @ (800b990 ) - 800b952: f004 fe2f bl 80105b4 - - /*Configure peripheral I/O remapping */ - __HAL_AFIO_REMAP_I2C1_ENABLE(); - 800b956: 4b0f ldr r3, [pc, #60] @ (800b994 ) - 800b958: 685b ldr r3, [r3, #4] - 800b95a: 627b str r3, [r7, #36] @ 0x24 - 800b95c: 6a7b ldr r3, [r7, #36] @ 0x24 - 800b95e: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 800b962: 627b str r3, [r7, #36] @ 0x24 - 800b964: 6a7b ldr r3, [r7, #36] @ 0x24 - 800b966: f043 0302 orr.w r3, r3, #2 - 800b96a: 627b str r3, [r7, #36] @ 0x24 - 800b96c: 4a09 ldr r2, [pc, #36] @ (800b994 ) - 800b96e: 6a7b ldr r3, [r7, #36] @ 0x24 - 800b970: 6053 str r3, [r2, #4] - -} - 800b972: bf00 nop - 800b974: 3728 adds r7, #40 @ 0x28 - 800b976: 46bd mov sp, r7 - 800b978: bd80 pop {r7, pc} - 800b97a: bf00 nop - 800b97c: 40021000 .word 0x40021000 - 800b980: 40011000 .word 0x40011000 - 800b984: 40011800 .word 0x40011800 - 800b988: 40010800 .word 0x40010800 - 800b98c: 40011400 .word 0x40011400 - 800b990: 40010c00 .word 0x40010c00 - 800b994: 40010000 .word 0x40010000 - -0800b998 : -extern GBT_BCL_t GBT_CurrPower; - -j_receive_t j_rx; - -void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) -{ - 800b998: b590 push {r4, r7, lr} - 800b99a: b0cd sub sp, #308 @ 0x134 - 800b99c: af40 add r7, sp, #256 @ 0x100 - 800b99e: 6078 str r0, [r7, #4] - CAN_RxHeaderTypeDef RxHeader; - uint8_t RxData[8] = {0,}; - 800b9a0: f107 030c add.w r3, r7, #12 - 800b9a4: 2200 movs r2, #0 - 800b9a6: 601a str r2, [r3, #0] - 800b9a8: 605a str r2, [r3, #4] - - if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) - 800b9aa: f107 030c add.w r3, r7, #12 - 800b9ae: f107 0214 add.w r2, r7, #20 - 800b9b2: 2100 movs r1, #0 - 800b9b4: 6878 ldr r0, [r7, #4] - 800b9b6: f004 f831 bl 800fa1c - 800b9ba: 4603 mov r3, r0 - 800b9bc: 2b00 cmp r3, #0 - 800b9be: f040 8153 bne.w 800bc68 - { - if((RxHeader.ExtId & 0x00FFFF) == ((J_ID_SE << 8) | J_ID_EV)){ // SA, DA match - 800b9c2: 69bb ldr r3, [r7, #24] - 800b9c4: b29b uxth r3, r3 - 800b9c6: f245 62f4 movw r2, #22260 @ 0x56f4 - 800b9ca: 4293 cmp r3, r2 - 800b9cc: f040 814c bne.w 800bc68 - switch ((RxHeader.ExtId>>8) & 0x00FF00){ - 800b9d0: 69bb ldr r3, [r7, #24] - 800b9d2: 0a1b lsrs r3, r3, #8 - 800b9d4: f403 437f and.w r3, r3, #65280 @ 0xff00 - 800b9d8: f5b3 4f6c cmp.w r3, #60416 @ 0xec00 - 800b9dc: d013 beq.n 800ba06 - 800b9de: f5b3 4f6c cmp.w r3, #60416 @ 0xec00 - 800b9e2: f200 810c bhi.w 800bbfe - 800b9e6: f5b3 4f6b cmp.w r3, #60160 @ 0xeb00 - 800b9ea: d057 beq.n 800ba9c - 800b9ec: f5b3 4f6b cmp.w r3, #60160 @ 0xeb00 - 800b9f0: f200 8105 bhi.w 800bbfe - 800b9f4: f5b3 5fc8 cmp.w r3, #6400 @ 0x1900 - 800b9f8: f000 80dd beq.w 800bbb6 - 800b9fc: f5b3 5ff0 cmp.w r3, #7680 @ 0x1e00 - 800ba00: f000 80b6 beq.w 800bb70 - 800ba04: e0fb b.n 800bbfe - - case 0xEC00: //PGN Connection Management Message - if(RxData[0] == 16){ //Request to Send - 800ba06: 7b3b ldrb r3, [r7, #12] - 800ba08: 2b10 cmp r3, #16 - 800ba0a: d13e bne.n 800ba8a - /* Set the RTS values */ - j_rx.size = RxData[1] | (RxData[2]<<8); - 800ba0c: 7b7b ldrb r3, [r7, #13] - 800ba0e: b21a sxth r2, r3 - 800ba10: 7bbb ldrb r3, [r7, #14] - 800ba12: b21b sxth r3, r3 - 800ba14: 021b lsls r3, r3, #8 - 800ba16: b21b sxth r3, r3 - 800ba18: 4313 orrs r3, r2 - 800ba1a: b21b sxth r3, r3 - 800ba1c: b29a uxth r2, r3 - 800ba1e: 4b94 ldr r3, [pc, #592] @ (800bc70 ) - 800ba20: f8a3 2104 strh.w r2, [r3, #260] @ 0x104 - j_rx.packet = 1; - 800ba24: 4b92 ldr r3, [pc, #584] @ (800bc70 ) - 800ba26: 2201 movs r2, #1 - 800ba28: f883 2107 strb.w r2, [r3, #263] @ 0x107 - j_rx.packets = RxData[3]; - 800ba2c: 7bfa ldrb r2, [r7, #15] - 800ba2e: 4b90 ldr r3, [pc, #576] @ (800bc70 ) - 800ba30: f883 2106 strb.w r2, [r3, #262] @ 0x106 - j_rx.step = 2; //TODO - 800ba34: 4b8e ldr r3, [pc, #568] @ (800bc70 ) - 800ba36: 2202 movs r2, #2 - 800ba38: f883 2108 strb.w r2, [r3, #264] @ 0x108 - j_rx.step_cts_remain = j_rx.step; - 800ba3c: 4b8c ldr r3, [pc, #560] @ (800bc70 ) - 800ba3e: f893 2108 ldrb.w r2, [r3, #264] @ 0x108 - 800ba42: 4b8b ldr r3, [pc, #556] @ (800bc70 ) - 800ba44: f883 2109 strb.w r2, [r3, #265] @ 0x109 - j_rx.PGN = (RxData[7] << 16) | (RxData[6] << 8) | RxData[5]; - 800ba48: 7cfb ldrb r3, [r7, #19] - 800ba4a: 041a lsls r2, r3, #16 - 800ba4c: 7cbb ldrb r3, [r7, #18] - 800ba4e: 021b lsls r3, r3, #8 - 800ba50: 4313 orrs r3, r2 - 800ba52: 7c7a ldrb r2, [r7, #17] - 800ba54: 4313 orrs r3, r2 - 800ba56: 461a mov r2, r3 - 800ba58: 4b85 ldr r3, [pc, #532] @ (800bc70 ) - 800ba5a: f8c3 2100 str.w r2, [r3, #256] @ 0x100 - if(j_rx.size<256) { //TODO: valid check - 800ba5e: 4b84 ldr r3, [pc, #528] @ (800bc70 ) - 800ba60: f8b3 3104 ldrh.w r3, [r3, #260] @ 0x104 - 800ba64: 2bff cmp r3, #255 @ 0xff - 800ba66: d810 bhi.n 800ba8a - J_SendCTS(j_rx); - 800ba68: 4c81 ldr r4, [pc, #516] @ (800bc70 ) - 800ba6a: 4668 mov r0, sp - 800ba6c: f104 0310 add.w r3, r4, #16 - 800ba70: f44f 7280 mov.w r2, #256 @ 0x100 - 800ba74: 4619 mov r1, r3 - 800ba76: f008 fc9f bl 80143b8 - 800ba7a: e894 000f ldmia.w r4, {r0, r1, r2, r3} - 800ba7e: f000 f941 bl 800bd04 - j_rx.state = 1; - 800ba82: 4b7b ldr r3, [pc, #492] @ (800bc70 ) - 800ba84: 2201 movs r2, #1 - 800ba86: f883 210a strb.w r2, [r3, #266] @ 0x10a - } - } - if(RxData[0] == 255){ //Connection Abort - 800ba8a: 7b3b ldrb r3, [r7, #12] - 800ba8c: 2bff cmp r3, #255 @ 0xff - 800ba8e: f040 80e6 bne.w 800bc5e - j_rx.state = 0; - 800ba92: 4b77 ldr r3, [pc, #476] @ (800bc70 ) - 800ba94: 2200 movs r2, #0 - 800ba96: f883 210a strb.w r2, [r3, #266] @ 0x10a - * 1CECF456 11 02 01 FF FF 00 02 00 - * 1CEB56F4 01 01 01 00 03 46 05 40 - * 1CEC56F4 FF FF FF FF FF 00 00 00 - */ - - break; - 800ba9a: e0e0 b.n 800bc5e - - case 0xEB00: //PGN Data Message - if(j_rx.state != 1) break; - 800ba9c: 4b74 ldr r3, [pc, #464] @ (800bc70 ) - 800ba9e: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800baa2: 2b01 cmp r3, #1 - 800baa4: f040 80dd bne.w 800bc62 - if((RxData[0]>0) && (RxData[0]<35)){ //Array limit check - 800baa8: 7b3b ldrb r3, [r7, #12] - 800baaa: 2b00 cmp r3, #0 - 800baac: f000 80db beq.w 800bc66 - 800bab0: 7b3b ldrb r3, [r7, #12] - 800bab2: 2b22 cmp r3, #34 @ 0x22 - 800bab4: f200 80d7 bhi.w 800bc66 - if(j_rx.packet == RxData[0]){ //step check - 800bab8: 4b6d ldr r3, [pc, #436] @ (800bc70 ) - 800baba: f893 2107 ldrb.w r2, [r3, #263] @ 0x107 - 800babe: 7b3b ldrb r3, [r7, #12] - 800bac0: 429a cmp r2, r3 - 800bac2: f040 80d0 bne.w 800bc66 - memcpy (&j_rx.data[(RxData[0]-1)*7], &RxData[1],7); - 800bac6: 7b3b ldrb r3, [r7, #12] - 800bac8: 1e5a subs r2, r3, #1 - 800baca: 4613 mov r3, r2 - 800bacc: 00db lsls r3, r3, #3 - 800bace: 1a9b subs r3, r3, r2 - 800bad0: 4a67 ldr r2, [pc, #412] @ (800bc70 ) - 800bad2: 1898 adds r0, r3, r2 - 800bad4: f107 030c add.w r3, r7, #12 - 800bad8: 3301 adds r3, #1 - 800bada: 2207 movs r2, #7 - 800badc: 4619 mov r1, r3 - 800bade: f008 fc6b bl 80143b8 - j_rx.packet++; - 800bae2: 4b63 ldr r3, [pc, #396] @ (800bc70 ) - 800bae4: f893 3107 ldrb.w r3, [r3, #263] @ 0x107 - 800bae8: 3301 adds r3, #1 - 800baea: b2da uxtb r2, r3 - 800baec: 4b60 ldr r3, [pc, #384] @ (800bc70 ) - 800baee: f883 2107 strb.w r2, [r3, #263] @ 0x107 - if(j_rx.packet > j_rx.packets){ - 800baf2: 4b5f ldr r3, [pc, #380] @ (800bc70 ) - 800baf4: f893 2107 ldrb.w r2, [r3, #263] @ 0x107 - 800baf8: 4b5d ldr r3, [pc, #372] @ (800bc70 ) - 800bafa: f893 3106 ldrb.w r3, [r3, #262] @ 0x106 - 800bafe: 429a cmp r2, r3 - 800bb00: d911 bls.n 800bb26 - //End of transmission - J_SendACK(j_rx); - 800bb02: 4c5b ldr r4, [pc, #364] @ (800bc70 ) - 800bb04: 4668 mov r0, sp - 800bb06: f104 0310 add.w r3, r4, #16 - 800bb0a: f44f 7280 mov.w r2, #256 @ 0x100 - 800bb0e: 4619 mov r1, r3 - 800bb10: f008 fc52 bl 80143b8 - 800bb14: e894 000f ldmia.w r4, {r0, r1, r2, r3} - 800bb18: f000 f93a bl 800bd90 - - j_rx.state = 2; - 800bb1c: 4b54 ldr r3, [pc, #336] @ (800bc70 ) - 800bb1e: 2202 movs r2, #2 - 800bb20: f883 210a strb.w r2, [r3, #266] @ 0x10a - j_rx.step_cts_remain = 2; - } - } - } - } - break; - 800bb24: e09f b.n 800bc66 - if(j_rx.step_cts_remain > 0) j_rx.step_cts_remain--; - 800bb26: 4b52 ldr r3, [pc, #328] @ (800bc70 ) - 800bb28: f893 3109 ldrb.w r3, [r3, #265] @ 0x109 - 800bb2c: 2b00 cmp r3, #0 - 800bb2e: d007 beq.n 800bb40 - 800bb30: 4b4f ldr r3, [pc, #316] @ (800bc70 ) - 800bb32: f893 3109 ldrb.w r3, [r3, #265] @ 0x109 - 800bb36: 3b01 subs r3, #1 - 800bb38: b2da uxtb r2, r3 - 800bb3a: 4b4d ldr r3, [pc, #308] @ (800bc70 ) - 800bb3c: f883 2109 strb.w r2, [r3, #265] @ 0x109 - if(j_rx.step_cts_remain == 0){ - 800bb40: 4b4b ldr r3, [pc, #300] @ (800bc70 ) - 800bb42: f893 3109 ldrb.w r3, [r3, #265] @ 0x109 - 800bb46: 2b00 cmp r3, #0 - 800bb48: f040 808d bne.w 800bc66 - J_SendCTS(j_rx); - 800bb4c: 4c48 ldr r4, [pc, #288] @ (800bc70 ) - 800bb4e: 4668 mov r0, sp - 800bb50: f104 0310 add.w r3, r4, #16 - 800bb54: f44f 7280 mov.w r2, #256 @ 0x100 - 800bb58: 4619 mov r1, r3 - 800bb5a: f008 fc2d bl 80143b8 - 800bb5e: e894 000f ldmia.w r4, {r0, r1, r2, r3} - 800bb62: f000 f8cf bl 800bd04 - j_rx.step_cts_remain = 2; - 800bb66: 4b42 ldr r3, [pc, #264] @ (800bc70 ) - 800bb68: 2202 movs r2, #2 - 800bb6a: f883 2109 strb.w r2, [r3, #265] @ 0x109 - break; - 800bb6e: e07a b.n 800bc66 - - case 0x1E00: //PGN BEM (ERROR) - //Error force stop - // --> Suspend EV - log_printf(LOG_ERR, "BEM Received, force stopping...\n"); - 800bb70: 4940 ldr r1, [pc, #256] @ (800bc74 ) - 800bb72: 2004 movs r0, #4 - 800bb74: f7ff fcf6 bl 800b564 - log_printf(LOG_ERR, "BEM: %02X %02X %02X %02X", RxData[0], RxData[1], RxData[2], RxData[3]); - 800bb78: 7b3b ldrb r3, [r7, #12] - 800bb7a: 4619 mov r1, r3 - 800bb7c: 7b7b ldrb r3, [r7, #13] - 800bb7e: 4618 mov r0, r3 - 800bb80: 7bbb ldrb r3, [r7, #14] - 800bb82: 7bfa ldrb r2, [r7, #15] - 800bb84: 9201 str r2, [sp, #4] - 800bb86: 9300 str r3, [sp, #0] - 800bb88: 4603 mov r3, r0 - 800bb8a: 460a mov r2, r1 - 800bb8c: 493a ldr r1, [pc, #232] @ (800bc78 ) - 800bb8e: 2004 movs r0, #4 - 800bb90: f7ff fce8 bl 800b564 - log_printf(LOG_ERR, " %02X %02X %02X %02X\n", RxData[4], RxData[5], RxData[6], RxData[7]); - 800bb94: 7c3b ldrb r3, [r7, #16] - 800bb96: 4619 mov r1, r3 - 800bb98: 7c7b ldrb r3, [r7, #17] - 800bb9a: 4618 mov r0, r3 - 800bb9c: 7cbb ldrb r3, [r7, #18] - 800bb9e: 7cfa ldrb r2, [r7, #19] - 800bba0: 9201 str r2, [sp, #4] - 800bba2: 9300 str r3, [sp, #0] - 800bba4: 4603 mov r3, r0 - 800bba6: 460a mov r2, r1 - 800bba8: 4934 ldr r1, [pc, #208] @ (800bc7c ) - 800bbaa: 2004 movs r0, #4 - 800bbac: f7ff fcda bl 800b564 - GBT_ForceStop(); - 800bbb0: f7ff f846 bl 800ac40 - break; - 800bbb4: e058 b.n 800bc68 - - case 0x1900: //PGN BST (STOP) - //Normal stop - - // --> Suspend EV - log_printf(LOG_INFO, "BST Received, stopping...\n"); - 800bbb6: 4932 ldr r1, [pc, #200] @ (800bc80 ) - 800bbb8: 2007 movs r0, #7 - 800bbba: f7ff fcd3 bl 800b564 - log_printf(LOG_INFO, "BST: %02X %02X %02X %02X", RxData[0], RxData[1], RxData[2], RxData[3]); - 800bbbe: 7b3b ldrb r3, [r7, #12] - 800bbc0: 4619 mov r1, r3 - 800bbc2: 7b7b ldrb r3, [r7, #13] - 800bbc4: 4618 mov r0, r3 - 800bbc6: 7bbb ldrb r3, [r7, #14] - 800bbc8: 7bfa ldrb r2, [r7, #15] - 800bbca: 9201 str r2, [sp, #4] - 800bbcc: 9300 str r3, [sp, #0] - 800bbce: 4603 mov r3, r0 - 800bbd0: 460a mov r2, r1 - 800bbd2: 492c ldr r1, [pc, #176] @ (800bc84 ) - 800bbd4: 2007 movs r0, #7 - 800bbd6: f7ff fcc5 bl 800b564 - log_printf(LOG_INFO, " %02X %02X %02X %02X\n", RxData[4], RxData[5], RxData[6], RxData[7]); - 800bbda: 7c3b ldrb r3, [r7, #16] - 800bbdc: 4619 mov r1, r3 - 800bbde: 7c7b ldrb r3, [r7, #17] - 800bbe0: 4618 mov r0, r3 - 800bbe2: 7cbb ldrb r3, [r7, #18] - 800bbe4: 7cfa ldrb r2, [r7, #19] - 800bbe6: 9201 str r2, [sp, #4] - 800bbe8: 9300 str r3, [sp, #0] - 800bbea: 4603 mov r3, r0 - 800bbec: 460a mov r2, r1 - 800bbee: 4923 ldr r1, [pc, #140] @ (800bc7c ) - 800bbf0: 2007 movs r0, #7 - 800bbf2: f7ff fcb7 bl 800b564 - GBT_StopEV(GBT_CST_BMS_ACTIVELY_SUSPENDS); - 800bbf6: 4824 ldr r0, [pc, #144] @ (800bc88 ) - 800bbf8: f7fe ffc4 bl 800ab84 - - break; - 800bbfc: e034 b.n 800bc68 - - default: - if(j_rx.state == 0){//TODO protections - 800bbfe: 4b1c ldr r3, [pc, #112] @ (800bc70 ) - 800bc00: f893 310a ldrb.w r3, [r3, #266] @ 0x10a - 800bc04: 2b00 cmp r3, #0 - 800bc06: d12f bne.n 800bc68 - //Short packet - j_rx.size = RxHeader.DLC; - 800bc08: 6a7b ldr r3, [r7, #36] @ 0x24 - 800bc0a: b29a uxth r2, r3 - 800bc0c: 4b18 ldr r3, [pc, #96] @ (800bc70 ) - 800bc0e: f8a3 2104 strh.w r2, [r3, #260] @ 0x104 - j_rx.packet = 1; - 800bc12: 4b17 ldr r3, [pc, #92] @ (800bc70 ) - 800bc14: 2201 movs r2, #1 - 800bc16: f883 2107 strb.w r2, [r3, #263] @ 0x107 - j_rx.packets = 1; - 800bc1a: 4b15 ldr r3, [pc, #84] @ (800bc70 ) - 800bc1c: 2201 movs r2, #1 - 800bc1e: f883 2106 strb.w r2, [r3, #262] @ 0x106 - j_rx.step = 1; - 800bc22: 4b13 ldr r3, [pc, #76] @ (800bc70 ) - 800bc24: 2201 movs r2, #1 - 800bc26: f883 2108 strb.w r2, [r3, #264] @ 0x108 - j_rx.step_cts_remain = 0; - 800bc2a: 4b11 ldr r3, [pc, #68] @ (800bc70 ) - 800bc2c: 2200 movs r2, #0 - 800bc2e: f883 2109 strb.w r2, [r3, #265] @ 0x109 - j_rx.PGN = (RxHeader.ExtId>>8) & 0x00FF00; - 800bc32: 69bb ldr r3, [r7, #24] - 800bc34: 0a1b lsrs r3, r3, #8 - 800bc36: f403 437f and.w r3, r3, #65280 @ 0xff00 - 800bc3a: 4a0d ldr r2, [pc, #52] @ (800bc70 ) - 800bc3c: f8c2 3100 str.w r3, [r2, #256] @ 0x100 - j_rx.state = 2; - 800bc40: 4b0b ldr r3, [pc, #44] @ (800bc70 ) - 800bc42: 2202 movs r2, #2 - 800bc44: f883 210a strb.w r2, [r3, #266] @ 0x10a - memcpy (j_rx.data, RxData, j_rx.size); - 800bc48: 4b09 ldr r3, [pc, #36] @ (800bc70 ) - 800bc4a: f8b3 3104 ldrh.w r3, [r3, #260] @ 0x104 - 800bc4e: 461a mov r2, r3 - 800bc50: f107 030c add.w r3, r7, #12 - 800bc54: 4619 mov r1, r3 - 800bc56: 4806 ldr r0, [pc, #24] @ (800bc70 ) - 800bc58: f008 fbae bl 80143b8 - } - } - } - } -} - 800bc5c: e004 b.n 800bc68 - break; - 800bc5e: bf00 nop - 800bc60: e002 b.n 800bc68 - if(j_rx.state != 1) break; - 800bc62: bf00 nop - 800bc64: e000 b.n 800bc68 - break; - 800bc66: bf00 nop -} - 800bc68: bf00 nop - 800bc6a: 3734 adds r7, #52 @ 0x34 - 800bc6c: 46bd mov sp, r7 - 800bc6e: bd90 pop {r4, r7, pc} - 800bc70: 20000874 .word 0x20000874 - 800bc74: 08016b90 .word 0x08016b90 - 800bc78: 08016bb4 .word 0x08016bb4 - 800bc7c: 08016bd0 .word 0x08016bd0 - 800bc80: 08016be8 .word 0x08016be8 - 800bc84: 08016c04 .word 0x08016c04 - 800bc88: 4000f0f0 .word 0x4000f0f0 - -0800bc8c : - -void GBT_CAN_ReInit(){ - 800bc8c: b580 push {r7, lr} - 800bc8e: af00 add r7, sp, #0 - HAL_CAN_Stop(&hcan1); - 800bc90: 4807 ldr r0, [pc, #28] @ (800bcb0 ) - 800bc92: f003 fd77 bl 800f784 - MX_CAN1_Init(); - 800bc96: f7fd fee3 bl 8009a60 - GBT_CAN_FilterInit(); - 800bc9a: f000 f8b3 bl 800be04 - HAL_CAN_Start(&hcan1); - 800bc9e: 4804 ldr r0, [pc, #16] @ (800bcb0 ) - 800bca0: f003 fd2c bl 800f6fc - HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); - 800bca4: 2102 movs r1, #2 - 800bca6: 4802 ldr r0, [pc, #8] @ (800bcb0 ) - 800bca8: f003 ffd9 bl 800fc5e -} - 800bcac: bf00 nop - 800bcae: bd80 pop {r7, pc} - 800bcb0: 200002a4 .word 0x200002a4 - -0800bcb4 : - -void J_SendPacket(uint32_t PGN, uint8_t pri, uint8_t DLC, uint8_t *data){ - 800bcb4: b580 push {r7, lr} - 800bcb6: b08c sub sp, #48 @ 0x30 - 800bcb8: af00 add r7, sp, #0 - 800bcba: 60f8 str r0, [r7, #12] - 800bcbc: 607b str r3, [r7, #4] - 800bcbe: 460b mov r3, r1 - 800bcc0: 72fb strb r3, [r7, #11] - 800bcc2: 4613 mov r3, r2 - 800bcc4: 72bb strb r3, [r7, #10] - - CAN_TxHeaderTypeDef tx_header; - uint32_t tx_mailbox; - - tx_header.ExtId = (pri << 26) | (PGN << 8) | (J_ID_EV << 8) | J_ID_SE; - 800bcc6: 7afb ldrb r3, [r7, #11] - 800bcc8: 069a lsls r2, r3, #26 - 800bcca: 68fb ldr r3, [r7, #12] - 800bccc: 021b lsls r3, r3, #8 - 800bcce: 4313 orrs r3, r2 - 800bcd0: f443 4374 orr.w r3, r3, #62464 @ 0xf400 - 800bcd4: f043 0356 orr.w r3, r3, #86 @ 0x56 - 800bcd8: 61fb str r3, [r7, #28] - tx_header.RTR = CAN_RTR_DATA; - 800bcda: 2300 movs r3, #0 - 800bcdc: 627b str r3, [r7, #36] @ 0x24 - tx_header.IDE = CAN_ID_EXT; - 800bcde: 2304 movs r3, #4 - 800bce0: 623b str r3, [r7, #32] - tx_header.DLC = DLC; - 800bce2: 7abb ldrb r3, [r7, #10] - 800bce4: 62bb str r3, [r7, #40] @ 0x28 - - //TODO buffer wait - HAL_CAN_AddTxMessage(&hcan1, &tx_header, data, &tx_mailbox); - 800bce6: f107 0314 add.w r3, r7, #20 - 800bcea: f107 0118 add.w r1, r7, #24 - 800bcee: 687a ldr r2, [r7, #4] - 800bcf0: 4803 ldr r0, [pc, #12] @ (800bd00 ) - 800bcf2: f003 fd90 bl 800f816 - //HAL_Delay(2); - -} - 800bcf6: bf00 nop - 800bcf8: 3730 adds r7, #48 @ 0x30 - 800bcfa: 46bd mov sp, r7 - 800bcfc: bd80 pop {r7, pc} - 800bcfe: bf00 nop - 800bd00: 200002a4 .word 0x200002a4 - -0800bd04 : -//void J_SendPacketLong(){ -// //TODO (no need) -//} - -// J1939 sequence Clear To Send packet -void J_SendCTS(j_receive_t rx){ - 800bd04: b084 sub sp, #16 - 800bd06: b580 push {r7, lr} - 800bd08: b082 sub sp, #8 - 800bd0a: af00 add r7, sp, #0 - 800bd0c: f107 0c10 add.w ip, r7, #16 - 800bd10: e88c 000f stmia.w ip, {r0, r1, r2, r3} - - //if(rx.packets <= rx.packet) return; TODO - uint8_t data[8]; - data[0] = 17; //CONTROL_BYTE_TP_CM_CTS - 800bd14: 2311 movs r3, #17 - 800bd16: 703b strb r3, [r7, #0] - data[1] = rx.step;//total_number_of_packages_transmitted - 800bd18: f897 3118 ldrb.w r3, [r7, #280] @ 0x118 - 800bd1c: 707b strb r3, [r7, #1] - if (rx.step > (rx.packets - rx.packet+1)) data[1] = rx.packets - rx.packet+1; - 800bd1e: f897 3118 ldrb.w r3, [r7, #280] @ 0x118 - 800bd22: 461a mov r2, r3 - 800bd24: f897 3116 ldrb.w r3, [r7, #278] @ 0x116 - 800bd28: 4619 mov r1, r3 - 800bd2a: f897 3117 ldrb.w r3, [r7, #279] @ 0x117 - 800bd2e: 1acb subs r3, r1, r3 - 800bd30: 3301 adds r3, #1 - 800bd32: 429a cmp r2, r3 - 800bd34: dd08 ble.n 800bd48 - 800bd36: f897 2116 ldrb.w r2, [r7, #278] @ 0x116 - 800bd3a: f897 3117 ldrb.w r3, [r7, #279] @ 0x117 - 800bd3e: 1ad3 subs r3, r2, r3 - 800bd40: b2db uxtb r3, r3 - 800bd42: 3301 adds r3, #1 - 800bd44: b2db uxtb r3, r3 - 800bd46: 707b strb r3, [r7, #1] - data[2] = rx.packet;//next_packet_number_transmitted - 800bd48: f897 3117 ldrb.w r3, [r7, #279] @ 0x117 - 800bd4c: 70bb strb r3, [r7, #2] - data[3] = 0xFF; /* Reserved */ - 800bd4e: 23ff movs r3, #255 @ 0xff - 800bd50: 70fb strb r3, [r7, #3] - data[4] = 0xFF; - 800bd52: 23ff movs r3, #255 @ 0xff - 800bd54: 713b strb r3, [r7, #4] - data[5] = rx.PGN; - 800bd56: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bd5a: b2db uxtb r3, r3 - 800bd5c: 717b strb r3, [r7, #5] - data[6] = rx.PGN >> 8; - 800bd5e: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bd62: 0a1b lsrs r3, r3, #8 - 800bd64: b2db uxtb r3, r3 - 800bd66: 71bb strb r3, [r7, #6] - data[7] = rx.PGN >> 16; - 800bd68: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bd6c: 0c1b lsrs r3, r3, #16 - 800bd6e: b2db uxtb r3, r3 - 800bd70: 71fb strb r3, [r7, #7] - - J_SendPacket(0x00EC00, 7, 8, data); - 800bd72: 463b mov r3, r7 - 800bd74: 2208 movs r2, #8 - 800bd76: 2107 movs r1, #7 - 800bd78: f44f 406c mov.w r0, #60416 @ 0xec00 - 800bd7c: f7ff ff9a bl 800bcb4 -} - 800bd80: bf00 nop - 800bd82: 3708 adds r7, #8 - 800bd84: 46bd mov sp, r7 - 800bd86: e8bd 4080 ldmia.w sp!, {r7, lr} - 800bd8a: b004 add sp, #16 - 800bd8c: 4770 bx lr - ... - -0800bd90 : - -// J1939 sequence ACK packet -void J_SendACK(j_receive_t rx){//uint32_t PGN, uint8_t step, uint8_t packet){ - 800bd90: b084 sub sp, #16 - 800bd92: b580 push {r7, lr} - 800bd94: b082 sub sp, #8 - 800bd96: af00 add r7, sp, #0 - 800bd98: f107 0c10 add.w ip, r7, #16 - 800bd9c: e88c 000f stmia.w ip, {r0, r1, r2, r3} - - uint8_t data[8]; - data[0] = 19; //CONTROL_BYTE_TP_CM_ACK - 800bda0: 2313 movs r3, #19 - 800bda2: 703b strb r3, [r7, #0] - data[1] = j_rx.size; - 800bda4: 4b16 ldr r3, [pc, #88] @ (800be00 ) - 800bda6: f8b3 3104 ldrh.w r3, [r3, #260] @ 0x104 - 800bdaa: b2db uxtb r3, r3 - 800bdac: 707b strb r3, [r7, #1] - data[2] = j_rx.size>>8; - 800bdae: 4b14 ldr r3, [pc, #80] @ (800be00 ) - 800bdb0: f8b3 3104 ldrh.w r3, [r3, #260] @ 0x104 - 800bdb4: 0a1b lsrs r3, r3, #8 - 800bdb6: b29b uxth r3, r3 - 800bdb8: b2db uxtb r3, r3 - 800bdba: 70bb strb r3, [r7, #2] - data[3] = j_rx.packets; - 800bdbc: 4b10 ldr r3, [pc, #64] @ (800be00 ) - 800bdbe: f893 3106 ldrb.w r3, [r3, #262] @ 0x106 - 800bdc2: 70fb strb r3, [r7, #3] - data[4] = 0xFF;//TODO - 800bdc4: 23ff movs r3, #255 @ 0xff - 800bdc6: 713b strb r3, [r7, #4] - data[5] = rx.PGN; - 800bdc8: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bdcc: b2db uxtb r3, r3 - 800bdce: 717b strb r3, [r7, #5] - data[6] = rx.PGN >> 8; - 800bdd0: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bdd4: 0a1b lsrs r3, r3, #8 - 800bdd6: b2db uxtb r3, r3 - 800bdd8: 71bb strb r3, [r7, #6] - data[7] = rx.PGN >> 16; - 800bdda: f8d7 3110 ldr.w r3, [r7, #272] @ 0x110 - 800bdde: 0c1b lsrs r3, r3, #16 - 800bde0: b2db uxtb r3, r3 - 800bde2: 71fb strb r3, [r7, #7] - - J_SendPacket(0x00EC00, 7, 8, data); - 800bde4: 463b mov r3, r7 - 800bde6: 2208 movs r2, #8 - 800bde8: 2107 movs r1, #7 - 800bdea: f44f 406c mov.w r0, #60416 @ 0xec00 - 800bdee: f7ff ff61 bl 800bcb4 -} - 800bdf2: bf00 nop - 800bdf4: 3708 adds r7, #8 - 800bdf6: 46bd mov sp, r7 - 800bdf8: e8bd 4080 ldmia.w sp!, {r7, lr} - 800bdfc: b004 add sp, #16 - 800bdfe: 4770 bx lr - 800be00: 20000874 .word 0x20000874 - -0800be04 : - -void GBT_CAN_FilterInit(){ - 800be04: b580 push {r7, lr} - 800be06: b08a sub sp, #40 @ 0x28 - 800be08: af00 add r7, sp, #0 - CAN_FilterTypeDef sFilterConfig; - - sFilterConfig.FilterBank = 0; - 800be0a: 2300 movs r3, #0 - 800be0c: 617b str r3, [r7, #20] - sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; - 800be0e: 2300 movs r3, #0 - 800be10: 61bb str r3, [r7, #24] - sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - 800be12: 2301 movs r3, #1 - 800be14: 61fb str r3, [r7, #28] - sFilterConfig.FilterIdHigh = 0x0000; - 800be16: 2300 movs r3, #0 - 800be18: 603b str r3, [r7, #0] - sFilterConfig.FilterIdLow = 0x0000; - 800be1a: 2300 movs r3, #0 - 800be1c: 607b str r3, [r7, #4] - sFilterConfig.FilterMaskIdHigh = 0x0000; - 800be1e: 2300 movs r3, #0 - 800be20: 60bb str r3, [r7, #8] - sFilterConfig.FilterMaskIdLow = 0x0000; - 800be22: 2300 movs r3, #0 - 800be24: 60fb str r3, [r7, #12] - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; - 800be26: 2300 movs r3, #0 - 800be28: 613b str r3, [r7, #16] - sFilterConfig.FilterActivation = ENABLE; - 800be2a: 2301 movs r3, #1 - 800be2c: 623b str r3, [r7, #32] - //sFilterConfig.SlaveStartFilterBank = 14; - if(HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig) != HAL_OK) - 800be2e: 463b mov r3, r7 - 800be30: 4619 mov r1, r3 - 800be32: 4806 ldr r0, [pc, #24] @ (800be4c ) - 800be34: f003 fb82 bl 800f53c - 800be38: 4603 mov r3, r0 - 800be3a: 2b00 cmp r3, #0 - 800be3c: d001 beq.n 800be42 - { - Error_Handler(); - 800be3e: f000 fad3 bl 800c3e8 - } - -} - 800be42: bf00 nop - 800be44: 3728 adds r7, #40 @ 0x28 - 800be46: 46bd mov sp, r7 - 800be48: bd80 pop {r7, pc} - 800be4a: bf00 nop - 800be4c: 200002a4 .word 0x200002a4 - -0800be50 : - .retry_count = 0, - .error_tick = 0 -}; - - -void GBT_ForceLock(uint8_t state){ - 800be50: b480 push {r7} - 800be52: b083 sub sp, #12 - 800be54: af00 add r7, sp, #0 - 800be56: 4603 mov r3, r0 - 800be58: 71fb strb r3, [r7, #7] - // Устанавливаем флаг для выполнения действия - GBT_LockState.action_requested = state ? 1 : 0; - 800be5a: 79fb ldrb r3, [r7, #7] - 800be5c: 2b00 cmp r3, #0 - 800be5e: bf14 ite ne - 800be60: 2301 movne r3, #1 - 800be62: 2300 moveq r3, #0 - 800be64: b2db uxtb r3, r3 - 800be66: 461a mov r2, r3 - 800be68: 4b04 ldr r3, [pc, #16] @ (800be7c ) - 800be6a: 709a strb r2, [r3, #2] - GBT_LockState.retry_count = 0; - 800be6c: 4b03 ldr r3, [pc, #12] @ (800be7c ) - 800be6e: 2200 movs r2, #0 - 800be70: 721a strb r2, [r3, #8] -} - 800be72: bf00 nop - 800be74: 370c adds r7, #12 - 800be76: 46bd mov sp, r7 - 800be78: bc80 pop {r7} - 800be7a: 4770 bx lr - 800be7c: 20000008 .word 0x20000008 - -0800be80 : - -uint8_t GBT_LockGetState(){ - 800be80: b580 push {r7, lr} - 800be82: af00 add r7, sp, #0 - //1 = locked - //0 = unlocked - if(LOCK_POLARITY){ - 800be84: 4b0a ldr r3, [pc, #40] @ (800beb0 ) - 800be86: 781b ldrb r3, [r3, #0] - 800be88: 2b00 cmp r3, #0 - 800be8a: d005 beq.n 800be98 - return HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); - 800be8c: 2180 movs r1, #128 @ 0x80 - 800be8e: 4809 ldr r0, [pc, #36] @ (800beb4 ) - 800be90: f004 fd14 bl 80108bc - 800be94: 4603 mov r3, r0 - 800be96: e009 b.n 800beac - }else{ - return !HAL_GPIO_ReadPin(IN0_GPIO_Port, IN0_Pin); - 800be98: 2180 movs r1, #128 @ 0x80 - 800be9a: 4806 ldr r0, [pc, #24] @ (800beb4 ) - 800be9c: f004 fd0e bl 80108bc - 800bea0: 4603 mov r3, r0 - 800bea2: 2b00 cmp r3, #0 - 800bea4: bf0c ite eq - 800bea6: 2301 moveq r3, #1 - 800bea8: 2300 movne r3, #0 - 800beaa: b2db uxtb r3, r3 - - } -} - 800beac: 4618 mov r0, r3 - 800beae: bd80 pop {r7, pc} - 800beb0: 20000004 .word 0x20000004 - 800beb4: 40011800 .word 0x40011800 - -0800beb8 : - -void GBT_Lock(uint8_t state){ - 800beb8: b480 push {r7} - 800beba: b083 sub sp, #12 - 800bebc: af00 add r7, sp, #0 - 800bebe: 4603 mov r3, r0 - 800bec0: 71fb strb r3, [r7, #7] - GBT_LockState.demand = state; - 800bec2: 4a04 ldr r2, [pc, #16] @ (800bed4 ) - 800bec4: 79fb ldrb r3, [r7, #7] - 800bec6: 7013 strb r3, [r2, #0] -} - 800bec8: bf00 nop - 800beca: 370c adds r7, #12 - 800becc: 46bd mov sp, r7 - 800bece: bc80 pop {r7} - 800bed0: 4770 bx lr - 800bed2: bf00 nop - 800bed4: 20000008 .word 0x20000008 - -0800bed8 : - tick = HAL_GetTick(); - - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, GBT_LockState.demand ? 1 : 0); -} - -void GBT_ManageLockMotor(){ - 800bed8: b580 push {r7, lr} - 800beda: b082 sub sp, #8 - 800bedc: af00 add r7, sp, #0 - static const uint8_t MAX_RETRIES = 5; - uint32_t current_tick = HAL_GetTick(); - 800bede: f002 fcfd bl 800e8dc - 800bee2: 6078 str r0, [r7, #4] - - // Проверяем таймаут сброса ошибки (до проверки error, чтобы можно было сбросить) - GBT_ResetErrorTimeout(); - 800bee4: f000 f904 bl 800c0f0 - - if (GBT_LockState.error) { - 800bee8: 4b72 ldr r3, [pc, #456] @ (800c0b4 ) - 800beea: 785b ldrb r3, [r3, #1] - 800beec: 2b00 cmp r3, #0 - 800beee: f040 80dd bne.w 800c0ac - return; - } - - // Проверяем, нужно ли выполнить действие - bool lock_is_open = GBT_LockGetState() == 0; - 800bef2: f7ff ffc5 bl 800be80 - 800bef6: 4603 mov r3, r0 - 800bef8: 2b00 cmp r3, #0 - 800befa: bf0c ite eq - 800befc: 2301 moveq r3, #1 - 800befe: 2300 movne r3, #0 - 800bf00: 70fb strb r3, [r7, #3] - bool lock_should_be_open = GBT_LockState.demand == 0; - 800bf02: 4b6c ldr r3, [pc, #432] @ (800c0b4 ) - 800bf04: 781b ldrb r3, [r3, #0] - 800bf06: 2b00 cmp r3, #0 - 800bf08: bf0c ite eq - 800bf0a: 2301 moveq r3, #1 - 800bf0c: 2300 movne r3, #0 - 800bf0e: 70bb strb r3, [r7, #2] - - // Если есть запрошенное действие или состояние не соответствует требуемому - if (GBT_LockState.action_requested != 255 || (lock_is_open != lock_should_be_open)) { - 800bf10: 4b68 ldr r3, [pc, #416] @ (800c0b4 ) - 800bf12: 789b ldrb r3, [r3, #2] - 800bf14: 2bff cmp r3, #255 @ 0xff - 800bf16: d104 bne.n 800bf22 - 800bf18: 78fa ldrb r2, [r7, #3] - 800bf1a: 78bb ldrb r3, [r7, #2] - 800bf1c: 429a cmp r2, r3 - 800bf1e: f000 80ad beq.w 800c07c - // Если действие еще не запрошено, запрашиваем его - if (GBT_LockState.action_requested == 255) { - 800bf22: 4b64 ldr r3, [pc, #400] @ (800c0b4 ) - 800bf24: 789b ldrb r3, [r3, #2] - 800bf26: 2bff cmp r3, #255 @ 0xff - 800bf28: d109 bne.n 800bf3e - GBT_LockState.action_requested = lock_should_be_open ? 0 : 1; - 800bf2a: 78bb ldrb r3, [r7, #2] - 800bf2c: f083 0301 eor.w r3, r3, #1 - 800bf30: b2db uxtb r3, r3 - 800bf32: 461a mov r2, r3 - 800bf34: 4b5f ldr r3, [pc, #380] @ (800c0b4 ) - 800bf36: 709a strb r2, [r3, #2] - GBT_LockState.retry_count = 0; - 800bf38: 4b5e ldr r3, [pc, #376] @ (800c0b4 ) - 800bf3a: 2200 movs r2, #0 - 800bf3c: 721a strb r2, [r3, #8] - } - - // Управление мотором через машину состояний - switch (GBT_LockState.motor_state) { - 800bf3e: 4b5d ldr r3, [pc, #372] @ (800c0b4 ) - 800bf40: 78db ldrb r3, [r3, #3] - 800bf42: 2b02 cmp r3, #2 - 800bf44: d04a beq.n 800bfdc - 800bf46: 2b02 cmp r3, #2 - 800bf48: f300 80b1 bgt.w 800c0ae - 800bf4c: 2b00 cmp r3, #0 - 800bf4e: d002 beq.n 800bf56 - 800bf50: 2b01 cmp r3, #1 - 800bf52: d02a beq.n 800bfaa - 800bf54: e0ab b.n 800c0ae - case 0: // idle - мотор выключен - // Определяем, какой пин нужно включить - if (LOCK_MOTOR_POLARITY) { - 800bf56: 4b58 ldr r3, [pc, #352] @ (800c0b8 ) - 800bf58: 781b ldrb r3, [r3, #0] - 800bf5a: 2b00 cmp r3, #0 - 800bf5c: d00f beq.n 800bf7e - if (GBT_LockState.action_requested == 1) { // LOCK - 800bf5e: 4b55 ldr r3, [pc, #340] @ (800c0b4 ) - 800bf60: 789b ldrb r3, [r3, #2] - 800bf62: 2b01 cmp r3, #1 - 800bf64: d105 bne.n 800bf72 - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 1); - 800bf66: 2201 movs r2, #1 - 800bf68: 2120 movs r1, #32 - 800bf6a: 4854 ldr r0, [pc, #336] @ (800c0bc ) - 800bf6c: f004 fcbd bl 80108ea - 800bf70: e014 b.n 800bf9c - } else { // UNLOCK - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 1); - 800bf72: 2201 movs r2, #1 - 800bf74: 2110 movs r1, #16 - 800bf76: 4851 ldr r0, [pc, #324] @ (800c0bc ) - 800bf78: f004 fcb7 bl 80108ea - 800bf7c: e00e b.n 800bf9c - } - } else { - if (GBT_LockState.action_requested == 1) { // LOCK - 800bf7e: 4b4d ldr r3, [pc, #308] @ (800c0b4 ) - 800bf80: 789b ldrb r3, [r3, #2] - 800bf82: 2b01 cmp r3, #1 - 800bf84: d105 bne.n 800bf92 - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 1); - 800bf86: 2201 movs r2, #1 - 800bf88: 2110 movs r1, #16 - 800bf8a: 484c ldr r0, [pc, #304] @ (800c0bc ) - 800bf8c: f004 fcad bl 80108ea - 800bf90: e004 b.n 800bf9c - } else { // UNLOCK - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 1); - 800bf92: 2201 movs r2, #1 - 800bf94: 2120 movs r1, #32 - 800bf96: 4849 ldr r0, [pc, #292] @ (800c0bc ) - 800bf98: f004 fca7 bl 80108ea - } - } - GBT_LockState.motor_state = 1; // motor_on - 800bf9c: 4b45 ldr r3, [pc, #276] @ (800c0b4 ) - 800bf9e: 2201 movs r2, #1 - 800bfa0: 70da strb r2, [r3, #3] - GBT_LockState.last_action_time = current_tick; - 800bfa2: 4a44 ldr r2, [pc, #272] @ (800c0b4 ) - 800bfa4: 687b ldr r3, [r7, #4] - 800bfa6: 6053 str r3, [r2, #4] - break; - 800bfa8: e067 b.n 800c07a - - case 1: // motor_on - мотор включен, ждем LOCK_DELAY - if (current_tick - GBT_LockState.last_action_time >= LOCK_DELAY) { - 800bfaa: 4b42 ldr r3, [pc, #264] @ (800c0b4 ) - 800bfac: 685b ldr r3, [r3, #4] - 800bfae: 687a ldr r2, [r7, #4] - 800bfb0: 1ad3 subs r3, r2, r3 - 800bfb2: 4a43 ldr r2, [pc, #268] @ (800c0c0 ) - 800bfb4: 8812 ldrh r2, [r2, #0] - 800bfb6: 4293 cmp r3, r2 - 800bfb8: d35c bcc.n 800c074 - // Выключаем оба пина - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 0); - 800bfba: 2200 movs r2, #0 - 800bfbc: 2110 movs r1, #16 - 800bfbe: 483f ldr r0, [pc, #252] @ (800c0bc ) - 800bfc0: f004 fc93 bl 80108ea - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 0); - 800bfc4: 2200 movs r2, #0 - 800bfc6: 2120 movs r1, #32 - 800bfc8: 483c ldr r0, [pc, #240] @ (800c0bc ) - 800bfca: f004 fc8e bl 80108ea - GBT_LockState.motor_state = 2; // waiting_off - 800bfce: 4b39 ldr r3, [pc, #228] @ (800c0b4 ) - 800bfd0: 2202 movs r2, #2 - 800bfd2: 70da strb r2, [r3, #3] - GBT_LockState.last_action_time = current_tick; - 800bfd4: 4a37 ldr r2, [pc, #220] @ (800c0b4 ) - 800bfd6: 687b ldr r3, [r7, #4] - 800bfd8: 6053 str r3, [r2, #4] - } - break; - 800bfda: e04b b.n 800c074 - - case 2: // waiting_off - ждем немного перед проверкой состояния - // Небольшая задержка перед проверкой состояния (например, 50мс) - if (current_tick - GBT_LockState.last_action_time >= 50) { - 800bfdc: 4b35 ldr r3, [pc, #212] @ (800c0b4 ) - 800bfde: 685b ldr r3, [r3, #4] - 800bfe0: 687a ldr r2, [r7, #4] - 800bfe2: 1ad3 subs r3, r2, r3 - 800bfe4: 2b31 cmp r3, #49 @ 0x31 - 800bfe6: d947 bls.n 800c078 - // Проверяем, достигнуто ли требуемое состояние - lock_is_open = GBT_LockGetState() == 0; - 800bfe8: f7ff ff4a bl 800be80 - 800bfec: 4603 mov r3, r0 - 800bfee: 2b00 cmp r3, #0 - 800bff0: bf0c ite eq - 800bff2: 2301 moveq r3, #1 - 800bff4: 2300 movne r3, #0 - 800bff6: 70fb strb r3, [r7, #3] - bool action_success = (lock_is_open == (GBT_LockState.action_requested == 0)); - 800bff8: 78fb ldrb r3, [r7, #3] - 800bffa: 4a2e ldr r2, [pc, #184] @ (800c0b4 ) - 800bffc: 7892 ldrb r2, [r2, #2] - 800bffe: 2a00 cmp r2, #0 - 800c000: bf0c ite eq - 800c002: 2201 moveq r2, #1 - 800c004: 2200 movne r2, #0 - 800c006: b2d2 uxtb r2, r2 - 800c008: 4293 cmp r3, r2 - 800c00a: bf0c ite eq - 800c00c: 2301 moveq r3, #1 - 800c00e: 2300 movne r3, #0 - 800c010: 707b strb r3, [r7, #1] - - if (action_success) { - 800c012: 787b ldrb r3, [r7, #1] - 800c014: 2b00 cmp r3, #0 - 800c016: d009 beq.n 800c02c - // Действие выполнено успешно - GBT_LockState.action_requested = 255; // сбрасываем флаг - 800c018: 4b26 ldr r3, [pc, #152] @ (800c0b4 ) - 800c01a: 22ff movs r2, #255 @ 0xff - 800c01c: 709a strb r2, [r3, #2] - GBT_LockState.motor_state = 0; // idle - 800c01e: 4b25 ldr r3, [pc, #148] @ (800c0b4 ) - 800c020: 2200 movs r2, #0 - 800c022: 70da strb r2, [r3, #3] - GBT_LockState.retry_count = 0; - 800c024: 4b23 ldr r3, [pc, #140] @ (800c0b4 ) - 800c026: 2200 movs r2, #0 - 800c028: 721a strb r2, [r3, #8] - // Повторяем попытку - GBT_LockState.motor_state = 0; // возвращаемся к началу - } - } - } - break; - 800c02a: e025 b.n 800c078 - GBT_LockState.retry_count++; - 800c02c: 4b21 ldr r3, [pc, #132] @ (800c0b4 ) - 800c02e: 7a1b ldrb r3, [r3, #8] - 800c030: 3301 adds r3, #1 - 800c032: b2da uxtb r2, r3 - 800c034: 4b1f ldr r3, [pc, #124] @ (800c0b4 ) - 800c036: 721a strb r2, [r3, #8] - if (GBT_LockState.retry_count >= MAX_RETRIES) { - 800c038: 4b1e ldr r3, [pc, #120] @ (800c0b4 ) - 800c03a: 7a1a ldrb r2, [r3, #8] - 800c03c: 4b21 ldr r3, [pc, #132] @ (800c0c4 ) - 800c03e: 781b ldrb r3, [r3, #0] - 800c040: 429a cmp r2, r3 - 800c042: d313 bcc.n 800c06c - GBT_LockState.error = 1; - 800c044: 4b1b ldr r3, [pc, #108] @ (800c0b4 ) - 800c046: 2201 movs r2, #1 - 800c048: 705a strb r2, [r3, #1] - GBT_LockState.error_tick = current_tick; // сохраняем время установки ошибки - 800c04a: 4a1a ldr r2, [pc, #104] @ (800c0b4 ) - 800c04c: 687b ldr r3, [r7, #4] - 800c04e: 60d3 str r3, [r2, #12] - GBT_LockState.action_requested = 0; // пытаемся разблокировать - 800c050: 4b18 ldr r3, [pc, #96] @ (800c0b4 ) - 800c052: 2200 movs r2, #0 - 800c054: 709a strb r2, [r3, #2] - GBT_LockState.motor_state = 0; - 800c056: 4b17 ldr r3, [pc, #92] @ (800c0b4 ) - 800c058: 2200 movs r2, #0 - 800c05a: 70da strb r2, [r3, #3] - GBT_LockState.retry_count = 0; - 800c05c: 4b15 ldr r3, [pc, #84] @ (800c0b4 ) - 800c05e: 2200 movs r2, #0 - 800c060: 721a strb r2, [r3, #8] - log_printf(LOG_ERR, "Lock error\n"); - 800c062: 4919 ldr r1, [pc, #100] @ (800c0c8 ) - 800c064: 2004 movs r0, #4 - 800c066: f7ff fa7d bl 800b564 - break; - 800c06a: e005 b.n 800c078 - GBT_LockState.motor_state = 0; // возвращаемся к началу - 800c06c: 4b11 ldr r3, [pc, #68] @ (800c0b4 ) - 800c06e: 2200 movs r2, #0 - 800c070: 70da strb r2, [r3, #3] - break; - 800c072: e001 b.n 800c078 - break; - 800c074: bf00 nop - 800c076: e01a b.n 800c0ae - break; - 800c078: bf00 nop - switch (GBT_LockState.motor_state) { - 800c07a: e018 b.n 800c0ae - } - } else { - // Состояние соответствует требуемому, сбрасываем флаги - if (GBT_LockState.motor_state != 0) { - 800c07c: 4b0d ldr r3, [pc, #52] @ (800c0b4 ) - 800c07e: 78db ldrb r3, [r3, #3] - 800c080: 2b00 cmp r3, #0 - 800c082: d00c beq.n 800c09e - HAL_GPIO_WritePin(LOCK_A_GPIO_Port, LOCK_A_Pin, 0); - 800c084: 2200 movs r2, #0 - 800c086: 2110 movs r1, #16 - 800c088: 480c ldr r0, [pc, #48] @ (800c0bc ) - 800c08a: f004 fc2e bl 80108ea - HAL_GPIO_WritePin(LOCK_B_GPIO_Port, LOCK_B_Pin, 0); - 800c08e: 2200 movs r2, #0 - 800c090: 2120 movs r1, #32 - 800c092: 480a ldr r0, [pc, #40] @ (800c0bc ) - 800c094: f004 fc29 bl 80108ea - GBT_LockState.motor_state = 0; - 800c098: 4b06 ldr r3, [pc, #24] @ (800c0b4 ) - 800c09a: 2200 movs r2, #0 - 800c09c: 70da strb r2, [r3, #3] - } - GBT_LockState.action_requested = 255; - 800c09e: 4b05 ldr r3, [pc, #20] @ (800c0b4 ) - 800c0a0: 22ff movs r2, #255 @ 0xff - 800c0a2: 709a strb r2, [r3, #2] - GBT_LockState.retry_count = 0; - 800c0a4: 4b03 ldr r3, [pc, #12] @ (800c0b4 ) - 800c0a6: 2200 movs r2, #0 - 800c0a8: 721a strb r2, [r3, #8] - 800c0aa: e000 b.n 800c0ae - return; - 800c0ac: bf00 nop - } -} - 800c0ae: 3708 adds r7, #8 - 800c0b0: 46bd mov sp, r7 - 800c0b2: bd80 pop {r7, pc} - 800c0b4: 20000008 .word 0x20000008 - 800c0b8: 20000005 .word 0x20000005 - 800c0bc: 40011000 .word 0x40011000 - 800c0c0: 20000006 .word 0x20000006 - 800c0c4: 08016d13 .word 0x08016d13 - 800c0c8: 08016c20 .word 0x08016c20 - -0800c0cc : - -void GBT_LockResetError(){ - 800c0cc: b580 push {r7, lr} - 800c0ce: af00 add r7, sp, #0 - GBT_LockState.error = 0; - 800c0d0: 4b05 ldr r3, [pc, #20] @ (800c0e8 ) - 800c0d2: 2200 movs r2, #0 - 800c0d4: 705a strb r2, [r3, #1] - GBT_LockState.error_tick = 0; - 800c0d6: 4b04 ldr r3, [pc, #16] @ (800c0e8 ) - 800c0d8: 2200 movs r2, #0 - 800c0da: 60da str r2, [r3, #12] - log_printf(LOG_INFO, "Lock error reset\n"); - 800c0dc: 4903 ldr r1, [pc, #12] @ (800c0ec ) - 800c0de: 2007 movs r0, #7 - 800c0e0: f7ff fa40 bl 800b564 -} - 800c0e4: bf00 nop - 800c0e6: bd80 pop {r7, pc} - 800c0e8: 20000008 .word 0x20000008 - 800c0ec: 08016c2c .word 0x08016c2c - -0800c0f0 : - -void GBT_ResetErrorTimeout(){ - 800c0f0: b580 push {r7, lr} - 800c0f2: af00 add r7, sp, #0 - static const uint32_t ERROR_TIMEOUT_MS = 300000; // 5 минут - - if (GBT_LockState.error && GBT_LockState.error_tick != 0) { - 800c0f4: 4b0a ldr r3, [pc, #40] @ (800c120 ) - 800c0f6: 785b ldrb r3, [r3, #1] - 800c0f8: 2b00 cmp r3, #0 - 800c0fa: d00f beq.n 800c11c - 800c0fc: 4b08 ldr r3, [pc, #32] @ (800c120 ) - 800c0fe: 68db ldr r3, [r3, #12] - 800c100: 2b00 cmp r3, #0 - 800c102: d00b beq.n 800c11c - - if ((HAL_GetTick()-GBT_LockState.error_tick) >= ERROR_TIMEOUT_MS) { - 800c104: f002 fbea bl 800e8dc - 800c108: 4602 mov r2, r0 - 800c10a: 4b05 ldr r3, [pc, #20] @ (800c120 ) - 800c10c: 68db ldr r3, [r3, #12] - 800c10e: 1ad2 subs r2, r2, r3 - 800c110: 4b04 ldr r3, [pc, #16] @ (800c124 ) - 800c112: 681b ldr r3, [r3, #0] - 800c114: 429a cmp r2, r3 - 800c116: d301 bcc.n 800c11c - // Прошло 5 минут, сбрасываем ошибку - GBT_LockResetError(); - 800c118: f7ff ffd8 bl 800c0cc - } - } -} - 800c11c: bf00 nop - 800c11e: bd80 pop {r7, pc} - 800c120: 20000008 .word 0x20000008 - 800c124: 08016d14 .word 0x08016d14 - -0800c128 : - * bootloader before starting this program. Unfortunately, function - * SystemInit() overwrites this change again. - * @return none. - */ -static void VectorBase_Config(void) -{ - 800c128: b480 push {r7} - 800c12a: af00 add r7, sp, #0 - * c-startup code. - */ - extern const unsigned long g_pfnVectors[]; - - /* Remap the vector table to where the vector table is located for this program. */ - SCB->VTOR = (unsigned long)&g_pfnVectors[0]; - 800c12c: 4b03 ldr r3, [pc, #12] @ (800c13c ) - 800c12e: 4a04 ldr r2, [pc, #16] @ (800c140 ) - 800c130: 609a str r2, [r3, #8] -} - 800c132: bf00 nop - 800c134: 46bd mov sp, r7 - 800c136: bc80 pop {r7} - 800c138: 4770 bx lr - 800c13a: bf00 nop - 800c13c: e000ed00 .word 0xe000ed00 - 800c140: 08008000 .word 0x08008000 - -0800c144 : - -uint8_t ED_TraceWarning(uint8_t flag, uint8_t id){ - 800c144: b480 push {r7} - 800c146: b085 sub sp, #20 - 800c148: af00 add r7, sp, #0 - 800c14a: 4603 mov r3, r0 - 800c14c: 460a mov r2, r1 - 800c14e: 71fb strb r3, [r7, #7] - 800c150: 4613 mov r3, r2 - 800c152: 71bb strb r3, [r7, #6] - static uint8_t memory[32]; - if(id > 31) return 0; - 800c154: 79bb ldrb r3, [r7, #6] - 800c156: 2b1f cmp r3, #31 - 800c158: d901 bls.n 800c15e - 800c15a: 2300 movs r3, #0 - 800c15c: e00e b.n 800c17c - uint8_t result = 0; - 800c15e: 2300 movs r3, #0 - 800c160: 73fb strb r3, [r7, #15] - if(memory[id] != flag){ - 800c162: 79bb ldrb r3, [r7, #6] - 800c164: 4a08 ldr r2, [pc, #32] @ (800c188 ) - 800c166: 5cd3 ldrb r3, [r2, r3] - 800c168: 79fa ldrb r2, [r7, #7] - 800c16a: 429a cmp r2, r3 - 800c16c: d001 beq.n 800c172 - result = 1; - 800c16e: 2301 movs r3, #1 - 800c170: 73fb strb r3, [r7, #15] - } - memory[id] = flag; - 800c172: 79bb ldrb r3, [r7, #6] - 800c174: 4904 ldr r1, [pc, #16] @ (800c188 ) - 800c176: 79fa ldrb r2, [r7, #7] - 800c178: 54ca strb r2, [r1, r3] - return result; - 800c17a: 7bfb ldrb r3, [r7, #15] -} - 800c17c: 4618 mov r0, r3 - 800c17e: 3714 adds r7, #20 - 800c180: 46bd mov sp, r7 - 800c182: bc80 pop {r7} - 800c184: 4770 bx lr - 800c186: bf00 nop - 800c188: 20000984 .word 0x20000984 - -0800c18c : - - -void ED_Delay(uint32_t Delay) -{ - 800c18c: b580 push {r7, lr} - 800c18e: b084 sub sp, #16 - 800c190: af00 add r7, sp, #0 - 800c192: 6078 str r0, [r7, #4] - uint32_t tickstart = HAL_GetTick(); - 800c194: f002 fba2 bl 800e8dc - 800c198: 60b8 str r0, [r7, #8] - uint32_t wait = Delay; - 800c19a: 687b ldr r3, [r7, #4] - 800c19c: 60fb str r3, [r7, #12] - - /* Add a freq to guarantee minimum wait */ - if (wait < HAL_MAX_DELAY) - 800c19e: 68fb ldr r3, [r7, #12] - 800c1a0: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 800c1a4: d012 beq.n 800c1cc - { - wait += (uint32_t)(uwTickFreq); - 800c1a6: 4b10 ldr r3, [pc, #64] @ (800c1e8 ) - 800c1a8: 781b ldrb r3, [r3, #0] - 800c1aa: 461a mov r2, r3 - 800c1ac: 68fb ldr r3, [r7, #12] - 800c1ae: 4413 add r3, r2 - 800c1b0: 60fb str r3, [r7, #12] - } - - while ((HAL_GetTick() - tickstart) < wait){ - 800c1b2: e00b b.n 800c1cc - CONN_CC_ReadStateFiltered(); - 800c1b4: f7fe fffa bl 800b1ac - GBT_ManageLockMotor(); - 800c1b8: f7ff fe8e bl 800bed8 - CONN_Task(); - 800c1bc: f7fe fe16 bl 800adec - GBT_ChargerTask(); - 800c1c0: f7fd fe36 bl 8009e30 - LED_Task(); - 800c1c4: f000 fff4 bl 800d1b0 - SC_Task(); - 800c1c8: f001 f908 bl 800d3dc - while ((HAL_GetTick() - tickstart) < wait){ - 800c1cc: f002 fb86 bl 800e8dc - 800c1d0: 4602 mov r2, r0 - 800c1d2: 68bb ldr r3, [r7, #8] - 800c1d4: 1ad3 subs r3, r2, r3 - 800c1d6: 68fa ldr r2, [r7, #12] - 800c1d8: 429a cmp r2, r3 - 800c1da: d8eb bhi.n 800c1b4 - // if(huart2.gState != HAL_UART_STATE_BUSY_TX) debug_buffer_send(); // TEST - } -} - 800c1dc: bf00 nop - 800c1de: bf00 nop - 800c1e0: 3710 adds r7, #16 - 800c1e2: 46bd mov sp, r7 - 800c1e4: bd80 pop {r7, pc} - 800c1e6: bf00 nop - 800c1e8: 20000080 .word 0x20000080 - -0800c1ec : - -void StopButtonControl(){ - 800c1ec: b580 push {r7, lr} - 800c1ee: af00 add r7, sp, #0 - - //Charging do nothing - if(!IN_ReadInput(IN_ESTOP)){ - 800c1f0: 2003 movs r0, #3 - 800c1f2: f7fd faef bl 80097d4 - 800c1f6: 4603 mov r3, r0 - 800c1f8: 2b00 cmp r3, #0 - 800c1fa: d102 bne.n 800c202 - CONN.connControl = CMD_STOP; - 800c1fc: 4b02 ldr r3, [pc, #8] @ (800c208 ) - 800c1fe: 2201 movs r2, #1 - 800c200: 701a strb r2, [r3, #0] - } - -} - 800c202: bf00 nop - 800c204: bd80 pop {r7, pc} - 800c206: bf00 nop - 800c208: 200002f8 .word 0x200002f8 - -0800c20c
: -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - 800c20c: b580 push {r7, lr} - 800c20e: b082 sub sp, #8 - 800c210: af02 add r7, sp, #8 - - /* USER CODE BEGIN 1 */ - VectorBase_Config(); - 800c212: f7ff ff89 bl 800c128 - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - 800c216: f002 fb09 bl 800e82c - - /* USER CODE BEGIN Init */ - HAL_RCC_DeInit(); - 800c21a: f004 fb8b bl 8010934 - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - 800c21e: f000 f873 bl 800c308 - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - 800c222: f7ff faa5 bl 800b770 - MX_ADC1_Init(); - 800c226: f7fd f9cf bl 80095c8 - MX_CAN1_Init(); - 800c22a: f7fd fc19 bl 8009a60 - MX_CAN2_Init(); - 800c22e: f7fd fc4d bl 8009acc - MX_RTC_Init(); - 800c232: f001 f85b bl 800d2ec - MX_TIM4_Init(); - 800c236: f001 ffef bl 800e218 - MX_USART2_UART_Init(); - 800c23a: f002 f92f bl 800e49c - MX_CRC_Init(); - 800c23e: f7ff f879 bl 800b334 - MX_UART5_Init(); - 800c242: f002 f8d7 bl 800e3f4 - MX_USART1_UART_Init(); - 800c246: f002 f8ff bl 800e448 - MX_USART3_UART_Init(); - 800c24a: f002 f951 bl 800e4f0 - /* USER CODE BEGIN 2 */ - Init_Peripheral(); - 800c24e: f7fd fb13 bl 8009878 - LED_Init(); - 800c252: f000 ff8d bl 800d170 - - HAL_Delay(300); - 800c256: f44f 7096 mov.w r0, #300 @ 0x12c - 800c25a: f002 fb49 bl 800e8f0 - GBT_Init(); - 800c25e: f7fd fda9 bl 8009db4 - SC_Init(); - 800c262: f001 f8a7 bl 800d3b4 - log_printf(LOG_INFO, "GBT Charger v%d.%d\n", GBT_CH_VER_MAJOR, GBT_CH_VER_MINOR); - 800c266: 2300 movs r3, #0 - 800c268: 2201 movs r2, #1 - 800c26a: 4922 ldr r1, [pc, #136] @ (800c2f4 ) - 800c26c: 2007 movs r0, #7 - 800c26e: f7ff f979 bl 800b564 - ReadVersion(); - 800c272: f001 f87b bl 800d36c - log_printf(LOG_INFO, "Serial number: %d\n", infoPacket.serialNumber); - 800c276: 4b20 ldr r3, [pc, #128] @ (800c2f8 ) - 800c278: 881b ldrh r3, [r3, #0] - 800c27a: b29b uxth r3, r3 - 800c27c: 461a mov r2, r3 - 800c27e: 491f ldr r1, [pc, #124] @ (800c2fc ) - 800c280: 2007 movs r0, #7 - 800c282: f7ff f96f bl 800b564 - log_printf(LOG_INFO, "Board revision: %d\n", infoPacket.boardVersion); - 800c286: 4b1c ldr r3, [pc, #112] @ (800c2f8 ) - 800c288: 789b ldrb r3, [r3, #2] - 800c28a: 461a mov r2, r3 - 800c28c: 491c ldr r1, [pc, #112] @ (800c300 ) - 800c28e: 2007 movs r0, #7 - 800c290: f7ff f968 bl 800b564 - log_printf(LOG_INFO, "FW version: %d.%d.%d\n", infoPacket.fw_version_major, infoPacket.fw_version_minor, infoPacket.fw_version_patch); - 800c294: 4b18 ldr r3, [pc, #96] @ (800c2f8 ) - 800c296: 889b ldrh r3, [r3, #4] - 800c298: b29b uxth r3, r3 - 800c29a: 461a mov r2, r3 - 800c29c: 4b16 ldr r3, [pc, #88] @ (800c2f8 ) - 800c29e: 88db ldrh r3, [r3, #6] - 800c2a0: b29b uxth r3, r3 - 800c2a2: 4619 mov r1, r3 - 800c2a4: 4b14 ldr r3, [pc, #80] @ (800c2f8 ) - 800c2a6: 891b ldrh r3, [r3, #8] - 800c2a8: b29b uxth r3, r3 - 800c2aa: 9300 str r3, [sp, #0] - 800c2ac: 460b mov r3, r1 - 800c2ae: 4915 ldr r1, [pc, #84] @ (800c304 ) - 800c2b0: 2007 movs r0, #7 - 800c2b2: f7ff f957 bl 800b564 - GBT_SetConfig(); - 800c2b6: f7fd fd9b bl 8009df0 - GBT_CAN_ReInit(); - 800c2ba: f7ff fce7 bl 800bc8c - PSU_Init(); - 800c2be: f000 fa7d bl 800c7bc - CONN_Init(); - 800c2c2: f7fd fd17 bl 8009cf4 - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - - - PSU_ReadWrite(); - 800c2c6: f000 fb87 bl 800c9d8 - PSU_Task(); - 800c2ca: f000 fc23 bl 800cb14 - ED_Delay(10); - 800c2ce: 200a movs r0, #10 - 800c2d0: f7ff ff5c bl 800c18c - METER_CalculateEnergy(); - 800c2d4: f000 f88e bl 800c3f4 - CONN_Loop(); - 800c2d8: f7fd fd22 bl 8009d20 - LED_Write(); - 800c2dc: f000 fe0e bl 800cefc - ED_Delay(10); - 800c2e0: 200a movs r0, #10 - 800c2e2: f7ff ff53 bl 800c18c - StopButtonControl(); - 800c2e6: f7ff ff81 bl 800c1ec - ED_Delay(50); - 800c2ea: 2032 movs r0, #50 @ 0x32 - 800c2ec: f7ff ff4e bl 800c18c - { - 800c2f0: bf00 nop - 800c2f2: e7e8 b.n 800c2c6 - 800c2f4: 08016c40 .word 0x08016c40 - 800c2f8: 20000f14 .word 0x20000f14 - 800c2fc: 08016c54 .word 0x08016c54 - 800c300: 08016c68 .word 0x08016c68 - 800c304: 08016c7c .word 0x08016c7c - -0800c308 : -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - 800c308: b580 push {r7, lr} - 800c30a: b09c sub sp, #112 @ 0x70 - 800c30c: af00 add r7, sp, #0 - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - 800c30e: f107 0338 add.w r3, r7, #56 @ 0x38 - 800c312: 2238 movs r2, #56 @ 0x38 - 800c314: 2100 movs r1, #0 - 800c316: 4618 mov r0, r3 - 800c318: f007 ff40 bl 801419c - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - 800c31c: f107 0324 add.w r3, r7, #36 @ 0x24 - 800c320: 2200 movs r2, #0 - 800c322: 601a str r2, [r3, #0] - 800c324: 605a str r2, [r3, #4] - 800c326: 609a str r2, [r3, #8] - 800c328: 60da str r2, [r3, #12] - 800c32a: 611a str r2, [r3, #16] - RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; - 800c32c: 1d3b adds r3, r7, #4 - 800c32e: 2220 movs r2, #32 - 800c330: 2100 movs r1, #0 - 800c332: 4618 mov r0, r3 - 800c334: f007 ff32 bl 801419c - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; - 800c338: 2305 movs r3, #5 - 800c33a: 63bb str r3, [r7, #56] @ 0x38 - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - 800c33c: f44f 3380 mov.w r3, #65536 @ 0x10000 - 800c340: 643b str r3, [r7, #64] @ 0x40 - RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV5; - 800c342: 2304 movs r3, #4 - 800c344: 647b str r3, [r7, #68] @ 0x44 - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - 800c346: 2301 movs r3, #1 - 800c348: 64bb str r3, [r7, #72] @ 0x48 - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - 800c34a: 2301 movs r3, #1 - 800c34c: 64fb str r3, [r7, #76] @ 0x4c - RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_PLL2; - 800c34e: f44f 3380 mov.w r3, #65536 @ 0x10000 - 800c352: 63fb str r3, [r7, #60] @ 0x3c - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - 800c354: 2302 movs r3, #2 - 800c356: 65bb str r3, [r7, #88] @ 0x58 - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - 800c358: f44f 3380 mov.w r3, #65536 @ 0x10000 - 800c35c: 65fb str r3, [r7, #92] @ 0x5c - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; - 800c35e: f44f 13e0 mov.w r3, #1835008 @ 0x1c0000 - 800c362: 663b str r3, [r7, #96] @ 0x60 - RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL2_ON; - 800c364: 2302 movs r3, #2 - 800c366: 667b str r3, [r7, #100] @ 0x64 - RCC_OscInitStruct.PLL2.PLL2MUL = RCC_PLL2_MUL8; - 800c368: f44f 63c0 mov.w r3, #1536 @ 0x600 - 800c36c: 66bb str r3, [r7, #104] @ 0x68 - RCC_OscInitStruct.PLL2.HSEPrediv2Value = RCC_HSE_PREDIV2_DIV5; - 800c36e: 2340 movs r3, #64 @ 0x40 - 800c370: 66fb str r3, [r7, #108] @ 0x6c - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - 800c372: f107 0338 add.w r3, r7, #56 @ 0x38 - 800c376: 4618 mov r0, r3 - 800c378: f004 fbac bl 8010ad4 - 800c37c: 4603 mov r3, r0 - 800c37e: 2b00 cmp r3, #0 - 800c380: d001 beq.n 800c386 - { - Error_Handler(); - 800c382: f000 f831 bl 800c3e8 - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - 800c386: 230f movs r3, #15 - 800c388: 627b str r3, [r7, #36] @ 0x24 - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - 800c38a: 2302 movs r3, #2 - 800c38c: 62bb str r3, [r7, #40] @ 0x28 - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - 800c38e: 2300 movs r3, #0 - 800c390: 62fb str r3, [r7, #44] @ 0x2c - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; - 800c392: f44f 6380 mov.w r3, #1024 @ 0x400 - 800c396: 633b str r3, [r7, #48] @ 0x30 - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; - 800c398: 2300 movs r3, #0 - 800c39a: 637b str r3, [r7, #52] @ 0x34 - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) - 800c39c: f107 0324 add.w r3, r7, #36 @ 0x24 - 800c3a0: 2102 movs r1, #2 - 800c3a2: 4618 mov r0, r3 - 800c3a4: f004 feac bl 8011100 - 800c3a8: 4603 mov r3, r0 - 800c3aa: 2b00 cmp r3, #0 - 800c3ac: d001 beq.n 800c3b2 - { - Error_Handler(); - 800c3ae: f000 f81b bl 800c3e8 - } - PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC; - 800c3b2: 2303 movs r3, #3 - 800c3b4: 607b str r3, [r7, #4] - PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - 800c3b6: f44f 7380 mov.w r3, #256 @ 0x100 - 800c3ba: 60bb str r3, [r7, #8] - PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; - 800c3bc: f44f 4300 mov.w r3, #32768 @ 0x8000 - 800c3c0: 60fb str r3, [r7, #12] - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) - 800c3c2: 1d3b adds r3, r7, #4 - 800c3c4: 4618 mov r0, r3 - 800c3c6: f005 f891 bl 80114ec - 800c3ca: 4603 mov r3, r0 - 800c3cc: 2b00 cmp r3, #0 - 800c3ce: d001 beq.n 800c3d4 - { - Error_Handler(); - 800c3d0: f000 f80a bl 800c3e8 - } - - /** Configure the Systick interrupt time - */ - __HAL_RCC_PLLI2S_ENABLE(); - 800c3d4: 4b03 ldr r3, [pc, #12] @ (800c3e4 ) - 800c3d6: 2201 movs r2, #1 - 800c3d8: 601a str r2, [r3, #0] -} - 800c3da: bf00 nop - 800c3dc: 3770 adds r7, #112 @ 0x70 - 800c3de: 46bd mov sp, r7 - 800c3e0: bd80 pop {r7, pc} - 800c3e2: bf00 nop - 800c3e4: 42420070 .word 0x42420070 - -0800c3e8 : -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - 800c3e8: b480 push {r7} - 800c3ea: af00 add r7, sp, #0 - __ASM volatile ("cpsid i" : : : "memory"); - 800c3ec: b672 cpsid i -} - 800c3ee: 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) - 800c3f0: bf00 nop - 800c3f2: e7fd b.n 800c3f0 - -0800c3f4 : - - -METER_t METER; - -// Функция для расчета и накопления энергии c дробной частью без счетчиков -void METER_CalculateEnergy() { - 800c3f4: e92d 43b0 stmdb sp!, {r4, r5, r7, r8, r9, lr} - 800c3f8: b084 sub sp, #16 - 800c3fa: af00 add r7, sp, #0 - // Проверяем, что индекс находится в пределах массива - - METER.online = 0; - 800c3fc: 4b2e ldr r3, [pc, #184] @ (800c4b8 ) - 800c3fe: 2200 movs r2, #0 - 800c400: 711a strb r2, [r3, #4] - - if(CONN.connState == Charging){ - 800c402: 4b2e ldr r3, [pc, #184] @ (800c4bc ) - 800c404: 785b ldrb r3, [r3, #1] - 800c406: 2b08 cmp r3, #8 - 800c408: d104 bne.n 800c414 - METER.enable = 1; - 800c40a: 4b2b ldr r3, [pc, #172] @ (800c4b8 ) - 800c40c: 2201 movs r2, #1 - 800c40e: f883 2024 strb.w r2, [r3, #36] @ 0x24 - 800c412: e003 b.n 800c41c - }else{ - METER.enable = 0; - 800c414: 4b28 ldr r3, [pc, #160] @ (800c4b8 ) - 800c416: 2200 movs r2, #0 - 800c418: f883 2024 strb.w r2, [r3, #36] @ 0x24 - } - - uint32_t currentTick = HAL_GetTick(); // Получаем текущее время в миллисекундах - 800c41c: f002 fa5e bl 800e8dc - 800c420: 60f8 str r0, [r7, #12] - uint32_t elapsedTimeMs = currentTick - METER.lastTick; // Вычисляем время, прошедшее с последнего вызова в секундах - 800c422: 4b25 ldr r3, [pc, #148] @ (800c4b8 ) - 800c424: 689b ldr r3, [r3, #8] - 800c426: 68fa ldr r2, [r7, #12] - 800c428: 1ad3 subs r3, r2, r3 - 800c42a: 60bb str r3, [r7, #8] - METER.lastTick = currentTick; // Обновляем время последнего вызова для текущего коннектора - 800c42c: 4a22 ldr r2, [pc, #136] @ (800c4b8 ) - 800c42e: 68fb ldr r3, [r7, #12] - 800c430: 6093 str r3, [r2, #8] - uint32_t energyWs = CONN.Power * elapsedTimeMs / 1000; // Рассчитываем энергию в ватт-секундах за прошедший промежуток времени - 800c432: 4b22 ldr r3, [pc, #136] @ (800c4bc ) - 800c434: f8d3 3003 ldr.w r3, [r3, #3] - 800c438: 68ba ldr r2, [r7, #8] - 800c43a: fb02 f303 mul.w r3, r2, r3 - 800c43e: 4a20 ldr r2, [pc, #128] @ (800c4c0 ) - 800c440: fba2 2303 umull r2, r3, r2, r3 - 800c444: 099b lsrs r3, r3, #6 - 800c446: 607b str r3, [r7, #4] - - //Расчет энергии теперь идет всегда, смещение берем суммарное - METER.EnergyPSU_Ws += energyWs; - 800c448: 4b1b ldr r3, [pc, #108] @ (800c4b8 ) - 800c44a: e9d3 2304 ldrd r2, r3, [r3, #16] - 800c44e: 6879 ldr r1, [r7, #4] - 800c450: 2000 movs r0, #0 - 800c452: 460c mov r4, r1 - 800c454: 4605 mov r5, r0 - 800c456: eb12 0804 adds.w r8, r2, r4 - 800c45a: eb43 0905 adc.w r9, r3, r5 - 800c45e: 4b16 ldr r3, [pc, #88] @ (800c4b8 ) - 800c460: e9c3 8904 strd r8, r9, [r3, #16] - - // Абсолютное значение энергии разъема складывается из накопленной дробной части и значения со счетчиков - METER.AbsoluteEnergy = (uint32_t)METER.EnergyPSU_Ws/3600; //переводим в Вт*час - 800c464: 4b14 ldr r3, [pc, #80] @ (800c4b8 ) - 800c466: e9d3 2304 ldrd r2, r3, [r3, #16] - 800c46a: 4b16 ldr r3, [pc, #88] @ (800c4c4 ) - 800c46c: fba3 2302 umull r2, r3, r3, r2 - 800c470: 0adb lsrs r3, r3, #11 - 800c472: 4a11 ldr r2, [pc, #68] @ (800c4b8 ) - 800c474: 6193 str r3, [r2, #24] - - if(METER.enable) { - 800c476: 4b10 ldr r3, [pc, #64] @ (800c4b8 ) - 800c478: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 - 800c47c: 2b00 cmp r3, #0 - 800c47e: d008 beq.n 800c492 - //enabled state - CONN.Energy = METER.AbsoluteEnergy - METER.EnergyOffset;//переводим в Вт*час - 800c480: 4b0d ldr r3, [pc, #52] @ (800c4b8 ) - 800c482: 699a ldr r2, [r3, #24] - 800c484: 4b0c ldr r3, [pc, #48] @ (800c4b8 ) - 800c486: 69db ldr r3, [r3, #28] - 800c488: 1ad3 subs r3, r2, r3 - 800c48a: 4a0c ldr r2, [pc, #48] @ (800c4bc ) - 800c48c: f8c2 3007 str.w r3, [r2, #7] - METER.EnergyOffset = METER.AbsoluteEnergy; - - } - - -} - 800c490: e00c b.n 800c4ac - CONN.Energy = 0; - 800c492: 4b0a ldr r3, [pc, #40] @ (800c4bc ) - 800c494: 2200 movs r2, #0 - 800c496: 71da strb r2, [r3, #7] - 800c498: 2200 movs r2, #0 - 800c49a: 721a strb r2, [r3, #8] - 800c49c: 2200 movs r2, #0 - 800c49e: 725a strb r2, [r3, #9] - 800c4a0: 2200 movs r2, #0 - 800c4a2: 729a strb r2, [r3, #10] - METER.EnergyOffset = METER.AbsoluteEnergy; - 800c4a4: 4b04 ldr r3, [pc, #16] @ (800c4b8 ) - 800c4a6: 699b ldr r3, [r3, #24] - 800c4a8: 4a03 ldr r2, [pc, #12] @ (800c4b8 ) - 800c4aa: 61d3 str r3, [r2, #28] -} - 800c4ac: bf00 nop - 800c4ae: 3710 adds r7, #16 - 800c4b0: 46bd mov sp, r7 - 800c4b2: e8bd 83b0 ldmia.w sp!, {r4, r5, r7, r8, r9, pc} - 800c4b6: bf00 nop - 800c4b8: 200009a8 .word 0x200009a8 - 800c4bc: 200002f8 .word 0x200002f8 - 800c4c0: 10624dd3 .word 0x10624dd3 - 800c4c4: 91a2b3c5 .word 0x91a2b3c5 - -0800c4c8 : - -uint32_t can_lastpacket; - -extern CAN_HandleTypeDef hcan2; - -static void PSU_SwitchState(PSU_State_t state){ - 800c4c8: b580 push {r7, lr} - 800c4ca: b082 sub sp, #8 - 800c4cc: af00 add r7, sp, #0 - 800c4ce: 4603 mov r3, r0 - 800c4d0: 71fb strb r3, [r7, #7] - PSU0.state = state; - 800c4d2: 4a06 ldr r2, [pc, #24] @ (800c4ec ) - 800c4d4: 79fb ldrb r3, [r7, #7] - 800c4d6: 71d3 strb r3, [r2, #7] - PSU0.statetick = HAL_GetTick(); - 800c4d8: f002 fa00 bl 800e8dc - 800c4dc: 4603 mov r3, r0 - 800c4de: 4a03 ldr r2, [pc, #12] @ (800c4ec ) - 800c4e0: 6113 str r3, [r2, #16] -} - 800c4e2: bf00 nop - 800c4e4: 3708 adds r7, #8 - 800c4e6: 46bd mov sp, r7 - 800c4e8: bd80 pop {r7, pc} - 800c4ea: bf00 nop - 800c4ec: 20000a14 .word 0x20000a14 - -0800c4f0 : - -static uint32_t PSU_StateTime(void){ - 800c4f0: b580 push {r7, lr} - 800c4f2: af00 add r7, sp, #0 - return HAL_GetTick() - PSU0.statetick; - 800c4f4: f002 f9f2 bl 800e8dc - 800c4f8: 4602 mov r2, r0 - 800c4fa: 4b02 ldr r3, [pc, #8] @ (800c504 ) - 800c4fc: 691b ldr r3, [r3, #16] - 800c4fe: 1ad3 subs r3, r2, r3 -} - 800c500: 4618 mov r0, r3 - 800c502: bd80 pop {r7, pc} - 800c504: 20000a14 .word 0x20000a14 - -0800c508 : - -void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){ - 800c508: b580 push {r7, lr} - 800c50a: b084 sub sp, #16 - 800c50c: af00 add r7, sp, #0 - 800c50e: 6078 str r0, [r7, #4] - - static CAN_RxHeaderTypeDef RxHeader; - static uint8_t RxData[8] = {0,}; - CanId_t CanId; - - if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader, RxData) == HAL_OK) - 800c510: 4b88 ldr r3, [pc, #544] @ (800c734 ) - 800c512: 4a89 ldr r2, [pc, #548] @ (800c738 ) - 800c514: 2101 movs r1, #1 - 800c516: 6878 ldr r0, [r7, #4] - 800c518: f003 fa80 bl 800fa1c - 800c51c: 4603 mov r3, r0 - 800c51e: 2b00 cmp r3, #0 - 800c520: f040 8104 bne.w 800c72c - { - memcpy(&CanId, &RxHeader.ExtId, sizeof(CanId_t)); - 800c524: 4b84 ldr r3, [pc, #528] @ (800c738 ) - 800c526: 685b ldr r3, [r3, #4] - 800c528: 60bb str r3, [r7, #8] - - /* Для DC30 поддерживается только один силовой модуль (source == 0) */ - if(CanId.source != 0) return; - 800c52a: 7a3b ldrb r3, [r7, #8] - 800c52c: 2b00 cmp r3, #0 - 800c52e: f040 80fc bne.w 800c72a - can_lastpacket = HAL_GetTick(); - 800c532: f002 f9d3 bl 800e8dc - 800c536: 4603 mov r3, r0 - 800c538: 4a80 ldr r2, [pc, #512] @ (800c73c ) - 800c53a: 6013 str r3, [r2, #0] - - if(CanId.command==0x02){ - 800c53c: 7abb ldrb r3, [r7, #10] - 800c53e: f003 033f and.w r3, r3, #63 @ 0x3f - 800c542: b2db uxtb r3, r3 - 800c544: 2b02 cmp r3, #2 - 800c546: d105 bne.n 800c554 - memcpy(&PSU_02, RxData, 8); - 800c548: 4b7d ldr r3, [pc, #500] @ (800c740 ) - 800c54a: 4a7a ldr r2, [pc, #488] @ (800c734 ) - 800c54c: e892 0003 ldmia.w r2, {r0, r1} - 800c550: e883 0003 stmia.w r3, {r0, r1} - } - if(CanId.command==0x04){ - 800c554: 7abb ldrb r3, [r7, #10] - 800c556: f003 033f and.w r3, r3, #63 @ 0x3f - 800c55a: b2db uxtb r3, r3 - 800c55c: 2b04 cmp r3, #4 - 800c55e: d119 bne.n 800c594 - memcpy(&PSU_04, RxData, 8); - 800c560: 4b78 ldr r3, [pc, #480] @ (800c744 ) - 800c562: 4a74 ldr r2, [pc, #464] @ (800c734 ) - 800c564: e892 0003 ldmia.w r2, {r0, r1} - 800c568: e883 0003 stmia.w r3, {r0, r1} - - PSU0.tempAmbient = PSU_04.moduleTemperature; - 800c56c: 4b75 ldr r3, [pc, #468] @ (800c744 ) - 800c56e: 791b ldrb r3, [r3, #4] - 800c570: 461a mov r2, r3 - 800c572: 4b75 ldr r3, [pc, #468] @ (800c748 ) - 800c574: 61da str r2, [r3, #28] - PSU0.status0.raw = PSU_04.modularForm0; - 800c576: 4b73 ldr r3, [pc, #460] @ (800c744 ) - 800c578: 7a1a ldrb r2, [r3, #8] - 800c57a: 4b73 ldr r3, [pc, #460] @ (800c748 ) - 800c57c: f883 2020 strb.w r2, [r3, #32] - PSU0.status1.raw = PSU_04.modularForm1; - 800c580: 4b70 ldr r3, [pc, #448] @ (800c744 ) - 800c582: 79da ldrb r2, [r3, #7] - 800c584: 4b70 ldr r3, [pc, #448] @ (800c748 ) - 800c586: f883 2021 strb.w r2, [r3, #33] @ 0x21 - PSU0.status2.raw = PSU_04.modularForm2; - 800c58a: 4b6e ldr r3, [pc, #440] @ (800c744 ) - 800c58c: 799a ldrb r2, [r3, #6] - 800c58e: 4b6e ldr r3, [pc, #440] @ (800c748 ) - 800c590: f883 2022 strb.w r2, [r3, #34] @ 0x22 - } - if(CanId.command==0x06){ - 800c594: 7abb ldrb r3, [r7, #10] - 800c596: f003 033f and.w r3, r3, #63 @ 0x3f - 800c59a: b2db uxtb r3, r3 - 800c59c: 2b06 cmp r3, #6 - 800c59e: d123 bne.n 800c5e8 - memcpy(&PSU_06, RxData, 8); - 800c5a0: 4b6a ldr r3, [pc, #424] @ (800c74c ) - 800c5a2: 4a64 ldr r2, [pc, #400] @ (800c734 ) - 800c5a4: e892 0003 ldmia.w r2, {r0, r1} - 800c5a8: e883 0003 stmia.w r3, {r0, r1} - - PSU_06.VAB = PSU_06.VABLo+(PSU_06.VABHi<<8); - 800c5ac: 4b67 ldr r3, [pc, #412] @ (800c74c ) - 800c5ae: 785b ldrb r3, [r3, #1] - 800c5b0: 461a mov r2, r3 - 800c5b2: 4b66 ldr r3, [pc, #408] @ (800c74c ) - 800c5b4: 781b ldrb r3, [r3, #0] - 800c5b6: 021b lsls r3, r3, #8 - 800c5b8: 4413 add r3, r2 - 800c5ba: 461a mov r2, r3 - 800c5bc: 4b63 ldr r3, [pc, #396] @ (800c74c ) - 800c5be: 609a str r2, [r3, #8] - PSU_06.VBC = PSU_06.VBCLo+(PSU_06.VBCHi<<8); - 800c5c0: 4b62 ldr r3, [pc, #392] @ (800c74c ) - 800c5c2: 78db ldrb r3, [r3, #3] - 800c5c4: 461a mov r2, r3 - 800c5c6: 4b61 ldr r3, [pc, #388] @ (800c74c ) - 800c5c8: 789b ldrb r3, [r3, #2] - 800c5ca: 021b lsls r3, r3, #8 - 800c5cc: 4413 add r3, r2 - 800c5ce: 461a mov r2, r3 - 800c5d0: 4b5e ldr r3, [pc, #376] @ (800c74c ) - 800c5d2: 60da str r2, [r3, #12] - PSU_06.VCA = PSU_06.VCALo+(PSU_06.VCAHi<<8); - 800c5d4: 4b5d ldr r3, [pc, #372] @ (800c74c ) - 800c5d6: 795b ldrb r3, [r3, #5] - 800c5d8: 461a mov r2, r3 - 800c5da: 4b5c ldr r3, [pc, #368] @ (800c74c ) - 800c5dc: 791b ldrb r3, [r3, #4] - 800c5de: 021b lsls r3, r3, #8 - 800c5e0: 4413 add r3, r2 - 800c5e2: 461a mov r2, r3 - 800c5e4: 4b59 ldr r3, [pc, #356] @ (800c74c ) - 800c5e6: 611a str r2, [r3, #16] - - } - if(CanId.command==0x08){ - 800c5e8: 7abb ldrb r3, [r7, #10] - 800c5ea: f003 033f and.w r3, r3, #63 @ 0x3f - 800c5ee: b2db uxtb r3, r3 - 800c5f0: 2b08 cmp r3, #8 - 800c5f2: d105 bne.n 800c600 - memcpy(&PSU_08, RxData, 8); - 800c5f4: 4b56 ldr r3, [pc, #344] @ (800c750 ) - 800c5f6: 4a4f ldr r2, [pc, #316] @ (800c734 ) - 800c5f8: e892 0003 ldmia.w r2, {r0, r1} - 800c5fc: e883 0003 stmia.w r3, {r0, r1} - } - if(CanId.command==0x09){ - 800c600: 7abb ldrb r3, [r7, #10] - 800c602: f003 033f and.w r3, r3, #63 @ 0x3f - 800c606: b2db uxtb r3, r3 - 800c608: 2b09 cmp r3, #9 - 800c60a: f040 808f bne.w 800c72c - - memcpy(&PSU_09, RxData, 8); - 800c60e: 4b51 ldr r3, [pc, #324] @ (800c754 ) - 800c610: 4a48 ldr r2, [pc, #288] @ (800c734 ) - 800c612: e892 0003 ldmia.w r2, {r0, r1} - 800c616: e883 0003 stmia.w r3, {r0, r1} - PSU_09.moduleNCurrent = PSU_09.moduleNCurrent_[3]; - 800c61a: 4b4e ldr r3, [pc, #312] @ (800c754 ) - 800c61c: 79db ldrb r3, [r3, #7] - 800c61e: 461a mov r2, r3 - 800c620: 4b4c ldr r3, [pc, #304] @ (800c754 ) - 800c622: 60da str r2, [r3, #12] - PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[2]<<8; - 800c624: 4b4b ldr r3, [pc, #300] @ (800c754 ) - 800c626: 68da ldr r2, [r3, #12] - 800c628: 4b4a ldr r3, [pc, #296] @ (800c754 ) - 800c62a: 799b ldrb r3, [r3, #6] - 800c62c: 021b lsls r3, r3, #8 - 800c62e: 4313 orrs r3, r2 - 800c630: 4a48 ldr r2, [pc, #288] @ (800c754 ) - 800c632: 60d3 str r3, [r2, #12] - PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[1]<<16; - 800c634: 4b47 ldr r3, [pc, #284] @ (800c754 ) - 800c636: 68da ldr r2, [r3, #12] - 800c638: 4b46 ldr r3, [pc, #280] @ (800c754 ) - 800c63a: 795b ldrb r3, [r3, #5] - 800c63c: 041b lsls r3, r3, #16 - 800c63e: 4313 orrs r3, r2 - 800c640: 4a44 ldr r2, [pc, #272] @ (800c754 ) - 800c642: 60d3 str r3, [r2, #12] - PSU_09.moduleNCurrent |= PSU_09.moduleNCurrent_[0]<<24; - 800c644: 4b43 ldr r3, [pc, #268] @ (800c754 ) - 800c646: 68da ldr r2, [r3, #12] - 800c648: 4b42 ldr r3, [pc, #264] @ (800c754 ) - 800c64a: 791b ldrb r3, [r3, #4] - 800c64c: 061b lsls r3, r3, #24 - 800c64e: 4313 orrs r3, r2 - 800c650: 4a40 ldr r2, [pc, #256] @ (800c754 ) - 800c652: 60d3 str r3, [r2, #12] - - PSU_09.moduleNVoltage = PSU_09.moduleNVoltage_[3]; - 800c654: 4b3f ldr r3, [pc, #252] @ (800c754 ) - 800c656: 78db ldrb r3, [r3, #3] - 800c658: 461a mov r2, r3 - 800c65a: 4b3e ldr r3, [pc, #248] @ (800c754 ) - 800c65c: 609a str r2, [r3, #8] - PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[2]<<8; - 800c65e: 4b3d ldr r3, [pc, #244] @ (800c754 ) - 800c660: 689a ldr r2, [r3, #8] - 800c662: 4b3c ldr r3, [pc, #240] @ (800c754 ) - 800c664: 789b ldrb r3, [r3, #2] - 800c666: 021b lsls r3, r3, #8 - 800c668: 4313 orrs r3, r2 - 800c66a: 4a3a ldr r2, [pc, #232] @ (800c754 ) - 800c66c: 6093 str r3, [r2, #8] - PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[1]<<16; - 800c66e: 4b39 ldr r3, [pc, #228] @ (800c754 ) - 800c670: 689a ldr r2, [r3, #8] - 800c672: 4b38 ldr r3, [pc, #224] @ (800c754 ) - 800c674: 785b ldrb r3, [r3, #1] - 800c676: 041b lsls r3, r3, #16 - 800c678: 4313 orrs r3, r2 - 800c67a: 4a36 ldr r2, [pc, #216] @ (800c754 ) - 800c67c: 6093 str r3, [r2, #8] - PSU_09.moduleNVoltage |= PSU_09.moduleNVoltage_[0]<<24; - 800c67e: 4b35 ldr r3, [pc, #212] @ (800c754 ) - 800c680: 689a ldr r2, [r3, #8] - 800c682: 4b34 ldr r3, [pc, #208] @ (800c754 ) - 800c684: 781b ldrb r3, [r3, #0] - 800c686: 061b lsls r3, r3, #24 - 800c688: 4313 orrs r3, r2 - 800c68a: 4a32 ldr r2, [pc, #200] @ (800c754 ) - 800c68c: 6093 str r3, [r2, #8] - - // PSU_09 -> PSU -> CONN (один модуль) - { - uint16_t v = PSU_09.moduleNVoltage / 1000; - 800c68e: 4b31 ldr r3, [pc, #196] @ (800c754 ) - 800c690: 689b ldr r3, [r3, #8] - 800c692: 4a31 ldr r2, [pc, #196] @ (800c758 ) - 800c694: fba2 2303 umull r2, r3, r2, r3 - 800c698: 099b lsrs r3, r3, #6 - 800c69a: 81fb strh r3, [r7, #14] - int16_t i = PSU_09.moduleNCurrent / 100; - 800c69c: 4b2d ldr r3, [pc, #180] @ (800c754 ) - 800c69e: 68db ldr r3, [r3, #12] - 800c6a0: 4a2e ldr r2, [pc, #184] @ (800c75c ) - 800c6a2: fba2 2303 umull r2, r3, r2, r3 - 800c6a6: 095b lsrs r3, r3, #5 - 800c6a8: 81bb strh r3, [r7, #12] - - // Обновляем модель PSU0 по телеметрии - PSU0.outputVoltage = v; - 800c6aa: 4a27 ldr r2, [pc, #156] @ (800c748 ) - 800c6ac: 89fb ldrh r3, [r7, #14] - 800c6ae: 8053 strh r3, [r2, #2] - PSU0.outputCurrent = i; - 800c6b0: 4a25 ldr r2, [pc, #148] @ (800c748 ) - 800c6b2: 89bb ldrh r3, [r7, #12] - 800c6b4: 8093 strh r3, [r2, #4] - PSU0.PSU_enabled = (v >= PSU_VOLTAGE_THRESHOLD); - 800c6b6: 89fb ldrh r3, [r7, #14] - 800c6b8: 2b13 cmp r3, #19 - 800c6ba: bf8c ite hi - 800c6bc: 2301 movhi r3, #1 - 800c6be: 2300 movls r3, #0 - 800c6c0: b2db uxtb r3, r3 - 800c6c2: 461a mov r2, r3 - 800c6c4: 4b20 ldr r3, [pc, #128] @ (800c748 ) - 800c6c6: 729a strb r2, [r3, #10] - PSU0.online = 1; - 800c6c8: 4b1f ldr r3, [pc, #124] @ (800c748 ) - 800c6ca: 2201 movs r2, #1 - 800c6cc: 721a strb r2, [r3, #8] - PSU0.temperature = PSU_04.moduleTemperature; - 800c6ce: 4b1d ldr r3, [pc, #116] @ (800c744 ) - 800c6d0: 791a ldrb r2, [r3, #4] - 800c6d2: 4b1d ldr r3, [pc, #116] @ (800c748 ) - 800c6d4: 719a strb r2, [r3, #6] - - // Экспортируем значения из PSU0 в CONN только, - // когда модуль хотя бы в состоянии READY и выше - if(PSU0.state >= PSU_READY){ - 800c6d6: 4b1c ldr r3, [pc, #112] @ (800c748 ) - 800c6d8: 79db ldrb r3, [r3, #7] - 800c6da: 2b01 cmp r3, #1 - 800c6dc: d926 bls.n 800c72c - CONN.MeasuredVoltage = PSU0.outputVoltage; - 800c6de: 4b1a ldr r3, [pc, #104] @ (800c748 ) - 800c6e0: 885a ldrh r2, [r3, #2] - 800c6e2: 4b1f ldr r3, [pc, #124] @ (800c760 ) - 800c6e4: f8a3 2013 strh.w r2, [r3, #19] - CONN.MeasuredCurrent = PSU0.outputCurrent; - 800c6e8: 4b17 ldr r3, [pc, #92] @ (800c748 ) - 800c6ea: f9b3 3004 ldrsh.w r3, [r3, #4] - 800c6ee: b29a uxth r2, r3 - 800c6f0: 4b1b ldr r3, [pc, #108] @ (800c760 ) - 800c6f2: f8a3 2015 strh.w r2, [r3, #21] - CONN.Power = CONN.MeasuredCurrent * CONN.MeasuredVoltage / 10; - 800c6f6: 4b1a ldr r3, [pc, #104] @ (800c760 ) - 800c6f8: f8b3 3015 ldrh.w r3, [r3, #21] - 800c6fc: b29b uxth r3, r3 - 800c6fe: 461a mov r2, r3 - 800c700: 4b17 ldr r3, [pc, #92] @ (800c760 ) - 800c702: f8b3 3013 ldrh.w r3, [r3, #19] - 800c706: b29b uxth r3, r3 - 800c708: fb02 f303 mul.w r3, r2, r3 - 800c70c: 4a15 ldr r2, [pc, #84] @ (800c764 ) - 800c70e: fb82 1203 smull r1, r2, r2, r3 - 800c712: 1092 asrs r2, r2, #2 - 800c714: 17db asrs r3, r3, #31 - 800c716: 1ad3 subs r3, r2, r3 - 800c718: 461a mov r2, r3 - 800c71a: 4b11 ldr r3, [pc, #68] @ (800c760 ) - 800c71c: f8c3 2003 str.w r2, [r3, #3] - CONN.outputEnabled = PSU0.PSU_enabled; - 800c720: 4b09 ldr r3, [pc, #36] @ (800c748 ) - 800c722: 7a9a ldrb r2, [r3, #10] - 800c724: 4b0e ldr r3, [pc, #56] @ (800c760 ) - 800c726: 761a strb r2, [r3, #24] - 800c728: e000 b.n 800c72c - if(CanId.source != 0) return; - 800c72a: bf00 nop - } - } - } - } -} - 800c72c: 3710 adds r7, #16 - 800c72e: 46bd mov sp, r7 - 800c730: bd80 pop {r7, pc} - 800c732: bf00 nop - 800c734: 20000a58 .word 0x20000a58 - 800c738: 20000a3c .word 0x20000a3c - 800c73c: 20000a38 .word 0x20000a38 - 800c740: 200009d0 .word 0x200009d0 - 800c744: 200009dc .word 0x200009dc - 800c748: 20000a14 .word 0x20000a14 - 800c74c: 200009e8 .word 0x200009e8 - 800c750: 200009fc .word 0x200009fc - 800c754: 20000a04 .word 0x20000a04 - 800c758: 10624dd3 .word 0x10624dd3 - 800c75c: 51eb851f .word 0x51eb851f - 800c760: 200002f8 .word 0x200002f8 - 800c764: 66666667 .word 0x66666667 - -0800c768 : - -void PSU_CAN_FilterInit(){ - 800c768: b580 push {r7, lr} - 800c76a: b08a sub sp, #40 @ 0x28 - 800c76c: af00 add r7, sp, #0 - CAN_FilterTypeDef sFilterConfig; - - sFilterConfig.FilterBank = 14; - 800c76e: 230e movs r3, #14 - 800c770: 617b str r3, [r7, #20] - sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; - 800c772: 2300 movs r3, #0 - 800c774: 61bb str r3, [r7, #24] - sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; - 800c776: 2301 movs r3, #1 - 800c778: 61fb str r3, [r7, #28] - sFilterConfig.FilterIdHigh = 0x0000; - 800c77a: 2300 movs r3, #0 - 800c77c: 603b str r3, [r7, #0] - sFilterConfig.FilterIdLow = 0x0000; - 800c77e: 2300 movs r3, #0 - 800c780: 607b str r3, [r7, #4] - sFilterConfig.FilterMaskIdHigh = 0x0000; - 800c782: 2300 movs r3, #0 - 800c784: 60bb str r3, [r7, #8] - sFilterConfig.FilterMaskIdLow = 0x0000; - 800c786: 2300 movs r3, #0 - 800c788: 60fb str r3, [r7, #12] - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; - 800c78a: 2300 movs r3, #0 - 800c78c: 613b str r3, [r7, #16] - sFilterConfig.FilterActivation = ENABLE; - 800c78e: 2301 movs r3, #1 - 800c790: 623b str r3, [r7, #32] - - sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO1; - 800c792: 2301 movs r3, #1 - 800c794: 613b str r3, [r7, #16] - sFilterConfig.SlaveStartFilterBank = 14; - 800c796: 230e movs r3, #14 - 800c798: 627b str r3, [r7, #36] @ 0x24 - - - if(HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK) - 800c79a: 463b mov r3, r7 - 800c79c: 4619 mov r1, r3 - 800c79e: 4806 ldr r0, [pc, #24] @ (800c7b8 ) - 800c7a0: f002 fecc bl 800f53c - 800c7a4: 4603 mov r3, r0 - 800c7a6: 2b00 cmp r3, #0 - 800c7a8: d001 beq.n 800c7ae - { - Error_Handler(); - 800c7aa: f7ff fe1d bl 800c3e8 - } -} - 800c7ae: bf00 nop - 800c7b0: 3728 adds r7, #40 @ 0x28 - 800c7b2: 46bd mov sp, r7 - 800c7b4: bd80 pop {r7, pc} - 800c7b6: bf00 nop - 800c7b8: 200002cc .word 0x200002cc - -0800c7bc : - -void PSU_Init(){ - 800c7bc: b580 push {r7, lr} - 800c7be: af00 add r7, sp, #0 - - HAL_CAN_Stop(&hcan2); - 800c7c0: 4813 ldr r0, [pc, #76] @ (800c810 ) - 800c7c2: f002 ffdf bl 800f784 - MX_CAN2_Init(); - 800c7c6: f7fd f981 bl 8009acc - PSU_CAN_FilterInit(); - 800c7ca: f7ff ffcd bl 800c768 - HAL_CAN_Start(&hcan2); - 800c7ce: 4810 ldr r0, [pc, #64] @ (800c810 ) - 800c7d0: f002 ff94 bl 800f6fc - HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING /* | CAN_IT_ERROR | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE | CAN_IT_TX_MAILBOX_EMPTY*/); - 800c7d4: 2110 movs r1, #16 - 800c7d6: 480e ldr r0, [pc, #56] @ (800c810 ) - 800c7d8: f003 fa41 bl 800fc5e - memset(&PSU0, 0, sizeof(PSU0)); - 800c7dc: 2224 movs r2, #36 @ 0x24 - 800c7de: 2100 movs r1, #0 - 800c7e0: 480c ldr r0, [pc, #48] @ (800c814 ) - 800c7e2: f007 fcdb bl 801419c - PSU0.state = PSU_UNREADY; - 800c7e6: 4b0b ldr r3, [pc, #44] @ (800c814 ) - 800c7e8: 2200 movs r2, #0 - 800c7ea: 71da strb r2, [r3, #7] - PSU0.statetick = HAL_GetTick(); - 800c7ec: f002 f876 bl 800e8dc - 800c7f0: 4603 mov r3, r0 - 800c7f2: 4a08 ldr r2, [pc, #32] @ (800c814 ) - 800c7f4: 6113 str r3, [r2, #16] - - PSU0.power_limit = PSU_MAX_POWER; // kW - 800c7f6: 4b07 ldr r3, [pc, #28] @ (800c814 ) - 800c7f8: f247 5230 movw r2, #30000 @ 0x7530 - 800c7fc: 615a str r2, [r3, #20] - PSU0.hv_mode = 0; - 800c7fe: 4b05 ldr r3, [pc, #20] @ (800c814 ) - 800c800: 2200 movs r2, #0 - 800c802: 761a strb r2, [r3, #24] - - PSU_Enable(0, 0); - 800c804: 2100 movs r1, #0 - 800c806: 2000 movs r0, #0 - 800c808: f000 f806 bl 800c818 -} - 800c80c: bf00 nop - 800c80e: bd80 pop {r7, pc} - 800c810: 200002cc .word 0x200002cc - 800c814: 20000a14 .word 0x20000a14 - -0800c818 : - -void PSU_Enable(uint8_t addr, uint8_t enable){ - 800c818: b580 push {r7, lr} - 800c81a: b084 sub sp, #16 - 800c81c: af00 add r7, sp, #0 - 800c81e: 4603 mov r3, r0 - 800c820: 460a mov r2, r1 - 800c822: 71fb strb r3, [r7, #7] - 800c824: 4613 mov r3, r2 - 800c826: 71bb strb r3, [r7, #6] - PSU_1A_t data; - memset(&data, 0, sizeof(data)); - 800c828: f107 0308 add.w r3, r7, #8 - 800c82c: 2208 movs r2, #8 - 800c82e: 2100 movs r1, #0 - 800c830: 4618 mov r0, r3 - 800c832: f007 fcb3 bl 801419c - /* Для DC30 поддерживается только один модуль с адресом 0 */ - if(addr != 0) return; - 800c836: 79fb ldrb r3, [r7, #7] - 800c838: 2b00 cmp r3, #0 - 800c83a: d115 bne.n 800c868 - if(PSU0.online == 0) return; - 800c83c: 4b0d ldr r3, [pc, #52] @ (800c874 ) - 800c83e: 7a1b ldrb r3, [r3, #8] - 800c840: 2b00 cmp r3, #0 - 800c842: d013 beq.n 800c86c - - data.enable = !enable; - 800c844: 79bb ldrb r3, [r7, #6] - 800c846: 2b00 cmp r3, #0 - 800c848: bf0c ite eq - 800c84a: 2301 moveq r3, #1 - 800c84c: 2300 movne r3, #0 - 800c84e: b2db uxtb r3, r3 - 800c850: 723b strb r3, [r7, #8] - PSU_SendCmd(0xF0, addr, 0x1A, &data); - 800c852: 79f9 ldrb r1, [r7, #7] - 800c854: f107 0308 add.w r3, r7, #8 - 800c858: 221a movs r2, #26 - 800c85a: 20f0 movs r0, #240 @ 0xf0 - 800c85c: f000 f866 bl 800c92c - ED_Delay(CAN_DELAY); - 800c860: 2014 movs r0, #20 - 800c862: f7ff fc93 bl 800c18c - 800c866: e002 b.n 800c86e - if(addr != 0) return; - 800c868: bf00 nop - 800c86a: e000 b.n 800c86e - if(PSU0.online == 0) return; - 800c86c: bf00 nop -} - 800c86e: 3710 adds r7, #16 - 800c870: 46bd mov sp, r7 - 800c872: bd80 pop {r7, pc} - 800c874: 20000a14 .word 0x20000a14 - -0800c878 : - memset(&data, 0, sizeof(data)); - data.enable = !enable; - if(addr != 0) return; - PSU_SendCmd(0xF0, addr, 0x1D, &data); -} -void PSU_SetVoltageCurrent(uint8_t addr, uint16_t voltage, uint16_t current){ - 800c878: b580 push {r7, lr} - 800c87a: b086 sub sp, #24 - 800c87c: af00 add r7, sp, #0 - 800c87e: 4603 mov r3, r0 - 800c880: 71fb strb r3, [r7, #7] - 800c882: 460b mov r3, r1 - 800c884: 80bb strh r3, [r7, #4] - 800c886: 4613 mov r3, r2 - 800c888: 807b strh r3, [r7, #2] - PSU_1C_t data; - memset(&data, 0, sizeof(data)); - 800c88a: f107 0308 add.w r3, r7, #8 - 800c88e: 2208 movs r2, #8 - 800c890: 2100 movs r1, #0 - 800c892: 4618 mov r0, r3 - 800c894: f007 fc82 bl 801419c - - if(addr != 0) return; - 800c898: 79fb ldrb r3, [r7, #7] - 800c89a: 2b00 cmp r3, #0 - 800c89c: d140 bne.n 800c920 - - if(voltage - 800c8a4: 2396 movs r3, #150 @ 0x96 - 800c8a6: 80bb strh r3, [r7, #4] - - if((PSU0.hv_mode==0) && voltage>499) voltage = 499; - 800c8a8: 4b1f ldr r3, [pc, #124] @ (800c928 ) - 800c8aa: 7e1b ldrb r3, [r3, #24] - 800c8ac: 2b00 cmp r3, #0 - 800c8ae: d106 bne.n 800c8be - 800c8b0: 88bb ldrh r3, [r7, #4] - 800c8b2: f5b3 7ffa cmp.w r3, #500 @ 0x1f4 - 800c8b6: d302 bcc.n 800c8be - 800c8b8: f240 13f3 movw r3, #499 @ 0x1f3 - 800c8bc: 80bb strh r3, [r7, #4] - - uint32_t current_ma = current * 100; - 800c8be: 887b ldrh r3, [r7, #2] - 800c8c0: 2264 movs r2, #100 @ 0x64 - 800c8c2: fb02 f303 mul.w r3, r2, r3 - 800c8c6: 617b str r3, [r7, #20] - uint32_t voltage_mv = voltage * 1000; - 800c8c8: 88bb ldrh r3, [r7, #4] - 800c8ca: f44f 727a mov.w r2, #1000 @ 0x3e8 - 800c8ce: fb02 f303 mul.w r3, r2, r3 - 800c8d2: 613b str r3, [r7, #16] - - data.moduleCurrentTotal[0] = (current_ma >> 24) & 0xFF; - 800c8d4: 697b ldr r3, [r7, #20] - 800c8d6: 0e1b lsrs r3, r3, #24 - 800c8d8: b2db uxtb r3, r3 - 800c8da: 733b strb r3, [r7, #12] - data.moduleCurrentTotal[1] = (current_ma >> 16) & 0xFF; - 800c8dc: 697b ldr r3, [r7, #20] - 800c8de: 0c1b lsrs r3, r3, #16 - 800c8e0: b2db uxtb r3, r3 - 800c8e2: 737b strb r3, [r7, #13] - data.moduleCurrentTotal[2] = (current_ma >> 8) & 0xFF; - 800c8e4: 697b ldr r3, [r7, #20] - 800c8e6: 0a1b lsrs r3, r3, #8 - 800c8e8: b2db uxtb r3, r3 - 800c8ea: 73bb strb r3, [r7, #14] - data.moduleCurrentTotal[3] = (current_ma >> 0) & 0xFF; - 800c8ec: 697b ldr r3, [r7, #20] - 800c8ee: b2db uxtb r3, r3 - 800c8f0: 73fb strb r3, [r7, #15] - - data.moduleVoltage[0] = (voltage_mv >> 24) & 0xFF; - 800c8f2: 693b ldr r3, [r7, #16] - 800c8f4: 0e1b lsrs r3, r3, #24 - 800c8f6: b2db uxtb r3, r3 - 800c8f8: 723b strb r3, [r7, #8] - data.moduleVoltage[1] = (voltage_mv >> 16) & 0xFF; - 800c8fa: 693b ldr r3, [r7, #16] - 800c8fc: 0c1b lsrs r3, r3, #16 - 800c8fe: b2db uxtb r3, r3 - 800c900: 727b strb r3, [r7, #9] - data.moduleVoltage[2] = (voltage_mv >> 8) & 0xFF; - 800c902: 693b ldr r3, [r7, #16] - 800c904: 0a1b lsrs r3, r3, #8 - 800c906: b2db uxtb r3, r3 - 800c908: 72bb strb r3, [r7, #10] - data.moduleVoltage[3] = (voltage_mv >> 0) & 0xFF; - 800c90a: 693b ldr r3, [r7, #16] - 800c90c: b2db uxtb r3, r3 - 800c90e: 72fb strb r3, [r7, #11] - - PSU_SendCmd(0xF0, addr, 0x1C, &data); - 800c910: 79f9 ldrb r1, [r7, #7] - 800c912: f107 0308 add.w r3, r7, #8 - 800c916: 221c movs r2, #28 - 800c918: 20f0 movs r0, #240 @ 0xf0 - 800c91a: f000 f807 bl 800c92c - 800c91e: e000 b.n 800c922 - if(addr != 0) return; - 800c920: bf00 nop - -} - 800c922: 3718 adds r7, #24 - 800c924: 46bd mov sp, r7 - 800c926: bd80 pop {r7, pc} - 800c928: 20000a14 .word 0x20000a14 - -0800c92c : - -void PSU_SendCmd(uint8_t source, uint8_t destination, uint8_t cmd, void *data){ - 800c92c: b580 push {r7, lr} - 800c92e: b08c sub sp, #48 @ 0x30 - 800c930: af00 add r7, sp, #0 - 800c932: 603b str r3, [r7, #0] - 800c934: 4603 mov r3, r0 - 800c936: 71fb strb r3, [r7, #7] - 800c938: 460b mov r3, r1 - 800c93a: 71bb strb r3, [r7, #6] - 800c93c: 4613 mov r3, r2 - 800c93e: 717b strb r3, [r7, #5] - CanId_t CanId; - CanId.source = source; - 800c940: 79fb ldrb r3, [r7, #7] - 800c942: f887 3028 strb.w r3, [r7, #40] @ 0x28 - CanId.destination = destination; - 800c946: 79bb ldrb r3, [r7, #6] - 800c948: f887 3029 strb.w r3, [r7, #41] @ 0x29 - CanId.command = cmd; - 800c94c: 797b ldrb r3, [r7, #5] - 800c94e: f003 033f and.w r3, r3, #63 @ 0x3f - 800c952: b2da uxtb r2, r3 - 800c954: f897 302a ldrb.w r3, [r7, #42] @ 0x2a - 800c958: f362 0305 bfi r3, r2, #0, #6 - 800c95c: f887 302a strb.w r3, [r7, #42] @ 0x2a - CanId.device = 0x0A; - 800c960: 8d7b ldrh r3, [r7, #42] @ 0x2a - 800c962: 220a movs r2, #10 - 800c964: f362 1389 bfi r3, r2, #6, #4 - 800c968: 857b strh r3, [r7, #42] @ 0x2a - - int8_t retry_counter = 10; - 800c96a: 230a movs r3, #10 - 800c96c: f887 302f strb.w r3, [r7, #47] @ 0x2f - CAN_TxHeaderTypeDef tx_header; - uint32_t tx_mailbox; - HAL_StatusTypeDef CAN_result; - - memcpy(&tx_header.ExtId, &CanId, sizeof(CanId_t)); - 800c970: 6abb ldr r3, [r7, #40] @ 0x28 - 800c972: 617b str r3, [r7, #20] - - tx_header.RTR = CAN_RTR_DATA; - 800c974: 2300 movs r3, #0 - 800c976: 61fb str r3, [r7, #28] - tx_header.IDE = CAN_ID_EXT; - 800c978: 2304 movs r3, #4 - 800c97a: 61bb str r3, [r7, #24] - tx_header.DLC = 8; - 800c97c: 2308 movs r3, #8 - 800c97e: 623b str r3, [r7, #32] - - while(retry_counter>0){ //если буфер полон, ждем пока он освободится - 800c980: e01e b.n 800c9c0 - if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan2) > 0){ - 800c982: 4814 ldr r0, [pc, #80] @ (800c9d4 ) - 800c984: f003 f816 bl 800f9b4 - 800c988: 4603 mov r3, r0 - 800c98a: 2b00 cmp r3, #0 - 800c98c: d00e beq.n 800c9ac - /* отправка сообщения */ - CAN_result = HAL_CAN_AddTxMessage(&hcan2, &tx_header, (uint8_t*)data, &tx_mailbox); - 800c98e: f107 030c add.w r3, r7, #12 - 800c992: f107 0110 add.w r1, r7, #16 - 800c996: 683a ldr r2, [r7, #0] - 800c998: 480e ldr r0, [pc, #56] @ (800c9d4 ) - 800c99a: f002 ff3c bl 800f816 - 800c99e: 4603 mov r3, r0 - 800c9a0: f887 302e strb.w r3, [r7, #46] @ 0x2e - - /* если отправка удалась, выход */ - if(CAN_result == HAL_OK) { - 800c9a4: f897 302e ldrb.w r3, [r7, #46] @ 0x2e - 800c9a8: 2b00 cmp r3, #0 - 800c9aa: d00e beq.n 800c9ca - return; - retry_counter = 0; - } - } - ED_Delay(1); - 800c9ac: 2001 movs r0, #1 - 800c9ae: f7ff fbed bl 800c18c - - retry_counter--; - 800c9b2: f997 302f ldrsb.w r3, [r7, #47] @ 0x2f - 800c9b6: b2db uxtb r3, r3 - 800c9b8: 3b01 subs r3, #1 - 800c9ba: b2db uxtb r3, r3 - 800c9bc: f887 302f strb.w r3, [r7, #47] @ 0x2f - while(retry_counter>0){ //если буфер полон, ждем пока он освободится - 800c9c0: f997 302f ldrsb.w r3, [r7, #47] @ 0x2f - 800c9c4: 2b00 cmp r3, #0 - 800c9c6: dcdc bgt.n 800c982 - 800c9c8: e000 b.n 800c9cc - return; - 800c9ca: bf00 nop - } - -} - 800c9cc: 3730 adds r7, #48 @ 0x30 - 800c9ce: 46bd mov sp, r7 - 800c9d0: bd80 pop {r7, pc} - 800c9d2: bf00 nop - 800c9d4: 200002cc .word 0x200002cc - -0800c9d8 : -uint32_t max(uint32_t a, uint32_t b){ - if(a>b) return a; - else return b; -} - -void PSU_ReadWrite(){ - 800c9d8: b580 push {r7, lr} - 800c9da: b082 sub sp, #8 - 800c9dc: af00 add r7, sp, #0 - - uint8_t zero_data[8] = {0,0,0,0,0,0,0,0}; - 800c9de: 463b mov r3, r7 - 800c9e0: 2200 movs r2, #0 - 800c9e2: 601a str r2, [r3, #0] - 800c9e4: 605a str r2, [r3, #4] - - PSU_SendCmd(0xF0, 0, 0x04, zero_data);ED_Delay(CAN_DELAY); - 800c9e6: 463b mov r3, r7 - 800c9e8: 2204 movs r2, #4 - 800c9ea: 2100 movs r1, #0 - 800c9ec: 20f0 movs r0, #240 @ 0xf0 - 800c9ee: f7ff ff9d bl 800c92c - 800c9f2: 2014 movs r0, #20 - 800c9f4: f7ff fbca bl 800c18c - PSU_SendCmd(0xF0, 0, 0x06, zero_data);ED_Delay(CAN_DELAY); - 800c9f8: 463b mov r3, r7 - 800c9fa: 2206 movs r2, #6 - 800c9fc: 2100 movs r1, #0 - 800c9fe: 20f0 movs r0, #240 @ 0xf0 - 800ca00: f7ff ff94 bl 800c92c - 800ca04: 2014 movs r0, #20 - 800ca06: f7ff fbc1 bl 800c18c - // PSU_SendCmd(0xF0, 0, 0x08, zero_data);ED_Delay(CAN_DELAY); - PSU_SendCmd(0xF0, 0, 0x09, zero_data);ED_Delay(CAN_DELAY); - 800ca0a: 463b mov r3, r7 - 800ca0c: 2209 movs r2, #9 - 800ca0e: 2100 movs r1, #0 - 800ca10: 20f0 movs r0, #240 @ 0xf0 - 800ca12: f7ff ff8b bl 800c92c - 800ca16: 2014 movs r0, #20 - 800ca18: f7ff fbb8 bl 800c18c - - // Power Limit - if ((CONN.WantedCurrent/10) * CONN.MeasuredVoltage > PSU0.power_limit){ - 800ca1c: 4b39 ldr r3, [pc, #228] @ (800cb04 ) - 800ca1e: f8b3 301b ldrh.w r3, [r3, #27] - 800ca22: b29b uxth r3, r3 - 800ca24: 4a38 ldr r2, [pc, #224] @ (800cb08 ) - 800ca26: fba2 2303 umull r2, r3, r2, r3 - 800ca2a: 08db lsrs r3, r3, #3 - 800ca2c: b29b uxth r3, r3 - 800ca2e: 461a mov r2, r3 - 800ca30: 4b34 ldr r3, [pc, #208] @ (800cb04 ) - 800ca32: f8b3 3013 ldrh.w r3, [r3, #19] - 800ca36: b29b uxth r3, r3 - 800ca38: fb02 f303 mul.w r3, r2, r3 - 800ca3c: 461a mov r2, r3 - 800ca3e: 4b33 ldr r3, [pc, #204] @ (800cb0c ) - 800ca40: 695b ldr r3, [r3, #20] - 800ca42: 429a cmp r2, r3 - 800ca44: d911 bls.n 800ca6a - CONN.RequestedCurrent = PSU0.power_limit * 10 / CONN.MeasuredVoltage; - 800ca46: 4b31 ldr r3, [pc, #196] @ (800cb0c ) - 800ca48: 695a ldr r2, [r3, #20] - 800ca4a: 4613 mov r3, r2 - 800ca4c: 009b lsls r3, r3, #2 - 800ca4e: 4413 add r3, r2 - 800ca50: 005b lsls r3, r3, #1 - 800ca52: 461a mov r2, r3 - 800ca54: 4b2b ldr r3, [pc, #172] @ (800cb04 ) - 800ca56: f8b3 3013 ldrh.w r3, [r3, #19] - 800ca5a: b29b uxth r3, r3 - 800ca5c: fbb2 f3f3 udiv r3, r2, r3 - 800ca60: b29a uxth r2, r3 - 800ca62: 4b28 ldr r3, [pc, #160] @ (800cb04 ) - 800ca64: f8a3 2011 strh.w r2, [r3, #17] - 800ca68: e006 b.n 800ca78 - }else{ - CONN.RequestedCurrent = CONN.WantedCurrent; - 800ca6a: 4b26 ldr r3, [pc, #152] @ (800cb04 ) - 800ca6c: f8b3 301b ldrh.w r3, [r3, #27] - 800ca70: b29a uxth r2, r3 - 800ca72: 4b24 ldr r3, [pc, #144] @ (800cb04 ) - 800ca74: f8a3 2011 strh.w r2, [r3, #17] - } - - if(CONN.RequestedCurrent > (PSU_MAX_CURRENT*10)){ - 800ca78: 4b22 ldr r3, [pc, #136] @ (800cb04 ) - 800ca7a: f8b3 3011 ldrh.w r3, [r3, #17] - 800ca7e: b29b uxth r3, r3 - 800ca80: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800ca84: d908 bls.n 800ca98 - CONN.RequestedCurrent = PSU_MAX_CURRENT*10; - 800ca86: 4b1f ldr r3, [pc, #124] @ (800cb04 ) - 800ca88: 2200 movs r2, #0 - 800ca8a: f062 0217 orn r2, r2, #23 - 800ca8e: 745a strb r2, [r3, #17] - 800ca90: 2200 movs r2, #0 - 800ca92: f042 0203 orr.w r2, r2, #3 - 800ca96: 749a strb r2, [r3, #18] - } - CONN.RequestedPower = CONN.RequestedCurrent * CONN.RequestedVoltage / 10; - 800ca98: 4b1a ldr r3, [pc, #104] @ (800cb04 ) - 800ca9a: f8b3 3011 ldrh.w r3, [r3, #17] - 800ca9e: b29b uxth r3, r3 - 800caa0: 461a mov r2, r3 - 800caa2: 4b18 ldr r3, [pc, #96] @ (800cb04 ) - 800caa4: f8b3 300f ldrh.w r3, [r3, #15] - 800caa8: b29b uxth r3, r3 - 800caaa: fb02 f303 mul.w r3, r2, r3 - 800caae: 4a18 ldr r2, [pc, #96] @ (800cb10 ) - 800cab0: fb82 1203 smull r1, r2, r2, r3 - 800cab4: 1092 asrs r2, r2, #2 - 800cab6: 17db asrs r3, r3, #31 - 800cab8: 1ad3 subs r3, r2, r3 - 800caba: 461a mov r2, r3 - 800cabc: 4b11 ldr r3, [pc, #68] @ (800cb04 ) - 800cabe: f8c3 200b str.w r2, [r3, #11] - - - if(PSU0.ready){ - 800cac2: 4b12 ldr r3, [pc, #72] @ (800cb0c ) - 800cac4: 7a5b ldrb r3, [r3, #9] - 800cac6: 2b00 cmp r3, #0 - 800cac8: d018 beq.n 800cafc - PSU_SetVoltageCurrent(0, CONN.RequestedVoltage, CONN.RequestedCurrent); // Normal mode - 800caca: 4b0e ldr r3, [pc, #56] @ (800cb04 ) - 800cacc: f8b3 300f ldrh.w r3, [r3, #15] - 800cad0: b29b uxth r3, r3 - 800cad2: 4a0c ldr r2, [pc, #48] @ (800cb04 ) - 800cad4: f8b2 2011 ldrh.w r2, [r2, #17] - 800cad8: b292 uxth r2, r2 - 800cada: 4619 mov r1, r3 - 800cadc: 2000 movs r0, #0 - 800cade: f7ff fecb bl 800c878 - ED_Delay(CAN_DELAY); - 800cae2: 2014 movs r0, #20 - 800cae4: f7ff fb52 bl 800c18c - if(CONN.MeasuredVoltage>490) PSU0.hv_mode = 1; - 800cae8: 4b06 ldr r3, [pc, #24] @ (800cb04 ) - 800caea: f8b3 3013 ldrh.w r3, [r3, #19] - 800caee: b29b uxth r3, r3 - 800caf0: f5b3 7ff5 cmp.w r3, #490 @ 0x1ea - 800caf4: d902 bls.n 800cafc - 800caf6: 4b05 ldr r3, [pc, #20] @ (800cb0c ) - 800caf8: 2201 movs r2, #1 - 800cafa: 761a strb r2, [r3, #24] - } - - // PSU_SetHVMode(0, PSU0.hv_mode); // auto set, no need - // ED_Delay(CAN_DELAY); - -} - 800cafc: bf00 nop - 800cafe: 3708 adds r7, #8 - 800cb00: 46bd mov sp, r7 - 800cb02: bd80 pop {r7, pc} - 800cb04: 200002f8 .word 0x200002f8 - 800cb08: cccccccd .word 0xcccccccd - 800cb0c: 20000a14 .word 0x20000a14 - 800cb10: 66666667 .word 0x66666667 - -0800cb14 : - -void PSU_Task(void){ - 800cb14: b598 push {r3, r4, r7, lr} - 800cb16: af00 add r7, sp, #0 - static uint32_t psu_on_tick = 0; - static uint32_t dc_on_tick = 0; - static uint32_t cont_ok_tick = 0; - - // Обновляем ONLINE/READY по таймауту - if((HAL_GetTick() - can_lastpacket) > PSU_ONLINE_TIMEOUT){ - 800cb18: f001 fee0 bl 800e8dc - 800cb1c: 4602 mov r2, r0 - 800cb1e: 4bb4 ldr r3, [pc, #720] @ (800cdf0 ) - 800cb20: 681b ldr r3, [r3, #0] - 800cb22: 1ad3 subs r3, r2, r3 - 800cb24: f5b3 7ffa cmp.w r3, #500 @ 0x1f4 - 800cb28: d920 bls.n 800cb6c - PSU0.online = 0; - 800cb2a: 4bb2 ldr r3, [pc, #712] @ (800cdf4 ) - 800cb2c: 2200 movs r2, #0 - 800cb2e: 721a strb r2, [r3, #8] - PSU0.PSU_enabled = 0; - 800cb30: 4bb0 ldr r3, [pc, #704] @ (800cdf4 ) - 800cb32: 2200 movs r2, #0 - 800cb34: 729a strb r2, [r3, #10] - PSU_04.moduleTemperature = 0; - 800cb36: 4bb0 ldr r3, [pc, #704] @ (800cdf8 ) - 800cb38: 2200 movs r2, #0 - 800cb3a: 711a strb r2, [r3, #4] - PSU_04.modularForm0 = 0; - 800cb3c: 4bae ldr r3, [pc, #696] @ (800cdf8 ) - 800cb3e: 2200 movs r2, #0 - 800cb40: 721a strb r2, [r3, #8] - PSU_04.modularForm1 = 0; - 800cb42: 4bad ldr r3, [pc, #692] @ (800cdf8 ) - 800cb44: 2200 movs r2, #0 - 800cb46: 71da strb r2, [r3, #7] - PSU_04.modularForm2 = 0; - 800cb48: 4bab ldr r3, [pc, #684] @ (800cdf8 ) - 800cb4a: 2200 movs r2, #0 - 800cb4c: 719a strb r2, [r3, #6] - PSU_06.VAB = 0; - 800cb4e: 4bab ldr r3, [pc, #684] @ (800cdfc ) - 800cb50: 2200 movs r2, #0 - 800cb52: 609a str r2, [r3, #8] - PSU_06.VBC = 0; - 800cb54: 4ba9 ldr r3, [pc, #676] @ (800cdfc ) - 800cb56: 2200 movs r2, #0 - 800cb58: 60da str r2, [r3, #12] - PSU_06.VCA = 0; - 800cb5a: 4ba8 ldr r3, [pc, #672] @ (800cdfc ) - 800cb5c: 2200 movs r2, #0 - 800cb5e: 611a str r2, [r3, #16] - PSU_09.moduleNCurrent = 0; - 800cb60: 4ba7 ldr r3, [pc, #668] @ (800ce00 ) - 800cb62: 2200 movs r2, #0 - 800cb64: 60da str r2, [r3, #12] - PSU_09.moduleNVoltage = 0; - 800cb66: 4ba6 ldr r3, [pc, #664] @ (800ce00 ) - 800cb68: 2200 movs r2, #0 - 800cb6a: 609a str r2, [r3, #8] - } - if(!PSU0.online || !PSU0.enableAC){ - 800cb6c: 4ba1 ldr r3, [pc, #644] @ (800cdf4 ) - 800cb6e: 7a1b ldrb r3, [r3, #8] - 800cb70: 2b00 cmp r3, #0 - 800cb72: d003 beq.n 800cb7c - 800cb74: 4b9f ldr r3, [pc, #636] @ (800cdf4 ) - 800cb76: 781b ldrb r3, [r3, #0] - 800cb78: 2b00 cmp r3, #0 - 800cb7a: d10c bne.n 800cb96 - CONN.MeasuredVoltage = 0; - 800cb7c: 4ba1 ldr r3, [pc, #644] @ (800ce04 ) - 800cb7e: 2200 movs r2, #0 - 800cb80: 74da strb r2, [r3, #19] - 800cb82: 2200 movs r2, #0 - 800cb84: 751a strb r2, [r3, #20] - CONN.MeasuredCurrent = 0; - 800cb86: 4b9f ldr r3, [pc, #636] @ (800ce04 ) - 800cb88: 2200 movs r2, #0 - 800cb8a: 755a strb r2, [r3, #21] - 800cb8c: 2200 movs r2, #0 - 800cb8e: 759a strb r2, [r3, #22] - CONN.outputEnabled = 0; - 800cb90: 4b9c ldr r3, [pc, #624] @ (800ce04 ) - 800cb92: 2200 movs r2, #0 - 800cb94: 761a strb r2, [r3, #24] - } - - // Управление AC-контактором с задержкой отключения 1 минута - if(CONN.EvConnected){ - 800cb96: 4b9b ldr r3, [pc, #620] @ (800ce04 ) - 800cb98: 7f9b ldrb r3, [r3, #30] - 800cb9a: 2b00 cmp r3, #0 - 800cb9c: d00c beq.n 800cbb8 - RELAY_Write(RELAY_AC, 1); - 800cb9e: 2101 movs r1, #1 - 800cba0: 2004 movs r0, #4 - 800cba2: f7fc fda3 bl 80096ec - psu_on_tick = HAL_GetTick(); - 800cba6: f001 fe99 bl 800e8dc - 800cbaa: 4603 mov r3, r0 - 800cbac: 4a96 ldr r2, [pc, #600] @ (800ce08 ) - 800cbae: 6013 str r3, [r2, #0] - PSU0.enableAC = 1; - 800cbb0: 4b90 ldr r3, [pc, #576] @ (800cdf4 ) - 800cbb2: 2201 movs r2, #1 - 800cbb4: 701a strb r2, [r3, #0] - 800cbb6: e010 b.n 800cbda - }else{ - if((HAL_GetTick() - psu_on_tick) > 1 * 60000){ - 800cbb8: f001 fe90 bl 800e8dc - 800cbbc: 4602 mov r2, r0 - 800cbbe: 4b92 ldr r3, [pc, #584] @ (800ce08 ) - 800cbc0: 681b ldr r3, [r3, #0] - 800cbc2: 1ad3 subs r3, r2, r3 - 800cbc4: f64e 2260 movw r2, #60000 @ 0xea60 - 800cbc8: 4293 cmp r3, r2 - 800cbca: d906 bls.n 800cbda - RELAY_Write(RELAY_AC, 0); - 800cbcc: 2100 movs r1, #0 - 800cbce: 2004 movs r0, #4 - 800cbd0: f7fc fd8c bl 80096ec - PSU0.enableAC = 0; - 800cbd4: 4b87 ldr r3, [pc, #540] @ (800cdf4 ) - 800cbd6: 2200 movs r2, #0 - 800cbd8: 701a strb r2, [r3, #0] - } - } - - // Текущее состояние DC-контактора по обратной связи - PSU0.CONT_enabled = IN_ReadInput(IN_CONT_FB_DC); - 800cbda: 2005 movs r0, #5 - 800cbdc: f7fc fdfa bl 80097d4 - 800cbe0: 4603 mov r3, r0 - 800cbe2: 461a mov r2, r3 - 800cbe4: 4b83 ldr r3, [pc, #524] @ (800cdf4 ) - 800cbe6: 72da strb r2, [r3, #11] - - // Обновляем ready с учётом ошибок - if(PSU0.online && !PSU0.cont_fault && PSU0.enableAC){ - 800cbe8: 4b82 ldr r3, [pc, #520] @ (800cdf4 ) - 800cbea: 7a1b ldrb r3, [r3, #8] - 800cbec: 2b00 cmp r3, #0 - 800cbee: d007 beq.n 800cc00 - 800cbf0: 4b80 ldr r3, [pc, #512] @ (800cdf4 ) - 800cbf2: 7b1b ldrb r3, [r3, #12] - 800cbf4: 2b00 cmp r3, #0 - 800cbf6: d103 bne.n 800cc00 - 800cbf8: 4b7e ldr r3, [pc, #504] @ (800cdf4 ) - 800cbfa: 781b ldrb r3, [r3, #0] - 800cbfc: 2b00 cmp r3, #0 - 800cbfe: d102 bne.n 800cc06 - // PSU0.ready = 1; - }else{ - PSU0.ready = 0; - 800cc00: 4b7c ldr r3, [pc, #496] @ (800cdf4 ) - 800cc02: 2200 movs r2, #0 - 800cc04: 725a strb r2, [r3, #9] - } - - switch(PSU0.state){ - 800cc06: 4b7b ldr r3, [pc, #492] @ (800cdf4 ) - 800cc08: 79db ldrb r3, [r3, #7] - 800cc0a: 2b09 cmp r3, #9 - 800cc0c: f200 8155 bhi.w 800ceba - 800cc10: a201 add r2, pc, #4 @ (adr r2, 800cc18 ) - 800cc12: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800cc16: bf00 nop - 800cc18: 0800cc41 .word 0x0800cc41 - 800cc1c: 0800cc75 .word 0x0800cc75 - 800cc20: 0800cc91 .word 0x0800cc91 - 800cc24: 0800ccc9 .word 0x0800ccc9 - 800cc28: 0800cd17 .word 0x0800cd17 - 800cc2c: 0800cd59 .word 0x0800cd59 - 800cc30: 0800cdc3 .word 0x0800cdc3 - 800cc34: 0800ce6d .word 0x0800ce6d - 800cc38: 0800ce1d .word 0x0800ce1d - 800cc3c: 0800cea7 .word 0x0800cea7 - case PSU_UNREADY: - PSU0.enableOutput = 0; - 800cc40: 4b6c ldr r3, [pc, #432] @ (800cdf4 ) - 800cc42: 2200 movs r2, #0 - 800cc44: 705a strb r2, [r3, #1] - RELAY_Write(RELAY_DC, 0); - 800cc46: 2100 movs r1, #0 - 800cc48: 2003 movs r0, #3 - 800cc4a: f7fc fd4f bl 80096ec - if(PSU0.online && PSU0.enableAC && !PSU0.cont_fault){ - 800cc4e: 4b69 ldr r3, [pc, #420] @ (800cdf4 ) - 800cc50: 7a1b ldrb r3, [r3, #8] - 800cc52: 2b00 cmp r3, #0 - 800cc54: f000 8135 beq.w 800cec2 - 800cc58: 4b66 ldr r3, [pc, #408] @ (800cdf4 ) - 800cc5a: 781b ldrb r3, [r3, #0] - 800cc5c: 2b00 cmp r3, #0 - 800cc5e: f000 8130 beq.w 800cec2 - 800cc62: 4b64 ldr r3, [pc, #400] @ (800cdf4 ) - 800cc64: 7b1b ldrb r3, [r3, #12] - 800cc66: 2b00 cmp r3, #0 - 800cc68: f040 812b bne.w 800cec2 - PSU_SwitchState(PSU_INITIALIZING); - 800cc6c: 2001 movs r0, #1 - 800cc6e: f7ff fc2b bl 800c4c8 - } - break; - 800cc72: e126 b.n 800cec2 - - case PSU_INITIALIZING: - if(PSU_StateTime() > 4000){ // Wait 4s for PSU to initialize - 800cc74: f7ff fc3c bl 800c4f0 - 800cc78: 4603 mov r3, r0 - 800cc7a: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 - 800cc7e: f240 8122 bls.w 800cec6 - PSU0.ready = 1; - 800cc82: 4b5c ldr r3, [pc, #368] @ (800cdf4 ) - 800cc84: 2201 movs r2, #1 - 800cc86: 725a strb r2, [r3, #9] - PSU_SwitchState(PSU_READY); - 800cc88: 2002 movs r0, #2 - 800cc8a: f7ff fc1d bl 800c4c8 - } - break; - 800cc8e: e11a b.n 800cec6 - - case PSU_READY: - // модуль готов, но выключен - PSU0.hv_mode = 0; - 800cc90: 4b58 ldr r3, [pc, #352] @ (800cdf4 ) - 800cc92: 2200 movs r2, #0 - 800cc94: 761a strb r2, [r3, #24] - - RELAY_Write(RELAY_DC, 0); - 800cc96: 2100 movs r1, #0 - 800cc98: 2003 movs r0, #3 - 800cc9a: f7fc fd27 bl 80096ec - if(!PSU0.ready){ - 800cc9e: 4b55 ldr r3, [pc, #340] @ (800cdf4 ) - 800cca0: 7a5b ldrb r3, [r3, #9] - 800cca2: 2b00 cmp r3, #0 - 800cca4: d103 bne.n 800ccae - PSU_SwitchState(PSU_UNREADY); - 800cca6: 2000 movs r0, #0 - 800cca8: f7ff fc0e bl 800c4c8 - break; - 800ccac: e11c b.n 800cee8 - } - if(CONN.EnableOutput){ - 800ccae: 4b55 ldr r3, [pc, #340] @ (800ce04 ) - 800ccb0: 7ddb ldrb r3, [r3, #23] - 800ccb2: 2b00 cmp r3, #0 - 800ccb4: f000 8109 beq.w 800ceca - PSU_Enable(0, 1); - 800ccb8: 2101 movs r1, #1 - 800ccba: 2000 movs r0, #0 - 800ccbc: f7ff fdac bl 800c818 - PSU_SwitchState(PSU_WAIT_ACK_ON); - 800ccc0: 2003 movs r0, #3 - 800ccc2: f7ff fc01 bl 800c4c8 - } - break; - 800ccc6: e100 b.n 800ceca - - case PSU_WAIT_ACK_ON: - - if(PSU0.PSU_enabled && PSU0.ready){ - 800ccc8: 4b4a ldr r3, [pc, #296] @ (800cdf4 ) - 800ccca: 7a9b ldrb r3, [r3, #10] - 800cccc: 2b00 cmp r3, #0 - 800ccce: d00c beq.n 800ccea - 800ccd0: 4b48 ldr r3, [pc, #288] @ (800cdf4 ) - 800ccd2: 7a5b ldrb r3, [r3, #9] - 800ccd4: 2b00 cmp r3, #0 - 800ccd6: d008 beq.n 800ccea - dc_on_tick = HAL_GetTick(); - 800ccd8: f001 fe00 bl 800e8dc - 800ccdc: 4603 mov r3, r0 - 800ccde: 4a4b ldr r2, [pc, #300] @ (800ce0c ) - 800cce0: 6013 str r3, [r2, #0] - PSU_SwitchState(PSU_CONT_WAIT_ACK_ON); - 800cce2: 2004 movs r0, #4 - 800cce4: f7ff fbf0 bl 800c4c8 - PSU0.psu_fault = 1; - CONN.chargingError = CONN_ERR_PSU_FAULT; - PSU_SwitchState(PSU_UNREADY); - log_printf(LOG_ERR, "PSU on timeout\n"); - } - break; - 800cce8: e0f1 b.n 800cece - }else if(PSU_StateTime() > 10000){ - 800ccea: f7ff fc01 bl 800c4f0 - 800ccee: 4603 mov r3, r0 - 800ccf0: f242 7210 movw r2, #10000 @ 0x2710 - 800ccf4: 4293 cmp r3, r2 - 800ccf6: f240 80ea bls.w 800cece - PSU0.psu_fault = 1; - 800ccfa: 4b3e ldr r3, [pc, #248] @ (800cdf4 ) - 800ccfc: 2201 movs r2, #1 - 800ccfe: 735a strb r2, [r3, #13] - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800cd00: 4b40 ldr r3, [pc, #256] @ (800ce04 ) - 800cd02: 220a movs r2, #10 - 800cd04: 775a strb r2, [r3, #29] - PSU_SwitchState(PSU_UNREADY); - 800cd06: 2000 movs r0, #0 - 800cd08: f7ff fbde bl 800c4c8 - log_printf(LOG_ERR, "PSU on timeout\n"); - 800cd0c: 4940 ldr r1, [pc, #256] @ (800ce10 ) - 800cd0e: 2004 movs r0, #4 - 800cd10: f7fe fc28 bl 800b564 - break; - 800cd14: e0db b.n 800cece - - case PSU_CONT_WAIT_ACK_ON: - // замыкаем DC-контактор и ждём подтверждение - RELAY_Write(RELAY_DC, 1); - 800cd16: 2101 movs r1, #1 - 800cd18: 2003 movs r0, #3 - 800cd1a: f7fc fce7 bl 80096ec - if(PSU0.CONT_enabled){ - 800cd1e: 4b35 ldr r3, [pc, #212] @ (800cdf4 ) - 800cd20: 7adb ldrb r3, [r3, #11] - 800cd22: 2b00 cmp r3, #0 - 800cd24: d003 beq.n 800cd2e - PSU_SwitchState(PSU_CONNECTED); - 800cd26: 2005 movs r0, #5 - 800cd28: f7ff fbce bl 800c4c8 - PSU0.cont_fault = 1; - CONN.chargingError = CONN_ERR_CONTACTOR; - PSU_SwitchState(PSU_CURRENT_DROP); - log_printf(LOG_ERR, "Contactor error, stopping...\n"); - } - break; - 800cd2c: e0d1 b.n 800ced2 - }else if(PSU_StateTime() > 1000){ - 800cd2e: f7ff fbdf bl 800c4f0 - 800cd32: 4603 mov r3, r0 - 800cd34: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800cd38: f240 80cb bls.w 800ced2 - PSU0.cont_fault = 1; - 800cd3c: 4b2d ldr r3, [pc, #180] @ (800cdf4 ) - 800cd3e: 2201 movs r2, #1 - 800cd40: 731a strb r2, [r3, #12] - CONN.chargingError = CONN_ERR_CONTACTOR; - 800cd42: 4b30 ldr r3, [pc, #192] @ (800ce04 ) - 800cd44: 2207 movs r2, #7 - 800cd46: 775a strb r2, [r3, #29] - PSU_SwitchState(PSU_CURRENT_DROP); - 800cd48: 2006 movs r0, #6 - 800cd4a: f7ff fbbd bl 800c4c8 - log_printf(LOG_ERR, "Contactor error, stopping...\n"); - 800cd4e: 4931 ldr r1, [pc, #196] @ (800ce14 ) - 800cd50: 2004 movs r0, #4 - 800cd52: f7fe fc07 bl 800b564 - break; - 800cd56: e0bc b.n 800ced2 - - case PSU_CONNECTED: - // Основное рабочее состояние - if(!CONN.EnableOutput || !PSU0.ready){ - 800cd58: 4b2a ldr r3, [pc, #168] @ (800ce04 ) - 800cd5a: 7ddb ldrb r3, [r3, #23] - 800cd5c: 2b00 cmp r3, #0 - 800cd5e: d003 beq.n 800cd68 - 800cd60: 4b24 ldr r3, [pc, #144] @ (800cdf4 ) - 800cd62: 7a5b ldrb r3, [r3, #9] - 800cd64: 2b00 cmp r3, #0 - 800cd66: d103 bne.n 800cd70 - PSU_SwitchState(PSU_CURRENT_DROP); - 800cd68: 2006 movs r0, #6 - 800cd6a: f7ff fbad bl 800c4c8 - break; - 800cd6e: e0bb b.n 800cee8 - } - // контроль контактора: 1 c таймаут - if (IN_ReadInput(IN_CONT_FB_DC) != RELAY_Read(RELAY_DC)){ - 800cd70: 2005 movs r0, #5 - 800cd72: f7fc fd2f bl 80097d4 - 800cd76: 4603 mov r3, r0 - 800cd78: 461c mov r4, r3 - 800cd7a: 2003 movs r0, #3 - 800cd7c: f7fc fd1a bl 80097b4 - 800cd80: 4603 mov r3, r0 - 800cd82: 429c cmp r4, r3 - 800cd84: d017 beq.n 800cdb6 - if((HAL_GetTick() - cont_ok_tick) > 1000){ - 800cd86: f001 fda9 bl 800e8dc - 800cd8a: 4602 mov r2, r0 - 800cd8c: 4b22 ldr r3, [pc, #136] @ (800ce18 ) - 800cd8e: 681b ldr r3, [r3, #0] - 800cd90: 1ad3 subs r3, r2, r3 - 800cd92: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800cd96: f240 809e bls.w 800ced6 - CONN.chargingError = CONN_ERR_CONTACTOR; - 800cd9a: 4b1a ldr r3, [pc, #104] @ (800ce04 ) - 800cd9c: 2207 movs r2, #7 - 800cd9e: 775a strb r2, [r3, #29] - PSU0.cont_fault = 1; - 800cda0: 4b14 ldr r3, [pc, #80] @ (800cdf4 ) - 800cda2: 2201 movs r2, #1 - 800cda4: 731a strb r2, [r3, #12] - PSU_SwitchState(PSU_CURRENT_DROP); - 800cda6: 2006 movs r0, #6 - 800cda8: f7ff fb8e bl 800c4c8 - log_printf(LOG_ERR, "Contactor error, stopping...\n"); - 800cdac: 4919 ldr r1, [pc, #100] @ (800ce14 ) - 800cdae: 2004 movs r0, #4 - 800cdb0: f7fe fbd8 bl 800b564 - } - }else{ - cont_ok_tick = HAL_GetTick(); - } - break; - 800cdb4: e08f b.n 800ced6 - cont_ok_tick = HAL_GetTick(); - 800cdb6: f001 fd91 bl 800e8dc - 800cdba: 4603 mov r3, r0 - 800cdbc: 4a16 ldr r2, [pc, #88] @ (800ce18 ) - 800cdbe: 6013 str r3, [r2, #0] - break; - 800cdc0: e089 b.n 800ced6 - - case PSU_CURRENT_DROP: - // снижаем ток до нуля перед отключением DC - CONN.RequestedCurrent = 0; - 800cdc2: 4b10 ldr r3, [pc, #64] @ (800ce04 ) - 800cdc4: 2200 movs r2, #0 - 800cdc6: 745a strb r2, [r3, #17] - 800cdc8: 2200 movs r2, #0 - 800cdca: 749a strb r2, [r3, #18] - - // если ток действительно упал или вышло время, отключаем DC - if((CONN.MeasuredCurrent < 30) || (PSU_StateTime() > 5000)){ - 800cdcc: 4b0d ldr r3, [pc, #52] @ (800ce04 ) - 800cdce: f8b3 3015 ldrh.w r3, [r3, #21] - 800cdd2: b29b uxth r3, r3 - 800cdd4: 2b1d cmp r3, #29 - 800cdd6: d906 bls.n 800cde6 - 800cdd8: f7ff fb8a bl 800c4f0 - 800cddc: 4603 mov r3, r0 - 800cdde: f241 3288 movw r2, #5000 @ 0x1388 - 800cde2: 4293 cmp r3, r2 - 800cde4: d979 bls.n 800ceda - PSU_SwitchState(PSU_CONT_WAIT_ACK_OFF); - 800cde6: 2008 movs r0, #8 - 800cde8: f7ff fb6e bl 800c4c8 - } - break; - 800cdec: e075 b.n 800ceda - 800cdee: bf00 nop - 800cdf0: 20000a38 .word 0x20000a38 - 800cdf4: 20000a14 .word 0x20000a14 - 800cdf8: 200009dc .word 0x200009dc - 800cdfc: 200009e8 .word 0x200009e8 - 800ce00: 20000a04 .word 0x20000a04 - 800ce04: 200002f8 .word 0x200002f8 - 800ce08: 20000a60 .word 0x20000a60 - 800ce0c: 20000a64 .word 0x20000a64 - 800ce10: 08016c94 .word 0x08016c94 - 800ce14: 08016ca4 .word 0x08016ca4 - 800ce18: 20000a68 .word 0x20000a68 - - case PSU_CONT_WAIT_ACK_OFF: - RELAY_Write(RELAY_DC, 0); - 800ce1c: 2100 movs r1, #0 - 800ce1e: 2003 movs r0, #3 - 800ce20: f7fc fc64 bl 80096ec - if(!PSU0.CONT_enabled){ - 800ce24: 4b31 ldr r3, [pc, #196] @ (800ceec ) - 800ce26: 7adb ldrb r3, [r3, #11] - 800ce28: 2b00 cmp r3, #0 - 800ce2a: d107 bne.n 800ce3c - PSU_Enable(0, 0); - 800ce2c: 2100 movs r1, #0 - 800ce2e: 2000 movs r0, #0 - 800ce30: f7ff fcf2 bl 800c818 - PSU_SwitchState(PSU_WAIT_ACK_OFF); - 800ce34: 2007 movs r0, #7 - 800ce36: f7ff fb47 bl 800c4c8 - CONN.chargingError = CONN_ERR_CONTACTOR; - PSU_Enable(0, 0); - PSU_SwitchState(PSU_WAIT_ACK_OFF); - log_printf(LOG_ERR, "Contactor error, stopping...\n"); - } - break; - 800ce3a: e050 b.n 800cede - }else if(PSU_StateTime() > 1000){ - 800ce3c: f7ff fb58 bl 800c4f0 - 800ce40: 4603 mov r3, r0 - 800ce42: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800ce46: d94a bls.n 800cede - PSU0.cont_fault = 1; - 800ce48: 4b28 ldr r3, [pc, #160] @ (800ceec ) - 800ce4a: 2201 movs r2, #1 - 800ce4c: 731a strb r2, [r3, #12] - CONN.chargingError = CONN_ERR_CONTACTOR; - 800ce4e: 4b28 ldr r3, [pc, #160] @ (800cef0 ) - 800ce50: 2207 movs r2, #7 - 800ce52: 775a strb r2, [r3, #29] - PSU_Enable(0, 0); - 800ce54: 2100 movs r1, #0 - 800ce56: 2000 movs r0, #0 - 800ce58: f7ff fcde bl 800c818 - PSU_SwitchState(PSU_WAIT_ACK_OFF); - 800ce5c: 2007 movs r0, #7 - 800ce5e: f7ff fb33 bl 800c4c8 - log_printf(LOG_ERR, "Contactor error, stopping...\n"); - 800ce62: 4924 ldr r1, [pc, #144] @ (800cef4 ) - 800ce64: 2004 movs r0, #4 - 800ce66: f7fe fb7d bl 800b564 - break; - 800ce6a: e038 b.n 800cede - - case PSU_WAIT_ACK_OFF: - if(!PSU0.PSU_enabled){ - 800ce6c: 4b1f ldr r3, [pc, #124] @ (800ceec ) - 800ce6e: 7a9b ldrb r3, [r3, #10] - 800ce70: 2b00 cmp r3, #0 - 800ce72: d103 bne.n 800ce7c - PSU_SwitchState(PSU_OFF_PAUSE); - 800ce74: 2009 movs r0, #9 - 800ce76: f7ff fb27 bl 800c4c8 - PSU0.psu_fault = 1; - CONN.chargingError = CONN_ERR_PSU_FAULT; - PSU_SwitchState(PSU_UNREADY); - log_printf(LOG_ERR, "PSU off timeout\n"); - } - break; - 800ce7a: e032 b.n 800cee2 - }else if(PSU_StateTime() > 10000){ - 800ce7c: f7ff fb38 bl 800c4f0 - 800ce80: 4603 mov r3, r0 - 800ce82: f242 7210 movw r2, #10000 @ 0x2710 - 800ce86: 4293 cmp r3, r2 - 800ce88: d92b bls.n 800cee2 - PSU0.psu_fault = 1; - 800ce8a: 4b18 ldr r3, [pc, #96] @ (800ceec ) - 800ce8c: 2201 movs r2, #1 - 800ce8e: 735a strb r2, [r3, #13] - CONN.chargingError = CONN_ERR_PSU_FAULT; - 800ce90: 4b17 ldr r3, [pc, #92] @ (800cef0 ) - 800ce92: 220a movs r2, #10 - 800ce94: 775a strb r2, [r3, #29] - PSU_SwitchState(PSU_UNREADY); - 800ce96: 2000 movs r0, #0 - 800ce98: f7ff fb16 bl 800c4c8 - log_printf(LOG_ERR, "PSU off timeout\n"); - 800ce9c: 4916 ldr r1, [pc, #88] @ (800cef8 ) - 800ce9e: 2004 movs r0, #4 - 800cea0: f7fe fb60 bl 800b564 - break; - 800cea4: e01d b.n 800cee2 - case PSU_OFF_PAUSE: - if(PSU_StateTime() > 4000){ - 800cea6: f7ff fb23 bl 800c4f0 - 800ceaa: 4603 mov r3, r0 - 800ceac: f5b3 6f7a cmp.w r3, #4000 @ 0xfa0 - 800ceb0: d919 bls.n 800cee6 - PSU_SwitchState(PSU_READY); - 800ceb2: 2002 movs r0, #2 - 800ceb4: f7ff fb08 bl 800c4c8 - } - break; - 800ceb8: e015 b.n 800cee6 - - - - default: - PSU_SwitchState(PSU_UNREADY); - 800ceba: 2000 movs r0, #0 - 800cebc: f7ff fb04 bl 800c4c8 - break; - 800cec0: e012 b.n 800cee8 - break; - 800cec2: bf00 nop - 800cec4: e010 b.n 800cee8 - break; - 800cec6: bf00 nop - 800cec8: e00e b.n 800cee8 - break; - 800ceca: bf00 nop - 800cecc: e00c b.n 800cee8 - break; - 800cece: bf00 nop - 800ced0: e00a b.n 800cee8 - break; - 800ced2: bf00 nop - 800ced4: e008 b.n 800cee8 - break; - 800ced6: bf00 nop - 800ced8: e006 b.n 800cee8 - break; - 800ceda: bf00 nop - 800cedc: e004 b.n 800cee8 - break; - 800cede: bf00 nop - 800cee0: e002 b.n 800cee8 - break; - 800cee2: bf00 nop - 800cee4: e000 b.n 800cee8 - break; - 800cee6: bf00 nop - } -} - 800cee8: bf00 nop - 800ceea: bd98 pop {r3, r4, r7, pc} - 800ceec: 20000a14 .word 0x20000a14 - 800cef0: 200002f8 .word 0x200002f8 - 800cef4: 08016ca4 .word 0x08016ca4 - 800cef8: 08016cc4 .word 0x08016cc4 - -0800cefc : - .Th = 10, - .Tf = 50, - .Tl = 0, -}; - -void LED_Write(){ - 800cefc: b580 push {r7, lr} - 800cefe: af00 add r7, sp, #0 - if(CONN.chargingError != CONN_NO_ERROR){ - 800cf00: 4b34 ldr r3, [pc, #208] @ (800cfd4 ) - 800cf02: 7f5b ldrb r3, [r3, #29] - 800cf04: 2b00 cmp r3, #0 - 800cf06: d003 beq.n 800cf10 - LED_SetColor(&color_error); - 800cf08: 4833 ldr r0, [pc, #204] @ (800cfd8 ) - 800cf0a: f000 f91f bl 800d14c - return; - 800cf0e: e05f b.n 800cfd0 - } - switch(CONN.connState){ - 800cf10: 4b30 ldr r3, [pc, #192] @ (800cfd4 ) - 800cf12: 785b ldrb r3, [r3, #1] - 800cf14: 2b0d cmp r3, #13 - 800cf16: d857 bhi.n 800cfc8 - 800cf18: a201 add r2, pc, #4 @ (adr r2, 800cf20 ) - 800cf1a: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800cf1e: bf00 nop - 800cf20: 0800cf59 .word 0x0800cf59 - 800cf24: 0800cf61 .word 0x0800cf61 - 800cf28: 0800cf69 .word 0x0800cf69 - 800cf2c: 0800cf71 .word 0x0800cf71 - 800cf30: 0800cf79 .word 0x0800cf79 - 800cf34: 0800cf81 .word 0x0800cf81 - 800cf38: 0800cf89 .word 0x0800cf89 - 800cf3c: 0800cf91 .word 0x0800cf91 - 800cf40: 0800cf99 .word 0x0800cf99 - 800cf44: 0800cfa1 .word 0x0800cfa1 - 800cf48: 0800cfa9 .word 0x0800cfa9 - 800cf4c: 0800cfb1 .word 0x0800cfb1 - 800cf50: 0800cfb9 .word 0x0800cfb9 - 800cf54: 0800cfc1 .word 0x0800cfc1 - case Unknown: - LED_SetColor(&color_unknown); - 800cf58: 4820 ldr r0, [pc, #128] @ (800cfdc ) - 800cf5a: f000 f8f7 bl 800d14c - break; - 800cf5e: e037 b.n 800cfd0 - case Unplugged: - LED_SetColor(&color_unplugged); - 800cf60: 481f ldr r0, [pc, #124] @ (800cfe0 ) - 800cf62: f000 f8f3 bl 800d14c - break; - 800cf66: e033 b.n 800cfd0 - case Disabled: - LED_SetColor(&color_error); - 800cf68: 481b ldr r0, [pc, #108] @ (800cfd8 ) - 800cf6a: f000 f8ef bl 800d14c - break; - 800cf6e: e02f b.n 800cfd0 - case Preparing: - LED_SetColor(&color_preparing); - 800cf70: 481c ldr r0, [pc, #112] @ (800cfe4 ) - 800cf72: f000 f8eb bl 800d14c - break; - 800cf76: e02b b.n 800cfd0 - case AuthRequired: - LED_SetColor(&color_preparing); - 800cf78: 481a ldr r0, [pc, #104] @ (800cfe4 ) - 800cf7a: f000 f8e7 bl 800d14c - break; - 800cf7e: e027 b.n 800cfd0 - case WaitingForEnergy: - LED_SetColor(&color_charging); - 800cf80: 4819 ldr r0, [pc, #100] @ (800cfe8 ) - 800cf82: f000 f8e3 bl 800d14c - break; - 800cf86: e023 b.n 800cfd0 - case ChargingPausedEV: - LED_SetColor(&color_charging); - 800cf88: 4817 ldr r0, [pc, #92] @ (800cfe8 ) - 800cf8a: f000 f8df bl 800d14c - break; - 800cf8e: e01f b.n 800cfd0 - case ChargingPausedEVSE: - LED_SetColor(&color_charging); - 800cf90: 4815 ldr r0, [pc, #84] @ (800cfe8 ) - 800cf92: f000 f8db bl 800d14c - break; - 800cf96: e01b b.n 800cfd0 - case Charging: - LED_SetColor(&color_charging); - 800cf98: 4813 ldr r0, [pc, #76] @ (800cfe8 ) - 800cf9a: f000 f8d7 bl 800d14c - break; - 800cf9e: e017 b.n 800cfd0 - case AuthTimeout: - LED_SetColor(&color_finished); - 800cfa0: 4812 ldr r0, [pc, #72] @ (800cfec ) - 800cfa2: f000 f8d3 bl 800d14c - break; - 800cfa6: e013 b.n 800cfd0 - case Finished: - LED_SetColor(&color_finished); - 800cfa8: 4810 ldr r0, [pc, #64] @ (800cfec ) - 800cfaa: f000 f8cf bl 800d14c - break; - 800cfae: e00f b.n 800cfd0 - case FinishedEVSE: - LED_SetColor(&color_finished); - 800cfb0: 480e ldr r0, [pc, #56] @ (800cfec ) - 800cfb2: f000 f8cb bl 800d14c - break; - 800cfb6: e00b b.n 800cfd0 - case FinishedEV: - LED_SetColor(&color_finished); - 800cfb8: 480c ldr r0, [pc, #48] @ (800cfec ) - 800cfba: f000 f8c7 bl 800d14c - break; - 800cfbe: e007 b.n 800cfd0 - case Replugging: - LED_SetColor(&color_preparing); - 800cfc0: 4808 ldr r0, [pc, #32] @ (800cfe4 ) - 800cfc2: f000 f8c3 bl 800d14c - break; - 800cfc6: e003 b.n 800cfd0 - default: - LED_SetColor(&color_unknown); - 800cfc8: 4804 ldr r0, [pc, #16] @ (800cfdc ) - 800cfca: f000 f8bf bl 800d14c - break; - 800cfce: bf00 nop - } - } - 800cfd0: bd80 pop {r7, pc} - 800cfd2: bf00 nop - 800cfd4: 200002f8 .word 0x200002f8 - 800cfd8: 20000054 .word 0x20000054 - 800cfdc: 20000018 .word 0x20000018 - 800cfe0: 20000024 .word 0x20000024 - 800cfe4: 20000030 .word 0x20000030 - 800cfe8: 2000003c .word 0x2000003c - 800cfec: 20000048 .word 0x20000048 - -0800cff0 : - -void interpolateColors(RGB_t* color1, RGB_t* color2, uint16_t a, uint16_t b, RGB_t *result) { - 800cff0: b480 push {r7} - 800cff2: b087 sub sp, #28 - 800cff4: af00 add r7, sp, #0 - 800cff6: 60f8 str r0, [r7, #12] - 800cff8: 60b9 str r1, [r7, #8] - 800cffa: 4611 mov r1, r2 - 800cffc: 461a mov r2, r3 - 800cffe: 460b mov r3, r1 - 800d000: 80fb strh r3, [r7, #6] - 800d002: 4613 mov r3, r2 - 800d004: 80bb strh r3, [r7, #4] - - // Проверяем, чтобы a не выходила за пределы диапазона - if (a > b) a = b; - 800d006: 88fa ldrh r2, [r7, #6] - 800d008: 88bb ldrh r3, [r7, #4] - 800d00a: 429a cmp r2, r3 - 800d00c: d901 bls.n 800d012 - 800d00e: 88bb ldrh r3, [r7, #4] - 800d010: 80fb strh r3, [r7, #6] - - if(b==0) b = 1; - 800d012: 88bb ldrh r3, [r7, #4] - 800d014: 2b00 cmp r3, #0 - 800d016: d101 bne.n 800d01c - 800d018: 2301 movs r3, #1 - 800d01a: 80bb strh r3, [r7, #4] - - // Вычисляем коэффициент смешивания в виде целого числа - uint16_t t = (a * 255) / b; // t будет от 0 до 255 - 800d01c: 88fa ldrh r2, [r7, #6] - 800d01e: 4613 mov r3, r2 - 800d020: 021b lsls r3, r3, #8 - 800d022: 1a9a subs r2, r3, r2 - 800d024: 88bb ldrh r3, [r7, #4] - 800d026: fb92 f3f3 sdiv r3, r2, r3 - 800d02a: 82fb strh r3, [r7, #22] - - // Линейная интерполяция с использованием целых чисел - result->R = (color1->R * (255 - t) + color2->R * t) / 255; - 800d02c: 68fb ldr r3, [r7, #12] - 800d02e: 781b ldrb r3, [r3, #0] - 800d030: 461a mov r2, r3 - 800d032: 8afb ldrh r3, [r7, #22] - 800d034: f1c3 03ff rsb r3, r3, #255 @ 0xff - 800d038: fb03 f202 mul.w r2, r3, r2 - 800d03c: 68bb ldr r3, [r7, #8] - 800d03e: 781b ldrb r3, [r3, #0] - 800d040: 4619 mov r1, r3 - 800d042: 8afb ldrh r3, [r7, #22] - 800d044: fb01 f303 mul.w r3, r1, r3 - 800d048: 4413 add r3, r2 - 800d04a: 4a20 ldr r2, [pc, #128] @ (800d0cc ) - 800d04c: fb82 1203 smull r1, r2, r2, r3 - 800d050: 441a add r2, r3 - 800d052: 11d2 asrs r2, r2, #7 - 800d054: 17db asrs r3, r3, #31 - 800d056: 1ad3 subs r3, r2, r3 - 800d058: b2da uxtb r2, r3 - 800d05a: 6a3b ldr r3, [r7, #32] - 800d05c: 701a strb r2, [r3, #0] - result->G = (color1->G * (255 - t) + color2->G * t) / 255; - 800d05e: 68fb ldr r3, [r7, #12] - 800d060: 785b ldrb r3, [r3, #1] - 800d062: 461a mov r2, r3 - 800d064: 8afb ldrh r3, [r7, #22] - 800d066: f1c3 03ff rsb r3, r3, #255 @ 0xff - 800d06a: fb03 f202 mul.w r2, r3, r2 - 800d06e: 68bb ldr r3, [r7, #8] - 800d070: 785b ldrb r3, [r3, #1] - 800d072: 4619 mov r1, r3 - 800d074: 8afb ldrh r3, [r7, #22] - 800d076: fb01 f303 mul.w r3, r1, r3 - 800d07a: 4413 add r3, r2 - 800d07c: 4a13 ldr r2, [pc, #76] @ (800d0cc ) - 800d07e: fb82 1203 smull r1, r2, r2, r3 - 800d082: 441a add r2, r3 - 800d084: 11d2 asrs r2, r2, #7 - 800d086: 17db asrs r3, r3, #31 - 800d088: 1ad3 subs r3, r2, r3 - 800d08a: b2da uxtb r2, r3 - 800d08c: 6a3b ldr r3, [r7, #32] - 800d08e: 705a strb r2, [r3, #1] - result->B = (color1->B * (255 - t) + color2->B * t) / 255; - 800d090: 68fb ldr r3, [r7, #12] - 800d092: 789b ldrb r3, [r3, #2] - 800d094: 461a mov r2, r3 - 800d096: 8afb ldrh r3, [r7, #22] - 800d098: f1c3 03ff rsb r3, r3, #255 @ 0xff - 800d09c: fb03 f202 mul.w r2, r3, r2 - 800d0a0: 68bb ldr r3, [r7, #8] - 800d0a2: 789b ldrb r3, [r3, #2] - 800d0a4: 4619 mov r1, r3 - 800d0a6: 8afb ldrh r3, [r7, #22] - 800d0a8: fb01 f303 mul.w r3, r1, r3 - 800d0ac: 4413 add r3, r2 - 800d0ae: 4a07 ldr r2, [pc, #28] @ (800d0cc ) - 800d0b0: fb82 1203 smull r1, r2, r2, r3 - 800d0b4: 441a add r2, r3 - 800d0b6: 11d2 asrs r2, r2, #7 - 800d0b8: 17db asrs r3, r3, #31 - 800d0ba: 1ad3 subs r3, r2, r3 - 800d0bc: b2da uxtb r2, r3 - 800d0be: 6a3b ldr r3, [r7, #32] - 800d0c0: 709a strb r2, [r3, #2] - -} - 800d0c2: bf00 nop - 800d0c4: 371c adds r7, #28 - 800d0c6: 46bd mov sp, r7 - 800d0c8: bc80 pop {r7} - 800d0ca: 4770 bx lr - 800d0cc: 80808081 .word 0x80808081 - -0800d0d0 : - - -void RGB_SetColor(RGB_t *color){ - 800d0d0: b480 push {r7} - 800d0d2: b083 sub sp, #12 - 800d0d4: af00 add r7, sp, #0 - 800d0d6: 6078 str r0, [r7, #4] - htim4.Instance->CCR2 = color->R * 100 / 255; - 800d0d8: 687b ldr r3, [r7, #4] - 800d0da: 781b ldrb r3, [r3, #0] - 800d0dc: 461a mov r2, r3 - 800d0de: 2364 movs r3, #100 @ 0x64 - 800d0e0: fb02 f303 mul.w r3, r2, r3 - 800d0e4: 4a17 ldr r2, [pc, #92] @ (800d144 ) - 800d0e6: fb82 1203 smull r1, r2, r2, r3 - 800d0ea: 441a add r2, r3 - 800d0ec: 11d2 asrs r2, r2, #7 - 800d0ee: 17db asrs r3, r3, #31 - 800d0f0: 1ad2 subs r2, r2, r3 - 800d0f2: 4b15 ldr r3, [pc, #84] @ (800d148 ) - 800d0f4: 681b ldr r3, [r3, #0] - 800d0f6: 639a str r2, [r3, #56] @ 0x38 - htim4.Instance->CCR3 = color->G * 100 / 255; - 800d0f8: 687b ldr r3, [r7, #4] - 800d0fa: 785b ldrb r3, [r3, #1] - 800d0fc: 461a mov r2, r3 - 800d0fe: 2364 movs r3, #100 @ 0x64 - 800d100: fb02 f303 mul.w r3, r2, r3 - 800d104: 4a0f ldr r2, [pc, #60] @ (800d144 ) - 800d106: fb82 1203 smull r1, r2, r2, r3 - 800d10a: 441a add r2, r3 - 800d10c: 11d2 asrs r2, r2, #7 - 800d10e: 17db asrs r3, r3, #31 - 800d110: 1ad2 subs r2, r2, r3 - 800d112: 4b0d ldr r3, [pc, #52] @ (800d148 ) - 800d114: 681b ldr r3, [r3, #0] - 800d116: 63da str r2, [r3, #60] @ 0x3c - htim4.Instance->CCR4 = color->B * 100 / 255; - 800d118: 687b ldr r3, [r7, #4] - 800d11a: 789b ldrb r3, [r3, #2] - 800d11c: 461a mov r2, r3 - 800d11e: 2364 movs r3, #100 @ 0x64 - 800d120: fb02 f303 mul.w r3, r2, r3 - 800d124: 4a07 ldr r2, [pc, #28] @ (800d144 ) - 800d126: fb82 1203 smull r1, r2, r2, r3 - 800d12a: 441a add r2, r3 - 800d12c: 11d2 asrs r2, r2, #7 - 800d12e: 17db asrs r3, r3, #31 - 800d130: 1ad2 subs r2, r2, r3 - 800d132: 4b05 ldr r3, [pc, #20] @ (800d148 ) - 800d134: 681b ldr r3, [r3, #0] - 800d136: 641a str r2, [r3, #64] @ 0x40 -} - 800d138: bf00 nop - 800d13a: 370c adds r7, #12 - 800d13c: 46bd mov sp, r7 - 800d13e: bc80 pop {r7} - 800d140: 4770 bx lr - 800d142: bf00 nop - 800d144: 80808081 .word 0x80808081 - 800d148: 20000f24 .word 0x20000f24 - -0800d14c : - -void LED_SetColor(RGB_Cycle_t *color){ - 800d14c: b480 push {r7} - 800d14e: b083 sub sp, #12 - 800d150: af00 add r7, sp, #0 - 800d152: 6078 str r0, [r7, #4] - memcpy(&LED_Cycle, color, sizeof(RGB_Cycle_t)); - 800d154: 4b05 ldr r3, [pc, #20] @ (800d16c ) - 800d156: 687a ldr r2, [r7, #4] - 800d158: 6810 ldr r0, [r2, #0] - 800d15a: 6851 ldr r1, [r2, #4] - 800d15c: c303 stmia r3!, {r0, r1} - 800d15e: 8912 ldrh r2, [r2, #8] - 800d160: 801a strh r2, [r3, #0] -} - 800d162: bf00 nop - 800d164: 370c adds r7, #12 - 800d166: 46bd mov sp, r7 - 800d168: bc80 pop {r7} - 800d16a: 4770 bx lr - 800d16c: 20000a74 .word 0x20000a74 - -0800d170 : - - -void LED_Init(){ - 800d170: b580 push {r7, lr} - 800d172: b082 sub sp, #8 - 800d174: af00 add r7, sp, #0 - RGB_t color = {.R=0, .G=0, .B=0}; - 800d176: 2300 movs r3, #0 - 800d178: 713b strb r3, [r7, #4] - 800d17a: 2300 movs r3, #0 - 800d17c: 717b strb r3, [r7, #5] - 800d17e: 2300 movs r3, #0 - 800d180: 71bb strb r3, [r7, #6] - HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2); - 800d182: 2104 movs r1, #4 - 800d184: 4809 ldr r0, [pc, #36] @ (800d1ac ) - 800d186: f004 fde5 bl 8011d54 - HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3); - 800d18a: 2108 movs r1, #8 - 800d18c: 4807 ldr r0, [pc, #28] @ (800d1ac ) - 800d18e: f004 fde1 bl 8011d54 - HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); - 800d192: 210c movs r1, #12 - 800d194: 4805 ldr r0, [pc, #20] @ (800d1ac ) - 800d196: f004 fddd bl 8011d54 - RGB_SetColor(&color); - 800d19a: 1d3b adds r3, r7, #4 - 800d19c: 4618 mov r0, r3 - 800d19e: f7ff ff97 bl 800d0d0 -} - 800d1a2: bf00 nop - 800d1a4: 3708 adds r7, #8 - 800d1a6: 46bd mov sp, r7 - 800d1a8: bd80 pop {r7, pc} - 800d1aa: bf00 nop - 800d1ac: 20000f24 .word 0x20000f24 - -0800d1b0 : -// } -// } -// } -// } - -void LED_Task(){ - 800d1b0: b580 push {r7, lr} - 800d1b2: b082 sub sp, #8 - 800d1b4: af02 add r7, sp, #8 - static uint32_t led_tick; - if((HAL_GetTick() - led_tick) > 20){ - 800d1b6: f001 fb91 bl 800e8dc - 800d1ba: 4602 mov r2, r0 - 800d1bc: 4b46 ldr r3, [pc, #280] @ (800d2d8 ) - 800d1be: 681b ldr r3, [r3, #0] - 800d1c0: 1ad3 subs r3, r2, r3 - 800d1c2: 2b14 cmp r3, #20 - 800d1c4: f240 8085 bls.w 800d2d2 - led_tick = HAL_GetTick(); - 800d1c8: f001 fb88 bl 800e8dc - 800d1cc: 4603 mov r3, r0 - 800d1ce: 4a42 ldr r2, [pc, #264] @ (800d2d8 ) - 800d1d0: 6013 str r3, [r2, #0] - LED_State.tick++; - 800d1d2: 4b42 ldr r3, [pc, #264] @ (800d2dc ) - 800d1d4: 885b ldrh r3, [r3, #2] - 800d1d6: 3301 adds r3, #1 - 800d1d8: b29a uxth r2, r3 - 800d1da: 4b40 ldr r3, [pc, #256] @ (800d2dc ) - 800d1dc: 805a strh r2, [r3, #2] - // LED_PhaseSync(led_n); - switch(LED_State.state){ - 800d1de: 4b3f ldr r3, [pc, #252] @ (800d2dc ) - 800d1e0: 781b ldrb r3, [r3, #0] - 800d1e2: 2b03 cmp r3, #3 - 800d1e4: d867 bhi.n 800d2b6 - 800d1e6: a201 add r2, pc, #4 @ (adr r2, 800d1ec ) - 800d1e8: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800d1ec: 0800d1fd .word 0x0800d1fd - 800d1f0: 0800d22f .word 0x0800d22f - 800d1f4: 0800d25b .word 0x0800d25b - 800d1f8: 0800d28d .word 0x0800d28d - case LED_RISING: - interpolateColors(&LED_Cycle.Color2, &LED_Cycle.Color1, LED_State.tick, LED_Cycle.Tr, &LED_State.color); - 800d1fc: 4b37 ldr r3, [pc, #220] @ (800d2dc ) - 800d1fe: 885a ldrh r2, [r3, #2] - 800d200: 4b37 ldr r3, [pc, #220] @ (800d2e0 ) - 800d202: 78db ldrb r3, [r3, #3] - 800d204: 4619 mov r1, r3 - 800d206: 4b37 ldr r3, [pc, #220] @ (800d2e4 ) - 800d208: 9300 str r3, [sp, #0] - 800d20a: 460b mov r3, r1 - 800d20c: 4934 ldr r1, [pc, #208] @ (800d2e0 ) - 800d20e: 4836 ldr r0, [pc, #216] @ (800d2e8 ) - 800d210: f7ff feee bl 800cff0 - - if(LED_State.tick>LED_Cycle.Tr){ - 800d214: 4b31 ldr r3, [pc, #196] @ (800d2dc ) - 800d216: 885b ldrh r3, [r3, #2] - 800d218: 4a31 ldr r2, [pc, #196] @ (800d2e0 ) - 800d21a: 78d2 ldrb r2, [r2, #3] - 800d21c: 4293 cmp r3, r2 - 800d21e: d94e bls.n 800d2be - LED_State.state = LED_HIGH; - 800d220: 4b2e ldr r3, [pc, #184] @ (800d2dc ) - 800d222: 2201 movs r2, #1 - 800d224: 701a strb r2, [r3, #0] - LED_State.tick = 0; - 800d226: 4b2d ldr r3, [pc, #180] @ (800d2dc ) - 800d228: 2200 movs r2, #0 - 800d22a: 805a strh r2, [r3, #2] - } - break; - 800d22c: e047 b.n 800d2be - case LED_HIGH: - memcpy(&LED_State.color, &LED_Cycle.Color1, sizeof(RGB_t)); - 800d22e: 4b2b ldr r3, [pc, #172] @ (800d2dc ) - 800d230: 4a2b ldr r2, [pc, #172] @ (800d2e0 ) - 800d232: 3304 adds r3, #4 - 800d234: 6812 ldr r2, [r2, #0] - 800d236: 4611 mov r1, r2 - 800d238: 8019 strh r1, [r3, #0] - 800d23a: 3302 adds r3, #2 - 800d23c: 0c12 lsrs r2, r2, #16 - 800d23e: 701a strb r2, [r3, #0] - - if(LED_State.tick>LED_Cycle.Th){ - 800d240: 4b26 ldr r3, [pc, #152] @ (800d2dc ) - 800d242: 885b ldrh r3, [r3, #2] - 800d244: 4a26 ldr r2, [pc, #152] @ (800d2e0 ) - 800d246: 7912 ldrb r2, [r2, #4] - 800d248: 4293 cmp r3, r2 - 800d24a: d93a bls.n 800d2c2 - LED_State.state = LED_FALLING; - 800d24c: 4b23 ldr r3, [pc, #140] @ (800d2dc ) - 800d24e: 2202 movs r2, #2 - 800d250: 701a strb r2, [r3, #0] - LED_State.tick = 0; - 800d252: 4b22 ldr r3, [pc, #136] @ (800d2dc ) - 800d254: 2200 movs r2, #0 - 800d256: 805a strh r2, [r3, #2] - } - break; - 800d258: e033 b.n 800d2c2 - case LED_FALLING: - interpolateColors(&LED_Cycle.Color1, &LED_Cycle.Color2, LED_State.tick, LED_Cycle.Tf, &LED_State.color); - 800d25a: 4b20 ldr r3, [pc, #128] @ (800d2dc ) - 800d25c: 885a ldrh r2, [r3, #2] - 800d25e: 4b20 ldr r3, [pc, #128] @ (800d2e0 ) - 800d260: 795b ldrb r3, [r3, #5] - 800d262: 4619 mov r1, r3 - 800d264: 4b1f ldr r3, [pc, #124] @ (800d2e4 ) - 800d266: 9300 str r3, [sp, #0] - 800d268: 460b mov r3, r1 - 800d26a: 491f ldr r1, [pc, #124] @ (800d2e8 ) - 800d26c: 481c ldr r0, [pc, #112] @ (800d2e0 ) - 800d26e: f7ff febf bl 800cff0 - - if(LED_State.tick>LED_Cycle.Tf){ - 800d272: 4b1a ldr r3, [pc, #104] @ (800d2dc ) - 800d274: 885b ldrh r3, [r3, #2] - 800d276: 4a1a ldr r2, [pc, #104] @ (800d2e0 ) - 800d278: 7952 ldrb r2, [r2, #5] - 800d27a: 4293 cmp r3, r2 - 800d27c: d923 bls.n 800d2c6 - LED_State.state = LED_LOW; - 800d27e: 4b17 ldr r3, [pc, #92] @ (800d2dc ) - 800d280: 2203 movs r2, #3 - 800d282: 701a strb r2, [r3, #0] - LED_State.tick = 0; - 800d284: 4b15 ldr r3, [pc, #84] @ (800d2dc ) - 800d286: 2200 movs r2, #0 - 800d288: 805a strh r2, [r3, #2] - } - break; - 800d28a: e01c b.n 800d2c6 - case LED_LOW: - memcpy(&LED_State.color, &LED_Cycle.Color2, sizeof(RGB_t)); - 800d28c: 4b13 ldr r3, [pc, #76] @ (800d2dc ) - 800d28e: 4a14 ldr r2, [pc, #80] @ (800d2e0 ) - 800d290: 3304 adds r3, #4 - 800d292: 3207 adds r2, #7 - 800d294: 8811 ldrh r1, [r2, #0] - 800d296: 7892 ldrb r2, [r2, #2] - 800d298: 8019 strh r1, [r3, #0] - 800d29a: 709a strb r2, [r3, #2] - - if(LED_State.tick>LED_Cycle.Tl){ - 800d29c: 4b0f ldr r3, [pc, #60] @ (800d2dc ) - 800d29e: 885b ldrh r3, [r3, #2] - 800d2a0: 4a0f ldr r2, [pc, #60] @ (800d2e0 ) - 800d2a2: 7992 ldrb r2, [r2, #6] - 800d2a4: 4293 cmp r3, r2 - 800d2a6: d910 bls.n 800d2ca - LED_State.state = LED_RISING; - 800d2a8: 4b0c ldr r3, [pc, #48] @ (800d2dc ) - 800d2aa: 2200 movs r2, #0 - 800d2ac: 701a strb r2, [r3, #0] - LED_State.tick = 0; - 800d2ae: 4b0b ldr r3, [pc, #44] @ (800d2dc ) - 800d2b0: 2200 movs r2, #0 - 800d2b2: 805a strh r2, [r3, #2] - } - break; - 800d2b4: e009 b.n 800d2ca - default: - LED_State.state = LED_RISING; - 800d2b6: 4b09 ldr r3, [pc, #36] @ (800d2dc ) - 800d2b8: 2200 movs r2, #0 - 800d2ba: 701a strb r2, [r3, #0] - 800d2bc: e006 b.n 800d2cc - break; - 800d2be: bf00 nop - 800d2c0: e004 b.n 800d2cc - break; - 800d2c2: bf00 nop - 800d2c4: e002 b.n 800d2cc - break; - 800d2c6: bf00 nop - 800d2c8: e000 b.n 800d2cc - break; - 800d2ca: bf00 nop - } - RGB_SetColor(&LED_State.color); - 800d2cc: 4805 ldr r0, [pc, #20] @ (800d2e4 ) - 800d2ce: f7ff feff bl 800d0d0 - } -} - 800d2d2: bf00 nop - 800d2d4: 46bd mov sp, r7 - 800d2d6: bd80 pop {r7, pc} - 800d2d8: 20000a80 .word 0x20000a80 - 800d2dc: 20000a6c .word 0x20000a6c - 800d2e0: 20000a74 .word 0x20000a74 - 800d2e4: 20000a70 .word 0x20000a70 - 800d2e8: 20000a7b .word 0x20000a7b - -0800d2ec : - -RTC_HandleTypeDef hrtc; - -/* RTC init function */ -void MX_RTC_Init(void) -{ - 800d2ec: b580 push {r7, lr} - 800d2ee: af00 add r7, sp, #0 - - /* USER CODE END RTC_Init 1 */ - - /** Initialize RTC Only - */ - hrtc.Instance = RTC; - 800d2f0: 4b0a ldr r3, [pc, #40] @ (800d31c ) - 800d2f2: 4a0b ldr r2, [pc, #44] @ (800d320 ) - 800d2f4: 601a str r2, [r3, #0] - hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; - 800d2f6: 4b09 ldr r3, [pc, #36] @ (800d31c ) - 800d2f8: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 800d2fc: 605a str r2, [r3, #4] - hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM; - 800d2fe: 4b07 ldr r3, [pc, #28] @ (800d31c ) - 800d300: f44f 7280 mov.w r2, #256 @ 0x100 - 800d304: 609a str r2, [r3, #8] - if (HAL_RTC_Init(&hrtc) != HAL_OK) - 800d306: 4805 ldr r0, [pc, #20] @ (800d31c ) - 800d308: f004 fb74 bl 80119f4 - 800d30c: 4603 mov r3, r0 - 800d30e: 2b00 cmp r3, #0 - 800d310: d001 beq.n 800d316 - { - Error_Handler(); - 800d312: f7ff f869 bl 800c3e8 - } - /* USER CODE BEGIN RTC_Init 2 */ - - /* USER CODE END RTC_Init 2 */ - -} - 800d316: bf00 nop - 800d318: bd80 pop {r7, pc} - 800d31a: bf00 nop - 800d31c: 20000a84 .word 0x20000a84 - 800d320: 40002800 .word 0x40002800 - -0800d324 : - -void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle) -{ - 800d324: b580 push {r7, lr} - 800d326: b084 sub sp, #16 - 800d328: af00 add r7, sp, #0 - 800d32a: 6078 str r0, [r7, #4] - - if(rtcHandle->Instance==RTC) - 800d32c: 687b ldr r3, [r7, #4] - 800d32e: 681b ldr r3, [r3, #0] - 800d330: 4a0b ldr r2, [pc, #44] @ (800d360 ) - 800d332: 4293 cmp r3, r2 - 800d334: d110 bne.n 800d358 - { - /* USER CODE BEGIN RTC_MspInit 0 */ - - /* USER CODE END RTC_MspInit 0 */ - HAL_PWR_EnableBkUpAccess(); - 800d336: f003 faf1 bl 801091c - /* Enable BKP CLK enable for backup registers */ - __HAL_RCC_BKP_CLK_ENABLE(); - 800d33a: 4b0a ldr r3, [pc, #40] @ (800d364 ) - 800d33c: 69db ldr r3, [r3, #28] - 800d33e: 4a09 ldr r2, [pc, #36] @ (800d364 ) - 800d340: f043 6300 orr.w r3, r3, #134217728 @ 0x8000000 - 800d344: 61d3 str r3, [r2, #28] - 800d346: 4b07 ldr r3, [pc, #28] @ (800d364 ) - 800d348: 69db ldr r3, [r3, #28] - 800d34a: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 800d34e: 60fb str r3, [r7, #12] - 800d350: 68fb ldr r3, [r7, #12] - /* RTC clock enable */ - __HAL_RCC_RTC_ENABLE(); - 800d352: 4b05 ldr r3, [pc, #20] @ (800d368 ) - 800d354: 2201 movs r2, #1 - 800d356: 601a str r2, [r3, #0] - /* USER CODE BEGIN RTC_MspInit 1 */ - - /* USER CODE END RTC_MspInit 1 */ - } -} - 800d358: bf00 nop - 800d35a: 3710 adds r7, #16 - 800d35c: 46bd mov sp, r7 - 800d35e: bd80 pop {r7, pc} - 800d360: 40002800 .word 0x40002800 - 800d364: 40021000 .word 0x40021000 - 800d368: 4242043c .word 0x4242043c - -0800d36c : - .fw_version_major = 0, - .fw_version_minor = 0, - .fw_version_patch = 0, -}; - -void ReadVersion(){ - 800d36c: b480 push {r7} - 800d36e: af00 add r7, sp, #0 - infoPacket.serialNumber = InfoBlock->serialNumber; - 800d370: 4b0e ldr r3, [pc, #56] @ (800d3ac ) - 800d372: 681b ldr r3, [r3, #0] - 800d374: 681b ldr r3, [r3, #0] - 800d376: b29a uxth r2, r3 - 800d378: 4b0d ldr r3, [pc, #52] @ (800d3b0 ) - 800d37a: 801a strh r2, [r3, #0] - infoPacket.boardVersion = InfoBlock->boardVersion; - 800d37c: 4b0b ldr r3, [pc, #44] @ (800d3ac ) - 800d37e: 681b ldr r3, [r3, #0] - 800d380: 795a ldrb r2, [r3, #5] - 800d382: 4b0b ldr r3, [pc, #44] @ (800d3b0 ) - 800d384: 709a strb r2, [r3, #2] - infoPacket.stationType = InfoBlock->stationType; - 800d386: 4b09 ldr r3, [pc, #36] @ (800d3ac ) - 800d388: 681b ldr r3, [r3, #0] - 800d38a: 791a ldrb r2, [r3, #4] - 800d38c: 4b08 ldr r3, [pc, #32] @ (800d3b0 ) - 800d38e: 70da strb r2, [r3, #3] - infoPacket.fw_version_major = FW_VERSION_MAJOR; - 800d390: 4b07 ldr r3, [pc, #28] @ (800d3b0 ) - 800d392: 2201 movs r2, #1 - 800d394: 809a strh r2, [r3, #4] - infoPacket.fw_version_minor = FW_VERSION_MINOR; - 800d396: 4b06 ldr r3, [pc, #24] @ (800d3b0 ) - 800d398: 2200 movs r2, #0 - 800d39a: 80da strh r2, [r3, #6] - infoPacket.fw_version_patch = FW_VERSION_PATCH; - 800d39c: 4b04 ldr r3, [pc, #16] @ (800d3b0 ) - 800d39e: 2201 movs r2, #1 - 800d3a0: 811a strh r2, [r3, #8] -} - 800d3a2: bf00 nop - 800d3a4: 46bd mov sp, r7 - 800d3a6: bc80 pop {r7} - 800d3a8: 4770 bx lr - 800d3aa: bf00 nop - 800d3ac: 20000000 .word 0x20000000 - 800d3b0: 20000f14 .word 0x20000f14 - -0800d3b4 : - -// Внешняя функция обработки команд (определена в serial_handler.c) -extern void SC_CommandHandler(ReceivedCommand_t* cmd); - -void SC_Init() { - 800d3b4: b580 push {r7, lr} - 800d3b6: af00 add r7, sp, #0 - // Обнуляем структуру - memset(&serial_control, 0, sizeof(SerialControl_t)); - 800d3b8: f44f 7204 mov.w r2, #528 @ 0x210 - 800d3bc: 2100 movs r1, #0 - 800d3be: 4805 ldr r0, [pc, #20] @ (800d3d4 ) - 800d3c0: f006 feec bl 801419c - memset(&serial_iso, 0, sizeof(serial_iso)); - 800d3c4: f44f 7204 mov.w r2, #528 @ 0x210 - 800d3c8: 2100 movs r1, #0 - 800d3ca: 4803 ldr r0, [pc, #12] @ (800d3d8 ) - 800d3cc: f006 fee6 bl 801419c -} - 800d3d0: bf00 nop - 800d3d2: bd80 pop {r7, pc} - 800d3d4: 20000a98 .word 0x20000a98 - 800d3d8: 20000ca8 .word 0x20000ca8 - -0800d3dc : - -void SC_Task() { - 800d3dc: b580 push {r7, lr} - 800d3de: af00 add r7, sp, #0 - // Запуск приема в режиме прерывания с ожиданием idle - if((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - 800d3e0: 4b2a ldr r3, [pc, #168] @ (800d48c ) - 800d3e2: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 - 800d3e6: b2db uxtb r3, r3 - 800d3e8: 2b20 cmp r3, #32 - 800d3ea: d10a bne.n 800d402 - 800d3ec: 4b28 ldr r3, [pc, #160] @ (800d490 ) - 800d3ee: f893 3208 ldrb.w r3, [r3, #520] @ 0x208 - 800d3f2: b2db uxtb r3, r3 - 800d3f4: 2b00 cmp r3, #0 - 800d3f6: d104 bne.n 800d402 - 800d3f8: 22ff movs r2, #255 @ 0xff - 800d3fa: 4926 ldr r1, [pc, #152] @ (800d494 ) - 800d3fc: 4823 ldr r0, [pc, #140] @ (800d48c ) - 800d3fe: f005 fa82 bl 8012906 - if((huart5.RxState == HAL_UART_STATE_READY)) HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - 800d402: 4b25 ldr r3, [pc, #148] @ (800d498 ) - 800d404: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 - 800d408: b2db uxtb r3, r3 - 800d40a: 2b20 cmp r3, #32 - 800d40c: d104 bne.n 800d418 - 800d40e: 22ff movs r2, #255 @ 0xff - 800d410: 4922 ldr r1, [pc, #136] @ (800d49c ) - 800d412: 4821 ldr r0, [pc, #132] @ (800d498 ) - 800d414: f005 fa77 bl 8012906 - - // Проверка таймаута отправки пакета (больше 100 мс) - if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) { - 800d418: 4b1c ldr r3, [pc, #112] @ (800d48c ) - 800d41a: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 800d41e: b2db uxtb r3, r3 - 800d420: 2b21 cmp r3, #33 @ 0x21 - 800d422: d119 bne.n 800d458 - 800d424: 4b1a ldr r3, [pc, #104] @ (800d490 ) - 800d426: f8d3 320c ldr.w r3, [r3, #524] @ 0x20c - 800d42a: 2b00 cmp r3, #0 - 800d42c: d014 beq.n 800d458 - if ((HAL_GetTick() - serial_control.tx_tick) > 100) { - 800d42e: f001 fa55 bl 800e8dc - 800d432: 4602 mov r2, r0 - 800d434: 4b16 ldr r3, [pc, #88] @ (800d490 ) - 800d436: f8d3 320c ldr.w r3, [r3, #524] @ 0x20c - 800d43a: 1ad3 subs r3, r2, r3 - 800d43c: 2b64 cmp r3, #100 @ 0x64 - 800d43e: d90b bls.n 800d458 - // Таймаут: принудительно сбрасываем передачу - HAL_UART_Abort_IT(&huart2); - 800d440: 4812 ldr r0, [pc, #72] @ (800d48c ) - 800d442: f005 fabd bl 80129c0 - // Выключаем DIR при сбросе передачи - HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); - 800d446: 2200 movs r2, #0 - 800d448: 2110 movs r1, #16 - 800d44a: 4815 ldr r0, [pc, #84] @ (800d4a0 ) - 800d44c: f003 fa4d bl 80108ea - serial_control.tx_tick = 0; // Сбрасываем tick - 800d450: 4b0f ldr r3, [pc, #60] @ (800d490 ) - 800d452: 2200 movs r2, #0 - 800d454: f8c3 220c str.w r2, [r3, #524] @ 0x20c - } - } - - // Проверка наличия принятой команды для обработки - if (serial_control.command_ready && (huart2.gState != HAL_UART_STATE_BUSY_TX)) { - 800d458: 4b0d ldr r3, [pc, #52] @ (800d490 ) - 800d45a: f893 3208 ldrb.w r3, [r3, #520] @ 0x208 - 800d45e: b2db uxtb r3, r3 - 800d460: 2b00 cmp r3, #0 - 800d462: d011 beq.n 800d488 - 800d464: 4b09 ldr r3, [pc, #36] @ (800d48c ) - 800d466: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 800d46a: b2db uxtb r3, r3 - 800d46c: 2b21 cmp r3, #33 @ 0x21 - 800d46e: d00b beq.n 800d488 -// HAL_Delay(2); - SC_CommandHandler(&serial_control.received_command); - 800d470: 480c ldr r0, [pc, #48] @ (800d4a4 ) - 800d472: f000 f9df bl 800d834 - HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - 800d476: 22ff movs r2, #255 @ 0xff - 800d478: 4906 ldr r1, [pc, #24] @ (800d494 ) - 800d47a: 4804 ldr r0, [pc, #16] @ (800d48c ) - 800d47c: f005 fa43 bl 8012906 - serial_control.command_ready = 0; // Сбрасываем флаг - 800d480: 4b03 ldr r3, [pc, #12] @ (800d490 ) - 800d482: 2200 movs r2, #0 - 800d484: f883 2208 strb.w r2, [r3, #520] @ 0x208 - } -} - 800d488: bf00 nop - 800d48a: bd80 pop {r7, pc} - 800d48c: 20000ffc .word 0x20000ffc - 800d490: 20000a98 .word 0x20000a98 - 800d494: 20000b98 .word 0x20000b98 - 800d498: 20000f6c .word 0x20000f6c - 800d49c: 20000da8 .word 0x20000da8 - 800d4a0: 40011400 .word 0x40011400 - 800d4a4: 20000c98 .word 0x20000c98 - -0800d4a8 : - -void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { - 800d4a8: b580 push {r7, lr} - 800d4aa: b082 sub sp, #8 - 800d4ac: af00 add r7, sp, #0 - 800d4ae: 6078 str r0, [r7, #4] - 800d4b0: 460b mov r3, r1 - 800d4b2: 807b strh r3, [r7, #2] - if (huart->Instance == huart2.Instance) { - 800d4b4: 687b ldr r3, [r7, #4] - 800d4b6: 681a ldr r2, [r3, #0] - 800d4b8: 4b1c ldr r3, [pc, #112] @ (800d52c ) - 800d4ba: 681b ldr r3, [r3, #0] - 800d4bc: 429a cmp r2, r3 - 800d4be: d116 bne.n 800d4ee - if(!process_received_packet(&serial_control, serial_control.rx_buffer, Size)){ - 800d4c0: 887b ldrh r3, [r7, #2] - 800d4c2: 461a mov r2, r3 - 800d4c4: 491a ldr r1, [pc, #104] @ (800d530 ) - 800d4c6: 481b ldr r0, [pc, #108] @ (800d534 ) - 800d4c8: f000 f980 bl 800d7cc - 800d4cc: 4603 mov r3, r0 - 800d4ce: 2b00 cmp r3, #0 - 800d4d0: d104 bne.n 800d4dc - SC_SendPacket(NULL, 0, RESP_INVALID); - 800d4d2: 2214 movs r2, #20 - 800d4d4: 2100 movs r1, #0 - 800d4d6: 2000 movs r0, #0 - 800d4d8: f000 f8ec bl 800d6b4 - } - g_sc_command_source = SC_SOURCE_UART2; - 800d4dc: 4b16 ldr r3, [pc, #88] @ (800d538 ) - 800d4de: 2200 movs r2, #0 - 800d4e0: 701a strb r2, [r3, #0] - HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - 800d4e2: 22ff movs r2, #255 @ 0xff - 800d4e4: 4912 ldr r1, [pc, #72] @ (800d530 ) - 800d4e6: 4811 ldr r0, [pc, #68] @ (800d52c ) - 800d4e8: f005 fa0d bl 8012906 - g_sc_command_source = SC_SOURCE_UART5; - SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command); - } - HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - } -} - 800d4ec: e019 b.n 800d522 - } else if (huart->Instance == huart5.Instance) { - 800d4ee: 687b ldr r3, [r7, #4] - 800d4f0: 681a ldr r2, [r3, #0] - 800d4f2: 4b12 ldr r3, [pc, #72] @ (800d53c ) - 800d4f4: 681b ldr r3, [r3, #0] - 800d4f6: 429a cmp r2, r3 - 800d4f8: d113 bne.n 800d522 - if (process_received_packet(&serial_iso, serial_iso.rx_buffer, Size)) { - 800d4fa: 887b ldrh r3, [r7, #2] - 800d4fc: 461a mov r2, r3 - 800d4fe: 4910 ldr r1, [pc, #64] @ (800d540 ) - 800d500: 4810 ldr r0, [pc, #64] @ (800d544 ) - 800d502: f000 f963 bl 800d7cc - 800d506: 4603 mov r3, r0 - 800d508: 2b00 cmp r3, #0 - 800d50a: d005 beq.n 800d518 - g_sc_command_source = SC_SOURCE_UART5; - 800d50c: 4b0a ldr r3, [pc, #40] @ (800d538 ) - 800d50e: 2201 movs r2, #1 - 800d510: 701a strb r2, [r3, #0] - SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command); - 800d512: 480d ldr r0, [pc, #52] @ (800d548 ) - 800d514: f000 f98e bl 800d834 - HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1); - 800d518: 22ff movs r2, #255 @ 0xff - 800d51a: 4909 ldr r1, [pc, #36] @ (800d540 ) - 800d51c: 4807 ldr r0, [pc, #28] @ (800d53c ) - 800d51e: f005 f9f2 bl 8012906 -} - 800d522: bf00 nop - 800d524: 3708 adds r7, #8 - 800d526: 46bd mov sp, r7 - 800d528: bd80 pop {r7, pc} - 800d52a: bf00 nop - 800d52c: 20000ffc .word 0x20000ffc - 800d530: 20000b98 .word 0x20000b98 - 800d534: 20000a98 .word 0x20000a98 - 800d538: 20000eb8 .word 0x20000eb8 - 800d53c: 20000f6c .word 0x20000f6c - 800d540: 20000da8 .word 0x20000da8 - 800d544: 20000ca8 .word 0x20000ca8 - 800d548: 20000ea8 .word 0x20000ea8 - -0800d54c : - -void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { - 800d54c: b580 push {r7, lr} - 800d54e: b082 sub sp, #8 - 800d550: af00 add r7, sp, #0 - 800d552: 6078 str r0, [r7, #4] - if (huart->Instance == huart2.Instance) { - 800d554: 687b ldr r3, [r7, #4] - 800d556: 681a ldr r2, [r3, #0] - 800d558: 4b08 ldr r3, [pc, #32] @ (800d57c ) - 800d55a: 681b ldr r3, [r3, #0] - 800d55c: 429a cmp r2, r3 - 800d55e: d108 bne.n 800d572 - HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); - 800d560: 2200 movs r2, #0 - 800d562: 2110 movs r1, #16 - 800d564: 4806 ldr r0, [pc, #24] @ (800d580 ) - 800d566: f003 f9c0 bl 80108ea - serial_control.tx_tick = 0; - 800d56a: 4b06 ldr r3, [pc, #24] @ (800d584 ) - 800d56c: 2200 movs r2, #0 - 800d56e: f8c3 220c str.w r2, [r3, #524] @ 0x20c - } -} - 800d572: bf00 nop - 800d574: 3708 adds r7, #8 - 800d576: 46bd mov sp, r7 - 800d578: bd80 pop {r7, pc} - 800d57a: bf00 nop - 800d57c: 20000ffc .word 0x20000ffc - 800d580: 40011400 .word 0x40011400 - 800d584: 20000a98 .word 0x20000a98 - -0800d588 : - -// Приватные функции реализации - -// Полностью программная реализация CRC-32 (полином CRC32_POLYNOMIAL, порядок little-endian) -static uint32_t calculate_crc32(const uint8_t* data, uint16_t length) { - 800d588: b480 push {r7} - 800d58a: b085 sub sp, #20 - 800d58c: af00 add r7, sp, #0 - 800d58e: 6078 str r0, [r7, #4] - 800d590: 460b mov r3, r1 - 800d592: 807b strh r3, [r7, #2] - uint32_t crc = 0xFFFFFFFFu; - 800d594: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff - 800d598: 60fb str r3, [r7, #12] - - for (uint16_t i = 0; i < length; i++) { - 800d59a: 2300 movs r3, #0 - 800d59c: 817b strh r3, [r7, #10] - 800d59e: e021 b.n 800d5e4 - crc ^= data[i]; - 800d5a0: 897b ldrh r3, [r7, #10] - 800d5a2: 687a ldr r2, [r7, #4] - 800d5a4: 4413 add r3, r2 - 800d5a6: 781b ldrb r3, [r3, #0] - 800d5a8: 461a mov r2, r3 - 800d5aa: 68fb ldr r3, [r7, #12] - 800d5ac: 4053 eors r3, r2 - 800d5ae: 60fb str r3, [r7, #12] - for (uint8_t bit = 0; bit < 8; bit++) { - 800d5b0: 2300 movs r3, #0 - 800d5b2: 727b strb r3, [r7, #9] - 800d5b4: e010 b.n 800d5d8 - if (crc & 0x1u) { - 800d5b6: 68fb ldr r3, [r7, #12] - 800d5b8: f003 0301 and.w r3, r3, #1 - 800d5bc: 2b00 cmp r3, #0 - 800d5be: d005 beq.n 800d5cc - crc = (crc >> 1) ^ CRC32_POLYNOMIAL; - 800d5c0: 68fb ldr r3, [r7, #12] - 800d5c2: 085a lsrs r2, r3, #1 - 800d5c4: 4b0d ldr r3, [pc, #52] @ (800d5fc ) - 800d5c6: 4053 eors r3, r2 - 800d5c8: 60fb str r3, [r7, #12] - 800d5ca: e002 b.n 800d5d2 - } else { - crc >>= 1; - 800d5cc: 68fb ldr r3, [r7, #12] - 800d5ce: 085b lsrs r3, r3, #1 - 800d5d0: 60fb str r3, [r7, #12] - for (uint8_t bit = 0; bit < 8; bit++) { - 800d5d2: 7a7b ldrb r3, [r7, #9] - 800d5d4: 3301 adds r3, #1 - 800d5d6: 727b strb r3, [r7, #9] - 800d5d8: 7a7b ldrb r3, [r7, #9] - 800d5da: 2b07 cmp r3, #7 - 800d5dc: d9eb bls.n 800d5b6 - for (uint16_t i = 0; i < length; i++) { - 800d5de: 897b ldrh r3, [r7, #10] - 800d5e0: 3301 adds r3, #1 - 800d5e2: 817b strh r3, [r7, #10] - 800d5e4: 897a ldrh r2, [r7, #10] - 800d5e6: 887b ldrh r3, [r7, #2] - 800d5e8: 429a cmp r2, r3 - 800d5ea: d3d9 bcc.n 800d5a0 - } - } - } - - return crc ^ 0xFFFFFFFFu; - 800d5ec: 68fb ldr r3, [r7, #12] - 800d5ee: 43db mvns r3, r3 -} - 800d5f0: 4618 mov r0, r3 - 800d5f2: 3714 adds r7, #20 - 800d5f4: 46bd mov sp, r7 - 800d5f6: bc80 pop {r7} - 800d5f8: 4770 bx lr - 800d5fa: bf00 nop - 800d5fc: edb88320 .word 0xedb88320 - -0800d600 : - -static uint16_t encode_packet(const uint8_t* payload, uint16_t payload_len, uint8_t* output, uint8_t response_code) { - 800d600: b580 push {r7, lr} - 800d602: b088 sub sp, #32 - 800d604: af00 add r7, sp, #0 - 800d606: 60f8 str r0, [r7, #12] - 800d608: 607a str r2, [r7, #4] - 800d60a: 461a mov r2, r3 - 800d60c: 460b mov r3, r1 - 800d60e: 817b strh r3, [r7, #10] - 800d610: 4613 mov r3, r2 - 800d612: 727b strb r3, [r7, #9] - uint16_t out_index = 0; - 800d614: 2300 movs r3, #0 - 800d616: 83fb strh r3, [r7, #30] - - output[out_index++] = response_code; - 800d618: 8bfb ldrh r3, [r7, #30] - 800d61a: 1c5a adds r2, r3, #1 - 800d61c: 83fa strh r2, [r7, #30] - 800d61e: 461a mov r2, r3 - 800d620: 687b ldr r3, [r7, #4] - 800d622: 4413 add r3, r2 - 800d624: 7a7a ldrb r2, [r7, #9] - 800d626: 701a strb r2, [r3, #0] - - if (payload != NULL) { - 800d628: 68fb ldr r3, [r7, #12] - 800d62a: 2b00 cmp r3, #0 - 800d62c: d019 beq.n 800d662 - // Просто копируем полезную нагрузку без какого‑либо экранирования - for (uint16_t i = 0; i < payload_len; i++) { - 800d62e: 2300 movs r3, #0 - 800d630: 83bb strh r3, [r7, #28] - 800d632: e012 b.n 800d65a - output[out_index++] = payload[i]; - 800d634: 8bbb ldrh r3, [r7, #28] - 800d636: 68fa ldr r2, [r7, #12] - 800d638: 441a add r2, r3 - 800d63a: 8bfb ldrh r3, [r7, #30] - 800d63c: 1c59 adds r1, r3, #1 - 800d63e: 83f9 strh r1, [r7, #30] - 800d640: 4619 mov r1, r3 - 800d642: 687b ldr r3, [r7, #4] - 800d644: 440b add r3, r1 - 800d646: 7812 ldrb r2, [r2, #0] - 800d648: 701a strb r2, [r3, #0] - - // Проверка переполнения - if (out_index >= MAX_TX_BUFFER_SIZE - 5) { // 4 байта CRC + END_BYTE - 800d64a: 8bfb ldrh r3, [r7, #30] - 800d64c: 2bfa cmp r3, #250 @ 0xfa - 800d64e: d901 bls.n 800d654 - return 0; - 800d650: 2300 movs r3, #0 - 800d652: e02a b.n 800d6aa - for (uint16_t i = 0; i < payload_len; i++) { - 800d654: 8bbb ldrh r3, [r7, #28] - 800d656: 3301 adds r3, #1 - 800d658: 83bb strh r3, [r7, #28] - 800d65a: 8bba ldrh r2, [r7, #28] - 800d65c: 897b ldrh r3, [r7, #10] - 800d65e: 429a cmp r2, r3 - 800d660: d3e8 bcc.n 800d634 - } - } - } - - // Вычисляем CRC для всего содержимого (код ответа + полезная нагрузка) - uint32_t crc = calculate_crc32(output, out_index); - 800d662: 8bfb ldrh r3, [r7, #30] - 800d664: 4619 mov r1, r3 - 800d666: 6878 ldr r0, [r7, #4] - 800d668: f7ff ff8e bl 800d588 - 800d66c: 4603 mov r3, r0 - 800d66e: 613b str r3, [r7, #16] - uint8_t* crc_bytes = (uint8_t*)&crc; - 800d670: f107 0310 add.w r3, r7, #16 - 800d674: 617b str r3, [r7, #20] - - // Добавляем CRC без экранирования - for (int i = 0; i < 4; i++) { - 800d676: 2300 movs r3, #0 - 800d678: 61bb str r3, [r7, #24] - 800d67a: e012 b.n 800d6a2 - output[out_index++] = crc_bytes[i]; - 800d67c: 69bb ldr r3, [r7, #24] - 800d67e: 697a ldr r2, [r7, #20] - 800d680: 441a add r2, r3 - 800d682: 8bfb ldrh r3, [r7, #30] - 800d684: 1c59 adds r1, r3, #1 - 800d686: 83f9 strh r1, [r7, #30] - 800d688: 4619 mov r1, r3 - 800d68a: 687b ldr r3, [r7, #4] - 800d68c: 440b add r3, r1 - 800d68e: 7812 ldrb r2, [r2, #0] - 800d690: 701a strb r2, [r3, #0] - - if (out_index >= MAX_TX_BUFFER_SIZE - 1) { // место для END_BYTE - 800d692: 8bfb ldrh r3, [r7, #30] - 800d694: 2bfe cmp r3, #254 @ 0xfe - 800d696: d901 bls.n 800d69c - return 0; - 800d698: 2300 movs r3, #0 - 800d69a: e006 b.n 800d6aa - for (int i = 0; i < 4; i++) { - 800d69c: 69bb ldr r3, [r7, #24] - 800d69e: 3301 adds r3, #1 - 800d6a0: 61bb str r3, [r7, #24] - 800d6a2: 69bb ldr r3, [r7, #24] - 800d6a4: 2b03 cmp r3, #3 - 800d6a6: dde9 ble.n 800d67c - } - } - - return out_index; - 800d6a8: 8bfb ldrh r3, [r7, #30] -} - 800d6aa: 4618 mov r0, r3 - 800d6ac: 3720 adds r7, #32 - 800d6ae: 46bd mov sp, r7 - 800d6b0: bd80 pop {r7, pc} - ... - -0800d6b4 : - -void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_t response_code) { - 800d6b4: b580 push {r7, lr} - 800d6b6: b084 sub sp, #16 - 800d6b8: af00 add r7, sp, #0 - 800d6ba: 6078 str r0, [r7, #4] - 800d6bc: 460b mov r3, r1 - 800d6be: 807b strh r3, [r7, #2] - 800d6c0: 4613 mov r3, r2 - 800d6c2: 707b strb r3, [r7, #1] - uint16_t packet_len = encode_packet(payload, payload_len, serial_control.tx_buffer, response_code); - 800d6c4: 787b ldrb r3, [r7, #1] - 800d6c6: 8879 ldrh r1, [r7, #2] - 800d6c8: 4a15 ldr r2, [pc, #84] @ (800d720 ) - 800d6ca: 6878 ldr r0, [r7, #4] - 800d6cc: f7ff ff98 bl 800d600 - 800d6d0: 4603 mov r3, r0 - 800d6d2: 81fb strh r3, [r7, #14] - - if (packet_len > 0) { - 800d6d4: 89fb ldrh r3, [r7, #14] - 800d6d6: 2b00 cmp r3, #0 - 800d6d8: d01e beq.n 800d718 - if (huart2.gState == HAL_UART_STATE_BUSY_TX) { - 800d6da: 4b12 ldr r3, [pc, #72] @ (800d724 ) - 800d6dc: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 800d6e0: b2db uxtb r3, r3 - 800d6e2: 2b21 cmp r3, #33 @ 0x21 - 800d6e4: d107 bne.n 800d6f6 - HAL_UART_Abort_IT(&huart2); - 800d6e6: 480f ldr r0, [pc, #60] @ (800d724 ) - 800d6e8: f005 f96a bl 80129c0 - HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET); - 800d6ec: 2200 movs r2, #0 - 800d6ee: 2110 movs r1, #16 - 800d6f0: 480d ldr r0, [pc, #52] @ (800d728 ) - 800d6f2: f003 f8fa bl 80108ea - } - - HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_SET); - 800d6f6: 2201 movs r2, #1 - 800d6f8: 2110 movs r1, #16 - 800d6fa: 480b ldr r0, [pc, #44] @ (800d728 ) - 800d6fc: f003 f8f5 bl 80108ea - - HAL_UART_Transmit_IT(&huart2, serial_control.tx_buffer, packet_len); - 800d700: 89fb ldrh r3, [r7, #14] - 800d702: 461a mov r2, r3 - 800d704: 4906 ldr r1, [pc, #24] @ (800d720 ) - 800d706: 4807 ldr r0, [pc, #28] @ (800d724 ) - 800d708: f005 f8c8 bl 801289c - - serial_control.tx_tick = HAL_GetTick(); - 800d70c: f001 f8e6 bl 800e8dc - 800d710: 4603 mov r3, r0 - 800d712: 4a03 ldr r2, [pc, #12] @ (800d720 ) - 800d714: f8c2 320c str.w r3, [r2, #524] @ 0x20c - } -} - 800d718: bf00 nop - 800d71a: 3710 adds r7, #16 - 800d71c: 46bd mov sp, r7 - 800d71e: bd80 pop {r7, pc} - 800d720: 20000a98 .word 0x20000a98 - 800d724: 20000ffc .word 0x20000ffc - 800d728: 40011400 .word 0x40011400 - -0800d72c : - -static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd) { - 800d72c: b580 push {r7, lr} - 800d72e: b088 sub sp, #32 - 800d730: af00 add r7, sp, #0 - 800d732: 60f8 str r0, [r7, #12] - 800d734: 460b mov r3, r1 - 800d736: 607a str r2, [r7, #4] - 800d738: 817b strh r3, [r7, #10] - // }else{ - // test_crc_invalid = 5; - // } - - // Минимальный размер: 1 байт команды + 4 байта CRC - if (packet_len < 5) return 0; - 800d73a: 897b ldrh r3, [r7, #10] - 800d73c: 2b04 cmp r3, #4 - 800d73e: d801 bhi.n 800d744 - 800d740: 2300 movs r3, #0 - 800d742: e03f b.n 800d7c4 - if (packet_len > MAX_RX_BUFFER_SIZE) return 0; - 800d744: 897b ldrh r3, [r7, #10] - 800d746: f5b3 7f80 cmp.w r3, #256 @ 0x100 - 800d74a: d901 bls.n 800d750 - 800d74c: 2300 movs r3, #0 - 800d74e: e039 b.n 800d7c4 - - uint16_t payload_length = packet_len - 4; - 800d750: 897b ldrh r3, [r7, #10] - 800d752: 3b04 subs r3, #4 - 800d754: 83fb strh r3, [r7, #30] - - // Извлекаем принятую CRC (последние 4 байта, little-endian) - uint32_t received_checksum = - ((uint32_t)packet_data[payload_length] << 0) | - 800d756: 8bfb ldrh r3, [r7, #30] - 800d758: 68fa ldr r2, [r7, #12] - 800d75a: 4413 add r3, r2 - 800d75c: 781b ldrb r3, [r3, #0] - 800d75e: 4619 mov r1, r3 - ((uint32_t)packet_data[payload_length + 1] << 8) | - 800d760: 8bfb ldrh r3, [r7, #30] - 800d762: 3301 adds r3, #1 - 800d764: 68fa ldr r2, [r7, #12] - 800d766: 4413 add r3, r2 - 800d768: 781b ldrb r3, [r3, #0] - 800d76a: 021b lsls r3, r3, #8 - ((uint32_t)packet_data[payload_length] << 0) | - 800d76c: ea41 0203 orr.w r2, r1, r3 - ((uint32_t)packet_data[payload_length + 2] << 16) | - 800d770: 8bfb ldrh r3, [r7, #30] - 800d772: 3302 adds r3, #2 - 800d774: 68f9 ldr r1, [r7, #12] - 800d776: 440b add r3, r1 - 800d778: 781b ldrb r3, [r3, #0] - 800d77a: 041b lsls r3, r3, #16 - ((uint32_t)packet_data[payload_length + 1] << 8) | - 800d77c: 431a orrs r2, r3 - ((uint32_t)packet_data[payload_length + 3] << 24); - 800d77e: 8bfb ldrh r3, [r7, #30] - 800d780: 3303 adds r3, #3 - 800d782: 68f9 ldr r1, [r7, #12] - 800d784: 440b add r3, r1 - 800d786: 781b ldrb r3, [r3, #0] - 800d788: 061b lsls r3, r3, #24 - uint32_t received_checksum = - 800d78a: 4313 orrs r3, r2 - 800d78c: 61bb str r3, [r7, #24] - - // Вычисляем CRC для полезной нагрузки - uint32_t calculated_checksum = calculate_crc32(packet_data, payload_length); - 800d78e: 8bfb ldrh r3, [r7, #30] - 800d790: 4619 mov r1, r3 - 800d792: 68f8 ldr r0, [r7, #12] - 800d794: f7ff fef8 bl 800d588 - 800d798: 6178 str r0, [r7, #20] - - if (received_checksum != calculated_checksum) return 0; // CRC не совпадает - 800d79a: 69ba ldr r2, [r7, #24] - 800d79c: 697b ldr r3, [r7, #20] - 800d79e: 429a cmp r2, r3 - 800d7a0: d001 beq.n 800d7a6 - 800d7a2: 2300 movs r3, #0 - 800d7a4: e00e b.n 800d7c4 - - out_cmd->argument = (void *)&packet_data[1]; - 800d7a6: 68fb ldr r3, [r7, #12] - 800d7a8: 1c5a adds r2, r3, #1 - 800d7aa: 687b ldr r3, [r7, #4] - 800d7ac: 605a str r2, [r3, #4] - out_cmd->command = packet_data[0]; - 800d7ae: 68fb ldr r3, [r7, #12] - 800d7b0: 781a ldrb r2, [r3, #0] - 800d7b2: 687b ldr r3, [r7, #4] - 800d7b4: 701a strb r2, [r3, #0] - out_cmd->argument_length = (uint8_t)(payload_length - 1); - 800d7b6: 8bfb ldrh r3, [r7, #30] - 800d7b8: b2db uxtb r3, r3 - 800d7ba: 3b01 subs r3, #1 - 800d7bc: b2da uxtb r2, r3 - 800d7be: 687b ldr r3, [r7, #4] - 800d7c0: 705a strb r2, [r3, #1] - - return 1; - 800d7c2: 2301 movs r3, #1 -} - 800d7c4: 4618 mov r0, r3 - 800d7c6: 3720 adds r7, #32 - 800d7c8: 46bd mov sp, r7 - 800d7ca: bd80 pop {r7, pc} - -0800d7cc : - -static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len) { - 800d7cc: b580 push {r7, lr} - 800d7ce: b084 sub sp, #16 - 800d7d0: af00 add r7, sp, #0 - 800d7d2: 60f8 str r0, [r7, #12] - 800d7d4: 60b9 str r1, [r7, #8] - 800d7d6: 4613 mov r3, r2 - 800d7d8: 80fb strh r3, [r7, #6] - if (!parse_packet(packet_data, packet_len, (ReceivedCommand_t *)&ctx->received_command)) { - 800d7da: 68fb ldr r3, [r7, #12] - 800d7dc: f503 7200 add.w r2, r3, #512 @ 0x200 - 800d7e0: 88fb ldrh r3, [r7, #6] - 800d7e2: 4619 mov r1, r3 - 800d7e4: 68b8 ldr r0, [r7, #8] - 800d7e6: f7ff ffa1 bl 800d72c - 800d7ea: 4603 mov r3, r0 - 800d7ec: 2b00 cmp r3, #0 - 800d7ee: d101 bne.n 800d7f4 - return 0; - 800d7f0: 2300 movs r3, #0 - 800d7f2: e004 b.n 800d7fe - } - - ctx->command_ready = 1; - 800d7f4: 68fb ldr r3, [r7, #12] - 800d7f6: 2201 movs r2, #1 - 800d7f8: f883 2208 strb.w r2, [r3, #520] @ 0x208 - return 1; - 800d7fc: 2301 movs r3, #1 -} - 800d7fe: 4618 mov r0, r3 - 800d800: 3710 adds r7, #16 - 800d802: 46bd mov sp, r7 - 800d804: bd80 pop {r7, pc} - ... - -0800d808 <__NVIC_SystemReset>: -/** - \brief System Reset - \details Initiates a system reset request to reset the MCU. - */ -__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) -{ - 800d808: b480 push {r7} - 800d80a: af00 add r7, sp, #0 - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. - */ -__STATIC_FORCEINLINE void __DSB(void) -{ - __ASM volatile ("dsb 0xF":::"memory"); - 800d80c: f3bf 8f4f dsb sy -} - 800d810: bf00 nop - __DSB(); /* Ensure all outstanding memory accesses included - buffered write are completed before reset */ - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | - 800d812: 4b06 ldr r3, [pc, #24] @ (800d82c <__NVIC_SystemReset+0x24>) - 800d814: 68db ldr r3, [r3, #12] - 800d816: f403 62e0 and.w r2, r3, #1792 @ 0x700 - SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - 800d81a: 4904 ldr r1, [pc, #16] @ (800d82c <__NVIC_SystemReset+0x24>) - 800d81c: 4b04 ldr r3, [pc, #16] @ (800d830 <__NVIC_SystemReset+0x28>) - 800d81e: 4313 orrs r3, r2 - 800d820: 60cb str r3, [r1, #12] - __ASM volatile ("dsb 0xF":::"memory"); - 800d822: f3bf 8f4f dsb sy -} - 800d826: bf00 nop - SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ - __DSB(); /* Ensure completion of memory access */ - - for(;;) /* wait until reset */ - { - __NOP(); - 800d828: bf00 nop - 800d82a: e7fd b.n 800d828 <__NVIC_SystemReset+0x20> - 800d82c: e000ed00 .word 0xe000ed00 - 800d830: 05fa0004 .word 0x05fa0004 - -0800d834 : - .chargerNumber = 00001, - .unixTime = 1721651966, -}; - -// Единая функция-обработчик всех команд со switch-case -void SC_CommandHandler(ReceivedCommand_t* cmd) { - 800d834: b580 push {r7, lr} - 800d836: b084 sub sp, #16 - 800d838: af00 add r7, sp, #0 - 800d83a: 6078 str r0, [r7, #4] - - uint8_t response_code = RESP_FAILED; - 800d83c: 2313 movs r3, #19 - 800d83e: 73fb strb r3, [r7, #15] - - switch (cmd->command) { - 800d840: 687b ldr r3, [r7, #4] - 800d842: 781b ldrb r3, [r3, #0] - 800d844: 2bc2 cmp r3, #194 @ 0xc2 - 800d846: f300 80d0 bgt.w 800d9ea - 800d84a: 2bb0 cmp r3, #176 @ 0xb0 - 800d84c: da0f bge.n 800d86e - 800d84e: 2b60 cmp r3, #96 @ 0x60 - 800d850: d042 beq.n 800d8d8 - 800d852: 2b60 cmp r3, #96 @ 0x60 - 800d854: f300 80c9 bgt.w 800d9ea - 800d858: 2b50 cmp r3, #80 @ 0x50 - 800d85a: d043 beq.n 800d8e4 - 800d85c: 2b50 cmp r3, #80 @ 0x50 - 800d85e: f300 80c4 bgt.w 800d9ea - 800d862: 2b01 cmp r3, #1 - 800d864: f000 80aa beq.w 800d9bc - 800d868: 2b40 cmp r3, #64 @ 0x40 - 800d86a: d02d beq.n 800d8c8 - 800d86c: e0bd b.n 800d9ea - 800d86e: 3bb0 subs r3, #176 @ 0xb0 - 800d870: 2b12 cmp r3, #18 - 800d872: f200 80ba bhi.w 800d9ea - 800d876: a201 add r2, pc, #4 @ (adr r2, 800d87c ) - 800d878: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 800d87c: 0800d8eb .word 0x0800d8eb - 800d880: 0800d9eb .word 0x0800d9eb - 800d884: 0800d9eb .word 0x0800d9eb - 800d888: 0800d9eb .word 0x0800d9eb - 800d88c: 0800d9eb .word 0x0800d9eb - 800d890: 0800d99b .word 0x0800d99b - 800d894: 0800d9eb .word 0x0800d9eb - 800d898: 0800d9eb .word 0x0800d9eb - 800d89c: 0800d9eb .word 0x0800d9eb - 800d8a0: 0800d9eb .word 0x0800d9eb - 800d8a4: 0800d9eb .word 0x0800d9eb - 800d8a8: 0800d9eb .word 0x0800d9eb - 800d8ac: 0800d9eb .word 0x0800d9eb - 800d8b0: 0800d9eb .word 0x0800d9eb - 800d8b4: 0800d9eb .word 0x0800d9eb - 800d8b8: 0800d9eb .word 0x0800d9eb - 800d8bc: 0800d931 .word 0x0800d931 - 800d8c0: 0800d995 .word 0x0800d995 - 800d8c4: 0800d969 .word 0x0800d969 - // Команды БЕЗ аргументов - case CMD_GET_STATUS: - // Логика получения информации - monitoring_data_callback(); - 800d8c8: f000 f8b6 bl 800da38 - - // Отправляем с нормальным приоритетом - SC_SendPacket((uint8_t*)&statusPacket, sizeof(statusPacket), CMD_GET_STATUS); - 800d8cc: 2240 movs r2, #64 @ 0x40 - 800d8ce: 2158 movs r1, #88 @ 0x58 - 800d8d0: 484d ldr r0, [pc, #308] @ (800da08 ) - 800d8d2: f7ff feef bl 800d6b4 - return; // Специальный ответ уже отправлен - 800d8d6: e093 b.n 800da00 - - case CMD_GET_INFO: - SC_SendPacket((uint8_t*)&infoPacket, sizeof(infoPacket), CMD_GET_INFO); - 800d8d8: 2260 movs r2, #96 @ 0x60 - 800d8da: 210a movs r1, #10 - 800d8dc: 484b ldr r0, [pc, #300] @ (800da0c ) - 800d8de: f7ff fee9 bl 800d6b4 - return; - 800d8e2: e08d b.n 800da00 - - case CMD_GET_LOG: - debug_buffer_send(); - 800d8e4: f7fd fddc bl 800b4a0 - return; // Ответ формируется внутри debug_buffer_send - 800d8e8: e08a b.n 800da00 - - // Команды С аргументами - - case CMD_SET_CONFIG: - if (cmd->argument_length == sizeof(ConfigBlock_t)) { - 800d8ea: 687b ldr r3, [r7, #4] - 800d8ec: 785b ldrb r3, [r3, #1] - 800d8ee: 2b0b cmp r3, #11 - 800d8f0: d11b bne.n 800d92a - memcpy(&config, cmd->argument, sizeof(ConfigBlock_t)); - 800d8f2: 687b ldr r3, [r7, #4] - 800d8f4: 685a ldr r2, [r3, #4] - 800d8f6: 4b46 ldr r3, [pc, #280] @ (800da10 ) - 800d8f8: 6810 ldr r0, [r2, #0] - 800d8fa: 6851 ldr r1, [r2, #4] - 800d8fc: c303 stmia r3!, {r0, r1} - 800d8fe: 8911 ldrh r1, [r2, #8] - 800d900: 7a92 ldrb r2, [r2, #10] - 800d902: 8019 strh r1, [r3, #0] - 800d904: 709a strb r2, [r3, #2] - GBT_SetConfig(); - 800d906: f7fc fa73 bl 8009df0 - config_initialized = 1; - 800d90a: 4b42 ldr r3, [pc, #264] @ (800da14 ) - 800d90c: 2201 movs r2, #1 - 800d90e: 701a strb r2, [r3, #0] - GBT_SetConfig(); - 800d910: f7fc fa6e bl 8009df0 -// CONN.connState = CONN_Available; // - log_printf(LOG_INFO, "Set Config: %s %d\n", config.location, config.chargerNumber); - 800d914: 4b3e ldr r3, [pc, #248] @ (800da10 ) - 800d916: f8d3 3003 ldr.w r3, [r3, #3] - 800d91a: 4a3d ldr r2, [pc, #244] @ (800da10 ) - 800d91c: 493e ldr r1, [pc, #248] @ (800da18 ) - 800d91e: 2007 movs r0, #7 - 800d920: f7fd fe20 bl 800b564 - response_code = RESP_SUCCESS; - 800d924: 2312 movs r3, #18 - 800d926: 73fb strb r3, [r7, #15] - break; - 800d928: e062 b.n 800d9f0 - } - response_code = RESP_FAILED; - 800d92a: 2313 movs r3, #19 - 800d92c: 73fb strb r3, [r7, #15] - break; - 800d92e: e05f b.n 800d9f0 - case CMD_SET_POWER_LIMIT: - if (cmd->argument_length == 1) { - 800d930: 687b ldr r3, [r7, #4] - 800d932: 785b ldrb r3, [r3, #1] - 800d934: 2b01 cmp r3, #1 - 800d936: d114 bne.n 800d962 - PSU0.power_limit = ((uint8_t*)cmd->argument)[0] * 1000; - 800d938: 687b ldr r3, [r7, #4] - 800d93a: 685b ldr r3, [r3, #4] - 800d93c: 781b ldrb r3, [r3, #0] - 800d93e: 461a mov r2, r3 - 800d940: f44f 737a mov.w r3, #1000 @ 0x3e8 - 800d944: fb02 f303 mul.w r3, r2, r3 - 800d948: 461a mov r2, r3 - 800d94a: 4b34 ldr r3, [pc, #208] @ (800da1c ) - 800d94c: 615a str r2, [r3, #20] - log_printf(LOG_INFO, "Power limit: %d\n", PSU0.power_limit); - 800d94e: 4b33 ldr r3, [pc, #204] @ (800da1c ) - 800d950: 695b ldr r3, [r3, #20] - 800d952: 461a mov r2, r3 - 800d954: 4932 ldr r1, [pc, #200] @ (800da20 ) - 800d956: 2007 movs r0, #7 - 800d958: f7fd fe04 bl 800b564 - //CONN.connState = (((uint8_t*)cmd->argument)[0])/4; - response_code = RESP_SUCCESS; - 800d95c: 2312 movs r3, #18 - 800d95e: 73fb strb r3, [r7, #15] - break; - 800d960: e046 b.n 800d9f0 - } - response_code = RESP_FAILED; - 800d962: 2313 movs r3, #19 - 800d964: 73fb strb r3, [r7, #15] - break; - 800d966: e043 b.n 800d9f0 - case CMD_CHARGE_PERMIT: - if (cmd->argument_length == 1) { - 800d968: 687b ldr r3, [r7, #4] - 800d96a: 785b ldrb r3, [r3, #1] - 800d96c: 2b01 cmp r3, #1 - 800d96e: d10e bne.n 800d98e - CONN.connControl = ((uint8_t*)cmd->argument)[0]; - 800d970: 687b ldr r3, [r7, #4] - 800d972: 685b ldr r3, [r3, #4] - 800d974: 781a ldrb r2, [r3, #0] - 800d976: 4b2b ldr r3, [pc, #172] @ (800da24 ) - 800d978: 701a strb r2, [r3, #0] - log_printf(LOG_INFO, "Charge permit: %d\n", CONN.connControl); - 800d97a: 4b2a ldr r3, [pc, #168] @ (800da24 ) - 800d97c: 781b ldrb r3, [r3, #0] - 800d97e: 461a mov r2, r3 - 800d980: 4929 ldr r1, [pc, #164] @ (800da28 ) - 800d982: 2007 movs r0, #7 - 800d984: f7fd fdee bl 800b564 - response_code = RESP_SUCCESS; - 800d988: 2312 movs r3, #18 - 800d98a: 73fb strb r3, [r7, #15] - break; - 800d98c: e030 b.n 800d9f0 - } - response_code = RESP_FAILED; - 800d98e: 2313 movs r3, #19 - 800d990: 73fb strb r3, [r7, #15] - break; - 800d992: e02d b.n 800d9f0 - // memcpy(&PSU_TestMode, cmd->argument, sizeof(PSU_TestMode_t)); - // log_printf(LOG_INFO, "Test PSU: %d %d %d\n", PSU_TestMode.enable, PSU_TestMode.voltage, PSU_TestMode.current); - // response_code = RESP_SUCCESS; - // break; - // } - response_code = RESP_FAILED; - 800d994: 2313 movs r3, #19 - 800d996: 73fb strb r3, [r7, #15] - break; - 800d998: e02a b.n 800d9f0 - case CMD_DEVICE_RESET: - // 2. Отправляем SUCCESS (хост может успеть получить его перед ребутом) - SC_SendPacket(NULL, 0, RESP_SUCCESS); - 800d99a: 2212 movs r2, #18 - 800d99c: 2100 movs r1, #0 - 800d99e: 2000 movs r0, #0 - 800d9a0: f7ff fe88 bl 800d6b4 - - while(huart2.gState == HAL_UART_STATE_BUSY_TX); // Ожидание завершения передачи - 800d9a4: bf00 nop - 800d9a6: 4b21 ldr r3, [pc, #132] @ (800da2c ) - 800d9a8: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 800d9ac: b2db uxtb r3, r3 - 800d9ae: 2b21 cmp r3, #33 @ 0x21 - 800d9b0: d0f9 beq.n 800d9a6 - - HAL_Delay(10); - 800d9b2: 200a movs r0, #10 - 800d9b4: f000 ff9c bl 800e8f0 - // 3. Выполняем программный сброс - NVIC_SystemReset(); - 800d9b8: f7ff ff26 bl 800d808 <__NVIC_SystemReset> - return; // Сюда код уже не дойдет, но для компилятора нxужно - - case CMD_ISOLATION_STATUS: - if (cmd->argument_length == sizeof(IsolationStatusPacket_t)) { - 800d9bc: 687b ldr r3, [r7, #4] - 800d9be: 785b ldrb r3, [r3, #1] - 800d9c0: 2b09 cmp r3, #9 - 800d9c2: d10f bne.n 800d9e4 - memcpy(&ISO, cmd->argument, sizeof(IsolationStatusPacket_t)); - 800d9c4: 687b ldr r3, [r7, #4] - 800d9c6: 685a ldr r2, [r3, #4] - 800d9c8: 4b19 ldr r3, [pc, #100] @ (800da30 ) - 800d9ca: 6810 ldr r0, [r2, #0] - 800d9cc: 6851 ldr r1, [r2, #4] - 800d9ce: c303 stmia r3!, {r0, r1} - 800d9d0: 7a12 ldrb r2, [r2, #8] - 800d9d2: 701a strb r2, [r3, #0] - // Для однонаправленного UART5 ответ не нужен - if (g_sc_command_source == SC_SOURCE_UART5) { - 800d9d4: 4b17 ldr r3, [pc, #92] @ (800da34 ) - 800d9d6: 781b ldrb r3, [r3, #0] - 800d9d8: b2db uxtb r3, r3 - 800d9da: 2b01 cmp r3, #1 - 800d9dc: d00f beq.n 800d9fe - return; - } - response_code = RESP_SUCCESS; - 800d9de: 2312 movs r3, #18 - 800d9e0: 73fb strb r3, [r7, #15] - break; - 800d9e2: e005 b.n 800d9f0 - } - response_code = RESP_FAILED; - 800d9e4: 2313 movs r3, #19 - 800d9e6: 73fb strb r3, [r7, #15] - break; - 800d9e8: e002 b.n 800d9f0 - - default: - // Неизвестная команда - response_code = RESP_FAILED; - 800d9ea: 2313 movs r3, #19 - 800d9ec: 73fb strb r3, [r7, #15] - break; - 800d9ee: bf00 nop - } - - // Отправляем финальный ответ (для команд без собственного ответа) - SC_SendPacket(NULL, 0, response_code); - 800d9f0: 7bfb ldrb r3, [r7, #15] - 800d9f2: 461a mov r2, r3 - 800d9f4: 2100 movs r1, #0 - 800d9f6: 2000 movs r0, #0 - 800d9f8: f7ff fe5c bl 800d6b4 - 800d9fc: e000 b.n 800da00 - return; - 800d9fe: bf00 nop -} - 800da00: 3710 adds r7, #16 - 800da02: 46bd mov sp, r7 - 800da04: bd80 pop {r7, pc} - 800da06: bf00 nop - 800da08: 20000ebc .word 0x20000ebc - 800da0c: 20000f14 .word 0x20000f14 - 800da10: 2000006c .word 0x2000006c - 800da14: 20000f1e .word 0x20000f1e - 800da18: 08016cd8 .word 0x08016cd8 - 800da1c: 20000a14 .word 0x20000a14 - 800da20: 08016cec .word 0x08016cec - 800da24: 200002f8 .word 0x200002f8 - 800da28: 08016d00 .word 0x08016d00 - 800da2c: 20000ffc .word 0x20000ffc - 800da30: 20000060 .word 0x20000060 - 800da34: 20000eb8 .word 0x20000eb8 - -0800da38 : - - -// Колбэк для заполнения данных мониторинга -void monitoring_data_callback() { - 800da38: b5b0 push {r4, r5, r7, lr} - 800da3a: af00 add r7, sp, #0 - - // Информация о зарядной сессии - statusPacket.SOC = CONN.SOC; - 800da3c: 4b9d ldr r3, [pc, #628] @ (800dcb4 ) - 800da3e: 789a ldrb r2, [r3, #2] - 800da40: 4b9d ldr r3, [pc, #628] @ (800dcb8 ) - 800da42: 709a strb r2, [r3, #2] - statusPacket.Energy = CONN.Energy; - 800da44: 4b9b ldr r3, [pc, #620] @ (800dcb4 ) - 800da46: f8d3 3007 ldr.w r3, [r3, #7] - 800da4a: 4a9b ldr r2, [pc, #620] @ (800dcb8 ) - 800da4c: f8c2 3003 str.w r3, [r2, #3] - statusPacket.RequestedVoltage = CONN.RequestedVoltage; - 800da50: 4b98 ldr r3, [pc, #608] @ (800dcb4 ) - 800da52: f8b3 300f ldrh.w r3, [r3, #15] - 800da56: b29a uxth r2, r3 - 800da58: 4b97 ldr r3, [pc, #604] @ (800dcb8 ) - 800da5a: f8a3 2007 strh.w r2, [r3, #7] - statusPacket.RequestedCurrent = CONN.WantedCurrent; - 800da5e: 4b95 ldr r3, [pc, #596] @ (800dcb4 ) - 800da60: f8b3 301b ldrh.w r3, [r3, #27] - 800da64: b29a uxth r2, r3 - 800da66: 4b94 ldr r3, [pc, #592] @ (800dcb8 ) - 800da68: f8a3 2009 strh.w r2, [r3, #9] - statusPacket.MeasuredVoltage = CONN.MeasuredVoltage; - 800da6c: 4b91 ldr r3, [pc, #580] @ (800dcb4 ) - 800da6e: f8b3 3013 ldrh.w r3, [r3, #19] - 800da72: b29a uxth r2, r3 - 800da74: 4b90 ldr r3, [pc, #576] @ (800dcb8 ) - 800da76: f8a3 200b strh.w r2, [r3, #11] - statusPacket.MeasuredCurrent = CONN.MeasuredCurrent; - 800da7a: 4b8e ldr r3, [pc, #568] @ (800dcb4 ) - 800da7c: f8b3 3015 ldrh.w r3, [r3, #21] - 800da80: b29a uxth r2, r3 - 800da82: 4b8d ldr r3, [pc, #564] @ (800dcb8 ) - 800da84: f8a3 200d strh.w r2, [r3, #13] - statusPacket.outputEnabled = CONN.outputEnabled; - 800da88: 4b8a ldr r3, [pc, #552] @ (800dcb4 ) - 800da8a: 7e1a ldrb r2, [r3, #24] - 800da8c: 4b8a ldr r3, [pc, #552] @ (800dcb8 ) - 800da8e: 73da strb r2, [r3, #15] - statusPacket.chargingError = CONN.chargingError; - 800da90: 4b88 ldr r3, [pc, #544] @ (800dcb4 ) - 800da92: 7f5a ldrb r2, [r3, #29] - 800da94: 4b88 ldr r3, [pc, #544] @ (800dcb8 ) - 800da96: 705a strb r2, [r3, #1] - statusPacket.connState = CONN.connState; - 800da98: 4b86 ldr r3, [pc, #536] @ (800dcb4 ) - 800da9a: 785a ldrb r2, [r3, #1] - 800da9c: 4b86 ldr r3, [pc, #536] @ (800dcb8 ) - 800da9e: 701a strb r2, [r3, #0] - statusPacket.chargingElapsedTimeMin = 0; - 800daa0: 4b85 ldr r3, [pc, #532] @ (800dcb8 ) - 800daa2: 2200 movs r2, #0 - 800daa4: 741a strb r2, [r3, #16] - 800daa6: 2200 movs r2, #0 - 800daa8: 745a strb r2, [r3, #17] - statusPacket.chargingElapsedTimeSec = 0; - 800daaa: 4b83 ldr r3, [pc, #524] @ (800dcb8 ) - 800daac: 2200 movs r2, #0 - 800daae: 749a strb r2, [r3, #18] - statusPacket.estimatedRemainingChargingTime = 0; - 800dab0: 4b81 ldr r3, [pc, #516] @ (800dcb8 ) - 800dab2: 2200 movs r2, #0 - 800dab4: 74da strb r2, [r3, #19] - 800dab6: 2200 movs r2, #0 - 800dab8: 751a strb r2, [r3, #20] - - // состояние зарядной станции - statusPacket.relayAC = RELAY_Read(RELAY_AC); - 800daba: 2004 movs r0, #4 - 800dabc: f7fb fe7a bl 80097b4 - 800dac0: 4603 mov r3, r0 - 800dac2: f003 0301 and.w r3, r3, #1 - 800dac6: b2d9 uxtb r1, r3 - 800dac8: 4a7b ldr r2, [pc, #492] @ (800dcb8 ) - 800daca: 7d53 ldrb r3, [r2, #21] - 800dacc: f361 0300 bfi r3, r1, #0, #1 - 800dad0: 7553 strb r3, [r2, #21] - statusPacket.relayDC = RELAY_Read(RELAY_DC); - 800dad2: 2003 movs r0, #3 - 800dad4: f7fb fe6e bl 80097b4 - 800dad8: 4603 mov r3, r0 - 800dada: f003 0301 and.w r3, r3, #1 - 800dade: b2d9 uxtb r1, r3 - 800dae0: 4a75 ldr r2, [pc, #468] @ (800dcb8 ) - 800dae2: 7d53 ldrb r3, [r2, #21] - 800dae4: f361 0341 bfi r3, r1, #1, #1 - 800dae8: 7553 strb r3, [r2, #21] - statusPacket.relayAUX = RELAY_Read(RELAY_AUX0); - 800daea: 2000 movs r0, #0 - 800daec: f7fb fe62 bl 80097b4 - 800daf0: 4603 mov r3, r0 - 800daf2: f003 0301 and.w r3, r3, #1 - 800daf6: b2d9 uxtb r1, r3 - 800daf8: 4a6f ldr r2, [pc, #444] @ (800dcb8 ) - 800dafa: 7d53 ldrb r3, [r2, #21] - 800dafc: f361 0382 bfi r3, r1, #2, #1 - 800db00: 7553 strb r3, [r2, #21] - statusPacket.lockState = GBT_LockGetState(); - 800db02: f7fe f9bd bl 800be80 - 800db06: 4603 mov r3, r0 - 800db08: f003 0301 and.w r3, r3, #1 - 800db0c: b2d9 uxtb r1, r3 - 800db0e: 4a6a ldr r2, [pc, #424] @ (800dcb8 ) - 800db10: 7d53 ldrb r3, [r2, #21] - 800db12: f361 03c3 bfi r3, r1, #3, #1 - 800db16: 7553 strb r3, [r2, #21] - statusPacket.stopButton = !IN_ReadInput(IN_ESTOP); - 800db18: 2003 movs r0, #3 - 800db1a: f7fb fe5b bl 80097d4 - 800db1e: 4603 mov r3, r0 - 800db20: 2b00 cmp r3, #0 - 800db22: bf0c ite eq - 800db24: 2301 moveq r3, #1 - 800db26: 2300 movne r3, #0 - 800db28: b2d9 uxtb r1, r3 - 800db2a: 4a63 ldr r2, [pc, #396] @ (800dcb8 ) - 800db2c: 7d53 ldrb r3, [r2, #21] - 800db2e: f361 1304 bfi r3, r1, #4, #1 - 800db32: 7553 strb r3, [r2, #21] - statusPacket.logAvailable = (debug_buffer_available()>0)?1:0; - 800db34: f7fd fca0 bl 800b478 - 800db38: 4603 mov r3, r0 - 800db3a: 2b00 cmp r3, #0 - 800db3c: bf14 ite ne - 800db3e: 2301 movne r3, #1 - 800db40: 2300 moveq r3, #0 - 800db42: b2d9 uxtb r1, r3 - 800db44: 4a5c ldr r2, [pc, #368] @ (800dcb8 ) - 800db46: 7d53 ldrb r3, [r2, #21] - 800db48: f361 1345 bfi r3, r1, #5, #1 - 800db4c: 7553 strb r3, [r2, #21] - statusPacket.evInfoAvailable = GBT_BAT_STAT_recv; - 800db4e: 4b5b ldr r3, [pc, #364] @ (800dcbc ) - 800db50: 781b ldrb r3, [r3, #0] - 800db52: f003 0301 and.w r3, r3, #1 - 800db56: b2d9 uxtb r1, r3 - 800db58: 4a57 ldr r2, [pc, #348] @ (800dcb8 ) - 800db5a: 7d53 ldrb r3, [r2, #21] - 800db5c: f361 1386 bfi r3, r1, #6, #1 - 800db60: 7553 strb r3, [r2, #21] - statusPacket.psuOnline = PSU0.online; - 800db62: 4b57 ldr r3, [pc, #348] @ (800dcc0 ) - 800db64: 7a1b ldrb r3, [r3, #8] - 800db66: f003 0301 and.w r3, r3, #1 - 800db6a: b2d9 uxtb r1, r3 - 800db6c: 4a52 ldr r2, [pc, #328] @ (800dcb8 ) - 800db6e: 7d53 ldrb r3, [r2, #21] - 800db70: f361 13c7 bfi r3, r1, #7, #1 - 800db74: 7553 strb r3, [r2, #21] - - statusPacket.tempConnector0 = GBT_ReadTemp(0); // температура коннектора - 800db76: 2000 movs r0, #0 - 800db78: f7fb ff10 bl 800999c - 800db7c: 4603 mov r3, r0 - 800db7e: b25a sxtb r2, r3 - 800db80: 4b4d ldr r3, [pc, #308] @ (800dcb8 ) - 800db82: 765a strb r2, [r3, #25] - statusPacket.tempConnector1 = GBT_ReadTemp(1); - 800db84: 2001 movs r0, #1 - 800db86: f7fb ff09 bl 800999c - 800db8a: 4603 mov r3, r0 - 800db8c: b25a sxtb r2, r3 - 800db8e: 4b4a ldr r3, [pc, #296] @ (800dcb8 ) - 800db90: 769a strb r2, [r3, #26] - statusPacket.tempAmbient = PSU0.tempAmbient; // температура окружающего воздуха - 800db92: 4b4b ldr r3, [pc, #300] @ (800dcc0 ) - 800db94: 69db ldr r3, [r3, #28] - 800db96: b25a sxtb r2, r3 - 800db98: 4b47 ldr r3, [pc, #284] @ (800dcb8 ) - 800db9a: 76da strb r2, [r3, #27] - statusPacket.tempBatteryMax = GBT_BatteryStatus.batteryHighestTemp; // максимальная температура батареи - 800db9c: 4b49 ldr r3, [pc, #292] @ (800dcc4 ) - 800db9e: 785b ldrb r3, [r3, #1] - 800dba0: b25a sxtb r2, r3 - 800dba2: 4b45 ldr r3, [pc, #276] @ (800dcb8 ) - 800dba4: 771a strb r2, [r3, #28] - statusPacket.tempBatteryMin = GBT_BatteryStatus.batteryLowestTemp; // минимальная температура батареи - 800dba6: 4b47 ldr r3, [pc, #284] @ (800dcc4 ) - 800dba8: 78db ldrb r3, [r3, #3] - 800dbaa: b25a sxtb r2, r3 - 800dbac: 4b42 ldr r3, [pc, #264] @ (800dcb8 ) - 800dbae: 775a strb r2, [r3, #29] - - statusPacket.highestVoltageOfBatteryCell = GBT_ChargingStatus.highestVoltageOfBatteryCell; - 800dbb0: 4b45 ldr r3, [pc, #276] @ (800dcc8 ) - 800dbb2: 889b ldrh r3, [r3, #4] - 800dbb4: b29a uxth r2, r3 - 800dbb6: 4b40 ldr r3, [pc, #256] @ (800dcb8 ) - 800dbb8: 83da strh r2, [r3, #30] - statusPacket.batteryStatus = GBT_BatteryStatus.batteryStatus; - 800dbba: 4b42 ldr r3, [pc, #264] @ (800dcc4 ) - 800dbbc: 799a ldrb r2, [r3, #6] - 800dbbe: 4b3e ldr r3, [pc, #248] @ (800dcb8 ) - 800dbc0: f883 2020 strb.w r2, [r3, #32] - - statusPacket.phaseVoltageAB = PSU_06.VAB; - 800dbc4: 4b41 ldr r3, [pc, #260] @ (800dccc ) - 800dbc6: 689b ldr r3, [r3, #8] - 800dbc8: b29a uxth r2, r3 - 800dbca: 4b3b ldr r3, [pc, #236] @ (800dcb8 ) - 800dbcc: f8a3 2021 strh.w r2, [r3, #33] @ 0x21 - statusPacket.phaseVoltageBC = PSU_06.VBC; - 800dbd0: 4b3e ldr r3, [pc, #248] @ (800dccc ) - 800dbd2: 68db ldr r3, [r3, #12] - 800dbd4: b29a uxth r2, r3 - 800dbd6: 4b38 ldr r3, [pc, #224] @ (800dcb8 ) - 800dbd8: f8a3 2023 strh.w r2, [r3, #35] @ 0x23 - statusPacket.phaseVoltageCA = PSU_06.VCA; - 800dbdc: 4b3b ldr r3, [pc, #236] @ (800dccc ) - 800dbde: 691b ldr r3, [r3, #16] - 800dbe0: b29a uxth r2, r3 - 800dbe2: 4b35 ldr r3, [pc, #212] @ (800dcb8 ) - 800dbe4: f8a3 2025 strh.w r2, [r3, #37] @ 0x25 - - memcpy(statusPacket.VIN, GBT_EVInfo.EVIN, sizeof(GBT_EVInfo.EVIN)); - 800dbe8: 4b33 ldr r3, [pc, #204] @ (800dcb8 ) - 800dbea: 4a39 ldr r2, [pc, #228] @ (800dcd0 ) - 800dbec: 3327 adds r3, #39 @ 0x27 - 800dbee: 3218 adds r2, #24 - 800dbf0: 6815 ldr r5, [r2, #0] - 800dbf2: 6854 ldr r4, [r2, #4] - 800dbf4: 6890 ldr r0, [r2, #8] - 800dbf6: 68d1 ldr r1, [r2, #12] - 800dbf8: 601d str r5, [r3, #0] - 800dbfa: 605c str r4, [r3, #4] - 800dbfc: 6098 str r0, [r3, #8] - 800dbfe: 60d9 str r1, [r3, #12] - 800dc00: 7c12 ldrb r2, [r2, #16] - 800dc02: 741a strb r2, [r3, #16] - - statusPacket.batteryType = GBT_EVInfo.batteryType; - 800dc04: 4b32 ldr r3, [pc, #200] @ (800dcd0 ) - 800dc06: 78da ldrb r2, [r3, #3] - 800dc08: 4b2b ldr r3, [pc, #172] @ (800dcb8 ) - 800dc0a: f883 2038 strb.w r2, [r3, #56] @ 0x38 - statusPacket.batteryCapacity = GBT_EVInfo.batteryCapacity; - 800dc0e: 4b30 ldr r3, [pc, #192] @ (800dcd0 ) - 800dc10: 889b ldrh r3, [r3, #4] - 800dc12: b29a uxth r2, r3 - 800dc14: 4b28 ldr r3, [pc, #160] @ (800dcb8 ) - 800dc16: f8a3 2039 strh.w r2, [r3, #57] @ 0x39 - statusPacket.batteryVoltage = GBT_EVInfo.batteryVoltage; - 800dc1a: 4b2d ldr r3, [pc, #180] @ (800dcd0 ) - 800dc1c: 88db ldrh r3, [r3, #6] - 800dc1e: b29a uxth r2, r3 - 800dc20: 4b25 ldr r3, [pc, #148] @ (800dcb8 ) - 800dc22: f8a3 203b strh.w r2, [r3, #59] @ 0x3b - memcpy(statusPacket.batteryVendor, GBT_EVInfo.batteryVendor, sizeof(statusPacket.batteryVendor)); - 800dc26: 4b2a ldr r3, [pc, #168] @ (800dcd0 ) - 800dc28: 689b ldr r3, [r3, #8] - 800dc2a: 461a mov r2, r3 - 800dc2c: 4b22 ldr r3, [pc, #136] @ (800dcb8 ) - 800dc2e: f8c3 203d str.w r2, [r3, #61] @ 0x3d - statusPacket.batterySN = GBT_EVInfo.batterySN; - 800dc32: 4b27 ldr r3, [pc, #156] @ (800dcd0 ) - 800dc34: 68db ldr r3, [r3, #12] - 800dc36: 4a20 ldr r2, [pc, #128] @ (800dcb8 ) - 800dc38: f8c2 3041 str.w r3, [r2, #65] @ 0x41 - statusPacket.batteryManuD = GBT_EVInfo.batteryManuD; - 800dc3c: 4b24 ldr r3, [pc, #144] @ (800dcd0 ) - 800dc3e: 7c9a ldrb r2, [r3, #18] - 800dc40: 4b1d ldr r3, [pc, #116] @ (800dcb8 ) - 800dc42: f883 2047 strb.w r2, [r3, #71] @ 0x47 - statusPacket.batteryManuM = GBT_EVInfo.batteryManuM; - 800dc46: 4b22 ldr r3, [pc, #136] @ (800dcd0 ) - 800dc48: 7c5a ldrb r2, [r3, #17] - 800dc4a: 4b1b ldr r3, [pc, #108] @ (800dcb8 ) - 800dc4c: f883 2046 strb.w r2, [r3, #70] @ 0x46 - statusPacket.batteryManuY = GBT_EVInfo.batteryManuY; - 800dc50: 4b1f ldr r3, [pc, #124] @ (800dcd0 ) - 800dc52: 7c1a ldrb r2, [r3, #16] - 800dc54: 4b18 ldr r3, [pc, #96] @ (800dcb8 ) - 800dc56: f883 2045 strb.w r2, [r3, #69] @ 0x45 - statusPacket.batteryCycleCount = GBT_EVInfo.batteryCycleCount; - 800dc5a: 4b1d ldr r3, [pc, #116] @ (800dcd0 ) - 800dc5c: 7cda ldrb r2, [r3, #19] - 800dc5e: 7d19 ldrb r1, [r3, #20] - 800dc60: 0209 lsls r1, r1, #8 - 800dc62: 430a orrs r2, r1 - 800dc64: 7d5b ldrb r3, [r3, #21] - 800dc66: 041b lsls r3, r3, #16 - 800dc68: 4313 orrs r3, r2 - 800dc6a: b29a uxth r2, r3 - 800dc6c: 4b12 ldr r3, [pc, #72] @ (800dcb8 ) - 800dc6e: f8a3 2048 strh.w r2, [r3, #72] @ 0x48 - statusPacket.ownAuto = GBT_EVInfo.ownAuto; - 800dc72: 4b17 ldr r3, [pc, #92] @ (800dcd0 ) - 800dc74: 7d9a ldrb r2, [r3, #22] - 800dc76: 4b10 ldr r3, [pc, #64] @ (800dcb8 ) - 800dc78: f883 204a strb.w r2, [r3, #74] @ 0x4a - memcpy(statusPacket.EV_SW_VER, GBT_EVInfo.EV_SW_VER, sizeof(statusPacket.EV_SW_VER)); - 800dc7c: 4b0e ldr r3, [pc, #56] @ (800dcb8 ) - 800dc7e: 4a14 ldr r2, [pc, #80] @ (800dcd0 ) - 800dc80: 334b adds r3, #75 @ 0x4b - 800dc82: 3229 adds r2, #41 @ 0x29 - 800dc84: 6811 ldr r1, [r2, #0] - 800dc86: 6852 ldr r2, [r2, #4] - 800dc88: 6019 str r1, [r3, #0] - 800dc8a: 605a str r2, [r3, #4] - - statusPacket.testMode = 0; - 800dc8c: 4b0a ldr r3, [pc, #40] @ (800dcb8 ) - 800dc8e: 2200 movs r2, #0 - 800dc90: f883 2053 strb.w r2, [r3, #83] @ 0x53 - statusPacket.testVoltage = 0; - 800dc94: 4b08 ldr r3, [pc, #32] @ (800dcb8 ) - 800dc96: 2200 movs r2, #0 - 800dc98: f883 2054 strb.w r2, [r3, #84] @ 0x54 - 800dc9c: 2200 movs r2, #0 - 800dc9e: f883 2055 strb.w r2, [r3, #85] @ 0x55 - statusPacket.testCurrent = 0; - 800dca2: 4b05 ldr r3, [pc, #20] @ (800dcb8 ) - 800dca4: 2200 movs r2, #0 - 800dca6: f883 2056 strb.w r2, [r3, #86] @ 0x56 - 800dcaa: 2200 movs r2, #0 - 800dcac: f883 2057 strb.w r2, [r3, #87] @ 0x57 - // В debug.c есть CONN_SetState, предполагаем наличие CONN_GetState() - // Если такой функции нет, закомментируйте следующую строку: - // statusPacket.connState = CONN_GetState(); - - -} - 800dcb0: bf00 nop - 800dcb2: bdb0 pop {r4, r5, r7, pc} - 800dcb4: 200002f8 .word 0x200002f8 - 800dcb8: 20000ebc .word 0x20000ebc - 800dcbc: 20000329 .word 0x20000329 - 800dcc0: 20000a14 .word 0x20000a14 - 800dcc4: 200003a4 .word 0x200003a4 - 800dcc8: 20000398 .word 0x20000398 - 800dccc: 200009e8 .word 0x200009e8 - 800dcd0: 20000344 .word 0x20000344 - -0800dcd4 : -static uint32_t RTC1_ReadTimeCounter(RTC_HandleTypeDef *hrtc); -static HAL_StatusTypeDef RTC1_ExitInitMode(RTC_HandleTypeDef *hrtc); -static HAL_StatusTypeDef RTC1_EnterInitMode(RTC_HandleTypeDef *hrtc); - - -uint32_t get_Current_Time(){ - 800dcd4: b580 push {r7, lr} - 800dcd6: af00 add r7, sp, #0 - return RTC1_ReadTimeCounter(&hrtc); - 800dcd8: 4802 ldr r0, [pc, #8] @ (800dce4 ) - 800dcda: f000 f8a5 bl 800de28 - 800dcde: 4603 mov r3, r0 -} - 800dce0: 4618 mov r0, r3 - 800dce2: bd80 pop {r7, pc} - 800dce4: 20000a84 .word 0x20000a84 - -0800dce8 : - -void set_Time(uint32_t unix_time){ - 800dce8: b580 push {r7, lr} - 800dcea: b082 sub sp, #8 - 800dcec: af00 add r7, sp, #0 - 800dcee: 6078 str r0, [r7, #4] - RTC1_WriteTimeCounter(&hrtc, unix_time); - 800dcf0: 6879 ldr r1, [r7, #4] - 800dcf2: 4803 ldr r0, [pc, #12] @ (800dd00 ) - 800dcf4: f000 f8c8 bl 800de88 -} - 800dcf8: bf00 nop - 800dcfa: 3708 adds r7, #8 - 800dcfc: 46bd mov sp, r7 - 800dcfe: bd80 pop {r7, pc} - 800dd00: 20000a84 .word 0x20000a84 - -0800dd04 : - -uint8_t to_bcd(int value) { - 800dd04: b480 push {r7} - 800dd06: b083 sub sp, #12 - 800dd08: af00 add r7, sp, #0 - 800dd0a: 6078 str r0, [r7, #4] - return ((value / 10) << 4) | (value % 10); - 800dd0c: 687b ldr r3, [r7, #4] - 800dd0e: 4a0f ldr r2, [pc, #60] @ (800dd4c ) - 800dd10: fb82 1203 smull r1, r2, r2, r3 - 800dd14: 1092 asrs r2, r2, #2 - 800dd16: 17db asrs r3, r3, #31 - 800dd18: 1ad3 subs r3, r2, r3 - 800dd1a: b25b sxtb r3, r3 - 800dd1c: 011b lsls r3, r3, #4 - 800dd1e: b258 sxtb r0, r3 - 800dd20: 687a ldr r2, [r7, #4] - 800dd22: 4b0a ldr r3, [pc, #40] @ (800dd4c ) - 800dd24: fb83 1302 smull r1, r3, r3, r2 - 800dd28: 1099 asrs r1, r3, #2 - 800dd2a: 17d3 asrs r3, r2, #31 - 800dd2c: 1ac9 subs r1, r1, r3 - 800dd2e: 460b mov r3, r1 - 800dd30: 009b lsls r3, r3, #2 - 800dd32: 440b add r3, r1 - 800dd34: 005b lsls r3, r3, #1 - 800dd36: 1ad1 subs r1, r2, r3 - 800dd38: b24b sxtb r3, r1 - 800dd3a: 4303 orrs r3, r0 - 800dd3c: b25b sxtb r3, r3 - 800dd3e: b2db uxtb r3, r3 -} - 800dd40: 4618 mov r0, r3 - 800dd42: 370c adds r7, #12 - 800dd44: 46bd mov sp, r7 - 800dd46: bc80 pop {r7} - 800dd48: 4770 bx lr - 800dd4a: bf00 nop - 800dd4c: 66666667 .word 0x66666667 - -0800dd50 : - -void unix_to_bcd(uint32_t unix_time, uint8_t *time) { - 800dd50: b590 push {r4, r7, lr} - 800dd52: b087 sub sp, #28 - 800dd54: af00 add r7, sp, #0 - 800dd56: 6078 str r0, [r7, #4] - 800dd58: 6039 str r1, [r7, #0] - struct tm *tm_info; - time_t raw_time = (time_t)unix_time; - 800dd5a: 6879 ldr r1, [r7, #4] - 800dd5c: 2000 movs r0, #0 - 800dd5e: 460a mov r2, r1 - 800dd60: 4603 mov r3, r0 - 800dd62: e9c7 2302 strd r2, r3, [r7, #8] - tm_info = gmtime(&raw_time); - 800dd66: f107 0308 add.w r3, r7, #8 - 800dd6a: 4618 mov r0, r3 - 800dd6c: f006 fa1e bl 80141ac - 800dd70: 6178 str r0, [r7, #20] - - time[0] = to_bcd(tm_info->tm_sec); - 800dd72: 697b ldr r3, [r7, #20] - 800dd74: 681b ldr r3, [r3, #0] - 800dd76: 4618 mov r0, r3 - 800dd78: f7ff ffc4 bl 800dd04 - 800dd7c: 4603 mov r3, r0 - 800dd7e: 461a mov r2, r3 - 800dd80: 683b ldr r3, [r7, #0] - 800dd82: 701a strb r2, [r3, #0] - time[1] = to_bcd(tm_info->tm_min); - 800dd84: 697b ldr r3, [r7, #20] - 800dd86: 685a ldr r2, [r3, #4] - 800dd88: 683b ldr r3, [r7, #0] - 800dd8a: 1c5c adds r4, r3, #1 - 800dd8c: 4610 mov r0, r2 - 800dd8e: f7ff ffb9 bl 800dd04 - 800dd92: 4603 mov r3, r0 - 800dd94: 7023 strb r3, [r4, #0] - time[2] = to_bcd(tm_info->tm_hour); - 800dd96: 697b ldr r3, [r7, #20] - 800dd98: 689a ldr r2, [r3, #8] - 800dd9a: 683b ldr r3, [r7, #0] - 800dd9c: 1c9c adds r4, r3, #2 - 800dd9e: 4610 mov r0, r2 - 800dda0: f7ff ffb0 bl 800dd04 - 800dda4: 4603 mov r3, r0 - 800dda6: 7023 strb r3, [r4, #0] - time[3] = to_bcd(tm_info->tm_mday); - 800dda8: 697b ldr r3, [r7, #20] - 800ddaa: 68da ldr r2, [r3, #12] - 800ddac: 683b ldr r3, [r7, #0] - 800ddae: 1cdc adds r4, r3, #3 - 800ddb0: 4610 mov r0, r2 - 800ddb2: f7ff ffa7 bl 800dd04 - 800ddb6: 4603 mov r3, r0 - 800ddb8: 7023 strb r3, [r4, #0] - time[4] = to_bcd(tm_info->tm_mon + 1); // tm_mon is 0-11 - 800ddba: 697b ldr r3, [r7, #20] - 800ddbc: 691b ldr r3, [r3, #16] - 800ddbe: 1c5a adds r2, r3, #1 - 800ddc0: 683b ldr r3, [r7, #0] - 800ddc2: 1d1c adds r4, r3, #4 - 800ddc4: 4610 mov r0, r2 - 800ddc6: f7ff ff9d bl 800dd04 - 800ddca: 4603 mov r3, r0 - 800ddcc: 7023 strb r3, [r4, #0] - time[5] = to_bcd((tm_info->tm_year + 1900) % 100); // Year in 2 digits - 800ddce: 697b ldr r3, [r7, #20] - 800ddd0: 695b ldr r3, [r3, #20] - 800ddd2: f203 736c addw r3, r3, #1900 @ 0x76c - 800ddd6: 4a13 ldr r2, [pc, #76] @ (800de24 ) - 800ddd8: fb82 1203 smull r1, r2, r2, r3 - 800dddc: 1151 asrs r1, r2, #5 - 800ddde: 17da asrs r2, r3, #31 - 800dde0: 1a8a subs r2, r1, r2 - 800dde2: 2164 movs r1, #100 @ 0x64 - 800dde4: fb01 f202 mul.w r2, r1, r2 - 800dde8: 1a9a subs r2, r3, r2 - 800ddea: 683b ldr r3, [r7, #0] - 800ddec: 1d5c adds r4, r3, #5 - 800ddee: 4610 mov r0, r2 - 800ddf0: f7ff ff88 bl 800dd04 - 800ddf4: 4603 mov r3, r0 - 800ddf6: 7023 strb r3, [r4, #0] - time[6] = to_bcd((tm_info->tm_year + 1900) / 100); // Century in 2 digits - 800ddf8: 697b ldr r3, [r7, #20] - 800ddfa: 695b ldr r3, [r3, #20] - 800ddfc: f203 736c addw r3, r3, #1900 @ 0x76c - 800de00: 4a08 ldr r2, [pc, #32] @ (800de24 ) - 800de02: fb82 1203 smull r1, r2, r2, r3 - 800de06: 1152 asrs r2, r2, #5 - 800de08: 17db asrs r3, r3, #31 - 800de0a: 1ad2 subs r2, r2, r3 - 800de0c: 683b ldr r3, [r7, #0] - 800de0e: 1d9c adds r4, r3, #6 - 800de10: 4610 mov r0, r2 - 800de12: f7ff ff77 bl 800dd04 - 800de16: 4603 mov r3, r0 - 800de18: 7023 strb r3, [r4, #0] -} - 800de1a: bf00 nop - 800de1c: 371c adds r7, #28 - 800de1e: 46bd mov sp, r7 - 800de20: bd90 pop {r4, r7, pc} - 800de22: bf00 nop - 800de24: 51eb851f .word 0x51eb851f - -0800de28 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval Time counter - */ -static uint32_t RTC1_ReadTimeCounter(RTC_HandleTypeDef *hrtc) -{ - 800de28: b480 push {r7} - 800de2a: b087 sub sp, #28 - 800de2c: af00 add r7, sp, #0 - 800de2e: 6078 str r0, [r7, #4] - uint16_t high1 = 0U, high2 = 0U, low = 0U; - 800de30: 2300 movs r3, #0 - 800de32: 827b strh r3, [r7, #18] - 800de34: 2300 movs r3, #0 - 800de36: 823b strh r3, [r7, #16] - 800de38: 2300 movs r3, #0 - 800de3a: 81fb strh r3, [r7, #14] - uint32_t timecounter = 0U; - 800de3c: 2300 movs r3, #0 - 800de3e: 617b str r3, [r7, #20] - - high1 = READ_REG(hrtc->Instance->CNTH & RTC_CNTH_RTC_CNT); - 800de40: 687b ldr r3, [r7, #4] - 800de42: 681b ldr r3, [r3, #0] - 800de44: 699b ldr r3, [r3, #24] - 800de46: 827b strh r3, [r7, #18] - low = READ_REG(hrtc->Instance->CNTL & RTC_CNTL_RTC_CNT); - 800de48: 687b ldr r3, [r7, #4] - 800de4a: 681b ldr r3, [r3, #0] - 800de4c: 69db ldr r3, [r3, #28] - 800de4e: 81fb strh r3, [r7, #14] - high2 = READ_REG(hrtc->Instance->CNTH & RTC_CNTH_RTC_CNT); - 800de50: 687b ldr r3, [r7, #4] - 800de52: 681b ldr r3, [r3, #0] - 800de54: 699b ldr r3, [r3, #24] - 800de56: 823b strh r3, [r7, #16] - - if (high1 != high2) - 800de58: 8a7a ldrh r2, [r7, #18] - 800de5a: 8a3b ldrh r3, [r7, #16] - 800de5c: 429a cmp r2, r3 - 800de5e: d008 beq.n 800de72 - { - /* In this case the counter roll over during reading of CNTL and CNTH registers, - read again CNTL register then return the counter value */ - timecounter = (((uint32_t) high2 << 16U) | READ_REG(hrtc->Instance->CNTL & RTC_CNTL_RTC_CNT)); - 800de60: 8a3b ldrh r3, [r7, #16] - 800de62: 041a lsls r2, r3, #16 - 800de64: 687b ldr r3, [r7, #4] - 800de66: 681b ldr r3, [r3, #0] - 800de68: 69db ldr r3, [r3, #28] - 800de6a: b29b uxth r3, r3 - 800de6c: 4313 orrs r3, r2 - 800de6e: 617b str r3, [r7, #20] - 800de70: e004 b.n 800de7c - } - else - { - /* No counter roll over during reading of CNTL and CNTH registers, counter - value is equal to first value of CNTL and CNTH */ - timecounter = (((uint32_t) high1 << 16U) | low); - 800de72: 8a7b ldrh r3, [r7, #18] - 800de74: 041a lsls r2, r3, #16 - 800de76: 89fb ldrh r3, [r7, #14] - 800de78: 4313 orrs r3, r2 - 800de7a: 617b str r3, [r7, #20] - } - - return timecounter; - 800de7c: 697b ldr r3, [r7, #20] -} - 800de7e: 4618 mov r0, r3 - 800de80: 371c adds r7, #28 - 800de82: 46bd mov sp, r7 - 800de84: bc80 pop {r7} - 800de86: 4770 bx lr - -0800de88 : - * the configuration information for RTC. - * @param TimeCounter: Counter to write in RTC_CNT registers - * @retval HAL status - */ -static HAL_StatusTypeDef RTC1_WriteTimeCounter(RTC_HandleTypeDef *hrtc, uint32_t TimeCounter) -{ - 800de88: b580 push {r7, lr} - 800de8a: b084 sub sp, #16 - 800de8c: af00 add r7, sp, #0 - 800de8e: 6078 str r0, [r7, #4] - 800de90: 6039 str r1, [r7, #0] - HAL_StatusTypeDef status = HAL_OK; - 800de92: 2300 movs r3, #0 - 800de94: 73fb strb r3, [r7, #15] - - /* Set Initialization mode */ - if (RTC1_EnterInitMode(hrtc) != HAL_OK) - 800de96: 6878 ldr r0, [r7, #4] - 800de98: f000 f81d bl 800ded6 - 800de9c: 4603 mov r3, r0 - 800de9e: 2b00 cmp r3, #0 - 800dea0: d002 beq.n 800dea8 - { - status = HAL_ERROR; - 800dea2: 2301 movs r3, #1 - 800dea4: 73fb strb r3, [r7, #15] - 800dea6: e011 b.n 800decc - } - else - { - /* Set RTC COUNTER MSB word */ - WRITE_REG(hrtc->Instance->CNTH, (TimeCounter >> 16U)); - 800dea8: 687b ldr r3, [r7, #4] - 800deaa: 681b ldr r3, [r3, #0] - 800deac: 683a ldr r2, [r7, #0] - 800deae: 0c12 lsrs r2, r2, #16 - 800deb0: 619a str r2, [r3, #24] - /* Set RTC COUNTER LSB word */ - WRITE_REG(hrtc->Instance->CNTL, (TimeCounter & RTC_CNTL_RTC_CNT)); - 800deb2: 687b ldr r3, [r7, #4] - 800deb4: 681b ldr r3, [r3, #0] - 800deb6: 683a ldr r2, [r7, #0] - 800deb8: b292 uxth r2, r2 - 800deba: 61da str r2, [r3, #28] - - /* Wait for synchro */ - if (RTC1_ExitInitMode(hrtc) != HAL_OK) - 800debc: 6878 ldr r0, [r7, #4] - 800debe: f000 f832 bl 800df26 - 800dec2: 4603 mov r3, r0 - 800dec4: 2b00 cmp r3, #0 - 800dec6: d001 beq.n 800decc - { - status = HAL_ERROR; - 800dec8: 2301 movs r3, #1 - 800deca: 73fb strb r3, [r7, #15] - } - } - - return status; - 800decc: 7bfb ldrb r3, [r7, #15] -} - 800dece: 4618 mov r0, r3 - 800ded0: 3710 adds r7, #16 - 800ded2: 46bd mov sp, r7 - 800ded4: bd80 pop {r7, pc} - -0800ded6 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC1_EnterInitMode(RTC_HandleTypeDef *hrtc) -{ - 800ded6: b580 push {r7, lr} - 800ded8: b084 sub sp, #16 - 800deda: af00 add r7, sp, #0 - 800dedc: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 800dede: 2300 movs r3, #0 - 800dee0: 60fb str r3, [r7, #12] - - tickstart = HAL_GetTick(); - 800dee2: f000 fcfb bl 800e8dc - 800dee6: 60f8 str r0, [r7, #12] - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 800dee8: e009 b.n 800defe - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - 800deea: f000 fcf7 bl 800e8dc - 800deee: 4602 mov r2, r0 - 800def0: 68fb ldr r3, [r7, #12] - 800def2: 1ad3 subs r3, r2, r3 - 800def4: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800def8: d901 bls.n 800defe - { - return HAL_TIMEOUT; - 800defa: 2303 movs r3, #3 - 800defc: e00f b.n 800df1e - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 800defe: 687b ldr r3, [r7, #4] - 800df00: 681b ldr r3, [r3, #0] - 800df02: 685b ldr r3, [r3, #4] - 800df04: f003 0320 and.w r3, r3, #32 - 800df08: 2b00 cmp r3, #0 - 800df0a: d0ee beq.n 800deea - } - } - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc); - 800df0c: 687b ldr r3, [r7, #4] - 800df0e: 681b ldr r3, [r3, #0] - 800df10: 685a ldr r2, [r3, #4] - 800df12: 687b ldr r3, [r7, #4] - 800df14: 681b ldr r3, [r3, #0] - 800df16: f042 0210 orr.w r2, r2, #16 - 800df1a: 605a str r2, [r3, #4] - - - return HAL_OK; - 800df1c: 2300 movs r3, #0 -} - 800df1e: 4618 mov r0, r3 - 800df20: 3710 adds r7, #16 - 800df22: 46bd mov sp, r7 - 800df24: bd80 pop {r7, pc} - -0800df26 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC1_ExitInitMode(RTC_HandleTypeDef *hrtc) -{ - 800df26: b580 push {r7, lr} - 800df28: b084 sub sp, #16 - 800df2a: af00 add r7, sp, #0 - 800df2c: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 800df2e: 2300 movs r3, #0 - 800df30: 60fb str r3, [r7, #12] - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc); - 800df32: 687b ldr r3, [r7, #4] - 800df34: 681b ldr r3, [r3, #0] - 800df36: 685a ldr r2, [r3, #4] - 800df38: 687b ldr r3, [r7, #4] - 800df3a: 681b ldr r3, [r3, #0] - 800df3c: f022 0210 bic.w r2, r2, #16 - 800df40: 605a str r2, [r3, #4] - - tickstart = HAL_GetTick(); - 800df42: f000 fccb bl 800e8dc - 800df46: 60f8 str r0, [r7, #12] - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 800df48: e009 b.n 800df5e - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - 800df4a: f000 fcc7 bl 800e8dc - 800df4e: 4602 mov r2, r0 - 800df50: 68fb ldr r3, [r7, #12] - 800df52: 1ad3 subs r3, r2, r3 - 800df54: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 800df58: d901 bls.n 800df5e - { - return HAL_TIMEOUT; - 800df5a: 2303 movs r3, #3 - 800df5c: e007 b.n 800df6e - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 800df5e: 687b ldr r3, [r7, #4] - 800df60: 681b ldr r3, [r3, #0] - 800df62: 685b ldr r3, [r3, #4] - 800df64: f003 0320 and.w r3, r3, #32 - 800df68: 2b00 cmp r3, #0 - 800df6a: d0ee beq.n 800df4a - } - } - - return HAL_OK; - 800df6c: 2300 movs r3, #0 -} - 800df6e: 4618 mov r0, r3 - 800df70: 3710 adds r7, #16 - 800df72: 46bd mov sp, r7 - 800df74: bd80 pop {r7, pc} - ... - -0800df78 : -/* USER CODE END 0 */ -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - 800df78: b480 push {r7} - 800df7a: b085 sub sp, #20 - 800df7c: af00 add r7, sp, #0 - - /* USER CODE BEGIN MspInit 0 */ - - /* USER CODE END MspInit 0 */ - - __HAL_RCC_AFIO_CLK_ENABLE(); - 800df7e: 4b15 ldr r3, [pc, #84] @ (800dfd4 ) - 800df80: 699b ldr r3, [r3, #24] - 800df82: 4a14 ldr r2, [pc, #80] @ (800dfd4 ) - 800df84: f043 0301 orr.w r3, r3, #1 - 800df88: 6193 str r3, [r2, #24] - 800df8a: 4b12 ldr r3, [pc, #72] @ (800dfd4 ) - 800df8c: 699b ldr r3, [r3, #24] - 800df8e: f003 0301 and.w r3, r3, #1 - 800df92: 60bb str r3, [r7, #8] - 800df94: 68bb ldr r3, [r7, #8] - __HAL_RCC_PWR_CLK_ENABLE(); - 800df96: 4b0f ldr r3, [pc, #60] @ (800dfd4 ) - 800df98: 69db ldr r3, [r3, #28] - 800df9a: 4a0e ldr r2, [pc, #56] @ (800dfd4 ) - 800df9c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 - 800dfa0: 61d3 str r3, [r2, #28] - 800dfa2: 4b0c ldr r3, [pc, #48] @ (800dfd4 ) - 800dfa4: 69db ldr r3, [r3, #28] - 800dfa6: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 800dfaa: 607b str r3, [r7, #4] - 800dfac: 687b ldr r3, [r7, #4] - - /* System interrupt init*/ - - /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled - */ - __HAL_AFIO_REMAP_SWJ_NOJTAG(); - 800dfae: 4b0a ldr r3, [pc, #40] @ (800dfd8 ) - 800dfb0: 685b ldr r3, [r3, #4] - 800dfb2: 60fb str r3, [r7, #12] - 800dfb4: 68fb ldr r3, [r7, #12] - 800dfb6: f023 63e0 bic.w r3, r3, #117440512 @ 0x7000000 - 800dfba: 60fb str r3, [r7, #12] - 800dfbc: 68fb ldr r3, [r7, #12] - 800dfbe: f043 7300 orr.w r3, r3, #33554432 @ 0x2000000 - 800dfc2: 60fb str r3, [r7, #12] - 800dfc4: 4a04 ldr r2, [pc, #16] @ (800dfd8 ) - 800dfc6: 68fb ldr r3, [r7, #12] - 800dfc8: 6053 str r3, [r2, #4] - - /* USER CODE BEGIN MspInit 1 */ - - /* USER CODE END MspInit 1 */ -} - 800dfca: bf00 nop - 800dfcc: 3714 adds r7, #20 - 800dfce: 46bd mov sp, r7 - 800dfd0: bc80 pop {r7} - 800dfd2: 4770 bx lr - 800dfd4: 40021000 .word 0x40021000 - 800dfd8: 40010000 .word 0x40010000 - -0800dfdc : -/******************************************************************************/ -/** - * @brief This function handles Non maskable interrupt. - */ -void NMI_Handler(void) -{ - 800dfdc: b480 push {r7} - 800dfde: 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) - 800dfe0: bf00 nop - 800dfe2: e7fd b.n 800dfe0 - -0800dfe4 : - -/** - * @brief This function handles Hard fault interrupt. - */ -void HardFault_Handler(void) -{ - 800dfe4: b480 push {r7} - 800dfe6: af00 add r7, sp, #0 - /* USER CODE BEGIN HardFault_IRQn 0 */ - - /* USER CODE END HardFault_IRQn 0 */ - while (1) - 800dfe8: bf00 nop - 800dfea: e7fd b.n 800dfe8 - -0800dfec : - -/** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) -{ - 800dfec: b480 push {r7} - 800dfee: af00 add r7, sp, #0 - /* USER CODE BEGIN MemoryManagement_IRQn 0 */ - - /* USER CODE END MemoryManagement_IRQn 0 */ - while (1) - 800dff0: bf00 nop - 800dff2: e7fd b.n 800dff0 - -0800dff4 : - -/** - * @brief This function handles Prefetch fault, memory access fault. - */ -void BusFault_Handler(void) -{ - 800dff4: b480 push {r7} - 800dff6: af00 add r7, sp, #0 - /* USER CODE BEGIN BusFault_IRQn 0 */ - - /* USER CODE END BusFault_IRQn 0 */ - while (1) - 800dff8: bf00 nop - 800dffa: e7fd b.n 800dff8 - -0800dffc : - -/** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) -{ - 800dffc: b480 push {r7} - 800dffe: af00 add r7, sp, #0 - /* USER CODE BEGIN UsageFault_IRQn 0 */ - - /* USER CODE END UsageFault_IRQn 0 */ - while (1) - 800e000: bf00 nop - 800e002: e7fd b.n 800e000 - -0800e004 : - -/** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - 800e004: b480 push {r7} - 800e006: af00 add r7, sp, #0 - - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ - - /* USER CODE END SVCall_IRQn 1 */ -} - 800e008: bf00 nop - 800e00a: 46bd mov sp, r7 - 800e00c: bc80 pop {r7} - 800e00e: 4770 bx lr - -0800e010 : - -/** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) -{ - 800e010: b480 push {r7} - 800e012: af00 add r7, sp, #0 - - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - - /* USER CODE END DebugMonitor_IRQn 1 */ -} - 800e014: bf00 nop - 800e016: 46bd mov sp, r7 - 800e018: bc80 pop {r7} - 800e01a: 4770 bx lr - -0800e01c : - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - 800e01c: b480 push {r7} - 800e01e: af00 add r7, sp, #0 - - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - 800e020: bf00 nop - 800e022: 46bd mov sp, r7 - 800e024: bc80 pop {r7} - 800e026: 4770 bx lr - -0800e028 : - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - 800e028: b580 push {r7, lr} - 800e02a: af00 add r7, sp, #0 - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - 800e02c: f000 fc44 bl 800e8b8 - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ -} - 800e030: bf00 nop - 800e032: bd80 pop {r7, pc} - -0800e034 : - -/** - * @brief This function handles CAN1 RX0 interrupt. - */ -void CAN1_RX0_IRQHandler(void) -{ - 800e034: b580 push {r7, lr} - 800e036: af00 add r7, sp, #0 - /* USER CODE BEGIN CAN1_RX0_IRQn 0 */ - - /* USER CODE END CAN1_RX0_IRQn 0 */ - HAL_CAN_IRQHandler(&hcan1); - 800e038: 4802 ldr r0, [pc, #8] @ (800e044 ) - 800e03a: f001 fe35 bl 800fca8 - /* USER CODE BEGIN CAN1_RX0_IRQn 1 */ - - /* USER CODE END CAN1_RX0_IRQn 1 */ -} - 800e03e: bf00 nop - 800e040: bd80 pop {r7, pc} - 800e042: bf00 nop - 800e044: 200002a4 .word 0x200002a4 - -0800e048 : - -/** - * @brief This function handles USART1 global interrupt. - */ -void USART1_IRQHandler(void) -{ - 800e048: b580 push {r7, lr} - 800e04a: af00 add r7, sp, #0 - /* USER CODE BEGIN USART1_IRQn 0 */ - - /* USER CODE END USART1_IRQn 0 */ - HAL_UART_IRQHandler(&huart1); - 800e04c: 4802 ldr r0, [pc, #8] @ (800e058 ) - 800e04e: f004 fdcb bl 8012be8 - /* USER CODE BEGIN USART1_IRQn 1 */ - - /* USER CODE END USART1_IRQn 1 */ -} - 800e052: bf00 nop - 800e054: bd80 pop {r7, pc} - 800e056: bf00 nop - 800e058: 20000fb4 .word 0x20000fb4 - -0800e05c : - -/** - * @brief This function handles USART2 global interrupt. - */ -void USART2_IRQHandler(void) -{ - 800e05c: b580 push {r7, lr} - 800e05e: af00 add r7, sp, #0 - /* USER CODE BEGIN USART2_IRQn 0 */ - - /* USER CODE END USART2_IRQn 0 */ - HAL_UART_IRQHandler(&huart2); - 800e060: 4802 ldr r0, [pc, #8] @ (800e06c ) - 800e062: f004 fdc1 bl 8012be8 - /* USER CODE BEGIN USART2_IRQn 1 */ - - /* USER CODE END USART2_IRQn 1 */ -} - 800e066: bf00 nop - 800e068: bd80 pop {r7, pc} - 800e06a: bf00 nop - 800e06c: 20000ffc .word 0x20000ffc - -0800e070 : - -/** - * @brief This function handles USART3 global interrupt. - */ -void USART3_IRQHandler(void) -{ - 800e070: b580 push {r7, lr} - 800e072: af00 add r7, sp, #0 - /* USER CODE BEGIN USART3_IRQn 0 */ - - /* USER CODE END USART3_IRQn 0 */ - HAL_UART_IRQHandler(&huart3); - 800e074: 4802 ldr r0, [pc, #8] @ (800e080 ) - 800e076: f004 fdb7 bl 8012be8 - /* USER CODE BEGIN USART3_IRQn 1 */ - - /* USER CODE END USART3_IRQn 1 */ -} - 800e07a: bf00 nop - 800e07c: bd80 pop {r7, pc} - 800e07e: bf00 nop - 800e080: 20001044 .word 0x20001044 - -0800e084 : - -/** - * @brief This function handles UART5 global interrupt. - */ -void UART5_IRQHandler(void) -{ - 800e084: b580 push {r7, lr} - 800e086: af00 add r7, sp, #0 - /* USER CODE BEGIN UART5_IRQn 0 */ - - /* USER CODE END UART5_IRQn 0 */ - HAL_UART_IRQHandler(&huart5); - 800e088: 4802 ldr r0, [pc, #8] @ (800e094 ) - 800e08a: f004 fdad bl 8012be8 - /* USER CODE BEGIN UART5_IRQn 1 */ - - /* USER CODE END UART5_IRQn 1 */ -} - 800e08e: bf00 nop - 800e090: bd80 pop {r7, pc} - 800e092: bf00 nop - 800e094: 20000f6c .word 0x20000f6c - -0800e098 : - -/** - * @brief This function handles CAN2 TX interrupt. - */ -void CAN2_TX_IRQHandler(void) -{ - 800e098: b580 push {r7, lr} - 800e09a: af00 add r7, sp, #0 - /* USER CODE BEGIN CAN2_TX_IRQn 0 */ - - /* USER CODE END CAN2_TX_IRQn 0 */ - HAL_CAN_IRQHandler(&hcan2); - 800e09c: 4802 ldr r0, [pc, #8] @ (800e0a8 ) - 800e09e: f001 fe03 bl 800fca8 - /* USER CODE BEGIN CAN2_TX_IRQn 1 */ - - /* USER CODE END CAN2_TX_IRQn 1 */ -} - 800e0a2: bf00 nop - 800e0a4: bd80 pop {r7, pc} - 800e0a6: bf00 nop - 800e0a8: 200002cc .word 0x200002cc - -0800e0ac : - -/** - * @brief This function handles CAN2 RX1 interrupt. - */ -void CAN2_RX1_IRQHandler(void) -{ - 800e0ac: b580 push {r7, lr} - 800e0ae: af00 add r7, sp, #0 - /* USER CODE BEGIN CAN2_RX1_IRQn 0 */ - - /* USER CODE END CAN2_RX1_IRQn 0 */ - HAL_CAN_IRQHandler(&hcan2); - 800e0b0: 4802 ldr r0, [pc, #8] @ (800e0bc ) - 800e0b2: f001 fdf9 bl 800fca8 - /* USER CODE BEGIN CAN2_RX1_IRQn 1 */ - - /* USER CODE END CAN2_RX1_IRQn 1 */ -} - 800e0b6: bf00 nop - 800e0b8: bd80 pop {r7, pc} - 800e0ba: bf00 nop - 800e0bc: 200002cc .word 0x200002cc - -0800e0c0 <_getpid>: -void initialise_monitor_handles() -{ -} - -int _getpid(void) -{ - 800e0c0: b480 push {r7} - 800e0c2: af00 add r7, sp, #0 - return 1; - 800e0c4: 2301 movs r3, #1 -} - 800e0c6: 4618 mov r0, r3 - 800e0c8: 46bd mov sp, r7 - 800e0ca: bc80 pop {r7} - 800e0cc: 4770 bx lr - -0800e0ce <_kill>: - -int _kill(int pid, int sig) -{ - 800e0ce: b580 push {r7, lr} - 800e0d0: b082 sub sp, #8 - 800e0d2: af00 add r7, sp, #0 - 800e0d4: 6078 str r0, [r7, #4] - 800e0d6: 6039 str r1, [r7, #0] - (void)pid; - (void)sig; - errno = EINVAL; - 800e0d8: f006 f92e bl 8014338 <__errno> - 800e0dc: 4603 mov r3, r0 - 800e0de: 2216 movs r2, #22 - 800e0e0: 601a str r2, [r3, #0] - return -1; - 800e0e2: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff -} - 800e0e6: 4618 mov r0, r3 - 800e0e8: 3708 adds r7, #8 - 800e0ea: 46bd mov sp, r7 - 800e0ec: bd80 pop {r7, pc} - -0800e0ee <_exit>: - -void _exit (int status) -{ - 800e0ee: b580 push {r7, lr} - 800e0f0: b082 sub sp, #8 - 800e0f2: af00 add r7, sp, #0 - 800e0f4: 6078 str r0, [r7, #4] - _kill(status, -1); - 800e0f6: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff - 800e0fa: 6878 ldr r0, [r7, #4] - 800e0fc: f7ff ffe7 bl 800e0ce <_kill> - while (1) {} /* Make sure we hang here */ - 800e100: bf00 nop - 800e102: e7fd b.n 800e100 <_exit+0x12> - -0800e104 <_read>: -} - -__attribute__((weak)) int _read(int file, char *ptr, int len) -{ - 800e104: b580 push {r7, lr} - 800e106: b086 sub sp, #24 - 800e108: af00 add r7, sp, #0 - 800e10a: 60f8 str r0, [r7, #12] - 800e10c: 60b9 str r1, [r7, #8] - 800e10e: 607a str r2, [r7, #4] - (void)file; - int DataIdx; - - for (DataIdx = 0; DataIdx < len; DataIdx++) - 800e110: 2300 movs r3, #0 - 800e112: 617b str r3, [r7, #20] - 800e114: e00a b.n 800e12c <_read+0x28> - { - *ptr++ = __io_getchar(); - 800e116: f3af 8000 nop.w - 800e11a: 4601 mov r1, r0 - 800e11c: 68bb ldr r3, [r7, #8] - 800e11e: 1c5a adds r2, r3, #1 - 800e120: 60ba str r2, [r7, #8] - 800e122: b2ca uxtb r2, r1 - 800e124: 701a strb r2, [r3, #0] - for (DataIdx = 0; DataIdx < len; DataIdx++) - 800e126: 697b ldr r3, [r7, #20] - 800e128: 3301 adds r3, #1 - 800e12a: 617b str r3, [r7, #20] - 800e12c: 697a ldr r2, [r7, #20] - 800e12e: 687b ldr r3, [r7, #4] - 800e130: 429a cmp r2, r3 - 800e132: dbf0 blt.n 800e116 <_read+0x12> - } - - return len; - 800e134: 687b ldr r3, [r7, #4] -} - 800e136: 4618 mov r0, r3 - 800e138: 3718 adds r7, #24 - 800e13a: 46bd mov sp, r7 - 800e13c: bd80 pop {r7, pc} - -0800e13e <_close>: - } - return len; -} - -int _close(int file) -{ - 800e13e: b480 push {r7} - 800e140: b083 sub sp, #12 - 800e142: af00 add r7, sp, #0 - 800e144: 6078 str r0, [r7, #4] - (void)file; - return -1; - 800e146: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff -} - 800e14a: 4618 mov r0, r3 - 800e14c: 370c adds r7, #12 - 800e14e: 46bd mov sp, r7 - 800e150: bc80 pop {r7} - 800e152: 4770 bx lr - -0800e154 <_fstat>: - - -int _fstat(int file, struct stat *st) -{ - 800e154: b480 push {r7} - 800e156: b083 sub sp, #12 - 800e158: af00 add r7, sp, #0 - 800e15a: 6078 str r0, [r7, #4] - 800e15c: 6039 str r1, [r7, #0] - (void)file; - st->st_mode = S_IFCHR; - 800e15e: 683b ldr r3, [r7, #0] - 800e160: f44f 5200 mov.w r2, #8192 @ 0x2000 - 800e164: 605a str r2, [r3, #4] - return 0; - 800e166: 2300 movs r3, #0 -} - 800e168: 4618 mov r0, r3 - 800e16a: 370c adds r7, #12 - 800e16c: 46bd mov sp, r7 - 800e16e: bc80 pop {r7} - 800e170: 4770 bx lr - -0800e172 <_isatty>: - -int _isatty(int file) -{ - 800e172: b480 push {r7} - 800e174: b083 sub sp, #12 - 800e176: af00 add r7, sp, #0 - 800e178: 6078 str r0, [r7, #4] - (void)file; - return 1; - 800e17a: 2301 movs r3, #1 -} - 800e17c: 4618 mov r0, r3 - 800e17e: 370c adds r7, #12 - 800e180: 46bd mov sp, r7 - 800e182: bc80 pop {r7} - 800e184: 4770 bx lr - -0800e186 <_lseek>: - -int _lseek(int file, int ptr, int dir) -{ - 800e186: b480 push {r7} - 800e188: b085 sub sp, #20 - 800e18a: af00 add r7, sp, #0 - 800e18c: 60f8 str r0, [r7, #12] - 800e18e: 60b9 str r1, [r7, #8] - 800e190: 607a str r2, [r7, #4] - (void)file; - (void)ptr; - (void)dir; - return 0; - 800e192: 2300 movs r3, #0 -} - 800e194: 4618 mov r0, r3 - 800e196: 3714 adds r7, #20 - 800e198: 46bd mov sp, r7 - 800e19a: bc80 pop {r7} - 800e19c: 4770 bx lr - ... - -0800e1a0 <_sbrk>: - * - * @param incr Memory size - * @return Pointer to allocated memory - */ -void *_sbrk(ptrdiff_t incr) -{ - 800e1a0: b580 push {r7, lr} - 800e1a2: b086 sub sp, #24 - 800e1a4: af00 add r7, sp, #0 - 800e1a6: 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; - 800e1a8: 4a14 ldr r2, [pc, #80] @ (800e1fc <_sbrk+0x5c>) - 800e1aa: 4b15 ldr r3, [pc, #84] @ (800e200 <_sbrk+0x60>) - 800e1ac: 1ad3 subs r3, r2, r3 - 800e1ae: 617b str r3, [r7, #20] - const uint8_t *max_heap = (uint8_t *)stack_limit; - 800e1b0: 697b ldr r3, [r7, #20] - 800e1b2: 613b str r3, [r7, #16] - uint8_t *prev_heap_end; - - /* Initialize heap end at first call */ - if (NULL == __sbrk_heap_end) - 800e1b4: 4b13 ldr r3, [pc, #76] @ (800e204 <_sbrk+0x64>) - 800e1b6: 681b ldr r3, [r3, #0] - 800e1b8: 2b00 cmp r3, #0 - 800e1ba: d102 bne.n 800e1c2 <_sbrk+0x22> - { - __sbrk_heap_end = &_end; - 800e1bc: 4b11 ldr r3, [pc, #68] @ (800e204 <_sbrk+0x64>) - 800e1be: 4a12 ldr r2, [pc, #72] @ (800e208 <_sbrk+0x68>) - 800e1c0: 601a str r2, [r3, #0] - } - - /* Protect heap from growing into the reserved MSP stack */ - if (__sbrk_heap_end + incr > max_heap) - 800e1c2: 4b10 ldr r3, [pc, #64] @ (800e204 <_sbrk+0x64>) - 800e1c4: 681a ldr r2, [r3, #0] - 800e1c6: 687b ldr r3, [r7, #4] - 800e1c8: 4413 add r3, r2 - 800e1ca: 693a ldr r2, [r7, #16] - 800e1cc: 429a cmp r2, r3 - 800e1ce: d207 bcs.n 800e1e0 <_sbrk+0x40> - { - errno = ENOMEM; - 800e1d0: f006 f8b2 bl 8014338 <__errno> - 800e1d4: 4603 mov r3, r0 - 800e1d6: 220c movs r2, #12 - 800e1d8: 601a str r2, [r3, #0] - return (void *)-1; - 800e1da: f04f 33ff mov.w r3, #4294967295 @ 0xffffffff - 800e1de: e009 b.n 800e1f4 <_sbrk+0x54> - } - - prev_heap_end = __sbrk_heap_end; - 800e1e0: 4b08 ldr r3, [pc, #32] @ (800e204 <_sbrk+0x64>) - 800e1e2: 681b ldr r3, [r3, #0] - 800e1e4: 60fb str r3, [r7, #12] - __sbrk_heap_end += incr; - 800e1e6: 4b07 ldr r3, [pc, #28] @ (800e204 <_sbrk+0x64>) - 800e1e8: 681a ldr r2, [r3, #0] - 800e1ea: 687b ldr r3, [r7, #4] - 800e1ec: 4413 add r3, r2 - 800e1ee: 4a05 ldr r2, [pc, #20] @ (800e204 <_sbrk+0x64>) - 800e1f0: 6013 str r3, [r2, #0] - - return (void *)prev_heap_end; - 800e1f2: 68fb ldr r3, [r7, #12] -} - 800e1f4: 4618 mov r0, r3 - 800e1f6: 3718 adds r7, #24 - 800e1f8: 46bd mov sp, r7 - 800e1fa: bd80 pop {r7, pc} - 800e1fc: 20010000 .word 0x20010000 - 800e200: 00000400 .word 0x00000400 - 800e204: 20000f20 .word 0x20000f20 - 800e208: 200011e0 .word 0x200011e0 - -0800e20c : - * @note This function should be used only after reset. - * @param None - * @retval None - */ -void SystemInit (void) -{ - 800e20c: b480 push {r7} - 800e20e: 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 */ -} - 800e210: bf00 nop - 800e212: 46bd mov sp, r7 - 800e214: bc80 pop {r7} - 800e216: 4770 bx lr - -0800e218 : - -TIM_HandleTypeDef htim4; - -/* TIM4 init function */ -void MX_TIM4_Init(void) -{ - 800e218: b580 push {r7, lr} - 800e21a: b08e sub sp, #56 @ 0x38 - 800e21c: af00 add r7, sp, #0 - - /* USER CODE BEGIN TIM4_Init 0 */ - - /* USER CODE END TIM4_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - 800e21e: f107 0328 add.w r3, r7, #40 @ 0x28 - 800e222: 2200 movs r2, #0 - 800e224: 601a str r2, [r3, #0] - 800e226: 605a str r2, [r3, #4] - 800e228: 609a str r2, [r3, #8] - 800e22a: 60da str r2, [r3, #12] - TIM_MasterConfigTypeDef sMasterConfig = {0}; - 800e22c: f107 0320 add.w r3, r7, #32 - 800e230: 2200 movs r2, #0 - 800e232: 601a str r2, [r3, #0] - 800e234: 605a str r2, [r3, #4] - TIM_OC_InitTypeDef sConfigOC = {0}; - 800e236: 1d3b adds r3, r7, #4 - 800e238: 2200 movs r2, #0 - 800e23a: 601a str r2, [r3, #0] - 800e23c: 605a str r2, [r3, #4] - 800e23e: 609a str r2, [r3, #8] - 800e240: 60da str r2, [r3, #12] - 800e242: 611a str r2, [r3, #16] - 800e244: 615a str r2, [r3, #20] - 800e246: 619a str r2, [r3, #24] - - /* USER CODE BEGIN TIM4_Init 1 */ - - /* USER CODE END TIM4_Init 1 */ - htim4.Instance = TIM4; - 800e248: 4b37 ldr r3, [pc, #220] @ (800e328 ) - 800e24a: 4a38 ldr r2, [pc, #224] @ (800e32c ) - 800e24c: 601a str r2, [r3, #0] - htim4.Init.Prescaler = 720; - 800e24e: 4b36 ldr r3, [pc, #216] @ (800e328 ) - 800e250: f44f 7234 mov.w r2, #720 @ 0x2d0 - 800e254: 605a str r2, [r3, #4] - htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - 800e256: 4b34 ldr r3, [pc, #208] @ (800e328 ) - 800e258: 2200 movs r2, #0 - 800e25a: 609a str r2, [r3, #8] - htim4.Init.Period = 100; - 800e25c: 4b32 ldr r3, [pc, #200] @ (800e328 ) - 800e25e: 2264 movs r2, #100 @ 0x64 - 800e260: 60da str r2, [r3, #12] - htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - 800e262: 4b31 ldr r3, [pc, #196] @ (800e328 ) - 800e264: 2200 movs r2, #0 - 800e266: 611a str r2, [r3, #16] - htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - 800e268: 4b2f ldr r3, [pc, #188] @ (800e328 ) - 800e26a: 2200 movs r2, #0 - 800e26c: 619a str r2, [r3, #24] - if (HAL_TIM_Base_Init(&htim4) != HAL_OK) - 800e26e: 482e ldr r0, [pc, #184] @ (800e328 ) - 800e270: f003 fcc9 bl 8011c06 - 800e274: 4603 mov r3, r0 - 800e276: 2b00 cmp r3, #0 - 800e278: d001 beq.n 800e27e - { - Error_Handler(); - 800e27a: f7fe f8b5 bl 800c3e8 - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - 800e27e: f44f 5380 mov.w r3, #4096 @ 0x1000 - 800e282: 62bb str r3, [r7, #40] @ 0x28 - if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) - 800e284: f107 0328 add.w r3, r7, #40 @ 0x28 - 800e288: 4619 mov r1, r3 - 800e28a: 4827 ldr r0, [pc, #156] @ (800e328 ) - 800e28c: f003 fece bl 801202c - 800e290: 4603 mov r3, r0 - 800e292: 2b00 cmp r3, #0 - 800e294: d001 beq.n 800e29a - { - Error_Handler(); - 800e296: f7fe f8a7 bl 800c3e8 - } - if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) - 800e29a: 4823 ldr r0, [pc, #140] @ (800e328 ) - 800e29c: f003 fd02 bl 8011ca4 - 800e2a0: 4603 mov r3, r0 - 800e2a2: 2b00 cmp r3, #0 - 800e2a4: d001 beq.n 800e2aa - { - Error_Handler(); - 800e2a6: f7fe f89f bl 800c3e8 - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - 800e2aa: 2300 movs r3, #0 - 800e2ac: 623b str r3, [r7, #32] - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - 800e2ae: 2300 movs r3, #0 - 800e2b0: 627b str r3, [r7, #36] @ 0x24 - if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) - 800e2b2: f107 0320 add.w r3, r7, #32 - 800e2b6: 4619 mov r1, r3 - 800e2b8: 481b ldr r0, [pc, #108] @ (800e328 ) - 800e2ba: f004 fa39 bl 8012730 - 800e2be: 4603 mov r3, r0 - 800e2c0: 2b00 cmp r3, #0 - 800e2c2: d001 beq.n 800e2c8 - { - Error_Handler(); - 800e2c4: f7fe f890 bl 800c3e8 - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - 800e2c8: 2360 movs r3, #96 @ 0x60 - 800e2ca: 607b str r3, [r7, #4] - sConfigOC.Pulse = 0; - 800e2cc: 2300 movs r3, #0 - 800e2ce: 60bb str r3, [r7, #8] - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - 800e2d0: 2300 movs r3, #0 - 800e2d2: 60fb str r3, [r7, #12] - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - 800e2d4: 2300 movs r3, #0 - 800e2d6: 617b str r3, [r7, #20] - if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) - 800e2d8: 1d3b adds r3, r7, #4 - 800e2da: 2204 movs r2, #4 - 800e2dc: 4619 mov r1, r3 - 800e2de: 4812 ldr r0, [pc, #72] @ (800e328 ) - 800e2e0: f003 fde2 bl 8011ea8 - 800e2e4: 4603 mov r3, r0 - 800e2e6: 2b00 cmp r3, #0 - 800e2e8: d001 beq.n 800e2ee - { - Error_Handler(); - 800e2ea: f7fe f87d bl 800c3e8 - } - if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) - 800e2ee: 1d3b adds r3, r7, #4 - 800e2f0: 2208 movs r2, #8 - 800e2f2: 4619 mov r1, r3 - 800e2f4: 480c ldr r0, [pc, #48] @ (800e328 ) - 800e2f6: f003 fdd7 bl 8011ea8 - 800e2fa: 4603 mov r3, r0 - 800e2fc: 2b00 cmp r3, #0 - 800e2fe: d001 beq.n 800e304 - { - Error_Handler(); - 800e300: f7fe f872 bl 800c3e8 - } - if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) - 800e304: 1d3b adds r3, r7, #4 - 800e306: 220c movs r2, #12 - 800e308: 4619 mov r1, r3 - 800e30a: 4807 ldr r0, [pc, #28] @ (800e328 ) - 800e30c: f003 fdcc bl 8011ea8 - 800e310: 4603 mov r3, r0 - 800e312: 2b00 cmp r3, #0 - 800e314: d001 beq.n 800e31a - { - Error_Handler(); - 800e316: f7fe f867 bl 800c3e8 - } - /* USER CODE BEGIN TIM4_Init 2 */ - - /* USER CODE END TIM4_Init 2 */ - HAL_TIM_MspPostInit(&htim4); - 800e31a: 4803 ldr r0, [pc, #12] @ (800e328 ) - 800e31c: f000 f826 bl 800e36c - -} - 800e320: bf00 nop - 800e322: 3738 adds r7, #56 @ 0x38 - 800e324: 46bd mov sp, r7 - 800e326: bd80 pop {r7, pc} - 800e328: 20000f24 .word 0x20000f24 - 800e32c: 40000800 .word 0x40000800 - -0800e330 : - -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) -{ - 800e330: b480 push {r7} - 800e332: b085 sub sp, #20 - 800e334: af00 add r7, sp, #0 - 800e336: 6078 str r0, [r7, #4] - - if(tim_baseHandle->Instance==TIM4) - 800e338: 687b ldr r3, [r7, #4] - 800e33a: 681b ldr r3, [r3, #0] - 800e33c: 4a09 ldr r2, [pc, #36] @ (800e364 ) - 800e33e: 4293 cmp r3, r2 - 800e340: d10b bne.n 800e35a - { - /* USER CODE BEGIN TIM4_MspInit 0 */ - - /* USER CODE END TIM4_MspInit 0 */ - /* TIM4 clock enable */ - __HAL_RCC_TIM4_CLK_ENABLE(); - 800e342: 4b09 ldr r3, [pc, #36] @ (800e368 ) - 800e344: 69db ldr r3, [r3, #28] - 800e346: 4a08 ldr r2, [pc, #32] @ (800e368 ) - 800e348: f043 0304 orr.w r3, r3, #4 - 800e34c: 61d3 str r3, [r2, #28] - 800e34e: 4b06 ldr r3, [pc, #24] @ (800e368 ) - 800e350: 69db ldr r3, [r3, #28] - 800e352: f003 0304 and.w r3, r3, #4 - 800e356: 60fb str r3, [r7, #12] - 800e358: 68fb ldr r3, [r7, #12] - /* USER CODE BEGIN TIM4_MspInit 1 */ - - /* USER CODE END TIM4_MspInit 1 */ - } -} - 800e35a: bf00 nop - 800e35c: 3714 adds r7, #20 - 800e35e: 46bd mov sp, r7 - 800e360: bc80 pop {r7} - 800e362: 4770 bx lr - 800e364: 40000800 .word 0x40000800 - 800e368: 40021000 .word 0x40021000 - -0800e36c : -void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) -{ - 800e36c: b580 push {r7, lr} - 800e36e: b088 sub sp, #32 - 800e370: af00 add r7, sp, #0 - 800e372: 6078 str r0, [r7, #4] - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 800e374: f107 030c add.w r3, r7, #12 - 800e378: 2200 movs r2, #0 - 800e37a: 601a str r2, [r3, #0] - 800e37c: 605a str r2, [r3, #4] - 800e37e: 609a str r2, [r3, #8] - 800e380: 60da str r2, [r3, #12] - if(timHandle->Instance==TIM4) - 800e382: 687b ldr r3, [r7, #4] - 800e384: 681b ldr r3, [r3, #0] - 800e386: 4a17 ldr r2, [pc, #92] @ (800e3e4 ) - 800e388: 4293 cmp r3, r2 - 800e38a: d126 bne.n 800e3da - { - /* USER CODE BEGIN TIM4_MspPostInit 0 */ - - /* USER CODE END TIM4_MspPostInit 0 */ - - __HAL_RCC_GPIOD_CLK_ENABLE(); - 800e38c: 4b16 ldr r3, [pc, #88] @ (800e3e8 ) - 800e38e: 699b ldr r3, [r3, #24] - 800e390: 4a15 ldr r2, [pc, #84] @ (800e3e8 ) - 800e392: f043 0320 orr.w r3, r3, #32 - 800e396: 6193 str r3, [r2, #24] - 800e398: 4b13 ldr r3, [pc, #76] @ (800e3e8 ) - 800e39a: 699b ldr r3, [r3, #24] - 800e39c: f003 0320 and.w r3, r3, #32 - 800e3a0: 60bb str r3, [r7, #8] - 800e3a2: 68bb ldr r3, [r7, #8] - /**TIM4 GPIO Configuration - PD13 ------> TIM4_CH2 - PD14 ------> TIM4_CH3 - PD15 ------> TIM4_CH4 - */ - GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; - 800e3a4: f44f 4360 mov.w r3, #57344 @ 0xe000 - 800e3a8: 60fb str r3, [r7, #12] - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800e3aa: 2302 movs r3, #2 - 800e3ac: 613b str r3, [r7, #16] - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - 800e3ae: 2302 movs r3, #2 - 800e3b0: 61bb str r3, [r7, #24] - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 800e3b2: f107 030c add.w r3, r7, #12 - 800e3b6: 4619 mov r1, r3 - 800e3b8: 480c ldr r0, [pc, #48] @ (800e3ec ) - 800e3ba: f002 f8fb bl 80105b4 - - __HAL_AFIO_REMAP_TIM4_ENABLE(); - 800e3be: 4b0c ldr r3, [pc, #48] @ (800e3f0 ) - 800e3c0: 685b ldr r3, [r3, #4] - 800e3c2: 61fb str r3, [r7, #28] - 800e3c4: 69fb ldr r3, [r7, #28] - 800e3c6: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 800e3ca: 61fb str r3, [r7, #28] - 800e3cc: 69fb ldr r3, [r7, #28] - 800e3ce: f443 5380 orr.w r3, r3, #4096 @ 0x1000 - 800e3d2: 61fb str r3, [r7, #28] - 800e3d4: 4a06 ldr r2, [pc, #24] @ (800e3f0 ) - 800e3d6: 69fb ldr r3, [r7, #28] - 800e3d8: 6053 str r3, [r2, #4] - /* USER CODE BEGIN TIM4_MspPostInit 1 */ - - /* USER CODE END TIM4_MspPostInit 1 */ - } - -} - 800e3da: bf00 nop - 800e3dc: 3720 adds r7, #32 - 800e3de: 46bd mov sp, r7 - 800e3e0: bd80 pop {r7, pc} - 800e3e2: bf00 nop - 800e3e4: 40000800 .word 0x40000800 - 800e3e8: 40021000 .word 0x40021000 - 800e3ec: 40011400 .word 0x40011400 - 800e3f0: 40010000 .word 0x40010000 - -0800e3f4 : -UART_HandleTypeDef huart2; -UART_HandleTypeDef huart3; - -/* UART5 init function */ -void MX_UART5_Init(void) -{ - 800e3f4: b580 push {r7, lr} - 800e3f6: af00 add r7, sp, #0 - /* USER CODE END UART5_Init 0 */ - - /* USER CODE BEGIN UART5_Init 1 */ - - /* USER CODE END UART5_Init 1 */ - huart5.Instance = UART5; - 800e3f8: 4b11 ldr r3, [pc, #68] @ (800e440 ) - 800e3fa: 4a12 ldr r2, [pc, #72] @ (800e444 ) - 800e3fc: 601a str r2, [r3, #0] - huart5.Init.BaudRate = 9600; - 800e3fe: 4b10 ldr r3, [pc, #64] @ (800e440 ) - 800e400: f44f 5216 mov.w r2, #9600 @ 0x2580 - 800e404: 605a str r2, [r3, #4] - huart5.Init.WordLength = UART_WORDLENGTH_8B; - 800e406: 4b0e ldr r3, [pc, #56] @ (800e440 ) - 800e408: 2200 movs r2, #0 - 800e40a: 609a str r2, [r3, #8] - huart5.Init.StopBits = UART_STOPBITS_1; - 800e40c: 4b0c ldr r3, [pc, #48] @ (800e440 ) - 800e40e: 2200 movs r2, #0 - 800e410: 60da str r2, [r3, #12] - huart5.Init.Parity = UART_PARITY_NONE; - 800e412: 4b0b ldr r3, [pc, #44] @ (800e440 ) - 800e414: 2200 movs r2, #0 - 800e416: 611a str r2, [r3, #16] - huart5.Init.Mode = UART_MODE_TX_RX; - 800e418: 4b09 ldr r3, [pc, #36] @ (800e440 ) - 800e41a: 220c movs r2, #12 - 800e41c: 615a str r2, [r3, #20] - huart5.Init.HwFlowCtl = UART_HWCONTROL_NONE; - 800e41e: 4b08 ldr r3, [pc, #32] @ (800e440 ) - 800e420: 2200 movs r2, #0 - 800e422: 619a str r2, [r3, #24] - huart5.Init.OverSampling = UART_OVERSAMPLING_16; - 800e424: 4b06 ldr r3, [pc, #24] @ (800e440 ) - 800e426: 2200 movs r2, #0 - 800e428: 61da str r2, [r3, #28] - if (HAL_UART_Init(&huart5) != HAL_OK) - 800e42a: 4805 ldr r0, [pc, #20] @ (800e440 ) - 800e42c: f004 f9e6 bl 80127fc - 800e430: 4603 mov r3, r0 - 800e432: 2b00 cmp r3, #0 - 800e434: d001 beq.n 800e43a - { - Error_Handler(); - 800e436: f7fd ffd7 bl 800c3e8 - } - /* USER CODE BEGIN UART5_Init 2 */ - - /* USER CODE END UART5_Init 2 */ - -} - 800e43a: bf00 nop - 800e43c: bd80 pop {r7, pc} - 800e43e: bf00 nop - 800e440: 20000f6c .word 0x20000f6c - 800e444: 40005000 .word 0x40005000 - -0800e448 : -/* USART1 init function */ - -void MX_USART1_UART_Init(void) -{ - 800e448: b580 push {r7, lr} - 800e44a: af00 add r7, sp, #0 - /* USER CODE END USART1_Init 0 */ - - /* USER CODE BEGIN USART1_Init 1 */ - - /* USER CODE END USART1_Init 1 */ - huart1.Instance = USART1; - 800e44c: 4b11 ldr r3, [pc, #68] @ (800e494 ) - 800e44e: 4a12 ldr r2, [pc, #72] @ (800e498 ) - 800e450: 601a str r2, [r3, #0] - huart1.Init.BaudRate = 115200; - 800e452: 4b10 ldr r3, [pc, #64] @ (800e494 ) - 800e454: f44f 32e1 mov.w r2, #115200 @ 0x1c200 - 800e458: 605a str r2, [r3, #4] - huart1.Init.WordLength = UART_WORDLENGTH_8B; - 800e45a: 4b0e ldr r3, [pc, #56] @ (800e494 ) - 800e45c: 2200 movs r2, #0 - 800e45e: 609a str r2, [r3, #8] - huart1.Init.StopBits = UART_STOPBITS_1; - 800e460: 4b0c ldr r3, [pc, #48] @ (800e494 ) - 800e462: 2200 movs r2, #0 - 800e464: 60da str r2, [r3, #12] - huart1.Init.Parity = UART_PARITY_NONE; - 800e466: 4b0b ldr r3, [pc, #44] @ (800e494 ) - 800e468: 2200 movs r2, #0 - 800e46a: 611a str r2, [r3, #16] - huart1.Init.Mode = UART_MODE_TX_RX; - 800e46c: 4b09 ldr r3, [pc, #36] @ (800e494 ) - 800e46e: 220c movs r2, #12 - 800e470: 615a str r2, [r3, #20] - huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; - 800e472: 4b08 ldr r3, [pc, #32] @ (800e494 ) - 800e474: 2200 movs r2, #0 - 800e476: 619a str r2, [r3, #24] - huart1.Init.OverSampling = UART_OVERSAMPLING_16; - 800e478: 4b06 ldr r3, [pc, #24] @ (800e494 ) - 800e47a: 2200 movs r2, #0 - 800e47c: 61da str r2, [r3, #28] - if (HAL_UART_Init(&huart1) != HAL_OK) - 800e47e: 4805 ldr r0, [pc, #20] @ (800e494 ) - 800e480: f004 f9bc bl 80127fc - 800e484: 4603 mov r3, r0 - 800e486: 2b00 cmp r3, #0 - 800e488: d001 beq.n 800e48e - { - Error_Handler(); - 800e48a: f7fd ffad bl 800c3e8 - } - /* USER CODE BEGIN USART1_Init 2 */ - - /* USER CODE END USART1_Init 2 */ - -} - 800e48e: bf00 nop - 800e490: bd80 pop {r7, pc} - 800e492: bf00 nop - 800e494: 20000fb4 .word 0x20000fb4 - 800e498: 40013800 .word 0x40013800 - -0800e49c : -/* USART2 init function */ - -void MX_USART2_UART_Init(void) -{ - 800e49c: b580 push {r7, lr} - 800e49e: af00 add r7, sp, #0 - /* USER CODE END USART2_Init 0 */ - - /* USER CODE BEGIN USART2_Init 1 */ - - /* USER CODE END USART2_Init 1 */ - huart2.Instance = USART2; - 800e4a0: 4b11 ldr r3, [pc, #68] @ (800e4e8 ) - 800e4a2: 4a12 ldr r2, [pc, #72] @ (800e4ec ) - 800e4a4: 601a str r2, [r3, #0] - huart2.Init.BaudRate = 115200; - 800e4a6: 4b10 ldr r3, [pc, #64] @ (800e4e8 ) - 800e4a8: f44f 32e1 mov.w r2, #115200 @ 0x1c200 - 800e4ac: 605a str r2, [r3, #4] - huart2.Init.WordLength = UART_WORDLENGTH_8B; - 800e4ae: 4b0e ldr r3, [pc, #56] @ (800e4e8 ) - 800e4b0: 2200 movs r2, #0 - 800e4b2: 609a str r2, [r3, #8] - huart2.Init.StopBits = UART_STOPBITS_1; - 800e4b4: 4b0c ldr r3, [pc, #48] @ (800e4e8 ) - 800e4b6: 2200 movs r2, #0 - 800e4b8: 60da str r2, [r3, #12] - huart2.Init.Parity = UART_PARITY_NONE; - 800e4ba: 4b0b ldr r3, [pc, #44] @ (800e4e8 ) - 800e4bc: 2200 movs r2, #0 - 800e4be: 611a str r2, [r3, #16] - huart2.Init.Mode = UART_MODE_TX_RX; - 800e4c0: 4b09 ldr r3, [pc, #36] @ (800e4e8 ) - 800e4c2: 220c movs r2, #12 - 800e4c4: 615a str r2, [r3, #20] - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - 800e4c6: 4b08 ldr r3, [pc, #32] @ (800e4e8 ) - 800e4c8: 2200 movs r2, #0 - 800e4ca: 619a str r2, [r3, #24] - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - 800e4cc: 4b06 ldr r3, [pc, #24] @ (800e4e8 ) - 800e4ce: 2200 movs r2, #0 - 800e4d0: 61da str r2, [r3, #28] - if (HAL_UART_Init(&huart2) != HAL_OK) - 800e4d2: 4805 ldr r0, [pc, #20] @ (800e4e8 ) - 800e4d4: f004 f992 bl 80127fc - 800e4d8: 4603 mov r3, r0 - 800e4da: 2b00 cmp r3, #0 - 800e4dc: d001 beq.n 800e4e2 - { - Error_Handler(); - 800e4de: f7fd ff83 bl 800c3e8 - } - /* USER CODE BEGIN USART2_Init 2 */ - - /* USER CODE END USART2_Init 2 */ - -} - 800e4e2: bf00 nop - 800e4e4: bd80 pop {r7, pc} - 800e4e6: bf00 nop - 800e4e8: 20000ffc .word 0x20000ffc - 800e4ec: 40004400 .word 0x40004400 - -0800e4f0 : -/* USART3 init function */ - -void MX_USART3_UART_Init(void) -{ - 800e4f0: b580 push {r7, lr} - 800e4f2: af00 add r7, sp, #0 - /* USER CODE END USART3_Init 0 */ - - /* USER CODE BEGIN USART3_Init 1 */ - - /* USER CODE END USART3_Init 1 */ - huart3.Instance = USART3; - 800e4f4: 4b11 ldr r3, [pc, #68] @ (800e53c ) - 800e4f6: 4a12 ldr r2, [pc, #72] @ (800e540 ) - 800e4f8: 601a str r2, [r3, #0] - huart3.Init.BaudRate = 115200; - 800e4fa: 4b10 ldr r3, [pc, #64] @ (800e53c ) - 800e4fc: f44f 32e1 mov.w r2, #115200 @ 0x1c200 - 800e500: 605a str r2, [r3, #4] - huart3.Init.WordLength = UART_WORDLENGTH_8B; - 800e502: 4b0e ldr r3, [pc, #56] @ (800e53c ) - 800e504: 2200 movs r2, #0 - 800e506: 609a str r2, [r3, #8] - huart3.Init.StopBits = UART_STOPBITS_1; - 800e508: 4b0c ldr r3, [pc, #48] @ (800e53c ) - 800e50a: 2200 movs r2, #0 - 800e50c: 60da str r2, [r3, #12] - huart3.Init.Parity = UART_PARITY_NONE; - 800e50e: 4b0b ldr r3, [pc, #44] @ (800e53c ) - 800e510: 2200 movs r2, #0 - 800e512: 611a str r2, [r3, #16] - huart3.Init.Mode = UART_MODE_TX_RX; - 800e514: 4b09 ldr r3, [pc, #36] @ (800e53c ) - 800e516: 220c movs r2, #12 - 800e518: 615a str r2, [r3, #20] - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - 800e51a: 4b08 ldr r3, [pc, #32] @ (800e53c ) - 800e51c: 2200 movs r2, #0 - 800e51e: 619a str r2, [r3, #24] - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - 800e520: 4b06 ldr r3, [pc, #24] @ (800e53c ) - 800e522: 2200 movs r2, #0 - 800e524: 61da str r2, [r3, #28] - if (HAL_UART_Init(&huart3) != HAL_OK) - 800e526: 4805 ldr r0, [pc, #20] @ (800e53c ) - 800e528: f004 f968 bl 80127fc - 800e52c: 4603 mov r3, r0 - 800e52e: 2b00 cmp r3, #0 - 800e530: d001 beq.n 800e536 - { - Error_Handler(); - 800e532: f7fd ff59 bl 800c3e8 - } - /* USER CODE BEGIN USART3_Init 2 */ - - /* USER CODE END USART3_Init 2 */ - -} - 800e536: bf00 nop - 800e538: bd80 pop {r7, pc} - 800e53a: bf00 nop - 800e53c: 20001044 .word 0x20001044 - 800e540: 40004800 .word 0x40004800 - -0800e544 : - -void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) -{ - 800e544: b580 push {r7, lr} - 800e546: b092 sub sp, #72 @ 0x48 - 800e548: af00 add r7, sp, #0 - 800e54a: 6078 str r0, [r7, #4] - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - 800e54c: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e550: 2200 movs r2, #0 - 800e552: 601a str r2, [r3, #0] - 800e554: 605a str r2, [r3, #4] - 800e556: 609a str r2, [r3, #8] - 800e558: 60da str r2, [r3, #12] - if(uartHandle->Instance==UART5) - 800e55a: 687b ldr r3, [r7, #4] - 800e55c: 681b ldr r3, [r3, #0] - 800e55e: 4a95 ldr r2, [pc, #596] @ (800e7b4 ) - 800e560: 4293 cmp r3, r2 - 800e562: d145 bne.n 800e5f0 - { - /* USER CODE BEGIN UART5_MspInit 0 */ - - /* USER CODE END UART5_MspInit 0 */ - /* UART5 clock enable */ - __HAL_RCC_UART5_CLK_ENABLE(); - 800e564: 4b94 ldr r3, [pc, #592] @ (800e7b8 ) - 800e566: 69db ldr r3, [r3, #28] - 800e568: 4a93 ldr r2, [pc, #588] @ (800e7b8 ) - 800e56a: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 - 800e56e: 61d3 str r3, [r2, #28] - 800e570: 4b91 ldr r3, [pc, #580] @ (800e7b8 ) - 800e572: 69db ldr r3, [r3, #28] - 800e574: f403 1380 and.w r3, r3, #1048576 @ 0x100000 - 800e578: 62fb str r3, [r7, #44] @ 0x2c - 800e57a: 6afb ldr r3, [r7, #44] @ 0x2c - - __HAL_RCC_GPIOC_CLK_ENABLE(); - 800e57c: 4b8e ldr r3, [pc, #568] @ (800e7b8 ) - 800e57e: 699b ldr r3, [r3, #24] - 800e580: 4a8d ldr r2, [pc, #564] @ (800e7b8 ) - 800e582: f043 0310 orr.w r3, r3, #16 - 800e586: 6193 str r3, [r2, #24] - 800e588: 4b8b ldr r3, [pc, #556] @ (800e7b8 ) - 800e58a: 699b ldr r3, [r3, #24] - 800e58c: f003 0310 and.w r3, r3, #16 - 800e590: 62bb str r3, [r7, #40] @ 0x28 - 800e592: 6abb ldr r3, [r7, #40] @ 0x28 - __HAL_RCC_GPIOD_CLK_ENABLE(); - 800e594: 4b88 ldr r3, [pc, #544] @ (800e7b8 ) - 800e596: 699b ldr r3, [r3, #24] - 800e598: 4a87 ldr r2, [pc, #540] @ (800e7b8 ) - 800e59a: f043 0320 orr.w r3, r3, #32 - 800e59e: 6193 str r3, [r2, #24] - 800e5a0: 4b85 ldr r3, [pc, #532] @ (800e7b8 ) - 800e5a2: 699b ldr r3, [r3, #24] - 800e5a4: f003 0320 and.w r3, r3, #32 - 800e5a8: 627b str r3, [r7, #36] @ 0x24 - 800e5aa: 6a7b ldr r3, [r7, #36] @ 0x24 - /**UART5 GPIO Configuration - PC12 ------> UART5_TX - PD2 ------> UART5_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_12; - 800e5ac: f44f 5380 mov.w r3, #4096 @ 0x1000 - 800e5b0: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800e5b2: 2302 movs r3, #2 - 800e5b4: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800e5b6: 2303 movs r3, #3 - 800e5b8: 63fb str r3, [r7, #60] @ 0x3c - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 800e5ba: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e5be: 4619 mov r1, r3 - 800e5c0: 487e ldr r0, [pc, #504] @ (800e7bc ) - 800e5c2: f001 fff7 bl 80105b4 - - GPIO_InitStruct.Pin = GPIO_PIN_2; - 800e5c6: 2304 movs r3, #4 - 800e5c8: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800e5ca: 2300 movs r3, #0 - 800e5cc: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800e5ce: 2300 movs r3, #0 - 800e5d0: 63bb str r3, [r7, #56] @ 0x38 - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 800e5d2: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e5d6: 4619 mov r1, r3 - 800e5d8: 4879 ldr r0, [pc, #484] @ (800e7c0 ) - 800e5da: f001 ffeb bl 80105b4 - - /* UART5 interrupt Init */ - HAL_NVIC_SetPriority(UART5_IRQn, 0, 0); - 800e5de: 2200 movs r2, #0 - 800e5e0: 2100 movs r1, #0 - 800e5e2: 2035 movs r0, #53 @ 0x35 - 800e5e4: f001 fe51 bl 801028a - HAL_NVIC_EnableIRQ(UART5_IRQn); - 800e5e8: 2035 movs r0, #53 @ 0x35 - 800e5ea: f001 fe6a bl 80102c2 - HAL_NVIC_EnableIRQ(USART3_IRQn); - /* USER CODE BEGIN USART3_MspInit 1 */ - - /* USER CODE END USART3_MspInit 1 */ - } -} - 800e5ee: e0dc b.n 800e7aa - else if(uartHandle->Instance==USART1) - 800e5f0: 687b ldr r3, [r7, #4] - 800e5f2: 681b ldr r3, [r3, #0] - 800e5f4: 4a73 ldr r2, [pc, #460] @ (800e7c4 ) - 800e5f6: 4293 cmp r3, r2 - 800e5f8: d13a bne.n 800e670 - __HAL_RCC_USART1_CLK_ENABLE(); - 800e5fa: 4b6f ldr r3, [pc, #444] @ (800e7b8 ) - 800e5fc: 699b ldr r3, [r3, #24] - 800e5fe: 4a6e ldr r2, [pc, #440] @ (800e7b8 ) - 800e600: f443 4380 orr.w r3, r3, #16384 @ 0x4000 - 800e604: 6193 str r3, [r2, #24] - 800e606: 4b6c ldr r3, [pc, #432] @ (800e7b8 ) - 800e608: 699b ldr r3, [r3, #24] - 800e60a: f403 4380 and.w r3, r3, #16384 @ 0x4000 - 800e60e: 623b str r3, [r7, #32] - 800e610: 6a3b ldr r3, [r7, #32] - __HAL_RCC_GPIOA_CLK_ENABLE(); - 800e612: 4b69 ldr r3, [pc, #420] @ (800e7b8 ) - 800e614: 699b ldr r3, [r3, #24] - 800e616: 4a68 ldr r2, [pc, #416] @ (800e7b8 ) - 800e618: f043 0304 orr.w r3, r3, #4 - 800e61c: 6193 str r3, [r2, #24] - 800e61e: 4b66 ldr r3, [pc, #408] @ (800e7b8 ) - 800e620: 699b ldr r3, [r3, #24] - 800e622: f003 0304 and.w r3, r3, #4 - 800e626: 61fb str r3, [r7, #28] - 800e628: 69fb ldr r3, [r7, #28] - GPIO_InitStruct.Pin = GPIO_PIN_9; - 800e62a: f44f 7300 mov.w r3, #512 @ 0x200 - 800e62e: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800e630: 2302 movs r3, #2 - 800e632: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800e634: 2303 movs r3, #3 - 800e636: 63fb str r3, [r7, #60] @ 0x3c - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - 800e638: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e63c: 4619 mov r1, r3 - 800e63e: 4862 ldr r0, [pc, #392] @ (800e7c8 ) - 800e640: f001 ffb8 bl 80105b4 - GPIO_InitStruct.Pin = GPIO_PIN_10; - 800e644: f44f 6380 mov.w r3, #1024 @ 0x400 - 800e648: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800e64a: 2300 movs r3, #0 - 800e64c: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800e64e: 2300 movs r3, #0 - 800e650: 63bb str r3, [r7, #56] @ 0x38 - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - 800e652: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e656: 4619 mov r1, r3 - 800e658: 485b ldr r0, [pc, #364] @ (800e7c8 ) - 800e65a: f001 ffab bl 80105b4 - HAL_NVIC_SetPriority(USART1_IRQn, 0, 0); - 800e65e: 2200 movs r2, #0 - 800e660: 2100 movs r1, #0 - 800e662: 2025 movs r0, #37 @ 0x25 - 800e664: f001 fe11 bl 801028a - HAL_NVIC_EnableIRQ(USART1_IRQn); - 800e668: 2025 movs r0, #37 @ 0x25 - 800e66a: f001 fe2a bl 80102c2 -} - 800e66e: e09c b.n 800e7aa - else if(uartHandle->Instance==USART2) - 800e670: 687b ldr r3, [r7, #4] - 800e672: 681b ldr r3, [r3, #0] - 800e674: 4a55 ldr r2, [pc, #340] @ (800e7cc ) - 800e676: 4293 cmp r3, r2 - 800e678: d146 bne.n 800e708 - __HAL_RCC_USART2_CLK_ENABLE(); - 800e67a: 4b4f ldr r3, [pc, #316] @ (800e7b8 ) - 800e67c: 69db ldr r3, [r3, #28] - 800e67e: 4a4e ldr r2, [pc, #312] @ (800e7b8 ) - 800e680: f443 3300 orr.w r3, r3, #131072 @ 0x20000 - 800e684: 61d3 str r3, [r2, #28] - 800e686: 4b4c ldr r3, [pc, #304] @ (800e7b8 ) - 800e688: 69db ldr r3, [r3, #28] - 800e68a: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 800e68e: 61bb str r3, [r7, #24] - 800e690: 69bb ldr r3, [r7, #24] - __HAL_RCC_GPIOD_CLK_ENABLE(); - 800e692: 4b49 ldr r3, [pc, #292] @ (800e7b8 ) - 800e694: 699b ldr r3, [r3, #24] - 800e696: 4a48 ldr r2, [pc, #288] @ (800e7b8 ) - 800e698: f043 0320 orr.w r3, r3, #32 - 800e69c: 6193 str r3, [r2, #24] - 800e69e: 4b46 ldr r3, [pc, #280] @ (800e7b8 ) - 800e6a0: 699b ldr r3, [r3, #24] - 800e6a2: f003 0320 and.w r3, r3, #32 - 800e6a6: 617b str r3, [r7, #20] - 800e6a8: 697b ldr r3, [r7, #20] - GPIO_InitStruct.Pin = GPIO_PIN_5; - 800e6aa: 2320 movs r3, #32 - 800e6ac: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800e6ae: 2302 movs r3, #2 - 800e6b0: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800e6b2: 2303 movs r3, #3 - 800e6b4: 63fb str r3, [r7, #60] @ 0x3c - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 800e6b6: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e6ba: 4619 mov r1, r3 - 800e6bc: 4840 ldr r0, [pc, #256] @ (800e7c0 ) - 800e6be: f001 ff79 bl 80105b4 - GPIO_InitStruct.Pin = GPIO_PIN_6; - 800e6c2: 2340 movs r3, #64 @ 0x40 - 800e6c4: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800e6c6: 2300 movs r3, #0 - 800e6c8: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800e6ca: 2300 movs r3, #0 - 800e6cc: 63bb str r3, [r7, #56] @ 0x38 - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - 800e6ce: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e6d2: 4619 mov r1, r3 - 800e6d4: 483a ldr r0, [pc, #232] @ (800e7c0 ) - 800e6d6: f001 ff6d bl 80105b4 - __HAL_AFIO_REMAP_USART2_ENABLE(); - 800e6da: 4b3d ldr r3, [pc, #244] @ (800e7d0 ) - 800e6dc: 685b ldr r3, [r3, #4] - 800e6de: 643b str r3, [r7, #64] @ 0x40 - 800e6e0: 6c3b ldr r3, [r7, #64] @ 0x40 - 800e6e2: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 800e6e6: 643b str r3, [r7, #64] @ 0x40 - 800e6e8: 6c3b ldr r3, [r7, #64] @ 0x40 - 800e6ea: f043 0308 orr.w r3, r3, #8 - 800e6ee: 643b str r3, [r7, #64] @ 0x40 - 800e6f0: 4a37 ldr r2, [pc, #220] @ (800e7d0 ) - 800e6f2: 6c3b ldr r3, [r7, #64] @ 0x40 - 800e6f4: 6053 str r3, [r2, #4] - HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); - 800e6f6: 2200 movs r2, #0 - 800e6f8: 2100 movs r1, #0 - 800e6fa: 2026 movs r0, #38 @ 0x26 - 800e6fc: f001 fdc5 bl 801028a - HAL_NVIC_EnableIRQ(USART2_IRQn); - 800e700: 2026 movs r0, #38 @ 0x26 - 800e702: f001 fdde bl 80102c2 -} - 800e706: e050 b.n 800e7aa - else if(uartHandle->Instance==USART3) - 800e708: 687b ldr r3, [r7, #4] - 800e70a: 681b ldr r3, [r3, #0] - 800e70c: 4a31 ldr r2, [pc, #196] @ (800e7d4 ) - 800e70e: 4293 cmp r3, r2 - 800e710: d14b bne.n 800e7aa - __HAL_RCC_USART3_CLK_ENABLE(); - 800e712: 4b29 ldr r3, [pc, #164] @ (800e7b8 ) - 800e714: 69db ldr r3, [r3, #28] - 800e716: 4a28 ldr r2, [pc, #160] @ (800e7b8 ) - 800e718: f443 2380 orr.w r3, r3, #262144 @ 0x40000 - 800e71c: 61d3 str r3, [r2, #28] - 800e71e: 4b26 ldr r3, [pc, #152] @ (800e7b8 ) - 800e720: 69db ldr r3, [r3, #28] - 800e722: f403 2380 and.w r3, r3, #262144 @ 0x40000 - 800e726: 613b str r3, [r7, #16] - 800e728: 693b ldr r3, [r7, #16] - __HAL_RCC_GPIOC_CLK_ENABLE(); - 800e72a: 4b23 ldr r3, [pc, #140] @ (800e7b8 ) - 800e72c: 699b ldr r3, [r3, #24] - 800e72e: 4a22 ldr r2, [pc, #136] @ (800e7b8 ) - 800e730: f043 0310 orr.w r3, r3, #16 - 800e734: 6193 str r3, [r2, #24] - 800e736: 4b20 ldr r3, [pc, #128] @ (800e7b8 ) - 800e738: 699b ldr r3, [r3, #24] - 800e73a: f003 0310 and.w r3, r3, #16 - 800e73e: 60fb str r3, [r7, #12] - 800e740: 68fb ldr r3, [r7, #12] - GPIO_InitStruct.Pin = GPIO_PIN_10; - 800e742: f44f 6380 mov.w r3, #1024 @ 0x400 - 800e746: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - 800e748: 2302 movs r3, #2 - 800e74a: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - 800e74c: 2303 movs r3, #3 - 800e74e: 63fb str r3, [r7, #60] @ 0x3c - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 800e750: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e754: 4619 mov r1, r3 - 800e756: 4819 ldr r0, [pc, #100] @ (800e7bc ) - 800e758: f001 ff2c bl 80105b4 - GPIO_InitStruct.Pin = GPIO_PIN_11; - 800e75c: f44f 6300 mov.w r3, #2048 @ 0x800 - 800e760: 633b str r3, [r7, #48] @ 0x30 - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - 800e762: 2300 movs r3, #0 - 800e764: 637b str r3, [r7, #52] @ 0x34 - GPIO_InitStruct.Pull = GPIO_NOPULL; - 800e766: 2300 movs r3, #0 - 800e768: 63bb str r3, [r7, #56] @ 0x38 - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - 800e76a: f107 0330 add.w r3, r7, #48 @ 0x30 - 800e76e: 4619 mov r1, r3 - 800e770: 4812 ldr r0, [pc, #72] @ (800e7bc ) - 800e772: f001 ff1f bl 80105b4 - __HAL_AFIO_REMAP_USART3_PARTIAL(); - 800e776: 4b16 ldr r3, [pc, #88] @ (800e7d0 ) - 800e778: 685b ldr r3, [r3, #4] - 800e77a: 647b str r3, [r7, #68] @ 0x44 - 800e77c: 6c7b ldr r3, [r7, #68] @ 0x44 - 800e77e: f023 0330 bic.w r3, r3, #48 @ 0x30 - 800e782: 647b str r3, [r7, #68] @ 0x44 - 800e784: 6c7b ldr r3, [r7, #68] @ 0x44 - 800e786: f043 63e0 orr.w r3, r3, #117440512 @ 0x7000000 - 800e78a: 647b str r3, [r7, #68] @ 0x44 - 800e78c: 6c7b ldr r3, [r7, #68] @ 0x44 - 800e78e: f043 0310 orr.w r3, r3, #16 - 800e792: 647b str r3, [r7, #68] @ 0x44 - 800e794: 4a0e ldr r2, [pc, #56] @ (800e7d0 ) - 800e796: 6c7b ldr r3, [r7, #68] @ 0x44 - 800e798: 6053 str r3, [r2, #4] - HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); - 800e79a: 2200 movs r2, #0 - 800e79c: 2100 movs r1, #0 - 800e79e: 2027 movs r0, #39 @ 0x27 - 800e7a0: f001 fd73 bl 801028a - HAL_NVIC_EnableIRQ(USART3_IRQn); - 800e7a4: 2027 movs r0, #39 @ 0x27 - 800e7a6: f001 fd8c bl 80102c2 -} - 800e7aa: bf00 nop - 800e7ac: 3748 adds r7, #72 @ 0x48 - 800e7ae: 46bd mov sp, r7 - 800e7b0: bd80 pop {r7, pc} - 800e7b2: bf00 nop - 800e7b4: 40005000 .word 0x40005000 - 800e7b8: 40021000 .word 0x40021000 - 800e7bc: 40011000 .word 0x40011000 - 800e7c0: 40011400 .word 0x40011400 - 800e7c4: 40013800 .word 0x40013800 - 800e7c8: 40010800 .word 0x40010800 - 800e7cc: 40004400 .word 0x40004400 - 800e7d0: 40010000 .word 0x40010000 - 800e7d4: 40004800 .word 0x40004800 - -0800e7d8 : - - .section .text.Reset_Handler - .weak Reset_Handler - .type Reset_Handler, %function -Reset_Handler: - ldr sp, =_estack /* set stack pointer */ - 800e7d8: f8df d034 ldr.w sp, [pc, #52] @ 800e810 - -/* Call the clock system initialization function.*/ - bl SystemInit - 800e7dc: f7ff fd16 bl 800e20c - -/* Copy the data segment initializers from flash to SRAM */ - ldr r0, =_sdata - 800e7e0: 480c ldr r0, [pc, #48] @ (800e814 ) - ldr r1, =_edata - 800e7e2: 490d ldr r1, [pc, #52] @ (800e818 ) - ldr r2, =_sidata - 800e7e4: 4a0d ldr r2, [pc, #52] @ (800e81c ) - movs r3, #0 - 800e7e6: 2300 movs r3, #0 - b LoopCopyDataInit - 800e7e8: e002 b.n 800e7f0 - -0800e7ea : - -CopyDataInit: - ldr r4, [r2, r3] - 800e7ea: 58d4 ldr r4, [r2, r3] - str r4, [r0, r3] - 800e7ec: 50c4 str r4, [r0, r3] - adds r3, r3, #4 - 800e7ee: 3304 adds r3, #4 - -0800e7f0 : - -LoopCopyDataInit: - adds r4, r0, r3 - 800e7f0: 18c4 adds r4, r0, r3 - cmp r4, r1 - 800e7f2: 428c cmp r4, r1 - bcc CopyDataInit - 800e7f4: d3f9 bcc.n 800e7ea - -/* Zero fill the bss segment. */ - ldr r2, =_sbss - 800e7f6: 4a0a ldr r2, [pc, #40] @ (800e820 ) - ldr r4, =_ebss - 800e7f8: 4c0a ldr r4, [pc, #40] @ (800e824 ) - movs r3, #0 - 800e7fa: 2300 movs r3, #0 - b LoopFillZerobss - 800e7fc: e001 b.n 800e802 - -0800e7fe : - -FillZerobss: - str r3, [r2] - 800e7fe: 6013 str r3, [r2, #0] - adds r2, r2, #4 - 800e800: 3204 adds r2, #4 - -0800e802 : - -LoopFillZerobss: - cmp r2, r4 - 800e802: 42a2 cmp r2, r4 - bcc FillZerobss - 800e804: d3fb bcc.n 800e7fe - - -/* Call static constructors */ - bl __libc_init_array - 800e806: f005 fd9d bl 8014344 <__libc_init_array> -/* Call the application's entry point.*/ - bl main - 800e80a: f7fd fcff bl 800c20c
- bx lr - 800e80e: 4770 bx lr - ldr sp, =_estack /* set stack pointer */ - 800e810: 20010000 .word 0x20010000 - ldr r0, =_sdata - 800e814: 20000000 .word 0x20000000 - ldr r1, =_edata - 800e818: 2000024c .word 0x2000024c - ldr r2, =_sidata - 800e81c: 0801714c .word 0x0801714c - ldr r2, =_sbss - 800e820: 20000250 .word 0x20000250 - ldr r4, =_ebss - 800e824: 200011dc .word 0x200011dc - -0800e828 : - * @retval : None -*/ - .section .text.Default_Handler,"ax",%progbits -Default_Handler: -Infinite_Loop: - b Infinite_Loop - 800e828: e7fe b.n 800e828 - ... - -0800e82c : - * 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) -{ - 800e82c: b580 push {r7, lr} - 800e82e: 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(); - 800e830: 4b08 ldr r3, [pc, #32] @ (800e854 ) - 800e832: 681b ldr r3, [r3, #0] - 800e834: 4a07 ldr r2, [pc, #28] @ (800e854 ) - 800e836: f043 0310 orr.w r3, r3, #16 - 800e83a: 6013 str r3, [r2, #0] -#endif -#endif /* PREFETCH_ENABLE */ - - /* Set Interrupt Group Priority */ - HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); - 800e83c: 2003 movs r0, #3 - 800e83e: f001 fd19 bl 8010274 - - /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ - HAL_InitTick(TICK_INT_PRIORITY); - 800e842: 200f movs r0, #15 - 800e844: f000 f808 bl 800e858 - - /* Init the low level hardware */ - HAL_MspInit(); - 800e848: f7ff fb96 bl 800df78 - - /* Return function status */ - return HAL_OK; - 800e84c: 2300 movs r3, #0 -} - 800e84e: 4618 mov r0, r3 - 800e850: bd80 pop {r7, pc} - 800e852: bf00 nop - 800e854: 40022000 .word 0x40022000 - -0800e858 : - * implementation in user file. - * @param TickPriority Tick interrupt priority. - * @retval HAL status - */ -__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) -{ - 800e858: b580 push {r7, lr} - 800e85a: b082 sub sp, #8 - 800e85c: af00 add r7, sp, #0 - 800e85e: 6078 str r0, [r7, #4] - /* Configure the SysTick to have interrupt in 1ms time basis*/ - if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) - 800e860: 4b12 ldr r3, [pc, #72] @ (800e8ac ) - 800e862: 681a ldr r2, [r3, #0] - 800e864: 4b12 ldr r3, [pc, #72] @ (800e8b0 ) - 800e866: 781b ldrb r3, [r3, #0] - 800e868: 4619 mov r1, r3 - 800e86a: f44f 737a mov.w r3, #1000 @ 0x3e8 - 800e86e: fbb3 f3f1 udiv r3, r3, r1 - 800e872: fbb2 f3f3 udiv r3, r2, r3 - 800e876: 4618 mov r0, r3 - 800e878: f001 fd31 bl 80102de - 800e87c: 4603 mov r3, r0 - 800e87e: 2b00 cmp r3, #0 - 800e880: d001 beq.n 800e886 - { - return HAL_ERROR; - 800e882: 2301 movs r3, #1 - 800e884: e00e b.n 800e8a4 - } - - /* Configure the SysTick IRQ priority */ - if (TickPriority < (1UL << __NVIC_PRIO_BITS)) - 800e886: 687b ldr r3, [r7, #4] - 800e888: 2b0f cmp r3, #15 - 800e88a: d80a bhi.n 800e8a2 - { - HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); - 800e88c: 2200 movs r2, #0 - 800e88e: 6879 ldr r1, [r7, #4] - 800e890: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 800e894: f001 fcf9 bl 801028a - uwTickPrio = TickPriority; - 800e898: 4a06 ldr r2, [pc, #24] @ (800e8b4 ) - 800e89a: 687b ldr r3, [r7, #4] - 800e89c: 6013 str r3, [r2, #0] - { - return HAL_ERROR; - } - - /* Return function status */ - return HAL_OK; - 800e89e: 2300 movs r3, #0 - 800e8a0: e000 b.n 800e8a4 - return HAL_ERROR; - 800e8a2: 2301 movs r3, #1 -} - 800e8a4: 4618 mov r0, r3 - 800e8a6: 3708 adds r7, #8 - 800e8a8: 46bd mov sp, r7 - 800e8aa: bd80 pop {r7, pc} - 800e8ac: 20000078 .word 0x20000078 - 800e8b0: 20000080 .word 0x20000080 - 800e8b4: 2000007c .word 0x2000007c - -0800e8b8 : - * @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) -{ - 800e8b8: b480 push {r7} - 800e8ba: af00 add r7, sp, #0 - uwTick += uwTickFreq; - 800e8bc: 4b05 ldr r3, [pc, #20] @ (800e8d4 ) - 800e8be: 781b ldrb r3, [r3, #0] - 800e8c0: 461a mov r2, r3 - 800e8c2: 4b05 ldr r3, [pc, #20] @ (800e8d8 ) - 800e8c4: 681b ldr r3, [r3, #0] - 800e8c6: 4413 add r3, r2 - 800e8c8: 4a03 ldr r2, [pc, #12] @ (800e8d8 ) - 800e8ca: 6013 str r3, [r2, #0] -} - 800e8cc: bf00 nop - 800e8ce: 46bd mov sp, r7 - 800e8d0: bc80 pop {r7} - 800e8d2: 4770 bx lr - 800e8d4: 20000080 .word 0x20000080 - 800e8d8: 2000108c .word 0x2000108c - -0800e8dc : - * @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) -{ - 800e8dc: b480 push {r7} - 800e8de: af00 add r7, sp, #0 - return uwTick; - 800e8e0: 4b02 ldr r3, [pc, #8] @ (800e8ec ) - 800e8e2: 681b ldr r3, [r3, #0] -} - 800e8e4: 4618 mov r0, r3 - 800e8e6: 46bd mov sp, r7 - 800e8e8: bc80 pop {r7} - 800e8ea: 4770 bx lr - 800e8ec: 2000108c .word 0x2000108c - -0800e8f0 : - * implementations in user file. - * @param Delay specifies the delay time length, in milliseconds. - * @retval None - */ -__weak void HAL_Delay(uint32_t Delay) -{ - 800e8f0: b580 push {r7, lr} - 800e8f2: b084 sub sp, #16 - 800e8f4: af00 add r7, sp, #0 - 800e8f6: 6078 str r0, [r7, #4] - uint32_t tickstart = HAL_GetTick(); - 800e8f8: f7ff fff0 bl 800e8dc - 800e8fc: 60b8 str r0, [r7, #8] - uint32_t wait = Delay; - 800e8fe: 687b ldr r3, [r7, #4] - 800e900: 60fb str r3, [r7, #12] - - /* Add a freq to guarantee minimum wait */ - if (wait < HAL_MAX_DELAY) - 800e902: 68fb ldr r3, [r7, #12] - 800e904: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 800e908: d005 beq.n 800e916 - { - wait += (uint32_t)(uwTickFreq); - 800e90a: 4b0a ldr r3, [pc, #40] @ (800e934 ) - 800e90c: 781b ldrb r3, [r3, #0] - 800e90e: 461a mov r2, r3 - 800e910: 68fb ldr r3, [r7, #12] - 800e912: 4413 add r3, r2 - 800e914: 60fb str r3, [r7, #12] - } - - while ((HAL_GetTick() - tickstart) < wait) - 800e916: bf00 nop - 800e918: f7ff ffe0 bl 800e8dc - 800e91c: 4602 mov r2, r0 - 800e91e: 68bb ldr r3, [r7, #8] - 800e920: 1ad3 subs r3, r2, r3 - 800e922: 68fa ldr r2, [r7, #12] - 800e924: 429a cmp r2, r3 - 800e926: d8f7 bhi.n 800e918 - { - } -} - 800e928: bf00 nop - 800e92a: bf00 nop - 800e92c: 3710 adds r7, #16 - 800e92e: 46bd mov sp, r7 - 800e930: bd80 pop {r7, pc} - 800e932: bf00 nop - 800e934: 20000080 .word 0x20000080 - -0800e938 : - * of structure "ADC_InitTypeDef". - * @param hadc: ADC handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc) -{ - 800e938: b580 push {r7, lr} - 800e93a: b086 sub sp, #24 - 800e93c: af00 add r7, sp, #0 - 800e93e: 6078 str r0, [r7, #4] - HAL_StatusTypeDef tmp_hal_status = HAL_OK; - 800e940: 2300 movs r3, #0 - 800e942: 75fb strb r3, [r7, #23] - uint32_t tmp_cr1 = 0U; - 800e944: 2300 movs r3, #0 - 800e946: 613b str r3, [r7, #16] - uint32_t tmp_cr2 = 0U; - 800e948: 2300 movs r3, #0 - 800e94a: 60bb str r3, [r7, #8] - uint32_t tmp_sqr1 = 0U; - 800e94c: 2300 movs r3, #0 - 800e94e: 60fb str r3, [r7, #12] - - /* Check ADC handle */ - if(hadc == NULL) - 800e950: 687b ldr r3, [r7, #4] - 800e952: 2b00 cmp r3, #0 - 800e954: d101 bne.n 800e95a - { - return HAL_ERROR; - 800e956: 2301 movs r3, #1 - 800e958: e0be b.n 800ead8 - assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign)); - assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode)); - assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode)); - assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv)); - - if(hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) - 800e95a: 687b ldr r3, [r7, #4] - 800e95c: 689b ldr r3, [r3, #8] - 800e95e: 2b00 cmp r3, #0 - /* Refer to header of this file for more details on clock enabling */ - /* procedure. */ - - /* Actions performed only if ADC is coming from state reset: */ - /* - Initialization of ADC MSP */ - if (hadc->State == HAL_ADC_STATE_RESET) - 800e960: 687b ldr r3, [r7, #4] - 800e962: 6a9b ldr r3, [r3, #40] @ 0x28 - 800e964: 2b00 cmp r3, #0 - 800e966: d109 bne.n 800e97c - { - /* Initialize ADC error code */ - ADC_CLEAR_ERRORCODE(hadc); - 800e968: 687b ldr r3, [r7, #4] - 800e96a: 2200 movs r2, #0 - 800e96c: 62da str r2, [r3, #44] @ 0x2c - - /* Allocate lock resource and initialize it */ - hadc->Lock = HAL_UNLOCKED; - 800e96e: 687b ldr r3, [r7, #4] - 800e970: 2200 movs r2, #0 - 800e972: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Init the low level hardware */ - hadc->MspInitCallback(hadc); -#else - /* Init the low level hardware */ - HAL_ADC_MspInit(hadc); - 800e976: 6878 ldr r0, [r7, #4] - 800e978: f7fa fe64 bl 8009644 - /* Stop potential conversion on going, on regular and injected groups */ - /* Disable ADC peripheral */ - /* Note: In case of ADC already enabled, precaution to not launch an */ - /* unwanted conversion while modifying register CR2 by writing 1 to */ - /* bit ADON. */ - tmp_hal_status = ADC_ConversionStop_Disable(hadc); - 800e97c: 6878 ldr r0, [r7, #4] - 800e97e: f000 fbf1 bl 800f164 - 800e982: 4603 mov r3, r0 - 800e984: 75fb strb r3, [r7, #23] - - - /* Configuration of ADC parameters if previous preliminary actions are */ - /* correctly completed. */ - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && - 800e986: 687b ldr r3, [r7, #4] - 800e988: 6a9b ldr r3, [r3, #40] @ 0x28 - 800e98a: f003 0310 and.w r3, r3, #16 - 800e98e: 2b00 cmp r3, #0 - 800e990: f040 8099 bne.w 800eac6 - 800e994: 7dfb ldrb r3, [r7, #23] - 800e996: 2b00 cmp r3, #0 - 800e998: f040 8095 bne.w 800eac6 - (tmp_hal_status == HAL_OK) ) - { - /* Set ADC state */ - ADC_STATE_CLR_SET(hadc->State, - 800e99c: 687b ldr r3, [r7, #4] - 800e99e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800e9a0: f423 5388 bic.w r3, r3, #4352 @ 0x1100 - 800e9a4: f023 0302 bic.w r3, r3, #2 - 800e9a8: f043 0202 orr.w r2, r3, #2 - 800e9ac: 687b ldr r3, [r7, #4] - 800e9ae: 629a str r2, [r3, #40] @ 0x28 - /* - continuous conversion mode */ - /* Note: External trigger polarity (ADC_CR2_EXTTRIG) is set into */ - /* HAL_ADC_Start_xxx functions because if set in this function, */ - /* a conversion on injected group would start a conversion also on */ - /* regular group after ADC enabling. */ - tmp_cr2 |= (hadc->Init.DataAlign | - 800e9b0: 687b ldr r3, [r7, #4] - 800e9b2: 685a ldr r2, [r3, #4] - ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | - 800e9b4: 687b ldr r3, [r7, #4] - 800e9b6: 69db ldr r3, [r3, #28] - tmp_cr2 |= (hadc->Init.DataAlign | - 800e9b8: 431a orrs r2, r3 - ADC_CR2_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode) ); - 800e9ba: 687b ldr r3, [r7, #4] - 800e9bc: 7b1b ldrb r3, [r3, #12] - 800e9be: 005b lsls r3, r3, #1 - ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | - 800e9c0: 4313 orrs r3, r2 - tmp_cr2 |= (hadc->Init.DataAlign | - 800e9c2: 68ba ldr r2, [r7, #8] - 800e9c4: 4313 orrs r3, r2 - 800e9c6: 60bb str r3, [r7, #8] - - /* Configuration of ADC: */ - /* - scan mode */ - /* - discontinuous mode disable/enable */ - /* - discontinuous mode number of conversions */ - tmp_cr1 |= (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode)); - 800e9c8: 687b ldr r3, [r7, #4] - 800e9ca: 689b ldr r3, [r3, #8] - 800e9cc: f5b3 7f80 cmp.w r3, #256 @ 0x100 - 800e9d0: d003 beq.n 800e9da - 800e9d2: 687b ldr r3, [r7, #4] - 800e9d4: 689b ldr r3, [r3, #8] - 800e9d6: 2b01 cmp r3, #1 - 800e9d8: d102 bne.n 800e9e0 - 800e9da: f44f 7380 mov.w r3, #256 @ 0x100 - 800e9de: e000 b.n 800e9e2 - 800e9e0: 2300 movs r3, #0 - 800e9e2: 693a ldr r2, [r7, #16] - 800e9e4: 4313 orrs r3, r2 - 800e9e6: 613b str r3, [r7, #16] - - /* Enable discontinuous mode only if continuous mode is disabled */ - /* Note: If parameter "Init.ScanConvMode" is set to disable, parameter */ - /* discontinuous is set anyway, but will have no effect on ADC HW. */ - if (hadc->Init.DiscontinuousConvMode == ENABLE) - 800e9e8: 687b ldr r3, [r7, #4] - 800e9ea: 7d1b ldrb r3, [r3, #20] - 800e9ec: 2b01 cmp r3, #1 - 800e9ee: d119 bne.n 800ea24 - { - if (hadc->Init.ContinuousConvMode == DISABLE) - 800e9f0: 687b ldr r3, [r7, #4] - 800e9f2: 7b1b ldrb r3, [r3, #12] - 800e9f4: 2b00 cmp r3, #0 - 800e9f6: d109 bne.n 800ea0c - { - /* Enable the selected ADC regular discontinuous mode */ - /* Set the number of channels to be converted in discontinuous mode */ - SET_BIT(tmp_cr1, ADC_CR1_DISCEN | - 800e9f8: 687b ldr r3, [r7, #4] - 800e9fa: 699b ldr r3, [r3, #24] - 800e9fc: 3b01 subs r3, #1 - 800e9fe: 035a lsls r2, r3, #13 - 800ea00: 693b ldr r3, [r7, #16] - 800ea02: 4313 orrs r3, r2 - 800ea04: f443 6300 orr.w r3, r3, #2048 @ 0x800 - 800ea08: 613b str r3, [r7, #16] - 800ea0a: e00b b.n 800ea24 - { - /* ADC regular group settings continuous and sequencer discontinuous*/ - /* cannot be enabled simultaneously. */ - - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); - 800ea0c: 687b ldr r3, [r7, #4] - 800ea0e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ea10: f043 0220 orr.w r2, r3, #32 - 800ea14: 687b ldr r3, [r7, #4] - 800ea16: 629a str r2, [r3, #40] @ 0x28 - - /* Set ADC error code to ADC IP internal error */ - SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); - 800ea18: 687b ldr r3, [r7, #4] - 800ea1a: 6adb ldr r3, [r3, #44] @ 0x2c - 800ea1c: f043 0201 orr.w r2, r3, #1 - 800ea20: 687b ldr r3, [r7, #4] - 800ea22: 62da str r2, [r3, #44] @ 0x2c - } - } - - /* Update ADC configuration register CR1 with previous settings */ - MODIFY_REG(hadc->Instance->CR1, - 800ea24: 687b ldr r3, [r7, #4] - 800ea26: 681b ldr r3, [r3, #0] - 800ea28: 685b ldr r3, [r3, #4] - 800ea2a: f423 4169 bic.w r1, r3, #59648 @ 0xe900 - 800ea2e: 687b ldr r3, [r7, #4] - 800ea30: 681b ldr r3, [r3, #0] - 800ea32: 693a ldr r2, [r7, #16] - 800ea34: 430a orrs r2, r1 - 800ea36: 605a str r2, [r3, #4] - ADC_CR1_DISCEN | - ADC_CR1_DISCNUM , - tmp_cr1 ); - - /* Update ADC configuration register CR2 with previous settings */ - MODIFY_REG(hadc->Instance->CR2, - 800ea38: 687b ldr r3, [r7, #4] - 800ea3a: 681b ldr r3, [r3, #0] - 800ea3c: 689a ldr r2, [r3, #8] - 800ea3e: 4b28 ldr r3, [pc, #160] @ (800eae0 ) - 800ea40: 4013 ands r3, r2 - 800ea42: 687a ldr r2, [r7, #4] - 800ea44: 6812 ldr r2, [r2, #0] - 800ea46: 68b9 ldr r1, [r7, #8] - 800ea48: 430b orrs r3, r1 - 800ea4a: 6093 str r3, [r2, #8] - /* Note: Scan mode is present by hardware on this device and, if */ - /* disabled, discards automatically nb of conversions. Anyway, nb of */ - /* conversions is forced to 0x00 for alignment over all STM32 devices. */ - /* - if scan mode is enabled, regular channels sequence length is set to */ - /* parameter "NbrOfConversion" */ - if (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode) == ADC_SCAN_ENABLE) - 800ea4c: 687b ldr r3, [r7, #4] - 800ea4e: 689b ldr r3, [r3, #8] - 800ea50: f5b3 7f80 cmp.w r3, #256 @ 0x100 - 800ea54: d003 beq.n 800ea5e - 800ea56: 687b ldr r3, [r7, #4] - 800ea58: 689b ldr r3, [r3, #8] - 800ea5a: 2b01 cmp r3, #1 - 800ea5c: d104 bne.n 800ea68 - { - tmp_sqr1 = ADC_SQR1_L_SHIFT(hadc->Init.NbrOfConversion); - 800ea5e: 687b ldr r3, [r7, #4] - 800ea60: 691b ldr r3, [r3, #16] - 800ea62: 3b01 subs r3, #1 - 800ea64: 051b lsls r3, r3, #20 - 800ea66: 60fb str r3, [r7, #12] - } - - MODIFY_REG(hadc->Instance->SQR1, - 800ea68: 687b ldr r3, [r7, #4] - 800ea6a: 681b ldr r3, [r3, #0] - 800ea6c: 6adb ldr r3, [r3, #44] @ 0x2c - 800ea6e: f423 0170 bic.w r1, r3, #15728640 @ 0xf00000 - 800ea72: 687b ldr r3, [r7, #4] - 800ea74: 681b ldr r3, [r3, #0] - 800ea76: 68fa ldr r2, [r7, #12] - 800ea78: 430a orrs r2, r1 - 800ea7a: 62da str r2, [r3, #44] @ 0x2c - /* ensure of no potential problem of ADC core IP clocking. */ - /* Check through register CR2 (excluding bits set in other functions: */ - /* execution control bits (ADON, JSWSTART, SWSTART), regular group bits */ - /* (DMA), injected group bits (JEXTTRIG and JEXTSEL), channel internal */ - /* measurement path bit (TSVREFE). */ - if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | - 800ea7c: 687b ldr r3, [r7, #4] - 800ea7e: 681b ldr r3, [r3, #0] - 800ea80: 689a ldr r2, [r3, #8] - 800ea82: 4b18 ldr r3, [pc, #96] @ (800eae4 ) - 800ea84: 4013 ands r3, r2 - 800ea86: 68ba ldr r2, [r7, #8] - 800ea88: 429a cmp r2, r3 - 800ea8a: d10b bne.n 800eaa4 - ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | - ADC_CR2_TSVREFE )) - == tmp_cr2) - { - /* Set ADC error code to none */ - ADC_CLEAR_ERRORCODE(hadc); - 800ea8c: 687b ldr r3, [r7, #4] - 800ea8e: 2200 movs r2, #0 - 800ea90: 62da str r2, [r3, #44] @ 0x2c - - /* Set the ADC state */ - ADC_STATE_CLR_SET(hadc->State, - 800ea92: 687b ldr r3, [r7, #4] - 800ea94: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ea96: f023 0303 bic.w r3, r3, #3 - 800ea9a: f043 0201 orr.w r2, r3, #1 - 800ea9e: 687b ldr r3, [r7, #4] - 800eaa0: 629a str r2, [r3, #40] @ 0x28 - if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | - 800eaa2: e018 b.n 800ead6 - HAL_ADC_STATE_READY); - } - else - { - /* Update ADC state machine to error */ - ADC_STATE_CLR_SET(hadc->State, - 800eaa4: 687b ldr r3, [r7, #4] - 800eaa6: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eaa8: f023 0312 bic.w r3, r3, #18 - 800eaac: f043 0210 orr.w r2, r3, #16 - 800eab0: 687b ldr r3, [r7, #4] - 800eab2: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_BUSY_INTERNAL, - HAL_ADC_STATE_ERROR_INTERNAL); - - /* Set ADC error code to ADC IP internal error */ - SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); - 800eab4: 687b ldr r3, [r7, #4] - 800eab6: 6adb ldr r3, [r3, #44] @ 0x2c - 800eab8: f043 0201 orr.w r2, r3, #1 - 800eabc: 687b ldr r3, [r7, #4] - 800eabe: 62da str r2, [r3, #44] @ 0x2c - - tmp_hal_status = HAL_ERROR; - 800eac0: 2301 movs r3, #1 - 800eac2: 75fb strb r3, [r7, #23] - if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | - 800eac4: e007 b.n 800ead6 - - } - else - { - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); - 800eac6: 687b ldr r3, [r7, #4] - 800eac8: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eaca: f043 0210 orr.w r2, r3, #16 - 800eace: 687b ldr r3, [r7, #4] - 800ead0: 629a str r2, [r3, #40] @ 0x28 - - tmp_hal_status = HAL_ERROR; - 800ead2: 2301 movs r3, #1 - 800ead4: 75fb strb r3, [r7, #23] - } - - /* Return function status */ - return tmp_hal_status; - 800ead6: 7dfb ldrb r3, [r7, #23] -} - 800ead8: 4618 mov r0, r3 - 800eada: 3718 adds r7, #24 - 800eadc: 46bd mov sp, r7 - 800eade: bd80 pop {r7, pc} - 800eae0: ffe1f7fd .word 0xffe1f7fd - 800eae4: ff1f0efe .word 0xff1f0efe - -0800eae8 : - * Interruptions enabled in this function: None. - * @param hadc: ADC handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc) -{ - 800eae8: b580 push {r7, lr} - 800eaea: b084 sub sp, #16 - 800eaec: af00 add r7, sp, #0 - 800eaee: 6078 str r0, [r7, #4] - HAL_StatusTypeDef tmp_hal_status = HAL_OK; - 800eaf0: 2300 movs r3, #0 - 800eaf2: 73fb strb r3, [r7, #15] - - /* Check the parameters */ - assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); - - /* Process locked */ - __HAL_LOCK(hadc); - 800eaf4: 687b ldr r3, [r7, #4] - 800eaf6: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 - 800eafa: 2b01 cmp r3, #1 - 800eafc: d101 bne.n 800eb02 - 800eafe: 2302 movs r3, #2 - 800eb00: e098 b.n 800ec34 - 800eb02: 687b ldr r3, [r7, #4] - 800eb04: 2201 movs r2, #1 - 800eb06: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Enable the ADC peripheral */ - tmp_hal_status = ADC_Enable(hadc); - 800eb0a: 6878 ldr r0, [r7, #4] - 800eb0c: f000 fad0 bl 800f0b0 - 800eb10: 4603 mov r3, r0 - 800eb12: 73fb strb r3, [r7, #15] - - /* Start conversion if ADC is effectively enabled */ - if (tmp_hal_status == HAL_OK) - 800eb14: 7bfb ldrb r3, [r7, #15] - 800eb16: 2b00 cmp r3, #0 - 800eb18: f040 8087 bne.w 800ec2a - { - /* Set ADC state */ - /* - Clear state bitfield related to regular group conversion results */ - /* - Set state bitfield related to regular operation */ - ADC_STATE_CLR_SET(hadc->State, - 800eb1c: 687b ldr r3, [r7, #4] - 800eb1e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eb20: f423 7340 bic.w r3, r3, #768 @ 0x300 - 800eb24: f023 0301 bic.w r3, r3, #1 - 800eb28: f443 7280 orr.w r2, r3, #256 @ 0x100 - 800eb2c: 687b ldr r3, [r7, #4] - 800eb2e: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_REG_BUSY); - - /* Set group injected state (from auto-injection) and multimode state */ - /* for all cases of multimode: independent mode, multimode ADC master */ - /* or multimode ADC slave (for devices with several ADCs): */ - if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) - 800eb30: 687b ldr r3, [r7, #4] - 800eb32: 681b ldr r3, [r3, #0] - 800eb34: 4a41 ldr r2, [pc, #260] @ (800ec3c ) - 800eb36: 4293 cmp r3, r2 - 800eb38: d105 bne.n 800eb46 - 800eb3a: 4b41 ldr r3, [pc, #260] @ (800ec40 ) - 800eb3c: 685b ldr r3, [r3, #4] - 800eb3e: f403 2370 and.w r3, r3, #983040 @ 0xf0000 - 800eb42: 2b00 cmp r3, #0 - 800eb44: d115 bne.n 800eb72 - { - /* Set ADC state (ADC independent or master) */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); - 800eb46: 687b ldr r3, [r7, #4] - 800eb48: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eb4a: f423 1280 bic.w r2, r3, #1048576 @ 0x100000 - 800eb4e: 687b ldr r3, [r7, #4] - 800eb50: 629a str r2, [r3, #40] @ 0x28 - - /* If conversions on group regular are also triggering group injected, */ - /* update ADC state. */ - if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) - 800eb52: 687b ldr r3, [r7, #4] - 800eb54: 681b ldr r3, [r3, #0] - 800eb56: 685b ldr r3, [r3, #4] - 800eb58: f403 6380 and.w r3, r3, #1024 @ 0x400 - 800eb5c: 2b00 cmp r3, #0 - 800eb5e: d026 beq.n 800ebae - { - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); - 800eb60: 687b ldr r3, [r7, #4] - 800eb62: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eb64: f423 5340 bic.w r3, r3, #12288 @ 0x3000 - 800eb68: f443 5280 orr.w r2, r3, #4096 @ 0x1000 - 800eb6c: 687b ldr r3, [r7, #4] - 800eb6e: 629a str r2, [r3, #40] @ 0x28 - if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) - 800eb70: e01d b.n 800ebae - } - } - else - { - /* Set ADC state (ADC slave) */ - SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE); - 800eb72: 687b ldr r3, [r7, #4] - 800eb74: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eb76: f443 1280 orr.w r2, r3, #1048576 @ 0x100000 - 800eb7a: 687b ldr r3, [r7, #4] - 800eb7c: 629a str r2, [r3, #40] @ 0x28 - - /* If conversions on group regular are also triggering group injected, */ - /* update ADC state. */ - if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) - 800eb7e: 687b ldr r3, [r7, #4] - 800eb80: 681b ldr r3, [r3, #0] - 800eb82: 4a2f ldr r2, [pc, #188] @ (800ec40 ) - 800eb84: 4293 cmp r3, r2 - 800eb86: d004 beq.n 800eb92 - 800eb88: 687b ldr r3, [r7, #4] - 800eb8a: 681b ldr r3, [r3, #0] - 800eb8c: 4a2b ldr r2, [pc, #172] @ (800ec3c ) - 800eb8e: 4293 cmp r3, r2 - 800eb90: d10d bne.n 800ebae - 800eb92: 4b2b ldr r3, [pc, #172] @ (800ec40 ) - 800eb94: 685b ldr r3, [r3, #4] - 800eb96: f403 6380 and.w r3, r3, #1024 @ 0x400 - 800eb9a: 2b00 cmp r3, #0 - 800eb9c: d007 beq.n 800ebae - { - ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY); - 800eb9e: 687b ldr r3, [r7, #4] - 800eba0: 6a9b ldr r3, [r3, #40] @ 0x28 - 800eba2: f423 5340 bic.w r3, r3, #12288 @ 0x3000 - 800eba6: f443 5280 orr.w r2, r3, #4096 @ 0x1000 - 800ebaa: 687b ldr r3, [r7, #4] - 800ebac: 629a str r2, [r3, #40] @ 0x28 - } - } - - /* State machine update: Check if an injected conversion is ongoing */ - if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - 800ebae: 687b ldr r3, [r7, #4] - 800ebb0: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ebb2: f403 5380 and.w r3, r3, #4096 @ 0x1000 - 800ebb6: 2b00 cmp r3, #0 - 800ebb8: d006 beq.n 800ebc8 - { - /* Reset ADC error code fields related to conversions on group regular */ - CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA)); - 800ebba: 687b ldr r3, [r7, #4] - 800ebbc: 6adb ldr r3, [r3, #44] @ 0x2c - 800ebbe: f023 0206 bic.w r2, r3, #6 - 800ebc2: 687b ldr r3, [r7, #4] - 800ebc4: 62da str r2, [r3, #44] @ 0x2c - 800ebc6: e002 b.n 800ebce - } - else - { - /* Reset ADC all error code fields */ - ADC_CLEAR_ERRORCODE(hadc); - 800ebc8: 687b ldr r3, [r7, #4] - 800ebca: 2200 movs r2, #0 - 800ebcc: 62da str r2, [r3, #44] @ 0x2c - } - - /* Process unlocked */ - /* Unlock before starting ADC conversions: in case of potential */ - /* interruption, to let the process to ADC IRQ Handler. */ - __HAL_UNLOCK(hadc); - 800ebce: 687b ldr r3, [r7, #4] - 800ebd0: 2200 movs r2, #0 - 800ebd2: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Clear regular group conversion flag */ - /* (To ensure of no unknown state from potential previous ADC operations) */ - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC); - 800ebd6: 687b ldr r3, [r7, #4] - 800ebd8: 681b ldr r3, [r3, #0] - 800ebda: f06f 0202 mvn.w r2, #2 - 800ebde: 601a str r2, [r3, #0] - /* - if ADC is slave, ADC is enabled only (conversion is not started). */ - /* - if ADC is master, ADC is enabled and conversion is started. */ - /* If ADC is master, ADC is enabled and conversion is started. */ - /* Note: Alternate trigger for single conversion could be to force an */ - /* additional set of bit ADON "hadc->Instance->CR2 |= ADC_CR2_ADON;"*/ - if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && - 800ebe0: 687b ldr r3, [r7, #4] - 800ebe2: 681b ldr r3, [r3, #0] - 800ebe4: 689b ldr r3, [r3, #8] - 800ebe6: f403 2360 and.w r3, r3, #917504 @ 0xe0000 - 800ebea: f5b3 2f60 cmp.w r3, #917504 @ 0xe0000 - 800ebee: d113 bne.n 800ec18 - ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc) ) - 800ebf0: 687b ldr r3, [r7, #4] - 800ebf2: 681b ldr r3, [r3, #0] - if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && - 800ebf4: 4a11 ldr r2, [pc, #68] @ (800ec3c ) - 800ebf6: 4293 cmp r3, r2 - 800ebf8: d105 bne.n 800ec06 - ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc) ) - 800ebfa: 4b11 ldr r3, [pc, #68] @ (800ec40 ) - 800ebfc: 685b ldr r3, [r3, #4] - 800ebfe: f403 2370 and.w r3, r3, #983040 @ 0xf0000 - if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && - 800ec02: 2b00 cmp r3, #0 - 800ec04: d108 bne.n 800ec18 - { - /* Start ADC conversion on regular group with SW start */ - SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG)); - 800ec06: 687b ldr r3, [r7, #4] - 800ec08: 681b ldr r3, [r3, #0] - 800ec0a: 689a ldr r2, [r3, #8] - 800ec0c: 687b ldr r3, [r7, #4] - 800ec0e: 681b ldr r3, [r3, #0] - 800ec10: f442 02a0 orr.w r2, r2, #5242880 @ 0x500000 - 800ec14: 609a str r2, [r3, #8] - 800ec16: e00c b.n 800ec32 - } - else - { - /* Start ADC conversion on regular group with external trigger */ - SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG); - 800ec18: 687b ldr r3, [r7, #4] - 800ec1a: 681b ldr r3, [r3, #0] - 800ec1c: 689a ldr r2, [r3, #8] - 800ec1e: 687b ldr r3, [r7, #4] - 800ec20: 681b ldr r3, [r3, #0] - 800ec22: f442 1280 orr.w r2, r2, #1048576 @ 0x100000 - 800ec26: 609a str r2, [r3, #8] - 800ec28: e003 b.n 800ec32 - } - } - else - { - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800ec2a: 687b ldr r3, [r7, #4] - 800ec2c: 2200 movs r2, #0 - 800ec2e: f883 2024 strb.w r2, [r3, #36] @ 0x24 - } - - /* Return function status */ - return tmp_hal_status; - 800ec32: 7bfb ldrb r3, [r7, #15] -} - 800ec34: 4618 mov r0, r3 - 800ec36: 3710 adds r7, #16 - 800ec38: 46bd mov sp, r7 - 800ec3a: bd80 pop {r7, pc} - 800ec3c: 40012800 .word 0x40012800 - 800ec40: 40012400 .word 0x40012400 - -0800ec44 : - * should be preliminarily stopped using HAL_ADCEx_InjectedStop function. - * @param hadc: ADC handle - * @retval HAL status. - */ -HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc) -{ - 800ec44: b580 push {r7, lr} - 800ec46: b084 sub sp, #16 - 800ec48: af00 add r7, sp, #0 - 800ec4a: 6078 str r0, [r7, #4] - HAL_StatusTypeDef tmp_hal_status = HAL_OK; - 800ec4c: 2300 movs r3, #0 - 800ec4e: 73fb strb r3, [r7, #15] - - /* Check the parameters */ - assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); - - /* Process locked */ - __HAL_LOCK(hadc); - 800ec50: 687b ldr r3, [r7, #4] - 800ec52: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 - 800ec56: 2b01 cmp r3, #1 - 800ec58: d101 bne.n 800ec5e - 800ec5a: 2302 movs r3, #2 - 800ec5c: e01a b.n 800ec94 - 800ec5e: 687b ldr r3, [r7, #4] - 800ec60: 2201 movs r2, #1 - 800ec62: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Stop potential conversion on going, on regular and injected groups */ - /* Disable ADC peripheral */ - tmp_hal_status = ADC_ConversionStop_Disable(hadc); - 800ec66: 6878 ldr r0, [r7, #4] - 800ec68: f000 fa7c bl 800f164 - 800ec6c: 4603 mov r3, r0 - 800ec6e: 73fb strb r3, [r7, #15] - - /* Check if ADC is effectively disabled */ - if (tmp_hal_status == HAL_OK) - 800ec70: 7bfb ldrb r3, [r7, #15] - 800ec72: 2b00 cmp r3, #0 - 800ec74: d109 bne.n 800ec8a - { - /* Set ADC state */ - ADC_STATE_CLR_SET(hadc->State, - 800ec76: 687b ldr r3, [r7, #4] - 800ec78: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ec7a: f423 5388 bic.w r3, r3, #4352 @ 0x1100 - 800ec7e: f023 0301 bic.w r3, r3, #1 - 800ec82: f043 0201 orr.w r2, r3, #1 - 800ec86: 687b ldr r3, [r7, #4] - 800ec88: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, - HAL_ADC_STATE_READY); - } - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800ec8a: 687b ldr r3, [r7, #4] - 800ec8c: 2200 movs r2, #0 - 800ec8e: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Return function status */ - return tmp_hal_status; - 800ec92: 7bfb ldrb r3, [r7, #15] -} - 800ec94: 4618 mov r0, r3 - 800ec96: 3710 adds r7, #16 - 800ec98: 46bd mov sp, r7 - 800ec9a: bd80 pop {r7, pc} - -0800ec9c : - * @param hadc: ADC handle - * @param Timeout: Timeout value in millisecond. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) -{ - 800ec9c: b590 push {r4, r7, lr} - 800ec9e: b087 sub sp, #28 - 800eca0: af00 add r7, sp, #0 - 800eca2: 6078 str r0, [r7, #4] - 800eca4: 6039 str r1, [r7, #0] - uint32_t tickstart = 0U; - 800eca6: 2300 movs r3, #0 - 800eca8: 617b str r3, [r7, #20] - - /* Variables for polling in case of scan mode enabled and polling for each */ - /* conversion. */ - __IO uint32_t Conversion_Timeout_CPU_cycles = 0U; - 800ecaa: 2300 movs r3, #0 - 800ecac: 60fb str r3, [r7, #12] - uint32_t Conversion_Timeout_CPU_cycles_max = 0U; - 800ecae: 2300 movs r3, #0 - 800ecb0: 613b str r3, [r7, #16] - - /* Check the parameters */ - assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); - - /* Get tick count */ - tickstart = HAL_GetTick(); - 800ecb2: f7ff fe13 bl 800e8dc - 800ecb6: 6178 str r0, [r7, #20] - - /* Verification that ADC configuration is compliant with polling for */ - /* each conversion: */ - /* Particular case is ADC configured in DMA mode */ - if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA)) - 800ecb8: 687b ldr r3, [r7, #4] - 800ecba: 681b ldr r3, [r3, #0] - 800ecbc: 689b ldr r3, [r3, #8] - 800ecbe: f403 7380 and.w r3, r3, #256 @ 0x100 - 800ecc2: 2b00 cmp r3, #0 - 800ecc4: d00b beq.n 800ecde - { - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); - 800ecc6: 687b ldr r3, [r7, #4] - 800ecc8: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ecca: f043 0220 orr.w r2, r3, #32 - 800ecce: 687b ldr r3, [r7, #4] - 800ecd0: 629a str r2, [r3, #40] @ 0x28 - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800ecd2: 687b ldr r3, [r7, #4] - 800ecd4: 2200 movs r2, #0 - 800ecd6: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800ecda: 2301 movs r3, #1 - 800ecdc: e0d3 b.n 800ee86 - /* from ADC conversion time (selected sampling time + conversion time of */ - /* 12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on */ - /* settings, conversion time range can be from 28 to 32256 CPU cycles). */ - /* As flag EOC is not set after each conversion, no timeout status can */ - /* be set. */ - if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && - 800ecde: 687b ldr r3, [r7, #4] - 800ece0: 681b ldr r3, [r3, #0] - 800ece2: 685b ldr r3, [r3, #4] - 800ece4: f403 7380 and.w r3, r3, #256 @ 0x100 - 800ece8: 2b00 cmp r3, #0 - 800ecea: d131 bne.n 800ed50 - HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L) ) - 800ecec: 687b ldr r3, [r7, #4] - 800ecee: 681b ldr r3, [r3, #0] - 800ecf0: 6adb ldr r3, [r3, #44] @ 0x2c - 800ecf2: f403 0370 and.w r3, r3, #15728640 @ 0xf00000 - if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && - 800ecf6: 2b00 cmp r3, #0 - 800ecf8: d12a bne.n 800ed50 - { - /* Wait until End of Conversion flag is raised */ - while(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) - 800ecfa: e021 b.n 800ed40 - { - /* Check if timeout is disabled (set to infinite wait) */ - if(Timeout != HAL_MAX_DELAY) - 800ecfc: 683b ldr r3, [r7, #0] - 800ecfe: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 800ed02: d01d beq.n 800ed40 - { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart ) > Timeout)) - 800ed04: 683b ldr r3, [r7, #0] - 800ed06: 2b00 cmp r3, #0 - 800ed08: d007 beq.n 800ed1a - 800ed0a: f7ff fde7 bl 800e8dc - 800ed0e: 4602 mov r2, r0 - 800ed10: 697b ldr r3, [r7, #20] - 800ed12: 1ad3 subs r3, r2, r3 - 800ed14: 683a ldr r2, [r7, #0] - 800ed16: 429a cmp r2, r3 - 800ed18: d212 bcs.n 800ed40 - { - /* New check to avoid false timeout detection in case of preemption */ - if(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) - 800ed1a: 687b ldr r3, [r7, #4] - 800ed1c: 681b ldr r3, [r3, #0] - 800ed1e: 681b ldr r3, [r3, #0] - 800ed20: f003 0302 and.w r3, r3, #2 - 800ed24: 2b00 cmp r3, #0 - 800ed26: d10b bne.n 800ed40 - { - /* Update ADC state machine to timeout */ - SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); - 800ed28: 687b ldr r3, [r7, #4] - 800ed2a: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ed2c: f043 0204 orr.w r2, r3, #4 - 800ed30: 687b ldr r3, [r7, #4] - 800ed32: 629a str r2, [r3, #40] @ 0x28 - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800ed34: 687b ldr r3, [r7, #4] - 800ed36: 2200 movs r2, #0 - 800ed38: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_TIMEOUT; - 800ed3c: 2303 movs r3, #3 - 800ed3e: e0a2 b.n 800ee86 - while(HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) - 800ed40: 687b ldr r3, [r7, #4] - 800ed42: 681b ldr r3, [r3, #0] - 800ed44: 681b ldr r3, [r3, #0] - 800ed46: f003 0302 and.w r3, r3, #2 - 800ed4a: 2b00 cmp r3, #0 - 800ed4c: d0d6 beq.n 800ecfc - if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && - 800ed4e: e070 b.n 800ee32 - /* Replace polling by wait for maximum conversion time */ - /* - Computation of CPU clock cycles corresponding to ADC clock cycles */ - /* and ADC maximum conversion cycles on all channels. */ - /* - Wait for the expected ADC clock cycles delay */ - Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock - / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) - 800ed50: 4b4f ldr r3, [pc, #316] @ (800ee90 ) - 800ed52: 681c ldr r4, [r3, #0] - 800ed54: 2002 movs r0, #2 - 800ed56: f002 fcfb bl 8011750 - 800ed5a: 4603 mov r3, r0 - 800ed5c: fbb4 f2f3 udiv r2, r4, r3 - * ADC_CONVCYCLES_MAX_RANGE(hadc) ); - 800ed60: 687b ldr r3, [r7, #4] - 800ed62: 681b ldr r3, [r3, #0] - 800ed64: 6919 ldr r1, [r3, #16] - 800ed66: 4b4b ldr r3, [pc, #300] @ (800ee94 ) - 800ed68: 400b ands r3, r1 - 800ed6a: 2b00 cmp r3, #0 - 800ed6c: d118 bne.n 800eda0 - 800ed6e: 687b ldr r3, [r7, #4] - 800ed70: 681b ldr r3, [r3, #0] - 800ed72: 68d9 ldr r1, [r3, #12] - 800ed74: 4b48 ldr r3, [pc, #288] @ (800ee98 ) - 800ed76: 400b ands r3, r1 - 800ed78: 2b00 cmp r3, #0 - 800ed7a: d111 bne.n 800eda0 - 800ed7c: 687b ldr r3, [r7, #4] - 800ed7e: 681b ldr r3, [r3, #0] - 800ed80: 6919 ldr r1, [r3, #16] - 800ed82: 4b46 ldr r3, [pc, #280] @ (800ee9c ) - 800ed84: 400b ands r3, r1 - 800ed86: 2b00 cmp r3, #0 - 800ed88: d108 bne.n 800ed9c - 800ed8a: 687b ldr r3, [r7, #4] - 800ed8c: 681b ldr r3, [r3, #0] - 800ed8e: 68d9 ldr r1, [r3, #12] - 800ed90: 4b43 ldr r3, [pc, #268] @ (800eea0 ) - 800ed92: 400b ands r3, r1 - 800ed94: 2b00 cmp r3, #0 - 800ed96: d101 bne.n 800ed9c - 800ed98: 2314 movs r3, #20 - 800ed9a: e020 b.n 800edde - 800ed9c: 2329 movs r3, #41 @ 0x29 - 800ed9e: e01e b.n 800edde - 800eda0: 687b ldr r3, [r7, #4] - 800eda2: 681b ldr r3, [r3, #0] - 800eda4: 6919 ldr r1, [r3, #16] - 800eda6: 4b3d ldr r3, [pc, #244] @ (800ee9c ) - 800eda8: 400b ands r3, r1 - 800edaa: 2b00 cmp r3, #0 - 800edac: d106 bne.n 800edbc - 800edae: 687b ldr r3, [r7, #4] - 800edb0: 681b ldr r3, [r3, #0] - 800edb2: 68d9 ldr r1, [r3, #12] - 800edb4: 4b3a ldr r3, [pc, #232] @ (800eea0 ) - 800edb6: 400b ands r3, r1 - 800edb8: 2b00 cmp r3, #0 - 800edba: d00d beq.n 800edd8 - 800edbc: 687b ldr r3, [r7, #4] - 800edbe: 681b ldr r3, [r3, #0] - 800edc0: 6919 ldr r1, [r3, #16] - 800edc2: 4b38 ldr r3, [pc, #224] @ (800eea4 ) - 800edc4: 400b ands r3, r1 - 800edc6: 2b00 cmp r3, #0 - 800edc8: d108 bne.n 800eddc - 800edca: 687b ldr r3, [r7, #4] - 800edcc: 681b ldr r3, [r3, #0] - 800edce: 68d9 ldr r1, [r3, #12] - 800edd0: 4b34 ldr r3, [pc, #208] @ (800eea4 ) - 800edd2: 400b ands r3, r1 - 800edd4: 2b00 cmp r3, #0 - 800edd6: d101 bne.n 800eddc - 800edd8: 2354 movs r3, #84 @ 0x54 - 800edda: e000 b.n 800edde - 800eddc: 23fc movs r3, #252 @ 0xfc - Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock - 800edde: fb02 f303 mul.w r3, r2, r3 - 800ede2: 613b str r3, [r7, #16] - - while(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) - 800ede4: e021 b.n 800ee2a - { - /* Check if timeout is disabled (set to infinite wait) */ - if(Timeout != HAL_MAX_DELAY) - 800ede6: 683b ldr r3, [r7, #0] - 800ede8: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 800edec: d01a beq.n 800ee24 - { - if((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) - 800edee: 683b ldr r3, [r7, #0] - 800edf0: 2b00 cmp r3, #0 - 800edf2: d007 beq.n 800ee04 - 800edf4: f7ff fd72 bl 800e8dc - 800edf8: 4602 mov r2, r0 - 800edfa: 697b ldr r3, [r7, #20] - 800edfc: 1ad3 subs r3, r2, r3 - 800edfe: 683a ldr r2, [r7, #0] - 800ee00: 429a cmp r2, r3 - 800ee02: d20f bcs.n 800ee24 - { - /* New check to avoid false timeout detection in case of preemption */ - if(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) - 800ee04: 68fb ldr r3, [r7, #12] - 800ee06: 693a ldr r2, [r7, #16] - 800ee08: 429a cmp r2, r3 - 800ee0a: d90b bls.n 800ee24 - { - /* Update ADC state machine to timeout */ - SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT); - 800ee0c: 687b ldr r3, [r7, #4] - 800ee0e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ee10: f043 0204 orr.w r2, r3, #4 - 800ee14: 687b ldr r3, [r7, #4] - 800ee16: 629a str r2, [r3, #40] @ 0x28 - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800ee18: 687b ldr r3, [r7, #4] - 800ee1a: 2200 movs r2, #0 - 800ee1c: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_TIMEOUT; - 800ee20: 2303 movs r3, #3 - 800ee22: e030 b.n 800ee86 - } - } - } - Conversion_Timeout_CPU_cycles ++; - 800ee24: 68fb ldr r3, [r7, #12] - 800ee26: 3301 adds r3, #1 - 800ee28: 60fb str r3, [r7, #12] - while(Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) - 800ee2a: 68fb ldr r3, [r7, #12] - 800ee2c: 693a ldr r2, [r7, #16] - 800ee2e: 429a cmp r2, r3 - 800ee30: d8d9 bhi.n 800ede6 - } - } - - /* Clear regular group conversion flag */ - __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC); - 800ee32: 687b ldr r3, [r7, #4] - 800ee34: 681b ldr r3, [r3, #0] - 800ee36: f06f 0212 mvn.w r2, #18 - 800ee3a: 601a str r2, [r3, #0] - - /* Update ADC state machine */ - SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC); - 800ee3c: 687b ldr r3, [r7, #4] - 800ee3e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ee40: f443 7200 orr.w r2, r3, #512 @ 0x200 - 800ee44: 687b ldr r3, [r7, #4] - 800ee46: 629a str r2, [r3, #40] @ 0x28 - /* Determine whether any further conversion upcoming on group regular */ - /* by external trigger, continuous mode or scan sequence on going. */ - /* Note: On STM32F1 devices, in case of sequencer enabled */ - /* (several ranks selected), end of conversion flag is raised */ - /* at the end of the sequence. */ - if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && - 800ee48: 687b ldr r3, [r7, #4] - 800ee4a: 681b ldr r3, [r3, #0] - 800ee4c: 689b ldr r3, [r3, #8] - 800ee4e: f403 2360 and.w r3, r3, #917504 @ 0xe0000 - 800ee52: f5b3 2f60 cmp.w r3, #917504 @ 0xe0000 - 800ee56: d115 bne.n 800ee84 - (hadc->Init.ContinuousConvMode == DISABLE) ) - 800ee58: 687b ldr r3, [r7, #4] - 800ee5a: 7b1b ldrb r3, [r3, #12] - if(ADC_IS_SOFTWARE_START_REGULAR(hadc) && - 800ee5c: 2b00 cmp r3, #0 - 800ee5e: d111 bne.n 800ee84 - { - /* Set ADC state */ - CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY); - 800ee60: 687b ldr r3, [r7, #4] - 800ee62: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ee64: f423 7280 bic.w r2, r3, #256 @ 0x100 - 800ee68: 687b ldr r3, [r7, #4] - 800ee6a: 629a str r2, [r3, #40] @ 0x28 - - if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) - 800ee6c: 687b ldr r3, [r7, #4] - 800ee6e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ee70: f403 5380 and.w r3, r3, #4096 @ 0x1000 - 800ee74: 2b00 cmp r3, #0 - 800ee76: d105 bne.n 800ee84 - { - SET_BIT(hadc->State, HAL_ADC_STATE_READY); - 800ee78: 687b ldr r3, [r7, #4] - 800ee7a: 6a9b ldr r3, [r3, #40] @ 0x28 - 800ee7c: f043 0201 orr.w r2, r3, #1 - 800ee80: 687b ldr r3, [r7, #4] - 800ee82: 629a str r2, [r3, #40] @ 0x28 - } - } - - /* Return ADC state */ - return HAL_OK; - 800ee84: 2300 movs r3, #0 -} - 800ee86: 4618 mov r0, r3 - 800ee88: 371c adds r7, #28 - 800ee8a: 46bd mov sp, r7 - 800ee8c: bd90 pop {r4, r7, pc} - 800ee8e: bf00 nop - 800ee90: 20000078 .word 0x20000078 - 800ee94: 24924924 .word 0x24924924 - 800ee98: 00924924 .word 0x00924924 - 800ee9c: 12492492 .word 0x12492492 - 800eea0: 00492492 .word 0x00492492 - 800eea4: 00249249 .word 0x00249249 - -0800eea8 : - * or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS). - * @param hadc: ADC handle - * @retval ADC group regular conversion data - */ -uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) -{ - 800eea8: b480 push {r7} - 800eeaa: b083 sub sp, #12 - 800eeac: af00 add r7, sp, #0 - 800eeae: 6078 str r0, [r7, #4] - - /* Note: EOC flag is not cleared here by software because automatically */ - /* cleared by hardware when reading register DR. */ - - /* Return ADC converted value */ - return hadc->Instance->DR; - 800eeb0: 687b ldr r3, [r7, #4] - 800eeb2: 681b ldr r3, [r3, #0] - 800eeb4: 6cdb ldr r3, [r3, #76] @ 0x4c -} - 800eeb6: 4618 mov r0, r3 - 800eeb8: 370c adds r7, #12 - 800eeba: 46bd mov sp, r7 - 800eebc: bc80 pop {r7} - 800eebe: 4770 bx lr - -0800eec0 : - * @param hadc: ADC handle - * @param sConfig: Structure of ADC channel for regular group. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc, ADC_ChannelConfTypeDef* sConfig) -{ - 800eec0: b480 push {r7} - 800eec2: b085 sub sp, #20 - 800eec4: af00 add r7, sp, #0 - 800eec6: 6078 str r0, [r7, #4] - 800eec8: 6039 str r1, [r7, #0] - HAL_StatusTypeDef tmp_hal_status = HAL_OK; - 800eeca: 2300 movs r3, #0 - 800eecc: 73fb strb r3, [r7, #15] - __IO uint32_t wait_loop_index = 0U; - 800eece: 2300 movs r3, #0 - 800eed0: 60bb str r3, [r7, #8] - assert_param(IS_ADC_CHANNEL(sConfig->Channel)); - assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank)); - assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime)); - - /* Process locked */ - __HAL_LOCK(hadc); - 800eed2: 687b ldr r3, [r7, #4] - 800eed4: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 - 800eed8: 2b01 cmp r3, #1 - 800eeda: d101 bne.n 800eee0 - 800eedc: 2302 movs r3, #2 - 800eede: e0dc b.n 800f09a - 800eee0: 687b ldr r3, [r7, #4] - 800eee2: 2201 movs r2, #1 - 800eee4: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - - /* Regular sequence configuration */ - /* For Rank 1 to 6 */ - if (sConfig->Rank < 7U) - 800eee8: 683b ldr r3, [r7, #0] - 800eeea: 685b ldr r3, [r3, #4] - 800eeec: 2b06 cmp r3, #6 - 800eeee: d81c bhi.n 800ef2a - { - MODIFY_REG(hadc->Instance->SQR3 , - 800eef0: 687b ldr r3, [r7, #4] - 800eef2: 681b ldr r3, [r3, #0] - 800eef4: 6b59 ldr r1, [r3, #52] @ 0x34 - 800eef6: 683b ldr r3, [r7, #0] - 800eef8: 685a ldr r2, [r3, #4] - 800eefa: 4613 mov r3, r2 - 800eefc: 009b lsls r3, r3, #2 - 800eefe: 4413 add r3, r2 - 800ef00: 3b05 subs r3, #5 - 800ef02: 221f movs r2, #31 - 800ef04: fa02 f303 lsl.w r3, r2, r3 - 800ef08: 43db mvns r3, r3 - 800ef0a: 4019 ands r1, r3 - 800ef0c: 683b ldr r3, [r7, #0] - 800ef0e: 6818 ldr r0, [r3, #0] - 800ef10: 683b ldr r3, [r7, #0] - 800ef12: 685a ldr r2, [r3, #4] - 800ef14: 4613 mov r3, r2 - 800ef16: 009b lsls r3, r3, #2 - 800ef18: 4413 add r3, r2 - 800ef1a: 3b05 subs r3, #5 - 800ef1c: fa00 f203 lsl.w r2, r0, r3 - 800ef20: 687b ldr r3, [r7, #4] - 800ef22: 681b ldr r3, [r3, #0] - 800ef24: 430a orrs r2, r1 - 800ef26: 635a str r2, [r3, #52] @ 0x34 - 800ef28: e03c b.n 800efa4 - ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank) , - ADC_SQR3_RK(sConfig->Channel, sConfig->Rank) ); - } - /* For Rank 7 to 12 */ - else if (sConfig->Rank < 13U) - 800ef2a: 683b ldr r3, [r7, #0] - 800ef2c: 685b ldr r3, [r3, #4] - 800ef2e: 2b0c cmp r3, #12 - 800ef30: d81c bhi.n 800ef6c - { - MODIFY_REG(hadc->Instance->SQR2 , - 800ef32: 687b ldr r3, [r7, #4] - 800ef34: 681b ldr r3, [r3, #0] - 800ef36: 6b19 ldr r1, [r3, #48] @ 0x30 - 800ef38: 683b ldr r3, [r7, #0] - 800ef3a: 685a ldr r2, [r3, #4] - 800ef3c: 4613 mov r3, r2 - 800ef3e: 009b lsls r3, r3, #2 - 800ef40: 4413 add r3, r2 - 800ef42: 3b23 subs r3, #35 @ 0x23 - 800ef44: 221f movs r2, #31 - 800ef46: fa02 f303 lsl.w r3, r2, r3 - 800ef4a: 43db mvns r3, r3 - 800ef4c: 4019 ands r1, r3 - 800ef4e: 683b ldr r3, [r7, #0] - 800ef50: 6818 ldr r0, [r3, #0] - 800ef52: 683b ldr r3, [r7, #0] - 800ef54: 685a ldr r2, [r3, #4] - 800ef56: 4613 mov r3, r2 - 800ef58: 009b lsls r3, r3, #2 - 800ef5a: 4413 add r3, r2 - 800ef5c: 3b23 subs r3, #35 @ 0x23 - 800ef5e: fa00 f203 lsl.w r2, r0, r3 - 800ef62: 687b ldr r3, [r7, #4] - 800ef64: 681b ldr r3, [r3, #0] - 800ef66: 430a orrs r2, r1 - 800ef68: 631a str r2, [r3, #48] @ 0x30 - 800ef6a: e01b b.n 800efa4 - ADC_SQR2_RK(sConfig->Channel, sConfig->Rank) ); - } - /* For Rank 13 to 16 */ - else - { - MODIFY_REG(hadc->Instance->SQR1 , - 800ef6c: 687b ldr r3, [r7, #4] - 800ef6e: 681b ldr r3, [r3, #0] - 800ef70: 6ad9 ldr r1, [r3, #44] @ 0x2c - 800ef72: 683b ldr r3, [r7, #0] - 800ef74: 685a ldr r2, [r3, #4] - 800ef76: 4613 mov r3, r2 - 800ef78: 009b lsls r3, r3, #2 - 800ef7a: 4413 add r3, r2 - 800ef7c: 3b41 subs r3, #65 @ 0x41 - 800ef7e: 221f movs r2, #31 - 800ef80: fa02 f303 lsl.w r3, r2, r3 - 800ef84: 43db mvns r3, r3 - 800ef86: 4019 ands r1, r3 - 800ef88: 683b ldr r3, [r7, #0] - 800ef8a: 6818 ldr r0, [r3, #0] - 800ef8c: 683b ldr r3, [r7, #0] - 800ef8e: 685a ldr r2, [r3, #4] - 800ef90: 4613 mov r3, r2 - 800ef92: 009b lsls r3, r3, #2 - 800ef94: 4413 add r3, r2 - 800ef96: 3b41 subs r3, #65 @ 0x41 - 800ef98: fa00 f203 lsl.w r2, r0, r3 - 800ef9c: 687b ldr r3, [r7, #4] - 800ef9e: 681b ldr r3, [r3, #0] - 800efa0: 430a orrs r2, r1 - 800efa2: 62da str r2, [r3, #44] @ 0x2c - } - - - /* Channel sampling time configuration */ - /* For channels 10 to 17 */ - if (sConfig->Channel >= ADC_CHANNEL_10) - 800efa4: 683b ldr r3, [r7, #0] - 800efa6: 681b ldr r3, [r3, #0] - 800efa8: 2b09 cmp r3, #9 - 800efaa: d91c bls.n 800efe6 - { - MODIFY_REG(hadc->Instance->SMPR1 , - 800efac: 687b ldr r3, [r7, #4] - 800efae: 681b ldr r3, [r3, #0] - 800efb0: 68d9 ldr r1, [r3, #12] - 800efb2: 683b ldr r3, [r7, #0] - 800efb4: 681a ldr r2, [r3, #0] - 800efb6: 4613 mov r3, r2 - 800efb8: 005b lsls r3, r3, #1 - 800efba: 4413 add r3, r2 - 800efbc: 3b1e subs r3, #30 - 800efbe: 2207 movs r2, #7 - 800efc0: fa02 f303 lsl.w r3, r2, r3 - 800efc4: 43db mvns r3, r3 - 800efc6: 4019 ands r1, r3 - 800efc8: 683b ldr r3, [r7, #0] - 800efca: 6898 ldr r0, [r3, #8] - 800efcc: 683b ldr r3, [r7, #0] - 800efce: 681a ldr r2, [r3, #0] - 800efd0: 4613 mov r3, r2 - 800efd2: 005b lsls r3, r3, #1 - 800efd4: 4413 add r3, r2 - 800efd6: 3b1e subs r3, #30 - 800efd8: fa00 f203 lsl.w r2, r0, r3 - 800efdc: 687b ldr r3, [r7, #4] - 800efde: 681b ldr r3, [r3, #0] - 800efe0: 430a orrs r2, r1 - 800efe2: 60da str r2, [r3, #12] - 800efe4: e019 b.n 800f01a - ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel) , - ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel) ); - } - else /* For channels 0 to 9 */ - { - MODIFY_REG(hadc->Instance->SMPR2 , - 800efe6: 687b ldr r3, [r7, #4] - 800efe8: 681b ldr r3, [r3, #0] - 800efea: 6919 ldr r1, [r3, #16] - 800efec: 683b ldr r3, [r7, #0] - 800efee: 681a ldr r2, [r3, #0] - 800eff0: 4613 mov r3, r2 - 800eff2: 005b lsls r3, r3, #1 - 800eff4: 4413 add r3, r2 - 800eff6: 2207 movs r2, #7 - 800eff8: fa02 f303 lsl.w r3, r2, r3 - 800effc: 43db mvns r3, r3 - 800effe: 4019 ands r1, r3 - 800f000: 683b ldr r3, [r7, #0] - 800f002: 6898 ldr r0, [r3, #8] - 800f004: 683b ldr r3, [r7, #0] - 800f006: 681a ldr r2, [r3, #0] - 800f008: 4613 mov r3, r2 - 800f00a: 005b lsls r3, r3, #1 - 800f00c: 4413 add r3, r2 - 800f00e: fa00 f203 lsl.w r2, r0, r3 - 800f012: 687b ldr r3, [r7, #4] - 800f014: 681b ldr r3, [r3, #0] - 800f016: 430a orrs r2, r1 - 800f018: 611a str r2, [r3, #16] - ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel) ); - } - - /* If ADC1 Channel_16 or Channel_17 is selected, enable Temperature sensor */ - /* and VREFINT measurement path. */ - if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || - 800f01a: 683b ldr r3, [r7, #0] - 800f01c: 681b ldr r3, [r3, #0] - 800f01e: 2b10 cmp r3, #16 - 800f020: d003 beq.n 800f02a - (sConfig->Channel == ADC_CHANNEL_VREFINT) ) - 800f022: 683b ldr r3, [r7, #0] - 800f024: 681b ldr r3, [r3, #0] - if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || - 800f026: 2b11 cmp r3, #17 - 800f028: d132 bne.n 800f090 - { - /* For STM32F1 devices with several ADC: Only ADC1 can access internal */ - /* measurement channels (VrefInt/TempSensor). If these channels are */ - /* intended to be set on other ADC instances, an error is reported. */ - if (hadc->Instance == ADC1) - 800f02a: 687b ldr r3, [r7, #4] - 800f02c: 681b ldr r3, [r3, #0] - 800f02e: 4a1d ldr r2, [pc, #116] @ (800f0a4 ) - 800f030: 4293 cmp r3, r2 - 800f032: d125 bne.n 800f080 - { - if (READ_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE) == RESET) - 800f034: 687b ldr r3, [r7, #4] - 800f036: 681b ldr r3, [r3, #0] - 800f038: 689b ldr r3, [r3, #8] - 800f03a: f403 0300 and.w r3, r3, #8388608 @ 0x800000 - 800f03e: 2b00 cmp r3, #0 - 800f040: d126 bne.n 800f090 - { - SET_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE); - 800f042: 687b ldr r3, [r7, #4] - 800f044: 681b ldr r3, [r3, #0] - 800f046: 689a ldr r2, [r3, #8] - 800f048: 687b ldr r3, [r7, #4] - 800f04a: 681b ldr r3, [r3, #0] - 800f04c: f442 0200 orr.w r2, r2, #8388608 @ 0x800000 - 800f050: 609a str r2, [r3, #8] - - if (sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) - 800f052: 683b ldr r3, [r7, #0] - 800f054: 681b ldr r3, [r3, #0] - 800f056: 2b10 cmp r3, #16 - 800f058: d11a bne.n 800f090 - { - /* Delay for temperature sensor stabilization time */ - /* Compute number of CPU cycles to wait for */ - wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U)); - 800f05a: 4b13 ldr r3, [pc, #76] @ (800f0a8 ) - 800f05c: 681b ldr r3, [r3, #0] - 800f05e: 4a13 ldr r2, [pc, #76] @ (800f0ac ) - 800f060: fba2 2303 umull r2, r3, r2, r3 - 800f064: 0c9a lsrs r2, r3, #18 - 800f066: 4613 mov r3, r2 - 800f068: 009b lsls r3, r3, #2 - 800f06a: 4413 add r3, r2 - 800f06c: 005b lsls r3, r3, #1 - 800f06e: 60bb str r3, [r7, #8] - while(wait_loop_index != 0U) - 800f070: e002 b.n 800f078 - { - wait_loop_index--; - 800f072: 68bb ldr r3, [r7, #8] - 800f074: 3b01 subs r3, #1 - 800f076: 60bb str r3, [r7, #8] - while(wait_loop_index != 0U) - 800f078: 68bb ldr r3, [r7, #8] - 800f07a: 2b00 cmp r3, #0 - 800f07c: d1f9 bne.n 800f072 - 800f07e: e007 b.n 800f090 - } - } - else - { - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG); - 800f080: 687b ldr r3, [r7, #4] - 800f082: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f084: f043 0220 orr.w r2, r3, #32 - 800f088: 687b ldr r3, [r7, #4] - 800f08a: 629a str r2, [r3, #40] @ 0x28 - - tmp_hal_status = HAL_ERROR; - 800f08c: 2301 movs r3, #1 - 800f08e: 73fb strb r3, [r7, #15] - } - } - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800f090: 687b ldr r3, [r7, #4] - 800f092: 2200 movs r2, #0 - 800f094: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Return function status */ - return tmp_hal_status; - 800f098: 7bfb ldrb r3, [r7, #15] -} - 800f09a: 4618 mov r0, r3 - 800f09c: 3714 adds r7, #20 - 800f09e: 46bd mov sp, r7 - 800f0a0: bc80 pop {r7} - 800f0a2: 4770 bx lr - 800f0a4: 40012400 .word 0x40012400 - 800f0a8: 20000078 .word 0x20000078 - 800f0ac: 431bde83 .word 0x431bde83 - -0800f0b0 : - * and voltage regulator must be enabled (done into HAL_ADC_Init()). - * @param hadc: ADC handle - * @retval HAL status. - */ -HAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef* hadc) -{ - 800f0b0: b580 push {r7, lr} - 800f0b2: b084 sub sp, #16 - 800f0b4: af00 add r7, sp, #0 - 800f0b6: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 800f0b8: 2300 movs r3, #0 - 800f0ba: 60fb str r3, [r7, #12] - __IO uint32_t wait_loop_index = 0U; - 800f0bc: 2300 movs r3, #0 - 800f0be: 60bb str r3, [r7, #8] - - /* ADC enable and wait for ADC ready (in case of ADC is disabled or */ - /* enabling phase not yet completed: flag ADC ready not yet set). */ - /* Timeout implemented to not be stuck if ADC cannot be enabled (possible */ - /* causes: ADC clock not running, ...). */ - if (ADC_IS_ENABLE(hadc) == RESET) - 800f0c0: 687b ldr r3, [r7, #4] - 800f0c2: 681b ldr r3, [r3, #0] - 800f0c4: 689b ldr r3, [r3, #8] - 800f0c6: f003 0301 and.w r3, r3, #1 - 800f0ca: 2b01 cmp r3, #1 - 800f0cc: d040 beq.n 800f150 - { - /* Enable the Peripheral */ - __HAL_ADC_ENABLE(hadc); - 800f0ce: 687b ldr r3, [r7, #4] - 800f0d0: 681b ldr r3, [r3, #0] - 800f0d2: 689a ldr r2, [r3, #8] - 800f0d4: 687b ldr r3, [r7, #4] - 800f0d6: 681b ldr r3, [r3, #0] - 800f0d8: f042 0201 orr.w r2, r2, #1 - 800f0dc: 609a str r2, [r3, #8] - - /* Delay for ADC stabilization time */ - /* Compute number of CPU cycles to wait for */ - wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U)); - 800f0de: 4b1f ldr r3, [pc, #124] @ (800f15c ) - 800f0e0: 681b ldr r3, [r3, #0] - 800f0e2: 4a1f ldr r2, [pc, #124] @ (800f160 ) - 800f0e4: fba2 2303 umull r2, r3, r2, r3 - 800f0e8: 0c9b lsrs r3, r3, #18 - 800f0ea: 60bb str r3, [r7, #8] - while(wait_loop_index != 0U) - 800f0ec: e002 b.n 800f0f4 - { - wait_loop_index--; - 800f0ee: 68bb ldr r3, [r7, #8] - 800f0f0: 3b01 subs r3, #1 - 800f0f2: 60bb str r3, [r7, #8] - while(wait_loop_index != 0U) - 800f0f4: 68bb ldr r3, [r7, #8] - 800f0f6: 2b00 cmp r3, #0 - 800f0f8: d1f9 bne.n 800f0ee - } - - /* Get tick count */ - tickstart = HAL_GetTick(); - 800f0fa: f7ff fbef bl 800e8dc - 800f0fe: 60f8 str r0, [r7, #12] - - /* Wait for ADC effectively enabled */ - while(ADC_IS_ENABLE(hadc) == RESET) - 800f100: e01f b.n 800f142 - { - if((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) - 800f102: f7ff fbeb bl 800e8dc - 800f106: 4602 mov r2, r0 - 800f108: 68fb ldr r3, [r7, #12] - 800f10a: 1ad3 subs r3, r2, r3 - 800f10c: 2b02 cmp r3, #2 - 800f10e: d918 bls.n 800f142 - { - /* New check to avoid false timeout detection in case of preemption */ - if(ADC_IS_ENABLE(hadc) == RESET) - 800f110: 687b ldr r3, [r7, #4] - 800f112: 681b ldr r3, [r3, #0] - 800f114: 689b ldr r3, [r3, #8] - 800f116: f003 0301 and.w r3, r3, #1 - 800f11a: 2b01 cmp r3, #1 - 800f11c: d011 beq.n 800f142 - { - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); - 800f11e: 687b ldr r3, [r7, #4] - 800f120: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f122: f043 0210 orr.w r2, r3, #16 - 800f126: 687b ldr r3, [r7, #4] - 800f128: 629a str r2, [r3, #40] @ 0x28 - - /* Set ADC error code to ADC IP internal error */ - SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); - 800f12a: 687b ldr r3, [r7, #4] - 800f12c: 6adb ldr r3, [r3, #44] @ 0x2c - 800f12e: f043 0201 orr.w r2, r3, #1 - 800f132: 687b ldr r3, [r7, #4] - 800f134: 62da str r2, [r3, #44] @ 0x2c - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800f136: 687b ldr r3, [r7, #4] - 800f138: 2200 movs r2, #0 - 800f13a: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f13e: 2301 movs r3, #1 - 800f140: e007 b.n 800f152 - while(ADC_IS_ENABLE(hadc) == RESET) - 800f142: 687b ldr r3, [r7, #4] - 800f144: 681b ldr r3, [r3, #0] - 800f146: 689b ldr r3, [r3, #8] - 800f148: f003 0301 and.w r3, r3, #1 - 800f14c: 2b01 cmp r3, #1 - 800f14e: d1d8 bne.n 800f102 - } - } - } - - /* Return HAL status */ - return HAL_OK; - 800f150: 2300 movs r3, #0 -} - 800f152: 4618 mov r0, r3 - 800f154: 3710 adds r7, #16 - 800f156: 46bd mov sp, r7 - 800f158: bd80 pop {r7, pc} - 800f15a: bf00 nop - 800f15c: 20000078 .word 0x20000078 - 800f160: 431bde83 .word 0x431bde83 - -0800f164 : - * stopped to disable the ADC. - * @param hadc: ADC handle - * @retval HAL status. - */ -HAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef* hadc) -{ - 800f164: b580 push {r7, lr} - 800f166: b084 sub sp, #16 - 800f168: af00 add r7, sp, #0 - 800f16a: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 800f16c: 2300 movs r3, #0 - 800f16e: 60fb str r3, [r7, #12] - - /* Verification if ADC is not already disabled */ - if (ADC_IS_ENABLE(hadc) != RESET) - 800f170: 687b ldr r3, [r7, #4] - 800f172: 681b ldr r3, [r3, #0] - 800f174: 689b ldr r3, [r3, #8] - 800f176: f003 0301 and.w r3, r3, #1 - 800f17a: 2b01 cmp r3, #1 - 800f17c: d12e bne.n 800f1dc - { - /* Disable the ADC peripheral */ - __HAL_ADC_DISABLE(hadc); - 800f17e: 687b ldr r3, [r7, #4] - 800f180: 681b ldr r3, [r3, #0] - 800f182: 689a ldr r2, [r3, #8] - 800f184: 687b ldr r3, [r7, #4] - 800f186: 681b ldr r3, [r3, #0] - 800f188: f022 0201 bic.w r2, r2, #1 - 800f18c: 609a str r2, [r3, #8] - - /* Get tick count */ - tickstart = HAL_GetTick(); - 800f18e: f7ff fba5 bl 800e8dc - 800f192: 60f8 str r0, [r7, #12] - - /* Wait for ADC effectively disabled */ - while(ADC_IS_ENABLE(hadc) != RESET) - 800f194: e01b b.n 800f1ce - { - if((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT) - 800f196: f7ff fba1 bl 800e8dc - 800f19a: 4602 mov r2, r0 - 800f19c: 68fb ldr r3, [r7, #12] - 800f19e: 1ad3 subs r3, r2, r3 - 800f1a0: 2b02 cmp r3, #2 - 800f1a2: d914 bls.n 800f1ce - { - /* New check to avoid false timeout detection in case of preemption */ - if(ADC_IS_ENABLE(hadc) != RESET) - 800f1a4: 687b ldr r3, [r7, #4] - 800f1a6: 681b ldr r3, [r3, #0] - 800f1a8: 689b ldr r3, [r3, #8] - 800f1aa: f003 0301 and.w r3, r3, #1 - 800f1ae: 2b01 cmp r3, #1 - 800f1b0: d10d bne.n 800f1ce - { - /* Update ADC state machine to error */ - SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL); - 800f1b2: 687b ldr r3, [r7, #4] - 800f1b4: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f1b6: f043 0210 orr.w r2, r3, #16 - 800f1ba: 687b ldr r3, [r7, #4] - 800f1bc: 629a str r2, [r3, #40] @ 0x28 - - /* Set ADC error code to ADC IP internal error */ - SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL); - 800f1be: 687b ldr r3, [r7, #4] - 800f1c0: 6adb ldr r3, [r3, #44] @ 0x2c - 800f1c2: f043 0201 orr.w r2, r3, #1 - 800f1c6: 687b ldr r3, [r7, #4] - 800f1c8: 62da str r2, [r3, #44] @ 0x2c - - return HAL_ERROR; - 800f1ca: 2301 movs r3, #1 - 800f1cc: e007 b.n 800f1de - while(ADC_IS_ENABLE(hadc) != RESET) - 800f1ce: 687b ldr r3, [r7, #4] - 800f1d0: 681b ldr r3, [r3, #0] - 800f1d2: 689b ldr r3, [r3, #8] - 800f1d4: f003 0301 and.w r3, r3, #1 - 800f1d8: 2b01 cmp r3, #1 - 800f1da: d0dc beq.n 800f196 - } - } - } - - /* Return HAL status */ - return HAL_OK; - 800f1dc: 2300 movs r3, #0 -} - 800f1de: 4618 mov r0, r3 - 800f1e0: 3710 adds r7, #16 - 800f1e2: 46bd mov sp, r7 - 800f1e4: bd80 pop {r7, pc} - ... - -0800f1e8 : - * the completion of this function. - * @param hadc: ADC handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc) -{ - 800f1e8: b590 push {r4, r7, lr} - 800f1ea: b087 sub sp, #28 - 800f1ec: af00 add r7, sp, #0 - 800f1ee: 6078 str r0, [r7, #4] - HAL_StatusTypeDef tmp_hal_status = HAL_OK; - 800f1f0: 2300 movs r3, #0 - 800f1f2: 75fb strb r3, [r7, #23] - uint32_t tickstart; - __IO uint32_t wait_loop_index = 0U; - 800f1f4: 2300 movs r3, #0 - 800f1f6: 60fb str r3, [r7, #12] - - /* Check the parameters */ - assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance)); - - /* Process locked */ - __HAL_LOCK(hadc); - 800f1f8: 687b ldr r3, [r7, #4] - 800f1fa: f893 3024 ldrb.w r3, [r3, #36] @ 0x24 - 800f1fe: 2b01 cmp r3, #1 - 800f200: d101 bne.n 800f206 - 800f202: 2302 movs r3, #2 - 800f204: e097 b.n 800f336 - 800f206: 687b ldr r3, [r7, #4] - 800f208: 2201 movs r2, #1 - 800f20a: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* 1. Disable ADC peripheral */ - tmp_hal_status = ADC_ConversionStop_Disable(hadc); - 800f20e: 6878 ldr r0, [r7, #4] - 800f210: f7ff ffa8 bl 800f164 - 800f214: 4603 mov r3, r0 - 800f216: 75fb strb r3, [r7, #23] - - /* 2. Calibration prerequisite delay before starting the calibration. */ - /* - ADC must be enabled for at least two ADC clock cycles */ - tmp_hal_status = ADC_Enable(hadc); - 800f218: 6878 ldr r0, [r7, #4] - 800f21a: f7ff ff49 bl 800f0b0 - 800f21e: 4603 mov r3, r0 - 800f220: 75fb strb r3, [r7, #23] - - /* Check if ADC is effectively enabled */ - if (tmp_hal_status == HAL_OK) - 800f222: 7dfb ldrb r3, [r7, #23] - 800f224: 2b00 cmp r3, #0 - 800f226: f040 8081 bne.w 800f32c - { - /* Set ADC state */ - ADC_STATE_CLR_SET(hadc->State, - 800f22a: 687b ldr r3, [r7, #4] - 800f22c: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f22e: f423 5388 bic.w r3, r3, #4352 @ 0x1100 - 800f232: f023 0302 bic.w r3, r3, #2 - 800f236: f043 0202 orr.w r2, r3, #2 - 800f23a: 687b ldr r3, [r7, #4] - 800f23c: 629a str r2, [r3, #40] @ 0x28 - - /* Hardware prerequisite: delay before starting the calibration. */ - /* - Computation of CPU clock cycles corresponding to ADC clock cycles. */ - /* - Wait for the expected ADC clock cycles delay */ - wait_loop_index = ((SystemCoreClock - / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) - 800f23e: 4b40 ldr r3, [pc, #256] @ (800f340 ) - 800f240: 681c ldr r4, [r3, #0] - 800f242: 2002 movs r0, #2 - 800f244: f002 fa84 bl 8011750 - 800f248: 4603 mov r3, r0 - 800f24a: fbb4 f3f3 udiv r3, r4, r3 - * ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES ); - 800f24e: 005b lsls r3, r3, #1 - wait_loop_index = ((SystemCoreClock - 800f250: 60fb str r3, [r7, #12] - - while(wait_loop_index != 0U) - 800f252: e002 b.n 800f25a - { - wait_loop_index--; - 800f254: 68fb ldr r3, [r7, #12] - 800f256: 3b01 subs r3, #1 - 800f258: 60fb str r3, [r7, #12] - while(wait_loop_index != 0U) - 800f25a: 68fb ldr r3, [r7, #12] - 800f25c: 2b00 cmp r3, #0 - 800f25e: d1f9 bne.n 800f254 - } - - /* 3. Resets ADC calibration registers */ - SET_BIT(hadc->Instance->CR2, ADC_CR2_RSTCAL); - 800f260: 687b ldr r3, [r7, #4] - 800f262: 681b ldr r3, [r3, #0] - 800f264: 689a ldr r2, [r3, #8] - 800f266: 687b ldr r3, [r7, #4] - 800f268: 681b ldr r3, [r3, #0] - 800f26a: f042 0208 orr.w r2, r2, #8 - 800f26e: 609a str r2, [r3, #8] - - tickstart = HAL_GetTick(); - 800f270: f7ff fb34 bl 800e8dc - 800f274: 6138 str r0, [r7, #16] - - /* Wait for calibration reset completion */ - while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) - 800f276: e01b b.n 800f2b0 - { - if((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) - 800f278: f7ff fb30 bl 800e8dc - 800f27c: 4602 mov r2, r0 - 800f27e: 693b ldr r3, [r7, #16] - 800f280: 1ad3 subs r3, r2, r3 - 800f282: 2b0a cmp r3, #10 - 800f284: d914 bls.n 800f2b0 - { - /* New check to avoid false timeout detection in case of preemption */ - if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) - 800f286: 687b ldr r3, [r7, #4] - 800f288: 681b ldr r3, [r3, #0] - 800f28a: 689b ldr r3, [r3, #8] - 800f28c: f003 0308 and.w r3, r3, #8 - 800f290: 2b00 cmp r3, #0 - 800f292: d00d beq.n 800f2b0 - { - /* Update ADC state machine to error */ - ADC_STATE_CLR_SET(hadc->State, - 800f294: 687b ldr r3, [r7, #4] - 800f296: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f298: f023 0312 bic.w r3, r3, #18 - 800f29c: f043 0210 orr.w r2, r3, #16 - 800f2a0: 687b ldr r3, [r7, #4] - 800f2a2: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_BUSY_INTERNAL, - HAL_ADC_STATE_ERROR_INTERNAL); - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800f2a4: 687b ldr r3, [r7, #4] - 800f2a6: 2200 movs r2, #0 - 800f2a8: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f2ac: 2301 movs r3, #1 - 800f2ae: e042 b.n 800f336 - while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) - 800f2b0: 687b ldr r3, [r7, #4] - 800f2b2: 681b ldr r3, [r3, #0] - 800f2b4: 689b ldr r3, [r3, #8] - 800f2b6: f003 0308 and.w r3, r3, #8 - 800f2ba: 2b00 cmp r3, #0 - 800f2bc: d1dc bne.n 800f278 - } - } - } - - /* 4. Start ADC calibration */ - SET_BIT(hadc->Instance->CR2, ADC_CR2_CAL); - 800f2be: 687b ldr r3, [r7, #4] - 800f2c0: 681b ldr r3, [r3, #0] - 800f2c2: 689a ldr r2, [r3, #8] - 800f2c4: 687b ldr r3, [r7, #4] - 800f2c6: 681b ldr r3, [r3, #0] - 800f2c8: f042 0204 orr.w r2, r2, #4 - 800f2cc: 609a str r2, [r3, #8] - - tickstart = HAL_GetTick(); - 800f2ce: f7ff fb05 bl 800e8dc - 800f2d2: 6138 str r0, [r7, #16] - - /* Wait for calibration completion */ - while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) - 800f2d4: e01b b.n 800f30e - { - if((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) - 800f2d6: f7ff fb01 bl 800e8dc - 800f2da: 4602 mov r2, r0 - 800f2dc: 693b ldr r3, [r7, #16] - 800f2de: 1ad3 subs r3, r2, r3 - 800f2e0: 2b0a cmp r3, #10 - 800f2e2: d914 bls.n 800f30e - { - /* New check to avoid false timeout detection in case of preemption */ - if(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) - 800f2e4: 687b ldr r3, [r7, #4] - 800f2e6: 681b ldr r3, [r3, #0] - 800f2e8: 689b ldr r3, [r3, #8] - 800f2ea: f003 0304 and.w r3, r3, #4 - 800f2ee: 2b00 cmp r3, #0 - 800f2f0: d00d beq.n 800f30e - { - /* Update ADC state machine to error */ - ADC_STATE_CLR_SET(hadc->State, - 800f2f2: 687b ldr r3, [r7, #4] - 800f2f4: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f2f6: f023 0312 bic.w r3, r3, #18 - 800f2fa: f043 0210 orr.w r2, r3, #16 - 800f2fe: 687b ldr r3, [r7, #4] - 800f300: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_BUSY_INTERNAL, - HAL_ADC_STATE_ERROR_INTERNAL); - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800f302: 687b ldr r3, [r7, #4] - 800f304: 2200 movs r2, #0 - 800f306: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f30a: 2301 movs r3, #1 - 800f30c: e013 b.n 800f336 - while(HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) - 800f30e: 687b ldr r3, [r7, #4] - 800f310: 681b ldr r3, [r3, #0] - 800f312: 689b ldr r3, [r3, #8] - 800f314: f003 0304 and.w r3, r3, #4 - 800f318: 2b00 cmp r3, #0 - 800f31a: d1dc bne.n 800f2d6 - } - } - } - - /* Set ADC state */ - ADC_STATE_CLR_SET(hadc->State, - 800f31c: 687b ldr r3, [r7, #4] - 800f31e: 6a9b ldr r3, [r3, #40] @ 0x28 - 800f320: f023 0303 bic.w r3, r3, #3 - 800f324: f043 0201 orr.w r2, r3, #1 - 800f328: 687b ldr r3, [r7, #4] - 800f32a: 629a str r2, [r3, #40] @ 0x28 - HAL_ADC_STATE_BUSY_INTERNAL, - HAL_ADC_STATE_READY); - } - - /* Process unlocked */ - __HAL_UNLOCK(hadc); - 800f32c: 687b ldr r3, [r7, #4] - 800f32e: 2200 movs r2, #0 - 800f330: f883 2024 strb.w r2, [r3, #36] @ 0x24 - - /* Return function status */ - return tmp_hal_status; - 800f334: 7dfb ldrb r3, [r7, #23] -} - 800f336: 4618 mov r0, r3 - 800f338: 371c adds r7, #28 - 800f33a: 46bd mov sp, r7 - 800f33c: bd90 pop {r4, r7, pc} - 800f33e: bf00 nop - 800f340: 20000078 .word 0x20000078 - -0800f344 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan) -{ - 800f344: b580 push {r7, lr} - 800f346: b084 sub sp, #16 - 800f348: af00 add r7, sp, #0 - 800f34a: 6078 str r0, [r7, #4] - uint32_t tickstart; - - /* Check CAN handle */ - if (hcan == NULL) - 800f34c: 687b ldr r3, [r7, #4] - 800f34e: 2b00 cmp r3, #0 - 800f350: d101 bne.n 800f356 - { - return HAL_ERROR; - 800f352: 2301 movs r3, #1 - 800f354: e0ed b.n 800f532 - /* Init the low level hardware: CLOCK, NVIC */ - hcan->MspInitCallback(hcan); - } - -#else - if (hcan->State == HAL_CAN_STATE_RESET) - 800f356: 687b ldr r3, [r7, #4] - 800f358: f893 3020 ldrb.w r3, [r3, #32] - 800f35c: b2db uxtb r3, r3 - 800f35e: 2b00 cmp r3, #0 - 800f360: d102 bne.n 800f368 - { - /* Init the low level hardware: CLOCK, NVIC */ - HAL_CAN_MspInit(hcan); - 800f362: 6878 ldr r0, [r7, #4] - 800f364: f7fa fbe8 bl 8009b38 - } -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - - /* Request initialisation */ - SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - 800f368: 687b ldr r3, [r7, #4] - 800f36a: 681b ldr r3, [r3, #0] - 800f36c: 681a ldr r2, [r3, #0] - 800f36e: 687b ldr r3, [r7, #4] - 800f370: 681b ldr r3, [r3, #0] - 800f372: f042 0201 orr.w r2, r2, #1 - 800f376: 601a str r2, [r3, #0] - - /* Get tick */ - tickstart = HAL_GetTick(); - 800f378: f7ff fab0 bl 800e8dc - 800f37c: 60f8 str r0, [r7, #12] - - /* Wait initialisation acknowledge */ - while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) - 800f37e: e012 b.n 800f3a6 - { - if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) - 800f380: f7ff faac bl 800e8dc - 800f384: 4602 mov r2, r0 - 800f386: 68fb ldr r3, [r7, #12] - 800f388: 1ad3 subs r3, r2, r3 - 800f38a: 2b0a cmp r3, #10 - 800f38c: d90b bls.n 800f3a6 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - 800f38e: 687b ldr r3, [r7, #4] - 800f390: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f392: f443 3200 orr.w r2, r3, #131072 @ 0x20000 - 800f396: 687b ldr r3, [r7, #4] - 800f398: 625a str r2, [r3, #36] @ 0x24 - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - 800f39a: 687b ldr r3, [r7, #4] - 800f39c: 2205 movs r2, #5 - 800f39e: f883 2020 strb.w r2, [r3, #32] - - return HAL_ERROR; - 800f3a2: 2301 movs r3, #1 - 800f3a4: e0c5 b.n 800f532 - while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) - 800f3a6: 687b ldr r3, [r7, #4] - 800f3a8: 681b ldr r3, [r3, #0] - 800f3aa: 685b ldr r3, [r3, #4] - 800f3ac: f003 0301 and.w r3, r3, #1 - 800f3b0: 2b00 cmp r3, #0 - 800f3b2: d0e5 beq.n 800f380 - } - } - - /* Exit from sleep mode */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - 800f3b4: 687b ldr r3, [r7, #4] - 800f3b6: 681b ldr r3, [r3, #0] - 800f3b8: 681a ldr r2, [r3, #0] - 800f3ba: 687b ldr r3, [r7, #4] - 800f3bc: 681b ldr r3, [r3, #0] - 800f3be: f022 0202 bic.w r2, r2, #2 - 800f3c2: 601a str r2, [r3, #0] - - /* Get tick */ - tickstart = HAL_GetTick(); - 800f3c4: f7ff fa8a bl 800e8dc - 800f3c8: 60f8 str r0, [r7, #12] - - /* Check Sleep mode leave acknowledge */ - while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) - 800f3ca: e012 b.n 800f3f2 - { - if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) - 800f3cc: f7ff fa86 bl 800e8dc - 800f3d0: 4602 mov r2, r0 - 800f3d2: 68fb ldr r3, [r7, #12] - 800f3d4: 1ad3 subs r3, r2, r3 - 800f3d6: 2b0a cmp r3, #10 - 800f3d8: d90b bls.n 800f3f2 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - 800f3da: 687b ldr r3, [r7, #4] - 800f3dc: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f3de: f443 3200 orr.w r2, r3, #131072 @ 0x20000 - 800f3e2: 687b ldr r3, [r7, #4] - 800f3e4: 625a str r2, [r3, #36] @ 0x24 - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - 800f3e6: 687b ldr r3, [r7, #4] - 800f3e8: 2205 movs r2, #5 - 800f3ea: f883 2020 strb.w r2, [r3, #32] - - return HAL_ERROR; - 800f3ee: 2301 movs r3, #1 - 800f3f0: e09f b.n 800f532 - while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U) - 800f3f2: 687b ldr r3, [r7, #4] - 800f3f4: 681b ldr r3, [r3, #0] - 800f3f6: 685b ldr r3, [r3, #4] - 800f3f8: f003 0302 and.w r3, r3, #2 - 800f3fc: 2b00 cmp r3, #0 - 800f3fe: d1e5 bne.n 800f3cc - } - } - - /* Set the time triggered communication mode */ - if (hcan->Init.TimeTriggeredMode == ENABLE) - 800f400: 687b ldr r3, [r7, #4] - 800f402: 7e1b ldrb r3, [r3, #24] - 800f404: 2b01 cmp r3, #1 - 800f406: d108 bne.n 800f41a - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - 800f408: 687b ldr r3, [r7, #4] - 800f40a: 681b ldr r3, [r3, #0] - 800f40c: 681a ldr r2, [r3, #0] - 800f40e: 687b ldr r3, [r7, #4] - 800f410: 681b ldr r3, [r3, #0] - 800f412: f042 0280 orr.w r2, r2, #128 @ 0x80 - 800f416: 601a str r2, [r3, #0] - 800f418: e007 b.n 800f42a - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TTCM); - 800f41a: 687b ldr r3, [r7, #4] - 800f41c: 681b ldr r3, [r3, #0] - 800f41e: 681a ldr r2, [r3, #0] - 800f420: 687b ldr r3, [r7, #4] - 800f422: 681b ldr r3, [r3, #0] - 800f424: f022 0280 bic.w r2, r2, #128 @ 0x80 - 800f428: 601a str r2, [r3, #0] - } - - /* Set the automatic bus-off management */ - if (hcan->Init.AutoBusOff == ENABLE) - 800f42a: 687b ldr r3, [r7, #4] - 800f42c: 7e5b ldrb r3, [r3, #25] - 800f42e: 2b01 cmp r3, #1 - 800f430: d108 bne.n 800f444 - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - 800f432: 687b ldr r3, [r7, #4] - 800f434: 681b ldr r3, [r3, #0] - 800f436: 681a ldr r2, [r3, #0] - 800f438: 687b ldr r3, [r7, #4] - 800f43a: 681b ldr r3, [r3, #0] - 800f43c: f042 0240 orr.w r2, r2, #64 @ 0x40 - 800f440: 601a str r2, [r3, #0] - 800f442: e007 b.n 800f454 - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_ABOM); - 800f444: 687b ldr r3, [r7, #4] - 800f446: 681b ldr r3, [r3, #0] - 800f448: 681a ldr r2, [r3, #0] - 800f44a: 687b ldr r3, [r7, #4] - 800f44c: 681b ldr r3, [r3, #0] - 800f44e: f022 0240 bic.w r2, r2, #64 @ 0x40 - 800f452: 601a str r2, [r3, #0] - } - - /* Set the automatic wake-up mode */ - if (hcan->Init.AutoWakeUp == ENABLE) - 800f454: 687b ldr r3, [r7, #4] - 800f456: 7e9b ldrb r3, [r3, #26] - 800f458: 2b01 cmp r3, #1 - 800f45a: d108 bne.n 800f46e - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - 800f45c: 687b ldr r3, [r7, #4] - 800f45e: 681b ldr r3, [r3, #0] - 800f460: 681a ldr r2, [r3, #0] - 800f462: 687b ldr r3, [r7, #4] - 800f464: 681b ldr r3, [r3, #0] - 800f466: f042 0220 orr.w r2, r2, #32 - 800f46a: 601a str r2, [r3, #0] - 800f46c: e007 b.n 800f47e - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_AWUM); - 800f46e: 687b ldr r3, [r7, #4] - 800f470: 681b ldr r3, [r3, #0] - 800f472: 681a ldr r2, [r3, #0] - 800f474: 687b ldr r3, [r7, #4] - 800f476: 681b ldr r3, [r3, #0] - 800f478: f022 0220 bic.w r2, r2, #32 - 800f47c: 601a str r2, [r3, #0] - } - - /* Set the automatic retransmission */ - if (hcan->Init.AutoRetransmission == ENABLE) - 800f47e: 687b ldr r3, [r7, #4] - 800f480: 7edb ldrb r3, [r3, #27] - 800f482: 2b01 cmp r3, #1 - 800f484: d108 bne.n 800f498 - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_NART); - 800f486: 687b ldr r3, [r7, #4] - 800f488: 681b ldr r3, [r3, #0] - 800f48a: 681a ldr r2, [r3, #0] - 800f48c: 687b ldr r3, [r7, #4] - 800f48e: 681b ldr r3, [r3, #0] - 800f490: f022 0210 bic.w r2, r2, #16 - 800f494: 601a str r2, [r3, #0] - 800f496: e007 b.n 800f4a8 - } - else - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_NART); - 800f498: 687b ldr r3, [r7, #4] - 800f49a: 681b ldr r3, [r3, #0] - 800f49c: 681a ldr r2, [r3, #0] - 800f49e: 687b ldr r3, [r7, #4] - 800f4a0: 681b ldr r3, [r3, #0] - 800f4a2: f042 0210 orr.w r2, r2, #16 - 800f4a6: 601a str r2, [r3, #0] - } - - /* Set the receive FIFO locked mode */ - if (hcan->Init.ReceiveFifoLocked == ENABLE) - 800f4a8: 687b ldr r3, [r7, #4] - 800f4aa: 7f1b ldrb r3, [r3, #28] - 800f4ac: 2b01 cmp r3, #1 - 800f4ae: d108 bne.n 800f4c2 - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - 800f4b0: 687b ldr r3, [r7, #4] - 800f4b2: 681b ldr r3, [r3, #0] - 800f4b4: 681a ldr r2, [r3, #0] - 800f4b6: 687b ldr r3, [r7, #4] - 800f4b8: 681b ldr r3, [r3, #0] - 800f4ba: f042 0208 orr.w r2, r2, #8 - 800f4be: 601a str r2, [r3, #0] - 800f4c0: e007 b.n 800f4d2 - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_RFLM); - 800f4c2: 687b ldr r3, [r7, #4] - 800f4c4: 681b ldr r3, [r3, #0] - 800f4c6: 681a ldr r2, [r3, #0] - 800f4c8: 687b ldr r3, [r7, #4] - 800f4ca: 681b ldr r3, [r3, #0] - 800f4cc: f022 0208 bic.w r2, r2, #8 - 800f4d0: 601a str r2, [r3, #0] - } - - /* Set the transmit FIFO priority */ - if (hcan->Init.TransmitFifoPriority == ENABLE) - 800f4d2: 687b ldr r3, [r7, #4] - 800f4d4: 7f5b ldrb r3, [r3, #29] - 800f4d6: 2b01 cmp r3, #1 - 800f4d8: d108 bne.n 800f4ec - { - SET_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - 800f4da: 687b ldr r3, [r7, #4] - 800f4dc: 681b ldr r3, [r3, #0] - 800f4de: 681a ldr r2, [r3, #0] - 800f4e0: 687b ldr r3, [r7, #4] - 800f4e2: 681b ldr r3, [r3, #0] - 800f4e4: f042 0204 orr.w r2, r2, #4 - 800f4e8: 601a str r2, [r3, #0] - 800f4ea: e007 b.n 800f4fc - } - else - { - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_TXFP); - 800f4ec: 687b ldr r3, [r7, #4] - 800f4ee: 681b ldr r3, [r3, #0] - 800f4f0: 681a ldr r2, [r3, #0] - 800f4f2: 687b ldr r3, [r7, #4] - 800f4f4: 681b ldr r3, [r3, #0] - 800f4f6: f022 0204 bic.w r2, r2, #4 - 800f4fa: 601a str r2, [r3, #0] - } - - /* Set the bit timing register */ - WRITE_REG(hcan->Instance->BTR, (uint32_t)(hcan->Init.Mode | - 800f4fc: 687b ldr r3, [r7, #4] - 800f4fe: 689a ldr r2, [r3, #8] - 800f500: 687b ldr r3, [r7, #4] - 800f502: 68db ldr r3, [r3, #12] - 800f504: 431a orrs r2, r3 - 800f506: 687b ldr r3, [r7, #4] - 800f508: 691b ldr r3, [r3, #16] - 800f50a: 431a orrs r2, r3 - 800f50c: 687b ldr r3, [r7, #4] - 800f50e: 695b ldr r3, [r3, #20] - 800f510: ea42 0103 orr.w r1, r2, r3 - 800f514: 687b ldr r3, [r7, #4] - 800f516: 685b ldr r3, [r3, #4] - 800f518: 1e5a subs r2, r3, #1 - 800f51a: 687b ldr r3, [r7, #4] - 800f51c: 681b ldr r3, [r3, #0] - 800f51e: 430a orrs r2, r1 - 800f520: 61da str r2, [r3, #28] - hcan->Init.TimeSeg1 | - hcan->Init.TimeSeg2 | - (hcan->Init.Prescaler - 1U))); - - /* Initialize the error code */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - 800f522: 687b ldr r3, [r7, #4] - 800f524: 2200 movs r2, #0 - 800f526: 625a str r2, [r3, #36] @ 0x24 - - /* Initialize the CAN state */ - hcan->State = HAL_CAN_STATE_READY; - 800f528: 687b ldr r3, [r7, #4] - 800f52a: 2201 movs r2, #1 - 800f52c: f883 2020 strb.w r2, [r3, #32] - - /* Return function status */ - return HAL_OK; - 800f530: 2300 movs r3, #0 -} - 800f532: 4618 mov r0, r3 - 800f534: 3710 adds r7, #16 - 800f536: 46bd mov sp, r7 - 800f538: bd80 pop {r7, pc} - ... - -0800f53c : - * @param sFilterConfig pointer to a CAN_FilterTypeDef structure that - * contains the filter configuration information. - * @retval None - */ -HAL_StatusTypeDef HAL_CAN_ConfigFilter(CAN_HandleTypeDef *hcan, const CAN_FilterTypeDef *sFilterConfig) -{ - 800f53c: b480 push {r7} - 800f53e: b087 sub sp, #28 - 800f540: af00 add r7, sp, #0 - 800f542: 6078 str r0, [r7, #4] - 800f544: 6039 str r1, [r7, #0] - uint32_t filternbrbitpos; - CAN_TypeDef *can_ip = hcan->Instance; - 800f546: 687b ldr r3, [r7, #4] - 800f548: 681b ldr r3, [r3, #0] - 800f54a: 617b str r3, [r7, #20] - HAL_CAN_StateTypeDef state = hcan->State; - 800f54c: 687b ldr r3, [r7, #4] - 800f54e: f893 3020 ldrb.w r3, [r3, #32] - 800f552: 74fb strb r3, [r7, #19] - - if ((state == HAL_CAN_STATE_READY) || - 800f554: 7cfb ldrb r3, [r7, #19] - 800f556: 2b01 cmp r3, #1 - 800f558: d003 beq.n 800f562 - 800f55a: 7cfb ldrb r3, [r7, #19] - 800f55c: 2b02 cmp r3, #2 - 800f55e: f040 80be bne.w 800f6de - assert_param(IS_CAN_FILTER_ACTIVATION(sFilterConfig->FilterActivation)); - -#if defined(CAN2) - /* CAN1 and CAN2 are dual instances with 28 common filters banks */ - /* Select master instance to access the filter banks */ - can_ip = CAN1; - 800f562: 4b65 ldr r3, [pc, #404] @ (800f6f8 ) - 800f564: 617b str r3, [r7, #20] - /* Check the parameters */ - assert_param(IS_CAN_FILTER_BANK_SINGLE(sFilterConfig->FilterBank)); -#endif /* CAN3 */ - - /* Initialisation mode for the filter */ - SET_BIT(can_ip->FMR, CAN_FMR_FINIT); - 800f566: 697b ldr r3, [r7, #20] - 800f568: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 - 800f56c: f043 0201 orr.w r2, r3, #1 - 800f570: 697b ldr r3, [r7, #20] - 800f572: f8c3 2200 str.w r2, [r3, #512] @ 0x200 - -#if defined(CAN2) - /* Select the start filter number of CAN2 slave instance */ - CLEAR_BIT(can_ip->FMR, CAN_FMR_CAN2SB); - 800f576: 697b ldr r3, [r7, #20] - 800f578: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 - 800f57c: f423 527c bic.w r2, r3, #16128 @ 0x3f00 - 800f580: 697b ldr r3, [r7, #20] - 800f582: f8c3 2200 str.w r2, [r3, #512] @ 0x200 - SET_BIT(can_ip->FMR, sFilterConfig->SlaveStartFilterBank << CAN_FMR_CAN2SB_Pos); - 800f586: 697b ldr r3, [r7, #20] - 800f588: f8d3 2200 ldr.w r2, [r3, #512] @ 0x200 - 800f58c: 683b ldr r3, [r7, #0] - 800f58e: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f590: 021b lsls r3, r3, #8 - 800f592: 431a orrs r2, r3 - 800f594: 697b ldr r3, [r7, #20] - 800f596: f8c3 2200 str.w r2, [r3, #512] @ 0x200 - -#endif /* CAN3 */ - /* Convert filter number into bit position */ - filternbrbitpos = (uint32_t)1 << (sFilterConfig->FilterBank & 0x1FU); - 800f59a: 683b ldr r3, [r7, #0] - 800f59c: 695b ldr r3, [r3, #20] - 800f59e: f003 031f and.w r3, r3, #31 - 800f5a2: 2201 movs r2, #1 - 800f5a4: fa02 f303 lsl.w r3, r2, r3 - 800f5a8: 60fb str r3, [r7, #12] - - /* Filter Deactivation */ - CLEAR_BIT(can_ip->FA1R, filternbrbitpos); - 800f5aa: 697b ldr r3, [r7, #20] - 800f5ac: f8d3 221c ldr.w r2, [r3, #540] @ 0x21c - 800f5b0: 68fb ldr r3, [r7, #12] - 800f5b2: 43db mvns r3, r3 - 800f5b4: 401a ands r2, r3 - 800f5b6: 697b ldr r3, [r7, #20] - 800f5b8: f8c3 221c str.w r2, [r3, #540] @ 0x21c - - /* Filter Scale */ - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_16BIT) - 800f5bc: 683b ldr r3, [r7, #0] - 800f5be: 69db ldr r3, [r3, #28] - 800f5c0: 2b00 cmp r3, #0 - 800f5c2: d123 bne.n 800f60c - { - /* 16-bit scale for the filter */ - CLEAR_BIT(can_ip->FS1R, filternbrbitpos); - 800f5c4: 697b ldr r3, [r7, #20] - 800f5c6: f8d3 220c ldr.w r2, [r3, #524] @ 0x20c - 800f5ca: 68fb ldr r3, [r7, #12] - 800f5cc: 43db mvns r3, r3 - 800f5ce: 401a ands r2, r3 - 800f5d0: 697b ldr r3, [r7, #20] - 800f5d2: f8c3 220c str.w r2, [r3, #524] @ 0x20c - - /* First 16-bit identifier and First 16-bit mask */ - /* Or First 16-bit identifier and Second 16-bit identifier */ - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - 800f5d6: 683b ldr r3, [r7, #0] - 800f5d8: 68db ldr r3, [r3, #12] - 800f5da: 0419 lsls r1, r3, #16 - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - 800f5dc: 683b ldr r3, [r7, #0] - 800f5de: 685b ldr r3, [r3, #4] - 800f5e0: b29b uxth r3, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - 800f5e2: 683a ldr r2, [r7, #0] - 800f5e4: 6952 ldr r2, [r2, #20] - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow) << 16U) | - 800f5e6: 4319 orrs r1, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - 800f5e8: 697b ldr r3, [r7, #20] - 800f5ea: 3248 adds r2, #72 @ 0x48 - 800f5ec: f843 1032 str.w r1, [r3, r2, lsl #3] - - /* Second 16-bit identifier and Second 16-bit mask */ - /* Or Third 16-bit identifier and Fourth 16-bit identifier */ - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - 800f5f0: 683b ldr r3, [r7, #0] - 800f5f2: 689b ldr r3, [r3, #8] - 800f5f4: 0419 lsls r1, r3, #16 - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh); - 800f5f6: 683b ldr r3, [r7, #0] - 800f5f8: 681b ldr r3, [r3, #0] - 800f5fa: b29a uxth r2, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - 800f5fc: 683b ldr r3, [r7, #0] - 800f5fe: 695b ldr r3, [r3, #20] - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - 800f600: 430a orrs r2, r1 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - 800f602: 6979 ldr r1, [r7, #20] - 800f604: 3348 adds r3, #72 @ 0x48 - 800f606: 00db lsls r3, r3, #3 - 800f608: 440b add r3, r1 - 800f60a: 605a str r2, [r3, #4] - } - - if (sFilterConfig->FilterScale == CAN_FILTERSCALE_32BIT) - 800f60c: 683b ldr r3, [r7, #0] - 800f60e: 69db ldr r3, [r3, #28] - 800f610: 2b01 cmp r3, #1 - 800f612: d122 bne.n 800f65a - { - /* 32-bit scale for the filter */ - SET_BIT(can_ip->FS1R, filternbrbitpos); - 800f614: 697b ldr r3, [r7, #20] - 800f616: f8d3 220c ldr.w r2, [r3, #524] @ 0x20c - 800f61a: 68fb ldr r3, [r7, #12] - 800f61c: 431a orrs r2, r3 - 800f61e: 697b ldr r3, [r7, #20] - 800f620: f8c3 220c str.w r2, [r3, #524] @ 0x20c - - /* 32-bit identifier or First 32-bit identifier */ - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - 800f624: 683b ldr r3, [r7, #0] - 800f626: 681b ldr r3, [r3, #0] - 800f628: 0419 lsls r1, r3, #16 - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdLow); - 800f62a: 683b ldr r3, [r7, #0] - 800f62c: 685b ldr r3, [r3, #4] - 800f62e: b29b uxth r3, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - 800f630: 683a ldr r2, [r7, #0] - 800f632: 6952 ldr r2, [r2, #20] - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterIdHigh) << 16U) | - 800f634: 4319 orrs r1, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR1 = - 800f636: 697b ldr r3, [r7, #20] - 800f638: 3248 adds r2, #72 @ 0x48 - 800f63a: f843 1032 str.w r1, [r3, r2, lsl #3] - - /* 32-bit mask or Second 32-bit identifier */ - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - 800f63e: 683b ldr r3, [r7, #0] - 800f640: 689b ldr r3, [r3, #8] - 800f642: 0419 lsls r1, r3, #16 - (0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdLow); - 800f644: 683b ldr r3, [r7, #0] - 800f646: 68db ldr r3, [r3, #12] - 800f648: b29a uxth r2, r3 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - 800f64a: 683b ldr r3, [r7, #0] - 800f64c: 695b ldr r3, [r3, #20] - ((0x0000FFFFU & (uint32_t)sFilterConfig->FilterMaskIdHigh) << 16U) | - 800f64e: 430a orrs r2, r1 - can_ip->sFilterRegister[sFilterConfig->FilterBank].FR2 = - 800f650: 6979 ldr r1, [r7, #20] - 800f652: 3348 adds r3, #72 @ 0x48 - 800f654: 00db lsls r3, r3, #3 - 800f656: 440b add r3, r1 - 800f658: 605a str r2, [r3, #4] - } - - /* Filter Mode */ - if (sFilterConfig->FilterMode == CAN_FILTERMODE_IDMASK) - 800f65a: 683b ldr r3, [r7, #0] - 800f65c: 699b ldr r3, [r3, #24] - 800f65e: 2b00 cmp r3, #0 - 800f660: d109 bne.n 800f676 - { - /* Id/Mask mode for the filter*/ - CLEAR_BIT(can_ip->FM1R, filternbrbitpos); - 800f662: 697b ldr r3, [r7, #20] - 800f664: f8d3 2204 ldr.w r2, [r3, #516] @ 0x204 - 800f668: 68fb ldr r3, [r7, #12] - 800f66a: 43db mvns r3, r3 - 800f66c: 401a ands r2, r3 - 800f66e: 697b ldr r3, [r7, #20] - 800f670: f8c3 2204 str.w r2, [r3, #516] @ 0x204 - 800f674: e007 b.n 800f686 - } - else /* CAN_FilterInitStruct->CAN_FilterMode == CAN_FilterMode_IdList */ - { - /* Identifier list mode for the filter*/ - SET_BIT(can_ip->FM1R, filternbrbitpos); - 800f676: 697b ldr r3, [r7, #20] - 800f678: f8d3 2204 ldr.w r2, [r3, #516] @ 0x204 - 800f67c: 68fb ldr r3, [r7, #12] - 800f67e: 431a orrs r2, r3 - 800f680: 697b ldr r3, [r7, #20] - 800f682: f8c3 2204 str.w r2, [r3, #516] @ 0x204 - } - - /* Filter FIFO assignment */ - if (sFilterConfig->FilterFIFOAssignment == CAN_FILTER_FIFO0) - 800f686: 683b ldr r3, [r7, #0] - 800f688: 691b ldr r3, [r3, #16] - 800f68a: 2b00 cmp r3, #0 - 800f68c: d109 bne.n 800f6a2 - { - /* FIFO 0 assignation for the filter */ - CLEAR_BIT(can_ip->FFA1R, filternbrbitpos); - 800f68e: 697b ldr r3, [r7, #20] - 800f690: f8d3 2214 ldr.w r2, [r3, #532] @ 0x214 - 800f694: 68fb ldr r3, [r7, #12] - 800f696: 43db mvns r3, r3 - 800f698: 401a ands r2, r3 - 800f69a: 697b ldr r3, [r7, #20] - 800f69c: f8c3 2214 str.w r2, [r3, #532] @ 0x214 - 800f6a0: e007 b.n 800f6b2 - } - else - { - /* FIFO 1 assignation for the filter */ - SET_BIT(can_ip->FFA1R, filternbrbitpos); - 800f6a2: 697b ldr r3, [r7, #20] - 800f6a4: f8d3 2214 ldr.w r2, [r3, #532] @ 0x214 - 800f6a8: 68fb ldr r3, [r7, #12] - 800f6aa: 431a orrs r2, r3 - 800f6ac: 697b ldr r3, [r7, #20] - 800f6ae: f8c3 2214 str.w r2, [r3, #532] @ 0x214 - } - - /* Filter activation */ - if (sFilterConfig->FilterActivation == CAN_FILTER_ENABLE) - 800f6b2: 683b ldr r3, [r7, #0] - 800f6b4: 6a1b ldr r3, [r3, #32] - 800f6b6: 2b01 cmp r3, #1 - 800f6b8: d107 bne.n 800f6ca - { - SET_BIT(can_ip->FA1R, filternbrbitpos); - 800f6ba: 697b ldr r3, [r7, #20] - 800f6bc: f8d3 221c ldr.w r2, [r3, #540] @ 0x21c - 800f6c0: 68fb ldr r3, [r7, #12] - 800f6c2: 431a orrs r2, r3 - 800f6c4: 697b ldr r3, [r7, #20] - 800f6c6: f8c3 221c str.w r2, [r3, #540] @ 0x21c - } - - /* Leave the initialisation mode for the filter */ - CLEAR_BIT(can_ip->FMR, CAN_FMR_FINIT); - 800f6ca: 697b ldr r3, [r7, #20] - 800f6cc: f8d3 3200 ldr.w r3, [r3, #512] @ 0x200 - 800f6d0: f023 0201 bic.w r2, r3, #1 - 800f6d4: 697b ldr r3, [r7, #20] - 800f6d6: f8c3 2200 str.w r2, [r3, #512] @ 0x200 - - /* Return function status */ - return HAL_OK; - 800f6da: 2300 movs r3, #0 - 800f6dc: e006 b.n 800f6ec - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - 800f6de: 687b ldr r3, [r7, #4] - 800f6e0: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f6e2: f443 2280 orr.w r2, r3, #262144 @ 0x40000 - 800f6e6: 687b ldr r3, [r7, #4] - 800f6e8: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f6ea: 2301 movs r3, #1 - } -} - 800f6ec: 4618 mov r0, r3 - 800f6ee: 371c adds r7, #28 - 800f6f0: 46bd mov sp, r7 - 800f6f2: bc80 pop {r7} - 800f6f4: 4770 bx lr - 800f6f6: bf00 nop - 800f6f8: 40006400 .word 0x40006400 - -0800f6fc : - * @param hcan pointer to an CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Start(CAN_HandleTypeDef *hcan) -{ - 800f6fc: b580 push {r7, lr} - 800f6fe: b084 sub sp, #16 - 800f700: af00 add r7, sp, #0 - 800f702: 6078 str r0, [r7, #4] - uint32_t tickstart; - - if (hcan->State == HAL_CAN_STATE_READY) - 800f704: 687b ldr r3, [r7, #4] - 800f706: f893 3020 ldrb.w r3, [r3, #32] - 800f70a: b2db uxtb r3, r3 - 800f70c: 2b01 cmp r3, #1 - 800f70e: d12e bne.n 800f76e - { - /* Change CAN peripheral state */ - hcan->State = HAL_CAN_STATE_LISTENING; - 800f710: 687b ldr r3, [r7, #4] - 800f712: 2202 movs r2, #2 - 800f714: f883 2020 strb.w r2, [r3, #32] - - /* Request leave initialisation */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - 800f718: 687b ldr r3, [r7, #4] - 800f71a: 681b ldr r3, [r3, #0] - 800f71c: 681a ldr r2, [r3, #0] - 800f71e: 687b ldr r3, [r7, #4] - 800f720: 681b ldr r3, [r3, #0] - 800f722: f022 0201 bic.w r2, r2, #1 - 800f726: 601a str r2, [r3, #0] - - /* Get tick */ - tickstart = HAL_GetTick(); - 800f728: f7ff f8d8 bl 800e8dc - 800f72c: 60f8 str r0, [r7, #12] - - /* Wait the acknowledge */ - while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) - 800f72e: e012 b.n 800f756 - { - /* Check for the Timeout */ - if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) - 800f730: f7ff f8d4 bl 800e8dc - 800f734: 4602 mov r2, r0 - 800f736: 68fb ldr r3, [r7, #12] - 800f738: 1ad3 subs r3, r2, r3 - 800f73a: 2b0a cmp r3, #10 - 800f73c: d90b bls.n 800f756 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - 800f73e: 687b ldr r3, [r7, #4] - 800f740: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f742: f443 3200 orr.w r2, r3, #131072 @ 0x20000 - 800f746: 687b ldr r3, [r7, #4] - 800f748: 625a str r2, [r3, #36] @ 0x24 - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - 800f74a: 687b ldr r3, [r7, #4] - 800f74c: 2205 movs r2, #5 - 800f74e: f883 2020 strb.w r2, [r3, #32] - - return HAL_ERROR; - 800f752: 2301 movs r3, #1 - 800f754: e012 b.n 800f77c - while ((hcan->Instance->MSR & CAN_MSR_INAK) != 0U) - 800f756: 687b ldr r3, [r7, #4] - 800f758: 681b ldr r3, [r3, #0] - 800f75a: 685b ldr r3, [r3, #4] - 800f75c: f003 0301 and.w r3, r3, #1 - 800f760: 2b00 cmp r3, #0 - 800f762: d1e5 bne.n 800f730 - } - } - - /* Reset the CAN ErrorCode */ - hcan->ErrorCode = HAL_CAN_ERROR_NONE; - 800f764: 687b ldr r3, [r7, #4] - 800f766: 2200 movs r2, #0 - 800f768: 625a str r2, [r3, #36] @ 0x24 - - /* Return function status */ - return HAL_OK; - 800f76a: 2300 movs r3, #0 - 800f76c: e006 b.n 800f77c - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_READY; - 800f76e: 687b ldr r3, [r7, #4] - 800f770: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f772: f443 2200 orr.w r2, r3, #524288 @ 0x80000 - 800f776: 687b ldr r3, [r7, #4] - 800f778: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f77a: 2301 movs r3, #1 - } -} - 800f77c: 4618 mov r0, r3 - 800f77e: 3710 adds r7, #16 - 800f780: 46bd mov sp, r7 - 800f782: bd80 pop {r7, pc} - -0800f784 : - * @param hcan pointer to an CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_Stop(CAN_HandleTypeDef *hcan) -{ - 800f784: b580 push {r7, lr} - 800f786: b084 sub sp, #16 - 800f788: af00 add r7, sp, #0 - 800f78a: 6078 str r0, [r7, #4] - uint32_t tickstart; - - if (hcan->State == HAL_CAN_STATE_LISTENING) - 800f78c: 687b ldr r3, [r7, #4] - 800f78e: f893 3020 ldrb.w r3, [r3, #32] - 800f792: b2db uxtb r3, r3 - 800f794: 2b02 cmp r3, #2 - 800f796: d133 bne.n 800f800 - { - /* Request initialisation */ - SET_BIT(hcan->Instance->MCR, CAN_MCR_INRQ); - 800f798: 687b ldr r3, [r7, #4] - 800f79a: 681b ldr r3, [r3, #0] - 800f79c: 681a ldr r2, [r3, #0] - 800f79e: 687b ldr r3, [r7, #4] - 800f7a0: 681b ldr r3, [r3, #0] - 800f7a2: f042 0201 orr.w r2, r2, #1 - 800f7a6: 601a str r2, [r3, #0] - - /* Get tick */ - tickstart = HAL_GetTick(); - 800f7a8: f7ff f898 bl 800e8dc - 800f7ac: 60f8 str r0, [r7, #12] - - /* Wait the acknowledge */ - while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) - 800f7ae: e012 b.n 800f7d6 - { - /* Check for the Timeout */ - if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE) - 800f7b0: f7ff f894 bl 800e8dc - 800f7b4: 4602 mov r2, r0 - 800f7b6: 68fb ldr r3, [r7, #12] - 800f7b8: 1ad3 subs r3, r2, r3 - 800f7ba: 2b0a cmp r3, #10 - 800f7bc: d90b bls.n 800f7d6 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT; - 800f7be: 687b ldr r3, [r7, #4] - 800f7c0: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f7c2: f443 3200 orr.w r2, r3, #131072 @ 0x20000 - 800f7c6: 687b ldr r3, [r7, #4] - 800f7c8: 625a str r2, [r3, #36] @ 0x24 - - /* Change CAN state */ - hcan->State = HAL_CAN_STATE_ERROR; - 800f7ca: 687b ldr r3, [r7, #4] - 800f7cc: 2205 movs r2, #5 - 800f7ce: f883 2020 strb.w r2, [r3, #32] - - return HAL_ERROR; - 800f7d2: 2301 movs r3, #1 - 800f7d4: e01b b.n 800f80e - while ((hcan->Instance->MSR & CAN_MSR_INAK) == 0U) - 800f7d6: 687b ldr r3, [r7, #4] - 800f7d8: 681b ldr r3, [r3, #0] - 800f7da: 685b ldr r3, [r3, #4] - 800f7dc: f003 0301 and.w r3, r3, #1 - 800f7e0: 2b00 cmp r3, #0 - 800f7e2: d0e5 beq.n 800f7b0 - } - } - - /* Exit from sleep mode */ - CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP); - 800f7e4: 687b ldr r3, [r7, #4] - 800f7e6: 681b ldr r3, [r3, #0] - 800f7e8: 681a ldr r2, [r3, #0] - 800f7ea: 687b ldr r3, [r7, #4] - 800f7ec: 681b ldr r3, [r3, #0] - 800f7ee: f022 0202 bic.w r2, r2, #2 - 800f7f2: 601a str r2, [r3, #0] - - /* Change CAN peripheral state */ - hcan->State = HAL_CAN_STATE_READY; - 800f7f4: 687b ldr r3, [r7, #4] - 800f7f6: 2201 movs r2, #1 - 800f7f8: f883 2020 strb.w r2, [r3, #32] - - /* Return function status */ - return HAL_OK; - 800f7fc: 2300 movs r3, #0 - 800f7fe: e006 b.n 800f80e - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_STARTED; - 800f800: 687b ldr r3, [r7, #4] - 800f802: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f804: f443 1280 orr.w r2, r3, #1048576 @ 0x100000 - 800f808: 687b ldr r3, [r7, #4] - 800f80a: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f80c: 2301 movs r3, #1 - } -} - 800f80e: 4618 mov r0, r3 - 800f810: 3710 adds r7, #16 - 800f812: 46bd mov sp, r7 - 800f814: bd80 pop {r7, pc} - -0800f816 : - * This parameter can be a value of @arg CAN_Tx_Mailboxes. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, const CAN_TxHeaderTypeDef *pHeader, - const uint8_t aData[], uint32_t *pTxMailbox) -{ - 800f816: b480 push {r7} - 800f818: b089 sub sp, #36 @ 0x24 - 800f81a: af00 add r7, sp, #0 - 800f81c: 60f8 str r0, [r7, #12] - 800f81e: 60b9 str r1, [r7, #8] - 800f820: 607a str r2, [r7, #4] - 800f822: 603b str r3, [r7, #0] - uint32_t transmitmailbox; - HAL_CAN_StateTypeDef state = hcan->State; - 800f824: 68fb ldr r3, [r7, #12] - 800f826: f893 3020 ldrb.w r3, [r3, #32] - 800f82a: 77fb strb r3, [r7, #31] - uint32_t tsr = READ_REG(hcan->Instance->TSR); - 800f82c: 68fb ldr r3, [r7, #12] - 800f82e: 681b ldr r3, [r3, #0] - 800f830: 689b ldr r3, [r3, #8] - 800f832: 61bb str r3, [r7, #24] - { - assert_param(IS_CAN_EXTID(pHeader->ExtId)); - } - assert_param(IS_FUNCTIONAL_STATE(pHeader->TransmitGlobalTime)); - - if ((state == HAL_CAN_STATE_READY) || - 800f834: 7ffb ldrb r3, [r7, #31] - 800f836: 2b01 cmp r3, #1 - 800f838: d003 beq.n 800f842 - 800f83a: 7ffb ldrb r3, [r7, #31] - 800f83c: 2b02 cmp r3, #2 - 800f83e: f040 80ad bne.w 800f99c - (state == HAL_CAN_STATE_LISTENING)) - { - /* Check that all the Tx mailboxes are not full */ - if (((tsr & CAN_TSR_TME0) != 0U) || - 800f842: 69bb ldr r3, [r7, #24] - 800f844: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 - 800f848: 2b00 cmp r3, #0 - 800f84a: d10a bne.n 800f862 - ((tsr & CAN_TSR_TME1) != 0U) || - 800f84c: 69bb ldr r3, [r7, #24] - 800f84e: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - if (((tsr & CAN_TSR_TME0) != 0U) || - 800f852: 2b00 cmp r3, #0 - 800f854: d105 bne.n 800f862 - ((tsr & CAN_TSR_TME2) != 0U)) - 800f856: 69bb ldr r3, [r7, #24] - 800f858: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - ((tsr & CAN_TSR_TME1) != 0U) || - 800f85c: 2b00 cmp r3, #0 - 800f85e: f000 8095 beq.w 800f98c - { - /* Select an empty transmit mailbox */ - transmitmailbox = (tsr & CAN_TSR_CODE) >> CAN_TSR_CODE_Pos; - 800f862: 69bb ldr r3, [r7, #24] - 800f864: 0e1b lsrs r3, r3, #24 - 800f866: f003 0303 and.w r3, r3, #3 - 800f86a: 617b str r3, [r7, #20] - - /* Store the Tx mailbox */ - *pTxMailbox = (uint32_t)1 << transmitmailbox; - 800f86c: 2201 movs r2, #1 - 800f86e: 697b ldr r3, [r7, #20] - 800f870: 409a lsls r2, r3 - 800f872: 683b ldr r3, [r7, #0] - 800f874: 601a str r2, [r3, #0] - - /* Set up the Id */ - if (pHeader->IDE == CAN_ID_STD) - 800f876: 68bb ldr r3, [r7, #8] - 800f878: 689b ldr r3, [r3, #8] - 800f87a: 2b00 cmp r3, #0 - 800f87c: d10d bne.n 800f89a - { - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | - 800f87e: 68bb ldr r3, [r7, #8] - 800f880: 681b ldr r3, [r3, #0] - 800f882: 055a lsls r2, r3, #21 - pHeader->RTR); - 800f884: 68bb ldr r3, [r7, #8] - 800f886: 68db ldr r3, [r3, #12] - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->StdId << CAN_TI0R_STID_Pos) | - 800f888: 68f9 ldr r1, [r7, #12] - 800f88a: 6809 ldr r1, [r1, #0] - 800f88c: 431a orrs r2, r3 - 800f88e: 697b ldr r3, [r7, #20] - 800f890: 3318 adds r3, #24 - 800f892: 011b lsls r3, r3, #4 - 800f894: 440b add r3, r1 - 800f896: 601a str r2, [r3, #0] - 800f898: e00f b.n 800f8ba - } - else - { - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | - 800f89a: 68bb ldr r3, [r7, #8] - 800f89c: 685b ldr r3, [r3, #4] - 800f89e: 00da lsls r2, r3, #3 - pHeader->IDE | - 800f8a0: 68bb ldr r3, [r7, #8] - 800f8a2: 689b ldr r3, [r3, #8] - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | - 800f8a4: 431a orrs r2, r3 - pHeader->RTR); - 800f8a6: 68bb ldr r3, [r7, #8] - 800f8a8: 68db ldr r3, [r3, #12] - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | - 800f8aa: 68f9 ldr r1, [r7, #12] - 800f8ac: 6809 ldr r1, [r1, #0] - pHeader->IDE | - 800f8ae: 431a orrs r2, r3 - hcan->Instance->sTxMailBox[transmitmailbox].TIR = ((pHeader->ExtId << CAN_TI0R_EXID_Pos) | - 800f8b0: 697b ldr r3, [r7, #20] - 800f8b2: 3318 adds r3, #24 - 800f8b4: 011b lsls r3, r3, #4 - 800f8b6: 440b add r3, r1 - 800f8b8: 601a str r2, [r3, #0] - } - - /* Set up the DLC */ - hcan->Instance->sTxMailBox[transmitmailbox].TDTR = (pHeader->DLC); - 800f8ba: 68fb ldr r3, [r7, #12] - 800f8bc: 6819 ldr r1, [r3, #0] - 800f8be: 68bb ldr r3, [r7, #8] - 800f8c0: 691a ldr r2, [r3, #16] - 800f8c2: 697b ldr r3, [r7, #20] - 800f8c4: 3318 adds r3, #24 - 800f8c6: 011b lsls r3, r3, #4 - 800f8c8: 440b add r3, r1 - 800f8ca: 3304 adds r3, #4 - 800f8cc: 601a str r2, [r3, #0] - - /* Set up the Transmit Global Time mode */ - if (pHeader->TransmitGlobalTime == ENABLE) - 800f8ce: 68bb ldr r3, [r7, #8] - 800f8d0: 7d1b ldrb r3, [r3, #20] - 800f8d2: 2b01 cmp r3, #1 - 800f8d4: d111 bne.n 800f8fa - { - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TDTR, CAN_TDT0R_TGT); - 800f8d6: 68fb ldr r3, [r7, #12] - 800f8d8: 681a ldr r2, [r3, #0] - 800f8da: 697b ldr r3, [r7, #20] - 800f8dc: 3318 adds r3, #24 - 800f8de: 011b lsls r3, r3, #4 - 800f8e0: 4413 add r3, r2 - 800f8e2: 3304 adds r3, #4 - 800f8e4: 681b ldr r3, [r3, #0] - 800f8e6: 68fa ldr r2, [r7, #12] - 800f8e8: 6811 ldr r1, [r2, #0] - 800f8ea: f443 7280 orr.w r2, r3, #256 @ 0x100 - 800f8ee: 697b ldr r3, [r7, #20] - 800f8f0: 3318 adds r3, #24 - 800f8f2: 011b lsls r3, r3, #4 - 800f8f4: 440b add r3, r1 - 800f8f6: 3304 adds r3, #4 - 800f8f8: 601a str r2, [r3, #0] - } - - /* Set up the data field */ - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDHR, - 800f8fa: 687b ldr r3, [r7, #4] - 800f8fc: 3307 adds r3, #7 - 800f8fe: 781b ldrb r3, [r3, #0] - 800f900: 061a lsls r2, r3, #24 - 800f902: 687b ldr r3, [r7, #4] - 800f904: 3306 adds r3, #6 - 800f906: 781b ldrb r3, [r3, #0] - 800f908: 041b lsls r3, r3, #16 - 800f90a: 431a orrs r2, r3 - 800f90c: 687b ldr r3, [r7, #4] - 800f90e: 3305 adds r3, #5 - 800f910: 781b ldrb r3, [r3, #0] - 800f912: 021b lsls r3, r3, #8 - 800f914: 4313 orrs r3, r2 - 800f916: 687a ldr r2, [r7, #4] - 800f918: 3204 adds r2, #4 - 800f91a: 7812 ldrb r2, [r2, #0] - 800f91c: 4610 mov r0, r2 - 800f91e: 68fa ldr r2, [r7, #12] - 800f920: 6811 ldr r1, [r2, #0] - 800f922: ea43 0200 orr.w r2, r3, r0 - 800f926: 697b ldr r3, [r7, #20] - 800f928: 011b lsls r3, r3, #4 - 800f92a: 440b add r3, r1 - 800f92c: f503 73c6 add.w r3, r3, #396 @ 0x18c - 800f930: 601a str r2, [r3, #0] - ((uint32_t)aData[7] << CAN_TDH0R_DATA7_Pos) | - ((uint32_t)aData[6] << CAN_TDH0R_DATA6_Pos) | - ((uint32_t)aData[5] << CAN_TDH0R_DATA5_Pos) | - ((uint32_t)aData[4] << CAN_TDH0R_DATA4_Pos)); - WRITE_REG(hcan->Instance->sTxMailBox[transmitmailbox].TDLR, - 800f932: 687b ldr r3, [r7, #4] - 800f934: 3303 adds r3, #3 - 800f936: 781b ldrb r3, [r3, #0] - 800f938: 061a lsls r2, r3, #24 - 800f93a: 687b ldr r3, [r7, #4] - 800f93c: 3302 adds r3, #2 - 800f93e: 781b ldrb r3, [r3, #0] - 800f940: 041b lsls r3, r3, #16 - 800f942: 431a orrs r2, r3 - 800f944: 687b ldr r3, [r7, #4] - 800f946: 3301 adds r3, #1 - 800f948: 781b ldrb r3, [r3, #0] - 800f94a: 021b lsls r3, r3, #8 - 800f94c: 4313 orrs r3, r2 - 800f94e: 687a ldr r2, [r7, #4] - 800f950: 7812 ldrb r2, [r2, #0] - 800f952: 4610 mov r0, r2 - 800f954: 68fa ldr r2, [r7, #12] - 800f956: 6811 ldr r1, [r2, #0] - 800f958: ea43 0200 orr.w r2, r3, r0 - 800f95c: 697b ldr r3, [r7, #20] - 800f95e: 011b lsls r3, r3, #4 - 800f960: 440b add r3, r1 - 800f962: f503 73c4 add.w r3, r3, #392 @ 0x188 - 800f966: 601a str r2, [r3, #0] - ((uint32_t)aData[2] << CAN_TDL0R_DATA2_Pos) | - ((uint32_t)aData[1] << CAN_TDL0R_DATA1_Pos) | - ((uint32_t)aData[0] << CAN_TDL0R_DATA0_Pos)); - - /* Request transmission */ - SET_BIT(hcan->Instance->sTxMailBox[transmitmailbox].TIR, CAN_TI0R_TXRQ); - 800f968: 68fb ldr r3, [r7, #12] - 800f96a: 681a ldr r2, [r3, #0] - 800f96c: 697b ldr r3, [r7, #20] - 800f96e: 3318 adds r3, #24 - 800f970: 011b lsls r3, r3, #4 - 800f972: 4413 add r3, r2 - 800f974: 681b ldr r3, [r3, #0] - 800f976: 68fa ldr r2, [r7, #12] - 800f978: 6811 ldr r1, [r2, #0] - 800f97a: f043 0201 orr.w r2, r3, #1 - 800f97e: 697b ldr r3, [r7, #20] - 800f980: 3318 adds r3, #24 - 800f982: 011b lsls r3, r3, #4 - 800f984: 440b add r3, r1 - 800f986: 601a str r2, [r3, #0] - - /* Return function status */ - return HAL_OK; - 800f988: 2300 movs r3, #0 - 800f98a: e00e b.n 800f9aa - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; - 800f98c: 68fb ldr r3, [r7, #12] - 800f98e: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f990: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 - 800f994: 68fb ldr r3, [r7, #12] - 800f996: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f998: 2301 movs r3, #1 - 800f99a: e006 b.n 800f9aa - } - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - 800f99c: 68fb ldr r3, [r7, #12] - 800f99e: 6a5b ldr r3, [r3, #36] @ 0x24 - 800f9a0: f443 2280 orr.w r2, r3, #262144 @ 0x40000 - 800f9a4: 68fb ldr r3, [r7, #12] - 800f9a6: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800f9a8: 2301 movs r3, #1 - } -} - 800f9aa: 4618 mov r0, r3 - 800f9ac: 3724 adds r7, #36 @ 0x24 - 800f9ae: 46bd mov sp, r7 - 800f9b0: bc80 pop {r7} - 800f9b2: 4770 bx lr - -0800f9b4 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval Number of free Tx Mailboxes. - */ -uint32_t HAL_CAN_GetTxMailboxesFreeLevel(const CAN_HandleTypeDef *hcan) -{ - 800f9b4: b480 push {r7} - 800f9b6: b085 sub sp, #20 - 800f9b8: af00 add r7, sp, #0 - 800f9ba: 6078 str r0, [r7, #4] - uint32_t freelevel = 0U; - 800f9bc: 2300 movs r3, #0 - 800f9be: 60fb str r3, [r7, #12] - HAL_CAN_StateTypeDef state = hcan->State; - 800f9c0: 687b ldr r3, [r7, #4] - 800f9c2: f893 3020 ldrb.w r3, [r3, #32] - 800f9c6: 72fb strb r3, [r7, #11] - - if ((state == HAL_CAN_STATE_READY) || - 800f9c8: 7afb ldrb r3, [r7, #11] - 800f9ca: 2b01 cmp r3, #1 - 800f9cc: d002 beq.n 800f9d4 - 800f9ce: 7afb ldrb r3, [r7, #11] - 800f9d0: 2b02 cmp r3, #2 - 800f9d2: d11d bne.n 800fa10 - (state == HAL_CAN_STATE_LISTENING)) - { - /* Check Tx Mailbox 0 status */ - if ((hcan->Instance->TSR & CAN_TSR_TME0) != 0U) - 800f9d4: 687b ldr r3, [r7, #4] - 800f9d6: 681b ldr r3, [r3, #0] - 800f9d8: 689b ldr r3, [r3, #8] - 800f9da: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 - 800f9de: 2b00 cmp r3, #0 - 800f9e0: d002 beq.n 800f9e8 - { - freelevel++; - 800f9e2: 68fb ldr r3, [r7, #12] - 800f9e4: 3301 adds r3, #1 - 800f9e6: 60fb str r3, [r7, #12] - } - - /* Check Tx Mailbox 1 status */ - if ((hcan->Instance->TSR & CAN_TSR_TME1) != 0U) - 800f9e8: 687b ldr r3, [r7, #4] - 800f9ea: 681b ldr r3, [r3, #0] - 800f9ec: 689b ldr r3, [r3, #8] - 800f9ee: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 800f9f2: 2b00 cmp r3, #0 - 800f9f4: d002 beq.n 800f9fc - { - freelevel++; - 800f9f6: 68fb ldr r3, [r7, #12] - 800f9f8: 3301 adds r3, #1 - 800f9fa: 60fb str r3, [r7, #12] - } - - /* Check Tx Mailbox 2 status */ - if ((hcan->Instance->TSR & CAN_TSR_TME2) != 0U) - 800f9fc: 687b ldr r3, [r7, #4] - 800f9fe: 681b ldr r3, [r3, #0] - 800fa00: 689b ldr r3, [r3, #8] - 800fa02: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 800fa06: 2b00 cmp r3, #0 - 800fa08: d002 beq.n 800fa10 - { - freelevel++; - 800fa0a: 68fb ldr r3, [r7, #12] - 800fa0c: 3301 adds r3, #1 - 800fa0e: 60fb str r3, [r7, #12] - } - } - - /* Return Tx Mailboxes free level */ - return freelevel; - 800fa10: 68fb ldr r3, [r7, #12] -} - 800fa12: 4618 mov r0, r3 - 800fa14: 3714 adds r7, #20 - 800fa16: 46bd mov sp, r7 - 800fa18: bc80 pop {r7} - 800fa1a: 4770 bx lr - -0800fa1c : - * @param aData array where the payload of the Rx frame will be stored. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, - CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) -{ - 800fa1c: b480 push {r7} - 800fa1e: b087 sub sp, #28 - 800fa20: af00 add r7, sp, #0 - 800fa22: 60f8 str r0, [r7, #12] - 800fa24: 60b9 str r1, [r7, #8] - 800fa26: 607a str r2, [r7, #4] - 800fa28: 603b str r3, [r7, #0] - HAL_CAN_StateTypeDef state = hcan->State; - 800fa2a: 68fb ldr r3, [r7, #12] - 800fa2c: f893 3020 ldrb.w r3, [r3, #32] - 800fa30: 75fb strb r3, [r7, #23] - - assert_param(IS_CAN_RX_FIFO(RxFifo)); - - if ((state == HAL_CAN_STATE_READY) || - 800fa32: 7dfb ldrb r3, [r7, #23] - 800fa34: 2b01 cmp r3, #1 - 800fa36: d003 beq.n 800fa40 - 800fa38: 7dfb ldrb r3, [r7, #23] - 800fa3a: 2b02 cmp r3, #2 - 800fa3c: f040 8103 bne.w 800fc46 - (state == HAL_CAN_STATE_LISTENING)) - { - /* Check the Rx FIFO */ - if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ - 800fa40: 68bb ldr r3, [r7, #8] - 800fa42: 2b00 cmp r3, #0 - 800fa44: d10e bne.n 800fa64 - { - /* Check that the Rx FIFO 0 is not empty */ - if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) == 0U) - 800fa46: 68fb ldr r3, [r7, #12] - 800fa48: 681b ldr r3, [r3, #0] - 800fa4a: 68db ldr r3, [r3, #12] - 800fa4c: f003 0303 and.w r3, r3, #3 - 800fa50: 2b00 cmp r3, #0 - 800fa52: d116 bne.n 800fa82 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; - 800fa54: 68fb ldr r3, [r7, #12] - 800fa56: 6a5b ldr r3, [r3, #36] @ 0x24 - 800fa58: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 - 800fa5c: 68fb ldr r3, [r7, #12] - 800fa5e: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800fa60: 2301 movs r3, #1 - 800fa62: e0f7 b.n 800fc54 - } - } - else /* Rx element is assigned to Rx FIFO 1 */ - { - /* Check that the Rx FIFO 1 is not empty */ - if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) == 0U) - 800fa64: 68fb ldr r3, [r7, #12] - 800fa66: 681b ldr r3, [r3, #0] - 800fa68: 691b ldr r3, [r3, #16] - 800fa6a: f003 0303 and.w r3, r3, #3 - 800fa6e: 2b00 cmp r3, #0 - 800fa70: d107 bne.n 800fa82 - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_PARAM; - 800fa72: 68fb ldr r3, [r7, #12] - 800fa74: 6a5b ldr r3, [r3, #36] @ 0x24 - 800fa76: f443 1200 orr.w r2, r3, #2097152 @ 0x200000 - 800fa7a: 68fb ldr r3, [r7, #12] - 800fa7c: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800fa7e: 2301 movs r3, #1 - 800fa80: e0e8 b.n 800fc54 - } - } - - /* Get the header */ - pHeader->IDE = CAN_RI0R_IDE & hcan->Instance->sFIFOMailBox[RxFifo].RIR; - 800fa82: 68fb ldr r3, [r7, #12] - 800fa84: 681a ldr r2, [r3, #0] - 800fa86: 68bb ldr r3, [r7, #8] - 800fa88: 331b adds r3, #27 - 800fa8a: 011b lsls r3, r3, #4 - 800fa8c: 4413 add r3, r2 - 800fa8e: 681b ldr r3, [r3, #0] - 800fa90: f003 0204 and.w r2, r3, #4 - 800fa94: 687b ldr r3, [r7, #4] - 800fa96: 609a str r2, [r3, #8] - if (pHeader->IDE == CAN_ID_STD) - 800fa98: 687b ldr r3, [r7, #4] - 800fa9a: 689b ldr r3, [r3, #8] - 800fa9c: 2b00 cmp r3, #0 - 800fa9e: d10c bne.n 800faba - { - pHeader->StdId = (CAN_RI0R_STID & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_TI0R_STID_Pos; - 800faa0: 68fb ldr r3, [r7, #12] - 800faa2: 681a ldr r2, [r3, #0] - 800faa4: 68bb ldr r3, [r7, #8] - 800faa6: 331b adds r3, #27 - 800faa8: 011b lsls r3, r3, #4 - 800faaa: 4413 add r3, r2 - 800faac: 681b ldr r3, [r3, #0] - 800faae: 0d5b lsrs r3, r3, #21 - 800fab0: f3c3 020a ubfx r2, r3, #0, #11 - 800fab4: 687b ldr r3, [r7, #4] - 800fab6: 601a str r2, [r3, #0] - 800fab8: e00b b.n 800fad2 - } - else - { - pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & - hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos; - 800faba: 68fb ldr r3, [r7, #12] - 800fabc: 681a ldr r2, [r3, #0] - 800fabe: 68bb ldr r3, [r7, #8] - 800fac0: 331b adds r3, #27 - 800fac2: 011b lsls r3, r3, #4 - 800fac4: 4413 add r3, r2 - 800fac6: 681b ldr r3, [r3, #0] - 800fac8: 08db lsrs r3, r3, #3 - 800faca: f023 4260 bic.w r2, r3, #3758096384 @ 0xe0000000 - pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & - 800face: 687b ldr r3, [r7, #4] - 800fad0: 605a str r2, [r3, #4] - } - pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR); - 800fad2: 68fb ldr r3, [r7, #12] - 800fad4: 681a ldr r2, [r3, #0] - 800fad6: 68bb ldr r3, [r7, #8] - 800fad8: 331b adds r3, #27 - 800fada: 011b lsls r3, r3, #4 - 800fadc: 4413 add r3, r2 - 800fade: 681b ldr r3, [r3, #0] - 800fae0: f003 0202 and.w r2, r3, #2 - 800fae4: 687b ldr r3, [r7, #4] - 800fae6: 60da str r2, [r3, #12] - if (((CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos) >= 8U) - 800fae8: 68fb ldr r3, [r7, #12] - 800faea: 681a ldr r2, [r3, #0] - 800faec: 68bb ldr r3, [r7, #8] - 800faee: 331b adds r3, #27 - 800faf0: 011b lsls r3, r3, #4 - 800faf2: 4413 add r3, r2 - 800faf4: 3304 adds r3, #4 - 800faf6: 681b ldr r3, [r3, #0] - 800faf8: f003 0308 and.w r3, r3, #8 - 800fafc: 2b00 cmp r3, #0 - 800fafe: d003 beq.n 800fb08 - { - /* Truncate DLC to 8 if received field is over range */ - pHeader->DLC = 8U; - 800fb00: 687b ldr r3, [r7, #4] - 800fb02: 2208 movs r2, #8 - 800fb04: 611a str r2, [r3, #16] - 800fb06: e00b b.n 800fb20 - } - else - { - pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos; - 800fb08: 68fb ldr r3, [r7, #12] - 800fb0a: 681a ldr r2, [r3, #0] - 800fb0c: 68bb ldr r3, [r7, #8] - 800fb0e: 331b adds r3, #27 - 800fb10: 011b lsls r3, r3, #4 - 800fb12: 4413 add r3, r2 - 800fb14: 3304 adds r3, #4 - 800fb16: 681b ldr r3, [r3, #0] - 800fb18: f003 020f and.w r2, r3, #15 - 800fb1c: 687b ldr r3, [r7, #4] - 800fb1e: 611a str r2, [r3, #16] - } - pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos; - 800fb20: 68fb ldr r3, [r7, #12] - 800fb22: 681a ldr r2, [r3, #0] - 800fb24: 68bb ldr r3, [r7, #8] - 800fb26: 331b adds r3, #27 - 800fb28: 011b lsls r3, r3, #4 - 800fb2a: 4413 add r3, r2 - 800fb2c: 3304 adds r3, #4 - 800fb2e: 681b ldr r3, [r3, #0] - 800fb30: 0a1b lsrs r3, r3, #8 - 800fb32: b2da uxtb r2, r3 - 800fb34: 687b ldr r3, [r7, #4] - 800fb36: 619a str r2, [r3, #24] - pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos; - 800fb38: 68fb ldr r3, [r7, #12] - 800fb3a: 681a ldr r2, [r3, #0] - 800fb3c: 68bb ldr r3, [r7, #8] - 800fb3e: 331b adds r3, #27 - 800fb40: 011b lsls r3, r3, #4 - 800fb42: 4413 add r3, r2 - 800fb44: 3304 adds r3, #4 - 800fb46: 681b ldr r3, [r3, #0] - 800fb48: 0c1b lsrs r3, r3, #16 - 800fb4a: b29a uxth r2, r3 - 800fb4c: 687b ldr r3, [r7, #4] - 800fb4e: 615a str r2, [r3, #20] - - /* Get the data */ - aData[0] = (uint8_t)((CAN_RDL0R_DATA0 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA0_Pos); - 800fb50: 68fb ldr r3, [r7, #12] - 800fb52: 681a ldr r2, [r3, #0] - 800fb54: 68bb ldr r3, [r7, #8] - 800fb56: 011b lsls r3, r3, #4 - 800fb58: 4413 add r3, r2 - 800fb5a: f503 73dc add.w r3, r3, #440 @ 0x1b8 - 800fb5e: 681b ldr r3, [r3, #0] - 800fb60: b2da uxtb r2, r3 - 800fb62: 683b ldr r3, [r7, #0] - 800fb64: 701a strb r2, [r3, #0] - aData[1] = (uint8_t)((CAN_RDL0R_DATA1 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA1_Pos); - 800fb66: 68fb ldr r3, [r7, #12] - 800fb68: 681a ldr r2, [r3, #0] - 800fb6a: 68bb ldr r3, [r7, #8] - 800fb6c: 011b lsls r3, r3, #4 - 800fb6e: 4413 add r3, r2 - 800fb70: f503 73dc add.w r3, r3, #440 @ 0x1b8 - 800fb74: 681b ldr r3, [r3, #0] - 800fb76: 0a1a lsrs r2, r3, #8 - 800fb78: 683b ldr r3, [r7, #0] - 800fb7a: 3301 adds r3, #1 - 800fb7c: b2d2 uxtb r2, r2 - 800fb7e: 701a strb r2, [r3, #0] - aData[2] = (uint8_t)((CAN_RDL0R_DATA2 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA2_Pos); - 800fb80: 68fb ldr r3, [r7, #12] - 800fb82: 681a ldr r2, [r3, #0] - 800fb84: 68bb ldr r3, [r7, #8] - 800fb86: 011b lsls r3, r3, #4 - 800fb88: 4413 add r3, r2 - 800fb8a: f503 73dc add.w r3, r3, #440 @ 0x1b8 - 800fb8e: 681b ldr r3, [r3, #0] - 800fb90: 0c1a lsrs r2, r3, #16 - 800fb92: 683b ldr r3, [r7, #0] - 800fb94: 3302 adds r3, #2 - 800fb96: b2d2 uxtb r2, r2 - 800fb98: 701a strb r2, [r3, #0] - aData[3] = (uint8_t)((CAN_RDL0R_DATA3 & hcan->Instance->sFIFOMailBox[RxFifo].RDLR) >> CAN_RDL0R_DATA3_Pos); - 800fb9a: 68fb ldr r3, [r7, #12] - 800fb9c: 681a ldr r2, [r3, #0] - 800fb9e: 68bb ldr r3, [r7, #8] - 800fba0: 011b lsls r3, r3, #4 - 800fba2: 4413 add r3, r2 - 800fba4: f503 73dc add.w r3, r3, #440 @ 0x1b8 - 800fba8: 681b ldr r3, [r3, #0] - 800fbaa: 0e1a lsrs r2, r3, #24 - 800fbac: 683b ldr r3, [r7, #0] - 800fbae: 3303 adds r3, #3 - 800fbb0: b2d2 uxtb r2, r2 - 800fbb2: 701a strb r2, [r3, #0] - aData[4] = (uint8_t)((CAN_RDH0R_DATA4 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA4_Pos); - 800fbb4: 68fb ldr r3, [r7, #12] - 800fbb6: 681a ldr r2, [r3, #0] - 800fbb8: 68bb ldr r3, [r7, #8] - 800fbba: 011b lsls r3, r3, #4 - 800fbbc: 4413 add r3, r2 - 800fbbe: f503 73de add.w r3, r3, #444 @ 0x1bc - 800fbc2: 681a ldr r2, [r3, #0] - 800fbc4: 683b ldr r3, [r7, #0] - 800fbc6: 3304 adds r3, #4 - 800fbc8: b2d2 uxtb r2, r2 - 800fbca: 701a strb r2, [r3, #0] - aData[5] = (uint8_t)((CAN_RDH0R_DATA5 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA5_Pos); - 800fbcc: 68fb ldr r3, [r7, #12] - 800fbce: 681a ldr r2, [r3, #0] - 800fbd0: 68bb ldr r3, [r7, #8] - 800fbd2: 011b lsls r3, r3, #4 - 800fbd4: 4413 add r3, r2 - 800fbd6: f503 73de add.w r3, r3, #444 @ 0x1bc - 800fbda: 681b ldr r3, [r3, #0] - 800fbdc: 0a1a lsrs r2, r3, #8 - 800fbde: 683b ldr r3, [r7, #0] - 800fbe0: 3305 adds r3, #5 - 800fbe2: b2d2 uxtb r2, r2 - 800fbe4: 701a strb r2, [r3, #0] - aData[6] = (uint8_t)((CAN_RDH0R_DATA6 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA6_Pos); - 800fbe6: 68fb ldr r3, [r7, #12] - 800fbe8: 681a ldr r2, [r3, #0] - 800fbea: 68bb ldr r3, [r7, #8] - 800fbec: 011b lsls r3, r3, #4 - 800fbee: 4413 add r3, r2 - 800fbf0: f503 73de add.w r3, r3, #444 @ 0x1bc - 800fbf4: 681b ldr r3, [r3, #0] - 800fbf6: 0c1a lsrs r2, r3, #16 - 800fbf8: 683b ldr r3, [r7, #0] - 800fbfa: 3306 adds r3, #6 - 800fbfc: b2d2 uxtb r2, r2 - 800fbfe: 701a strb r2, [r3, #0] - aData[7] = (uint8_t)((CAN_RDH0R_DATA7 & hcan->Instance->sFIFOMailBox[RxFifo].RDHR) >> CAN_RDH0R_DATA7_Pos); - 800fc00: 68fb ldr r3, [r7, #12] - 800fc02: 681a ldr r2, [r3, #0] - 800fc04: 68bb ldr r3, [r7, #8] - 800fc06: 011b lsls r3, r3, #4 - 800fc08: 4413 add r3, r2 - 800fc0a: f503 73de add.w r3, r3, #444 @ 0x1bc - 800fc0e: 681b ldr r3, [r3, #0] - 800fc10: 0e1a lsrs r2, r3, #24 - 800fc12: 683b ldr r3, [r7, #0] - 800fc14: 3307 adds r3, #7 - 800fc16: b2d2 uxtb r2, r2 - 800fc18: 701a strb r2, [r3, #0] - - /* Release the FIFO */ - if (RxFifo == CAN_RX_FIFO0) /* Rx element is assigned to Rx FIFO 0 */ - 800fc1a: 68bb ldr r3, [r7, #8] - 800fc1c: 2b00 cmp r3, #0 - 800fc1e: d108 bne.n 800fc32 - { - /* Release RX FIFO 0 */ - SET_BIT(hcan->Instance->RF0R, CAN_RF0R_RFOM0); - 800fc20: 68fb ldr r3, [r7, #12] - 800fc22: 681b ldr r3, [r3, #0] - 800fc24: 68da ldr r2, [r3, #12] - 800fc26: 68fb ldr r3, [r7, #12] - 800fc28: 681b ldr r3, [r3, #0] - 800fc2a: f042 0220 orr.w r2, r2, #32 - 800fc2e: 60da str r2, [r3, #12] - 800fc30: e007 b.n 800fc42 - } - else /* Rx element is assigned to Rx FIFO 1 */ - { - /* Release RX FIFO 1 */ - SET_BIT(hcan->Instance->RF1R, CAN_RF1R_RFOM1); - 800fc32: 68fb ldr r3, [r7, #12] - 800fc34: 681b ldr r3, [r3, #0] - 800fc36: 691a ldr r2, [r3, #16] - 800fc38: 68fb ldr r3, [r7, #12] - 800fc3a: 681b ldr r3, [r3, #0] - 800fc3c: f042 0220 orr.w r2, r2, #32 - 800fc40: 611a str r2, [r3, #16] - } - - /* Return function status */ - return HAL_OK; - 800fc42: 2300 movs r3, #0 - 800fc44: e006 b.n 800fc54 - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - 800fc46: 68fb ldr r3, [r7, #12] - 800fc48: 6a5b ldr r3, [r3, #36] @ 0x24 - 800fc4a: f443 2280 orr.w r2, r3, #262144 @ 0x40000 - 800fc4e: 68fb ldr r3, [r7, #12] - 800fc50: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800fc52: 2301 movs r3, #1 - } -} - 800fc54: 4618 mov r0, r3 - 800fc56: 371c adds r7, #28 - 800fc58: 46bd mov sp, r7 - 800fc5a: bc80 pop {r7} - 800fc5c: 4770 bx lr - -0800fc5e : - * @param ActiveITs indicates which interrupts will be enabled. - * This parameter can be any combination of @arg CAN_Interrupts. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CAN_ActivateNotification(CAN_HandleTypeDef *hcan, uint32_t ActiveITs) -{ - 800fc5e: b480 push {r7} - 800fc60: b085 sub sp, #20 - 800fc62: af00 add r7, sp, #0 - 800fc64: 6078 str r0, [r7, #4] - 800fc66: 6039 str r1, [r7, #0] - HAL_CAN_StateTypeDef state = hcan->State; - 800fc68: 687b ldr r3, [r7, #4] - 800fc6a: f893 3020 ldrb.w r3, [r3, #32] - 800fc6e: 73fb strb r3, [r7, #15] - - /* Check function parameters */ - assert_param(IS_CAN_IT(ActiveITs)); - - if ((state == HAL_CAN_STATE_READY) || - 800fc70: 7bfb ldrb r3, [r7, #15] - 800fc72: 2b01 cmp r3, #1 - 800fc74: d002 beq.n 800fc7c - 800fc76: 7bfb ldrb r3, [r7, #15] - 800fc78: 2b02 cmp r3, #2 - 800fc7a: d109 bne.n 800fc90 - (state == HAL_CAN_STATE_LISTENING)) - { - /* Enable the selected interrupts */ - __HAL_CAN_ENABLE_IT(hcan, ActiveITs); - 800fc7c: 687b ldr r3, [r7, #4] - 800fc7e: 681b ldr r3, [r3, #0] - 800fc80: 6959 ldr r1, [r3, #20] - 800fc82: 687b ldr r3, [r7, #4] - 800fc84: 681b ldr r3, [r3, #0] - 800fc86: 683a ldr r2, [r7, #0] - 800fc88: 430a orrs r2, r1 - 800fc8a: 615a str r2, [r3, #20] - - /* Return function status */ - return HAL_OK; - 800fc8c: 2300 movs r3, #0 - 800fc8e: e006 b.n 800fc9e - } - else - { - /* Update error code */ - hcan->ErrorCode |= HAL_CAN_ERROR_NOT_INITIALIZED; - 800fc90: 687b ldr r3, [r7, #4] - 800fc92: 6a5b ldr r3, [r3, #36] @ 0x24 - 800fc94: f443 2280 orr.w r2, r3, #262144 @ 0x40000 - 800fc98: 687b ldr r3, [r7, #4] - 800fc9a: 625a str r2, [r3, #36] @ 0x24 - - return HAL_ERROR; - 800fc9c: 2301 movs r3, #1 - } -} - 800fc9e: 4618 mov r0, r3 - 800fca0: 3714 adds r7, #20 - 800fca2: 46bd mov sp, r7 - 800fca4: bc80 pop {r7} - 800fca6: 4770 bx lr - -0800fca8 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -void HAL_CAN_IRQHandler(CAN_HandleTypeDef *hcan) -{ - 800fca8: b580 push {r7, lr} - 800fcaa: b08a sub sp, #40 @ 0x28 - 800fcac: af00 add r7, sp, #0 - 800fcae: 6078 str r0, [r7, #4] - uint32_t errorcode = HAL_CAN_ERROR_NONE; - 800fcb0: 2300 movs r3, #0 - 800fcb2: 627b str r3, [r7, #36] @ 0x24 - uint32_t interrupts = READ_REG(hcan->Instance->IER); - 800fcb4: 687b ldr r3, [r7, #4] - 800fcb6: 681b ldr r3, [r3, #0] - 800fcb8: 695b ldr r3, [r3, #20] - 800fcba: 623b str r3, [r7, #32] - uint32_t msrflags = READ_REG(hcan->Instance->MSR); - 800fcbc: 687b ldr r3, [r7, #4] - 800fcbe: 681b ldr r3, [r3, #0] - 800fcc0: 685b ldr r3, [r3, #4] - 800fcc2: 61fb str r3, [r7, #28] - uint32_t tsrflags = READ_REG(hcan->Instance->TSR); - 800fcc4: 687b ldr r3, [r7, #4] - 800fcc6: 681b ldr r3, [r3, #0] - 800fcc8: 689b ldr r3, [r3, #8] - 800fcca: 61bb str r3, [r7, #24] - uint32_t rf0rflags = READ_REG(hcan->Instance->RF0R); - 800fccc: 687b ldr r3, [r7, #4] - 800fcce: 681b ldr r3, [r3, #0] - 800fcd0: 68db ldr r3, [r3, #12] - 800fcd2: 617b str r3, [r7, #20] - uint32_t rf1rflags = READ_REG(hcan->Instance->RF1R); - 800fcd4: 687b ldr r3, [r7, #4] - 800fcd6: 681b ldr r3, [r3, #0] - 800fcd8: 691b ldr r3, [r3, #16] - 800fcda: 613b str r3, [r7, #16] - uint32_t esrflags = READ_REG(hcan->Instance->ESR); - 800fcdc: 687b ldr r3, [r7, #4] - 800fcde: 681b ldr r3, [r3, #0] - 800fce0: 699b ldr r3, [r3, #24] - 800fce2: 60fb str r3, [r7, #12] - - /* Transmit Mailbox empty interrupt management *****************************/ - if ((interrupts & CAN_IT_TX_MAILBOX_EMPTY) != 0U) - 800fce4: 6a3b ldr r3, [r7, #32] - 800fce6: f003 0301 and.w r3, r3, #1 - 800fcea: 2b00 cmp r3, #0 - 800fcec: d07c beq.n 800fde8 - { - /* Transmit Mailbox 0 management *****************************************/ - if ((tsrflags & CAN_TSR_RQCP0) != 0U) - 800fcee: 69bb ldr r3, [r7, #24] - 800fcf0: f003 0301 and.w r3, r3, #1 - 800fcf4: 2b00 cmp r3, #0 - 800fcf6: d023 beq.n 800fd40 - { - /* Clear the Transmission Complete flag (and TXOK0,ALST0,TERR0 bits) */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP0); - 800fcf8: 687b ldr r3, [r7, #4] - 800fcfa: 681b ldr r3, [r3, #0] - 800fcfc: 2201 movs r2, #1 - 800fcfe: 609a str r2, [r3, #8] - - if ((tsrflags & CAN_TSR_TXOK0) != 0U) - 800fd00: 69bb ldr r3, [r7, #24] - 800fd02: f003 0302 and.w r3, r3, #2 - 800fd06: 2b00 cmp r3, #0 - 800fd08: d003 beq.n 800fd12 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox0CompleteCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox0CompleteCallback(hcan); - 800fd0a: 6878 ldr r0, [r7, #4] - 800fd0c: f000 f983 bl 8010016 - 800fd10: e016 b.n 800fd40 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - else - { - if ((tsrflags & CAN_TSR_ALST0) != 0U) - 800fd12: 69bb ldr r3, [r7, #24] - 800fd14: f003 0304 and.w r3, r3, #4 - 800fd18: 2b00 cmp r3, #0 - 800fd1a: d004 beq.n 800fd26 - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_ALST0; - 800fd1c: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fd1e: f443 6300 orr.w r3, r3, #2048 @ 0x800 - 800fd22: 627b str r3, [r7, #36] @ 0x24 - 800fd24: e00c b.n 800fd40 - } - else if ((tsrflags & CAN_TSR_TERR0) != 0U) - 800fd26: 69bb ldr r3, [r7, #24] - 800fd28: f003 0308 and.w r3, r3, #8 - 800fd2c: 2b00 cmp r3, #0 - 800fd2e: d004 beq.n 800fd3a - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_TERR0; - 800fd30: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fd32: f443 5380 orr.w r3, r3, #4096 @ 0x1000 - 800fd36: 627b str r3, [r7, #36] @ 0x24 - 800fd38: e002 b.n 800fd40 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox0AbortCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox0AbortCallback(hcan); - 800fd3a: 6878 ldr r0, [r7, #4] - 800fd3c: f000 f986 bl 801004c - } - } - } - - /* Transmit Mailbox 1 management *****************************************/ - if ((tsrflags & CAN_TSR_RQCP1) != 0U) - 800fd40: 69bb ldr r3, [r7, #24] - 800fd42: f403 7380 and.w r3, r3, #256 @ 0x100 - 800fd46: 2b00 cmp r3, #0 - 800fd48: d024 beq.n 800fd94 - { - /* Clear the Transmission Complete flag (and TXOK1,ALST1,TERR1 bits) */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP1); - 800fd4a: 687b ldr r3, [r7, #4] - 800fd4c: 681b ldr r3, [r3, #0] - 800fd4e: f44f 7280 mov.w r2, #256 @ 0x100 - 800fd52: 609a str r2, [r3, #8] - - if ((tsrflags & CAN_TSR_TXOK1) != 0U) - 800fd54: 69bb ldr r3, [r7, #24] - 800fd56: f403 7300 and.w r3, r3, #512 @ 0x200 - 800fd5a: 2b00 cmp r3, #0 - 800fd5c: d003 beq.n 800fd66 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox1CompleteCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox1CompleteCallback(hcan); - 800fd5e: 6878 ldr r0, [r7, #4] - 800fd60: f000 f962 bl 8010028 - 800fd64: e016 b.n 800fd94 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - else - { - if ((tsrflags & CAN_TSR_ALST1) != 0U) - 800fd66: 69bb ldr r3, [r7, #24] - 800fd68: f403 6380 and.w r3, r3, #1024 @ 0x400 - 800fd6c: 2b00 cmp r3, #0 - 800fd6e: d004 beq.n 800fd7a - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_ALST1; - 800fd70: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fd72: f443 5300 orr.w r3, r3, #8192 @ 0x2000 - 800fd76: 627b str r3, [r7, #36] @ 0x24 - 800fd78: e00c b.n 800fd94 - } - else if ((tsrflags & CAN_TSR_TERR1) != 0U) - 800fd7a: 69bb ldr r3, [r7, #24] - 800fd7c: f403 6300 and.w r3, r3, #2048 @ 0x800 - 800fd80: 2b00 cmp r3, #0 - 800fd82: d004 beq.n 800fd8e - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_TERR1; - 800fd84: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fd86: f443 4380 orr.w r3, r3, #16384 @ 0x4000 - 800fd8a: 627b str r3, [r7, #36] @ 0x24 - 800fd8c: e002 b.n 800fd94 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox1AbortCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox1AbortCallback(hcan); - 800fd8e: 6878 ldr r0, [r7, #4] - 800fd90: f000 f965 bl 801005e - } - } - } - - /* Transmit Mailbox 2 management *****************************************/ - if ((tsrflags & CAN_TSR_RQCP2) != 0U) - 800fd94: 69bb ldr r3, [r7, #24] - 800fd96: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 800fd9a: 2b00 cmp r3, #0 - 800fd9c: d024 beq.n 800fde8 - { - /* Clear the Transmission Complete flag (and TXOK2,ALST2,TERR2 bits) */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_RQCP2); - 800fd9e: 687b ldr r3, [r7, #4] - 800fda0: 681b ldr r3, [r3, #0] - 800fda2: f44f 3280 mov.w r2, #65536 @ 0x10000 - 800fda6: 609a str r2, [r3, #8] - - if ((tsrflags & CAN_TSR_TXOK2) != 0U) - 800fda8: 69bb ldr r3, [r7, #24] - 800fdaa: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 800fdae: 2b00 cmp r3, #0 - 800fdb0: d003 beq.n 800fdba -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox2CompleteCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox2CompleteCallback(hcan); - 800fdb2: 6878 ldr r0, [r7, #4] - 800fdb4: f000 f941 bl 801003a - 800fdb8: e016 b.n 800fde8 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - else - { - if ((tsrflags & CAN_TSR_ALST2) != 0U) - 800fdba: 69bb ldr r3, [r7, #24] - 800fdbc: f403 2380 and.w r3, r3, #262144 @ 0x40000 - 800fdc0: 2b00 cmp r3, #0 - 800fdc2: d004 beq.n 800fdce - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_ALST2; - 800fdc4: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fdc6: f443 4300 orr.w r3, r3, #32768 @ 0x8000 - 800fdca: 627b str r3, [r7, #36] @ 0x24 - 800fdcc: e00c b.n 800fde8 - } - else if ((tsrflags & CAN_TSR_TERR2) != 0U) - 800fdce: 69bb ldr r3, [r7, #24] - 800fdd0: f403 2300 and.w r3, r3, #524288 @ 0x80000 - 800fdd4: 2b00 cmp r3, #0 - 800fdd6: d004 beq.n 800fde2 - { - /* Update error code */ - errorcode |= HAL_CAN_ERROR_TX_TERR2; - 800fdd8: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fdda: f443 3380 orr.w r3, r3, #65536 @ 0x10000 - 800fdde: 627b str r3, [r7, #36] @ 0x24 - 800fde0: e002 b.n 800fde8 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->TxMailbox2AbortCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_TxMailbox2AbortCallback(hcan); - 800fde2: 6878 ldr r0, [r7, #4] - 800fde4: f000 f944 bl 8010070 - } - } - } - - /* Receive FIFO 0 overrun interrupt management *****************************/ - if ((interrupts & CAN_IT_RX_FIFO0_OVERRUN) != 0U) - 800fde8: 6a3b ldr r3, [r7, #32] - 800fdea: f003 0308 and.w r3, r3, #8 - 800fdee: 2b00 cmp r3, #0 - 800fdf0: d00c beq.n 800fe0c - { - if ((rf0rflags & CAN_RF0R_FOVR0) != 0U) - 800fdf2: 697b ldr r3, [r7, #20] - 800fdf4: f003 0310 and.w r3, r3, #16 - 800fdf8: 2b00 cmp r3, #0 - 800fdfa: d007 beq.n 800fe0c - { - /* Set CAN error code to Rx Fifo 0 overrun error */ - errorcode |= HAL_CAN_ERROR_RX_FOV0; - 800fdfc: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fdfe: f443 7300 orr.w r3, r3, #512 @ 0x200 - 800fe02: 627b str r3, [r7, #36] @ 0x24 - - /* Clear FIFO0 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV0); - 800fe04: 687b ldr r3, [r7, #4] - 800fe06: 681b ldr r3, [r3, #0] - 800fe08: 2210 movs r2, #16 - 800fe0a: 60da str r2, [r3, #12] - } - } - - /* Receive FIFO 0 full interrupt management ********************************/ - if ((interrupts & CAN_IT_RX_FIFO0_FULL) != 0U) - 800fe0c: 6a3b ldr r3, [r7, #32] - 800fe0e: f003 0304 and.w r3, r3, #4 - 800fe12: 2b00 cmp r3, #0 - 800fe14: d00b beq.n 800fe2e - { - if ((rf0rflags & CAN_RF0R_FULL0) != 0U) - 800fe16: 697b ldr r3, [r7, #20] - 800fe18: f003 0308 and.w r3, r3, #8 - 800fe1c: 2b00 cmp r3, #0 - 800fe1e: d006 beq.n 800fe2e - { - /* Clear FIFO 0 full Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF0); - 800fe20: 687b ldr r3, [r7, #4] - 800fe22: 681b ldr r3, [r3, #0] - 800fe24: 2208 movs r2, #8 - 800fe26: 60da str r2, [r3, #12] -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->RxFifo0FullCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_RxFifo0FullCallback(hcan); - 800fe28: 6878 ldr r0, [r7, #4] - 800fe2a: f000 f92a bl 8010082 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* Receive FIFO 0 message pending interrupt management *********************/ - if ((interrupts & CAN_IT_RX_FIFO0_MSG_PENDING) != 0U) - 800fe2e: 6a3b ldr r3, [r7, #32] - 800fe30: f003 0302 and.w r3, r3, #2 - 800fe34: 2b00 cmp r3, #0 - 800fe36: d009 beq.n 800fe4c - { - /* Check if message is still pending */ - if ((hcan->Instance->RF0R & CAN_RF0R_FMP0) != 0U) - 800fe38: 687b ldr r3, [r7, #4] - 800fe3a: 681b ldr r3, [r3, #0] - 800fe3c: 68db ldr r3, [r3, #12] - 800fe3e: f003 0303 and.w r3, r3, #3 - 800fe42: 2b00 cmp r3, #0 - 800fe44: d002 beq.n 800fe4c -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->RxFifo0MsgPendingCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_RxFifo0MsgPendingCallback(hcan); - 800fe46: 6878 ldr r0, [r7, #4] - 800fe48: f7fb fda6 bl 800b998 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* Receive FIFO 1 overrun interrupt management *****************************/ - if ((interrupts & CAN_IT_RX_FIFO1_OVERRUN) != 0U) - 800fe4c: 6a3b ldr r3, [r7, #32] - 800fe4e: f003 0340 and.w r3, r3, #64 @ 0x40 - 800fe52: 2b00 cmp r3, #0 - 800fe54: d00c beq.n 800fe70 - { - if ((rf1rflags & CAN_RF1R_FOVR1) != 0U) - 800fe56: 693b ldr r3, [r7, #16] - 800fe58: f003 0310 and.w r3, r3, #16 - 800fe5c: 2b00 cmp r3, #0 - 800fe5e: d007 beq.n 800fe70 - { - /* Set CAN error code to Rx Fifo 1 overrun error */ - errorcode |= HAL_CAN_ERROR_RX_FOV1; - 800fe60: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fe62: f443 6380 orr.w r3, r3, #1024 @ 0x400 - 800fe66: 627b str r3, [r7, #36] @ 0x24 - - /* Clear FIFO1 Overrun Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FOV1); - 800fe68: 687b ldr r3, [r7, #4] - 800fe6a: 681b ldr r3, [r3, #0] - 800fe6c: 2210 movs r2, #16 - 800fe6e: 611a str r2, [r3, #16] - } - } - - /* Receive FIFO 1 full interrupt management ********************************/ - if ((interrupts & CAN_IT_RX_FIFO1_FULL) != 0U) - 800fe70: 6a3b ldr r3, [r7, #32] - 800fe72: f003 0320 and.w r3, r3, #32 - 800fe76: 2b00 cmp r3, #0 - 800fe78: d00b beq.n 800fe92 - { - if ((rf1rflags & CAN_RF1R_FULL1) != 0U) - 800fe7a: 693b ldr r3, [r7, #16] - 800fe7c: f003 0308 and.w r3, r3, #8 - 800fe80: 2b00 cmp r3, #0 - 800fe82: d006 beq.n 800fe92 - { - /* Clear FIFO 1 full Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_FF1); - 800fe84: 687b ldr r3, [r7, #4] - 800fe86: 681b ldr r3, [r3, #0] - 800fe88: 2208 movs r2, #8 - 800fe8a: 611a str r2, [r3, #16] -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->RxFifo1FullCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_RxFifo1FullCallback(hcan); - 800fe8c: 6878 ldr r0, [r7, #4] - 800fe8e: f000 f901 bl 8010094 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* Receive FIFO 1 message pending interrupt management *********************/ - if ((interrupts & CAN_IT_RX_FIFO1_MSG_PENDING) != 0U) - 800fe92: 6a3b ldr r3, [r7, #32] - 800fe94: f003 0310 and.w r3, r3, #16 - 800fe98: 2b00 cmp r3, #0 - 800fe9a: d009 beq.n 800feb0 - { - /* Check if message is still pending */ - if ((hcan->Instance->RF1R & CAN_RF1R_FMP1) != 0U) - 800fe9c: 687b ldr r3, [r7, #4] - 800fe9e: 681b ldr r3, [r3, #0] - 800fea0: 691b ldr r3, [r3, #16] - 800fea2: f003 0303 and.w r3, r3, #3 - 800fea6: 2b00 cmp r3, #0 - 800fea8: d002 beq.n 800feb0 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->RxFifo1MsgPendingCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_RxFifo1MsgPendingCallback(hcan); - 800feaa: 6878 ldr r0, [r7, #4] - 800feac: f7fc fb2c bl 800c508 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* Sleep interrupt management *********************************************/ - if ((interrupts & CAN_IT_SLEEP_ACK) != 0U) - 800feb0: 6a3b ldr r3, [r7, #32] - 800feb2: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 800feb6: 2b00 cmp r3, #0 - 800feb8: d00b beq.n 800fed2 - { - if ((msrflags & CAN_MSR_SLAKI) != 0U) - 800feba: 69fb ldr r3, [r7, #28] - 800febc: f003 0310 and.w r3, r3, #16 - 800fec0: 2b00 cmp r3, #0 - 800fec2: d006 beq.n 800fed2 - { - /* Clear Sleep interrupt Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_SLAKI); - 800fec4: 687b ldr r3, [r7, #4] - 800fec6: 681b ldr r3, [r3, #0] - 800fec8: 2210 movs r2, #16 - 800feca: 605a str r2, [r3, #4] -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->SleepCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_SleepCallback(hcan); - 800fecc: 6878 ldr r0, [r7, #4] - 800fece: f000 f8ea bl 80100a6 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* WakeUp interrupt management *********************************************/ - if ((interrupts & CAN_IT_WAKEUP) != 0U) - 800fed2: 6a3b ldr r3, [r7, #32] - 800fed4: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 800fed8: 2b00 cmp r3, #0 - 800feda: d00b beq.n 800fef4 - { - if ((msrflags & CAN_MSR_WKUI) != 0U) - 800fedc: 69fb ldr r3, [r7, #28] - 800fede: f003 0308 and.w r3, r3, #8 - 800fee2: 2b00 cmp r3, #0 - 800fee4: d006 beq.n 800fef4 - { - /* Clear WakeUp Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_WKU); - 800fee6: 687b ldr r3, [r7, #4] - 800fee8: 681b ldr r3, [r3, #0] - 800feea: 2208 movs r2, #8 - 800feec: 605a str r2, [r3, #4] -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->WakeUpFromRxMsgCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_WakeUpFromRxMsgCallback(hcan); - 800feee: 6878 ldr r0, [r7, #4] - 800fef0: f000 f8e2 bl 80100b8 -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } - } - - /* Error interrupts management *********************************************/ - if ((interrupts & CAN_IT_ERROR) != 0U) - 800fef4: 6a3b ldr r3, [r7, #32] - 800fef6: f403 4300 and.w r3, r3, #32768 @ 0x8000 - 800fefa: 2b00 cmp r3, #0 - 800fefc: d07b beq.n 800fff6 - { - if ((msrflags & CAN_MSR_ERRI) != 0U) - 800fefe: 69fb ldr r3, [r7, #28] - 800ff00: f003 0304 and.w r3, r3, #4 - 800ff04: 2b00 cmp r3, #0 - 800ff06: d072 beq.n 800ffee - { - /* Check Error Warning Flag */ - if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && - 800ff08: 6a3b ldr r3, [r7, #32] - 800ff0a: f403 7380 and.w r3, r3, #256 @ 0x100 - 800ff0e: 2b00 cmp r3, #0 - 800ff10: d008 beq.n 800ff24 - ((esrflags & CAN_ESR_EWGF) != 0U)) - 800ff12: 68fb ldr r3, [r7, #12] - 800ff14: f003 0301 and.w r3, r3, #1 - if (((interrupts & CAN_IT_ERROR_WARNING) != 0U) && - 800ff18: 2b00 cmp r3, #0 - 800ff1a: d003 beq.n 800ff24 - { - /* Set CAN error code to Error Warning */ - errorcode |= HAL_CAN_ERROR_EWG; - 800ff1c: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ff1e: f043 0301 orr.w r3, r3, #1 - 800ff22: 627b str r3, [r7, #36] @ 0x24 - - /* No need for clear of Error Warning Flag as read-only */ - } - - /* Check Error Passive Flag */ - if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && - 800ff24: 6a3b ldr r3, [r7, #32] - 800ff26: f403 7300 and.w r3, r3, #512 @ 0x200 - 800ff2a: 2b00 cmp r3, #0 - 800ff2c: d008 beq.n 800ff40 - ((esrflags & CAN_ESR_EPVF) != 0U)) - 800ff2e: 68fb ldr r3, [r7, #12] - 800ff30: f003 0302 and.w r3, r3, #2 - if (((interrupts & CAN_IT_ERROR_PASSIVE) != 0U) && - 800ff34: 2b00 cmp r3, #0 - 800ff36: d003 beq.n 800ff40 - { - /* Set CAN error code to Error Passive */ - errorcode |= HAL_CAN_ERROR_EPV; - 800ff38: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ff3a: f043 0302 orr.w r3, r3, #2 - 800ff3e: 627b str r3, [r7, #36] @ 0x24 - - /* No need for clear of Error Passive Flag as read-only */ - } - - /* Check Bus-off Flag */ - if (((interrupts & CAN_IT_BUSOFF) != 0U) && - 800ff40: 6a3b ldr r3, [r7, #32] - 800ff42: f403 6380 and.w r3, r3, #1024 @ 0x400 - 800ff46: 2b00 cmp r3, #0 - 800ff48: d008 beq.n 800ff5c - ((esrflags & CAN_ESR_BOFF) != 0U)) - 800ff4a: 68fb ldr r3, [r7, #12] - 800ff4c: f003 0304 and.w r3, r3, #4 - if (((interrupts & CAN_IT_BUSOFF) != 0U) && - 800ff50: 2b00 cmp r3, #0 - 800ff52: d003 beq.n 800ff5c - { - /* Set CAN error code to Bus-Off */ - errorcode |= HAL_CAN_ERROR_BOF; - 800ff54: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ff56: f043 0304 orr.w r3, r3, #4 - 800ff5a: 627b str r3, [r7, #36] @ 0x24 - - /* No need for clear of Error Bus-Off as read-only */ - } - - /* Check Last Error Code Flag */ - if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && - 800ff5c: 6a3b ldr r3, [r7, #32] - 800ff5e: f403 6300 and.w r3, r3, #2048 @ 0x800 - 800ff62: 2b00 cmp r3, #0 - 800ff64: d043 beq.n 800ffee - ((esrflags & CAN_ESR_LEC) != 0U)) - 800ff66: 68fb ldr r3, [r7, #12] - 800ff68: f003 0370 and.w r3, r3, #112 @ 0x70 - if (((interrupts & CAN_IT_LAST_ERROR_CODE) != 0U) && - 800ff6c: 2b00 cmp r3, #0 - 800ff6e: d03e beq.n 800ffee - { - switch (esrflags & CAN_ESR_LEC) - 800ff70: 68fb ldr r3, [r7, #12] - 800ff72: f003 0370 and.w r3, r3, #112 @ 0x70 - 800ff76: 2b60 cmp r3, #96 @ 0x60 - 800ff78: d02b beq.n 800ffd2 - 800ff7a: 2b60 cmp r3, #96 @ 0x60 - 800ff7c: d82e bhi.n 800ffdc - 800ff7e: 2b50 cmp r3, #80 @ 0x50 - 800ff80: d022 beq.n 800ffc8 - 800ff82: 2b50 cmp r3, #80 @ 0x50 - 800ff84: d82a bhi.n 800ffdc - 800ff86: 2b40 cmp r3, #64 @ 0x40 - 800ff88: d019 beq.n 800ffbe - 800ff8a: 2b40 cmp r3, #64 @ 0x40 - 800ff8c: d826 bhi.n 800ffdc - 800ff8e: 2b30 cmp r3, #48 @ 0x30 - 800ff90: d010 beq.n 800ffb4 - 800ff92: 2b30 cmp r3, #48 @ 0x30 - 800ff94: d822 bhi.n 800ffdc - 800ff96: 2b10 cmp r3, #16 - 800ff98: d002 beq.n 800ffa0 - 800ff9a: 2b20 cmp r3, #32 - 800ff9c: d005 beq.n 800ffaa - case (CAN_ESR_LEC_2 | CAN_ESR_LEC_1): - /* Set CAN error code to CRC error */ - errorcode |= HAL_CAN_ERROR_CRC; - break; - default: - break; - 800ff9e: e01d b.n 800ffdc - errorcode |= HAL_CAN_ERROR_STF; - 800ffa0: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffa2: f043 0308 orr.w r3, r3, #8 - 800ffa6: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffa8: e019 b.n 800ffde - errorcode |= HAL_CAN_ERROR_FOR; - 800ffaa: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffac: f043 0310 orr.w r3, r3, #16 - 800ffb0: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffb2: e014 b.n 800ffde - errorcode |= HAL_CAN_ERROR_ACK; - 800ffb4: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffb6: f043 0320 orr.w r3, r3, #32 - 800ffba: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffbc: e00f b.n 800ffde - errorcode |= HAL_CAN_ERROR_BR; - 800ffbe: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffc0: f043 0340 orr.w r3, r3, #64 @ 0x40 - 800ffc4: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffc6: e00a b.n 800ffde - errorcode |= HAL_CAN_ERROR_BD; - 800ffc8: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffca: f043 0380 orr.w r3, r3, #128 @ 0x80 - 800ffce: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffd0: e005 b.n 800ffde - errorcode |= HAL_CAN_ERROR_CRC; - 800ffd2: 6a7b ldr r3, [r7, #36] @ 0x24 - 800ffd4: f443 7380 orr.w r3, r3, #256 @ 0x100 - 800ffd8: 627b str r3, [r7, #36] @ 0x24 - break; - 800ffda: e000 b.n 800ffde - break; - 800ffdc: bf00 nop - } - - /* Clear Last error code Flag */ - CLEAR_BIT(hcan->Instance->ESR, CAN_ESR_LEC); - 800ffde: 687b ldr r3, [r7, #4] - 800ffe0: 681b ldr r3, [r3, #0] - 800ffe2: 699a ldr r2, [r3, #24] - 800ffe4: 687b ldr r3, [r7, #4] - 800ffe6: 681b ldr r3, [r3, #0] - 800ffe8: f022 0270 bic.w r2, r2, #112 @ 0x70 - 800ffec: 619a str r2, [r3, #24] - } - } - - /* Clear ERRI Flag */ - __HAL_CAN_CLEAR_FLAG(hcan, CAN_FLAG_ERRI); - 800ffee: 687b ldr r3, [r7, #4] - 800fff0: 681b ldr r3, [r3, #0] - 800fff2: 2204 movs r2, #4 - 800fff4: 605a str r2, [r3, #4] - } - - /* Call the Error call Back in case of Errors */ - if (errorcode != HAL_CAN_ERROR_NONE) - 800fff6: 6a7b ldr r3, [r7, #36] @ 0x24 - 800fff8: 2b00 cmp r3, #0 - 800fffa: d008 beq.n 801000e - { - /* Update error code in handle */ - hcan->ErrorCode |= errorcode; - 800fffc: 687b ldr r3, [r7, #4] - 800fffe: 6a5a ldr r2, [r3, #36] @ 0x24 - 8010000: 6a7b ldr r3, [r7, #36] @ 0x24 - 8010002: 431a orrs r2, r3 - 8010004: 687b ldr r3, [r7, #4] - 8010006: 625a str r2, [r3, #36] @ 0x24 -#if USE_HAL_CAN_REGISTER_CALLBACKS == 1 - /* Call registered callback*/ - hcan->ErrorCallback(hcan); -#else - /* Call weak (surcharged) callback */ - HAL_CAN_ErrorCallback(hcan); - 8010008: 6878 ldr r0, [r7, #4] - 801000a: f000 f85e bl 80100ca -#endif /* USE_HAL_CAN_REGISTER_CALLBACKS */ - } -} - 801000e: bf00 nop - 8010010: 3728 adds r7, #40 @ 0x28 - 8010012: 46bd mov sp, r7 - 8010014: bd80 pop {r7, pc} - -08010016 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan) -{ - 8010016: b480 push {r7} - 8010018: b083 sub sp, #12 - 801001a: af00 add r7, sp, #0 - 801001c: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox0CompleteCallback could be implemented in the - user file - */ -} - 801001e: bf00 nop - 8010020: 370c adds r7, #12 - 8010022: 46bd mov sp, r7 - 8010024: bc80 pop {r7} - 8010026: 4770 bx lr - -08010028 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox1CompleteCallback(CAN_HandleTypeDef *hcan) -{ - 8010028: b480 push {r7} - 801002a: b083 sub sp, #12 - 801002c: af00 add r7, sp, #0 - 801002e: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox1CompleteCallback could be implemented in the - user file - */ -} - 8010030: bf00 nop - 8010032: 370c adds r7, #12 - 8010034: 46bd mov sp, r7 - 8010036: bc80 pop {r7} - 8010038: 4770 bx lr - -0801003a : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox2CompleteCallback(CAN_HandleTypeDef *hcan) -{ - 801003a: b480 push {r7} - 801003c: b083 sub sp, #12 - 801003e: af00 add r7, sp, #0 - 8010040: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox2CompleteCallback could be implemented in the - user file - */ -} - 8010042: bf00 nop - 8010044: 370c adds r7, #12 - 8010046: 46bd mov sp, r7 - 8010048: bc80 pop {r7} - 801004a: 4770 bx lr - -0801004c : - * @param hcan pointer to an CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox0AbortCallback(CAN_HandleTypeDef *hcan) -{ - 801004c: b480 push {r7} - 801004e: b083 sub sp, #12 - 8010050: af00 add r7, sp, #0 - 8010052: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox0AbortCallback could be implemented in the - user file - */ -} - 8010054: bf00 nop - 8010056: 370c adds r7, #12 - 8010058: 46bd mov sp, r7 - 801005a: bc80 pop {r7} - 801005c: 4770 bx lr - -0801005e : - * @param hcan pointer to an CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox1AbortCallback(CAN_HandleTypeDef *hcan) -{ - 801005e: b480 push {r7} - 8010060: b083 sub sp, #12 - 8010062: af00 add r7, sp, #0 - 8010064: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox1AbortCallback could be implemented in the - user file - */ -} - 8010066: bf00 nop - 8010068: 370c adds r7, #12 - 801006a: 46bd mov sp, r7 - 801006c: bc80 pop {r7} - 801006e: 4770 bx lr - -08010070 : - * @param hcan pointer to an CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_TxMailbox2AbortCallback(CAN_HandleTypeDef *hcan) -{ - 8010070: b480 push {r7} - 8010072: b083 sub sp, #12 - 8010074: af00 add r7, sp, #0 - 8010076: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_TxMailbox2AbortCallback could be implemented in the - user file - */ -} - 8010078: bf00 nop - 801007a: 370c adds r7, #12 - 801007c: 46bd mov sp, r7 - 801007e: bc80 pop {r7} - 8010080: 4770 bx lr - -08010082 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_RxFifo0FullCallback(CAN_HandleTypeDef *hcan) -{ - 8010082: b480 push {r7} - 8010084: b083 sub sp, #12 - 8010086: af00 add r7, sp, #0 - 8010088: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxFifo0FullCallback could be implemented in the user - file - */ -} - 801008a: bf00 nop - 801008c: 370c adds r7, #12 - 801008e: 46bd mov sp, r7 - 8010090: bc80 pop {r7} - 8010092: 4770 bx lr - -08010094 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_RxFifo1FullCallback(CAN_HandleTypeDef *hcan) -{ - 8010094: b480 push {r7} - 8010096: b083 sub sp, #12 - 8010098: af00 add r7, sp, #0 - 801009a: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_RxFifo1FullCallback could be implemented in the user - file - */ -} - 801009c: bf00 nop - 801009e: 370c adds r7, #12 - 80100a0: 46bd mov sp, r7 - 80100a2: bc80 pop {r7} - 80100a4: 4770 bx lr - -080100a6 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_SleepCallback(CAN_HandleTypeDef *hcan) -{ - 80100a6: b480 push {r7} - 80100a8: b083 sub sp, #12 - 80100aa: af00 add r7, sp, #0 - 80100ac: 6078 str r0, [r7, #4] - UNUSED(hcan); - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_SleepCallback could be implemented in the user file - */ -} - 80100ae: bf00 nop - 80100b0: 370c adds r7, #12 - 80100b2: 46bd mov sp, r7 - 80100b4: bc80 pop {r7} - 80100b6: 4770 bx lr - -080100b8 : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_WakeUpFromRxMsgCallback(CAN_HandleTypeDef *hcan) -{ - 80100b8: b480 push {r7} - 80100ba: b083 sub sp, #12 - 80100bc: af00 add r7, sp, #0 - 80100be: 6078 str r0, [r7, #4] - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_WakeUpFromRxMsgCallback could be implemented in the - user file - */ -} - 80100c0: bf00 nop - 80100c2: 370c adds r7, #12 - 80100c4: 46bd mov sp, r7 - 80100c6: bc80 pop {r7} - 80100c8: 4770 bx lr - -080100ca : - * @param hcan pointer to a CAN_HandleTypeDef structure that contains - * the configuration information for the specified CAN. - * @retval None - */ -__weak void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan) -{ - 80100ca: b480 push {r7} - 80100cc: b083 sub sp, #12 - 80100ce: af00 add r7, sp, #0 - 80100d0: 6078 str r0, [r7, #4] - UNUSED(hcan); - - /* NOTE : This function Should not be modified, when the callback is needed, - the HAL_CAN_ErrorCallback could be implemented in the user file - */ -} - 80100d2: bf00 nop - 80100d4: 370c adds r7, #12 - 80100d6: 46bd mov sp, r7 - 80100d8: bc80 pop {r7} - 80100da: 4770 bx lr - -080100dc <__NVIC_SetPriorityGrouping>: -{ - 80100dc: b480 push {r7} - 80100de: b085 sub sp, #20 - 80100e0: af00 add r7, sp, #0 - 80100e2: 6078 str r0, [r7, #4] - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 80100e4: 687b ldr r3, [r7, #4] - 80100e6: f003 0307 and.w r3, r3, #7 - 80100ea: 60fb str r3, [r7, #12] - reg_value = SCB->AIRCR; /* read old register configuration */ - 80100ec: 4b0c ldr r3, [pc, #48] @ (8010120 <__NVIC_SetPriorityGrouping+0x44>) - 80100ee: 68db ldr r3, [r3, #12] - 80100f0: 60bb str r3, [r7, #8] - reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - 80100f2: 68ba ldr r2, [r7, #8] - 80100f4: f64f 03ff movw r3, #63743 @ 0xf8ff - 80100f8: 4013 ands r3, r2 - 80100fa: 60bb str r3, [r7, #8] - (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - 80100fc: 68fb ldr r3, [r7, #12] - 80100fe: 021a lsls r2, r3, #8 - ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - 8010100: 68bb ldr r3, [r7, #8] - 8010102: 4313 orrs r3, r2 - reg_value = (reg_value | - 8010104: f043 63bf orr.w r3, r3, #100139008 @ 0x5f80000 - 8010108: f443 3300 orr.w r3, r3, #131072 @ 0x20000 - 801010c: 60bb str r3, [r7, #8] - SCB->AIRCR = reg_value; - 801010e: 4a04 ldr r2, [pc, #16] @ (8010120 <__NVIC_SetPriorityGrouping+0x44>) - 8010110: 68bb ldr r3, [r7, #8] - 8010112: 60d3 str r3, [r2, #12] -} - 8010114: bf00 nop - 8010116: 3714 adds r7, #20 - 8010118: 46bd mov sp, r7 - 801011a: bc80 pop {r7} - 801011c: 4770 bx lr - 801011e: bf00 nop - 8010120: e000ed00 .word 0xe000ed00 - -08010124 <__NVIC_GetPriorityGrouping>: -{ - 8010124: b480 push {r7} - 8010126: af00 add r7, sp, #0 - return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); - 8010128: 4b04 ldr r3, [pc, #16] @ (801013c <__NVIC_GetPriorityGrouping+0x18>) - 801012a: 68db ldr r3, [r3, #12] - 801012c: 0a1b lsrs r3, r3, #8 - 801012e: f003 0307 and.w r3, r3, #7 -} - 8010132: 4618 mov r0, r3 - 8010134: 46bd mov sp, r7 - 8010136: bc80 pop {r7} - 8010138: 4770 bx lr - 801013a: bf00 nop - 801013c: e000ed00 .word 0xe000ed00 - -08010140 <__NVIC_EnableIRQ>: -{ - 8010140: b480 push {r7} - 8010142: b083 sub sp, #12 - 8010144: af00 add r7, sp, #0 - 8010146: 4603 mov r3, r0 - 8010148: 71fb strb r3, [r7, #7] - if ((int32_t)(IRQn) >= 0) - 801014a: f997 3007 ldrsb.w r3, [r7, #7] - 801014e: 2b00 cmp r3, #0 - 8010150: db0b blt.n 801016a <__NVIC_EnableIRQ+0x2a> - NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); - 8010152: 79fb ldrb r3, [r7, #7] - 8010154: f003 021f and.w r2, r3, #31 - 8010158: 4906 ldr r1, [pc, #24] @ (8010174 <__NVIC_EnableIRQ+0x34>) - 801015a: f997 3007 ldrsb.w r3, [r7, #7] - 801015e: 095b lsrs r3, r3, #5 - 8010160: 2001 movs r0, #1 - 8010162: fa00 f202 lsl.w r2, r0, r2 - 8010166: f841 2023 str.w r2, [r1, r3, lsl #2] -} - 801016a: bf00 nop - 801016c: 370c adds r7, #12 - 801016e: 46bd mov sp, r7 - 8010170: bc80 pop {r7} - 8010172: 4770 bx lr - 8010174: e000e100 .word 0xe000e100 - -08010178 <__NVIC_SetPriority>: -{ - 8010178: b480 push {r7} - 801017a: b083 sub sp, #12 - 801017c: af00 add r7, sp, #0 - 801017e: 4603 mov r3, r0 - 8010180: 6039 str r1, [r7, #0] - 8010182: 71fb strb r3, [r7, #7] - if ((int32_t)(IRQn) >= 0) - 8010184: f997 3007 ldrsb.w r3, [r7, #7] - 8010188: 2b00 cmp r3, #0 - 801018a: db0a blt.n 80101a2 <__NVIC_SetPriority+0x2a> - NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 801018c: 683b ldr r3, [r7, #0] - 801018e: b2da uxtb r2, r3 - 8010190: 490c ldr r1, [pc, #48] @ (80101c4 <__NVIC_SetPriority+0x4c>) - 8010192: f997 3007 ldrsb.w r3, [r7, #7] - 8010196: 0112 lsls r2, r2, #4 - 8010198: b2d2 uxtb r2, r2 - 801019a: 440b add r3, r1 - 801019c: f883 2300 strb.w r2, [r3, #768] @ 0x300 -} - 80101a0: e00a b.n 80101b8 <__NVIC_SetPriority+0x40> - SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 80101a2: 683b ldr r3, [r7, #0] - 80101a4: b2da uxtb r2, r3 - 80101a6: 4908 ldr r1, [pc, #32] @ (80101c8 <__NVIC_SetPriority+0x50>) - 80101a8: 79fb ldrb r3, [r7, #7] - 80101aa: f003 030f and.w r3, r3, #15 - 80101ae: 3b04 subs r3, #4 - 80101b0: 0112 lsls r2, r2, #4 - 80101b2: b2d2 uxtb r2, r2 - 80101b4: 440b add r3, r1 - 80101b6: 761a strb r2, [r3, #24] -} - 80101b8: bf00 nop - 80101ba: 370c adds r7, #12 - 80101bc: 46bd mov sp, r7 - 80101be: bc80 pop {r7} - 80101c0: 4770 bx lr - 80101c2: bf00 nop - 80101c4: e000e100 .word 0xe000e100 - 80101c8: e000ed00 .word 0xe000ed00 - -080101cc : -{ - 80101cc: b480 push {r7} - 80101ce: b089 sub sp, #36 @ 0x24 - 80101d0: af00 add r7, sp, #0 - 80101d2: 60f8 str r0, [r7, #12] - 80101d4: 60b9 str r1, [r7, #8] - 80101d6: 607a str r2, [r7, #4] - uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 80101d8: 68fb ldr r3, [r7, #12] - 80101da: f003 0307 and.w r3, r3, #7 - 80101de: 61fb str r3, [r7, #28] - PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - 80101e0: 69fb ldr r3, [r7, #28] - 80101e2: f1c3 0307 rsb r3, r3, #7 - 80101e6: 2b04 cmp r3, #4 - 80101e8: bf28 it cs - 80101ea: 2304 movcs r3, #4 - 80101ec: 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)); - 80101ee: 69fb ldr r3, [r7, #28] - 80101f0: 3304 adds r3, #4 - 80101f2: 2b06 cmp r3, #6 - 80101f4: d902 bls.n 80101fc - 80101f6: 69fb ldr r3, [r7, #28] - 80101f8: 3b03 subs r3, #3 - 80101fa: e000 b.n 80101fe - 80101fc: 2300 movs r3, #0 - 80101fe: 617b str r3, [r7, #20] - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8010200: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 8010204: 69bb ldr r3, [r7, #24] - 8010206: fa02 f303 lsl.w r3, r2, r3 - 801020a: 43da mvns r2, r3 - 801020c: 68bb ldr r3, [r7, #8] - 801020e: 401a ands r2, r3 - 8010210: 697b ldr r3, [r7, #20] - 8010212: 409a lsls r2, r3 - ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - 8010214: f04f 31ff mov.w r1, #4294967295 @ 0xffffffff - 8010218: 697b ldr r3, [r7, #20] - 801021a: fa01 f303 lsl.w r3, r1, r3 - 801021e: 43d9 mvns r1, r3 - 8010220: 687b ldr r3, [r7, #4] - 8010222: 400b ands r3, r1 - ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8010224: 4313 orrs r3, r2 -} - 8010226: 4618 mov r0, r3 - 8010228: 3724 adds r7, #36 @ 0x24 - 801022a: 46bd mov sp, r7 - 801022c: bc80 pop {r7} - 801022e: 4770 bx lr - -08010230 : - \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) -{ - 8010230: b580 push {r7, lr} - 8010232: b082 sub sp, #8 - 8010234: af00 add r7, sp, #0 - 8010236: 6078 str r0, [r7, #4] - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - 8010238: 687b ldr r3, [r7, #4] - 801023a: 3b01 subs r3, #1 - 801023c: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 - 8010240: d301 bcc.n 8010246 - { - return (1UL); /* Reload value impossible */ - 8010242: 2301 movs r3, #1 - 8010244: e00f b.n 8010266 - } - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - 8010246: 4a0a ldr r2, [pc, #40] @ (8010270 ) - 8010248: 687b ldr r3, [r7, #4] - 801024a: 3b01 subs r3, #1 - 801024c: 6053 str r3, [r2, #4] - NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - 801024e: 210f movs r1, #15 - 8010250: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8010254: f7ff ff90 bl 8010178 <__NVIC_SetPriority> - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - 8010258: 4b05 ldr r3, [pc, #20] @ (8010270 ) - 801025a: 2200 movs r2, #0 - 801025c: 609a str r2, [r3, #8] - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - 801025e: 4b04 ldr r3, [pc, #16] @ (8010270 ) - 8010260: 2207 movs r2, #7 - 8010262: 601a str r2, [r3, #0] - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - return (0UL); /* Function successful */ - 8010264: 2300 movs r3, #0 -} - 8010266: 4618 mov r0, r3 - 8010268: 3708 adds r7, #8 - 801026a: 46bd mov sp, r7 - 801026c: bd80 pop {r7, pc} - 801026e: bf00 nop - 8010270: e000e010 .word 0xe000e010 - -08010274 : - * @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) -{ - 8010274: b580 push {r7, lr} - 8010276: b082 sub sp, #8 - 8010278: af00 add r7, sp, #0 - 801027a: 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); - 801027c: 6878 ldr r0, [r7, #4] - 801027e: f7ff ff2d bl 80100dc <__NVIC_SetPriorityGrouping> -} - 8010282: bf00 nop - 8010284: 3708 adds r7, #8 - 8010286: 46bd mov sp, r7 - 8010288: bd80 pop {r7, pc} - -0801028a : - * 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) -{ - 801028a: b580 push {r7, lr} - 801028c: b086 sub sp, #24 - 801028e: af00 add r7, sp, #0 - 8010290: 4603 mov r3, r0 - 8010292: 60b9 str r1, [r7, #8] - 8010294: 607a str r2, [r7, #4] - 8010296: 73fb strb r3, [r7, #15] - uint32_t prioritygroup = 0x00U; - 8010298: 2300 movs r3, #0 - 801029a: 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(); - 801029c: f7ff ff42 bl 8010124 <__NVIC_GetPriorityGrouping> - 80102a0: 6178 str r0, [r7, #20] - - NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); - 80102a2: 687a ldr r2, [r7, #4] - 80102a4: 68b9 ldr r1, [r7, #8] - 80102a6: 6978 ldr r0, [r7, #20] - 80102a8: f7ff ff90 bl 80101cc - 80102ac: 4602 mov r2, r0 - 80102ae: f997 300f ldrsb.w r3, [r7, #15] - 80102b2: 4611 mov r1, r2 - 80102b4: 4618 mov r0, r3 - 80102b6: f7ff ff5f bl 8010178 <__NVIC_SetPriority> -} - 80102ba: bf00 nop - 80102bc: 3718 adds r7, #24 - 80102be: 46bd mov sp, r7 - 80102c0: bd80 pop {r7, pc} - -080102c2 : - * This parameter can be an enumerator of IRQn_Type enumeration - * (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h)) - * @retval None - */ -void HAL_NVIC_EnableIRQ(IRQn_Type IRQn) -{ - 80102c2: b580 push {r7, lr} - 80102c4: b082 sub sp, #8 - 80102c6: af00 add r7, sp, #0 - 80102c8: 4603 mov r3, r0 - 80102ca: 71fb strb r3, [r7, #7] - /* Check the parameters */ - assert_param(IS_NVIC_DEVICE_IRQ(IRQn)); - - /* Enable interrupt */ - NVIC_EnableIRQ(IRQn); - 80102cc: f997 3007 ldrsb.w r3, [r7, #7] - 80102d0: 4618 mov r0, r3 - 80102d2: f7ff ff35 bl 8010140 <__NVIC_EnableIRQ> -} - 80102d6: bf00 nop - 80102d8: 3708 adds r7, #8 - 80102da: 46bd mov sp, r7 - 80102dc: bd80 pop {r7, pc} - -080102de : - * @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) -{ - 80102de: b580 push {r7, lr} - 80102e0: b082 sub sp, #8 - 80102e2: af00 add r7, sp, #0 - 80102e4: 6078 str r0, [r7, #4] - return SysTick_Config(TicksNumb); - 80102e6: 6878 ldr r0, [r7, #4] - 80102e8: f7ff ffa2 bl 8010230 - 80102ec: 4603 mov r3, r0 -} - 80102ee: 4618 mov r0, r3 - 80102f0: 3708 adds r7, #8 - 80102f2: 46bd mov sp, r7 - 80102f4: bd80 pop {r7, pc} - -080102f6 : - * parameters in the CRC_InitTypeDef and create the associated handle. - * @param hcrc CRC handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_CRC_Init(CRC_HandleTypeDef *hcrc) -{ - 80102f6: b580 push {r7, lr} - 80102f8: b082 sub sp, #8 - 80102fa: af00 add r7, sp, #0 - 80102fc: 6078 str r0, [r7, #4] - /* Check the CRC handle allocation */ - if (hcrc == NULL) - 80102fe: 687b ldr r3, [r7, #4] - 8010300: 2b00 cmp r3, #0 - 8010302: d101 bne.n 8010308 - { - return HAL_ERROR; - 8010304: 2301 movs r3, #1 - 8010306: e00e b.n 8010326 - } - - /* Check the parameters */ - assert_param(IS_CRC_ALL_INSTANCE(hcrc->Instance)); - - if (hcrc->State == HAL_CRC_STATE_RESET) - 8010308: 687b ldr r3, [r7, #4] - 801030a: 795b ldrb r3, [r3, #5] - 801030c: b2db uxtb r3, r3 - 801030e: 2b00 cmp r3, #0 - 8010310: d105 bne.n 801031e - { - /* Allocate lock resource and initialize it */ - hcrc->Lock = HAL_UNLOCKED; - 8010312: 687b ldr r3, [r7, #4] - 8010314: 2200 movs r2, #0 - 8010316: 711a strb r2, [r3, #4] - /* Init the low level hardware */ - HAL_CRC_MspInit(hcrc); - 8010318: 6878 ldr r0, [r7, #4] - 801031a: f7fb f81f bl 800b35c - } - - /* Change CRC peripheral state */ - hcrc->State = HAL_CRC_STATE_READY; - 801031e: 687b ldr r3, [r7, #4] - 8010320: 2201 movs r2, #1 - 8010322: 715a strb r2, [r3, #5] - - /* Return function status */ - return HAL_OK; - 8010324: 2300 movs r3, #0 -} - 8010326: 4618 mov r0, r3 - 8010328: 3708 adds r7, #8 - 801032a: 46bd mov sp, r7 - 801032c: bd80 pop {r7, pc} - -0801032e : - * @param hdma: pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA Channel. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) -{ - 801032e: b480 push {r7} - 8010330: b085 sub sp, #20 - 8010332: af00 add r7, sp, #0 - 8010334: 6078 str r0, [r7, #4] - HAL_StatusTypeDef status = HAL_OK; - 8010336: 2300 movs r3, #0 - 8010338: 73fb strb r3, [r7, #15] - - if(hdma->State != HAL_DMA_STATE_BUSY) - 801033a: 687b ldr r3, [r7, #4] - 801033c: f893 3021 ldrb.w r3, [r3, #33] @ 0x21 - 8010340: b2db uxtb r3, r3 - 8010342: 2b02 cmp r3, #2 - 8010344: d008 beq.n 8010358 - { - /* no transfer ongoing */ - hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; - 8010346: 687b ldr r3, [r7, #4] - 8010348: 2204 movs r2, #4 - 801034a: 639a str r2, [r3, #56] @ 0x38 - - /* Process Unlocked */ - __HAL_UNLOCK(hdma); - 801034c: 687b ldr r3, [r7, #4] - 801034e: 2200 movs r2, #0 - 8010350: f883 2020 strb.w r2, [r3, #32] - - return HAL_ERROR; - 8010354: 2301 movs r3, #1 - 8010356: e020 b.n 801039a - } - else - - { - /* Disable DMA IT */ - __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); - 8010358: 687b ldr r3, [r7, #4] - 801035a: 681b ldr r3, [r3, #0] - 801035c: 681a ldr r2, [r3, #0] - 801035e: 687b ldr r3, [r7, #4] - 8010360: 681b ldr r3, [r3, #0] - 8010362: f022 020e bic.w r2, r2, #14 - 8010366: 601a str r2, [r3, #0] - - /* Disable the channel */ - __HAL_DMA_DISABLE(hdma); - 8010368: 687b ldr r3, [r7, #4] - 801036a: 681b ldr r3, [r3, #0] - 801036c: 681a ldr r2, [r3, #0] - 801036e: 687b ldr r3, [r7, #4] - 8010370: 681b ldr r3, [r3, #0] - 8010372: f022 0201 bic.w r2, r2, #1 - 8010376: 601a str r2, [r3, #0] - - /* Clear all flags */ - hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex); - 8010378: 687b ldr r3, [r7, #4] - 801037a: 6c1a ldr r2, [r3, #64] @ 0x40 - 801037c: 687b ldr r3, [r7, #4] - 801037e: 6bdb ldr r3, [r3, #60] @ 0x3c - 8010380: 2101 movs r1, #1 - 8010382: fa01 f202 lsl.w r2, r1, r2 - 8010386: 605a str r2, [r3, #4] - } - /* Change the DMA state */ - hdma->State = HAL_DMA_STATE_READY; - 8010388: 687b ldr r3, [r7, #4] - 801038a: 2201 movs r2, #1 - 801038c: f883 2021 strb.w r2, [r3, #33] @ 0x21 - - /* Process Unlocked */ - __HAL_UNLOCK(hdma); - 8010390: 687b ldr r3, [r7, #4] - 8010392: 2200 movs r2, #0 - 8010394: f883 2020 strb.w r2, [r3, #32] - - return status; - 8010398: 7bfb ldrb r3, [r7, #15] -} - 801039a: 4618 mov r0, r3 - 801039c: 3714 adds r7, #20 - 801039e: 46bd mov sp, r7 - 80103a0: bc80 pop {r7} - 80103a2: 4770 bx lr - -080103a4 : - * @param hdma : pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA Channel. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) -{ - 80103a4: b580 push {r7, lr} - 80103a6: b084 sub sp, #16 - 80103a8: af00 add r7, sp, #0 - 80103aa: 6078 str r0, [r7, #4] - HAL_StatusTypeDef status = HAL_OK; - 80103ac: 2300 movs r3, #0 - 80103ae: 73fb strb r3, [r7, #15] - - if(HAL_DMA_STATE_BUSY != hdma->State) - 80103b0: 687b ldr r3, [r7, #4] - 80103b2: f893 3021 ldrb.w r3, [r3, #33] @ 0x21 - 80103b6: b2db uxtb r3, r3 - 80103b8: 2b02 cmp r3, #2 - 80103ba: d005 beq.n 80103c8 - { - /* no transfer ongoing */ - hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER; - 80103bc: 687b ldr r3, [r7, #4] - 80103be: 2204 movs r2, #4 - 80103c0: 639a str r2, [r3, #56] @ 0x38 - - status = HAL_ERROR; - 80103c2: 2301 movs r3, #1 - 80103c4: 73fb strb r3, [r7, #15] - 80103c6: e0d6 b.n 8010576 - } - else - { - /* Disable DMA IT */ - __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE)); - 80103c8: 687b ldr r3, [r7, #4] - 80103ca: 681b ldr r3, [r3, #0] - 80103cc: 681a ldr r2, [r3, #0] - 80103ce: 687b ldr r3, [r7, #4] - 80103d0: 681b ldr r3, [r3, #0] - 80103d2: f022 020e bic.w r2, r2, #14 - 80103d6: 601a str r2, [r3, #0] - - /* Disable the channel */ - __HAL_DMA_DISABLE(hdma); - 80103d8: 687b ldr r3, [r7, #4] - 80103da: 681b ldr r3, [r3, #0] - 80103dc: 681a ldr r2, [r3, #0] - 80103de: 687b ldr r3, [r7, #4] - 80103e0: 681b ldr r3, [r3, #0] - 80103e2: f022 0201 bic.w r2, r2, #1 - 80103e6: 601a str r2, [r3, #0] - - /* Clear all flags */ - __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma)); - 80103e8: 687b ldr r3, [r7, #4] - 80103ea: 681b ldr r3, [r3, #0] - 80103ec: 461a mov r2, r3 - 80103ee: 4b64 ldr r3, [pc, #400] @ (8010580 ) - 80103f0: 429a cmp r2, r3 - 80103f2: d958 bls.n 80104a6 - 80103f4: 687b ldr r3, [r7, #4] - 80103f6: 681b ldr r3, [r3, #0] - 80103f8: 4a62 ldr r2, [pc, #392] @ (8010584 ) - 80103fa: 4293 cmp r3, r2 - 80103fc: d04f beq.n 801049e - 80103fe: 687b ldr r3, [r7, #4] - 8010400: 681b ldr r3, [r3, #0] - 8010402: 4a61 ldr r2, [pc, #388] @ (8010588 ) - 8010404: 4293 cmp r3, r2 - 8010406: d048 beq.n 801049a - 8010408: 687b ldr r3, [r7, #4] - 801040a: 681b ldr r3, [r3, #0] - 801040c: 4a5f ldr r2, [pc, #380] @ (801058c ) - 801040e: 4293 cmp r3, r2 - 8010410: d040 beq.n 8010494 - 8010412: 687b ldr r3, [r7, #4] - 8010414: 681b ldr r3, [r3, #0] - 8010416: 4a5e ldr r2, [pc, #376] @ (8010590 ) - 8010418: 4293 cmp r3, r2 - 801041a: d038 beq.n 801048e - 801041c: 687b ldr r3, [r7, #4] - 801041e: 681b ldr r3, [r3, #0] - 8010420: 4a5c ldr r2, [pc, #368] @ (8010594 ) - 8010422: 4293 cmp r3, r2 - 8010424: d030 beq.n 8010488 - 8010426: 687b ldr r3, [r7, #4] - 8010428: 681b ldr r3, [r3, #0] - 801042a: 4a5b ldr r2, [pc, #364] @ (8010598 ) - 801042c: 4293 cmp r3, r2 - 801042e: d028 beq.n 8010482 - 8010430: 687b ldr r3, [r7, #4] - 8010432: 681b ldr r3, [r3, #0] - 8010434: 4a52 ldr r2, [pc, #328] @ (8010580 ) - 8010436: 4293 cmp r3, r2 - 8010438: d020 beq.n 801047c - 801043a: 687b ldr r3, [r7, #4] - 801043c: 681b ldr r3, [r3, #0] - 801043e: 4a57 ldr r2, [pc, #348] @ (801059c ) - 8010440: 4293 cmp r3, r2 - 8010442: d019 beq.n 8010478 - 8010444: 687b ldr r3, [r7, #4] - 8010446: 681b ldr r3, [r3, #0] - 8010448: 4a55 ldr r2, [pc, #340] @ (80105a0 ) - 801044a: 4293 cmp r3, r2 - 801044c: d012 beq.n 8010474 - 801044e: 687b ldr r3, [r7, #4] - 8010450: 681b ldr r3, [r3, #0] - 8010452: 4a54 ldr r2, [pc, #336] @ (80105a4 ) - 8010454: 4293 cmp r3, r2 - 8010456: d00a beq.n 801046e - 8010458: 687b ldr r3, [r7, #4] - 801045a: 681b ldr r3, [r3, #0] - 801045c: 4a52 ldr r2, [pc, #328] @ (80105a8 ) - 801045e: 4293 cmp r3, r2 - 8010460: d102 bne.n 8010468 - 8010462: f44f 5380 mov.w r3, #4096 @ 0x1000 - 8010466: e01b b.n 80104a0 - 8010468: f44f 3380 mov.w r3, #65536 @ 0x10000 - 801046c: e018 b.n 80104a0 - 801046e: f44f 7380 mov.w r3, #256 @ 0x100 - 8010472: e015 b.n 80104a0 - 8010474: 2310 movs r3, #16 - 8010476: e013 b.n 80104a0 - 8010478: 2301 movs r3, #1 - 801047a: e011 b.n 80104a0 - 801047c: f04f 7380 mov.w r3, #16777216 @ 0x1000000 - 8010480: e00e b.n 80104a0 - 8010482: f44f 1380 mov.w r3, #1048576 @ 0x100000 - 8010486: e00b b.n 80104a0 - 8010488: f44f 3380 mov.w r3, #65536 @ 0x10000 - 801048c: e008 b.n 80104a0 - 801048e: f44f 5380 mov.w r3, #4096 @ 0x1000 - 8010492: e005 b.n 80104a0 - 8010494: f44f 7380 mov.w r3, #256 @ 0x100 - 8010498: e002 b.n 80104a0 - 801049a: 2310 movs r3, #16 - 801049c: e000 b.n 80104a0 - 801049e: 2301 movs r3, #1 - 80104a0: 4a42 ldr r2, [pc, #264] @ (80105ac ) - 80104a2: 6053 str r3, [r2, #4] - 80104a4: e057 b.n 8010556 - 80104a6: 687b ldr r3, [r7, #4] - 80104a8: 681b ldr r3, [r3, #0] - 80104aa: 4a36 ldr r2, [pc, #216] @ (8010584 ) - 80104ac: 4293 cmp r3, r2 - 80104ae: d04f beq.n 8010550 - 80104b0: 687b ldr r3, [r7, #4] - 80104b2: 681b ldr r3, [r3, #0] - 80104b4: 4a34 ldr r2, [pc, #208] @ (8010588 ) - 80104b6: 4293 cmp r3, r2 - 80104b8: d048 beq.n 801054c - 80104ba: 687b ldr r3, [r7, #4] - 80104bc: 681b ldr r3, [r3, #0] - 80104be: 4a33 ldr r2, [pc, #204] @ (801058c ) - 80104c0: 4293 cmp r3, r2 - 80104c2: d040 beq.n 8010546 - 80104c4: 687b ldr r3, [r7, #4] - 80104c6: 681b ldr r3, [r3, #0] - 80104c8: 4a31 ldr r2, [pc, #196] @ (8010590 ) - 80104ca: 4293 cmp r3, r2 - 80104cc: d038 beq.n 8010540 - 80104ce: 687b ldr r3, [r7, #4] - 80104d0: 681b ldr r3, [r3, #0] - 80104d2: 4a30 ldr r2, [pc, #192] @ (8010594 ) - 80104d4: 4293 cmp r3, r2 - 80104d6: d030 beq.n 801053a - 80104d8: 687b ldr r3, [r7, #4] - 80104da: 681b ldr r3, [r3, #0] - 80104dc: 4a2e ldr r2, [pc, #184] @ (8010598 ) - 80104de: 4293 cmp r3, r2 - 80104e0: d028 beq.n 8010534 - 80104e2: 687b ldr r3, [r7, #4] - 80104e4: 681b ldr r3, [r3, #0] - 80104e6: 4a26 ldr r2, [pc, #152] @ (8010580 ) - 80104e8: 4293 cmp r3, r2 - 80104ea: d020 beq.n 801052e - 80104ec: 687b ldr r3, [r7, #4] - 80104ee: 681b ldr r3, [r3, #0] - 80104f0: 4a2a ldr r2, [pc, #168] @ (801059c ) - 80104f2: 4293 cmp r3, r2 - 80104f4: d019 beq.n 801052a - 80104f6: 687b ldr r3, [r7, #4] - 80104f8: 681b ldr r3, [r3, #0] - 80104fa: 4a29 ldr r2, [pc, #164] @ (80105a0 ) - 80104fc: 4293 cmp r3, r2 - 80104fe: d012 beq.n 8010526 - 8010500: 687b ldr r3, [r7, #4] - 8010502: 681b ldr r3, [r3, #0] - 8010504: 4a27 ldr r2, [pc, #156] @ (80105a4 ) - 8010506: 4293 cmp r3, r2 - 8010508: d00a beq.n 8010520 - 801050a: 687b ldr r3, [r7, #4] - 801050c: 681b ldr r3, [r3, #0] - 801050e: 4a26 ldr r2, [pc, #152] @ (80105a8 ) - 8010510: 4293 cmp r3, r2 - 8010512: d102 bne.n 801051a - 8010514: f44f 5380 mov.w r3, #4096 @ 0x1000 - 8010518: e01b b.n 8010552 - 801051a: f44f 3380 mov.w r3, #65536 @ 0x10000 - 801051e: e018 b.n 8010552 - 8010520: f44f 7380 mov.w r3, #256 @ 0x100 - 8010524: e015 b.n 8010552 - 8010526: 2310 movs r3, #16 - 8010528: e013 b.n 8010552 - 801052a: 2301 movs r3, #1 - 801052c: e011 b.n 8010552 - 801052e: f04f 7380 mov.w r3, #16777216 @ 0x1000000 - 8010532: e00e b.n 8010552 - 8010534: f44f 1380 mov.w r3, #1048576 @ 0x100000 - 8010538: e00b b.n 8010552 - 801053a: f44f 3380 mov.w r3, #65536 @ 0x10000 - 801053e: e008 b.n 8010552 - 8010540: f44f 5380 mov.w r3, #4096 @ 0x1000 - 8010544: e005 b.n 8010552 - 8010546: f44f 7380 mov.w r3, #256 @ 0x100 - 801054a: e002 b.n 8010552 - 801054c: 2310 movs r3, #16 - 801054e: e000 b.n 8010552 - 8010550: 2301 movs r3, #1 - 8010552: 4a17 ldr r2, [pc, #92] @ (80105b0 ) - 8010554: 6053 str r3, [r2, #4] - - /* Change the DMA state */ - hdma->State = HAL_DMA_STATE_READY; - 8010556: 687b ldr r3, [r7, #4] - 8010558: 2201 movs r2, #1 - 801055a: f883 2021 strb.w r2, [r3, #33] @ 0x21 - - /* Process Unlocked */ - __HAL_UNLOCK(hdma); - 801055e: 687b ldr r3, [r7, #4] - 8010560: 2200 movs r2, #0 - 8010562: f883 2020 strb.w r2, [r3, #32] - - /* Call User Abort callback */ - if(hdma->XferAbortCallback != NULL) - 8010566: 687b ldr r3, [r7, #4] - 8010568: 6b5b ldr r3, [r3, #52] @ 0x34 - 801056a: 2b00 cmp r3, #0 - 801056c: d003 beq.n 8010576 - { - hdma->XferAbortCallback(hdma); - 801056e: 687b ldr r3, [r7, #4] - 8010570: 6b5b ldr r3, [r3, #52] @ 0x34 - 8010572: 6878 ldr r0, [r7, #4] - 8010574: 4798 blx r3 - } - } - return status; - 8010576: 7bfb ldrb r3, [r7, #15] -} - 8010578: 4618 mov r0, r3 - 801057a: 3710 adds r7, #16 - 801057c: 46bd mov sp, r7 - 801057e: bd80 pop {r7, pc} - 8010580: 40020080 .word 0x40020080 - 8010584: 40020008 .word 0x40020008 - 8010588: 4002001c .word 0x4002001c - 801058c: 40020030 .word 0x40020030 - 8010590: 40020044 .word 0x40020044 - 8010594: 40020058 .word 0x40020058 - 8010598: 4002006c .word 0x4002006c - 801059c: 40020408 .word 0x40020408 - 80105a0: 4002041c .word 0x4002041c - 80105a4: 40020430 .word 0x40020430 - 80105a8: 40020444 .word 0x40020444 - 80105ac: 40020400 .word 0x40020400 - 80105b0: 40020000 .word 0x40020000 - -080105b4 : - * @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) -{ - 80105b4: b480 push {r7} - 80105b6: b08b sub sp, #44 @ 0x2c - 80105b8: af00 add r7, sp, #0 - 80105ba: 6078 str r0, [r7, #4] - 80105bc: 6039 str r1, [r7, #0] - uint32_t position = 0x00u; - 80105be: 2300 movs r3, #0 - 80105c0: 627b str r3, [r7, #36] @ 0x24 - uint32_t ioposition; - uint32_t iocurrent; - uint32_t temp; - uint32_t config = 0x00u; - 80105c2: 2300 movs r3, #0 - 80105c4: 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) - 80105c6: e169 b.n 801089c - { - /* Get the IO position */ - ioposition = (0x01uL << position); - 80105c8: 2201 movs r2, #1 - 80105ca: 6a7b ldr r3, [r7, #36] @ 0x24 - 80105cc: fa02 f303 lsl.w r3, r2, r3 - 80105d0: 61fb str r3, [r7, #28] - - /* Get the current IO position */ - iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; - 80105d2: 683b ldr r3, [r7, #0] - 80105d4: 681b ldr r3, [r3, #0] - 80105d6: 69fa ldr r2, [r7, #28] - 80105d8: 4013 ands r3, r2 - 80105da: 61bb str r3, [r7, #24] - - if (iocurrent == ioposition) - 80105dc: 69ba ldr r2, [r7, #24] - 80105de: 69fb ldr r3, [r7, #28] - 80105e0: 429a cmp r2, r3 - 80105e2: f040 8158 bne.w 8010896 - { - /* 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) - 80105e6: 683b ldr r3, [r7, #0] - 80105e8: 685b ldr r3, [r3, #4] - 80105ea: 4a9a ldr r2, [pc, #616] @ (8010854 ) - 80105ec: 4293 cmp r3, r2 - 80105ee: d05e beq.n 80106ae - 80105f0: 4a98 ldr r2, [pc, #608] @ (8010854 ) - 80105f2: 4293 cmp r3, r2 - 80105f4: d875 bhi.n 80106e2 - 80105f6: 4a98 ldr r2, [pc, #608] @ (8010858 ) - 80105f8: 4293 cmp r3, r2 - 80105fa: d058 beq.n 80106ae - 80105fc: 4a96 ldr r2, [pc, #600] @ (8010858 ) - 80105fe: 4293 cmp r3, r2 - 8010600: d86f bhi.n 80106e2 - 8010602: 4a96 ldr r2, [pc, #600] @ (801085c ) - 8010604: 4293 cmp r3, r2 - 8010606: d052 beq.n 80106ae - 8010608: 4a94 ldr r2, [pc, #592] @ (801085c ) - 801060a: 4293 cmp r3, r2 - 801060c: d869 bhi.n 80106e2 - 801060e: 4a94 ldr r2, [pc, #592] @ (8010860 ) - 8010610: 4293 cmp r3, r2 - 8010612: d04c beq.n 80106ae - 8010614: 4a92 ldr r2, [pc, #584] @ (8010860 ) - 8010616: 4293 cmp r3, r2 - 8010618: d863 bhi.n 80106e2 - 801061a: 4a92 ldr r2, [pc, #584] @ (8010864 ) - 801061c: 4293 cmp r3, r2 - 801061e: d046 beq.n 80106ae - 8010620: 4a90 ldr r2, [pc, #576] @ (8010864 ) - 8010622: 4293 cmp r3, r2 - 8010624: d85d bhi.n 80106e2 - 8010626: 2b12 cmp r3, #18 - 8010628: d82a bhi.n 8010680 - 801062a: 2b12 cmp r3, #18 - 801062c: d859 bhi.n 80106e2 - 801062e: a201 add r2, pc, #4 @ (adr r2, 8010634 ) - 8010630: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8010634: 080106af .word 0x080106af - 8010638: 08010689 .word 0x08010689 - 801063c: 0801069b .word 0x0801069b - 8010640: 080106dd .word 0x080106dd - 8010644: 080106e3 .word 0x080106e3 - 8010648: 080106e3 .word 0x080106e3 - 801064c: 080106e3 .word 0x080106e3 - 8010650: 080106e3 .word 0x080106e3 - 8010654: 080106e3 .word 0x080106e3 - 8010658: 080106e3 .word 0x080106e3 - 801065c: 080106e3 .word 0x080106e3 - 8010660: 080106e3 .word 0x080106e3 - 8010664: 080106e3 .word 0x080106e3 - 8010668: 080106e3 .word 0x080106e3 - 801066c: 080106e3 .word 0x080106e3 - 8010670: 080106e3 .word 0x080106e3 - 8010674: 080106e3 .word 0x080106e3 - 8010678: 08010691 .word 0x08010691 - 801067c: 080106a5 .word 0x080106a5 - 8010680: 4a79 ldr r2, [pc, #484] @ (8010868 ) - 8010682: 4293 cmp r3, r2 - 8010684: d013 beq.n 80106ae - config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; - break; - - /* Parameters are checked with assert_param */ - default: - break; - 8010686: e02c b.n 80106e2 - config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; - 8010688: 683b ldr r3, [r7, #0] - 801068a: 68db ldr r3, [r3, #12] - 801068c: 623b str r3, [r7, #32] - break; - 801068e: e029 b.n 80106e4 - config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; - 8010690: 683b ldr r3, [r7, #0] - 8010692: 68db ldr r3, [r3, #12] - 8010694: 3304 adds r3, #4 - 8010696: 623b str r3, [r7, #32] - break; - 8010698: e024 b.n 80106e4 - config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; - 801069a: 683b ldr r3, [r7, #0] - 801069c: 68db ldr r3, [r3, #12] - 801069e: 3308 adds r3, #8 - 80106a0: 623b str r3, [r7, #32] - break; - 80106a2: e01f b.n 80106e4 - config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; - 80106a4: 683b ldr r3, [r7, #0] - 80106a6: 68db ldr r3, [r3, #12] - 80106a8: 330c adds r3, #12 - 80106aa: 623b str r3, [r7, #32] - break; - 80106ac: e01a b.n 80106e4 - if (GPIO_Init->Pull == GPIO_NOPULL) - 80106ae: 683b ldr r3, [r7, #0] - 80106b0: 689b ldr r3, [r3, #8] - 80106b2: 2b00 cmp r3, #0 - 80106b4: d102 bne.n 80106bc - config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; - 80106b6: 2304 movs r3, #4 - 80106b8: 623b str r3, [r7, #32] - break; - 80106ba: e013 b.n 80106e4 - else if (GPIO_Init->Pull == GPIO_PULLUP) - 80106bc: 683b ldr r3, [r7, #0] - 80106be: 689b ldr r3, [r3, #8] - 80106c0: 2b01 cmp r3, #1 - 80106c2: d105 bne.n 80106d0 - config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 80106c4: 2308 movs r3, #8 - 80106c6: 623b str r3, [r7, #32] - GPIOx->BSRR = ioposition; - 80106c8: 687b ldr r3, [r7, #4] - 80106ca: 69fa ldr r2, [r7, #28] - 80106cc: 611a str r2, [r3, #16] - break; - 80106ce: e009 b.n 80106e4 - config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 80106d0: 2308 movs r3, #8 - 80106d2: 623b str r3, [r7, #32] - GPIOx->BRR = ioposition; - 80106d4: 687b ldr r3, [r7, #4] - 80106d6: 69fa ldr r2, [r7, #28] - 80106d8: 615a str r2, [r3, #20] - break; - 80106da: e003 b.n 80106e4 - config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; - 80106dc: 2300 movs r3, #0 - 80106de: 623b str r3, [r7, #32] - break; - 80106e0: e000 b.n 80106e4 - break; - 80106e2: 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; - 80106e4: 69bb ldr r3, [r7, #24] - 80106e6: 2bff cmp r3, #255 @ 0xff - 80106e8: d801 bhi.n 80106ee - 80106ea: 687b ldr r3, [r7, #4] - 80106ec: e001 b.n 80106f2 - 80106ee: 687b ldr r3, [r7, #4] - 80106f0: 3304 adds r3, #4 - 80106f2: 617b str r3, [r7, #20] - registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); - 80106f4: 69bb ldr r3, [r7, #24] - 80106f6: 2bff cmp r3, #255 @ 0xff - 80106f8: d802 bhi.n 8010700 - 80106fa: 6a7b ldr r3, [r7, #36] @ 0x24 - 80106fc: 009b lsls r3, r3, #2 - 80106fe: e002 b.n 8010706 - 8010700: 6a7b ldr r3, [r7, #36] @ 0x24 - 8010702: 3b08 subs r3, #8 - 8010704: 009b lsls r3, r3, #2 - 8010706: 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)); - 8010708: 697b ldr r3, [r7, #20] - 801070a: 681a ldr r2, [r3, #0] - 801070c: 210f movs r1, #15 - 801070e: 693b ldr r3, [r7, #16] - 8010710: fa01 f303 lsl.w r3, r1, r3 - 8010714: 43db mvns r3, r3 - 8010716: 401a ands r2, r3 - 8010718: 6a39 ldr r1, [r7, #32] - 801071a: 693b ldr r3, [r7, #16] - 801071c: fa01 f303 lsl.w r3, r1, r3 - 8010720: 431a orrs r2, r3 - 8010722: 697b ldr r3, [r7, #20] - 8010724: 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) - 8010726: 683b ldr r3, [r7, #0] - 8010728: 685b ldr r3, [r3, #4] - 801072a: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 801072e: 2b00 cmp r3, #0 - 8010730: f000 80b1 beq.w 8010896 - { - /* Enable AFIO Clock */ - __HAL_RCC_AFIO_CLK_ENABLE(); - 8010734: 4b4d ldr r3, [pc, #308] @ (801086c ) - 8010736: 699b ldr r3, [r3, #24] - 8010738: 4a4c ldr r2, [pc, #304] @ (801086c ) - 801073a: f043 0301 orr.w r3, r3, #1 - 801073e: 6193 str r3, [r2, #24] - 8010740: 4b4a ldr r3, [pc, #296] @ (801086c ) - 8010742: 699b ldr r3, [r3, #24] - 8010744: f003 0301 and.w r3, r3, #1 - 8010748: 60bb str r3, [r7, #8] - 801074a: 68bb ldr r3, [r7, #8] - temp = AFIO->EXTICR[position >> 2u]; - 801074c: 4a48 ldr r2, [pc, #288] @ (8010870 ) - 801074e: 6a7b ldr r3, [r7, #36] @ 0x24 - 8010750: 089b lsrs r3, r3, #2 - 8010752: 3302 adds r3, #2 - 8010754: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8010758: 60fb str r3, [r7, #12] - CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); - 801075a: 6a7b ldr r3, [r7, #36] @ 0x24 - 801075c: f003 0303 and.w r3, r3, #3 - 8010760: 009b lsls r3, r3, #2 - 8010762: 220f movs r2, #15 - 8010764: fa02 f303 lsl.w r3, r2, r3 - 8010768: 43db mvns r3, r3 - 801076a: 68fa ldr r2, [r7, #12] - 801076c: 4013 ands r3, r2 - 801076e: 60fb str r3, [r7, #12] - SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); - 8010770: 687b ldr r3, [r7, #4] - 8010772: 4a40 ldr r2, [pc, #256] @ (8010874 ) - 8010774: 4293 cmp r3, r2 - 8010776: d013 beq.n 80107a0 - 8010778: 687b ldr r3, [r7, #4] - 801077a: 4a3f ldr r2, [pc, #252] @ (8010878 ) - 801077c: 4293 cmp r3, r2 - 801077e: d00d beq.n 801079c - 8010780: 687b ldr r3, [r7, #4] - 8010782: 4a3e ldr r2, [pc, #248] @ (801087c ) - 8010784: 4293 cmp r3, r2 - 8010786: d007 beq.n 8010798 - 8010788: 687b ldr r3, [r7, #4] - 801078a: 4a3d ldr r2, [pc, #244] @ (8010880 ) - 801078c: 4293 cmp r3, r2 - 801078e: d101 bne.n 8010794 - 8010790: 2303 movs r3, #3 - 8010792: e006 b.n 80107a2 - 8010794: 2304 movs r3, #4 - 8010796: e004 b.n 80107a2 - 8010798: 2302 movs r3, #2 - 801079a: e002 b.n 80107a2 - 801079c: 2301 movs r3, #1 - 801079e: e000 b.n 80107a2 - 80107a0: 2300 movs r3, #0 - 80107a2: 6a7a ldr r2, [r7, #36] @ 0x24 - 80107a4: f002 0203 and.w r2, r2, #3 - 80107a8: 0092 lsls r2, r2, #2 - 80107aa: 4093 lsls r3, r2 - 80107ac: 68fa ldr r2, [r7, #12] - 80107ae: 4313 orrs r3, r2 - 80107b0: 60fb str r3, [r7, #12] - AFIO->EXTICR[position >> 2u] = temp; - 80107b2: 492f ldr r1, [pc, #188] @ (8010870 ) - 80107b4: 6a7b ldr r3, [r7, #36] @ 0x24 - 80107b6: 089b lsrs r3, r3, #2 - 80107b8: 3302 adds r3, #2 - 80107ba: 68fa ldr r2, [r7, #12] - 80107bc: f841 2023 str.w r2, [r1, r3, lsl #2] - - - /* Enable or disable the rising trigger */ - if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) - 80107c0: 683b ldr r3, [r7, #0] - 80107c2: 685b ldr r3, [r3, #4] - 80107c4: f403 1380 and.w r3, r3, #1048576 @ 0x100000 - 80107c8: 2b00 cmp r3, #0 - 80107ca: d006 beq.n 80107da - { - SET_BIT(EXTI->RTSR, iocurrent); - 80107cc: 4b2d ldr r3, [pc, #180] @ (8010884 ) - 80107ce: 689a ldr r2, [r3, #8] - 80107d0: 492c ldr r1, [pc, #176] @ (8010884 ) - 80107d2: 69bb ldr r3, [r7, #24] - 80107d4: 4313 orrs r3, r2 - 80107d6: 608b str r3, [r1, #8] - 80107d8: e006 b.n 80107e8 - } - else - { - CLEAR_BIT(EXTI->RTSR, iocurrent); - 80107da: 4b2a ldr r3, [pc, #168] @ (8010884 ) - 80107dc: 689a ldr r2, [r3, #8] - 80107de: 69bb ldr r3, [r7, #24] - 80107e0: 43db mvns r3, r3 - 80107e2: 4928 ldr r1, [pc, #160] @ (8010884 ) - 80107e4: 4013 ands r3, r2 - 80107e6: 608b str r3, [r1, #8] - } - - /* Enable or disable the falling trigger */ - if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) - 80107e8: 683b ldr r3, [r7, #0] - 80107ea: 685b ldr r3, [r3, #4] - 80107ec: f403 1300 and.w r3, r3, #2097152 @ 0x200000 - 80107f0: 2b00 cmp r3, #0 - 80107f2: d006 beq.n 8010802 - { - SET_BIT(EXTI->FTSR, iocurrent); - 80107f4: 4b23 ldr r3, [pc, #140] @ (8010884 ) - 80107f6: 68da ldr r2, [r3, #12] - 80107f8: 4922 ldr r1, [pc, #136] @ (8010884 ) - 80107fa: 69bb ldr r3, [r7, #24] - 80107fc: 4313 orrs r3, r2 - 80107fe: 60cb str r3, [r1, #12] - 8010800: e006 b.n 8010810 - } - else - { - CLEAR_BIT(EXTI->FTSR, iocurrent); - 8010802: 4b20 ldr r3, [pc, #128] @ (8010884 ) - 8010804: 68da ldr r2, [r3, #12] - 8010806: 69bb ldr r3, [r7, #24] - 8010808: 43db mvns r3, r3 - 801080a: 491e ldr r1, [pc, #120] @ (8010884 ) - 801080c: 4013 ands r3, r2 - 801080e: 60cb str r3, [r1, #12] - } - - /* Configure the event mask */ - if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) - 8010810: 683b ldr r3, [r7, #0] - 8010812: 685b ldr r3, [r3, #4] - 8010814: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8010818: 2b00 cmp r3, #0 - 801081a: d006 beq.n 801082a - { - SET_BIT(EXTI->EMR, iocurrent); - 801081c: 4b19 ldr r3, [pc, #100] @ (8010884 ) - 801081e: 685a ldr r2, [r3, #4] - 8010820: 4918 ldr r1, [pc, #96] @ (8010884 ) - 8010822: 69bb ldr r3, [r7, #24] - 8010824: 4313 orrs r3, r2 - 8010826: 604b str r3, [r1, #4] - 8010828: e006 b.n 8010838 - } - else - { - CLEAR_BIT(EXTI->EMR, iocurrent); - 801082a: 4b16 ldr r3, [pc, #88] @ (8010884 ) - 801082c: 685a ldr r2, [r3, #4] - 801082e: 69bb ldr r3, [r7, #24] - 8010830: 43db mvns r3, r3 - 8010832: 4914 ldr r1, [pc, #80] @ (8010884 ) - 8010834: 4013 ands r3, r2 - 8010836: 604b str r3, [r1, #4] - } - - /* Configure the interrupt mask */ - if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) - 8010838: 683b ldr r3, [r7, #0] - 801083a: 685b ldr r3, [r3, #4] - 801083c: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8010840: 2b00 cmp r3, #0 - 8010842: d021 beq.n 8010888 - { - SET_BIT(EXTI->IMR, iocurrent); - 8010844: 4b0f ldr r3, [pc, #60] @ (8010884 ) - 8010846: 681a ldr r2, [r3, #0] - 8010848: 490e ldr r1, [pc, #56] @ (8010884 ) - 801084a: 69bb ldr r3, [r7, #24] - 801084c: 4313 orrs r3, r2 - 801084e: 600b str r3, [r1, #0] - 8010850: e021 b.n 8010896 - 8010852: bf00 nop - 8010854: 10320000 .word 0x10320000 - 8010858: 10310000 .word 0x10310000 - 801085c: 10220000 .word 0x10220000 - 8010860: 10210000 .word 0x10210000 - 8010864: 10120000 .word 0x10120000 - 8010868: 10110000 .word 0x10110000 - 801086c: 40021000 .word 0x40021000 - 8010870: 40010000 .word 0x40010000 - 8010874: 40010800 .word 0x40010800 - 8010878: 40010c00 .word 0x40010c00 - 801087c: 40011000 .word 0x40011000 - 8010880: 40011400 .word 0x40011400 - 8010884: 40010400 .word 0x40010400 - } - else - { - CLEAR_BIT(EXTI->IMR, iocurrent); - 8010888: 4b0b ldr r3, [pc, #44] @ (80108b8 ) - 801088a: 681a ldr r2, [r3, #0] - 801088c: 69bb ldr r3, [r7, #24] - 801088e: 43db mvns r3, r3 - 8010890: 4909 ldr r1, [pc, #36] @ (80108b8 ) - 8010892: 4013 ands r3, r2 - 8010894: 600b str r3, [r1, #0] - } - } - } - - position++; - 8010896: 6a7b ldr r3, [r7, #36] @ 0x24 - 8010898: 3301 adds r3, #1 - 801089a: 627b str r3, [r7, #36] @ 0x24 - while (((GPIO_Init->Pin) >> position) != 0x00u) - 801089c: 683b ldr r3, [r7, #0] - 801089e: 681a ldr r2, [r3, #0] - 80108a0: 6a7b ldr r3, [r7, #36] @ 0x24 - 80108a2: fa22 f303 lsr.w r3, r2, r3 - 80108a6: 2b00 cmp r3, #0 - 80108a8: f47f ae8e bne.w 80105c8 - } -} - 80108ac: bf00 nop - 80108ae: bf00 nop - 80108b0: 372c adds r7, #44 @ 0x2c - 80108b2: 46bd mov sp, r7 - 80108b4: bc80 pop {r7} - 80108b6: 4770 bx lr - 80108b8: 40010400 .word 0x40010400 - -080108bc : - * @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) -{ - 80108bc: b480 push {r7} - 80108be: b085 sub sp, #20 - 80108c0: af00 add r7, sp, #0 - 80108c2: 6078 str r0, [r7, #4] - 80108c4: 460b mov r3, r1 - 80108c6: 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) - 80108c8: 687b ldr r3, [r7, #4] - 80108ca: 689a ldr r2, [r3, #8] - 80108cc: 887b ldrh r3, [r7, #2] - 80108ce: 4013 ands r3, r2 - 80108d0: 2b00 cmp r3, #0 - 80108d2: d002 beq.n 80108da - { - bitstatus = GPIO_PIN_SET; - 80108d4: 2301 movs r3, #1 - 80108d6: 73fb strb r3, [r7, #15] - 80108d8: e001 b.n 80108de - } - else - { - bitstatus = GPIO_PIN_RESET; - 80108da: 2300 movs r3, #0 - 80108dc: 73fb strb r3, [r7, #15] - } - return bitstatus; - 80108de: 7bfb ldrb r3, [r7, #15] -} - 80108e0: 4618 mov r0, r3 - 80108e2: 3714 adds r7, #20 - 80108e4: 46bd mov sp, r7 - 80108e6: bc80 pop {r7} - 80108e8: 4770 bx lr - -080108ea : - * @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) -{ - 80108ea: b480 push {r7} - 80108ec: b083 sub sp, #12 - 80108ee: af00 add r7, sp, #0 - 80108f0: 6078 str r0, [r7, #4] - 80108f2: 460b mov r3, r1 - 80108f4: 807b strh r3, [r7, #2] - 80108f6: 4613 mov r3, r2 - 80108f8: 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) - 80108fa: 787b ldrb r3, [r7, #1] - 80108fc: 2b00 cmp r3, #0 - 80108fe: d003 beq.n 8010908 - { - GPIOx->BSRR = GPIO_Pin; - 8010900: 887a ldrh r2, [r7, #2] - 8010902: 687b ldr r3, [r7, #4] - 8010904: 611a str r2, [r3, #16] - } - else - { - GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; - } -} - 8010906: e003 b.n 8010910 - GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; - 8010908: 887b ldrh r3, [r7, #2] - 801090a: 041a lsls r2, r3, #16 - 801090c: 687b ldr r3, [r7, #4] - 801090e: 611a str r2, [r3, #16] -} - 8010910: bf00 nop - 8010912: 370c adds r7, #12 - 8010914: 46bd mov sp, r7 - 8010916: bc80 pop {r7} - 8010918: 4770 bx lr - ... - -0801091c : - * @note If the HSE divided by 128 is used as the RTC clock, the - * Backup Domain Access should be kept enabled. - * @retval None - */ -void HAL_PWR_EnableBkUpAccess(void) -{ - 801091c: b480 push {r7} - 801091e: af00 add r7, sp, #0 - /* Enable access to RTC and backup registers */ - *(__IO uint32_t *) CR_DBP_BB = (uint32_t)ENABLE; - 8010920: 4b03 ldr r3, [pc, #12] @ (8010930 ) - 8010922: 2201 movs r2, #1 - 8010924: 601a str r2, [r3, #0] -} - 8010926: bf00 nop - 8010928: 46bd mov sp, r7 - 801092a: bc80 pop {r7} - 801092c: 4770 bx lr - 801092e: bf00 nop - 8010930: 420e0020 .word 0x420e0020 - -08010934 : - * - Peripheral clocks - * - LSI, LSE and RTC clocks - * @retval HAL_StatusTypeDef - */ -HAL_StatusTypeDef HAL_RCC_DeInit(void) -{ - 8010934: b580 push {r7, lr} - 8010936: b082 sub sp, #8 - 8010938: af00 add r7, sp, #0 - uint32_t tickstart; - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 801093a: f7fd ffcf bl 800e8dc - 801093e: 6078 str r0, [r7, #4] - - /* Set HSION bit */ - SET_BIT(RCC->CR, RCC_CR_HSION); - 8010940: 4b60 ldr r3, [pc, #384] @ (8010ac4 ) - 8010942: 681b ldr r3, [r3, #0] - 8010944: 4a5f ldr r2, [pc, #380] @ (8010ac4 ) - 8010946: f043 0301 orr.w r3, r3, #1 - 801094a: 6013 str r3, [r2, #0] - - /* Wait till HSI is ready */ - while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) - 801094c: e008 b.n 8010960 - { - if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 801094e: f7fd ffc5 bl 800e8dc - 8010952: 4602 mov r2, r0 - 8010954: 687b ldr r3, [r7, #4] - 8010956: 1ad3 subs r3, r2, r3 - 8010958: 2b02 cmp r3, #2 - 801095a: d901 bls.n 8010960 - { - return HAL_TIMEOUT; - 801095c: 2303 movs r3, #3 - 801095e: e0ac b.n 8010aba - while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) - 8010960: 4b58 ldr r3, [pc, #352] @ (8010ac4 ) - 8010962: 681b ldr r3, [r3, #0] - 8010964: f003 0302 and.w r3, r3, #2 - 8010968: 2b00 cmp r3, #0 - 801096a: d0f0 beq.n 801094e - } - } - - /* Set HSITRIM bits to the reset value */ - MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (0x10U << RCC_CR_HSITRIM_Pos)); - 801096c: 4b55 ldr r3, [pc, #340] @ (8010ac4 ) - 801096e: 681b ldr r3, [r3, #0] - 8010970: f023 03f8 bic.w r3, r3, #248 @ 0xf8 - 8010974: 4a53 ldr r2, [pc, #332] @ (8010ac4 ) - 8010976: f043 0380 orr.w r3, r3, #128 @ 0x80 - 801097a: 6013 str r3, [r2, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 801097c: f7fd ffae bl 800e8dc - 8010980: 6078 str r0, [r7, #4] - - /* Reset CFGR register */ - CLEAR_REG(RCC->CFGR); - 8010982: 4b50 ldr r3, [pc, #320] @ (8010ac4 ) - 8010984: 2200 movs r2, #0 - 8010986: 605a str r2, [r3, #4] - - /* Wait till clock switch is ready */ - while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) - 8010988: e00a b.n 80109a0 - { - if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - 801098a: f7fd ffa7 bl 800e8dc - 801098e: 4602 mov r2, r0 - 8010990: 687b ldr r3, [r7, #4] - 8010992: 1ad3 subs r3, r2, r3 - 8010994: f241 3288 movw r2, #5000 @ 0x1388 - 8010998: 4293 cmp r3, r2 - 801099a: d901 bls.n 80109a0 - { - return HAL_TIMEOUT; - 801099c: 2303 movs r3, #3 - 801099e: e08c b.n 8010aba - while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) - 80109a0: 4b48 ldr r3, [pc, #288] @ (8010ac4 ) - 80109a2: 685b ldr r3, [r3, #4] - 80109a4: f003 030c and.w r3, r3, #12 - 80109a8: 2b00 cmp r3, #0 - 80109aa: d1ee bne.n 801098a - } - } - - /* Update the SystemCoreClock global variable */ - SystemCoreClock = HSI_VALUE; - 80109ac: 4b46 ldr r3, [pc, #280] @ (8010ac8 ) - 80109ae: 4a47 ldr r2, [pc, #284] @ (8010acc ) - 80109b0: 601a str r2, [r3, #0] - - /* Adapt Systick interrupt period */ - if (HAL_InitTick(uwTickPrio) != HAL_OK) - 80109b2: 4b47 ldr r3, [pc, #284] @ (8010ad0 ) - 80109b4: 681b ldr r3, [r3, #0] - 80109b6: 4618 mov r0, r3 - 80109b8: f7fd ff4e bl 800e858 - 80109bc: 4603 mov r3, r0 - 80109be: 2b00 cmp r3, #0 - 80109c0: d001 beq.n 80109c6 - { - return HAL_ERROR; - 80109c2: 2301 movs r3, #1 - 80109c4: e079 b.n 8010aba - } - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 80109c6: f7fd ff89 bl 800e8dc - 80109ca: 6078 str r0, [r7, #4] - - /* Second step is to clear PLLON bit */ - CLEAR_BIT(RCC->CR, RCC_CR_PLLON); - 80109cc: 4b3d ldr r3, [pc, #244] @ (8010ac4 ) - 80109ce: 681b ldr r3, [r3, #0] - 80109d0: 4a3c ldr r2, [pc, #240] @ (8010ac4 ) - 80109d2: f023 7380 bic.w r3, r3, #16777216 @ 0x1000000 - 80109d6: 6013 str r3, [r2, #0] - - /* Wait till PLL is disabled */ - while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) - 80109d8: e008 b.n 80109ec - { - if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 80109da: f7fd ff7f bl 800e8dc - 80109de: 4602 mov r2, r0 - 80109e0: 687b ldr r3, [r7, #4] - 80109e2: 1ad3 subs r3, r2, r3 - 80109e4: 2b02 cmp r3, #2 - 80109e6: d901 bls.n 80109ec - { - return HAL_TIMEOUT; - 80109e8: 2303 movs r3, #3 - 80109ea: e066 b.n 8010aba - while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) - 80109ec: 4b35 ldr r3, [pc, #212] @ (8010ac4 ) - 80109ee: 681b ldr r3, [r3, #0] - 80109f0: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 80109f4: 2b00 cmp r3, #0 - 80109f6: d1f0 bne.n 80109da - } - } - - /* Ensure to reset PLLSRC and PLLMUL bits */ - CLEAR_REG(RCC->CFGR); - 80109f8: 4b32 ldr r3, [pc, #200] @ (8010ac4 ) - 80109fa: 2200 movs r2, #0 - 80109fc: 605a str r2, [r3, #4] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 80109fe: f7fd ff6d bl 800e8dc - 8010a02: 6078 str r0, [r7, #4] - - /* Reset HSEON & CSSON bits */ - CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON); - 8010a04: 4b2f ldr r3, [pc, #188] @ (8010ac4 ) - 8010a06: 681b ldr r3, [r3, #0] - 8010a08: 4a2e ldr r2, [pc, #184] @ (8010ac4 ) - 8010a0a: f423 2310 bic.w r3, r3, #589824 @ 0x90000 - 8010a0e: 6013 str r3, [r2, #0] - - /* Wait till HSE is disabled */ - while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) - 8010a10: e008 b.n 8010a24 - { - if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8010a12: f7fd ff63 bl 800e8dc - 8010a16: 4602 mov r2, r0 - 8010a18: 687b ldr r3, [r7, #4] - 8010a1a: 1ad3 subs r3, r2, r3 - 8010a1c: 2b64 cmp r3, #100 @ 0x64 - 8010a1e: d901 bls.n 8010a24 - { - return HAL_TIMEOUT; - 8010a20: 2303 movs r3, #3 - 8010a22: e04a b.n 8010aba - while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) - 8010a24: 4b27 ldr r3, [pc, #156] @ (8010ac4 ) - 8010a26: 681b ldr r3, [r3, #0] - 8010a28: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8010a2c: 2b00 cmp r3, #0 - 8010a2e: d1f0 bne.n 8010a12 - } - } - - /* Reset HSEBYP bit */ - CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP); - 8010a30: 4b24 ldr r3, [pc, #144] @ (8010ac4 ) - 8010a32: 681b ldr r3, [r3, #0] - 8010a34: 4a23 ldr r2, [pc, #140] @ (8010ac4 ) - 8010a36: f423 2380 bic.w r3, r3, #262144 @ 0x40000 - 8010a3a: 6013 str r3, [r2, #0] - -#if defined(RCC_PLL2_SUPPORT) - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010a3c: f7fd ff4e bl 800e8dc - 8010a40: 6078 str r0, [r7, #4] - - /* Clear PLL2ON bit */ - CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON); - 8010a42: 4b20 ldr r3, [pc, #128] @ (8010ac4 ) - 8010a44: 681b ldr r3, [r3, #0] - 8010a46: 4a1f ldr r2, [pc, #124] @ (8010ac4 ) - 8010a48: f023 6380 bic.w r3, r3, #67108864 @ 0x4000000 - 8010a4c: 6013 str r3, [r2, #0] - - /* Wait till PLL2 is disabled */ - while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) - 8010a4e: e008 b.n 8010a62 - { - if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) - 8010a50: f7fd ff44 bl 800e8dc - 8010a54: 4602 mov r2, r0 - 8010a56: 687b ldr r3, [r7, #4] - 8010a58: 1ad3 subs r3, r2, r3 - 8010a5a: 2b64 cmp r3, #100 @ 0x64 - 8010a5c: d901 bls.n 8010a62 - { - return HAL_TIMEOUT; - 8010a5e: 2303 movs r3, #3 - 8010a60: e02b b.n 8010aba - while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) - 8010a62: 4b18 ldr r3, [pc, #96] @ (8010ac4 ) - 8010a64: 681b ldr r3, [r3, #0] - 8010a66: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 8010a6a: 2b00 cmp r3, #0 - 8010a6c: d1f0 bne.n 8010a50 - } -#endif /* RCC_PLL2_SUPPORT */ - -#if defined(RCC_PLLI2S_SUPPORT) - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010a6e: f7fd ff35 bl 800e8dc - 8010a72: 6078 str r0, [r7, #4] - - /* Clear PLL3ON bit */ - CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON); - 8010a74: 4b13 ldr r3, [pc, #76] @ (8010ac4 ) - 8010a76: 681b ldr r3, [r3, #0] - 8010a78: 4a12 ldr r2, [pc, #72] @ (8010ac4 ) - 8010a7a: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 - 8010a7e: 6013 str r3, [r2, #0] - - /* Wait till PLL3 is disabled */ - while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) - 8010a80: e008 b.n 8010a94 - { - if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) - 8010a82: f7fd ff2b bl 800e8dc - 8010a86: 4602 mov r2, r0 - 8010a88: 687b ldr r3, [r7, #4] - 8010a8a: 1ad3 subs r3, r2, r3 - 8010a8c: 2b64 cmp r3, #100 @ 0x64 - 8010a8e: d901 bls.n 8010a94 - { - return HAL_TIMEOUT; - 8010a90: 2303 movs r3, #3 - 8010a92: e012 b.n 8010aba - while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) - 8010a94: 4b0b ldr r3, [pc, #44] @ (8010ac4 ) - 8010a96: 681b ldr r3, [r3, #0] - 8010a98: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 - 8010a9c: 2b00 cmp r3, #0 - 8010a9e: d1f0 bne.n 8010a82 - } -#endif /* RCC_PLLI2S_SUPPORT */ - -#if defined(RCC_CFGR2_PREDIV1) - /* Reset CFGR2 register */ - CLEAR_REG(RCC->CFGR2); - 8010aa0: 4b08 ldr r3, [pc, #32] @ (8010ac4 ) - 8010aa2: 2200 movs r2, #0 - 8010aa4: 62da str r2, [r3, #44] @ 0x2c -#endif /* RCC_CFGR2_PREDIV1 */ - - /* Reset all CSR flags */ - SET_BIT(RCC->CSR, RCC_CSR_RMVF); - 8010aa6: 4b07 ldr r3, [pc, #28] @ (8010ac4 ) - 8010aa8: 6a5b ldr r3, [r3, #36] @ 0x24 - 8010aaa: 4a06 ldr r2, [pc, #24] @ (8010ac4 ) - 8010aac: f043 7380 orr.w r3, r3, #16777216 @ 0x1000000 - 8010ab0: 6253 str r3, [r2, #36] @ 0x24 - - /* Disable all interrupts */ - CLEAR_REG(RCC->CIR); - 8010ab2: 4b04 ldr r3, [pc, #16] @ (8010ac4 ) - 8010ab4: 2200 movs r2, #0 - 8010ab6: 609a str r2, [r3, #8] - - return HAL_OK; - 8010ab8: 2300 movs r3, #0 -} - 8010aba: 4618 mov r0, r3 - 8010abc: 3708 adds r7, #8 - 8010abe: 46bd mov sp, r7 - 8010ac0: bd80 pop {r7, pc} - 8010ac2: bf00 nop - 8010ac4: 40021000 .word 0x40021000 - 8010ac8: 20000078 .word 0x20000078 - 8010acc: 007a1200 .word 0x007a1200 - 8010ad0: 2000007c .word 0x2000007c - -08010ad4 : - * 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) -{ - 8010ad4: b580 push {r7, lr} - 8010ad6: b086 sub sp, #24 - 8010ad8: af00 add r7, sp, #0 - 8010ada: 6078 str r0, [r7, #4] - uint32_t tickstart; - uint32_t pll_config; - - /* Check Null pointer */ - if (RCC_OscInitStruct == NULL) - 8010adc: 687b ldr r3, [r7, #4] - 8010ade: 2b00 cmp r3, #0 - 8010ae0: d101 bne.n 8010ae6 - { - return HAL_ERROR; - 8010ae2: 2301 movs r3, #1 - 8010ae4: e304 b.n 80110f0 - - /* Check the parameters */ - assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); - - /*------------------------------- HSE Configuration ------------------------*/ - if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) - 8010ae6: 687b ldr r3, [r7, #4] - 8010ae8: 681b ldr r3, [r3, #0] - 8010aea: f003 0301 and.w r3, r3, #1 - 8010aee: 2b00 cmp r3, #0 - 8010af0: f000 8087 beq.w 8010c02 - { - /* 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) - 8010af4: 4b92 ldr r3, [pc, #584] @ (8010d40 ) - 8010af6: 685b ldr r3, [r3, #4] - 8010af8: f003 030c and.w r3, r3, #12 - 8010afc: 2b04 cmp r3, #4 - 8010afe: d00c beq.n 8010b1a - || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) - 8010b00: 4b8f ldr r3, [pc, #572] @ (8010d40 ) - 8010b02: 685b ldr r3, [r3, #4] - 8010b04: f003 030c and.w r3, r3, #12 - 8010b08: 2b08 cmp r3, #8 - 8010b0a: d112 bne.n 8010b32 - 8010b0c: 4b8c ldr r3, [pc, #560] @ (8010d40 ) - 8010b0e: 685b ldr r3, [r3, #4] - 8010b10: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8010b14: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 8010b18: d10b bne.n 8010b32 - { - if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8010b1a: 4b89 ldr r3, [pc, #548] @ (8010d40 ) - 8010b1c: 681b ldr r3, [r3, #0] - 8010b1e: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8010b22: 2b00 cmp r3, #0 - 8010b24: d06c beq.n 8010c00 - 8010b26: 687b ldr r3, [r7, #4] - 8010b28: 689b ldr r3, [r3, #8] - 8010b2a: 2b00 cmp r3, #0 - 8010b2c: d168 bne.n 8010c00 - { - return HAL_ERROR; - 8010b2e: 2301 movs r3, #1 - 8010b30: e2de b.n 80110f0 - } - } - else - { - /* Set the new HSE configuration ---------------------------------------*/ - __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); - 8010b32: 687b ldr r3, [r7, #4] - 8010b34: 689b ldr r3, [r3, #8] - 8010b36: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 8010b3a: d106 bne.n 8010b4a - 8010b3c: 4b80 ldr r3, [pc, #512] @ (8010d40 ) - 8010b3e: 681b ldr r3, [r3, #0] - 8010b40: 4a7f ldr r2, [pc, #508] @ (8010d40 ) - 8010b42: f443 3380 orr.w r3, r3, #65536 @ 0x10000 - 8010b46: 6013 str r3, [r2, #0] - 8010b48: e02e b.n 8010ba8 - 8010b4a: 687b ldr r3, [r7, #4] - 8010b4c: 689b ldr r3, [r3, #8] - 8010b4e: 2b00 cmp r3, #0 - 8010b50: d10c bne.n 8010b6c - 8010b52: 4b7b ldr r3, [pc, #492] @ (8010d40 ) - 8010b54: 681b ldr r3, [r3, #0] - 8010b56: 4a7a ldr r2, [pc, #488] @ (8010d40 ) - 8010b58: f423 3380 bic.w r3, r3, #65536 @ 0x10000 - 8010b5c: 6013 str r3, [r2, #0] - 8010b5e: 4b78 ldr r3, [pc, #480] @ (8010d40 ) - 8010b60: 681b ldr r3, [r3, #0] - 8010b62: 4a77 ldr r2, [pc, #476] @ (8010d40 ) - 8010b64: f423 2380 bic.w r3, r3, #262144 @ 0x40000 - 8010b68: 6013 str r3, [r2, #0] - 8010b6a: e01d b.n 8010ba8 - 8010b6c: 687b ldr r3, [r7, #4] - 8010b6e: 689b ldr r3, [r3, #8] - 8010b70: f5b3 2fa0 cmp.w r3, #327680 @ 0x50000 - 8010b74: d10c bne.n 8010b90 - 8010b76: 4b72 ldr r3, [pc, #456] @ (8010d40 ) - 8010b78: 681b ldr r3, [r3, #0] - 8010b7a: 4a71 ldr r2, [pc, #452] @ (8010d40 ) - 8010b7c: f443 2380 orr.w r3, r3, #262144 @ 0x40000 - 8010b80: 6013 str r3, [r2, #0] - 8010b82: 4b6f ldr r3, [pc, #444] @ (8010d40 ) - 8010b84: 681b ldr r3, [r3, #0] - 8010b86: 4a6e ldr r2, [pc, #440] @ (8010d40 ) - 8010b88: f443 3380 orr.w r3, r3, #65536 @ 0x10000 - 8010b8c: 6013 str r3, [r2, #0] - 8010b8e: e00b b.n 8010ba8 - 8010b90: 4b6b ldr r3, [pc, #428] @ (8010d40 ) - 8010b92: 681b ldr r3, [r3, #0] - 8010b94: 4a6a ldr r2, [pc, #424] @ (8010d40 ) - 8010b96: f423 3380 bic.w r3, r3, #65536 @ 0x10000 - 8010b9a: 6013 str r3, [r2, #0] - 8010b9c: 4b68 ldr r3, [pc, #416] @ (8010d40 ) - 8010b9e: 681b ldr r3, [r3, #0] - 8010ba0: 4a67 ldr r2, [pc, #412] @ (8010d40 ) - 8010ba2: f423 2380 bic.w r3, r3, #262144 @ 0x40000 - 8010ba6: 6013 str r3, [r2, #0] - - - /* Check the HSE State */ - if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF) - 8010ba8: 687b ldr r3, [r7, #4] - 8010baa: 689b ldr r3, [r3, #8] - 8010bac: 2b00 cmp r3, #0 - 8010bae: d013 beq.n 8010bd8 - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010bb0: f7fd fe94 bl 800e8dc - 8010bb4: 6138 str r0, [r7, #16] - - /* Wait till HSE is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8010bb6: e008 b.n 8010bca - { - if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8010bb8: f7fd fe90 bl 800e8dc - 8010bbc: 4602 mov r2, r0 - 8010bbe: 693b ldr r3, [r7, #16] - 8010bc0: 1ad3 subs r3, r2, r3 - 8010bc2: 2b64 cmp r3, #100 @ 0x64 - 8010bc4: d901 bls.n 8010bca - { - return HAL_TIMEOUT; - 8010bc6: 2303 movs r3, #3 - 8010bc8: e292 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8010bca: 4b5d ldr r3, [pc, #372] @ (8010d40 ) - 8010bcc: 681b ldr r3, [r3, #0] - 8010bce: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8010bd2: 2b00 cmp r3, #0 - 8010bd4: d0f0 beq.n 8010bb8 - 8010bd6: e014 b.n 8010c02 - } - } - else - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010bd8: f7fd fe80 bl 800e8dc - 8010bdc: 6138 str r0, [r7, #16] - - /* Wait till HSE is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8010bde: e008 b.n 8010bf2 - { - if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8010be0: f7fd fe7c bl 800e8dc - 8010be4: 4602 mov r2, r0 - 8010be6: 693b ldr r3, [r7, #16] - 8010be8: 1ad3 subs r3, r2, r3 - 8010bea: 2b64 cmp r3, #100 @ 0x64 - 8010bec: d901 bls.n 8010bf2 - { - return HAL_TIMEOUT; - 8010bee: 2303 movs r3, #3 - 8010bf0: e27e b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8010bf2: 4b53 ldr r3, [pc, #332] @ (8010d40 ) - 8010bf4: 681b ldr r3, [r3, #0] - 8010bf6: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8010bfa: 2b00 cmp r3, #0 - 8010bfc: d1f0 bne.n 8010be0 - 8010bfe: e000 b.n 8010c02 - if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8010c00: bf00 nop - } - } - } - } - /*----------------------------- HSI Configuration --------------------------*/ - if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) - 8010c02: 687b ldr r3, [r7, #4] - 8010c04: 681b ldr r3, [r3, #0] - 8010c06: f003 0302 and.w r3, r3, #2 - 8010c0a: 2b00 cmp r3, #0 - 8010c0c: d063 beq.n 8010cd6 - /* 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) - 8010c0e: 4b4c ldr r3, [pc, #304] @ (8010d40 ) - 8010c10: 685b ldr r3, [r3, #4] - 8010c12: f003 030c and.w r3, r3, #12 - 8010c16: 2b00 cmp r3, #0 - 8010c18: d00b beq.n 8010c32 - || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) - 8010c1a: 4b49 ldr r3, [pc, #292] @ (8010d40 ) - 8010c1c: 685b ldr r3, [r3, #4] - 8010c1e: f003 030c and.w r3, r3, #12 - 8010c22: 2b08 cmp r3, #8 - 8010c24: d11c bne.n 8010c60 - 8010c26: 4b46 ldr r3, [pc, #280] @ (8010d40 ) - 8010c28: 685b ldr r3, [r3, #4] - 8010c2a: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8010c2e: 2b00 cmp r3, #0 - 8010c30: d116 bne.n 8010c60 - { - /* 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)) - 8010c32: 4b43 ldr r3, [pc, #268] @ (8010d40 ) - 8010c34: 681b ldr r3, [r3, #0] - 8010c36: f003 0302 and.w r3, r3, #2 - 8010c3a: 2b00 cmp r3, #0 - 8010c3c: d005 beq.n 8010c4a - 8010c3e: 687b ldr r3, [r7, #4] - 8010c40: 695b ldr r3, [r3, #20] - 8010c42: 2b01 cmp r3, #1 - 8010c44: d001 beq.n 8010c4a - { - return HAL_ERROR; - 8010c46: 2301 movs r3, #1 - 8010c48: e252 b.n 80110f0 - } - /* Otherwise, just the calibration is allowed */ - else - { - /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ - __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8010c4a: 4b3d ldr r3, [pc, #244] @ (8010d40 ) - 8010c4c: 681b ldr r3, [r3, #0] - 8010c4e: f023 02f8 bic.w r2, r3, #248 @ 0xf8 - 8010c52: 687b ldr r3, [r7, #4] - 8010c54: 699b ldr r3, [r3, #24] - 8010c56: 00db lsls r3, r3, #3 - 8010c58: 4939 ldr r1, [pc, #228] @ (8010d40 ) - 8010c5a: 4313 orrs r3, r2 - 8010c5c: 600b str r3, [r1, #0] - if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 8010c5e: e03a b.n 8010cd6 - } - } - else - { - /* Check the HSI State */ - if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) - 8010c60: 687b ldr r3, [r7, #4] - 8010c62: 695b ldr r3, [r3, #20] - 8010c64: 2b00 cmp r3, #0 - 8010c66: d020 beq.n 8010caa - { - /* Enable the Internal High Speed oscillator (HSI). */ - __HAL_RCC_HSI_ENABLE(); - 8010c68: 4b36 ldr r3, [pc, #216] @ (8010d44 ) - 8010c6a: 2201 movs r2, #1 - 8010c6c: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010c6e: f7fd fe35 bl 800e8dc - 8010c72: 6138 str r0, [r7, #16] - - /* Wait till HSI is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8010c74: e008 b.n 8010c88 - { - if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8010c76: f7fd fe31 bl 800e8dc - 8010c7a: 4602 mov r2, r0 - 8010c7c: 693b ldr r3, [r7, #16] - 8010c7e: 1ad3 subs r3, r2, r3 - 8010c80: 2b02 cmp r3, #2 - 8010c82: d901 bls.n 8010c88 - { - return HAL_TIMEOUT; - 8010c84: 2303 movs r3, #3 - 8010c86: e233 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8010c88: 4b2d ldr r3, [pc, #180] @ (8010d40 ) - 8010c8a: 681b ldr r3, [r3, #0] - 8010c8c: f003 0302 and.w r3, r3, #2 - 8010c90: 2b00 cmp r3, #0 - 8010c92: d0f0 beq.n 8010c76 - } - } - - /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ - __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8010c94: 4b2a ldr r3, [pc, #168] @ (8010d40 ) - 8010c96: 681b ldr r3, [r3, #0] - 8010c98: f023 02f8 bic.w r2, r3, #248 @ 0xf8 - 8010c9c: 687b ldr r3, [r7, #4] - 8010c9e: 699b ldr r3, [r3, #24] - 8010ca0: 00db lsls r3, r3, #3 - 8010ca2: 4927 ldr r1, [pc, #156] @ (8010d40 ) - 8010ca4: 4313 orrs r3, r2 - 8010ca6: 600b str r3, [r1, #0] - 8010ca8: e015 b.n 8010cd6 - } - else - { - /* Disable the Internal High Speed oscillator (HSI). */ - __HAL_RCC_HSI_DISABLE(); - 8010caa: 4b26 ldr r3, [pc, #152] @ (8010d44 ) - 8010cac: 2200 movs r2, #0 - 8010cae: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010cb0: f7fd fe14 bl 800e8dc - 8010cb4: 6138 str r0, [r7, #16] - - /* Wait till HSI is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 8010cb6: e008 b.n 8010cca - { - if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8010cb8: f7fd fe10 bl 800e8dc - 8010cbc: 4602 mov r2, r0 - 8010cbe: 693b ldr r3, [r7, #16] - 8010cc0: 1ad3 subs r3, r2, r3 - 8010cc2: 2b02 cmp r3, #2 - 8010cc4: d901 bls.n 8010cca - { - return HAL_TIMEOUT; - 8010cc6: 2303 movs r3, #3 - 8010cc8: e212 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 8010cca: 4b1d ldr r3, [pc, #116] @ (8010d40 ) - 8010ccc: 681b ldr r3, [r3, #0] - 8010cce: f003 0302 and.w r3, r3, #2 - 8010cd2: 2b00 cmp r3, #0 - 8010cd4: d1f0 bne.n 8010cb8 - } - } - } - } - /*------------------------------ LSI Configuration -------------------------*/ - if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) - 8010cd6: 687b ldr r3, [r7, #4] - 8010cd8: 681b ldr r3, [r3, #0] - 8010cda: f003 0308 and.w r3, r3, #8 - 8010cde: 2b00 cmp r3, #0 - 8010ce0: d03a beq.n 8010d58 - { - /* Check the parameters */ - assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); - - /* Check the LSI State */ - if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF) - 8010ce2: 687b ldr r3, [r7, #4] - 8010ce4: 69db ldr r3, [r3, #28] - 8010ce6: 2b00 cmp r3, #0 - 8010ce8: d019 beq.n 8010d1e - { - /* Enable the Internal Low Speed oscillator (LSI). */ - __HAL_RCC_LSI_ENABLE(); - 8010cea: 4b17 ldr r3, [pc, #92] @ (8010d48 ) - 8010cec: 2201 movs r2, #1 - 8010cee: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010cf0: f7fd fdf4 bl 800e8dc - 8010cf4: 6138 str r0, [r7, #16] - - /* Wait till LSI is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 8010cf6: e008 b.n 8010d0a - { - if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 8010cf8: f7fd fdf0 bl 800e8dc - 8010cfc: 4602 mov r2, r0 - 8010cfe: 693b ldr r3, [r7, #16] - 8010d00: 1ad3 subs r3, r2, r3 - 8010d02: 2b02 cmp r3, #2 - 8010d04: d901 bls.n 8010d0a - { - return HAL_TIMEOUT; - 8010d06: 2303 movs r3, #3 - 8010d08: e1f2 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 8010d0a: 4b0d ldr r3, [pc, #52] @ (8010d40 ) - 8010d0c: 6a5b ldr r3, [r3, #36] @ 0x24 - 8010d0e: f003 0302 and.w r3, r3, #2 - 8010d12: 2b00 cmp r3, #0 - 8010d14: d0f0 beq.n 8010cf8 - } - } - /* To have a fully stabilized clock in the specified range, a software delay of 1ms - should be added.*/ - RCC_Delay(1); - 8010d16: 2001 movs r0, #1 - 8010d18: f000 fbca bl 80114b0 - 8010d1c: e01c b.n 8010d58 - } - else - { - /* Disable the Internal Low Speed oscillator (LSI). */ - __HAL_RCC_LSI_DISABLE(); - 8010d1e: 4b0a ldr r3, [pc, #40] @ (8010d48 ) - 8010d20: 2200 movs r2, #0 - 8010d22: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010d24: f7fd fdda bl 800e8dc - 8010d28: 6138 str r0, [r7, #16] - - /* Wait till LSI is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8010d2a: e00f b.n 8010d4c - { - if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 8010d2c: f7fd fdd6 bl 800e8dc - 8010d30: 4602 mov r2, r0 - 8010d32: 693b ldr r3, [r7, #16] - 8010d34: 1ad3 subs r3, r2, r3 - 8010d36: 2b02 cmp r3, #2 - 8010d38: d908 bls.n 8010d4c - { - return HAL_TIMEOUT; - 8010d3a: 2303 movs r3, #3 - 8010d3c: e1d8 b.n 80110f0 - 8010d3e: bf00 nop - 8010d40: 40021000 .word 0x40021000 - 8010d44: 42420000 .word 0x42420000 - 8010d48: 42420480 .word 0x42420480 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 8010d4c: 4b9b ldr r3, [pc, #620] @ (8010fbc ) - 8010d4e: 6a5b ldr r3, [r3, #36] @ 0x24 - 8010d50: f003 0302 and.w r3, r3, #2 - 8010d54: 2b00 cmp r3, #0 - 8010d56: d1e9 bne.n 8010d2c - } - } - } - } - /*------------------------------ LSE Configuration -------------------------*/ - if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) - 8010d58: 687b ldr r3, [r7, #4] - 8010d5a: 681b ldr r3, [r3, #0] - 8010d5c: f003 0304 and.w r3, r3, #4 - 8010d60: 2b00 cmp r3, #0 - 8010d62: f000 80a6 beq.w 8010eb2 - { - FlagStatus pwrclkchanged = RESET; - 8010d66: 2300 movs r3, #0 - 8010d68: 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()) - 8010d6a: 4b94 ldr r3, [pc, #592] @ (8010fbc ) - 8010d6c: 69db ldr r3, [r3, #28] - 8010d6e: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8010d72: 2b00 cmp r3, #0 - 8010d74: d10d bne.n 8010d92 - { - __HAL_RCC_PWR_CLK_ENABLE(); - 8010d76: 4b91 ldr r3, [pc, #580] @ (8010fbc ) - 8010d78: 69db ldr r3, [r3, #28] - 8010d7a: 4a90 ldr r2, [pc, #576] @ (8010fbc ) - 8010d7c: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 - 8010d80: 61d3 str r3, [r2, #28] - 8010d82: 4b8e ldr r3, [pc, #568] @ (8010fbc ) - 8010d84: 69db ldr r3, [r3, #28] - 8010d86: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8010d8a: 60bb str r3, [r7, #8] - 8010d8c: 68bb ldr r3, [r7, #8] - pwrclkchanged = SET; - 8010d8e: 2301 movs r3, #1 - 8010d90: 75fb strb r3, [r7, #23] - } - - if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8010d92: 4b8b ldr r3, [pc, #556] @ (8010fc0 ) - 8010d94: 681b ldr r3, [r3, #0] - 8010d96: f403 7380 and.w r3, r3, #256 @ 0x100 - 8010d9a: 2b00 cmp r3, #0 - 8010d9c: d118 bne.n 8010dd0 - { - /* Enable write access to Backup domain */ - SET_BIT(PWR->CR, PWR_CR_DBP); - 8010d9e: 4b88 ldr r3, [pc, #544] @ (8010fc0 ) - 8010da0: 681b ldr r3, [r3, #0] - 8010da2: 4a87 ldr r2, [pc, #540] @ (8010fc0 ) - 8010da4: f443 7380 orr.w r3, r3, #256 @ 0x100 - 8010da8: 6013 str r3, [r2, #0] - - /* Wait for Backup domain Write protection disable */ - tickstart = HAL_GetTick(); - 8010daa: f7fd fd97 bl 800e8dc - 8010dae: 6138 str r0, [r7, #16] - - while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8010db0: e008 b.n 8010dc4 - { - if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) - 8010db2: f7fd fd93 bl 800e8dc - 8010db6: 4602 mov r2, r0 - 8010db8: 693b ldr r3, [r7, #16] - 8010dba: 1ad3 subs r3, r2, r3 - 8010dbc: 2b64 cmp r3, #100 @ 0x64 - 8010dbe: d901 bls.n 8010dc4 - { - return HAL_TIMEOUT; - 8010dc0: 2303 movs r3, #3 - 8010dc2: e195 b.n 80110f0 - while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8010dc4: 4b7e ldr r3, [pc, #504] @ (8010fc0 ) - 8010dc6: 681b ldr r3, [r3, #0] - 8010dc8: f403 7380 and.w r3, r3, #256 @ 0x100 - 8010dcc: 2b00 cmp r3, #0 - 8010dce: d0f0 beq.n 8010db2 - } - } - } - - /* Set the new LSE configuration -----------------------------------------*/ - __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); - 8010dd0: 687b ldr r3, [r7, #4] - 8010dd2: 691b ldr r3, [r3, #16] - 8010dd4: 2b01 cmp r3, #1 - 8010dd6: d106 bne.n 8010de6 - 8010dd8: 4b78 ldr r3, [pc, #480] @ (8010fbc ) - 8010dda: 6a1b ldr r3, [r3, #32] - 8010ddc: 4a77 ldr r2, [pc, #476] @ (8010fbc ) - 8010dde: f043 0301 orr.w r3, r3, #1 - 8010de2: 6213 str r3, [r2, #32] - 8010de4: e02d b.n 8010e42 - 8010de6: 687b ldr r3, [r7, #4] - 8010de8: 691b ldr r3, [r3, #16] - 8010dea: 2b00 cmp r3, #0 - 8010dec: d10c bne.n 8010e08 - 8010dee: 4b73 ldr r3, [pc, #460] @ (8010fbc ) - 8010df0: 6a1b ldr r3, [r3, #32] - 8010df2: 4a72 ldr r2, [pc, #456] @ (8010fbc ) - 8010df4: f023 0301 bic.w r3, r3, #1 - 8010df8: 6213 str r3, [r2, #32] - 8010dfa: 4b70 ldr r3, [pc, #448] @ (8010fbc ) - 8010dfc: 6a1b ldr r3, [r3, #32] - 8010dfe: 4a6f ldr r2, [pc, #444] @ (8010fbc ) - 8010e00: f023 0304 bic.w r3, r3, #4 - 8010e04: 6213 str r3, [r2, #32] - 8010e06: e01c b.n 8010e42 - 8010e08: 687b ldr r3, [r7, #4] - 8010e0a: 691b ldr r3, [r3, #16] - 8010e0c: 2b05 cmp r3, #5 - 8010e0e: d10c bne.n 8010e2a - 8010e10: 4b6a ldr r3, [pc, #424] @ (8010fbc ) - 8010e12: 6a1b ldr r3, [r3, #32] - 8010e14: 4a69 ldr r2, [pc, #420] @ (8010fbc ) - 8010e16: f043 0304 orr.w r3, r3, #4 - 8010e1a: 6213 str r3, [r2, #32] - 8010e1c: 4b67 ldr r3, [pc, #412] @ (8010fbc ) - 8010e1e: 6a1b ldr r3, [r3, #32] - 8010e20: 4a66 ldr r2, [pc, #408] @ (8010fbc ) - 8010e22: f043 0301 orr.w r3, r3, #1 - 8010e26: 6213 str r3, [r2, #32] - 8010e28: e00b b.n 8010e42 - 8010e2a: 4b64 ldr r3, [pc, #400] @ (8010fbc ) - 8010e2c: 6a1b ldr r3, [r3, #32] - 8010e2e: 4a63 ldr r2, [pc, #396] @ (8010fbc ) - 8010e30: f023 0301 bic.w r3, r3, #1 - 8010e34: 6213 str r3, [r2, #32] - 8010e36: 4b61 ldr r3, [pc, #388] @ (8010fbc ) - 8010e38: 6a1b ldr r3, [r3, #32] - 8010e3a: 4a60 ldr r2, [pc, #384] @ (8010fbc ) - 8010e3c: f023 0304 bic.w r3, r3, #4 - 8010e40: 6213 str r3, [r2, #32] - /* Check the LSE State */ - if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF) - 8010e42: 687b ldr r3, [r7, #4] - 8010e44: 691b ldr r3, [r3, #16] - 8010e46: 2b00 cmp r3, #0 - 8010e48: d015 beq.n 8010e76 - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010e4a: f7fd fd47 bl 800e8dc - 8010e4e: 6138 str r0, [r7, #16] - - /* Wait till LSE is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 8010e50: e00a b.n 8010e68 - { - if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 8010e52: f7fd fd43 bl 800e8dc - 8010e56: 4602 mov r2, r0 - 8010e58: 693b ldr r3, [r7, #16] - 8010e5a: 1ad3 subs r3, r2, r3 - 8010e5c: f241 3288 movw r2, #5000 @ 0x1388 - 8010e60: 4293 cmp r3, r2 - 8010e62: d901 bls.n 8010e68 - { - return HAL_TIMEOUT; - 8010e64: 2303 movs r3, #3 - 8010e66: e143 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 8010e68: 4b54 ldr r3, [pc, #336] @ (8010fbc ) - 8010e6a: 6a1b ldr r3, [r3, #32] - 8010e6c: f003 0302 and.w r3, r3, #2 - 8010e70: 2b00 cmp r3, #0 - 8010e72: d0ee beq.n 8010e52 - 8010e74: e014 b.n 8010ea0 - } - } - else - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010e76: f7fd fd31 bl 800e8dc - 8010e7a: 6138 str r0, [r7, #16] - - /* Wait till LSE is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 8010e7c: e00a b.n 8010e94 - { - if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 8010e7e: f7fd fd2d bl 800e8dc - 8010e82: 4602 mov r2, r0 - 8010e84: 693b ldr r3, [r7, #16] - 8010e86: 1ad3 subs r3, r2, r3 - 8010e88: f241 3288 movw r2, #5000 @ 0x1388 - 8010e8c: 4293 cmp r3, r2 - 8010e8e: d901 bls.n 8010e94 - { - return HAL_TIMEOUT; - 8010e90: 2303 movs r3, #3 - 8010e92: e12d b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 8010e94: 4b49 ldr r3, [pc, #292] @ (8010fbc ) - 8010e96: 6a1b ldr r3, [r3, #32] - 8010e98: f003 0302 and.w r3, r3, #2 - 8010e9c: 2b00 cmp r3, #0 - 8010e9e: d1ee bne.n 8010e7e - } - } - } - - /* Require to disable power clock if necessary */ - if (pwrclkchanged == SET) - 8010ea0: 7dfb ldrb r3, [r7, #23] - 8010ea2: 2b01 cmp r3, #1 - 8010ea4: d105 bne.n 8010eb2 - { - __HAL_RCC_PWR_CLK_DISABLE(); - 8010ea6: 4b45 ldr r3, [pc, #276] @ (8010fbc ) - 8010ea8: 69db ldr r3, [r3, #28] - 8010eaa: 4a44 ldr r2, [pc, #272] @ (8010fbc ) - 8010eac: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 - 8010eb0: 61d3 str r3, [r2, #28] - -#if defined(RCC_CR_PLL2ON) - /*-------------------------------- PLL2 Configuration -----------------------*/ - /* Check the parameters */ - assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State)); - if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) - 8010eb2: 687b ldr r3, [r7, #4] - 8010eb4: 6adb ldr r3, [r3, #44] @ 0x2c - 8010eb6: 2b00 cmp r3, #0 - 8010eb8: f000 808c beq.w 8010fd4 - { - /* This bit can not be cleared if the PLL2 clock is used indirectly as system - clock (i.e. it is used as PLL clock entry that is used as system clock). */ - if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ - 8010ebc: 4b3f ldr r3, [pc, #252] @ (8010fbc ) - 8010ebe: 685b ldr r3, [r3, #4] - 8010ec0: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8010ec4: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 8010ec8: d10e bne.n 8010ee8 - (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ - 8010eca: 4b3c ldr r3, [pc, #240] @ (8010fbc ) - 8010ecc: 685b ldr r3, [r3, #4] - 8010ece: f003 030c and.w r3, r3, #12 - if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && \ - 8010ed2: 2b08 cmp r3, #8 - 8010ed4: d108 bne.n 8010ee8 - ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) - 8010ed6: 4b39 ldr r3, [pc, #228] @ (8010fbc ) - 8010ed8: 6adb ldr r3, [r3, #44] @ 0x2c - 8010eda: f403 3380 and.w r3, r3, #65536 @ 0x10000 - (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && \ - 8010ede: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 8010ee2: d101 bne.n 8010ee8 - { - return HAL_ERROR; - 8010ee4: 2301 movs r3, #1 - 8010ee6: e103 b.n 80110f0 - } - else - { - if ((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) - 8010ee8: 687b ldr r3, [r7, #4] - 8010eea: 6adb ldr r3, [r3, #44] @ 0x2c - 8010eec: 2b02 cmp r3, #2 - 8010eee: d14e bne.n 8010f8e - assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL)); - assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value)); - - /* Prediv2 can be written only when the PLLI2S is disabled. */ - /* Return an error only if new value is different from the programmed value */ - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && \ - 8010ef0: 4b32 ldr r3, [pc, #200] @ (8010fbc ) - 8010ef2: 681b ldr r3, [r3, #0] - 8010ef4: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8010ef8: 2b00 cmp r3, #0 - 8010efa: d009 beq.n 8010f10 - (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) - 8010efc: 4b2f ldr r3, [pc, #188] @ (8010fbc ) - 8010efe: 6adb ldr r3, [r3, #44] @ 0x2c - 8010f00: f003 02f0 and.w r2, r3, #240 @ 0xf0 - 8010f04: 687b ldr r3, [r7, #4] - 8010f06: 6b5b ldr r3, [r3, #52] @ 0x34 - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && \ - 8010f08: 429a cmp r2, r3 - 8010f0a: d001 beq.n 8010f10 - { - return HAL_ERROR; - 8010f0c: 2301 movs r3, #1 - 8010f0e: e0ef b.n 80110f0 - } - - /* Disable the main PLL2. */ - __HAL_RCC_PLL2_DISABLE(); - 8010f10: 4b2c ldr r3, [pc, #176] @ (8010fc4 ) - 8010f12: 2200 movs r2, #0 - 8010f14: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010f16: f7fd fce1 bl 800e8dc - 8010f1a: 6138 str r0, [r7, #16] - - /* Wait till PLL2 is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) - 8010f1c: e008 b.n 8010f30 - { - if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) - 8010f1e: f7fd fcdd bl 800e8dc - 8010f22: 4602 mov r2, r0 - 8010f24: 693b ldr r3, [r7, #16] - 8010f26: 1ad3 subs r3, r2, r3 - 8010f28: 2b64 cmp r3, #100 @ 0x64 - 8010f2a: d901 bls.n 8010f30 - { - return HAL_TIMEOUT; - 8010f2c: 2303 movs r3, #3 - 8010f2e: e0df b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) - 8010f30: 4b22 ldr r3, [pc, #136] @ (8010fbc ) - 8010f32: 681b ldr r3, [r3, #0] - 8010f34: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 8010f38: 2b00 cmp r3, #0 - 8010f3a: d1f0 bne.n 8010f1e - } - } - - /* Configure the HSE prediv2 factor --------------------------------*/ - __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value); - 8010f3c: 4b1f ldr r3, [pc, #124] @ (8010fbc ) - 8010f3e: 6adb ldr r3, [r3, #44] @ 0x2c - 8010f40: f023 02f0 bic.w r2, r3, #240 @ 0xf0 - 8010f44: 687b ldr r3, [r7, #4] - 8010f46: 6b5b ldr r3, [r3, #52] @ 0x34 - 8010f48: 491c ldr r1, [pc, #112] @ (8010fbc ) - 8010f4a: 4313 orrs r3, r2 - 8010f4c: 62cb str r3, [r1, #44] @ 0x2c - - /* Configure the main PLL2 multiplication factors. */ - __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL); - 8010f4e: 4b1b ldr r3, [pc, #108] @ (8010fbc ) - 8010f50: 6adb ldr r3, [r3, #44] @ 0x2c - 8010f52: f423 6270 bic.w r2, r3, #3840 @ 0xf00 - 8010f56: 687b ldr r3, [r7, #4] - 8010f58: 6b1b ldr r3, [r3, #48] @ 0x30 - 8010f5a: 4918 ldr r1, [pc, #96] @ (8010fbc ) - 8010f5c: 4313 orrs r3, r2 - 8010f5e: 62cb str r3, [r1, #44] @ 0x2c - - /* Enable the main PLL2. */ - __HAL_RCC_PLL2_ENABLE(); - 8010f60: 4b18 ldr r3, [pc, #96] @ (8010fc4 ) - 8010f62: 2201 movs r2, #1 - 8010f64: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010f66: f7fd fcb9 bl 800e8dc - 8010f6a: 6138 str r0, [r7, #16] - - /* Wait till PLL2 is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) - 8010f6c: e008 b.n 8010f80 - { - if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) - 8010f6e: f7fd fcb5 bl 800e8dc - 8010f72: 4602 mov r2, r0 - 8010f74: 693b ldr r3, [r7, #16] - 8010f76: 1ad3 subs r3, r2, r3 - 8010f78: 2b64 cmp r3, #100 @ 0x64 - 8010f7a: d901 bls.n 8010f80 - { - return HAL_TIMEOUT; - 8010f7c: 2303 movs r3, #3 - 8010f7e: e0b7 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) - 8010f80: 4b0e ldr r3, [pc, #56] @ (8010fbc ) - 8010f82: 681b ldr r3, [r3, #0] - 8010f84: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 8010f88: 2b00 cmp r3, #0 - 8010f8a: d0f0 beq.n 8010f6e - 8010f8c: e022 b.n 8010fd4 - } - } - else - { - /* Set PREDIV1 source to HSE */ - CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC); - 8010f8e: 4b0b ldr r3, [pc, #44] @ (8010fbc ) - 8010f90: 6adb ldr r3, [r3, #44] @ 0x2c - 8010f92: 4a0a ldr r2, [pc, #40] @ (8010fbc ) - 8010f94: f423 3380 bic.w r3, r3, #65536 @ 0x10000 - 8010f98: 62d3 str r3, [r2, #44] @ 0x2c - - /* Disable the main PLL2. */ - __HAL_RCC_PLL2_DISABLE(); - 8010f9a: 4b0a ldr r3, [pc, #40] @ (8010fc4 ) - 8010f9c: 2200 movs r2, #0 - 8010f9e: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010fa0: f7fd fc9c bl 800e8dc - 8010fa4: 6138 str r0, [r7, #16] - - /* Wait till PLL2 is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) - 8010fa6: e00f b.n 8010fc8 - { - if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) - 8010fa8: f7fd fc98 bl 800e8dc - 8010fac: 4602 mov r2, r0 - 8010fae: 693b ldr r3, [r7, #16] - 8010fb0: 1ad3 subs r3, r2, r3 - 8010fb2: 2b64 cmp r3, #100 @ 0x64 - 8010fb4: d908 bls.n 8010fc8 - { - return HAL_TIMEOUT; - 8010fb6: 2303 movs r3, #3 - 8010fb8: e09a b.n 80110f0 - 8010fba: bf00 nop - 8010fbc: 40021000 .word 0x40021000 - 8010fc0: 40007000 .word 0x40007000 - 8010fc4: 42420068 .word 0x42420068 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) - 8010fc8: 4b4b ldr r3, [pc, #300] @ (80110f8 ) - 8010fca: 681b ldr r3, [r3, #0] - 8010fcc: f003 6300 and.w r3, r3, #134217728 @ 0x8000000 - 8010fd0: 2b00 cmp r3, #0 - 8010fd2: d1e9 bne.n 8010fa8 - -#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) - 8010fd4: 687b ldr r3, [r7, #4] - 8010fd6: 6a1b ldr r3, [r3, #32] - 8010fd8: 2b00 cmp r3, #0 - 8010fda: f000 8088 beq.w 80110ee - { - /* Check if the PLL is used as system clock or not */ - if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) - 8010fde: 4b46 ldr r3, [pc, #280] @ (80110f8 ) - 8010fe0: 685b ldr r3, [r3, #4] - 8010fe2: f003 030c and.w r3, r3, #12 - 8010fe6: 2b08 cmp r3, #8 - 8010fe8: d068 beq.n 80110bc - { - if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) - 8010fea: 687b ldr r3, [r7, #4] - 8010fec: 6a1b ldr r3, [r3, #32] - 8010fee: 2b02 cmp r3, #2 - 8010ff0: d14d bne.n 801108e - /* 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(); - 8010ff2: 4b42 ldr r3, [pc, #264] @ (80110fc ) - 8010ff4: 2200 movs r2, #0 - 8010ff6: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8010ff8: f7fd fc70 bl 800e8dc - 8010ffc: 6138 str r0, [r7, #16] - - /* Wait till PLL is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 8010ffe: e008 b.n 8011012 - { - if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 8011000: f7fd fc6c bl 800e8dc - 8011004: 4602 mov r2, r0 - 8011006: 693b ldr r3, [r7, #16] - 8011008: 1ad3 subs r3, r2, r3 - 801100a: 2b02 cmp r3, #2 - 801100c: d901 bls.n 8011012 - { - return HAL_TIMEOUT; - 801100e: 2303 movs r3, #3 - 8011010: e06e b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 8011012: 4b39 ldr r3, [pc, #228] @ (80110f8 ) - 8011014: 681b ldr r3, [r3, #0] - 8011016: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 801101a: 2b00 cmp r3, #0 - 801101c: d1f0 bne.n 8011000 - } - } - - /* 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) - 801101e: 687b ldr r3, [r7, #4] - 8011020: 6a5b ldr r3, [r3, #36] @ 0x24 - 8011022: f5b3 3f80 cmp.w r3, #65536 @ 0x10000 - 8011026: d10f bne.n 8011048 - assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue)); -#if defined(RCC_CFGR2_PREDIV1SRC) - assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source)); - - /* Set PREDIV1 source */ - SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source); - 8011028: 4b33 ldr r3, [pc, #204] @ (80110f8 ) - 801102a: 6ada ldr r2, [r3, #44] @ 0x2c - 801102c: 687b ldr r3, [r7, #4] - 801102e: 685b ldr r3, [r3, #4] - 8011030: 4931 ldr r1, [pc, #196] @ (80110f8 ) - 8011032: 4313 orrs r3, r2 - 8011034: 62cb str r3, [r1, #44] @ 0x2c -#endif /* RCC_CFGR2_PREDIV1SRC */ - - /* Set PREDIV1 Value */ - __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); - 8011036: 4b30 ldr r3, [pc, #192] @ (80110f8 ) - 8011038: 6adb ldr r3, [r3, #44] @ 0x2c - 801103a: f023 020f bic.w r2, r3, #15 - 801103e: 687b ldr r3, [r7, #4] - 8011040: 68db ldr r3, [r3, #12] - 8011042: 492d ldr r1, [pc, #180] @ (80110f8 ) - 8011044: 4313 orrs r3, r2 - 8011046: 62cb str r3, [r1, #44] @ 0x2c - } - - /* Configure the main PLL clock source and multiplication factors. */ - __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, - 8011048: 4b2b ldr r3, [pc, #172] @ (80110f8 ) - 801104a: 685b ldr r3, [r3, #4] - 801104c: f423 1274 bic.w r2, r3, #3997696 @ 0x3d0000 - 8011050: 687b ldr r3, [r7, #4] - 8011052: 6a59 ldr r1, [r3, #36] @ 0x24 - 8011054: 687b ldr r3, [r7, #4] - 8011056: 6a9b ldr r3, [r3, #40] @ 0x28 - 8011058: 430b orrs r3, r1 - 801105a: 4927 ldr r1, [pc, #156] @ (80110f8 ) - 801105c: 4313 orrs r3, r2 - 801105e: 604b str r3, [r1, #4] - RCC_OscInitStruct->PLL.PLLMUL); - /* Enable the main PLL. */ - __HAL_RCC_PLL_ENABLE(); - 8011060: 4b26 ldr r3, [pc, #152] @ (80110fc ) - 8011062: 2201 movs r2, #1 - 8011064: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8011066: f7fd fc39 bl 800e8dc - 801106a: 6138 str r0, [r7, #16] - - /* Wait till PLL is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 801106c: e008 b.n 8011080 - { - if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 801106e: f7fd fc35 bl 800e8dc - 8011072: 4602 mov r2, r0 - 8011074: 693b ldr r3, [r7, #16] - 8011076: 1ad3 subs r3, r2, r3 - 8011078: 2b02 cmp r3, #2 - 801107a: d901 bls.n 8011080 - { - return HAL_TIMEOUT; - 801107c: 2303 movs r3, #3 - 801107e: e037 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8011080: 4b1d ldr r3, [pc, #116] @ (80110f8 ) - 8011082: 681b ldr r3, [r3, #0] - 8011084: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 8011088: 2b00 cmp r3, #0 - 801108a: d0f0 beq.n 801106e - 801108c: e02f b.n 80110ee - } - } - else - { - /* Disable the main PLL. */ - __HAL_RCC_PLL_DISABLE(); - 801108e: 4b1b ldr r3, [pc, #108] @ (80110fc ) - 8011090: 2200 movs r2, #0 - 8011092: 601a str r2, [r3, #0] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 8011094: f7fd fc22 bl 800e8dc - 8011098: 6138 str r0, [r7, #16] - - /* Wait till PLL is disabled */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 801109a: e008 b.n 80110ae - { - if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 801109c: f7fd fc1e bl 800e8dc - 80110a0: 4602 mov r2, r0 - 80110a2: 693b ldr r3, [r7, #16] - 80110a4: 1ad3 subs r3, r2, r3 - 80110a6: 2b02 cmp r3, #2 - 80110a8: d901 bls.n 80110ae - { - return HAL_TIMEOUT; - 80110aa: 2303 movs r3, #3 - 80110ac: e020 b.n 80110f0 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80110ae: 4b12 ldr r3, [pc, #72] @ (80110f8 ) - 80110b0: 681b ldr r3, [r3, #0] - 80110b2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 80110b6: 2b00 cmp r3, #0 - 80110b8: d1f0 bne.n 801109c - 80110ba: e018 b.n 80110ee - } - } - else - { - /* Check if there is a request to disable the PLL used as System clock source */ - if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) - 80110bc: 687b ldr r3, [r7, #4] - 80110be: 6a1b ldr r3, [r3, #32] - 80110c0: 2b01 cmp r3, #1 - 80110c2: d101 bne.n 80110c8 - { - return HAL_ERROR; - 80110c4: 2301 movs r3, #1 - 80110c6: e013 b.n 80110f0 - } - else - { - /* Do not return HAL_ERROR if request repeats the current configuration */ - pll_config = RCC->CFGR; - 80110c8: 4b0b ldr r3, [pc, #44] @ (80110f8 ) - 80110ca: 685b ldr r3, [r3, #4] - 80110cc: 60fb str r3, [r7, #12] - if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80110ce: 68fb ldr r3, [r7, #12] - 80110d0: f403 3280 and.w r2, r3, #65536 @ 0x10000 - 80110d4: 687b ldr r3, [r7, #4] - 80110d6: 6a5b ldr r3, [r3, #36] @ 0x24 - 80110d8: 429a cmp r2, r3 - 80110da: d106 bne.n 80110ea - (READ_BIT(pll_config, RCC_CFGR_PLLMULL) != RCC_OscInitStruct->PLL.PLLMUL)) - 80110dc: 68fb ldr r3, [r7, #12] - 80110de: f403 1270 and.w r2, r3, #3932160 @ 0x3c0000 - 80110e2: 687b ldr r3, [r7, #4] - 80110e4: 6a9b ldr r3, [r3, #40] @ 0x28 - if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80110e6: 429a cmp r2, r3 - 80110e8: d001 beq.n 80110ee - { - return HAL_ERROR; - 80110ea: 2301 movs r3, #1 - 80110ec: e000 b.n 80110f0 - } - } - } - } - - return HAL_OK; - 80110ee: 2300 movs r3, #0 -} - 80110f0: 4618 mov r0, r3 - 80110f2: 3718 adds r7, #24 - 80110f4: 46bd mov sp, r7 - 80110f6: bd80 pop {r7, pc} - 80110f8: 40021000 .word 0x40021000 - 80110fc: 42420060 .word 0x42420060 - -08011100 : - * 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) -{ - 8011100: b580 push {r7, lr} - 8011102: b084 sub sp, #16 - 8011104: af00 add r7, sp, #0 - 8011106: 6078 str r0, [r7, #4] - 8011108: 6039 str r1, [r7, #0] - uint32_t tickstart; - - /* Check Null pointer */ - if (RCC_ClkInitStruct == NULL) - 801110a: 687b ldr r3, [r7, #4] - 801110c: 2b00 cmp r3, #0 - 801110e: d101 bne.n 8011114 - { - return HAL_ERROR; - 8011110: 2301 movs r3, #1 - 8011112: e0d0 b.n 80112b6 - 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()) - 8011114: 4b6a ldr r3, [pc, #424] @ (80112c0 ) - 8011116: 681b ldr r3, [r3, #0] - 8011118: f003 0307 and.w r3, r3, #7 - 801111c: 683a ldr r2, [r7, #0] - 801111e: 429a cmp r2, r3 - 8011120: d910 bls.n 8011144 - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - __HAL_FLASH_SET_LATENCY(FLatency); - 8011122: 4b67 ldr r3, [pc, #412] @ (80112c0 ) - 8011124: 681b ldr r3, [r3, #0] - 8011126: f023 0207 bic.w r2, r3, #7 - 801112a: 4965 ldr r1, [pc, #404] @ (80112c0 ) - 801112c: 683b ldr r3, [r7, #0] - 801112e: 4313 orrs r3, r2 - 8011130: 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) - 8011132: 4b63 ldr r3, [pc, #396] @ (80112c0 ) - 8011134: 681b ldr r3, [r3, #0] - 8011136: f003 0307 and.w r3, r3, #7 - 801113a: 683a ldr r2, [r7, #0] - 801113c: 429a cmp r2, r3 - 801113e: d001 beq.n 8011144 - { - return HAL_ERROR; - 8011140: 2301 movs r3, #1 - 8011142: e0b8 b.n 80112b6 - } -} - -#endif /* FLASH_ACR_LATENCY */ -/*-------------------------- HCLK Configuration --------------------------*/ -if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) - 8011144: 687b ldr r3, [r7, #4] - 8011146: 681b ldr r3, [r3, #0] - 8011148: f003 0302 and.w r3, r3, #2 - 801114c: 2b00 cmp r3, #0 - 801114e: d020 beq.n 8011192 - { - /* 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) - 8011150: 687b ldr r3, [r7, #4] - 8011152: 681b ldr r3, [r3, #0] - 8011154: f003 0304 and.w r3, r3, #4 - 8011158: 2b00 cmp r3, #0 - 801115a: d005 beq.n 8011168 - { - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); - 801115c: 4b59 ldr r3, [pc, #356] @ (80112c4 ) - 801115e: 685b ldr r3, [r3, #4] - 8011160: 4a58 ldr r2, [pc, #352] @ (80112c4 ) - 8011162: f443 63e0 orr.w r3, r3, #1792 @ 0x700 - 8011166: 6053 str r3, [r2, #4] - } - - if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 8011168: 687b ldr r3, [r7, #4] - 801116a: 681b ldr r3, [r3, #0] - 801116c: f003 0308 and.w r3, r3, #8 - 8011170: 2b00 cmp r3, #0 - 8011172: d005 beq.n 8011180 - { - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); - 8011174: 4b53 ldr r3, [pc, #332] @ (80112c4 ) - 8011176: 685b ldr r3, [r3, #4] - 8011178: 4a52 ldr r2, [pc, #328] @ (80112c4 ) - 801117a: f443 5360 orr.w r3, r3, #14336 @ 0x3800 - 801117e: 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); - 8011180: 4b50 ldr r3, [pc, #320] @ (80112c4 ) - 8011182: 685b ldr r3, [r3, #4] - 8011184: f023 02f0 bic.w r2, r3, #240 @ 0xf0 - 8011188: 687b ldr r3, [r7, #4] - 801118a: 689b ldr r3, [r3, #8] - 801118c: 494d ldr r1, [pc, #308] @ (80112c4 ) - 801118e: 4313 orrs r3, r2 - 8011190: 604b str r3, [r1, #4] - } - - /*------------------------- SYSCLK Configuration ---------------------------*/ - if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) - 8011192: 687b ldr r3, [r7, #4] - 8011194: 681b ldr r3, [r3, #0] - 8011196: f003 0301 and.w r3, r3, #1 - 801119a: 2b00 cmp r3, #0 - 801119c: d040 beq.n 8011220 - { - assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); - - /* HSE is selected as System Clock Source */ - if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - 801119e: 687b ldr r3, [r7, #4] - 80111a0: 685b ldr r3, [r3, #4] - 80111a2: 2b01 cmp r3, #1 - 80111a4: d107 bne.n 80111b6 - { - /* Check the HSE ready flag */ - if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 80111a6: 4b47 ldr r3, [pc, #284] @ (80112c4 ) - 80111a8: 681b ldr r3, [r3, #0] - 80111aa: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 80111ae: 2b00 cmp r3, #0 - 80111b0: d115 bne.n 80111de - { - return HAL_ERROR; - 80111b2: 2301 movs r3, #1 - 80111b4: e07f b.n 80112b6 - } - } - /* PLL is selected as System Clock Source */ - else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) - 80111b6: 687b ldr r3, [r7, #4] - 80111b8: 685b ldr r3, [r3, #4] - 80111ba: 2b02 cmp r3, #2 - 80111bc: d107 bne.n 80111ce - { - /* Check the PLL ready flag */ - if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 80111be: 4b41 ldr r3, [pc, #260] @ (80112c4 ) - 80111c0: 681b ldr r3, [r3, #0] - 80111c2: f003 7300 and.w r3, r3, #33554432 @ 0x2000000 - 80111c6: 2b00 cmp r3, #0 - 80111c8: d109 bne.n 80111de - { - return HAL_ERROR; - 80111ca: 2301 movs r3, #1 - 80111cc: e073 b.n 80112b6 - } - /* HSI is selected as System Clock Source */ - else - { - /* Check the HSI ready flag */ - if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 80111ce: 4b3d ldr r3, [pc, #244] @ (80112c4 ) - 80111d0: 681b ldr r3, [r3, #0] - 80111d2: f003 0302 and.w r3, r3, #2 - 80111d6: 2b00 cmp r3, #0 - 80111d8: d101 bne.n 80111de - { - return HAL_ERROR; - 80111da: 2301 movs r3, #1 - 80111dc: e06b b.n 80112b6 - } - } - __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); - 80111de: 4b39 ldr r3, [pc, #228] @ (80112c4 ) - 80111e0: 685b ldr r3, [r3, #4] - 80111e2: f023 0203 bic.w r2, r3, #3 - 80111e6: 687b ldr r3, [r7, #4] - 80111e8: 685b ldr r3, [r3, #4] - 80111ea: 4936 ldr r1, [pc, #216] @ (80112c4 ) - 80111ec: 4313 orrs r3, r2 - 80111ee: 604b str r3, [r1, #4] - - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 80111f0: f7fd fb74 bl 800e8dc - 80111f4: 60f8 str r0, [r7, #12] - - while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 80111f6: e00a b.n 801120e - { - if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - 80111f8: f7fd fb70 bl 800e8dc - 80111fc: 4602 mov r2, r0 - 80111fe: 68fb ldr r3, [r7, #12] - 8011200: 1ad3 subs r3, r2, r3 - 8011202: f241 3288 movw r2, #5000 @ 0x1388 - 8011206: 4293 cmp r3, r2 - 8011208: d901 bls.n 801120e - { - return HAL_TIMEOUT; - 801120a: 2303 movs r3, #3 - 801120c: e053 b.n 80112b6 - while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 801120e: 4b2d ldr r3, [pc, #180] @ (80112c4 ) - 8011210: 685b ldr r3, [r3, #4] - 8011212: f003 020c and.w r2, r3, #12 - 8011216: 687b ldr r3, [r7, #4] - 8011218: 685b ldr r3, [r3, #4] - 801121a: 009b lsls r3, r3, #2 - 801121c: 429a cmp r2, r3 - 801121e: d1eb bne.n 80111f8 - } - } - -#if defined(FLASH_ACR_LATENCY) - /* Decreasing the number of wait states because of lower CPU frequency */ - if (FLatency < __HAL_FLASH_GET_LATENCY()) - 8011220: 4b27 ldr r3, [pc, #156] @ (80112c0 ) - 8011222: 681b ldr r3, [r3, #0] - 8011224: f003 0307 and.w r3, r3, #7 - 8011228: 683a ldr r2, [r7, #0] - 801122a: 429a cmp r2, r3 - 801122c: d210 bcs.n 8011250 - { - /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ - __HAL_FLASH_SET_LATENCY(FLatency); - 801122e: 4b24 ldr r3, [pc, #144] @ (80112c0 ) - 8011230: 681b ldr r3, [r3, #0] - 8011232: f023 0207 bic.w r2, r3, #7 - 8011236: 4922 ldr r1, [pc, #136] @ (80112c0 ) - 8011238: 683b ldr r3, [r7, #0] - 801123a: 4313 orrs r3, r2 - 801123c: 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) - 801123e: 4b20 ldr r3, [pc, #128] @ (80112c0 ) - 8011240: 681b ldr r3, [r3, #0] - 8011242: f003 0307 and.w r3, r3, #7 - 8011246: 683a ldr r2, [r7, #0] - 8011248: 429a cmp r2, r3 - 801124a: d001 beq.n 8011250 - { - return HAL_ERROR; - 801124c: 2301 movs r3, #1 - 801124e: e032 b.n 80112b6 - } -} -#endif /* FLASH_ACR_LATENCY */ - -/*-------------------------- PCLK1 Configuration ---------------------------*/ -if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 8011250: 687b ldr r3, [r7, #4] - 8011252: 681b ldr r3, [r3, #0] - 8011254: f003 0304 and.w r3, r3, #4 - 8011258: 2b00 cmp r3, #0 - 801125a: d008 beq.n 801126e - { - assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); - 801125c: 4b19 ldr r3, [pc, #100] @ (80112c4 ) - 801125e: 685b ldr r3, [r3, #4] - 8011260: f423 62e0 bic.w r2, r3, #1792 @ 0x700 - 8011264: 687b ldr r3, [r7, #4] - 8011266: 68db ldr r3, [r3, #12] - 8011268: 4916 ldr r1, [pc, #88] @ (80112c4 ) - 801126a: 4313 orrs r3, r2 - 801126c: 604b str r3, [r1, #4] - } - - /*-------------------------- PCLK2 Configuration ---------------------------*/ - if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 801126e: 687b ldr r3, [r7, #4] - 8011270: 681b ldr r3, [r3, #0] - 8011272: f003 0308 and.w r3, r3, #8 - 8011276: 2b00 cmp r3, #0 - 8011278: d009 beq.n 801128e - { - assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); - MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); - 801127a: 4b12 ldr r3, [pc, #72] @ (80112c4 ) - 801127c: 685b ldr r3, [r3, #4] - 801127e: f423 5260 bic.w r2, r3, #14336 @ 0x3800 - 8011282: 687b ldr r3, [r7, #4] - 8011284: 691b ldr r3, [r3, #16] - 8011286: 00db lsls r3, r3, #3 - 8011288: 490e ldr r1, [pc, #56] @ (80112c4 ) - 801128a: 4313 orrs r3, r2 - 801128c: 604b str r3, [r1, #4] - } - - /* Update the SystemCoreClock global variable */ - SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; - 801128e: f000 f821 bl 80112d4 - 8011292: 4602 mov r2, r0 - 8011294: 4b0b ldr r3, [pc, #44] @ (80112c4 ) - 8011296: 685b ldr r3, [r3, #4] - 8011298: 091b lsrs r3, r3, #4 - 801129a: f003 030f and.w r3, r3, #15 - 801129e: 490a ldr r1, [pc, #40] @ (80112c8 ) - 80112a0: 5ccb ldrb r3, [r1, r3] - 80112a2: fa22 f303 lsr.w r3, r2, r3 - 80112a6: 4a09 ldr r2, [pc, #36] @ (80112cc ) - 80112a8: 6013 str r3, [r2, #0] - - /* Configure the source of time base considering new system clocks settings*/ - HAL_InitTick(uwTickPrio); - 80112aa: 4b09 ldr r3, [pc, #36] @ (80112d0 ) - 80112ac: 681b ldr r3, [r3, #0] - 80112ae: 4618 mov r0, r3 - 80112b0: f7fd fad2 bl 800e858 - - return HAL_OK; - 80112b4: 2300 movs r3, #0 -} - 80112b6: 4618 mov r0, r3 - 80112b8: 3710 adds r7, #16 - 80112ba: 46bd mov sp, r7 - 80112bc: bd80 pop {r7, pc} - 80112be: bf00 nop - 80112c0: 40022000 .word 0x40022000 - 80112c4: 40021000 .word 0x40021000 - 80112c8: 08016d18 .word 0x08016d18 - 80112cc: 20000078 .word 0x20000078 - 80112d0: 2000007c .word 0x2000007c - -080112d4 : - * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. - * - * @retval SYSCLK frequency - */ -uint32_t HAL_RCC_GetSysClockFreq(void) -{ - 80112d4: e92d 4fb0 stmdb sp!, {r4, r5, r7, r8, r9, sl, fp, lr} - 80112d8: b08e sub sp, #56 @ 0x38 - 80112da: af00 add r7, sp, #0 -#else - static const uint8_t aPredivFactorTable[2U] = {1, 2}; -#endif /*RCC_CFGR2_PREDIV1*/ - -#endif - uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; - 80112dc: 2300 movs r3, #0 - 80112de: 62fb str r3, [r7, #44] @ 0x2c - 80112e0: 2300 movs r3, #0 - 80112e2: 62bb str r3, [r7, #40] @ 0x28 - 80112e4: 2300 movs r3, #0 - 80112e6: 637b str r3, [r7, #52] @ 0x34 - 80112e8: 2300 movs r3, #0 - 80112ea: 627b str r3, [r7, #36] @ 0x24 - uint32_t sysclockfreq = 0U; - 80112ec: 2300 movs r3, #0 - 80112ee: 633b str r3, [r7, #48] @ 0x30 -#if defined(RCC_CFGR2_PREDIV1SRC) - uint32_t prediv2 = 0U, pll2mul = 0U; - 80112f0: 2300 movs r3, #0 - 80112f2: 623b str r3, [r7, #32] - 80112f4: 2300 movs r3, #0 - 80112f6: 61fb str r3, [r7, #28] -#endif /*RCC_CFGR2_PREDIV1SRC*/ - - tmpreg = RCC->CFGR; - 80112f8: 4b4e ldr r3, [pc, #312] @ (8011434 ) - 80112fa: 685b ldr r3, [r3, #4] - 80112fc: 62fb str r3, [r7, #44] @ 0x2c - - /* Get SYSCLK source -------------------------------------------------------*/ - switch (tmpreg & RCC_CFGR_SWS) - 80112fe: 6afb ldr r3, [r7, #44] @ 0x2c - 8011300: f003 030c and.w r3, r3, #12 - 8011304: 2b04 cmp r3, #4 - 8011306: d002 beq.n 801130e - 8011308: 2b08 cmp r3, #8 - 801130a: d003 beq.n 8011314 - 801130c: e089 b.n 8011422 - { - case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ - { - sysclockfreq = HSE_VALUE; - 801130e: 4b4a ldr r3, [pc, #296] @ (8011438 ) - 8011310: 633b str r3, [r7, #48] @ 0x30 - break; - 8011312: e089 b.n 8011428 - } - case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ - { - pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; - 8011314: 6afb ldr r3, [r7, #44] @ 0x2c - 8011316: 0c9b lsrs r3, r3, #18 - 8011318: f003 020f and.w r2, r3, #15 - 801131c: 4b47 ldr r3, [pc, #284] @ (801143c ) - 801131e: 5c9b ldrb r3, [r3, r2] - 8011320: 627b str r3, [r7, #36] @ 0x24 - if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) - 8011322: 6afb ldr r3, [r7, #44] @ 0x2c - 8011324: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8011328: 2b00 cmp r3, #0 - 801132a: d072 beq.n 8011412 - { -#if defined(RCC_CFGR2_PREDIV1) - prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; - 801132c: 4b41 ldr r3, [pc, #260] @ (8011434 ) - 801132e: 6adb ldr r3, [r3, #44] @ 0x2c - 8011330: f003 020f and.w r2, r3, #15 - 8011334: 4b42 ldr r3, [pc, #264] @ (8011440 ) - 8011336: 5c9b ldrb r3, [r3, r2] - 8011338: 62bb str r3, [r7, #40] @ 0x28 -#else - prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; -#endif /*RCC_CFGR2_PREDIV1*/ -#if defined(RCC_CFGR2_PREDIV1SRC) - - if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) - 801133a: 4b3e ldr r3, [pc, #248] @ (8011434 ) - 801133c: 6adb ldr r3, [r3, #44] @ 0x2c - 801133e: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 8011342: 2b00 cmp r3, #0 - 8011344: d053 beq.n 80113ee - { - /* PLL2 selected as Prediv1 source */ - /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ - prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; - 8011346: 4b3b ldr r3, [pc, #236] @ (8011434 ) - 8011348: 6adb ldr r3, [r3, #44] @ 0x2c - 801134a: 091b lsrs r3, r3, #4 - 801134c: f003 030f and.w r3, r3, #15 - 8011350: 3301 adds r3, #1 - 8011352: 623b str r3, [r7, #32] - pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2; - 8011354: 4b37 ldr r3, [pc, #220] @ (8011434 ) - 8011356: 6adb ldr r3, [r3, #44] @ 0x2c - 8011358: 0a1b lsrs r3, r3, #8 - 801135a: f003 030f and.w r3, r3, #15 - 801135e: 3302 adds r3, #2 - 8011360: 61fb str r3, [r7, #28] - pllclk = (uint32_t)(((uint64_t)HSE_VALUE * (uint64_t)pll2mul * (uint64_t)pllmul) / ((uint64_t)prediv2 * (uint64_t)prediv)); - 8011362: 69fb ldr r3, [r7, #28] - 8011364: 2200 movs r2, #0 - 8011366: 469a mov sl, r3 - 8011368: 4693 mov fp, r2 - 801136a: 6a7b ldr r3, [r7, #36] @ 0x24 - 801136c: 2200 movs r2, #0 - 801136e: 613b str r3, [r7, #16] - 8011370: 617a str r2, [r7, #20] - 8011372: 693b ldr r3, [r7, #16] - 8011374: fb03 f20b mul.w r2, r3, fp - 8011378: 697b ldr r3, [r7, #20] - 801137a: fb0a f303 mul.w r3, sl, r3 - 801137e: 4413 add r3, r2 - 8011380: 693a ldr r2, [r7, #16] - 8011382: fbaa 0102 umull r0, r1, sl, r2 - 8011386: 440b add r3, r1 - 8011388: 4619 mov r1, r3 - 801138a: 4b2b ldr r3, [pc, #172] @ (8011438 ) - 801138c: fb03 f201 mul.w r2, r3, r1 - 8011390: 2300 movs r3, #0 - 8011392: fb00 f303 mul.w r3, r0, r3 - 8011396: 4413 add r3, r2 - 8011398: 4a27 ldr r2, [pc, #156] @ (8011438 ) - 801139a: fba0 4502 umull r4, r5, r0, r2 - 801139e: 442b add r3, r5 - 80113a0: 461d mov r5, r3 - 80113a2: 6a3b ldr r3, [r7, #32] - 80113a4: 2200 movs r2, #0 - 80113a6: 60bb str r3, [r7, #8] - 80113a8: 60fa str r2, [r7, #12] - 80113aa: 6abb ldr r3, [r7, #40] @ 0x28 - 80113ac: 2200 movs r2, #0 - 80113ae: 603b str r3, [r7, #0] - 80113b0: 607a str r2, [r7, #4] - 80113b2: e9d7 0102 ldrd r0, r1, [r7, #8] - 80113b6: 460b mov r3, r1 - 80113b8: e9d7 ab00 ldrd sl, fp, [r7] - 80113bc: 4652 mov r2, sl - 80113be: fb02 f203 mul.w r2, r2, r3 - 80113c2: 465b mov r3, fp - 80113c4: 4684 mov ip, r0 - 80113c6: fb0c f303 mul.w r3, ip, r3 - 80113ca: 4413 add r3, r2 - 80113cc: 4602 mov r2, r0 - 80113ce: 4651 mov r1, sl - 80113d0: fba2 8901 umull r8, r9, r2, r1 - 80113d4: 444b add r3, r9 - 80113d6: 4699 mov r9, r3 - 80113d8: 4642 mov r2, r8 - 80113da: 464b mov r3, r9 - 80113dc: 4620 mov r0, r4 - 80113de: 4629 mov r1, r5 - 80113e0: f7f7 ff58 bl 8009294 <__aeabi_uldivmod> - 80113e4: 4602 mov r2, r0 - 80113e6: 460b mov r3, r1 - 80113e8: 4613 mov r3, r2 - 80113ea: 637b str r3, [r7, #52] @ 0x34 - 80113ec: e007 b.n 80113fe - } - else - { - /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ - pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv); - 80113ee: 6a7b ldr r3, [r7, #36] @ 0x24 - 80113f0: 4a11 ldr r2, [pc, #68] @ (8011438 ) - 80113f2: fb03 f202 mul.w r2, r3, r2 - 80113f6: 6abb ldr r3, [r7, #40] @ 0x28 - 80113f8: fbb2 f3f3 udiv r3, r2, r3 - 80113fc: 637b str r3, [r7, #52] @ 0x34 - } - - /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ - /* In this case need to divide pllclk by 2 */ - if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) - 80113fe: 4b0f ldr r3, [pc, #60] @ (801143c ) - 8011400: 7b5b ldrb r3, [r3, #13] - 8011402: 461a mov r2, r3 - 8011404: 6a7b ldr r3, [r7, #36] @ 0x24 - 8011406: 4293 cmp r3, r2 - 8011408: d108 bne.n 801141c - { - pllclk = pllclk / 2; - 801140a: 6b7b ldr r3, [r7, #52] @ 0x34 - 801140c: 085b lsrs r3, r3, #1 - 801140e: 637b str r3, [r7, #52] @ 0x34 - 8011410: e004 b.n 801141c -#endif /*RCC_CFGR2_PREDIV1SRC*/ - } - else - { - /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ - pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); - 8011412: 6a7b ldr r3, [r7, #36] @ 0x24 - 8011414: 4a0b ldr r2, [pc, #44] @ (8011444 ) - 8011416: fb02 f303 mul.w r3, r2, r3 - 801141a: 637b str r3, [r7, #52] @ 0x34 - } - sysclockfreq = pllclk; - 801141c: 6b7b ldr r3, [r7, #52] @ 0x34 - 801141e: 633b str r3, [r7, #48] @ 0x30 - break; - 8011420: e002 b.n 8011428 - } - case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ - default: /* HSI used as system clock */ - { - sysclockfreq = HSI_VALUE; - 8011422: 4b09 ldr r3, [pc, #36] @ (8011448 ) - 8011424: 633b str r3, [r7, #48] @ 0x30 - break; - 8011426: bf00 nop - } - } - return sysclockfreq; - 8011428: 6b3b ldr r3, [r7, #48] @ 0x30 -} - 801142a: 4618 mov r0, r3 - 801142c: 3738 adds r7, #56 @ 0x38 - 801142e: 46bd mov sp, r7 - 8011430: e8bd 8fb0 ldmia.w sp!, {r4, r5, r7, r8, r9, sl, fp, pc} - 8011434: 40021000 .word 0x40021000 - 8011438: 017d7840 .word 0x017d7840 - 801143c: 08016d30 .word 0x08016d30 - 8011440: 08016d40 .word 0x08016d40 - 8011444: 003d0900 .word 0x003d0900 - 8011448: 007a1200 .word 0x007a1200 - -0801144c : - * @note The SystemCoreClock CMSIS variable is used to store System Clock Frequency - * and updated within this function - * @retval HCLK frequency - */ -uint32_t HAL_RCC_GetHCLKFreq(void) -{ - 801144c: b480 push {r7} - 801144e: af00 add r7, sp, #0 - return SystemCoreClock; - 8011450: 4b02 ldr r3, [pc, #8] @ (801145c ) - 8011452: 681b ldr r3, [r3, #0] -} - 8011454: 4618 mov r0, r3 - 8011456: 46bd mov sp, r7 - 8011458: bc80 pop {r7} - 801145a: 4770 bx lr - 801145c: 20000078 .word 0x20000078 - -08011460 : - * @note Each time PCLK1 changes, this function must be called to update the - * right PCLK1 value. Otherwise, any configuration based on this function will be incorrect. - * @retval PCLK1 frequency - */ -uint32_t HAL_RCC_GetPCLK1Freq(void) -{ - 8011460: b580 push {r7, lr} - 8011462: af00 add r7, sp, #0 - /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/ - return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]); - 8011464: f7ff fff2 bl 801144c - 8011468: 4602 mov r2, r0 - 801146a: 4b05 ldr r3, [pc, #20] @ (8011480 ) - 801146c: 685b ldr r3, [r3, #4] - 801146e: 0a1b lsrs r3, r3, #8 - 8011470: f003 0307 and.w r3, r3, #7 - 8011474: 4903 ldr r1, [pc, #12] @ (8011484 ) - 8011476: 5ccb ldrb r3, [r1, r3] - 8011478: fa22 f303 lsr.w r3, r2, r3 -} - 801147c: 4618 mov r0, r3 - 801147e: bd80 pop {r7, pc} - 8011480: 40021000 .word 0x40021000 - 8011484: 08016d28 .word 0x08016d28 - -08011488 : - * @note Each time PCLK2 changes, this function must be called to update the - * right PCLK2 value. Otherwise, any configuration based on this function will be incorrect. - * @retval PCLK2 frequency - */ -uint32_t HAL_RCC_GetPCLK2Freq(void) -{ - 8011488: b580 push {r7, lr} - 801148a: af00 add r7, sp, #0 - /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/ - return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]); - 801148c: f7ff ffde bl 801144c - 8011490: 4602 mov r2, r0 - 8011492: 4b05 ldr r3, [pc, #20] @ (80114a8 ) - 8011494: 685b ldr r3, [r3, #4] - 8011496: 0adb lsrs r3, r3, #11 - 8011498: f003 0307 and.w r3, r3, #7 - 801149c: 4903 ldr r1, [pc, #12] @ (80114ac ) - 801149e: 5ccb ldrb r3, [r1, r3] - 80114a0: fa22 f303 lsr.w r3, r2, r3 -} - 80114a4: 4618 mov r0, r3 - 80114a6: bd80 pop {r7, pc} - 80114a8: 40021000 .word 0x40021000 - 80114ac: 08016d28 .word 0x08016d28 - -080114b0 : - * @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) -{ - 80114b0: b480 push {r7} - 80114b2: b085 sub sp, #20 - 80114b4: af00 add r7, sp, #0 - 80114b6: 6078 str r0, [r7, #4] - __IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U); - 80114b8: 4b0a ldr r3, [pc, #40] @ (80114e4 ) - 80114ba: 681b ldr r3, [r3, #0] - 80114bc: 4a0a ldr r2, [pc, #40] @ (80114e8 ) - 80114be: fba2 2303 umull r2, r3, r2, r3 - 80114c2: 0a5b lsrs r3, r3, #9 - 80114c4: 687a ldr r2, [r7, #4] - 80114c6: fb02 f303 mul.w r3, r2, r3 - 80114ca: 60fb str r3, [r7, #12] - do - { - __NOP(); - 80114cc: bf00 nop - } - while (Delay --); - 80114ce: 68fb ldr r3, [r7, #12] - 80114d0: 1e5a subs r2, r3, #1 - 80114d2: 60fa str r2, [r7, #12] - 80114d4: 2b00 cmp r3, #0 - 80114d6: d1f9 bne.n 80114cc -} - 80114d8: bf00 nop - 80114da: bf00 nop - 80114dc: 3714 adds r7, #20 - 80114de: 46bd mov sp, r7 - 80114e0: bc80 pop {r7} - 80114e2: 4770 bx lr - 80114e4: 20000078 .word 0x20000078 - 80114e8: 10624dd3 .word 0x10624dd3 - -080114ec : - * manually disable it. - * - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) -{ - 80114ec: b580 push {r7, lr} - 80114ee: b088 sub sp, #32 - 80114f0: af00 add r7, sp, #0 - 80114f2: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U, temp_reg = 0U; - 80114f4: 2300 movs r3, #0 - 80114f6: 617b str r3, [r7, #20] - 80114f8: 2300 movs r3, #0 - 80114fa: 613b str r3, [r7, #16] -#if defined(STM32F105xC) || defined(STM32F107xC) - uint32_t pllactive = 0U; - 80114fc: 2300 movs r3, #0 - 80114fe: 61fb str r3, [r7, #28] - - /* Check the parameters */ - assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection)); - - /*------------------------------- RTC/LCD Configuration ------------------------*/ - if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) - 8011500: 687b ldr r3, [r7, #4] - 8011502: 681b ldr r3, [r3, #0] - 8011504: f003 0301 and.w r3, r3, #1 - 8011508: 2b00 cmp r3, #0 - 801150a: d07d beq.n 8011608 - { - FlagStatus pwrclkchanged = RESET; - 801150c: 2300 movs r3, #0 - 801150e: 76fb strb r3, [r7, #27] - assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection)); - - /* As soon as function is called to change RTC clock source, activation of the - power domain is done. */ - /* Requires to enable write access to Backup Domain of necessary */ - if (__HAL_RCC_PWR_IS_CLK_DISABLED()) - 8011510: 4b8b ldr r3, [pc, #556] @ (8011740 ) - 8011512: 69db ldr r3, [r3, #28] - 8011514: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8011518: 2b00 cmp r3, #0 - 801151a: d10d bne.n 8011538 - { - __HAL_RCC_PWR_CLK_ENABLE(); - 801151c: 4b88 ldr r3, [pc, #544] @ (8011740 ) - 801151e: 69db ldr r3, [r3, #28] - 8011520: 4a87 ldr r2, [pc, #540] @ (8011740 ) - 8011522: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000 - 8011526: 61d3 str r3, [r2, #28] - 8011528: 4b85 ldr r3, [pc, #532] @ (8011740 ) - 801152a: 69db ldr r3, [r3, #28] - 801152c: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8011530: 60fb str r3, [r7, #12] - 8011532: 68fb ldr r3, [r7, #12] - pwrclkchanged = SET; - 8011534: 2301 movs r3, #1 - 8011536: 76fb strb r3, [r7, #27] - } - - if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8011538: 4b82 ldr r3, [pc, #520] @ (8011744 ) - 801153a: 681b ldr r3, [r3, #0] - 801153c: f403 7380 and.w r3, r3, #256 @ 0x100 - 8011540: 2b00 cmp r3, #0 - 8011542: d118 bne.n 8011576 - { - /* Enable write access to Backup domain */ - SET_BIT(PWR->CR, PWR_CR_DBP); - 8011544: 4b7f ldr r3, [pc, #508] @ (8011744 ) - 8011546: 681b ldr r3, [r3, #0] - 8011548: 4a7e ldr r2, [pc, #504] @ (8011744 ) - 801154a: f443 7380 orr.w r3, r3, #256 @ 0x100 - 801154e: 6013 str r3, [r2, #0] - - /* Wait for Backup domain Write protection disable */ - tickstart = HAL_GetTick(); - 8011550: f7fd f9c4 bl 800e8dc - 8011554: 6178 str r0, [r7, #20] - - while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8011556: e008 b.n 801156a - { - if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) - 8011558: f7fd f9c0 bl 800e8dc - 801155c: 4602 mov r2, r0 - 801155e: 697b ldr r3, [r7, #20] - 8011560: 1ad3 subs r3, r2, r3 - 8011562: 2b64 cmp r3, #100 @ 0x64 - 8011564: d901 bls.n 801156a - { - return HAL_TIMEOUT; - 8011566: 2303 movs r3, #3 - 8011568: e0e5 b.n 8011736 - while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 801156a: 4b76 ldr r3, [pc, #472] @ (8011744 ) - 801156c: 681b ldr r3, [r3, #0] - 801156e: f403 7380 and.w r3, r3, #256 @ 0x100 - 8011572: 2b00 cmp r3, #0 - 8011574: d0f0 beq.n 8011558 - } - } - } - - /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */ - temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL); - 8011576: 4b72 ldr r3, [pc, #456] @ (8011740 ) - 8011578: 6a1b ldr r3, [r3, #32] - 801157a: f403 7340 and.w r3, r3, #768 @ 0x300 - 801157e: 613b str r3, [r7, #16] - if ((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) - 8011580: 693b ldr r3, [r7, #16] - 8011582: 2b00 cmp r3, #0 - 8011584: d02e beq.n 80115e4 - 8011586: 687b ldr r3, [r7, #4] - 8011588: 685b ldr r3, [r3, #4] - 801158a: f403 7340 and.w r3, r3, #768 @ 0x300 - 801158e: 693a ldr r2, [r7, #16] - 8011590: 429a cmp r2, r3 - 8011592: d027 beq.n 80115e4 - { - /* Store the content of BDCR register before the reset of Backup Domain */ - temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL)); - 8011594: 4b6a ldr r3, [pc, #424] @ (8011740 ) - 8011596: 6a1b ldr r3, [r3, #32] - 8011598: f423 7340 bic.w r3, r3, #768 @ 0x300 - 801159c: 613b str r3, [r7, #16] - /* RTC Clock selection can be changed only if the Backup Domain is reset */ - __HAL_RCC_BACKUPRESET_FORCE(); - 801159e: 4b6a ldr r3, [pc, #424] @ (8011748 ) - 80115a0: 2201 movs r2, #1 - 80115a2: 601a str r2, [r3, #0] - __HAL_RCC_BACKUPRESET_RELEASE(); - 80115a4: 4b68 ldr r3, [pc, #416] @ (8011748 ) - 80115a6: 2200 movs r2, #0 - 80115a8: 601a str r2, [r3, #0] - /* Restore the Content of BDCR register */ - RCC->BDCR = temp_reg; - 80115aa: 4a65 ldr r2, [pc, #404] @ (8011740 ) - 80115ac: 693b ldr r3, [r7, #16] - 80115ae: 6213 str r3, [r2, #32] - - /* Wait for LSERDY if LSE was enabled */ - if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) - 80115b0: 693b ldr r3, [r7, #16] - 80115b2: f003 0301 and.w r3, r3, #1 - 80115b6: 2b00 cmp r3, #0 - 80115b8: d014 beq.n 80115e4 - { - /* Get Start Tick */ - tickstart = HAL_GetTick(); - 80115ba: f7fd f98f bl 800e8dc - 80115be: 6178 str r0, [r7, #20] - - /* Wait till LSE is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 80115c0: e00a b.n 80115d8 - { - if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 80115c2: f7fd f98b bl 800e8dc - 80115c6: 4602 mov r2, r0 - 80115c8: 697b ldr r3, [r7, #20] - 80115ca: 1ad3 subs r3, r2, r3 - 80115cc: f241 3288 movw r2, #5000 @ 0x1388 - 80115d0: 4293 cmp r3, r2 - 80115d2: d901 bls.n 80115d8 - { - return HAL_TIMEOUT; - 80115d4: 2303 movs r3, #3 - 80115d6: e0ae b.n 8011736 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 80115d8: 4b59 ldr r3, [pc, #356] @ (8011740 ) - 80115da: 6a1b ldr r3, [r3, #32] - 80115dc: f003 0302 and.w r3, r3, #2 - 80115e0: 2b00 cmp r3, #0 - 80115e2: d0ee beq.n 80115c2 - } - } - } - } - __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection); - 80115e4: 4b56 ldr r3, [pc, #344] @ (8011740 ) - 80115e6: 6a1b ldr r3, [r3, #32] - 80115e8: f423 7240 bic.w r2, r3, #768 @ 0x300 - 80115ec: 687b ldr r3, [r7, #4] - 80115ee: 685b ldr r3, [r3, #4] - 80115f0: 4953 ldr r1, [pc, #332] @ (8011740 ) - 80115f2: 4313 orrs r3, r2 - 80115f4: 620b str r3, [r1, #32] - - /* Require to disable power clock if necessary */ - if (pwrclkchanged == SET) - 80115f6: 7efb ldrb r3, [r7, #27] - 80115f8: 2b01 cmp r3, #1 - 80115fa: d105 bne.n 8011608 - { - __HAL_RCC_PWR_CLK_DISABLE(); - 80115fc: 4b50 ldr r3, [pc, #320] @ (8011740 ) - 80115fe: 69db ldr r3, [r3, #28] - 8011600: 4a4f ldr r2, [pc, #316] @ (8011740 ) - 8011602: f023 5380 bic.w r3, r3, #268435456 @ 0x10000000 - 8011606: 61d3 str r3, [r2, #28] - } - } - - /*------------------------------ ADC clock Configuration ------------------*/ - if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) - 8011608: 687b ldr r3, [r7, #4] - 801160a: 681b ldr r3, [r3, #0] - 801160c: f003 0302 and.w r3, r3, #2 - 8011610: 2b00 cmp r3, #0 - 8011612: d008 beq.n 8011626 - { - /* Check the parameters */ - assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection)); - - /* Configure the ADC clock source */ - __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection); - 8011614: 4b4a ldr r3, [pc, #296] @ (8011740 ) - 8011616: 685b ldr r3, [r3, #4] - 8011618: f423 4240 bic.w r2, r3, #49152 @ 0xc000 - 801161c: 687b ldr r3, [r7, #4] - 801161e: 689b ldr r3, [r3, #8] - 8011620: 4947 ldr r1, [pc, #284] @ (8011740 ) - 8011622: 4313 orrs r3, r2 - 8011624: 604b str r3, [r1, #4] - } - -#if defined(STM32F105xC) || defined(STM32F107xC) - /*------------------------------ I2S2 Configuration ------------------------*/ - if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) - 8011626: 687b ldr r3, [r7, #4] - 8011628: 681b ldr r3, [r3, #0] - 801162a: f003 0304 and.w r3, r3, #4 - 801162e: 2b00 cmp r3, #0 - 8011630: d008 beq.n 8011644 - { - /* Check the parameters */ - assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection)); - - /* Configure the I2S2 clock source */ - __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection); - 8011632: 4b43 ldr r3, [pc, #268] @ (8011740 ) - 8011634: 6adb ldr r3, [r3, #44] @ 0x2c - 8011636: f423 3200 bic.w r2, r3, #131072 @ 0x20000 - 801163a: 687b ldr r3, [r7, #4] - 801163c: 68db ldr r3, [r3, #12] - 801163e: 4940 ldr r1, [pc, #256] @ (8011740 ) - 8011640: 4313 orrs r3, r2 - 8011642: 62cb str r3, [r1, #44] @ 0x2c - } - - /*------------------------------ I2S3 Configuration ------------------------*/ - if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) - 8011644: 687b ldr r3, [r7, #4] - 8011646: 681b ldr r3, [r3, #0] - 8011648: f003 0308 and.w r3, r3, #8 - 801164c: 2b00 cmp r3, #0 - 801164e: d008 beq.n 8011662 - { - /* Check the parameters */ - assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection)); - - /* Configure the I2S3 clock source */ - __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection); - 8011650: 4b3b ldr r3, [pc, #236] @ (8011740 ) - 8011652: 6adb ldr r3, [r3, #44] @ 0x2c - 8011654: f423 2280 bic.w r2, r3, #262144 @ 0x40000 - 8011658: 687b ldr r3, [r7, #4] - 801165a: 691b ldr r3, [r3, #16] - 801165c: 4938 ldr r1, [pc, #224] @ (8011740 ) - 801165e: 4313 orrs r3, r2 - 8011660: 62cb str r3, [r1, #44] @ 0x2c - } - - /*------------------------------ PLL I2S Configuration ----------------------*/ - /* Check that PLLI2S need to be enabled */ - if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) - 8011662: 4b37 ldr r3, [pc, #220] @ (8011740 ) - 8011664: 6adb ldr r3, [r3, #44] @ 0x2c - 8011666: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 801166a: 2b00 cmp r3, #0 - 801166c: d105 bne.n 801167a - 801166e: 4b34 ldr r3, [pc, #208] @ (8011740 ) - 8011670: 6adb ldr r3, [r3, #44] @ 0x2c - 8011672: f403 2380 and.w r3, r3, #262144 @ 0x40000 - 8011676: 2b00 cmp r3, #0 - 8011678: d001 beq.n 801167e - { - /* Update flag to indicate that PLL I2S should be active */ - pllactive = 1; - 801167a: 2301 movs r3, #1 - 801167c: 61fb str r3, [r7, #28] - } - - /* Check if PLL I2S need to be enabled */ - if (pllactive == 1) - 801167e: 69fb ldr r3, [r7, #28] - 8011680: 2b01 cmp r3, #1 - 8011682: d148 bne.n 8011716 - { - /* Enable PLL I2S only if not active */ - if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) - 8011684: 4b2e ldr r3, [pc, #184] @ (8011740 ) - 8011686: 681b ldr r3, [r3, #0] - 8011688: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 801168c: 2b00 cmp r3, #0 - 801168e: d138 bne.n 8011702 - assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL)); - assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value)); - - /* Prediv2 can be written only when the PLL2 is disabled. */ - /* Return an error only if new value is different from the programmed value */ - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && \ - 8011690: 4b2b ldr r3, [pc, #172] @ (8011740 ) - 8011692: 681b ldr r3, [r3, #0] - 8011694: f003 6380 and.w r3, r3, #67108864 @ 0x4000000 - 8011698: 2b00 cmp r3, #0 - 801169a: d009 beq.n 80116b0 - (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) - 801169c: 4b28 ldr r3, [pc, #160] @ (8011740 ) - 801169e: 6adb ldr r3, [r3, #44] @ 0x2c - 80116a0: f003 02f0 and.w r2, r3, #240 @ 0xf0 - 80116a4: 687b ldr r3, [r7, #4] - 80116a6: 699b ldr r3, [r3, #24] - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && \ - 80116a8: 429a cmp r2, r3 - 80116aa: d001 beq.n 80116b0 - { - return HAL_ERROR; - 80116ac: 2301 movs r3, #1 - 80116ae: e042 b.n 8011736 - } - - /* Configure the HSE prediv2 factor --------------------------------*/ - __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value); - 80116b0: 4b23 ldr r3, [pc, #140] @ (8011740 ) - 80116b2: 6adb ldr r3, [r3, #44] @ 0x2c - 80116b4: f023 02f0 bic.w r2, r3, #240 @ 0xf0 - 80116b8: 687b ldr r3, [r7, #4] - 80116ba: 699b ldr r3, [r3, #24] - 80116bc: 4920 ldr r1, [pc, #128] @ (8011740 ) - 80116be: 4313 orrs r3, r2 - 80116c0: 62cb str r3, [r1, #44] @ 0x2c - - /* Configure the main PLLI2S multiplication factors. */ - __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL); - 80116c2: 4b1f ldr r3, [pc, #124] @ (8011740 ) - 80116c4: 6adb ldr r3, [r3, #44] @ 0x2c - 80116c6: f423 4270 bic.w r2, r3, #61440 @ 0xf000 - 80116ca: 687b ldr r3, [r7, #4] - 80116cc: 695b ldr r3, [r3, #20] - 80116ce: 491c ldr r1, [pc, #112] @ (8011740 ) - 80116d0: 4313 orrs r3, r2 - 80116d2: 62cb str r3, [r1, #44] @ 0x2c - - /* Enable the main PLLI2S. */ - __HAL_RCC_PLLI2S_ENABLE(); - 80116d4: 4b1d ldr r3, [pc, #116] @ (801174c ) - 80116d6: 2201 movs r2, #1 - 80116d8: 601a str r2, [r3, #0] - - /* Get Start Tick*/ - tickstart = HAL_GetTick(); - 80116da: f7fd f8ff bl 800e8dc - 80116de: 6178 str r0, [r7, #20] - - /* Wait till PLLI2S is ready */ - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) - 80116e0: e008 b.n 80116f4 - { - if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) - 80116e2: f7fd f8fb bl 800e8dc - 80116e6: 4602 mov r2, r0 - 80116e8: 697b ldr r3, [r7, #20] - 80116ea: 1ad3 subs r3, r2, r3 - 80116ec: 2b64 cmp r3, #100 @ 0x64 - 80116ee: d901 bls.n 80116f4 - { - return HAL_TIMEOUT; - 80116f0: 2303 movs r3, #3 - 80116f2: e020 b.n 8011736 - while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) - 80116f4: 4b12 ldr r3, [pc, #72] @ (8011740 ) - 80116f6: 681b ldr r3, [r3, #0] - 80116f8: f003 5300 and.w r3, r3, #536870912 @ 0x20000000 - 80116fc: 2b00 cmp r3, #0 - 80116fe: d0f0 beq.n 80116e2 - 8011700: e009 b.n 8011716 - } - } - else - { - /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */ - if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) - 8011702: 4b0f ldr r3, [pc, #60] @ (8011740 ) - 8011704: 6adb ldr r3, [r3, #44] @ 0x2c - 8011706: f403 4270 and.w r2, r3, #61440 @ 0xf000 - 801170a: 687b ldr r3, [r7, #4] - 801170c: 695b ldr r3, [r3, #20] - 801170e: 429a cmp r2, r3 - 8011710: d001 beq.n 8011716 - { - return HAL_ERROR; - 8011712: 2301 movs r3, #1 - 8011714: e00f b.n 8011736 - -#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\ - || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ - || defined(STM32F105xC) || defined(STM32F107xC) - /*------------------------------ USB clock Configuration ------------------*/ - if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) - 8011716: 687b ldr r3, [r7, #4] - 8011718: 681b ldr r3, [r3, #0] - 801171a: f003 0310 and.w r3, r3, #16 - 801171e: 2b00 cmp r3, #0 - 8011720: d008 beq.n 8011734 - { - /* Check the parameters */ - assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection)); - - /* Configure the USB clock source */ - __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection); - 8011722: 4b07 ldr r3, [pc, #28] @ (8011740 ) - 8011724: 685b ldr r3, [r3, #4] - 8011726: f423 0280 bic.w r2, r3, #4194304 @ 0x400000 - 801172a: 687b ldr r3, [r7, #4] - 801172c: 69db ldr r3, [r3, #28] - 801172e: 4904 ldr r1, [pc, #16] @ (8011740 ) - 8011730: 4313 orrs r3, r2 - 8011732: 604b str r3, [r1, #4] - } -#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ - - return HAL_OK; - 8011734: 2300 movs r3, #0 -} - 8011736: 4618 mov r0, r3 - 8011738: 3720 adds r7, #32 - 801173a: 46bd mov sp, r7 - 801173c: bd80 pop {r7, pc} - 801173e: bf00 nop - 8011740: 40021000 .word 0x40021000 - 8011744: 40007000 .word 0x40007000 - 8011748: 42420440 .word 0x42420440 - 801174c: 42420070 .word 0x42420070 - -08011750 : - * @arg @ref RCC_PERIPHCLK_USB USB peripheral clock - @endif - * @retval Frequency in Hz (0: means that no available frequency for the peripheral) - */ -uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) -{ - 8011750: b580 push {r7, lr} - 8011752: b08a sub sp, #40 @ 0x28 - 8011754: af00 add r7, sp, #0 - 8011756: 6078 str r0, [r7, #4] -#if defined(STM32F105xC) || defined(STM32F107xC) - static const uint8_t aPLLMULFactorTable[14U] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13}; - static const uint8_t aPredivFactorTable[16U] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; - - uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U; - 8011758: 2300 movs r3, #0 - 801175a: 61fb str r3, [r7, #28] - 801175c: 2300 movs r3, #0 - 801175e: 627b str r3, [r7, #36] @ 0x24 - 8011760: 2300 movs r3, #0 - 8011762: 61bb str r3, [r7, #24] - uint32_t pll2mul = 0U, pll3mul = 0U, prediv2 = 0U; - 8011764: 2300 movs r3, #0 - 8011766: 617b str r3, [r7, #20] - 8011768: 2300 movs r3, #0 - 801176a: 613b str r3, [r7, #16] - 801176c: 2300 movs r3, #0 - 801176e: 60fb str r3, [r7, #12] - static const uint8_t aPLLMULFactorTable[16U] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; - static const uint8_t aPredivFactorTable[2U] = {1, 2}; - - uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U; -#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */ - uint32_t temp_reg = 0U, frequency = 0U; - 8011770: 2300 movs r3, #0 - 8011772: 60bb str r3, [r7, #8] - 8011774: 2300 movs r3, #0 - 8011776: 623b str r3, [r7, #32] - - /* Check the parameters */ - assert_param(IS_RCC_PERIPHCLOCK(PeriphClk)); - - switch (PeriphClk) - 8011778: 687b ldr r3, [r7, #4] - 801177a: 3b01 subs r3, #1 - 801177c: 2b0f cmp r3, #15 - 801177e: f200 811d bhi.w 80119bc - 8011782: a201 add r2, pc, #4 @ (adr r2, 8011788 ) - 8011784: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8011788: 0801193d .word 0x0801193d - 801178c: 080119a1 .word 0x080119a1 - 8011790: 080119bd .word 0x080119bd - 8011794: 0801189b .word 0x0801189b - 8011798: 080119bd .word 0x080119bd - 801179c: 080119bd .word 0x080119bd - 80117a0: 080119bd .word 0x080119bd - 80117a4: 080118ed .word 0x080118ed - 80117a8: 080119bd .word 0x080119bd - 80117ac: 080119bd .word 0x080119bd - 80117b0: 080119bd .word 0x080119bd - 80117b4: 080119bd .word 0x080119bd - 80117b8: 080119bd .word 0x080119bd - 80117bc: 080119bd .word 0x080119bd - 80117c0: 080119bd .word 0x080119bd - 80117c4: 080117c9 .word 0x080117c9 - || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\ - || defined(STM32F105xC) || defined(STM32F107xC) - case RCC_PERIPHCLK_USB: - { - /* Get RCC configuration ------------------------------------------------------*/ - temp_reg = RCC->CFGR; - 80117c8: 4b83 ldr r3, [pc, #524] @ (80119d8 ) - 80117ca: 685b ldr r3, [r3, #4] - 80117cc: 60bb str r3, [r7, #8] - - /* Check if PLL is enabled */ - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLON)) - 80117ce: 4b82 ldr r3, [pc, #520] @ (80119d8 ) - 80117d0: 681b ldr r3, [r3, #0] - 80117d2: f003 7380 and.w r3, r3, #16777216 @ 0x1000000 - 80117d6: 2b00 cmp r3, #0 - 80117d8: f000 80f2 beq.w 80119c0 - { - pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; - 80117dc: 68bb ldr r3, [r7, #8] - 80117de: 0c9b lsrs r3, r3, #18 - 80117e0: f003 030f and.w r3, r3, #15 - 80117e4: 4a7d ldr r2, [pc, #500] @ (80119dc ) - 80117e6: 5cd3 ldrb r3, [r2, r3] - 80117e8: 61bb str r3, [r7, #24] - if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) - 80117ea: 68bb ldr r3, [r7, #8] - 80117ec: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 80117f0: 2b00 cmp r3, #0 - 80117f2: d03b beq.n 801186c - { -#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB)\ - || defined(STM32F100xE) - prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; - 80117f4: 4b78 ldr r3, [pc, #480] @ (80119d8 ) - 80117f6: 6adb ldr r3, [r3, #44] @ 0x2c - 80117f8: f003 030f and.w r3, r3, #15 - 80117fc: 4a78 ldr r2, [pc, #480] @ (80119e0 ) - 80117fe: 5cd3 ldrb r3, [r2, r3] - 8011800: 61fb str r3, [r7, #28] -#else - prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; -#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */ - -#if defined(STM32F105xC) || defined(STM32F107xC) - if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) - 8011802: 4b75 ldr r3, [pc, #468] @ (80119d8 ) - 8011804: 6adb ldr r3, [r3, #44] @ 0x2c - 8011806: f403 3380 and.w r3, r3, #65536 @ 0x10000 - 801180a: 2b00 cmp r3, #0 - 801180c: d01c beq.n 8011848 - { - /* PLL2 selected as Prediv1 source */ - /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */ - prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; - 801180e: 4b72 ldr r3, [pc, #456] @ (80119d8 ) - 8011810: 6adb ldr r3, [r3, #44] @ 0x2c - 8011812: 091b lsrs r3, r3, #4 - 8011814: f003 030f and.w r3, r3, #15 - 8011818: 3301 adds r3, #1 - 801181a: 60fb str r3, [r7, #12] - pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2; - 801181c: 4b6e ldr r3, [pc, #440] @ (80119d8 ) - 801181e: 6adb ldr r3, [r3, #44] @ 0x2c - 8011820: 0a1b lsrs r3, r3, #8 - 8011822: f003 030f and.w r3, r3, #15 - 8011826: 3302 adds r3, #2 - 8011828: 617b str r3, [r7, #20] - pllclk = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul); - 801182a: 4a6e ldr r2, [pc, #440] @ (80119e4 ) - 801182c: 68fb ldr r3, [r7, #12] - 801182e: fbb2 f3f3 udiv r3, r2, r3 - 8011832: 697a ldr r2, [r7, #20] - 8011834: fb03 f202 mul.w r2, r3, r2 - 8011838: 69fb ldr r3, [r7, #28] - 801183a: fbb2 f2f3 udiv r2, r2, r3 - 801183e: 69bb ldr r3, [r7, #24] - 8011840: fb02 f303 mul.w r3, r2, r3 - 8011844: 627b str r3, [r7, #36] @ 0x24 - 8011846: e007 b.n 8011858 - } - else - { - /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ - pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul); - 8011848: 4a66 ldr r2, [pc, #408] @ (80119e4 ) - 801184a: 69fb ldr r3, [r7, #28] - 801184c: fbb2 f2f3 udiv r2, r2, r3 - 8011850: 69bb ldr r3, [r7, #24] - 8011852: fb02 f303 mul.w r3, r2, r3 - 8011856: 627b str r3, [r7, #36] @ 0x24 - } - - /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */ - /* In this case need to divide pllclk by 2 */ - if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) - 8011858: 4b60 ldr r3, [pc, #384] @ (80119dc ) - 801185a: 7b5b ldrb r3, [r3, #13] - 801185c: 461a mov r2, r3 - 801185e: 69bb ldr r3, [r7, #24] - 8011860: 4293 cmp r3, r2 - 8011862: d108 bne.n 8011876 - { - pllclk = pllclk / 2; - 8011864: 6a7b ldr r3, [r7, #36] @ 0x24 - 8011866: 085b lsrs r3, r3, #1 - 8011868: 627b str r3, [r7, #36] @ 0x24 - 801186a: e004 b.n 8011876 -#endif /* STM32F105xC || STM32F107xC */ - } - else - { - /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ - pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); - 801186c: 69bb ldr r3, [r7, #24] - 801186e: 4a5e ldr r2, [pc, #376] @ (80119e8 ) - 8011870: fb02 f303 mul.w r3, r2, r3 - 8011874: 627b str r3, [r7, #36] @ 0x24 - } - - /* Calcul of the USB frequency*/ -#if defined(STM32F105xC) || defined(STM32F107xC) - /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */ - if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) - 8011876: 4b58 ldr r3, [pc, #352] @ (80119d8 ) - 8011878: 685b ldr r3, [r3, #4] - 801187a: f403 0380 and.w r3, r3, #4194304 @ 0x400000 - 801187e: f5b3 0f80 cmp.w r3, #4194304 @ 0x400000 - 8011882: d102 bne.n 801188a - { - /* Prescaler of 2 selected for USB */ - frequency = pllclk; - 8011884: 6a7b ldr r3, [r7, #36] @ 0x24 - 8011886: 623b str r3, [r7, #32] - /* Prescaler of 1.5 selected for USB */ - frequency = (pllclk * 2) / 3; - } -#endif - } - break; - 8011888: e09a b.n 80119c0 - frequency = (2 * pllclk) / 3; - 801188a: 6a7b ldr r3, [r7, #36] @ 0x24 - 801188c: 005b lsls r3, r3, #1 - 801188e: 4a57 ldr r2, [pc, #348] @ (80119ec ) - 8011890: fba2 2303 umull r2, r3, r2, r3 - 8011894: 085b lsrs r3, r3, #1 - 8011896: 623b str r3, [r7, #32] - break; - 8011898: e092 b.n 80119c0 - { -#if defined(STM32F103xE) || defined(STM32F103xG) - /* SYSCLK used as source clock for I2S2 */ - frequency = HAL_RCC_GetSysClockFreq(); -#else - if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) - 801189a: 4b4f ldr r3, [pc, #316] @ (80119d8 ) - 801189c: 6adb ldr r3, [r3, #44] @ 0x2c - 801189e: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 80118a2: 2b00 cmp r3, #0 - 80118a4: d103 bne.n 80118ae - { - /* SYSCLK used as source clock for I2S2 */ - frequency = HAL_RCC_GetSysClockFreq(); - 80118a6: f7ff fd15 bl 80112d4 - 80118aa: 6238 str r0, [r7, #32] - pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; - frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); - } - } -#endif /* STM32F103xE || STM32F103xG */ - break; - 80118ac: e08a b.n 80119c4 - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) - 80118ae: 4b4a ldr r3, [pc, #296] @ (80119d8 ) - 80118b0: 681b ldr r3, [r3, #0] - 80118b2: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 80118b6: 2b00 cmp r3, #0 - 80118b8: f000 8084 beq.w 80119c4 - prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; - 80118bc: 4b46 ldr r3, [pc, #280] @ (80119d8 ) - 80118be: 6adb ldr r3, [r3, #44] @ 0x2c - 80118c0: 091b lsrs r3, r3, #4 - 80118c2: f003 030f and.w r3, r3, #15 - 80118c6: 3301 adds r3, #1 - 80118c8: 60fb str r3, [r7, #12] - pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; - 80118ca: 4b43 ldr r3, [pc, #268] @ (80119d8 ) - 80118cc: 6adb ldr r3, [r3, #44] @ 0x2c - 80118ce: 0b1b lsrs r3, r3, #12 - 80118d0: f003 030f and.w r3, r3, #15 - 80118d4: 3302 adds r3, #2 - 80118d6: 613b str r3, [r7, #16] - frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); - 80118d8: 4a42 ldr r2, [pc, #264] @ (80119e4 ) - 80118da: 68fb ldr r3, [r7, #12] - 80118dc: fbb2 f3f3 udiv r3, r2, r3 - 80118e0: 693a ldr r2, [r7, #16] - 80118e2: fb02 f303 mul.w r3, r2, r3 - 80118e6: 005b lsls r3, r3, #1 - 80118e8: 623b str r3, [r7, #32] - break; - 80118ea: e06b b.n 80119c4 - { -#if defined(STM32F103xE) || defined(STM32F103xG) - /* SYSCLK used as source clock for I2S3 */ - frequency = HAL_RCC_GetSysClockFreq(); -#else - if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) - 80118ec: 4b3a ldr r3, [pc, #232] @ (80119d8 ) - 80118ee: 6adb ldr r3, [r3, #44] @ 0x2c - 80118f0: f403 2380 and.w r3, r3, #262144 @ 0x40000 - 80118f4: 2b00 cmp r3, #0 - 80118f6: d103 bne.n 8011900 - { - /* SYSCLK used as source clock for I2S3 */ - frequency = HAL_RCC_GetSysClockFreq(); - 80118f8: f7ff fcec bl 80112d4 - 80118fc: 6238 str r0, [r7, #32] - pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; - frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); - } - } -#endif /* STM32F103xE || STM32F103xG */ - break; - 80118fe: e063 b.n 80119c8 - if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) - 8011900: 4b35 ldr r3, [pc, #212] @ (80119d8 ) - 8011902: 681b ldr r3, [r3, #0] - 8011904: f003 5380 and.w r3, r3, #268435456 @ 0x10000000 - 8011908: 2b00 cmp r3, #0 - 801190a: d05d beq.n 80119c8 - prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1; - 801190c: 4b32 ldr r3, [pc, #200] @ (80119d8 ) - 801190e: 6adb ldr r3, [r3, #44] @ 0x2c - 8011910: 091b lsrs r3, r3, #4 - 8011912: f003 030f and.w r3, r3, #15 - 8011916: 3301 adds r3, #1 - 8011918: 60fb str r3, [r7, #12] - pll3mul = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2; - 801191a: 4b2f ldr r3, [pc, #188] @ (80119d8 ) - 801191c: 6adb ldr r3, [r3, #44] @ 0x2c - 801191e: 0b1b lsrs r3, r3, #12 - 8011920: f003 030f and.w r3, r3, #15 - 8011924: 3302 adds r3, #2 - 8011926: 613b str r3, [r7, #16] - frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul)); - 8011928: 4a2e ldr r2, [pc, #184] @ (80119e4 ) - 801192a: 68fb ldr r3, [r7, #12] - 801192c: fbb2 f3f3 udiv r3, r2, r3 - 8011930: 693a ldr r2, [r7, #16] - 8011932: fb02 f303 mul.w r3, r2, r3 - 8011936: 005b lsls r3, r3, #1 - 8011938: 623b str r3, [r7, #32] - break; - 801193a: e045 b.n 80119c8 - } -#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */ - case RCC_PERIPHCLK_RTC: - { - /* Get RCC BDCR configuration ------------------------------------------------------*/ - temp_reg = RCC->BDCR; - 801193c: 4b26 ldr r3, [pc, #152] @ (80119d8 ) - 801193e: 6a1b ldr r3, [r3, #32] - 8011940: 60bb str r3, [r7, #8] - - /* Check if LSE is ready if RTC clock selection is LSE */ - if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) - 8011942: 68bb ldr r3, [r7, #8] - 8011944: f403 7340 and.w r3, r3, #768 @ 0x300 - 8011948: f5b3 7f80 cmp.w r3, #256 @ 0x100 - 801194c: d108 bne.n 8011960 - 801194e: 68bb ldr r3, [r7, #8] - 8011950: f003 0302 and.w r3, r3, #2 - 8011954: 2b00 cmp r3, #0 - 8011956: d003 beq.n 8011960 - { - frequency = LSE_VALUE; - 8011958: f44f 4300 mov.w r3, #32768 @ 0x8000 - 801195c: 623b str r3, [r7, #32] - 801195e: e01e b.n 801199e - } - /* Check if LSI is ready if RTC clock selection is LSI */ - else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) - 8011960: 68bb ldr r3, [r7, #8] - 8011962: f403 7340 and.w r3, r3, #768 @ 0x300 - 8011966: f5b3 7f00 cmp.w r3, #512 @ 0x200 - 801196a: d109 bne.n 8011980 - 801196c: 4b1a ldr r3, [pc, #104] @ (80119d8 ) - 801196e: 6a5b ldr r3, [r3, #36] @ 0x24 - 8011970: f003 0302 and.w r3, r3, #2 - 8011974: 2b00 cmp r3, #0 - 8011976: d003 beq.n 8011980 - { - frequency = LSI_VALUE; - 8011978: f649 4340 movw r3, #40000 @ 0x9c40 - 801197c: 623b str r3, [r7, #32] - 801197e: e00e b.n 801199e - } - else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) - 8011980: 68bb ldr r3, [r7, #8] - 8011982: f403 7340 and.w r3, r3, #768 @ 0x300 - 8011986: f5b3 7f40 cmp.w r3, #768 @ 0x300 - 801198a: d11f bne.n 80119cc - 801198c: 4b12 ldr r3, [pc, #72] @ (80119d8 ) - 801198e: 681b ldr r3, [r3, #0] - 8011990: f403 3300 and.w r3, r3, #131072 @ 0x20000 - 8011994: 2b00 cmp r3, #0 - 8011996: d019 beq.n 80119cc - { - frequency = HSE_VALUE / 128U; - 8011998: 4b15 ldr r3, [pc, #84] @ (80119f0 ) - 801199a: 623b str r3, [r7, #32] - /* Clock not enabled for RTC*/ - else - { - /* nothing to do: frequency already initialized to 0U */ - } - break; - 801199c: e016 b.n 80119cc - 801199e: e015 b.n 80119cc - } - case RCC_PERIPHCLK_ADC: - { - frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> RCC_CFGR_ADCPRE_Pos) + 1) * 2); - 80119a0: f7ff fd72 bl 8011488 - 80119a4: 4602 mov r2, r0 - 80119a6: 4b0c ldr r3, [pc, #48] @ (80119d8 ) - 80119a8: 685b ldr r3, [r3, #4] - 80119aa: 0b9b lsrs r3, r3, #14 - 80119ac: f003 0303 and.w r3, r3, #3 - 80119b0: 3301 adds r3, #1 - 80119b2: 005b lsls r3, r3, #1 - 80119b4: fbb2 f3f3 udiv r3, r2, r3 - 80119b8: 623b str r3, [r7, #32] - break; - 80119ba: e008 b.n 80119ce - } - default: - { - break; - 80119bc: bf00 nop - 80119be: e006 b.n 80119ce - break; - 80119c0: bf00 nop - 80119c2: e004 b.n 80119ce - break; - 80119c4: bf00 nop - 80119c6: e002 b.n 80119ce - break; - 80119c8: bf00 nop - 80119ca: e000 b.n 80119ce - break; - 80119cc: bf00 nop - } - } - return (frequency); - 80119ce: 6a3b ldr r3, [r7, #32] -} - 80119d0: 4618 mov r0, r3 - 80119d2: 3728 adds r7, #40 @ 0x28 - 80119d4: 46bd mov sp, r7 - 80119d6: bd80 pop {r7, pc} - 80119d8: 40021000 .word 0x40021000 - 80119dc: 08016d50 .word 0x08016d50 - 80119e0: 08016d60 .word 0x08016d60 - 80119e4: 017d7840 .word 0x017d7840 - 80119e8: 003d0900 .word 0x003d0900 - 80119ec: aaaaaaab .word 0xaaaaaaab - 80119f0: 0002faf0 .word 0x0002faf0 - -080119f4 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_Init(RTC_HandleTypeDef *hrtc) -{ - 80119f4: b580 push {r7, lr} - 80119f6: b084 sub sp, #16 - 80119f8: af00 add r7, sp, #0 - 80119fa: 6078 str r0, [r7, #4] - uint32_t prescaler = 0U; - 80119fc: 2300 movs r3, #0 - 80119fe: 60fb str r3, [r7, #12] - /* Check input parameters */ - if (hrtc == NULL) - 8011a00: 687b ldr r3, [r7, #4] - 8011a02: 2b00 cmp r3, #0 - 8011a04: d101 bne.n 8011a0a - { - return HAL_ERROR; - 8011a06: 2301 movs r3, #1 - 8011a08: e07a b.n 8011b00 - { - hrtc->MspDeInitCallback = HAL_RTC_MspDeInit; - } - } -#else - if (hrtc->State == HAL_RTC_STATE_RESET) - 8011a0a: 687b ldr r3, [r7, #4] - 8011a0c: 7c5b ldrb r3, [r3, #17] - 8011a0e: b2db uxtb r3, r3 - 8011a10: 2b00 cmp r3, #0 - 8011a12: d105 bne.n 8011a20 - { - /* Allocate lock resource and initialize it */ - hrtc->Lock = HAL_UNLOCKED; - 8011a14: 687b ldr r3, [r7, #4] - 8011a16: 2200 movs r2, #0 - 8011a18: 741a strb r2, [r3, #16] - - /* Initialize RTC MSP */ - HAL_RTC_MspInit(hrtc); - 8011a1a: 6878 ldr r0, [r7, #4] - 8011a1c: f7fb fc82 bl 800d324 - } -#endif /* (USE_HAL_RTC_REGISTER_CALLBACKS) */ - - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_BUSY; - 8011a20: 687b ldr r3, [r7, #4] - 8011a22: 2202 movs r2, #2 - 8011a24: 745a strb r2, [r3, #17] - - /* Waiting for synchro */ - if (HAL_RTC_WaitForSynchro(hrtc) != HAL_OK) - 8011a26: 6878 ldr r0, [r7, #4] - 8011a28: f000 f870 bl 8011b0c - 8011a2c: 4603 mov r3, r0 - 8011a2e: 2b00 cmp r3, #0 - 8011a30: d004 beq.n 8011a3c - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - 8011a32: 687b ldr r3, [r7, #4] - 8011a34: 2204 movs r2, #4 - 8011a36: 745a strb r2, [r3, #17] - - return HAL_ERROR; - 8011a38: 2301 movs r3, #1 - 8011a3a: e061 b.n 8011b00 - } - - /* Set Initialization mode */ - if (RTC_EnterInitMode(hrtc) != HAL_OK) - 8011a3c: 6878 ldr r0, [r7, #4] - 8011a3e: f000 f892 bl 8011b66 - 8011a42: 4603 mov r3, r0 - 8011a44: 2b00 cmp r3, #0 - 8011a46: d004 beq.n 8011a52 - { - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_ERROR; - 8011a48: 687b ldr r3, [r7, #4] - 8011a4a: 2204 movs r2, #4 - 8011a4c: 745a strb r2, [r3, #17] - - return HAL_ERROR; - 8011a4e: 2301 movs r3, #1 - 8011a50: e056 b.n 8011b00 - } - else - { - /* Clear Flags Bits */ - CLEAR_BIT(hrtc->Instance->CRL, (RTC_FLAG_OW | RTC_FLAG_ALRAF | RTC_FLAG_SEC)); - 8011a52: 687b ldr r3, [r7, #4] - 8011a54: 681b ldr r3, [r3, #0] - 8011a56: 685a ldr r2, [r3, #4] - 8011a58: 687b ldr r3, [r7, #4] - 8011a5a: 681b ldr r3, [r3, #0] - 8011a5c: f022 0207 bic.w r2, r2, #7 - 8011a60: 605a str r2, [r3, #4] - - if (hrtc->Init.OutPut != RTC_OUTPUTSOURCE_NONE) - 8011a62: 687b ldr r3, [r7, #4] - 8011a64: 689b ldr r3, [r3, #8] - 8011a66: 2b00 cmp r3, #0 - 8011a68: d005 beq.n 8011a76 - { - /* Disable the selected Tamper pin */ - CLEAR_BIT(BKP->CR, BKP_CR_TPE); - 8011a6a: 4b27 ldr r3, [pc, #156] @ (8011b08 ) - 8011a6c: 6b1b ldr r3, [r3, #48] @ 0x30 - 8011a6e: 4a26 ldr r2, [pc, #152] @ (8011b08 ) - 8011a70: f023 0301 bic.w r3, r3, #1 - 8011a74: 6313 str r3, [r2, #48] @ 0x30 - } - - /* Set the signal which will be routed to RTC Tamper pin*/ - MODIFY_REG(BKP->RTCCR, (BKP_RTCCR_CCO | BKP_RTCCR_ASOE | BKP_RTCCR_ASOS), hrtc->Init.OutPut); - 8011a76: 4b24 ldr r3, [pc, #144] @ (8011b08 ) - 8011a78: 6adb ldr r3, [r3, #44] @ 0x2c - 8011a7a: f423 7260 bic.w r2, r3, #896 @ 0x380 - 8011a7e: 687b ldr r3, [r7, #4] - 8011a80: 689b ldr r3, [r3, #8] - 8011a82: 4921 ldr r1, [pc, #132] @ (8011b08 ) - 8011a84: 4313 orrs r3, r2 - 8011a86: 62cb str r3, [r1, #44] @ 0x2c - - if (hrtc->Init.AsynchPrediv != RTC_AUTO_1_SECOND) - 8011a88: 687b ldr r3, [r7, #4] - 8011a8a: 685b ldr r3, [r3, #4] - 8011a8c: f1b3 3fff cmp.w r3, #4294967295 @ 0xffffffff - 8011a90: d003 beq.n 8011a9a - { - /* RTC Prescaler provided directly by end-user*/ - prescaler = hrtc->Init.AsynchPrediv; - 8011a92: 687b ldr r3, [r7, #4] - 8011a94: 685b ldr r3, [r3, #4] - 8011a96: 60fb str r3, [r7, #12] - 8011a98: e00e b.n 8011ab8 - } - else - { - /* RTC Prescaler will be automatically calculated to get 1 second timebase */ - /* Get the RTCCLK frequency */ - prescaler = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_RTC); - 8011a9a: 2001 movs r0, #1 - 8011a9c: f7ff fe58 bl 8011750 - 8011aa0: 60f8 str r0, [r7, #12] - - /* Check that RTC clock is enabled*/ - if (prescaler == 0U) - 8011aa2: 68fb ldr r3, [r7, #12] - 8011aa4: 2b00 cmp r3, #0 - 8011aa6: d104 bne.n 8011ab2 - { - /* Should not happen. Frequency is not available*/ - hrtc->State = HAL_RTC_STATE_ERROR; - 8011aa8: 687b ldr r3, [r7, #4] - 8011aaa: 2204 movs r2, #4 - 8011aac: 745a strb r2, [r3, #17] - return HAL_ERROR; - 8011aae: 2301 movs r3, #1 - 8011ab0: e026 b.n 8011b00 - } - else - { - /* RTC period = RTCCLK/(RTC_PR + 1) */ - prescaler = prescaler - 1U; - 8011ab2: 68fb ldr r3, [r7, #12] - 8011ab4: 3b01 subs r3, #1 - 8011ab6: 60fb str r3, [r7, #12] - } - } - - /* Configure the RTC_PRLH / RTC_PRLL */ - WRITE_REG(hrtc->Instance->PRLH, ((prescaler >> 16U) & RTC_PRLH_PRL)); - 8011ab8: 68fb ldr r3, [r7, #12] - 8011aba: 0c1a lsrs r2, r3, #16 - 8011abc: 687b ldr r3, [r7, #4] - 8011abe: 681b ldr r3, [r3, #0] - 8011ac0: f002 020f and.w r2, r2, #15 - 8011ac4: 609a str r2, [r3, #8] - WRITE_REG(hrtc->Instance->PRLL, (prescaler & RTC_PRLL_PRL)); - 8011ac6: 687b ldr r3, [r7, #4] - 8011ac8: 681b ldr r3, [r3, #0] - 8011aca: 68fa ldr r2, [r7, #12] - 8011acc: b292 uxth r2, r2 - 8011ace: 60da str r2, [r3, #12] - - /* Wait for synchro */ - if (RTC_ExitInitMode(hrtc) != HAL_OK) - 8011ad0: 6878 ldr r0, [r7, #4] - 8011ad2: f000 f870 bl 8011bb6 - 8011ad6: 4603 mov r3, r0 - 8011ad8: 2b00 cmp r3, #0 - 8011ada: d004 beq.n 8011ae6 - { - hrtc->State = HAL_RTC_STATE_ERROR; - 8011adc: 687b ldr r3, [r7, #4] - 8011ade: 2204 movs r2, #4 - 8011ae0: 745a strb r2, [r3, #17] - - return HAL_ERROR; - 8011ae2: 2301 movs r3, #1 - 8011ae4: e00c b.n 8011b00 - } - - /* Initialize date to 1st of January 2000 */ - hrtc->DateToUpdate.Year = 0x00U; - 8011ae6: 687b ldr r3, [r7, #4] - 8011ae8: 2200 movs r2, #0 - 8011aea: 73da strb r2, [r3, #15] - hrtc->DateToUpdate.Month = RTC_MONTH_JANUARY; - 8011aec: 687b ldr r3, [r7, #4] - 8011aee: 2201 movs r2, #1 - 8011af0: 735a strb r2, [r3, #13] - hrtc->DateToUpdate.Date = 0x01U; - 8011af2: 687b ldr r3, [r7, #4] - 8011af4: 2201 movs r2, #1 - 8011af6: 739a strb r2, [r3, #14] - - /* Set RTC state */ - hrtc->State = HAL_RTC_STATE_READY; - 8011af8: 687b ldr r3, [r7, #4] - 8011afa: 2201 movs r2, #1 - 8011afc: 745a strb r2, [r3, #17] - - return HAL_OK; - 8011afe: 2300 movs r3, #0 - } -} - 8011b00: 4618 mov r0, r3 - 8011b02: 3710 adds r7, #16 - 8011b04: 46bd mov sp, r7 - 8011b06: bd80 pop {r7, pc} - 8011b08: 40006c00 .word 0x40006c00 - -08011b0c : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_RTC_WaitForSynchro(RTC_HandleTypeDef *hrtc) -{ - 8011b0c: b580 push {r7, lr} - 8011b0e: b084 sub sp, #16 - 8011b10: af00 add r7, sp, #0 - 8011b12: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 8011b14: 2300 movs r3, #0 - 8011b16: 60fb str r3, [r7, #12] - - /* Check input parameters */ - if (hrtc == NULL) - 8011b18: 687b ldr r3, [r7, #4] - 8011b1a: 2b00 cmp r3, #0 - 8011b1c: d101 bne.n 8011b22 - { - return HAL_ERROR; - 8011b1e: 2301 movs r3, #1 - 8011b20: e01d b.n 8011b5e - } - - /* Clear RSF flag */ - CLEAR_BIT(hrtc->Instance->CRL, RTC_FLAG_RSF); - 8011b22: 687b ldr r3, [r7, #4] - 8011b24: 681b ldr r3, [r3, #0] - 8011b26: 685a ldr r2, [r3, #4] - 8011b28: 687b ldr r3, [r7, #4] - 8011b2a: 681b ldr r3, [r3, #0] - 8011b2c: f022 0208 bic.w r2, r2, #8 - 8011b30: 605a str r2, [r3, #4] - - tickstart = HAL_GetTick(); - 8011b32: f7fc fed3 bl 800e8dc - 8011b36: 60f8 str r0, [r7, #12] - - /* Wait the registers to be synchronised */ - while ((hrtc->Instance->CRL & RTC_FLAG_RSF) == (uint32_t)RESET) - 8011b38: e009 b.n 8011b4e - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - 8011b3a: f7fc fecf bl 800e8dc - 8011b3e: 4602 mov r2, r0 - 8011b40: 68fb ldr r3, [r7, #12] - 8011b42: 1ad3 subs r3, r2, r3 - 8011b44: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 8011b48: d901 bls.n 8011b4e - { - return HAL_TIMEOUT; - 8011b4a: 2303 movs r3, #3 - 8011b4c: e007 b.n 8011b5e - while ((hrtc->Instance->CRL & RTC_FLAG_RSF) == (uint32_t)RESET) - 8011b4e: 687b ldr r3, [r7, #4] - 8011b50: 681b ldr r3, [r3, #0] - 8011b52: 685b ldr r3, [r3, #4] - 8011b54: f003 0308 and.w r3, r3, #8 - 8011b58: 2b00 cmp r3, #0 - 8011b5a: d0ee beq.n 8011b3a - } - } - - return HAL_OK; - 8011b5c: 2300 movs r3, #0 -} - 8011b5e: 4618 mov r0, r3 - 8011b60: 3710 adds r7, #16 - 8011b62: 46bd mov sp, r7 - 8011b64: bd80 pop {r7, pc} - -08011b66 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_EnterInitMode(RTC_HandleTypeDef *hrtc) -{ - 8011b66: b580 push {r7, lr} - 8011b68: b084 sub sp, #16 - 8011b6a: af00 add r7, sp, #0 - 8011b6c: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 8011b6e: 2300 movs r3, #0 - 8011b70: 60fb str r3, [r7, #12] - - tickstart = HAL_GetTick(); - 8011b72: f7fc feb3 bl 800e8dc - 8011b76: 60f8 str r0, [r7, #12] - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 8011b78: e009 b.n 8011b8e - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - 8011b7a: f7fc feaf bl 800e8dc - 8011b7e: 4602 mov r2, r0 - 8011b80: 68fb ldr r3, [r7, #12] - 8011b82: 1ad3 subs r3, r2, r3 - 8011b84: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 8011b88: d901 bls.n 8011b8e - { - return HAL_TIMEOUT; - 8011b8a: 2303 movs r3, #3 - 8011b8c: e00f b.n 8011bae - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 8011b8e: 687b ldr r3, [r7, #4] - 8011b90: 681b ldr r3, [r3, #0] - 8011b92: 685b ldr r3, [r3, #4] - 8011b94: f003 0320 and.w r3, r3, #32 - 8011b98: 2b00 cmp r3, #0 - 8011b9a: d0ee beq.n 8011b7a - } - } - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_DISABLE(hrtc); - 8011b9c: 687b ldr r3, [r7, #4] - 8011b9e: 681b ldr r3, [r3, #0] - 8011ba0: 685a ldr r2, [r3, #4] - 8011ba2: 687b ldr r3, [r7, #4] - 8011ba4: 681b ldr r3, [r3, #0] - 8011ba6: f042 0210 orr.w r2, r2, #16 - 8011baa: 605a str r2, [r3, #4] - - - return HAL_OK; - 8011bac: 2300 movs r3, #0 -} - 8011bae: 4618 mov r0, r3 - 8011bb0: 3710 adds r7, #16 - 8011bb2: 46bd mov sp, r7 - 8011bb4: bd80 pop {r7, pc} - -08011bb6 : - * @param hrtc pointer to a RTC_HandleTypeDef structure that contains - * the configuration information for RTC. - * @retval HAL status - */ -static HAL_StatusTypeDef RTC_ExitInitMode(RTC_HandleTypeDef *hrtc) -{ - 8011bb6: b580 push {r7, lr} - 8011bb8: b084 sub sp, #16 - 8011bba: af00 add r7, sp, #0 - 8011bbc: 6078 str r0, [r7, #4] - uint32_t tickstart = 0U; - 8011bbe: 2300 movs r3, #0 - 8011bc0: 60fb str r3, [r7, #12] - - /* Disable the write protection for RTC registers */ - __HAL_RTC_WRITEPROTECTION_ENABLE(hrtc); - 8011bc2: 687b ldr r3, [r7, #4] - 8011bc4: 681b ldr r3, [r3, #0] - 8011bc6: 685a ldr r2, [r3, #4] - 8011bc8: 687b ldr r3, [r7, #4] - 8011bca: 681b ldr r3, [r3, #0] - 8011bcc: f022 0210 bic.w r2, r2, #16 - 8011bd0: 605a str r2, [r3, #4] - - tickstart = HAL_GetTick(); - 8011bd2: f7fc fe83 bl 800e8dc - 8011bd6: 60f8 str r0, [r7, #12] - /* Wait till RTC is in INIT state and if Time out is reached exit */ - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 8011bd8: e009 b.n 8011bee - { - if ((HAL_GetTick() - tickstart) > RTC_TIMEOUT_VALUE) - 8011bda: f7fc fe7f bl 800e8dc - 8011bde: 4602 mov r2, r0 - 8011be0: 68fb ldr r3, [r7, #12] - 8011be2: 1ad3 subs r3, r2, r3 - 8011be4: f5b3 7f7a cmp.w r3, #1000 @ 0x3e8 - 8011be8: d901 bls.n 8011bee - { - return HAL_TIMEOUT; - 8011bea: 2303 movs r3, #3 - 8011bec: e007 b.n 8011bfe - while ((hrtc->Instance->CRL & RTC_CRL_RTOFF) == (uint32_t)RESET) - 8011bee: 687b ldr r3, [r7, #4] - 8011bf0: 681b ldr r3, [r3, #0] - 8011bf2: 685b ldr r3, [r3, #4] - 8011bf4: f003 0320 and.w r3, r3, #32 - 8011bf8: 2b00 cmp r3, #0 - 8011bfa: d0ee beq.n 8011bda - } - } - - return HAL_OK; - 8011bfc: 2300 movs r3, #0 -} - 8011bfe: 4618 mov r0, r3 - 8011c00: 3710 adds r7, #16 - 8011c02: 46bd mov sp, r7 - 8011c04: bd80 pop {r7, pc} - -08011c06 : - * Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init() - * @param htim TIM Base handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) -{ - 8011c06: b580 push {r7, lr} - 8011c08: b082 sub sp, #8 - 8011c0a: af00 add r7, sp, #0 - 8011c0c: 6078 str r0, [r7, #4] - /* Check the TIM handle allocation */ - if (htim == NULL) - 8011c0e: 687b ldr r3, [r7, #4] - 8011c10: 2b00 cmp r3, #0 - 8011c12: d101 bne.n 8011c18 - { - return HAL_ERROR; - 8011c14: 2301 movs r3, #1 - 8011c16: e041 b.n 8011c9c - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - 8011c18: 687b ldr r3, [r7, #4] - 8011c1a: f893 303d ldrb.w r3, [r3, #61] @ 0x3d - 8011c1e: b2db uxtb r3, r3 - 8011c20: 2b00 cmp r3, #0 - 8011c22: d106 bne.n 8011c32 - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - 8011c24: 687b ldr r3, [r7, #4] - 8011c26: 2200 movs r2, #0 - 8011c28: f883 203c strb.w r2, [r3, #60] @ 0x3c - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->Base_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - HAL_TIM_Base_MspInit(htim); - 8011c2c: 6878 ldr r0, [r7, #4] - 8011c2e: f7fc fb7f bl 800e330 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - 8011c32: 687b ldr r3, [r7, #4] - 8011c34: 2202 movs r2, #2 - 8011c36: f883 203d strb.w r2, [r3, #61] @ 0x3d - - /* Set the Time Base configuration */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - 8011c3a: 687b ldr r3, [r7, #4] - 8011c3c: 681a ldr r2, [r3, #0] - 8011c3e: 687b ldr r3, [r7, #4] - 8011c40: 3304 adds r3, #4 - 8011c42: 4619 mov r1, r3 - 8011c44: 4610 mov r0, r2 - 8011c46: f000 fab9 bl 80121bc - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - 8011c4a: 687b ldr r3, [r7, #4] - 8011c4c: 2201 movs r2, #1 - 8011c4e: f883 2046 strb.w r2, [r3, #70] @ 0x46 - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8011c52: 687b ldr r3, [r7, #4] - 8011c54: 2201 movs r2, #1 - 8011c56: f883 203e strb.w r2, [r3, #62] @ 0x3e - 8011c5a: 687b ldr r3, [r7, #4] - 8011c5c: 2201 movs r2, #1 - 8011c5e: f883 203f strb.w r2, [r3, #63] @ 0x3f - 8011c62: 687b ldr r3, [r7, #4] - 8011c64: 2201 movs r2, #1 - 8011c66: f883 2040 strb.w r2, [r3, #64] @ 0x40 - 8011c6a: 687b ldr r3, [r7, #4] - 8011c6c: 2201 movs r2, #1 - 8011c6e: f883 2041 strb.w r2, [r3, #65] @ 0x41 - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8011c72: 687b ldr r3, [r7, #4] - 8011c74: 2201 movs r2, #1 - 8011c76: f883 2042 strb.w r2, [r3, #66] @ 0x42 - 8011c7a: 687b ldr r3, [r7, #4] - 8011c7c: 2201 movs r2, #1 - 8011c7e: f883 2043 strb.w r2, [r3, #67] @ 0x43 - 8011c82: 687b ldr r3, [r7, #4] - 8011c84: 2201 movs r2, #1 - 8011c86: f883 2044 strb.w r2, [r3, #68] @ 0x44 - 8011c8a: 687b ldr r3, [r7, #4] - 8011c8c: 2201 movs r2, #1 - 8011c8e: f883 2045 strb.w r2, [r3, #69] @ 0x45 - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - 8011c92: 687b ldr r3, [r7, #4] - 8011c94: 2201 movs r2, #1 - 8011c96: f883 203d strb.w r2, [r3, #61] @ 0x3d - - return HAL_OK; - 8011c9a: 2300 movs r3, #0 -} - 8011c9c: 4618 mov r0, r3 - 8011c9e: 3708 adds r7, #8 - 8011ca0: 46bd mov sp, r7 - 8011ca2: bd80 pop {r7, pc} - -08011ca4 : - * Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init() - * @param htim TIM PWM handle - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) -{ - 8011ca4: b580 push {r7, lr} - 8011ca6: b082 sub sp, #8 - 8011ca8: af00 add r7, sp, #0 - 8011caa: 6078 str r0, [r7, #4] - /* Check the TIM handle allocation */ - if (htim == NULL) - 8011cac: 687b ldr r3, [r7, #4] - 8011cae: 2b00 cmp r3, #0 - 8011cb0: d101 bne.n 8011cb6 - { - return HAL_ERROR; - 8011cb2: 2301 movs r3, #1 - 8011cb4: e041 b.n 8011d3a - assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode)); - assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision)); - assert_param(IS_TIM_PERIOD(htim->Init.Period)); - assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload)); - - if (htim->State == HAL_TIM_STATE_RESET) - 8011cb6: 687b ldr r3, [r7, #4] - 8011cb8: f893 303d ldrb.w r3, [r3, #61] @ 0x3d - 8011cbc: b2db uxtb r3, r3 - 8011cbe: 2b00 cmp r3, #0 - 8011cc0: d106 bne.n 8011cd0 - { - /* Allocate lock resource and initialize it */ - htim->Lock = HAL_UNLOCKED; - 8011cc2: 687b ldr r3, [r7, #4] - 8011cc4: 2200 movs r2, #0 - 8011cc6: f883 203c strb.w r2, [r3, #60] @ 0x3c - } - /* Init the low level hardware : GPIO, CLOCK, NVIC */ - htim->PWM_MspInitCallback(htim); -#else - /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */ - HAL_TIM_PWM_MspInit(htim); - 8011cca: 6878 ldr r0, [r7, #4] - 8011ccc: f000 f839 bl 8011d42 -#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */ - } - - /* Set the TIM state */ - htim->State = HAL_TIM_STATE_BUSY; - 8011cd0: 687b ldr r3, [r7, #4] - 8011cd2: 2202 movs r2, #2 - 8011cd4: f883 203d strb.w r2, [r3, #61] @ 0x3d - - /* Init the base time for the PWM */ - TIM_Base_SetConfig(htim->Instance, &htim->Init); - 8011cd8: 687b ldr r3, [r7, #4] - 8011cda: 681a ldr r2, [r3, #0] - 8011cdc: 687b ldr r3, [r7, #4] - 8011cde: 3304 adds r3, #4 - 8011ce0: 4619 mov r1, r3 - 8011ce2: 4610 mov r0, r2 - 8011ce4: f000 fa6a bl 80121bc - - /* Initialize the DMA burst operation state */ - htim->DMABurstState = HAL_DMA_BURST_STATE_READY; - 8011ce8: 687b ldr r3, [r7, #4] - 8011cea: 2201 movs r2, #1 - 8011cec: f883 2046 strb.w r2, [r3, #70] @ 0x46 - - /* Initialize the TIM channels state */ - TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8011cf0: 687b ldr r3, [r7, #4] - 8011cf2: 2201 movs r2, #1 - 8011cf4: f883 203e strb.w r2, [r3, #62] @ 0x3e - 8011cf8: 687b ldr r3, [r7, #4] - 8011cfa: 2201 movs r2, #1 - 8011cfc: f883 203f strb.w r2, [r3, #63] @ 0x3f - 8011d00: 687b ldr r3, [r7, #4] - 8011d02: 2201 movs r2, #1 - 8011d04: f883 2040 strb.w r2, [r3, #64] @ 0x40 - 8011d08: 687b ldr r3, [r7, #4] - 8011d0a: 2201 movs r2, #1 - 8011d0c: f883 2041 strb.w r2, [r3, #65] @ 0x41 - TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY); - 8011d10: 687b ldr r3, [r7, #4] - 8011d12: 2201 movs r2, #1 - 8011d14: f883 2042 strb.w r2, [r3, #66] @ 0x42 - 8011d18: 687b ldr r3, [r7, #4] - 8011d1a: 2201 movs r2, #1 - 8011d1c: f883 2043 strb.w r2, [r3, #67] @ 0x43 - 8011d20: 687b ldr r3, [r7, #4] - 8011d22: 2201 movs r2, #1 - 8011d24: f883 2044 strb.w r2, [r3, #68] @ 0x44 - 8011d28: 687b ldr r3, [r7, #4] - 8011d2a: 2201 movs r2, #1 - 8011d2c: f883 2045 strb.w r2, [r3, #69] @ 0x45 - - /* Initialize the TIM state*/ - htim->State = HAL_TIM_STATE_READY; - 8011d30: 687b ldr r3, [r7, #4] - 8011d32: 2201 movs r2, #1 - 8011d34: f883 203d strb.w r2, [r3, #61] @ 0x3d - - return HAL_OK; - 8011d38: 2300 movs r3, #0 -} - 8011d3a: 4618 mov r0, r3 - 8011d3c: 3708 adds r7, #8 - 8011d3e: 46bd mov sp, r7 - 8011d40: bd80 pop {r7, pc} - -08011d42 : - * @brief Initializes the TIM PWM MSP. - * @param htim TIM PWM handle - * @retval None - */ -__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) -{ - 8011d42: b480 push {r7} - 8011d44: b083 sub sp, #12 - 8011d46: af00 add r7, sp, #0 - 8011d48: 6078 str r0, [r7, #4] - UNUSED(htim); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_TIM_PWM_MspInit could be implemented in the user file - */ -} - 8011d4a: bf00 nop - 8011d4c: 370c adds r7, #12 - 8011d4e: 46bd mov sp, r7 - 8011d50: bc80 pop {r7} - 8011d52: 4770 bx lr - -08011d54 : - * @arg TIM_CHANNEL_3: TIM Channel 3 selected - * @arg TIM_CHANNEL_4: TIM Channel 4 selected - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) -{ - 8011d54: b580 push {r7, lr} - 8011d56: b084 sub sp, #16 - 8011d58: af00 add r7, sp, #0 - 8011d5a: 6078 str r0, [r7, #4] - 8011d5c: 6039 str r1, [r7, #0] - - /* Check the parameters */ - assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel)); - - /* Check the TIM channel state */ - if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) - 8011d5e: 683b ldr r3, [r7, #0] - 8011d60: 2b00 cmp r3, #0 - 8011d62: d109 bne.n 8011d78 - 8011d64: 687b ldr r3, [r7, #4] - 8011d66: f893 303e ldrb.w r3, [r3, #62] @ 0x3e - 8011d6a: b2db uxtb r3, r3 - 8011d6c: 2b01 cmp r3, #1 - 8011d6e: bf14 ite ne - 8011d70: 2301 movne r3, #1 - 8011d72: 2300 moveq r3, #0 - 8011d74: b2db uxtb r3, r3 - 8011d76: e022 b.n 8011dbe - 8011d78: 683b ldr r3, [r7, #0] - 8011d7a: 2b04 cmp r3, #4 - 8011d7c: d109 bne.n 8011d92 - 8011d7e: 687b ldr r3, [r7, #4] - 8011d80: f893 303f ldrb.w r3, [r3, #63] @ 0x3f - 8011d84: b2db uxtb r3, r3 - 8011d86: 2b01 cmp r3, #1 - 8011d88: bf14 ite ne - 8011d8a: 2301 movne r3, #1 - 8011d8c: 2300 moveq r3, #0 - 8011d8e: b2db uxtb r3, r3 - 8011d90: e015 b.n 8011dbe - 8011d92: 683b ldr r3, [r7, #0] - 8011d94: 2b08 cmp r3, #8 - 8011d96: d109 bne.n 8011dac - 8011d98: 687b ldr r3, [r7, #4] - 8011d9a: f893 3040 ldrb.w r3, [r3, #64] @ 0x40 - 8011d9e: b2db uxtb r3, r3 - 8011da0: 2b01 cmp r3, #1 - 8011da2: bf14 ite ne - 8011da4: 2301 movne r3, #1 - 8011da6: 2300 moveq r3, #0 - 8011da8: b2db uxtb r3, r3 - 8011daa: e008 b.n 8011dbe - 8011dac: 687b ldr r3, [r7, #4] - 8011dae: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 8011db2: b2db uxtb r3, r3 - 8011db4: 2b01 cmp r3, #1 - 8011db6: bf14 ite ne - 8011db8: 2301 movne r3, #1 - 8011dba: 2300 moveq r3, #0 - 8011dbc: b2db uxtb r3, r3 - 8011dbe: 2b00 cmp r3, #0 - 8011dc0: d001 beq.n 8011dc6 - { - return HAL_ERROR; - 8011dc2: 2301 movs r3, #1 - 8011dc4: e063 b.n 8011e8e - } - - /* Set the TIM channel state */ - TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY); - 8011dc6: 683b ldr r3, [r7, #0] - 8011dc8: 2b00 cmp r3, #0 - 8011dca: d104 bne.n 8011dd6 - 8011dcc: 687b ldr r3, [r7, #4] - 8011dce: 2202 movs r2, #2 - 8011dd0: f883 203e strb.w r2, [r3, #62] @ 0x3e - 8011dd4: e013 b.n 8011dfe - 8011dd6: 683b ldr r3, [r7, #0] - 8011dd8: 2b04 cmp r3, #4 - 8011dda: d104 bne.n 8011de6 - 8011ddc: 687b ldr r3, [r7, #4] - 8011dde: 2202 movs r2, #2 - 8011de0: f883 203f strb.w r2, [r3, #63] @ 0x3f - 8011de4: e00b b.n 8011dfe - 8011de6: 683b ldr r3, [r7, #0] - 8011de8: 2b08 cmp r3, #8 - 8011dea: d104 bne.n 8011df6 - 8011dec: 687b ldr r3, [r7, #4] - 8011dee: 2202 movs r2, #2 - 8011df0: f883 2040 strb.w r2, [r3, #64] @ 0x40 - 8011df4: e003 b.n 8011dfe - 8011df6: 687b ldr r3, [r7, #4] - 8011df8: 2202 movs r2, #2 - 8011dfa: f883 2041 strb.w r2, [r3, #65] @ 0x41 - - /* Enable the Capture compare channel */ - TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE); - 8011dfe: 687b ldr r3, [r7, #4] - 8011e00: 681b ldr r3, [r3, #0] - 8011e02: 2201 movs r2, #1 - 8011e04: 6839 ldr r1, [r7, #0] - 8011e06: 4618 mov r0, r3 - 8011e08: f000 fc6e bl 80126e8 - - if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) - 8011e0c: 687b ldr r3, [r7, #4] - 8011e0e: 681b ldr r3, [r3, #0] - 8011e10: 4a21 ldr r2, [pc, #132] @ (8011e98 ) - 8011e12: 4293 cmp r3, r2 - 8011e14: d107 bne.n 8011e26 - { - /* Enable the main output */ - __HAL_TIM_MOE_ENABLE(htim); - 8011e16: 687b ldr r3, [r7, #4] - 8011e18: 681b ldr r3, [r3, #0] - 8011e1a: 6c5a ldr r2, [r3, #68] @ 0x44 - 8011e1c: 687b ldr r3, [r7, #4] - 8011e1e: 681b ldr r3, [r3, #0] - 8011e20: f442 4200 orr.w r2, r2, #32768 @ 0x8000 - 8011e24: 645a str r2, [r3, #68] @ 0x44 - } - - /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - 8011e26: 687b ldr r3, [r7, #4] - 8011e28: 681b ldr r3, [r3, #0] - 8011e2a: 4a1b ldr r2, [pc, #108] @ (8011e98 ) - 8011e2c: 4293 cmp r3, r2 - 8011e2e: d013 beq.n 8011e58 - 8011e30: 687b ldr r3, [r7, #4] - 8011e32: 681b ldr r3, [r3, #0] - 8011e34: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 - 8011e38: d00e beq.n 8011e58 - 8011e3a: 687b ldr r3, [r7, #4] - 8011e3c: 681b ldr r3, [r3, #0] - 8011e3e: 4a17 ldr r2, [pc, #92] @ (8011e9c ) - 8011e40: 4293 cmp r3, r2 - 8011e42: d009 beq.n 8011e58 - 8011e44: 687b ldr r3, [r7, #4] - 8011e46: 681b ldr r3, [r3, #0] - 8011e48: 4a15 ldr r2, [pc, #84] @ (8011ea0 ) - 8011e4a: 4293 cmp r3, r2 - 8011e4c: d004 beq.n 8011e58 - 8011e4e: 687b ldr r3, [r7, #4] - 8011e50: 681b ldr r3, [r3, #0] - 8011e52: 4a14 ldr r2, [pc, #80] @ (8011ea4 ) - 8011e54: 4293 cmp r3, r2 - 8011e56: d111 bne.n 8011e7c - { - tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; - 8011e58: 687b ldr r3, [r7, #4] - 8011e5a: 681b ldr r3, [r3, #0] - 8011e5c: 689b ldr r3, [r3, #8] - 8011e5e: f003 0307 and.w r3, r3, #7 - 8011e62: 60fb str r3, [r7, #12] - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - 8011e64: 68fb ldr r3, [r7, #12] - 8011e66: 2b06 cmp r3, #6 - 8011e68: d010 beq.n 8011e8c - { - __HAL_TIM_ENABLE(htim); - 8011e6a: 687b ldr r3, [r7, #4] - 8011e6c: 681b ldr r3, [r3, #0] - 8011e6e: 681a ldr r2, [r3, #0] - 8011e70: 687b ldr r3, [r7, #4] - 8011e72: 681b ldr r3, [r3, #0] - 8011e74: f042 0201 orr.w r2, r2, #1 - 8011e78: 601a str r2, [r3, #0] - if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) - 8011e7a: e007 b.n 8011e8c - } - } - else - { - __HAL_TIM_ENABLE(htim); - 8011e7c: 687b ldr r3, [r7, #4] - 8011e7e: 681b ldr r3, [r3, #0] - 8011e80: 681a ldr r2, [r3, #0] - 8011e82: 687b ldr r3, [r7, #4] - 8011e84: 681b ldr r3, [r3, #0] - 8011e86: f042 0201 orr.w r2, r2, #1 - 8011e8a: 601a str r2, [r3, #0] - } - - /* Return function status */ - return HAL_OK; - 8011e8c: 2300 movs r3, #0 -} - 8011e8e: 4618 mov r0, r3 - 8011e90: 3710 adds r7, #16 - 8011e92: 46bd mov sp, r7 - 8011e94: bd80 pop {r7, pc} - 8011e96: bf00 nop - 8011e98: 40012c00 .word 0x40012c00 - 8011e9c: 40000400 .word 0x40000400 - 8011ea0: 40000800 .word 0x40000800 - 8011ea4: 40000c00 .word 0x40000c00 - -08011ea8 : - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, - const TIM_OC_InitTypeDef *sConfig, - uint32_t Channel) -{ - 8011ea8: b580 push {r7, lr} - 8011eaa: b086 sub sp, #24 - 8011eac: af00 add r7, sp, #0 - 8011eae: 60f8 str r0, [r7, #12] - 8011eb0: 60b9 str r1, [r7, #8] - 8011eb2: 607a str r2, [r7, #4] - HAL_StatusTypeDef status = HAL_OK; - 8011eb4: 2300 movs r3, #0 - 8011eb6: 75fb strb r3, [r7, #23] - assert_param(IS_TIM_PWM_MODE(sConfig->OCMode)); - assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity)); - assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode)); - - /* Process Locked */ - __HAL_LOCK(htim); - 8011eb8: 68fb ldr r3, [r7, #12] - 8011eba: f893 303c ldrb.w r3, [r3, #60] @ 0x3c - 8011ebe: 2b01 cmp r3, #1 - 8011ec0: d101 bne.n 8011ec6 - 8011ec2: 2302 movs r3, #2 - 8011ec4: e0ae b.n 8012024 - 8011ec6: 68fb ldr r3, [r7, #12] - 8011ec8: 2201 movs r2, #1 - 8011eca: f883 203c strb.w r2, [r3, #60] @ 0x3c - - switch (Channel) - 8011ece: 687b ldr r3, [r7, #4] - 8011ed0: 2b0c cmp r3, #12 - 8011ed2: f200 809f bhi.w 8012014 - 8011ed6: a201 add r2, pc, #4 @ (adr r2, 8011edc ) - 8011ed8: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8011edc: 08011f11 .word 0x08011f11 - 8011ee0: 08012015 .word 0x08012015 - 8011ee4: 08012015 .word 0x08012015 - 8011ee8: 08012015 .word 0x08012015 - 8011eec: 08011f51 .word 0x08011f51 - 8011ef0: 08012015 .word 0x08012015 - 8011ef4: 08012015 .word 0x08012015 - 8011ef8: 08012015 .word 0x08012015 - 8011efc: 08011f93 .word 0x08011f93 - 8011f00: 08012015 .word 0x08012015 - 8011f04: 08012015 .word 0x08012015 - 8011f08: 08012015 .word 0x08012015 - 8011f0c: 08011fd3 .word 0x08011fd3 - { - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(htim->Instance)); - - /* Configure the Channel 1 in PWM mode */ - TIM_OC1_SetConfig(htim->Instance, sConfig); - 8011f10: 68fb ldr r3, [r7, #12] - 8011f12: 681b ldr r3, [r3, #0] - 8011f14: 68b9 ldr r1, [r7, #8] - 8011f16: 4618 mov r0, r3 - 8011f18: f000 f9c8 bl 80122ac - - /* Set the Preload enable bit for channel1 */ - htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE; - 8011f1c: 68fb ldr r3, [r7, #12] - 8011f1e: 681b ldr r3, [r3, #0] - 8011f20: 699a ldr r2, [r3, #24] - 8011f22: 68fb ldr r3, [r7, #12] - 8011f24: 681b ldr r3, [r3, #0] - 8011f26: f042 0208 orr.w r2, r2, #8 - 8011f2a: 619a str r2, [r3, #24] - - /* Configure the Output Fast mode */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE; - 8011f2c: 68fb ldr r3, [r7, #12] - 8011f2e: 681b ldr r3, [r3, #0] - 8011f30: 699a ldr r2, [r3, #24] - 8011f32: 68fb ldr r3, [r7, #12] - 8011f34: 681b ldr r3, [r3, #0] - 8011f36: f022 0204 bic.w r2, r2, #4 - 8011f3a: 619a str r2, [r3, #24] - htim->Instance->CCMR1 |= sConfig->OCFastMode; - 8011f3c: 68fb ldr r3, [r7, #12] - 8011f3e: 681b ldr r3, [r3, #0] - 8011f40: 6999 ldr r1, [r3, #24] - 8011f42: 68bb ldr r3, [r7, #8] - 8011f44: 691a ldr r2, [r3, #16] - 8011f46: 68fb ldr r3, [r7, #12] - 8011f48: 681b ldr r3, [r3, #0] - 8011f4a: 430a orrs r2, r1 - 8011f4c: 619a str r2, [r3, #24] - break; - 8011f4e: e064 b.n 801201a - { - /* Check the parameters */ - assert_param(IS_TIM_CC2_INSTANCE(htim->Instance)); - - /* Configure the Channel 2 in PWM mode */ - TIM_OC2_SetConfig(htim->Instance, sConfig); - 8011f50: 68fb ldr r3, [r7, #12] - 8011f52: 681b ldr r3, [r3, #0] - 8011f54: 68b9 ldr r1, [r7, #8] - 8011f56: 4618 mov r0, r3 - 8011f58: f000 fa0e bl 8012378 - - /* Set the Preload enable bit for channel2 */ - htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE; - 8011f5c: 68fb ldr r3, [r7, #12] - 8011f5e: 681b ldr r3, [r3, #0] - 8011f60: 699a ldr r2, [r3, #24] - 8011f62: 68fb ldr r3, [r7, #12] - 8011f64: 681b ldr r3, [r3, #0] - 8011f66: f442 6200 orr.w r2, r2, #2048 @ 0x800 - 8011f6a: 619a str r2, [r3, #24] - - /* Configure the Output Fast mode */ - htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE; - 8011f6c: 68fb ldr r3, [r7, #12] - 8011f6e: 681b ldr r3, [r3, #0] - 8011f70: 699a ldr r2, [r3, #24] - 8011f72: 68fb ldr r3, [r7, #12] - 8011f74: 681b ldr r3, [r3, #0] - 8011f76: f422 6280 bic.w r2, r2, #1024 @ 0x400 - 8011f7a: 619a str r2, [r3, #24] - htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U; - 8011f7c: 68fb ldr r3, [r7, #12] - 8011f7e: 681b ldr r3, [r3, #0] - 8011f80: 6999 ldr r1, [r3, #24] - 8011f82: 68bb ldr r3, [r7, #8] - 8011f84: 691b ldr r3, [r3, #16] - 8011f86: 021a lsls r2, r3, #8 - 8011f88: 68fb ldr r3, [r7, #12] - 8011f8a: 681b ldr r3, [r3, #0] - 8011f8c: 430a orrs r2, r1 - 8011f8e: 619a str r2, [r3, #24] - break; - 8011f90: e043 b.n 801201a - { - /* Check the parameters */ - assert_param(IS_TIM_CC3_INSTANCE(htim->Instance)); - - /* Configure the Channel 3 in PWM mode */ - TIM_OC3_SetConfig(htim->Instance, sConfig); - 8011f92: 68fb ldr r3, [r7, #12] - 8011f94: 681b ldr r3, [r3, #0] - 8011f96: 68b9 ldr r1, [r7, #8] - 8011f98: 4618 mov r0, r3 - 8011f9a: f000 fa57 bl 801244c - - /* Set the Preload enable bit for channel3 */ - htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE; - 8011f9e: 68fb ldr r3, [r7, #12] - 8011fa0: 681b ldr r3, [r3, #0] - 8011fa2: 69da ldr r2, [r3, #28] - 8011fa4: 68fb ldr r3, [r7, #12] - 8011fa6: 681b ldr r3, [r3, #0] - 8011fa8: f042 0208 orr.w r2, r2, #8 - 8011fac: 61da str r2, [r3, #28] - - /* Configure the Output Fast mode */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE; - 8011fae: 68fb ldr r3, [r7, #12] - 8011fb0: 681b ldr r3, [r3, #0] - 8011fb2: 69da ldr r2, [r3, #28] - 8011fb4: 68fb ldr r3, [r7, #12] - 8011fb6: 681b ldr r3, [r3, #0] - 8011fb8: f022 0204 bic.w r2, r2, #4 - 8011fbc: 61da str r2, [r3, #28] - htim->Instance->CCMR2 |= sConfig->OCFastMode; - 8011fbe: 68fb ldr r3, [r7, #12] - 8011fc0: 681b ldr r3, [r3, #0] - 8011fc2: 69d9 ldr r1, [r3, #28] - 8011fc4: 68bb ldr r3, [r7, #8] - 8011fc6: 691a ldr r2, [r3, #16] - 8011fc8: 68fb ldr r3, [r7, #12] - 8011fca: 681b ldr r3, [r3, #0] - 8011fcc: 430a orrs r2, r1 - 8011fce: 61da str r2, [r3, #28] - break; - 8011fd0: e023 b.n 801201a - { - /* Check the parameters */ - assert_param(IS_TIM_CC4_INSTANCE(htim->Instance)); - - /* Configure the Channel 4 in PWM mode */ - TIM_OC4_SetConfig(htim->Instance, sConfig); - 8011fd2: 68fb ldr r3, [r7, #12] - 8011fd4: 681b ldr r3, [r3, #0] - 8011fd6: 68b9 ldr r1, [r7, #8] - 8011fd8: 4618 mov r0, r3 - 8011fda: f000 faa1 bl 8012520 - - /* Set the Preload enable bit for channel4 */ - htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE; - 8011fde: 68fb ldr r3, [r7, #12] - 8011fe0: 681b ldr r3, [r3, #0] - 8011fe2: 69da ldr r2, [r3, #28] - 8011fe4: 68fb ldr r3, [r7, #12] - 8011fe6: 681b ldr r3, [r3, #0] - 8011fe8: f442 6200 orr.w r2, r2, #2048 @ 0x800 - 8011fec: 61da str r2, [r3, #28] - - /* Configure the Output Fast mode */ - htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE; - 8011fee: 68fb ldr r3, [r7, #12] - 8011ff0: 681b ldr r3, [r3, #0] - 8011ff2: 69da ldr r2, [r3, #28] - 8011ff4: 68fb ldr r3, [r7, #12] - 8011ff6: 681b ldr r3, [r3, #0] - 8011ff8: f422 6280 bic.w r2, r2, #1024 @ 0x400 - 8011ffc: 61da str r2, [r3, #28] - htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U; - 8011ffe: 68fb ldr r3, [r7, #12] - 8012000: 681b ldr r3, [r3, #0] - 8012002: 69d9 ldr r1, [r3, #28] - 8012004: 68bb ldr r3, [r7, #8] - 8012006: 691b ldr r3, [r3, #16] - 8012008: 021a lsls r2, r3, #8 - 801200a: 68fb ldr r3, [r7, #12] - 801200c: 681b ldr r3, [r3, #0] - 801200e: 430a orrs r2, r1 - 8012010: 61da str r2, [r3, #28] - break; - 8012012: e002 b.n 801201a - } - - default: - status = HAL_ERROR; - 8012014: 2301 movs r3, #1 - 8012016: 75fb strb r3, [r7, #23] - break; - 8012018: bf00 nop - } - - __HAL_UNLOCK(htim); - 801201a: 68fb ldr r3, [r7, #12] - 801201c: 2200 movs r2, #0 - 801201e: f883 203c strb.w r2, [r3, #60] @ 0x3c - - return status; - 8012022: 7dfb ldrb r3, [r7, #23] -} - 8012024: 4618 mov r0, r3 - 8012026: 3718 adds r7, #24 - 8012028: 46bd mov sp, r7 - 801202a: bd80 pop {r7, pc} - -0801202c : - * @param sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that - * contains the clock source information for the TIM peripheral. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, const TIM_ClockConfigTypeDef *sClockSourceConfig) -{ - 801202c: b580 push {r7, lr} - 801202e: b084 sub sp, #16 - 8012030: af00 add r7, sp, #0 - 8012032: 6078 str r0, [r7, #4] - 8012034: 6039 str r1, [r7, #0] - HAL_StatusTypeDef status = HAL_OK; - 8012036: 2300 movs r3, #0 - 8012038: 73fb strb r3, [r7, #15] - uint32_t tmpsmcr; - - /* Process Locked */ - __HAL_LOCK(htim); - 801203a: 687b ldr r3, [r7, #4] - 801203c: f893 303c ldrb.w r3, [r3, #60] @ 0x3c - 8012040: 2b01 cmp r3, #1 - 8012042: d101 bne.n 8012048 - 8012044: 2302 movs r3, #2 - 8012046: e0b4 b.n 80121b2 - 8012048: 687b ldr r3, [r7, #4] - 801204a: 2201 movs r2, #1 - 801204c: f883 203c strb.w r2, [r3, #60] @ 0x3c - - htim->State = HAL_TIM_STATE_BUSY; - 8012050: 687b ldr r3, [r7, #4] - 8012052: 2202 movs r2, #2 - 8012054: f883 203d strb.w r2, [r3, #61] @ 0x3d - - /* Check the parameters */ - assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource)); - - /* Reset the SMS, TS, ECE, ETPS and ETRF bits */ - tmpsmcr = htim->Instance->SMCR; - 8012058: 687b ldr r3, [r7, #4] - 801205a: 681b ldr r3, [r3, #0] - 801205c: 689b ldr r3, [r3, #8] - 801205e: 60bb str r3, [r7, #8] - tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS); - 8012060: 68bb ldr r3, [r7, #8] - 8012062: f023 0377 bic.w r3, r3, #119 @ 0x77 - 8012066: 60bb str r3, [r7, #8] - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - 8012068: 68bb ldr r3, [r7, #8] - 801206a: f423 437f bic.w r3, r3, #65280 @ 0xff00 - 801206e: 60bb str r3, [r7, #8] - htim->Instance->SMCR = tmpsmcr; - 8012070: 687b ldr r3, [r7, #4] - 8012072: 681b ldr r3, [r3, #0] - 8012074: 68ba ldr r2, [r7, #8] - 8012076: 609a str r2, [r3, #8] - - switch (sClockSourceConfig->ClockSource) - 8012078: 683b ldr r3, [r7, #0] - 801207a: 681b ldr r3, [r3, #0] - 801207c: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 - 8012080: d03e beq.n 8012100 - 8012082: f5b3 5f00 cmp.w r3, #8192 @ 0x2000 - 8012086: f200 8087 bhi.w 8012198 - 801208a: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 801208e: f000 8086 beq.w 801219e - 8012092: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 8012096: d87f bhi.n 8012198 - 8012098: 2b70 cmp r3, #112 @ 0x70 - 801209a: d01a beq.n 80120d2 - 801209c: 2b70 cmp r3, #112 @ 0x70 - 801209e: d87b bhi.n 8012198 - 80120a0: 2b60 cmp r3, #96 @ 0x60 - 80120a2: d050 beq.n 8012146 - 80120a4: 2b60 cmp r3, #96 @ 0x60 - 80120a6: d877 bhi.n 8012198 - 80120a8: 2b50 cmp r3, #80 @ 0x50 - 80120aa: d03c beq.n 8012126 - 80120ac: 2b50 cmp r3, #80 @ 0x50 - 80120ae: d873 bhi.n 8012198 - 80120b0: 2b40 cmp r3, #64 @ 0x40 - 80120b2: d058 beq.n 8012166 - 80120b4: 2b40 cmp r3, #64 @ 0x40 - 80120b6: d86f bhi.n 8012198 - 80120b8: 2b30 cmp r3, #48 @ 0x30 - 80120ba: d064 beq.n 8012186 - 80120bc: 2b30 cmp r3, #48 @ 0x30 - 80120be: d86b bhi.n 8012198 - 80120c0: 2b20 cmp r3, #32 - 80120c2: d060 beq.n 8012186 - 80120c4: 2b20 cmp r3, #32 - 80120c6: d867 bhi.n 8012198 - 80120c8: 2b00 cmp r3, #0 - 80120ca: d05c beq.n 8012186 - 80120cc: 2b10 cmp r3, #16 - 80120ce: d05a beq.n 8012186 - 80120d0: e062 b.n 8012198 - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - 80120d2: 687b ldr r3, [r7, #4] - 80120d4: 6818 ldr r0, [r3, #0] - sClockSourceConfig->ClockPrescaler, - 80120d6: 683b ldr r3, [r7, #0] - 80120d8: 6899 ldr r1, [r3, #8] - sClockSourceConfig->ClockPolarity, - 80120da: 683b ldr r3, [r7, #0] - 80120dc: 685a ldr r2, [r3, #4] - sClockSourceConfig->ClockFilter); - 80120de: 683b ldr r3, [r7, #0] - 80120e0: 68db ldr r3, [r3, #12] - TIM_ETR_SetConfig(htim->Instance, - 80120e2: f000 fae2 bl 80126aa - - /* Select the External clock mode1 and the ETRF trigger */ - tmpsmcr = htim->Instance->SMCR; - 80120e6: 687b ldr r3, [r7, #4] - 80120e8: 681b ldr r3, [r3, #0] - 80120ea: 689b ldr r3, [r3, #8] - 80120ec: 60bb str r3, [r7, #8] - tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1); - 80120ee: 68bb ldr r3, [r7, #8] - 80120f0: f043 0377 orr.w r3, r3, #119 @ 0x77 - 80120f4: 60bb str r3, [r7, #8] - /* Write to TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - 80120f6: 687b ldr r3, [r7, #4] - 80120f8: 681b ldr r3, [r3, #0] - 80120fa: 68ba ldr r2, [r7, #8] - 80120fc: 609a str r2, [r3, #8] - break; - 80120fe: e04f b.n 80121a0 - assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler)); - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - /* Configure the ETR Clock source */ - TIM_ETR_SetConfig(htim->Instance, - 8012100: 687b ldr r3, [r7, #4] - 8012102: 6818 ldr r0, [r3, #0] - sClockSourceConfig->ClockPrescaler, - 8012104: 683b ldr r3, [r7, #0] - 8012106: 6899 ldr r1, [r3, #8] - sClockSourceConfig->ClockPolarity, - 8012108: 683b ldr r3, [r7, #0] - 801210a: 685a ldr r2, [r3, #4] - sClockSourceConfig->ClockFilter); - 801210c: 683b ldr r3, [r7, #0] - 801210e: 68db ldr r3, [r3, #12] - TIM_ETR_SetConfig(htim->Instance, - 8012110: f000 facb bl 80126aa - /* Enable the External clock mode2 */ - htim->Instance->SMCR |= TIM_SMCR_ECE; - 8012114: 687b ldr r3, [r7, #4] - 8012116: 681b ldr r3, [r3, #0] - 8012118: 689a ldr r2, [r3, #8] - 801211a: 687b ldr r3, [r7, #4] - 801211c: 681b ldr r3, [r3, #0] - 801211e: f442 4280 orr.w r2, r2, #16384 @ 0x4000 - 8012122: 609a str r2, [r3, #8] - break; - 8012124: e03c b.n 80121a0 - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - 8012126: 687b ldr r3, [r7, #4] - 8012128: 6818 ldr r0, [r3, #0] - sClockSourceConfig->ClockPolarity, - 801212a: 683b ldr r3, [r7, #0] - 801212c: 6859 ldr r1, [r3, #4] - sClockSourceConfig->ClockFilter); - 801212e: 683b ldr r3, [r7, #0] - 8012130: 68db ldr r3, [r3, #12] - TIM_TI1_ConfigInputStage(htim->Instance, - 8012132: 461a mov r2, r3 - 8012134: f000 fa42 bl 80125bc - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1); - 8012138: 687b ldr r3, [r7, #4] - 801213a: 681b ldr r3, [r3, #0] - 801213c: 2150 movs r1, #80 @ 0x50 - 801213e: 4618 mov r0, r3 - 8012140: f000 fa99 bl 8012676 - break; - 8012144: e02c b.n 80121a0 - - /* Check TI2 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI2_ConfigInputStage(htim->Instance, - 8012146: 687b ldr r3, [r7, #4] - 8012148: 6818 ldr r0, [r3, #0] - sClockSourceConfig->ClockPolarity, - 801214a: 683b ldr r3, [r7, #0] - 801214c: 6859 ldr r1, [r3, #4] - sClockSourceConfig->ClockFilter); - 801214e: 683b ldr r3, [r7, #0] - 8012150: 68db ldr r3, [r3, #12] - TIM_TI2_ConfigInputStage(htim->Instance, - 8012152: 461a mov r2, r3 - 8012154: f000 fa60 bl 8012618 - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2); - 8012158: 687b ldr r3, [r7, #4] - 801215a: 681b ldr r3, [r3, #0] - 801215c: 2160 movs r1, #96 @ 0x60 - 801215e: 4618 mov r0, r3 - 8012160: f000 fa89 bl 8012676 - break; - 8012164: e01c b.n 80121a0 - - /* Check TI1 input conditioning related parameters */ - assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity)); - assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter)); - - TIM_TI1_ConfigInputStage(htim->Instance, - 8012166: 687b ldr r3, [r7, #4] - 8012168: 6818 ldr r0, [r3, #0] - sClockSourceConfig->ClockPolarity, - 801216a: 683b ldr r3, [r7, #0] - 801216c: 6859 ldr r1, [r3, #4] - sClockSourceConfig->ClockFilter); - 801216e: 683b ldr r3, [r7, #0] - 8012170: 68db ldr r3, [r3, #12] - TIM_TI1_ConfigInputStage(htim->Instance, - 8012172: 461a mov r2, r3 - 8012174: f000 fa22 bl 80125bc - TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED); - 8012178: 687b ldr r3, [r7, #4] - 801217a: 681b ldr r3, [r3, #0] - 801217c: 2140 movs r1, #64 @ 0x40 - 801217e: 4618 mov r0, r3 - 8012180: f000 fa79 bl 8012676 - break; - 8012184: e00c b.n 80121a0 - case TIM_CLOCKSOURCE_ITR3: - { - /* Check whether or not the timer instance supports internal trigger input */ - assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance)); - - TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource); - 8012186: 687b ldr r3, [r7, #4] - 8012188: 681a ldr r2, [r3, #0] - 801218a: 683b ldr r3, [r7, #0] - 801218c: 681b ldr r3, [r3, #0] - 801218e: 4619 mov r1, r3 - 8012190: 4610 mov r0, r2 - 8012192: f000 fa70 bl 8012676 - break; - 8012196: e003 b.n 80121a0 - } - - default: - status = HAL_ERROR; - 8012198: 2301 movs r3, #1 - 801219a: 73fb strb r3, [r7, #15] - break; - 801219c: e000 b.n 80121a0 - break; - 801219e: bf00 nop - } - htim->State = HAL_TIM_STATE_READY; - 80121a0: 687b ldr r3, [r7, #4] - 80121a2: 2201 movs r2, #1 - 80121a4: f883 203d strb.w r2, [r3, #61] @ 0x3d - - __HAL_UNLOCK(htim); - 80121a8: 687b ldr r3, [r7, #4] - 80121aa: 2200 movs r2, #0 - 80121ac: f883 203c strb.w r2, [r3, #60] @ 0x3c - - return status; - 80121b0: 7bfb ldrb r3, [r7, #15] -} - 80121b2: 4618 mov r0, r3 - 80121b4: 3710 adds r7, #16 - 80121b6: 46bd mov sp, r7 - 80121b8: bd80 pop {r7, pc} - ... - -080121bc : - * @param TIMx TIM peripheral - * @param Structure TIM Base configuration structure - * @retval None - */ -void TIM_Base_SetConfig(TIM_TypeDef *TIMx, const TIM_Base_InitTypeDef *Structure) -{ - 80121bc: b480 push {r7} - 80121be: b085 sub sp, #20 - 80121c0: af00 add r7, sp, #0 - 80121c2: 6078 str r0, [r7, #4] - 80121c4: 6039 str r1, [r7, #0] - uint32_t tmpcr1; - tmpcr1 = TIMx->CR1; - 80121c6: 687b ldr r3, [r7, #4] - 80121c8: 681b ldr r3, [r3, #0] - 80121ca: 60fb str r3, [r7, #12] - - /* Set TIM Time Base Unit parameters ---------------------------------------*/ - if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) - 80121cc: 687b ldr r3, [r7, #4] - 80121ce: 4a33 ldr r2, [pc, #204] @ (801229c ) - 80121d0: 4293 cmp r3, r2 - 80121d2: d00f beq.n 80121f4 - 80121d4: 687b ldr r3, [r7, #4] - 80121d6: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 - 80121da: d00b beq.n 80121f4 - 80121dc: 687b ldr r3, [r7, #4] - 80121de: 4a30 ldr r2, [pc, #192] @ (80122a0 ) - 80121e0: 4293 cmp r3, r2 - 80121e2: d007 beq.n 80121f4 - 80121e4: 687b ldr r3, [r7, #4] - 80121e6: 4a2f ldr r2, [pc, #188] @ (80122a4 ) - 80121e8: 4293 cmp r3, r2 - 80121ea: d003 beq.n 80121f4 - 80121ec: 687b ldr r3, [r7, #4] - 80121ee: 4a2e ldr r2, [pc, #184] @ (80122a8 ) - 80121f0: 4293 cmp r3, r2 - 80121f2: d108 bne.n 8012206 - { - /* Select the Counter Mode */ - tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS); - 80121f4: 68fb ldr r3, [r7, #12] - 80121f6: f023 0370 bic.w r3, r3, #112 @ 0x70 - 80121fa: 60fb str r3, [r7, #12] - tmpcr1 |= Structure->CounterMode; - 80121fc: 683b ldr r3, [r7, #0] - 80121fe: 685b ldr r3, [r3, #4] - 8012200: 68fa ldr r2, [r7, #12] - 8012202: 4313 orrs r3, r2 - 8012204: 60fb str r3, [r7, #12] - } - - if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) - 8012206: 687b ldr r3, [r7, #4] - 8012208: 4a24 ldr r2, [pc, #144] @ (801229c ) - 801220a: 4293 cmp r3, r2 - 801220c: d00f beq.n 801222e - 801220e: 687b ldr r3, [r7, #4] - 8012210: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 - 8012214: d00b beq.n 801222e - 8012216: 687b ldr r3, [r7, #4] - 8012218: 4a21 ldr r2, [pc, #132] @ (80122a0 ) - 801221a: 4293 cmp r3, r2 - 801221c: d007 beq.n 801222e - 801221e: 687b ldr r3, [r7, #4] - 8012220: 4a20 ldr r2, [pc, #128] @ (80122a4 ) - 8012222: 4293 cmp r3, r2 - 8012224: d003 beq.n 801222e - 8012226: 687b ldr r3, [r7, #4] - 8012228: 4a1f ldr r2, [pc, #124] @ (80122a8 ) - 801222a: 4293 cmp r3, r2 - 801222c: d108 bne.n 8012240 - { - /* Set the clock division */ - tmpcr1 &= ~TIM_CR1_CKD; - 801222e: 68fb ldr r3, [r7, #12] - 8012230: f423 7340 bic.w r3, r3, #768 @ 0x300 - 8012234: 60fb str r3, [r7, #12] - tmpcr1 |= (uint32_t)Structure->ClockDivision; - 8012236: 683b ldr r3, [r7, #0] - 8012238: 68db ldr r3, [r3, #12] - 801223a: 68fa ldr r2, [r7, #12] - 801223c: 4313 orrs r3, r2 - 801223e: 60fb str r3, [r7, #12] - } - - /* Set the auto-reload preload */ - MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload); - 8012240: 68fb ldr r3, [r7, #12] - 8012242: f023 0280 bic.w r2, r3, #128 @ 0x80 - 8012246: 683b ldr r3, [r7, #0] - 8012248: 695b ldr r3, [r3, #20] - 801224a: 4313 orrs r3, r2 - 801224c: 60fb str r3, [r7, #12] - - TIMx->CR1 = tmpcr1; - 801224e: 687b ldr r3, [r7, #4] - 8012250: 68fa ldr r2, [r7, #12] - 8012252: 601a str r2, [r3, #0] - - /* Set the Autoreload value */ - TIMx->ARR = (uint32_t)Structure->Period ; - 8012254: 683b ldr r3, [r7, #0] - 8012256: 689a ldr r2, [r3, #8] - 8012258: 687b ldr r3, [r7, #4] - 801225a: 62da str r2, [r3, #44] @ 0x2c - - /* Set the Prescaler value */ - TIMx->PSC = Structure->Prescaler; - 801225c: 683b ldr r3, [r7, #0] - 801225e: 681a ldr r2, [r3, #0] - 8012260: 687b ldr r3, [r7, #4] - 8012262: 629a str r2, [r3, #40] @ 0x28 - - if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) - 8012264: 687b ldr r3, [r7, #4] - 8012266: 4a0d ldr r2, [pc, #52] @ (801229c ) - 8012268: 4293 cmp r3, r2 - 801226a: d103 bne.n 8012274 - { - /* Set the Repetition Counter value */ - TIMx->RCR = Structure->RepetitionCounter; - 801226c: 683b ldr r3, [r7, #0] - 801226e: 691a ldr r2, [r3, #16] - 8012270: 687b ldr r3, [r7, #4] - 8012272: 631a str r2, [r3, #48] @ 0x30 - } - - /* Generate an update event to reload the Prescaler - and the repetition counter (only for advanced timer) value immediately */ - TIMx->EGR = TIM_EGR_UG; - 8012274: 687b ldr r3, [r7, #4] - 8012276: 2201 movs r2, #1 - 8012278: 615a str r2, [r3, #20] - - /* Check if the update flag is set after the Update Generation, if so clear the UIF flag */ - if (HAL_IS_BIT_SET(TIMx->SR, TIM_FLAG_UPDATE)) - 801227a: 687b ldr r3, [r7, #4] - 801227c: 691b ldr r3, [r3, #16] - 801227e: f003 0301 and.w r3, r3, #1 - 8012282: 2b00 cmp r3, #0 - 8012284: d005 beq.n 8012292 - { - /* Clear the update flag */ - CLEAR_BIT(TIMx->SR, TIM_FLAG_UPDATE); - 8012286: 687b ldr r3, [r7, #4] - 8012288: 691b ldr r3, [r3, #16] - 801228a: f023 0201 bic.w r2, r3, #1 - 801228e: 687b ldr r3, [r7, #4] - 8012290: 611a str r2, [r3, #16] - } -} - 8012292: bf00 nop - 8012294: 3714 adds r7, #20 - 8012296: 46bd mov sp, r7 - 8012298: bc80 pop {r7} - 801229a: 4770 bx lr - 801229c: 40012c00 .word 0x40012c00 - 80122a0: 40000400 .word 0x40000400 - 80122a4: 40000800 .word 0x40000800 - 80122a8: 40000c00 .word 0x40000c00 - -080122ac : - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - 80122ac: b480 push {r7} - 80122ae: b087 sub sp, #28 - 80122b0: af00 add r7, sp, #0 - 80122b2: 6078 str r0, [r7, #4] - 80122b4: 6039 str r1, [r7, #0] - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - 80122b6: 687b ldr r3, [r7, #4] - 80122b8: 6a1b ldr r3, [r3, #32] - 80122ba: 617b str r3, [r7, #20] - - /* Disable the Channel 1: Reset the CC1E Bit */ - TIMx->CCER &= ~TIM_CCER_CC1E; - 80122bc: 687b ldr r3, [r7, #4] - 80122be: 6a1b ldr r3, [r3, #32] - 80122c0: f023 0201 bic.w r2, r3, #1 - 80122c4: 687b ldr r3, [r7, #4] - 80122c6: 621a str r2, [r3, #32] - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - 80122c8: 687b ldr r3, [r7, #4] - 80122ca: 685b ldr r3, [r3, #4] - 80122cc: 613b str r3, [r7, #16] - - /* Get the TIMx CCMR1 register value */ - tmpccmrx = TIMx->CCMR1; - 80122ce: 687b ldr r3, [r7, #4] - 80122d0: 699b ldr r3, [r3, #24] - 80122d2: 60fb str r3, [r7, #12] - - /* Reset the Output Compare Mode Bits */ - tmpccmrx &= ~TIM_CCMR1_OC1M; - 80122d4: 68fb ldr r3, [r7, #12] - 80122d6: f023 0370 bic.w r3, r3, #112 @ 0x70 - 80122da: 60fb str r3, [r7, #12] - tmpccmrx &= ~TIM_CCMR1_CC1S; - 80122dc: 68fb ldr r3, [r7, #12] - 80122de: f023 0303 bic.w r3, r3, #3 - 80122e2: 60fb str r3, [r7, #12] - /* Select the Output Compare Mode */ - tmpccmrx |= OC_Config->OCMode; - 80122e4: 683b ldr r3, [r7, #0] - 80122e6: 681b ldr r3, [r3, #0] - 80122e8: 68fa ldr r2, [r7, #12] - 80122ea: 4313 orrs r3, r2 - 80122ec: 60fb str r3, [r7, #12] - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC1P; - 80122ee: 697b ldr r3, [r7, #20] - 80122f0: f023 0302 bic.w r3, r3, #2 - 80122f4: 617b str r3, [r7, #20] - /* Set the Output Compare Polarity */ - tmpccer |= OC_Config->OCPolarity; - 80122f6: 683b ldr r3, [r7, #0] - 80122f8: 689b ldr r3, [r3, #8] - 80122fa: 697a ldr r2, [r7, #20] - 80122fc: 4313 orrs r3, r2 - 80122fe: 617b str r3, [r7, #20] - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) - 8012300: 687b ldr r3, [r7, #4] - 8012302: 4a1c ldr r2, [pc, #112] @ (8012374 ) - 8012304: 4293 cmp r3, r2 - 8012306: d10c bne.n 8012322 - { - /* Check parameters */ - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC1NP; - 8012308: 697b ldr r3, [r7, #20] - 801230a: f023 0308 bic.w r3, r3, #8 - 801230e: 617b str r3, [r7, #20] - /* Set the Output N Polarity */ - tmpccer |= OC_Config->OCNPolarity; - 8012310: 683b ldr r3, [r7, #0] - 8012312: 68db ldr r3, [r3, #12] - 8012314: 697a ldr r2, [r7, #20] - 8012316: 4313 orrs r3, r2 - 8012318: 617b str r3, [r7, #20] - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC1NE; - 801231a: 697b ldr r3, [r7, #20] - 801231c: f023 0304 bic.w r3, r3, #4 - 8012320: 617b str r3, [r7, #20] - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - 8012322: 687b ldr r3, [r7, #4] - 8012324: 4a13 ldr r2, [pc, #76] @ (8012374 ) - 8012326: 4293 cmp r3, r2 - 8012328: d111 bne.n 801234e - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS1; - 801232a: 693b ldr r3, [r7, #16] - 801232c: f423 7380 bic.w r3, r3, #256 @ 0x100 - 8012330: 613b str r3, [r7, #16] - tmpcr2 &= ~TIM_CR2_OIS1N; - 8012332: 693b ldr r3, [r7, #16] - 8012334: f423 7300 bic.w r3, r3, #512 @ 0x200 - 8012338: 613b str r3, [r7, #16] - /* Set the Output Idle state */ - tmpcr2 |= OC_Config->OCIdleState; - 801233a: 683b ldr r3, [r7, #0] - 801233c: 695b ldr r3, [r3, #20] - 801233e: 693a ldr r2, [r7, #16] - 8012340: 4313 orrs r3, r2 - 8012342: 613b str r3, [r7, #16] - /* Set the Output N Idle state */ - tmpcr2 |= OC_Config->OCNIdleState; - 8012344: 683b ldr r3, [r7, #0] - 8012346: 699b ldr r3, [r3, #24] - 8012348: 693a ldr r2, [r7, #16] - 801234a: 4313 orrs r3, r2 - 801234c: 613b str r3, [r7, #16] - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - 801234e: 687b ldr r3, [r7, #4] - 8012350: 693a ldr r2, [r7, #16] - 8012352: 605a str r2, [r3, #4] - - /* Write to TIMx CCMR1 */ - TIMx->CCMR1 = tmpccmrx; - 8012354: 687b ldr r3, [r7, #4] - 8012356: 68fa ldr r2, [r7, #12] - 8012358: 619a str r2, [r3, #24] - - /* Set the Capture Compare Register value */ - TIMx->CCR1 = OC_Config->Pulse; - 801235a: 683b ldr r3, [r7, #0] - 801235c: 685a ldr r2, [r3, #4] - 801235e: 687b ldr r3, [r7, #4] - 8012360: 635a str r2, [r3, #52] @ 0x34 - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; - 8012362: 687b ldr r3, [r7, #4] - 8012364: 697a ldr r2, [r7, #20] - 8012366: 621a str r2, [r3, #32] -} - 8012368: bf00 nop - 801236a: 371c adds r7, #28 - 801236c: 46bd mov sp, r7 - 801236e: bc80 pop {r7} - 8012370: 4770 bx lr - 8012372: bf00 nop - 8012374: 40012c00 .word 0x40012c00 - -08012378 : - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - 8012378: b480 push {r7} - 801237a: b087 sub sp, #28 - 801237c: af00 add r7, sp, #0 - 801237e: 6078 str r0, [r7, #4] - 8012380: 6039 str r1, [r7, #0] - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - 8012382: 687b ldr r3, [r7, #4] - 8012384: 6a1b ldr r3, [r3, #32] - 8012386: 617b str r3, [r7, #20] - - /* Disable the Channel 2: Reset the CC2E Bit */ - TIMx->CCER &= ~TIM_CCER_CC2E; - 8012388: 687b ldr r3, [r7, #4] - 801238a: 6a1b ldr r3, [r3, #32] - 801238c: f023 0210 bic.w r2, r3, #16 - 8012390: 687b ldr r3, [r7, #4] - 8012392: 621a str r2, [r3, #32] - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - 8012394: 687b ldr r3, [r7, #4] - 8012396: 685b ldr r3, [r3, #4] - 8012398: 613b str r3, [r7, #16] - - /* Get the TIMx CCMR1 register value */ - tmpccmrx = TIMx->CCMR1; - 801239a: 687b ldr r3, [r7, #4] - 801239c: 699b ldr r3, [r3, #24] - 801239e: 60fb str r3, [r7, #12] - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR1_OC2M; - 80123a0: 68fb ldr r3, [r7, #12] - 80123a2: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 - 80123a6: 60fb str r3, [r7, #12] - tmpccmrx &= ~TIM_CCMR1_CC2S; - 80123a8: 68fb ldr r3, [r7, #12] - 80123aa: f423 7340 bic.w r3, r3, #768 @ 0x300 - 80123ae: 60fb str r3, [r7, #12] - - /* Select the Output Compare Mode */ - tmpccmrx |= (OC_Config->OCMode << 8U); - 80123b0: 683b ldr r3, [r7, #0] - 80123b2: 681b ldr r3, [r3, #0] - 80123b4: 021b lsls r3, r3, #8 - 80123b6: 68fa ldr r2, [r7, #12] - 80123b8: 4313 orrs r3, r2 - 80123ba: 60fb str r3, [r7, #12] - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC2P; - 80123bc: 697b ldr r3, [r7, #20] - 80123be: f023 0320 bic.w r3, r3, #32 - 80123c2: 617b str r3, [r7, #20] - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 4U); - 80123c4: 683b ldr r3, [r7, #0] - 80123c6: 689b ldr r3, [r3, #8] - 80123c8: 011b lsls r3, r3, #4 - 80123ca: 697a ldr r2, [r7, #20] - 80123cc: 4313 orrs r3, r2 - 80123ce: 617b str r3, [r7, #20] - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) - 80123d0: 687b ldr r3, [r7, #4] - 80123d2: 4a1d ldr r2, [pc, #116] @ (8012448 ) - 80123d4: 4293 cmp r3, r2 - 80123d6: d10d bne.n 80123f4 - { - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC2NP; - 80123d8: 697b ldr r3, [r7, #20] - 80123da: f023 0380 bic.w r3, r3, #128 @ 0x80 - 80123de: 617b str r3, [r7, #20] - /* Set the Output N Polarity */ - tmpccer |= (OC_Config->OCNPolarity << 4U); - 80123e0: 683b ldr r3, [r7, #0] - 80123e2: 68db ldr r3, [r3, #12] - 80123e4: 011b lsls r3, r3, #4 - 80123e6: 697a ldr r2, [r7, #20] - 80123e8: 4313 orrs r3, r2 - 80123ea: 617b str r3, [r7, #20] - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC2NE; - 80123ec: 697b ldr r3, [r7, #20] - 80123ee: f023 0340 bic.w r3, r3, #64 @ 0x40 - 80123f2: 617b str r3, [r7, #20] - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - 80123f4: 687b ldr r3, [r7, #4] - 80123f6: 4a14 ldr r2, [pc, #80] @ (8012448 ) - 80123f8: 4293 cmp r3, r2 - 80123fa: d113 bne.n 8012424 - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS2; - 80123fc: 693b ldr r3, [r7, #16] - 80123fe: f423 6380 bic.w r3, r3, #1024 @ 0x400 - 8012402: 613b str r3, [r7, #16] - tmpcr2 &= ~TIM_CR2_OIS2N; - 8012404: 693b ldr r3, [r7, #16] - 8012406: f423 6300 bic.w r3, r3, #2048 @ 0x800 - 801240a: 613b str r3, [r7, #16] - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 2U); - 801240c: 683b ldr r3, [r7, #0] - 801240e: 695b ldr r3, [r3, #20] - 8012410: 009b lsls r3, r3, #2 - 8012412: 693a ldr r2, [r7, #16] - 8012414: 4313 orrs r3, r2 - 8012416: 613b str r3, [r7, #16] - /* Set the Output N Idle state */ - tmpcr2 |= (OC_Config->OCNIdleState << 2U); - 8012418: 683b ldr r3, [r7, #0] - 801241a: 699b ldr r3, [r3, #24] - 801241c: 009b lsls r3, r3, #2 - 801241e: 693a ldr r2, [r7, #16] - 8012420: 4313 orrs r3, r2 - 8012422: 613b str r3, [r7, #16] - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - 8012424: 687b ldr r3, [r7, #4] - 8012426: 693a ldr r2, [r7, #16] - 8012428: 605a str r2, [r3, #4] - - /* Write to TIMx CCMR1 */ - TIMx->CCMR1 = tmpccmrx; - 801242a: 687b ldr r3, [r7, #4] - 801242c: 68fa ldr r2, [r7, #12] - 801242e: 619a str r2, [r3, #24] - - /* Set the Capture Compare Register value */ - TIMx->CCR2 = OC_Config->Pulse; - 8012430: 683b ldr r3, [r7, #0] - 8012432: 685a ldr r2, [r3, #4] - 8012434: 687b ldr r3, [r7, #4] - 8012436: 639a str r2, [r3, #56] @ 0x38 - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; - 8012438: 687b ldr r3, [r7, #4] - 801243a: 697a ldr r2, [r7, #20] - 801243c: 621a str r2, [r3, #32] -} - 801243e: bf00 nop - 8012440: 371c adds r7, #28 - 8012442: 46bd mov sp, r7 - 8012444: bc80 pop {r7} - 8012446: 4770 bx lr - 8012448: 40012c00 .word 0x40012c00 - -0801244c : - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - 801244c: b480 push {r7} - 801244e: b087 sub sp, #28 - 8012450: af00 add r7, sp, #0 - 8012452: 6078 str r0, [r7, #4] - 8012454: 6039 str r1, [r7, #0] - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - 8012456: 687b ldr r3, [r7, #4] - 8012458: 6a1b ldr r3, [r3, #32] - 801245a: 617b str r3, [r7, #20] - - /* Disable the Channel 3: Reset the CC2E Bit */ - TIMx->CCER &= ~TIM_CCER_CC3E; - 801245c: 687b ldr r3, [r7, #4] - 801245e: 6a1b ldr r3, [r3, #32] - 8012460: f423 7280 bic.w r2, r3, #256 @ 0x100 - 8012464: 687b ldr r3, [r7, #4] - 8012466: 621a str r2, [r3, #32] - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - 8012468: 687b ldr r3, [r7, #4] - 801246a: 685b ldr r3, [r3, #4] - 801246c: 613b str r3, [r7, #16] - - /* Get the TIMx CCMR2 register value */ - tmpccmrx = TIMx->CCMR2; - 801246e: 687b ldr r3, [r7, #4] - 8012470: 69db ldr r3, [r3, #28] - 8012472: 60fb str r3, [r7, #12] - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR2_OC3M; - 8012474: 68fb ldr r3, [r7, #12] - 8012476: f023 0370 bic.w r3, r3, #112 @ 0x70 - 801247a: 60fb str r3, [r7, #12] - tmpccmrx &= ~TIM_CCMR2_CC3S; - 801247c: 68fb ldr r3, [r7, #12] - 801247e: f023 0303 bic.w r3, r3, #3 - 8012482: 60fb str r3, [r7, #12] - /* Select the Output Compare Mode */ - tmpccmrx |= OC_Config->OCMode; - 8012484: 683b ldr r3, [r7, #0] - 8012486: 681b ldr r3, [r3, #0] - 8012488: 68fa ldr r2, [r7, #12] - 801248a: 4313 orrs r3, r2 - 801248c: 60fb str r3, [r7, #12] - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC3P; - 801248e: 697b ldr r3, [r7, #20] - 8012490: f423 7300 bic.w r3, r3, #512 @ 0x200 - 8012494: 617b str r3, [r7, #20] - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 8U); - 8012496: 683b ldr r3, [r7, #0] - 8012498: 689b ldr r3, [r3, #8] - 801249a: 021b lsls r3, r3, #8 - 801249c: 697a ldr r2, [r7, #20] - 801249e: 4313 orrs r3, r2 - 80124a0: 617b str r3, [r7, #20] - - if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) - 80124a2: 687b ldr r3, [r7, #4] - 80124a4: 4a1d ldr r2, [pc, #116] @ (801251c ) - 80124a6: 4293 cmp r3, r2 - 80124a8: d10d bne.n 80124c6 - { - assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity)); - - /* Reset the Output N Polarity level */ - tmpccer &= ~TIM_CCER_CC3NP; - 80124aa: 697b ldr r3, [r7, #20] - 80124ac: f423 6300 bic.w r3, r3, #2048 @ 0x800 - 80124b0: 617b str r3, [r7, #20] - /* Set the Output N Polarity */ - tmpccer |= (OC_Config->OCNPolarity << 8U); - 80124b2: 683b ldr r3, [r7, #0] - 80124b4: 68db ldr r3, [r3, #12] - 80124b6: 021b lsls r3, r3, #8 - 80124b8: 697a ldr r2, [r7, #20] - 80124ba: 4313 orrs r3, r2 - 80124bc: 617b str r3, [r7, #20] - /* Reset the Output N State */ - tmpccer &= ~TIM_CCER_CC3NE; - 80124be: 697b ldr r3, [r7, #20] - 80124c0: f423 6380 bic.w r3, r3, #1024 @ 0x400 - 80124c4: 617b str r3, [r7, #20] - } - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - 80124c6: 687b ldr r3, [r7, #4] - 80124c8: 4a14 ldr r2, [pc, #80] @ (801251c ) - 80124ca: 4293 cmp r3, r2 - 80124cc: d113 bne.n 80124f6 - /* Check parameters */ - assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState)); - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare and Output Compare N IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS3; - 80124ce: 693b ldr r3, [r7, #16] - 80124d0: f423 5380 bic.w r3, r3, #4096 @ 0x1000 - 80124d4: 613b str r3, [r7, #16] - tmpcr2 &= ~TIM_CR2_OIS3N; - 80124d6: 693b ldr r3, [r7, #16] - 80124d8: f423 5300 bic.w r3, r3, #8192 @ 0x2000 - 80124dc: 613b str r3, [r7, #16] - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 4U); - 80124de: 683b ldr r3, [r7, #0] - 80124e0: 695b ldr r3, [r3, #20] - 80124e2: 011b lsls r3, r3, #4 - 80124e4: 693a ldr r2, [r7, #16] - 80124e6: 4313 orrs r3, r2 - 80124e8: 613b str r3, [r7, #16] - /* Set the Output N Idle state */ - tmpcr2 |= (OC_Config->OCNIdleState << 4U); - 80124ea: 683b ldr r3, [r7, #0] - 80124ec: 699b ldr r3, [r3, #24] - 80124ee: 011b lsls r3, r3, #4 - 80124f0: 693a ldr r2, [r7, #16] - 80124f2: 4313 orrs r3, r2 - 80124f4: 613b str r3, [r7, #16] - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - 80124f6: 687b ldr r3, [r7, #4] - 80124f8: 693a ldr r2, [r7, #16] - 80124fa: 605a str r2, [r3, #4] - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - 80124fc: 687b ldr r3, [r7, #4] - 80124fe: 68fa ldr r2, [r7, #12] - 8012500: 61da str r2, [r3, #28] - - /* Set the Capture Compare Register value */ - TIMx->CCR3 = OC_Config->Pulse; - 8012502: 683b ldr r3, [r7, #0] - 8012504: 685a ldr r2, [r3, #4] - 8012506: 687b ldr r3, [r7, #4] - 8012508: 63da str r2, [r3, #60] @ 0x3c - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; - 801250a: 687b ldr r3, [r7, #4] - 801250c: 697a ldr r2, [r7, #20] - 801250e: 621a str r2, [r3, #32] -} - 8012510: bf00 nop - 8012512: 371c adds r7, #28 - 8012514: 46bd mov sp, r7 - 8012516: bc80 pop {r7} - 8012518: 4770 bx lr - 801251a: bf00 nop - 801251c: 40012c00 .word 0x40012c00 - -08012520 : - * @param TIMx to select the TIM peripheral - * @param OC_Config The output configuration structure - * @retval None - */ -static void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, const TIM_OC_InitTypeDef *OC_Config) -{ - 8012520: b480 push {r7} - 8012522: b087 sub sp, #28 - 8012524: af00 add r7, sp, #0 - 8012526: 6078 str r0, [r7, #4] - 8012528: 6039 str r1, [r7, #0] - uint32_t tmpccmrx; - uint32_t tmpccer; - uint32_t tmpcr2; - - /* Get the TIMx CCER register value */ - tmpccer = TIMx->CCER; - 801252a: 687b ldr r3, [r7, #4] - 801252c: 6a1b ldr r3, [r3, #32] - 801252e: 613b str r3, [r7, #16] - - /* Disable the Channel 4: Reset the CC4E Bit */ - TIMx->CCER &= ~TIM_CCER_CC4E; - 8012530: 687b ldr r3, [r7, #4] - 8012532: 6a1b ldr r3, [r3, #32] - 8012534: f423 5280 bic.w r2, r3, #4096 @ 0x1000 - 8012538: 687b ldr r3, [r7, #4] - 801253a: 621a str r2, [r3, #32] - - /* Get the TIMx CR2 register value */ - tmpcr2 = TIMx->CR2; - 801253c: 687b ldr r3, [r7, #4] - 801253e: 685b ldr r3, [r3, #4] - 8012540: 617b str r3, [r7, #20] - - /* Get the TIMx CCMR2 register value */ - tmpccmrx = TIMx->CCMR2; - 8012542: 687b ldr r3, [r7, #4] - 8012544: 69db ldr r3, [r3, #28] - 8012546: 60fb str r3, [r7, #12] - - /* Reset the Output Compare mode and Capture/Compare selection Bits */ - tmpccmrx &= ~TIM_CCMR2_OC4M; - 8012548: 68fb ldr r3, [r7, #12] - 801254a: f423 43e0 bic.w r3, r3, #28672 @ 0x7000 - 801254e: 60fb str r3, [r7, #12] - tmpccmrx &= ~TIM_CCMR2_CC4S; - 8012550: 68fb ldr r3, [r7, #12] - 8012552: f423 7340 bic.w r3, r3, #768 @ 0x300 - 8012556: 60fb str r3, [r7, #12] - - /* Select the Output Compare Mode */ - tmpccmrx |= (OC_Config->OCMode << 8U); - 8012558: 683b ldr r3, [r7, #0] - 801255a: 681b ldr r3, [r3, #0] - 801255c: 021b lsls r3, r3, #8 - 801255e: 68fa ldr r2, [r7, #12] - 8012560: 4313 orrs r3, r2 - 8012562: 60fb str r3, [r7, #12] - - /* Reset the Output Polarity level */ - tmpccer &= ~TIM_CCER_CC4P; - 8012564: 693b ldr r3, [r7, #16] - 8012566: f423 5300 bic.w r3, r3, #8192 @ 0x2000 - 801256a: 613b str r3, [r7, #16] - /* Set the Output Compare Polarity */ - tmpccer |= (OC_Config->OCPolarity << 12U); - 801256c: 683b ldr r3, [r7, #0] - 801256e: 689b ldr r3, [r3, #8] - 8012570: 031b lsls r3, r3, #12 - 8012572: 693a ldr r2, [r7, #16] - 8012574: 4313 orrs r3, r2 - 8012576: 613b str r3, [r7, #16] - - if (IS_TIM_BREAK_INSTANCE(TIMx)) - 8012578: 687b ldr r3, [r7, #4] - 801257a: 4a0f ldr r2, [pc, #60] @ (80125b8 ) - 801257c: 4293 cmp r3, r2 - 801257e: d109 bne.n 8012594 - { - /* Check parameters */ - assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState)); - - /* Reset the Output Compare IDLE State */ - tmpcr2 &= ~TIM_CR2_OIS4; - 8012580: 697b ldr r3, [r7, #20] - 8012582: f423 4380 bic.w r3, r3, #16384 @ 0x4000 - 8012586: 617b str r3, [r7, #20] - - /* Set the Output Idle state */ - tmpcr2 |= (OC_Config->OCIdleState << 6U); - 8012588: 683b ldr r3, [r7, #0] - 801258a: 695b ldr r3, [r3, #20] - 801258c: 019b lsls r3, r3, #6 - 801258e: 697a ldr r2, [r7, #20] - 8012590: 4313 orrs r3, r2 - 8012592: 617b str r3, [r7, #20] - } - - /* Write to TIMx CR2 */ - TIMx->CR2 = tmpcr2; - 8012594: 687b ldr r3, [r7, #4] - 8012596: 697a ldr r2, [r7, #20] - 8012598: 605a str r2, [r3, #4] - - /* Write to TIMx CCMR2 */ - TIMx->CCMR2 = tmpccmrx; - 801259a: 687b ldr r3, [r7, #4] - 801259c: 68fa ldr r2, [r7, #12] - 801259e: 61da str r2, [r3, #28] - - /* Set the Capture Compare Register value */ - TIMx->CCR4 = OC_Config->Pulse; - 80125a0: 683b ldr r3, [r7, #0] - 80125a2: 685a ldr r2, [r3, #4] - 80125a4: 687b ldr r3, [r7, #4] - 80125a6: 641a str r2, [r3, #64] @ 0x40 - - /* Write to TIMx CCER */ - TIMx->CCER = tmpccer; - 80125a8: 687b ldr r3, [r7, #4] - 80125aa: 693a ldr r2, [r7, #16] - 80125ac: 621a str r2, [r3, #32] -} - 80125ae: bf00 nop - 80125b0: 371c adds r7, #28 - 80125b2: 46bd mov sp, r7 - 80125b4: bc80 pop {r7} - 80125b6: 4770 bx lr - 80125b8: 40012c00 .word 0x40012c00 - -080125bc : - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - 80125bc: b480 push {r7} - 80125be: b087 sub sp, #28 - 80125c0: af00 add r7, sp, #0 - 80125c2: 60f8 str r0, [r7, #12] - 80125c4: 60b9 str r1, [r7, #8] - 80125c6: 607a str r2, [r7, #4] - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 1: Reset the CC1E Bit */ - tmpccer = TIMx->CCER; - 80125c8: 68fb ldr r3, [r7, #12] - 80125ca: 6a1b ldr r3, [r3, #32] - 80125cc: 617b str r3, [r7, #20] - TIMx->CCER &= ~TIM_CCER_CC1E; - 80125ce: 68fb ldr r3, [r7, #12] - 80125d0: 6a1b ldr r3, [r3, #32] - 80125d2: f023 0201 bic.w r2, r3, #1 - 80125d6: 68fb ldr r3, [r7, #12] - 80125d8: 621a str r2, [r3, #32] - tmpccmr1 = TIMx->CCMR1; - 80125da: 68fb ldr r3, [r7, #12] - 80125dc: 699b ldr r3, [r3, #24] - 80125de: 613b str r3, [r7, #16] - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC1F; - 80125e0: 693b ldr r3, [r7, #16] - 80125e2: f023 03f0 bic.w r3, r3, #240 @ 0xf0 - 80125e6: 613b str r3, [r7, #16] - tmpccmr1 |= (TIM_ICFilter << 4U); - 80125e8: 687b ldr r3, [r7, #4] - 80125ea: 011b lsls r3, r3, #4 - 80125ec: 693a ldr r2, [r7, #16] - 80125ee: 4313 orrs r3, r2 - 80125f0: 613b str r3, [r7, #16] - - /* Select the Polarity and set the CC1E Bit */ - tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP); - 80125f2: 697b ldr r3, [r7, #20] - 80125f4: f023 030a bic.w r3, r3, #10 - 80125f8: 617b str r3, [r7, #20] - tmpccer |= TIM_ICPolarity; - 80125fa: 697a ldr r2, [r7, #20] - 80125fc: 68bb ldr r3, [r7, #8] - 80125fe: 4313 orrs r3, r2 - 8012600: 617b str r3, [r7, #20] - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1; - 8012602: 68fb ldr r3, [r7, #12] - 8012604: 693a ldr r2, [r7, #16] - 8012606: 619a str r2, [r3, #24] - TIMx->CCER = tmpccer; - 8012608: 68fb ldr r3, [r7, #12] - 801260a: 697a ldr r2, [r7, #20] - 801260c: 621a str r2, [r3, #32] -} - 801260e: bf00 nop - 8012610: 371c adds r7, #28 - 8012612: 46bd mov sp, r7 - 8012614: bc80 pop {r7} - 8012616: 4770 bx lr - -08012618 : - * @param TIM_ICFilter Specifies the Input Capture Filter. - * This parameter must be a value between 0x00 and 0x0F. - * @retval None - */ -static void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) -{ - 8012618: b480 push {r7} - 801261a: b087 sub sp, #28 - 801261c: af00 add r7, sp, #0 - 801261e: 60f8 str r0, [r7, #12] - 8012620: 60b9 str r1, [r7, #8] - 8012622: 607a str r2, [r7, #4] - uint32_t tmpccmr1; - uint32_t tmpccer; - - /* Disable the Channel 2: Reset the CC2E Bit */ - tmpccer = TIMx->CCER; - 8012624: 68fb ldr r3, [r7, #12] - 8012626: 6a1b ldr r3, [r3, #32] - 8012628: 617b str r3, [r7, #20] - TIMx->CCER &= ~TIM_CCER_CC2E; - 801262a: 68fb ldr r3, [r7, #12] - 801262c: 6a1b ldr r3, [r3, #32] - 801262e: f023 0210 bic.w r2, r3, #16 - 8012632: 68fb ldr r3, [r7, #12] - 8012634: 621a str r2, [r3, #32] - tmpccmr1 = TIMx->CCMR1; - 8012636: 68fb ldr r3, [r7, #12] - 8012638: 699b ldr r3, [r3, #24] - 801263a: 613b str r3, [r7, #16] - - /* Set the filter */ - tmpccmr1 &= ~TIM_CCMR1_IC2F; - 801263c: 693b ldr r3, [r7, #16] - 801263e: f423 4370 bic.w r3, r3, #61440 @ 0xf000 - 8012642: 613b str r3, [r7, #16] - tmpccmr1 |= (TIM_ICFilter << 12U); - 8012644: 687b ldr r3, [r7, #4] - 8012646: 031b lsls r3, r3, #12 - 8012648: 693a ldr r2, [r7, #16] - 801264a: 4313 orrs r3, r2 - 801264c: 613b str r3, [r7, #16] - - /* Select the Polarity and set the CC2E Bit */ - tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP); - 801264e: 697b ldr r3, [r7, #20] - 8012650: f023 03a0 bic.w r3, r3, #160 @ 0xa0 - 8012654: 617b str r3, [r7, #20] - tmpccer |= (TIM_ICPolarity << 4U); - 8012656: 68bb ldr r3, [r7, #8] - 8012658: 011b lsls r3, r3, #4 - 801265a: 697a ldr r2, [r7, #20] - 801265c: 4313 orrs r3, r2 - 801265e: 617b str r3, [r7, #20] - - /* Write to TIMx CCMR1 and CCER registers */ - TIMx->CCMR1 = tmpccmr1 ; - 8012660: 68fb ldr r3, [r7, #12] - 8012662: 693a ldr r2, [r7, #16] - 8012664: 619a str r2, [r3, #24] - TIMx->CCER = tmpccer; - 8012666: 68fb ldr r3, [r7, #12] - 8012668: 697a ldr r2, [r7, #20] - 801266a: 621a str r2, [r3, #32] -} - 801266c: bf00 nop - 801266e: 371c adds r7, #28 - 8012670: 46bd mov sp, r7 - 8012672: bc80 pop {r7} - 8012674: 4770 bx lr - -08012676 : - * @arg TIM_TS_TI2FP2: Filtered Timer Input 2 - * @arg TIM_TS_ETRF: External Trigger input - * @retval None - */ -static void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) -{ - 8012676: b480 push {r7} - 8012678: b085 sub sp, #20 - 801267a: af00 add r7, sp, #0 - 801267c: 6078 str r0, [r7, #4] - 801267e: 6039 str r1, [r7, #0] - uint32_t tmpsmcr; - - /* Get the TIMx SMCR register value */ - tmpsmcr = TIMx->SMCR; - 8012680: 687b ldr r3, [r7, #4] - 8012682: 689b ldr r3, [r3, #8] - 8012684: 60fb str r3, [r7, #12] - /* Reset the TS Bits */ - tmpsmcr &= ~TIM_SMCR_TS; - 8012686: 68fb ldr r3, [r7, #12] - 8012688: f023 0370 bic.w r3, r3, #112 @ 0x70 - 801268c: 60fb str r3, [r7, #12] - /* Set the Input Trigger source and the slave mode*/ - tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1); - 801268e: 683a ldr r2, [r7, #0] - 8012690: 68fb ldr r3, [r7, #12] - 8012692: 4313 orrs r3, r2 - 8012694: f043 0307 orr.w r3, r3, #7 - 8012698: 60fb str r3, [r7, #12] - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; - 801269a: 687b ldr r3, [r7, #4] - 801269c: 68fa ldr r2, [r7, #12] - 801269e: 609a str r2, [r3, #8] -} - 80126a0: bf00 nop - 80126a2: 3714 adds r7, #20 - 80126a4: 46bd mov sp, r7 - 80126a6: bc80 pop {r7} - 80126a8: 4770 bx lr - -080126aa : - * This parameter must be a value between 0x00 and 0x0F - * @retval None - */ -void TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, - uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) -{ - 80126aa: b480 push {r7} - 80126ac: b087 sub sp, #28 - 80126ae: af00 add r7, sp, #0 - 80126b0: 60f8 str r0, [r7, #12] - 80126b2: 60b9 str r1, [r7, #8] - 80126b4: 607a str r2, [r7, #4] - 80126b6: 603b str r3, [r7, #0] - uint32_t tmpsmcr; - - tmpsmcr = TIMx->SMCR; - 80126b8: 68fb ldr r3, [r7, #12] - 80126ba: 689b ldr r3, [r3, #8] - 80126bc: 617b str r3, [r7, #20] - - /* Reset the ETR Bits */ - tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP); - 80126be: 697b ldr r3, [r7, #20] - 80126c0: f423 437f bic.w r3, r3, #65280 @ 0xff00 - 80126c4: 617b str r3, [r7, #20] - - /* Set the Prescaler, the Filter value and the Polarity */ - tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U))); - 80126c6: 683b ldr r3, [r7, #0] - 80126c8: 021a lsls r2, r3, #8 - 80126ca: 687b ldr r3, [r7, #4] - 80126cc: 431a orrs r2, r3 - 80126ce: 68bb ldr r3, [r7, #8] - 80126d0: 4313 orrs r3, r2 - 80126d2: 697a ldr r2, [r7, #20] - 80126d4: 4313 orrs r3, r2 - 80126d6: 617b str r3, [r7, #20] - - /* Write to TIMx SMCR */ - TIMx->SMCR = tmpsmcr; - 80126d8: 68fb ldr r3, [r7, #12] - 80126da: 697a ldr r2, [r7, #20] - 80126dc: 609a str r2, [r3, #8] -} - 80126de: bf00 nop - 80126e0: 371c adds r7, #28 - 80126e2: 46bd mov sp, r7 - 80126e4: bc80 pop {r7} - 80126e6: 4770 bx lr - -080126e8 : - * @param ChannelState specifies the TIM Channel CCxE bit new state. - * This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE. - * @retval None - */ -void TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) -{ - 80126e8: b480 push {r7} - 80126ea: b087 sub sp, #28 - 80126ec: af00 add r7, sp, #0 - 80126ee: 60f8 str r0, [r7, #12] - 80126f0: 60b9 str r1, [r7, #8] - 80126f2: 607a str r2, [r7, #4] - - /* Check the parameters */ - assert_param(IS_TIM_CC1_INSTANCE(TIMx)); - assert_param(IS_TIM_CHANNELS(Channel)); - - tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */ - 80126f4: 68bb ldr r3, [r7, #8] - 80126f6: f003 031f and.w r3, r3, #31 - 80126fa: 2201 movs r2, #1 - 80126fc: fa02 f303 lsl.w r3, r2, r3 - 8012700: 617b str r3, [r7, #20] - - /* Reset the CCxE Bit */ - TIMx->CCER &= ~tmp; - 8012702: 68fb ldr r3, [r7, #12] - 8012704: 6a1a ldr r2, [r3, #32] - 8012706: 697b ldr r3, [r7, #20] - 8012708: 43db mvns r3, r3 - 801270a: 401a ands r2, r3 - 801270c: 68fb ldr r3, [r7, #12] - 801270e: 621a str r2, [r3, #32] - - /* Set or reset the CCxE Bit */ - TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */ - 8012710: 68fb ldr r3, [r7, #12] - 8012712: 6a1a ldr r2, [r3, #32] - 8012714: 68bb ldr r3, [r7, #8] - 8012716: f003 031f and.w r3, r3, #31 - 801271a: 6879 ldr r1, [r7, #4] - 801271c: fa01 f303 lsl.w r3, r1, r3 - 8012720: 431a orrs r2, r3 - 8012722: 68fb ldr r3, [r7, #12] - 8012724: 621a str r2, [r3, #32] -} - 8012726: bf00 nop - 8012728: 371c adds r7, #28 - 801272a: 46bd mov sp, r7 - 801272c: bc80 pop {r7} - 801272e: 4770 bx lr - -08012730 : - * mode. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, - const TIM_MasterConfigTypeDef *sMasterConfig) -{ - 8012730: b480 push {r7} - 8012732: b085 sub sp, #20 - 8012734: af00 add r7, sp, #0 - 8012736: 6078 str r0, [r7, #4] - 8012738: 6039 str r1, [r7, #0] - assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance)); - assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger)); - assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode)); - - /* Check input state */ - __HAL_LOCK(htim); - 801273a: 687b ldr r3, [r7, #4] - 801273c: f893 303c ldrb.w r3, [r3, #60] @ 0x3c - 8012740: 2b01 cmp r3, #1 - 8012742: d101 bne.n 8012748 - 8012744: 2302 movs r3, #2 - 8012746: e04b b.n 80127e0 - 8012748: 687b ldr r3, [r7, #4] - 801274a: 2201 movs r2, #1 - 801274c: f883 203c strb.w r2, [r3, #60] @ 0x3c - - /* Change the handler state */ - htim->State = HAL_TIM_STATE_BUSY; - 8012750: 687b ldr r3, [r7, #4] - 8012752: 2202 movs r2, #2 - 8012754: f883 203d strb.w r2, [r3, #61] @ 0x3d - - /* Get the TIMx CR2 register value */ - tmpcr2 = htim->Instance->CR2; - 8012758: 687b ldr r3, [r7, #4] - 801275a: 681b ldr r3, [r3, #0] - 801275c: 685b ldr r3, [r3, #4] - 801275e: 60fb str r3, [r7, #12] - - /* Get the TIMx SMCR register value */ - tmpsmcr = htim->Instance->SMCR; - 8012760: 687b ldr r3, [r7, #4] - 8012762: 681b ldr r3, [r3, #0] - 8012764: 689b ldr r3, [r3, #8] - 8012766: 60bb str r3, [r7, #8] - - /* Reset the MMS Bits */ - tmpcr2 &= ~TIM_CR2_MMS; - 8012768: 68fb ldr r3, [r7, #12] - 801276a: f023 0370 bic.w r3, r3, #112 @ 0x70 - 801276e: 60fb str r3, [r7, #12] - /* Select the TRGO source */ - tmpcr2 |= sMasterConfig->MasterOutputTrigger; - 8012770: 683b ldr r3, [r7, #0] - 8012772: 681b ldr r3, [r3, #0] - 8012774: 68fa ldr r2, [r7, #12] - 8012776: 4313 orrs r3, r2 - 8012778: 60fb str r3, [r7, #12] - - /* Update TIMx CR2 */ - htim->Instance->CR2 = tmpcr2; - 801277a: 687b ldr r3, [r7, #4] - 801277c: 681b ldr r3, [r3, #0] - 801277e: 68fa ldr r2, [r7, #12] - 8012780: 605a str r2, [r3, #4] - - if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) - 8012782: 687b ldr r3, [r7, #4] - 8012784: 681b ldr r3, [r3, #0] - 8012786: 4a19 ldr r2, [pc, #100] @ (80127ec ) - 8012788: 4293 cmp r3, r2 - 801278a: d013 beq.n 80127b4 - 801278c: 687b ldr r3, [r7, #4] - 801278e: 681b ldr r3, [r3, #0] - 8012790: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 - 8012794: d00e beq.n 80127b4 - 8012796: 687b ldr r3, [r7, #4] - 8012798: 681b ldr r3, [r3, #0] - 801279a: 4a15 ldr r2, [pc, #84] @ (80127f0 ) - 801279c: 4293 cmp r3, r2 - 801279e: d009 beq.n 80127b4 - 80127a0: 687b ldr r3, [r7, #4] - 80127a2: 681b ldr r3, [r3, #0] - 80127a4: 4a13 ldr r2, [pc, #76] @ (80127f4 ) - 80127a6: 4293 cmp r3, r2 - 80127a8: d004 beq.n 80127b4 - 80127aa: 687b ldr r3, [r7, #4] - 80127ac: 681b ldr r3, [r3, #0] - 80127ae: 4a12 ldr r2, [pc, #72] @ (80127f8 ) - 80127b0: 4293 cmp r3, r2 - 80127b2: d10c bne.n 80127ce - { - /* Reset the MSM Bit */ - tmpsmcr &= ~TIM_SMCR_MSM; - 80127b4: 68bb ldr r3, [r7, #8] - 80127b6: f023 0380 bic.w r3, r3, #128 @ 0x80 - 80127ba: 60bb str r3, [r7, #8] - /* Set master mode */ - tmpsmcr |= sMasterConfig->MasterSlaveMode; - 80127bc: 683b ldr r3, [r7, #0] - 80127be: 685b ldr r3, [r3, #4] - 80127c0: 68ba ldr r2, [r7, #8] - 80127c2: 4313 orrs r3, r2 - 80127c4: 60bb str r3, [r7, #8] - - /* Update TIMx SMCR */ - htim->Instance->SMCR = tmpsmcr; - 80127c6: 687b ldr r3, [r7, #4] - 80127c8: 681b ldr r3, [r3, #0] - 80127ca: 68ba ldr r2, [r7, #8] - 80127cc: 609a str r2, [r3, #8] - } - - /* Change the htim state */ - htim->State = HAL_TIM_STATE_READY; - 80127ce: 687b ldr r3, [r7, #4] - 80127d0: 2201 movs r2, #1 - 80127d2: f883 203d strb.w r2, [r3, #61] @ 0x3d - - __HAL_UNLOCK(htim); - 80127d6: 687b ldr r3, [r7, #4] - 80127d8: 2200 movs r2, #0 - 80127da: f883 203c strb.w r2, [r3, #60] @ 0x3c - - return HAL_OK; - 80127de: 2300 movs r3, #0 -} - 80127e0: 4618 mov r0, r3 - 80127e2: 3714 adds r7, #20 - 80127e4: 46bd mov sp, r7 - 80127e6: bc80 pop {r7} - 80127e8: 4770 bx lr - 80127ea: bf00 nop - 80127ec: 40012c00 .word 0x40012c00 - 80127f0: 40000400 .word 0x40000400 - 80127f4: 40000800 .word 0x40000800 - 80127f8: 40000c00 .word 0x40000c00 - -080127fc : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart) -{ - 80127fc: b580 push {r7, lr} - 80127fe: b082 sub sp, #8 - 8012800: af00 add r7, sp, #0 - 8012802: 6078 str r0, [r7, #4] - /* Check the UART handle allocation */ - if (huart == NULL) - 8012804: 687b ldr r3, [r7, #4] - 8012806: 2b00 cmp r3, #0 - 8012808: d101 bne.n 801280e - { - return HAL_ERROR; - 801280a: 2301 movs r3, #1 - 801280c: e042 b.n 8012894 - assert_param(IS_UART_WORD_LENGTH(huart->Init.WordLength)); -#if defined(USART_CR1_OVER8) - assert_param(IS_UART_OVERSAMPLING(huart->Init.OverSampling)); -#endif /* USART_CR1_OVER8 */ - - if (huart->gState == HAL_UART_STATE_RESET) - 801280e: 687b ldr r3, [r7, #4] - 8012810: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 8012814: b2db uxtb r3, r3 - 8012816: 2b00 cmp r3, #0 - 8012818: d106 bne.n 8012828 - { - /* Allocate lock resource and initialize it */ - huart->Lock = HAL_UNLOCKED; - 801281a: 687b ldr r3, [r7, #4] - 801281c: 2200 movs r2, #0 - 801281e: f883 2040 strb.w r2, [r3, #64] @ 0x40 - - /* Init the low level hardware */ - huart->MspInitCallback(huart); -#else - /* Init the low level hardware : GPIO, CLOCK */ - HAL_UART_MspInit(huart); - 8012822: 6878 ldr r0, [r7, #4] - 8012824: f7fb fe8e bl 800e544 -#endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */ - } - - huart->gState = HAL_UART_STATE_BUSY; - 8012828: 687b ldr r3, [r7, #4] - 801282a: 2224 movs r2, #36 @ 0x24 - 801282c: f883 2041 strb.w r2, [r3, #65] @ 0x41 - - /* Disable the peripheral */ - __HAL_UART_DISABLE(huart); - 8012830: 687b ldr r3, [r7, #4] - 8012832: 681b ldr r3, [r3, #0] - 8012834: 68da ldr r2, [r3, #12] - 8012836: 687b ldr r3, [r7, #4] - 8012838: 681b ldr r3, [r3, #0] - 801283a: f422 5200 bic.w r2, r2, #8192 @ 0x2000 - 801283e: 60da str r2, [r3, #12] - - /* Set the UART Communication parameters */ - UART_SetConfig(huart); - 8012840: 6878 ldr r0, [r7, #4] - 8012842: f000 feb3 bl 80135ac - - /* In asynchronous mode, the following bits must be kept cleared: - - LINEN and CLKEN bits in the USART_CR2 register, - - SCEN, HDSEL and IREN bits in the USART_CR3 register.*/ - CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN)); - 8012846: 687b ldr r3, [r7, #4] - 8012848: 681b ldr r3, [r3, #0] - 801284a: 691a ldr r2, [r3, #16] - 801284c: 687b ldr r3, [r7, #4] - 801284e: 681b ldr r3, [r3, #0] - 8012850: f422 4290 bic.w r2, r2, #18432 @ 0x4800 - 8012854: 611a str r2, [r3, #16] - CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN)); - 8012856: 687b ldr r3, [r7, #4] - 8012858: 681b ldr r3, [r3, #0] - 801285a: 695a ldr r2, [r3, #20] - 801285c: 687b ldr r3, [r7, #4] - 801285e: 681b ldr r3, [r3, #0] - 8012860: f022 022a bic.w r2, r2, #42 @ 0x2a - 8012864: 615a str r2, [r3, #20] - - /* Enable the peripheral */ - __HAL_UART_ENABLE(huart); - 8012866: 687b ldr r3, [r7, #4] - 8012868: 681b ldr r3, [r3, #0] - 801286a: 68da ldr r2, [r3, #12] - 801286c: 687b ldr r3, [r7, #4] - 801286e: 681b ldr r3, [r3, #0] - 8012870: f442 5200 orr.w r2, r2, #8192 @ 0x2000 - 8012874: 60da str r2, [r3, #12] - - /* Initialize the UART state */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - 8012876: 687b ldr r3, [r7, #4] - 8012878: 2200 movs r2, #0 - 801287a: 645a str r2, [r3, #68] @ 0x44 - huart->gState = HAL_UART_STATE_READY; - 801287c: 687b ldr r3, [r7, #4] - 801287e: 2220 movs r2, #32 - 8012880: f883 2041 strb.w r2, [r3, #65] @ 0x41 - huart->RxState = HAL_UART_STATE_READY; - 8012884: 687b ldr r3, [r7, #4] - 8012886: 2220 movs r2, #32 - 8012888: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->RxEventType = HAL_UART_RXEVENT_TC; - 801288c: 687b ldr r3, [r7, #4] - 801288e: 2200 movs r2, #0 - 8012890: 635a str r2, [r3, #52] @ 0x34 - - return HAL_OK; - 8012892: 2300 movs r3, #0 -} - 8012894: 4618 mov r0, r3 - 8012896: 3708 adds r7, #8 - 8012898: 46bd mov sp, r7 - 801289a: bd80 pop {r7, pc} - -0801289c : - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be sent - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) -{ - 801289c: b480 push {r7} - 801289e: b085 sub sp, #20 - 80128a0: af00 add r7, sp, #0 - 80128a2: 60f8 str r0, [r7, #12] - 80128a4: 60b9 str r1, [r7, #8] - 80128a6: 4613 mov r3, r2 - 80128a8: 80fb strh r3, [r7, #6] - /* Check that a Tx process is not already ongoing */ - if (huart->gState == HAL_UART_STATE_READY) - 80128aa: 68fb ldr r3, [r7, #12] - 80128ac: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 80128b0: b2db uxtb r3, r3 - 80128b2: 2b20 cmp r3, #32 - 80128b4: d121 bne.n 80128fa - { - if ((pData == NULL) || (Size == 0U)) - 80128b6: 68bb ldr r3, [r7, #8] - 80128b8: 2b00 cmp r3, #0 - 80128ba: d002 beq.n 80128c2 - 80128bc: 88fb ldrh r3, [r7, #6] - 80128be: 2b00 cmp r3, #0 - 80128c0: d101 bne.n 80128c6 - { - return HAL_ERROR; - 80128c2: 2301 movs r3, #1 - 80128c4: e01a b.n 80128fc - } - - huart->pTxBuffPtr = pData; - 80128c6: 68fb ldr r3, [r7, #12] - 80128c8: 68ba ldr r2, [r7, #8] - 80128ca: 621a str r2, [r3, #32] - huart->TxXferSize = Size; - 80128cc: 68fb ldr r3, [r7, #12] - 80128ce: 88fa ldrh r2, [r7, #6] - 80128d0: 849a strh r2, [r3, #36] @ 0x24 - huart->TxXferCount = Size; - 80128d2: 68fb ldr r3, [r7, #12] - 80128d4: 88fa ldrh r2, [r7, #6] - 80128d6: 84da strh r2, [r3, #38] @ 0x26 - - huart->ErrorCode = HAL_UART_ERROR_NONE; - 80128d8: 68fb ldr r3, [r7, #12] - 80128da: 2200 movs r2, #0 - 80128dc: 645a str r2, [r3, #68] @ 0x44 - huart->gState = HAL_UART_STATE_BUSY_TX; - 80128de: 68fb ldr r3, [r7, #12] - 80128e0: 2221 movs r2, #33 @ 0x21 - 80128e2: f883 2041 strb.w r2, [r3, #65] @ 0x41 - - /* Enable the UART Transmit data register empty Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_TXE); - 80128e6: 68fb ldr r3, [r7, #12] - 80128e8: 681b ldr r3, [r3, #0] - 80128ea: 68da ldr r2, [r3, #12] - 80128ec: 68fb ldr r3, [r7, #12] - 80128ee: 681b ldr r3, [r3, #0] - 80128f0: f042 0280 orr.w r2, r2, #128 @ 0x80 - 80128f4: 60da str r2, [r3, #12] - - return HAL_OK; - 80128f6: 2300 movs r3, #0 - 80128f8: e000 b.n 80128fc - } - else - { - return HAL_BUSY; - 80128fa: 2302 movs r3, #2 - } -} - 80128fc: 4618 mov r0, r3 - 80128fe: 3714 adds r7, #20 - 8012900: 46bd mov sp, r7 - 8012902: bc80 pop {r7} - 8012904: 4770 bx lr - -08012906 : - * @param pData Pointer to data buffer (uint8_t or uint16_t data elements). - * @param Size Amount of data elements (uint8_t or uint16_t) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - 8012906: b580 push {r7, lr} - 8012908: b08c sub sp, #48 @ 0x30 - 801290a: af00 add r7, sp, #0 - 801290c: 60f8 str r0, [r7, #12] - 801290e: 60b9 str r1, [r7, #8] - 8012910: 4613 mov r3, r2 - 8012912: 80fb strh r3, [r7, #6] - HAL_StatusTypeDef status; - - /* Check that a Rx process is not already ongoing */ - if (huart->RxState == HAL_UART_STATE_READY) - 8012914: 68fb ldr r3, [r7, #12] - 8012916: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 - 801291a: b2db uxtb r3, r3 - 801291c: 2b20 cmp r3, #32 - 801291e: d14a bne.n 80129b6 - { - if ((pData == NULL) || (Size == 0U)) - 8012920: 68bb ldr r3, [r7, #8] - 8012922: 2b00 cmp r3, #0 - 8012924: d002 beq.n 801292c - 8012926: 88fb ldrh r3, [r7, #6] - 8012928: 2b00 cmp r3, #0 - 801292a: d101 bne.n 8012930 - { - return HAL_ERROR; - 801292c: 2301 movs r3, #1 - 801292e: e043 b.n 80129b8 - } - - /* Set Reception type to reception till IDLE Event*/ - huart->ReceptionType = HAL_UART_RECEPTION_TOIDLE; - 8012930: 68fb ldr r3, [r7, #12] - 8012932: 2201 movs r2, #1 - 8012934: 631a str r2, [r3, #48] @ 0x30 - huart->RxEventType = HAL_UART_RXEVENT_TC; - 8012936: 68fb ldr r3, [r7, #12] - 8012938: 2200 movs r2, #0 - 801293a: 635a str r2, [r3, #52] @ 0x34 - - status = UART_Start_Receive_IT(huart, pData, Size); - 801293c: 88fb ldrh r3, [r7, #6] - 801293e: 461a mov r2, r3 - 8012940: 68b9 ldr r1, [r7, #8] - 8012942: 68f8 ldr r0, [r7, #12] - 8012944: f000 fbfd bl 8013142 - 8012948: 4603 mov r3, r0 - 801294a: f887 302f strb.w r3, [r7, #47] @ 0x2f - - /* Check Rx process has been successfully started */ - if (status == HAL_OK) - 801294e: f897 302f ldrb.w r3, [r7, #47] @ 0x2f - 8012952: 2b00 cmp r3, #0 - 8012954: d12c bne.n 80129b0 - { - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - 8012956: 68fb ldr r3, [r7, #12] - 8012958: 6b1b ldr r3, [r3, #48] @ 0x30 - 801295a: 2b01 cmp r3, #1 - 801295c: d125 bne.n 80129aa - { - __HAL_UART_CLEAR_IDLEFLAG(huart); - 801295e: 2300 movs r3, #0 - 8012960: 613b str r3, [r7, #16] - 8012962: 68fb ldr r3, [r7, #12] - 8012964: 681b ldr r3, [r3, #0] - 8012966: 681b ldr r3, [r3, #0] - 8012968: 613b str r3, [r7, #16] - 801296a: 68fb ldr r3, [r7, #12] - 801296c: 681b ldr r3, [r3, #0] - 801296e: 685b ldr r3, [r3, #4] - 8012970: 613b str r3, [r7, #16] - 8012972: 693b ldr r3, [r7, #16] - ATOMIC_SET_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - 8012974: 68fb ldr r3, [r7, #12] - 8012976: 681b ldr r3, [r3, #0] - 8012978: 330c adds r3, #12 - 801297a: 61bb str r3, [r7, #24] - */ -__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 801297c: 69bb ldr r3, [r7, #24] - 801297e: e853 3f00 ldrex r3, [r3] - 8012982: 617b str r3, [r7, #20] - return(result); - 8012984: 697b ldr r3, [r7, #20] - 8012986: f043 0310 orr.w r3, r3, #16 - 801298a: 62bb str r3, [r7, #40] @ 0x28 - 801298c: 68fb ldr r3, [r7, #12] - 801298e: 681b ldr r3, [r3, #0] - 8012990: 330c adds r3, #12 - 8012992: 6aba ldr r2, [r7, #40] @ 0x28 - 8012994: 627a str r2, [r7, #36] @ 0x24 - 8012996: 623b str r3, [r7, #32] - */ -__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) -{ - uint32_t result; - - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012998: 6a39 ldr r1, [r7, #32] - 801299a: 6a7a ldr r2, [r7, #36] @ 0x24 - 801299c: e841 2300 strex r3, r2, [r1] - 80129a0: 61fb str r3, [r7, #28] - return(result); - 80129a2: 69fb ldr r3, [r7, #28] - 80129a4: 2b00 cmp r3, #0 - 80129a6: d1e5 bne.n 8012974 - 80129a8: e002 b.n 80129b0 - { - /* In case of errors already pending when reception is started, - Interrupts may have already been raised and lead to reception abortion. - (Overrun error for instance). - In such case Reception Type has been reset to HAL_UART_RECEPTION_STANDARD. */ - status = HAL_ERROR; - 80129aa: 2301 movs r3, #1 - 80129ac: f887 302f strb.w r3, [r7, #47] @ 0x2f - } - } - - return status; - 80129b0: f897 302f ldrb.w r3, [r7, #47] @ 0x2f - 80129b4: e000 b.n 80129b8 - } - else - { - return HAL_BUSY; - 80129b6: 2302 movs r3, #2 - } -} - 80129b8: 4618 mov r0, r3 - 80129ba: 3730 adds r7, #48 @ 0x30 - 80129bc: 46bd mov sp, r7 - 80129be: bd80 pop {r7, pc} - -080129c0 : - * @note This procedure is executed in Interrupt mode, meaning that abort procedure could be - * considered as completed only when user abort complete callback is executed (not when exiting function). - * @retval HAL status - */ -HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart) -{ - 80129c0: b580 push {r7, lr} - 80129c2: b0a2 sub sp, #136 @ 0x88 - 80129c4: af00 add r7, sp, #0 - 80129c6: 6078 str r0, [r7, #4] - uint32_t AbortCplt = 0x01U; - 80129c8: 2301 movs r3, #1 - 80129ca: f8c7 3084 str.w r3, [r7, #132] @ 0x84 - - /* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE | USART_CR1_TCIE)); - 80129ce: 687b ldr r3, [r7, #4] - 80129d0: 681b ldr r3, [r3, #0] - 80129d2: 330c adds r3, #12 - 80129d4: 663b str r3, [r7, #96] @ 0x60 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 80129d6: 6e3b ldr r3, [r7, #96] @ 0x60 - 80129d8: e853 3f00 ldrex r3, [r3] - 80129dc: 65fb str r3, [r7, #92] @ 0x5c - return(result); - 80129de: 6dfb ldr r3, [r7, #92] @ 0x5c - 80129e0: f423 73f0 bic.w r3, r3, #480 @ 0x1e0 - 80129e4: f8c7 3080 str.w r3, [r7, #128] @ 0x80 - 80129e8: 687b ldr r3, [r7, #4] - 80129ea: 681b ldr r3, [r3, #0] - 80129ec: 330c adds r3, #12 - 80129ee: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80 - 80129f2: 66fa str r2, [r7, #108] @ 0x6c - 80129f4: 66bb str r3, [r7, #104] @ 0x68 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 80129f6: 6eb9 ldr r1, [r7, #104] @ 0x68 - 80129f8: 6efa ldr r2, [r7, #108] @ 0x6c - 80129fa: e841 2300 strex r3, r2, [r1] - 80129fe: 667b str r3, [r7, #100] @ 0x64 - return(result); - 8012a00: 6e7b ldr r3, [r7, #100] @ 0x64 - 8012a02: 2b00 cmp r3, #0 - 8012a04: d1e3 bne.n 80129ce - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - 8012a06: 687b ldr r3, [r7, #4] - 8012a08: 681b ldr r3, [r3, #0] - 8012a0a: 3314 adds r3, #20 - 8012a0c: 64fb str r3, [r7, #76] @ 0x4c - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012a0e: 6cfb ldr r3, [r7, #76] @ 0x4c - 8012a10: e853 3f00 ldrex r3, [r3] - 8012a14: 64bb str r3, [r7, #72] @ 0x48 - return(result); - 8012a16: 6cbb ldr r3, [r7, #72] @ 0x48 - 8012a18: f023 0301 bic.w r3, r3, #1 - 8012a1c: 67fb str r3, [r7, #124] @ 0x7c - 8012a1e: 687b ldr r3, [r7, #4] - 8012a20: 681b ldr r3, [r3, #0] - 8012a22: 3314 adds r3, #20 - 8012a24: 6ffa ldr r2, [r7, #124] @ 0x7c - 8012a26: 65ba str r2, [r7, #88] @ 0x58 - 8012a28: 657b str r3, [r7, #84] @ 0x54 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012a2a: 6d79 ldr r1, [r7, #84] @ 0x54 - 8012a2c: 6dba ldr r2, [r7, #88] @ 0x58 - 8012a2e: e841 2300 strex r3, r2, [r1] - 8012a32: 653b str r3, [r7, #80] @ 0x50 - return(result); - 8012a34: 6d3b ldr r3, [r7, #80] @ 0x50 - 8012a36: 2b00 cmp r3, #0 - 8012a38: d1e5 bne.n 8012a06 - - /* If Reception till IDLE event was ongoing, disable IDLEIE interrupt */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - 8012a3a: 687b ldr r3, [r7, #4] - 8012a3c: 6b1b ldr r3, [r3, #48] @ 0x30 - 8012a3e: 2b01 cmp r3, #1 - 8012a40: d119 bne.n 8012a76 - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_IDLEIE)); - 8012a42: 687b ldr r3, [r7, #4] - 8012a44: 681b ldr r3, [r3, #0] - 8012a46: 330c adds r3, #12 - 8012a48: 63bb str r3, [r7, #56] @ 0x38 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012a4a: 6bbb ldr r3, [r7, #56] @ 0x38 - 8012a4c: e853 3f00 ldrex r3, [r3] - 8012a50: 637b str r3, [r7, #52] @ 0x34 - return(result); - 8012a52: 6b7b ldr r3, [r7, #52] @ 0x34 - 8012a54: f023 0310 bic.w r3, r3, #16 - 8012a58: 67bb str r3, [r7, #120] @ 0x78 - 8012a5a: 687b ldr r3, [r7, #4] - 8012a5c: 681b ldr r3, [r3, #0] - 8012a5e: 330c adds r3, #12 - 8012a60: 6fba ldr r2, [r7, #120] @ 0x78 - 8012a62: 647a str r2, [r7, #68] @ 0x44 - 8012a64: 643b str r3, [r7, #64] @ 0x40 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012a66: 6c39 ldr r1, [r7, #64] @ 0x40 - 8012a68: 6c7a ldr r2, [r7, #68] @ 0x44 - 8012a6a: e841 2300 strex r3, r2, [r1] - 8012a6e: 63fb str r3, [r7, #60] @ 0x3c - return(result); - 8012a70: 6bfb ldr r3, [r7, #60] @ 0x3c - 8012a72: 2b00 cmp r3, #0 - 8012a74: d1e5 bne.n 8012a42 - } - - /* If DMA Tx and/or DMA Rx Handles are associated to UART Handle, DMA Abort complete callbacks should be initialised - before any call to DMA Abort functions */ - /* DMA Tx Handle is valid */ - if (huart->hdmatx != NULL) - 8012a76: 687b ldr r3, [r7, #4] - 8012a78: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012a7a: 2b00 cmp r3, #0 - 8012a7c: d00f beq.n 8012a9e - { - /* Set DMA Abort Complete callback if UART DMA Tx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - 8012a7e: 687b ldr r3, [r7, #4] - 8012a80: 681b ldr r3, [r3, #0] - 8012a82: 695b ldr r3, [r3, #20] - 8012a84: f003 0380 and.w r3, r3, #128 @ 0x80 - 8012a88: 2b00 cmp r3, #0 - 8012a8a: d004 beq.n 8012a96 - { - huart->hdmatx->XferAbortCallback = UART_DMATxAbortCallback; - 8012a8c: 687b ldr r3, [r7, #4] - 8012a8e: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012a90: 4a53 ldr r2, [pc, #332] @ (8012be0 ) - 8012a92: 635a str r2, [r3, #52] @ 0x34 - 8012a94: e003 b.n 8012a9e - } - else - { - huart->hdmatx->XferAbortCallback = NULL; - 8012a96: 687b ldr r3, [r7, #4] - 8012a98: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012a9a: 2200 movs r2, #0 - 8012a9c: 635a str r2, [r3, #52] @ 0x34 - } - } - /* DMA Rx Handle is valid */ - if (huart->hdmarx != NULL) - 8012a9e: 687b ldr r3, [r7, #4] - 8012aa0: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012aa2: 2b00 cmp r3, #0 - 8012aa4: d00f beq.n 8012ac6 - { - /* Set DMA Abort Complete callback if UART DMA Rx request if enabled. - Otherwise, set it to NULL */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012aa6: 687b ldr r3, [r7, #4] - 8012aa8: 681b ldr r3, [r3, #0] - 8012aaa: 695b ldr r3, [r3, #20] - 8012aac: f003 0340 and.w r3, r3, #64 @ 0x40 - 8012ab0: 2b00 cmp r3, #0 - 8012ab2: d004 beq.n 8012abe - { - huart->hdmarx->XferAbortCallback = UART_DMARxAbortCallback; - 8012ab4: 687b ldr r3, [r7, #4] - 8012ab6: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012ab8: 4a4a ldr r2, [pc, #296] @ (8012be4 ) - 8012aba: 635a str r2, [r3, #52] @ 0x34 - 8012abc: e003 b.n 8012ac6 - } - else - { - huart->hdmarx->XferAbortCallback = NULL; - 8012abe: 687b ldr r3, [r7, #4] - 8012ac0: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012ac2: 2200 movs r2, #0 - 8012ac4: 635a str r2, [r3, #52] @ 0x34 - } - } - - /* Disable the UART DMA Tx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) - 8012ac6: 687b ldr r3, [r7, #4] - 8012ac8: 681b ldr r3, [r3, #0] - 8012aca: 695b ldr r3, [r3, #20] - 8012acc: f003 0380 and.w r3, r3, #128 @ 0x80 - 8012ad0: 2b00 cmp r3, #0 - 8012ad2: d02d beq.n 8012b30 - { - /* Disable DMA Tx at UART level */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAT); - 8012ad4: 687b ldr r3, [r7, #4] - 8012ad6: 681b ldr r3, [r3, #0] - 8012ad8: 3314 adds r3, #20 - 8012ada: 627b str r3, [r7, #36] @ 0x24 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012adc: 6a7b ldr r3, [r7, #36] @ 0x24 - 8012ade: e853 3f00 ldrex r3, [r3] - 8012ae2: 623b str r3, [r7, #32] - return(result); - 8012ae4: 6a3b ldr r3, [r7, #32] - 8012ae6: f023 0380 bic.w r3, r3, #128 @ 0x80 - 8012aea: 677b str r3, [r7, #116] @ 0x74 - 8012aec: 687b ldr r3, [r7, #4] - 8012aee: 681b ldr r3, [r3, #0] - 8012af0: 3314 adds r3, #20 - 8012af2: 6f7a ldr r2, [r7, #116] @ 0x74 - 8012af4: 633a str r2, [r7, #48] @ 0x30 - 8012af6: 62fb str r3, [r7, #44] @ 0x2c - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012af8: 6af9 ldr r1, [r7, #44] @ 0x2c - 8012afa: 6b3a ldr r2, [r7, #48] @ 0x30 - 8012afc: e841 2300 strex r3, r2, [r1] - 8012b00: 62bb str r3, [r7, #40] @ 0x28 - return(result); - 8012b02: 6abb ldr r3, [r7, #40] @ 0x28 - 8012b04: 2b00 cmp r3, #0 - 8012b06: d1e5 bne.n 8012ad4 - - /* Abort the UART DMA Tx channel : use non blocking DMA Abort API (callback) */ - if (huart->hdmatx != NULL) - 8012b08: 687b ldr r3, [r7, #4] - 8012b0a: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012b0c: 2b00 cmp r3, #0 - 8012b0e: d00f beq.n 8012b30 - { - /* UART Tx DMA Abort callback has already been initialised : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - - /* Abort DMA TX */ - if (HAL_DMA_Abort_IT(huart->hdmatx) != HAL_OK) - 8012b10: 687b ldr r3, [r7, #4] - 8012b12: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012b14: 4618 mov r0, r3 - 8012b16: f7fd fc45 bl 80103a4 - 8012b1a: 4603 mov r3, r0 - 8012b1c: 2b00 cmp r3, #0 - 8012b1e: d004 beq.n 8012b2a - { - huart->hdmatx->XferAbortCallback = NULL; - 8012b20: 687b ldr r3, [r7, #4] - 8012b22: 6b9b ldr r3, [r3, #56] @ 0x38 - 8012b24: 2200 movs r2, #0 - 8012b26: 635a str r2, [r3, #52] @ 0x34 - 8012b28: e002 b.n 8012b30 - } - else - { - AbortCplt = 0x00U; - 8012b2a: 2300 movs r3, #0 - 8012b2c: f8c7 3084 str.w r3, [r7, #132] @ 0x84 - } - } - } - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012b30: 687b ldr r3, [r7, #4] - 8012b32: 681b ldr r3, [r3, #0] - 8012b34: 695b ldr r3, [r3, #20] - 8012b36: f003 0340 and.w r3, r3, #64 @ 0x40 - 8012b3a: 2b00 cmp r3, #0 - 8012b3c: d030 beq.n 8012ba0 - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - 8012b3e: 687b ldr r3, [r7, #4] - 8012b40: 681b ldr r3, [r3, #0] - 8012b42: 3314 adds r3, #20 - 8012b44: 613b str r3, [r7, #16] - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012b46: 693b ldr r3, [r7, #16] - 8012b48: e853 3f00 ldrex r3, [r3] - 8012b4c: 60fb str r3, [r7, #12] - return(result); - 8012b4e: 68fb ldr r3, [r7, #12] - 8012b50: f023 0340 bic.w r3, r3, #64 @ 0x40 - 8012b54: 673b str r3, [r7, #112] @ 0x70 - 8012b56: 687b ldr r3, [r7, #4] - 8012b58: 681b ldr r3, [r3, #0] - 8012b5a: 3314 adds r3, #20 - 8012b5c: 6f3a ldr r2, [r7, #112] @ 0x70 - 8012b5e: 61fa str r2, [r7, #28] - 8012b60: 61bb str r3, [r7, #24] - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012b62: 69b9 ldr r1, [r7, #24] - 8012b64: 69fa ldr r2, [r7, #28] - 8012b66: e841 2300 strex r3, r2, [r1] - 8012b6a: 617b str r3, [r7, #20] - return(result); - 8012b6c: 697b ldr r3, [r7, #20] - 8012b6e: 2b00 cmp r3, #0 - 8012b70: d1e5 bne.n 8012b3e - - /* Abort the UART DMA Rx channel : use non blocking DMA Abort API (callback) */ - if (huart->hdmarx != NULL) - 8012b72: 687b ldr r3, [r7, #4] - 8012b74: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012b76: 2b00 cmp r3, #0 - 8012b78: d012 beq.n 8012ba0 - { - /* UART Rx DMA Abort callback has already been initialised : - will lead to call HAL_UART_AbortCpltCallback() at end of DMA abort procedure */ - - /* Abort DMA RX */ - if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) - 8012b7a: 687b ldr r3, [r7, #4] - 8012b7c: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012b7e: 4618 mov r0, r3 - 8012b80: f7fd fc10 bl 80103a4 - 8012b84: 4603 mov r3, r0 - 8012b86: 2b00 cmp r3, #0 - 8012b88: d007 beq.n 8012b9a - { - huart->hdmarx->XferAbortCallback = NULL; - 8012b8a: 687b ldr r3, [r7, #4] - 8012b8c: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012b8e: 2200 movs r2, #0 - 8012b90: 635a str r2, [r3, #52] @ 0x34 - AbortCplt = 0x01U; - 8012b92: 2301 movs r3, #1 - 8012b94: f8c7 3084 str.w r3, [r7, #132] @ 0x84 - 8012b98: e002 b.n 8012ba0 - } - else - { - AbortCplt = 0x00U; - 8012b9a: 2300 movs r3, #0 - 8012b9c: f8c7 3084 str.w r3, [r7, #132] @ 0x84 - } - } - } - - /* if no DMA abort complete callback execution is required => call user Abort Complete callback */ - if (AbortCplt == 0x01U) - 8012ba0: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84 - 8012ba4: 2b01 cmp r3, #1 - 8012ba6: d116 bne.n 8012bd6 - { - /* Reset Tx and Rx transfer counters */ - huart->TxXferCount = 0x00U; - 8012ba8: 687b ldr r3, [r7, #4] - 8012baa: 2200 movs r2, #0 - 8012bac: 84da strh r2, [r3, #38] @ 0x26 - huart->RxXferCount = 0x00U; - 8012bae: 687b ldr r3, [r7, #4] - 8012bb0: 2200 movs r2, #0 - 8012bb2: 85da strh r2, [r3, #46] @ 0x2e - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - 8012bb4: 687b ldr r3, [r7, #4] - 8012bb6: 2200 movs r2, #0 - 8012bb8: 645a str r2, [r3, #68] @ 0x44 - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - 8012bba: 687b ldr r3, [r7, #4] - 8012bbc: 2220 movs r2, #32 - 8012bbe: f883 2041 strb.w r2, [r3, #65] @ 0x41 - huart->RxState = HAL_UART_STATE_READY; - 8012bc2: 687b ldr r3, [r7, #4] - 8012bc4: 2220 movs r2, #32 - 8012bc6: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 8012bca: 687b ldr r3, [r7, #4] - 8012bcc: 2200 movs r2, #0 - 8012bce: 631a str r2, [r3, #48] @ 0x30 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); - 8012bd0: 6878 ldr r0, [r7, #4] - 8012bd2: f000 faad bl 8013130 -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; - 8012bd6: 2300 movs r3, #0 -} - 8012bd8: 4618 mov r0, r3 - 8012bda: 3788 adds r7, #136 @ 0x88 - 8012bdc: 46bd mov sp, r7 - 8012bde: bd80 pop {r7, pc} - 8012be0: 080132a1 .word 0x080132a1 - 8012be4: 08013301 .word 0x08013301 - -08012be8 : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -void HAL_UART_IRQHandler(UART_HandleTypeDef *huart) -{ - 8012be8: b580 push {r7, lr} - 8012bea: b0ba sub sp, #232 @ 0xe8 - 8012bec: af00 add r7, sp, #0 - 8012bee: 6078 str r0, [r7, #4] - uint32_t isrflags = READ_REG(huart->Instance->SR); - 8012bf0: 687b ldr r3, [r7, #4] - 8012bf2: 681b ldr r3, [r3, #0] - 8012bf4: 681b ldr r3, [r3, #0] - 8012bf6: f8c7 30e4 str.w r3, [r7, #228] @ 0xe4 - uint32_t cr1its = READ_REG(huart->Instance->CR1); - 8012bfa: 687b ldr r3, [r7, #4] - 8012bfc: 681b ldr r3, [r3, #0] - 8012bfe: 68db ldr r3, [r3, #12] - 8012c00: f8c7 30e0 str.w r3, [r7, #224] @ 0xe0 - uint32_t cr3its = READ_REG(huart->Instance->CR3); - 8012c04: 687b ldr r3, [r7, #4] - 8012c06: 681b ldr r3, [r3, #0] - 8012c08: 695b ldr r3, [r3, #20] - 8012c0a: f8c7 30dc str.w r3, [r7, #220] @ 0xdc - uint32_t errorflags = 0x00U; - 8012c0e: 2300 movs r3, #0 - 8012c10: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 - uint32_t dmarequest = 0x00U; - 8012c14: 2300 movs r3, #0 - 8012c16: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 - - /* If no error occurs */ - errorflags = (isrflags & (uint32_t)(USART_SR_PE | USART_SR_FE | USART_SR_ORE | USART_SR_NE)); - 8012c1a: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012c1e: f003 030f and.w r3, r3, #15 - 8012c22: f8c7 30d8 str.w r3, [r7, #216] @ 0xd8 - if (errorflags == RESET) - 8012c26: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 - 8012c2a: 2b00 cmp r3, #0 - 8012c2c: d10f bne.n 8012c4e - { - /* UART in mode Receiver -------------------------------------------------*/ - if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) - 8012c2e: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012c32: f003 0320 and.w r3, r3, #32 - 8012c36: 2b00 cmp r3, #0 - 8012c38: d009 beq.n 8012c4e - 8012c3a: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012c3e: f003 0320 and.w r3, r3, #32 - 8012c42: 2b00 cmp r3, #0 - 8012c44: d003 beq.n 8012c4e - { - UART_Receive_IT(huart); - 8012c46: 6878 ldr r0, [r7, #4] - 8012c48: f000 fbf1 bl 801342e - return; - 8012c4c: e25b b.n 8013106 - } - } - - /* If some errors occur */ - if ((errorflags != RESET) && (((cr3its & USART_CR3_EIE) != RESET) - 8012c4e: f8d7 30d8 ldr.w r3, [r7, #216] @ 0xd8 - 8012c52: 2b00 cmp r3, #0 - 8012c54: f000 80de beq.w 8012e14 - 8012c58: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc - 8012c5c: f003 0301 and.w r3, r3, #1 - 8012c60: 2b00 cmp r3, #0 - 8012c62: d106 bne.n 8012c72 - || ((cr1its & (USART_CR1_RXNEIE | USART_CR1_PEIE)) != RESET))) - 8012c64: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012c68: f403 7390 and.w r3, r3, #288 @ 0x120 - 8012c6c: 2b00 cmp r3, #0 - 8012c6e: f000 80d1 beq.w 8012e14 - { - /* UART parity error interrupt occurred ----------------------------------*/ - if (((isrflags & USART_SR_PE) != RESET) && ((cr1its & USART_CR1_PEIE) != RESET)) - 8012c72: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012c76: f003 0301 and.w r3, r3, #1 - 8012c7a: 2b00 cmp r3, #0 - 8012c7c: d00b beq.n 8012c96 - 8012c7e: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012c82: f403 7380 and.w r3, r3, #256 @ 0x100 - 8012c86: 2b00 cmp r3, #0 - 8012c88: d005 beq.n 8012c96 - { - huart->ErrorCode |= HAL_UART_ERROR_PE; - 8012c8a: 687b ldr r3, [r7, #4] - 8012c8c: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012c8e: f043 0201 orr.w r2, r3, #1 - 8012c92: 687b ldr r3, [r7, #4] - 8012c94: 645a str r2, [r3, #68] @ 0x44 - } - - /* UART noise error interrupt occurred -----------------------------------*/ - if (((isrflags & USART_SR_NE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) - 8012c96: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012c9a: f003 0304 and.w r3, r3, #4 - 8012c9e: 2b00 cmp r3, #0 - 8012ca0: d00b beq.n 8012cba - 8012ca2: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc - 8012ca6: f003 0301 and.w r3, r3, #1 - 8012caa: 2b00 cmp r3, #0 - 8012cac: d005 beq.n 8012cba - { - huart->ErrorCode |= HAL_UART_ERROR_NE; - 8012cae: 687b ldr r3, [r7, #4] - 8012cb0: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012cb2: f043 0202 orr.w r2, r3, #2 - 8012cb6: 687b ldr r3, [r7, #4] - 8012cb8: 645a str r2, [r3, #68] @ 0x44 - } - - /* UART frame error interrupt occurred -----------------------------------*/ - if (((isrflags & USART_SR_FE) != RESET) && ((cr3its & USART_CR3_EIE) != RESET)) - 8012cba: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012cbe: f003 0302 and.w r3, r3, #2 - 8012cc2: 2b00 cmp r3, #0 - 8012cc4: d00b beq.n 8012cde - 8012cc6: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc - 8012cca: f003 0301 and.w r3, r3, #1 - 8012cce: 2b00 cmp r3, #0 - 8012cd0: d005 beq.n 8012cde - { - huart->ErrorCode |= HAL_UART_ERROR_FE; - 8012cd2: 687b ldr r3, [r7, #4] - 8012cd4: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012cd6: f043 0204 orr.w r2, r3, #4 - 8012cda: 687b ldr r3, [r7, #4] - 8012cdc: 645a str r2, [r3, #68] @ 0x44 - } - - /* UART Over-Run interrupt occurred --------------------------------------*/ - if (((isrflags & USART_SR_ORE) != RESET) && (((cr1its & USART_CR1_RXNEIE) != RESET) - 8012cde: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012ce2: f003 0308 and.w r3, r3, #8 - 8012ce6: 2b00 cmp r3, #0 - 8012ce8: d011 beq.n 8012d0e - 8012cea: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012cee: f003 0320 and.w r3, r3, #32 - 8012cf2: 2b00 cmp r3, #0 - 8012cf4: d105 bne.n 8012d02 - || ((cr3its & USART_CR3_EIE) != RESET))) - 8012cf6: f8d7 30dc ldr.w r3, [r7, #220] @ 0xdc - 8012cfa: f003 0301 and.w r3, r3, #1 - 8012cfe: 2b00 cmp r3, #0 - 8012d00: d005 beq.n 8012d0e - { - huart->ErrorCode |= HAL_UART_ERROR_ORE; - 8012d02: 687b ldr r3, [r7, #4] - 8012d04: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012d06: f043 0208 orr.w r2, r3, #8 - 8012d0a: 687b ldr r3, [r7, #4] - 8012d0c: 645a str r2, [r3, #68] @ 0x44 - } - - /* Call UART Error Call back function if need be --------------------------*/ - if (huart->ErrorCode != HAL_UART_ERROR_NONE) - 8012d0e: 687b ldr r3, [r7, #4] - 8012d10: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012d12: 2b00 cmp r3, #0 - 8012d14: f000 81f2 beq.w 80130fc - { - /* UART in mode Receiver -----------------------------------------------*/ - if (((isrflags & USART_SR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET)) - 8012d18: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012d1c: f003 0320 and.w r3, r3, #32 - 8012d20: 2b00 cmp r3, #0 - 8012d22: d008 beq.n 8012d36 - 8012d24: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012d28: f003 0320 and.w r3, r3, #32 - 8012d2c: 2b00 cmp r3, #0 - 8012d2e: d002 beq.n 8012d36 - { - UART_Receive_IT(huart); - 8012d30: 6878 ldr r0, [r7, #4] - 8012d32: f000 fb7c bl 801342e - } - - /* If Overrun error occurs, or if any error occurs in DMA mode reception, - consider error as blocking */ - dmarequest = HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR); - 8012d36: 687b ldr r3, [r7, #4] - 8012d38: 681b ldr r3, [r3, #0] - 8012d3a: 695b ldr r3, [r3, #20] - 8012d3c: f003 0340 and.w r3, r3, #64 @ 0x40 - 8012d40: 2b00 cmp r3, #0 - 8012d42: bf14 ite ne - 8012d44: 2301 movne r3, #1 - 8012d46: 2300 moveq r3, #0 - 8012d48: b2db uxtb r3, r3 - 8012d4a: f8c7 30d4 str.w r3, [r7, #212] @ 0xd4 - if (((huart->ErrorCode & HAL_UART_ERROR_ORE) != RESET) || dmarequest) - 8012d4e: 687b ldr r3, [r7, #4] - 8012d50: 6c5b ldr r3, [r3, #68] @ 0x44 - 8012d52: f003 0308 and.w r3, r3, #8 - 8012d56: 2b00 cmp r3, #0 - 8012d58: d103 bne.n 8012d62 - 8012d5a: f8d7 30d4 ldr.w r3, [r7, #212] @ 0xd4 - 8012d5e: 2b00 cmp r3, #0 - 8012d60: d04f beq.n 8012e02 - { - /* Blocking error : transfer is aborted - Set the UART state ready to be able to start again the process, - Disable Rx Interrupts, and disable Rx DMA request, if ongoing */ - UART_EndRxTransfer(huart); - 8012d62: 6878 ldr r0, [r7, #4] - 8012d64: f000 fa26 bl 80131b4 - - /* Disable the UART DMA Rx request if enabled */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012d68: 687b ldr r3, [r7, #4] - 8012d6a: 681b ldr r3, [r3, #0] - 8012d6c: 695b ldr r3, [r3, #20] - 8012d6e: f003 0340 and.w r3, r3, #64 @ 0x40 - 8012d72: 2b00 cmp r3, #0 - 8012d74: d041 beq.n 8012dfa - { - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - 8012d76: 687b ldr r3, [r7, #4] - 8012d78: 681b ldr r3, [r3, #0] - 8012d7a: 3314 adds r3, #20 - 8012d7c: f8c7 309c str.w r3, [r7, #156] @ 0x9c - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012d80: f8d7 309c ldr.w r3, [r7, #156] @ 0x9c - 8012d84: e853 3f00 ldrex r3, [r3] - 8012d88: f8c7 3098 str.w r3, [r7, #152] @ 0x98 - return(result); - 8012d8c: f8d7 3098 ldr.w r3, [r7, #152] @ 0x98 - 8012d90: f023 0340 bic.w r3, r3, #64 @ 0x40 - 8012d94: f8c7 30d0 str.w r3, [r7, #208] @ 0xd0 - 8012d98: 687b ldr r3, [r7, #4] - 8012d9a: 681b ldr r3, [r3, #0] - 8012d9c: 3314 adds r3, #20 - 8012d9e: f8d7 20d0 ldr.w r2, [r7, #208] @ 0xd0 - 8012da2: f8c7 20a8 str.w r2, [r7, #168] @ 0xa8 - 8012da6: f8c7 30a4 str.w r3, [r7, #164] @ 0xa4 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012daa: f8d7 10a4 ldr.w r1, [r7, #164] @ 0xa4 - 8012dae: f8d7 20a8 ldr.w r2, [r7, #168] @ 0xa8 - 8012db2: e841 2300 strex r3, r2, [r1] - 8012db6: f8c7 30a0 str.w r3, [r7, #160] @ 0xa0 - return(result); - 8012dba: f8d7 30a0 ldr.w r3, [r7, #160] @ 0xa0 - 8012dbe: 2b00 cmp r3, #0 - 8012dc0: d1d9 bne.n 8012d76 - - /* Abort the UART DMA Rx channel */ - if (huart->hdmarx != NULL) - 8012dc2: 687b ldr r3, [r7, #4] - 8012dc4: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012dc6: 2b00 cmp r3, #0 - 8012dc8: d013 beq.n 8012df2 - { - /* Set the UART DMA Abort callback : - will lead to call HAL_UART_ErrorCallback() at end of DMA abort procedure */ - huart->hdmarx->XferAbortCallback = UART_DMAAbortOnError; - 8012dca: 687b ldr r3, [r7, #4] - 8012dcc: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012dce: 4a7e ldr r2, [pc, #504] @ (8012fc8 ) - 8012dd0: 635a str r2, [r3, #52] @ 0x34 - if (HAL_DMA_Abort_IT(huart->hdmarx) != HAL_OK) - 8012dd2: 687b ldr r3, [r7, #4] - 8012dd4: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012dd6: 4618 mov r0, r3 - 8012dd8: f7fd fae4 bl 80103a4 - 8012ddc: 4603 mov r3, r0 - 8012dde: 2b00 cmp r3, #0 - 8012de0: d016 beq.n 8012e10 - { - /* Call Directly XferAbortCallback function in case of error */ - huart->hdmarx->XferAbortCallback(huart->hdmarx); - 8012de2: 687b ldr r3, [r7, #4] - 8012de4: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012de6: 6b5b ldr r3, [r3, #52] @ 0x34 - 8012de8: 687a ldr r2, [r7, #4] - 8012dea: 6bd2 ldr r2, [r2, #60] @ 0x3c - 8012dec: 4610 mov r0, r2 - 8012dee: 4798 blx r3 - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012df0: e00e b.n 8012e10 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); - 8012df2: 6878 ldr r0, [r7, #4] - 8012df4: f000 f993 bl 801311e - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012df8: e00a b.n 8012e10 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); - 8012dfa: 6878 ldr r0, [r7, #4] - 8012dfc: f000 f98f bl 801311e - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012e00: e006 b.n 8012e10 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); - 8012e02: 6878 ldr r0, [r7, #4] - 8012e04: f000 f98b bl 801311e -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - - huart->ErrorCode = HAL_UART_ERROR_NONE; - 8012e08: 687b ldr r3, [r7, #4] - 8012e0a: 2200 movs r2, #0 - 8012e0c: 645a str r2, [r3, #68] @ 0x44 - } - } - return; - 8012e0e: e175 b.n 80130fc - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012e10: bf00 nop - return; - 8012e12: e173 b.n 80130fc - } /* End if some error occurs */ - - /* Check current reception Mode : - If Reception till IDLE event has been selected : */ - if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - 8012e14: 687b ldr r3, [r7, #4] - 8012e16: 6b1b ldr r3, [r3, #48] @ 0x30 - 8012e18: 2b01 cmp r3, #1 - 8012e1a: f040 814f bne.w 80130bc - && ((isrflags & USART_SR_IDLE) != 0U) - 8012e1e: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 8012e22: f003 0310 and.w r3, r3, #16 - 8012e26: 2b00 cmp r3, #0 - 8012e28: f000 8148 beq.w 80130bc - && ((cr1its & USART_SR_IDLE) != 0U)) - 8012e2c: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 8012e30: f003 0310 and.w r3, r3, #16 - 8012e34: 2b00 cmp r3, #0 - 8012e36: f000 8141 beq.w 80130bc - { - __HAL_UART_CLEAR_IDLEFLAG(huart); - 8012e3a: 2300 movs r3, #0 - 8012e3c: 60bb str r3, [r7, #8] - 8012e3e: 687b ldr r3, [r7, #4] - 8012e40: 681b ldr r3, [r3, #0] - 8012e42: 681b ldr r3, [r3, #0] - 8012e44: 60bb str r3, [r7, #8] - 8012e46: 687b ldr r3, [r7, #4] - 8012e48: 681b ldr r3, [r3, #0] - 8012e4a: 685b ldr r3, [r3, #4] - 8012e4c: 60bb str r3, [r7, #8] - 8012e4e: 68bb ldr r3, [r7, #8] - - /* Check if DMA mode is enabled in UART */ - if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) - 8012e50: 687b ldr r3, [r7, #4] - 8012e52: 681b ldr r3, [r3, #0] - 8012e54: 695b ldr r3, [r3, #20] - 8012e56: f003 0340 and.w r3, r3, #64 @ 0x40 - 8012e5a: 2b00 cmp r3, #0 - 8012e5c: f000 80b6 beq.w 8012fcc - { - /* DMA mode enabled */ - /* Check received length : If all expected data are received, do nothing, - (DMA cplt callback will be called). - Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ - uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); - 8012e60: 687b ldr r3, [r7, #4] - 8012e62: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012e64: 681b ldr r3, [r3, #0] - 8012e66: 685b ldr r3, [r3, #4] - 8012e68: f8a7 30be strh.w r3, [r7, #190] @ 0xbe - if ((nb_remaining_rx_data > 0U) - 8012e6c: f8b7 30be ldrh.w r3, [r7, #190] @ 0xbe - 8012e70: 2b00 cmp r3, #0 - 8012e72: f000 8145 beq.w 8013100 - && (nb_remaining_rx_data < huart->RxXferSize)) - 8012e76: 687b ldr r3, [r7, #4] - 8012e78: 8d9b ldrh r3, [r3, #44] @ 0x2c - 8012e7a: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe - 8012e7e: 429a cmp r2, r3 - 8012e80: f080 813e bcs.w 8013100 - { - /* Reception is not complete */ - huart->RxXferCount = nb_remaining_rx_data; - 8012e84: 687b ldr r3, [r7, #4] - 8012e86: f8b7 20be ldrh.w r2, [r7, #190] @ 0xbe - 8012e8a: 85da strh r2, [r3, #46] @ 0x2e - - /* In Normal mode, end DMA xfer and HAL UART Rx process*/ - if (huart->hdmarx->Init.Mode != DMA_CIRCULAR) - 8012e8c: 687b ldr r3, [r7, #4] - 8012e8e: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012e90: 699b ldr r3, [r3, #24] - 8012e92: 2b20 cmp r3, #32 - 8012e94: f000 8088 beq.w 8012fa8 - { - /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE); - 8012e98: 687b ldr r3, [r7, #4] - 8012e9a: 681b ldr r3, [r3, #0] - 8012e9c: 330c adds r3, #12 - 8012e9e: f8c7 3088 str.w r3, [r7, #136] @ 0x88 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012ea2: f8d7 3088 ldr.w r3, [r7, #136] @ 0x88 - 8012ea6: e853 3f00 ldrex r3, [r3] - 8012eaa: f8c7 3084 str.w r3, [r7, #132] @ 0x84 - return(result); - 8012eae: f8d7 3084 ldr.w r3, [r7, #132] @ 0x84 - 8012eb2: f423 7380 bic.w r3, r3, #256 @ 0x100 - 8012eb6: f8c7 30b8 str.w r3, [r7, #184] @ 0xb8 - 8012eba: 687b ldr r3, [r7, #4] - 8012ebc: 681b ldr r3, [r3, #0] - 8012ebe: 330c adds r3, #12 - 8012ec0: f8d7 20b8 ldr.w r2, [r7, #184] @ 0xb8 - 8012ec4: f8c7 2094 str.w r2, [r7, #148] @ 0x94 - 8012ec8: f8c7 3090 str.w r3, [r7, #144] @ 0x90 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012ecc: f8d7 1090 ldr.w r1, [r7, #144] @ 0x90 - 8012ed0: f8d7 2094 ldr.w r2, [r7, #148] @ 0x94 - 8012ed4: e841 2300 strex r3, r2, [r1] - 8012ed8: f8c7 308c str.w r3, [r7, #140] @ 0x8c - return(result); - 8012edc: f8d7 308c ldr.w r3, [r7, #140] @ 0x8c - 8012ee0: 2b00 cmp r3, #0 - 8012ee2: d1d9 bne.n 8012e98 - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - 8012ee4: 687b ldr r3, [r7, #4] - 8012ee6: 681b ldr r3, [r3, #0] - 8012ee8: 3314 adds r3, #20 - 8012eea: 677b str r3, [r7, #116] @ 0x74 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012eec: 6f7b ldr r3, [r7, #116] @ 0x74 - 8012eee: e853 3f00 ldrex r3, [r3] - 8012ef2: 673b str r3, [r7, #112] @ 0x70 - return(result); - 8012ef4: 6f3b ldr r3, [r7, #112] @ 0x70 - 8012ef6: f023 0301 bic.w r3, r3, #1 - 8012efa: f8c7 30b4 str.w r3, [r7, #180] @ 0xb4 - 8012efe: 687b ldr r3, [r7, #4] - 8012f00: 681b ldr r3, [r3, #0] - 8012f02: 3314 adds r3, #20 - 8012f04: f8d7 20b4 ldr.w r2, [r7, #180] @ 0xb4 - 8012f08: f8c7 2080 str.w r2, [r7, #128] @ 0x80 - 8012f0c: 67fb str r3, [r7, #124] @ 0x7c - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012f0e: 6ff9 ldr r1, [r7, #124] @ 0x7c - 8012f10: f8d7 2080 ldr.w r2, [r7, #128] @ 0x80 - 8012f14: e841 2300 strex r3, r2, [r1] - 8012f18: 67bb str r3, [r7, #120] @ 0x78 - return(result); - 8012f1a: 6fbb ldr r3, [r7, #120] @ 0x78 - 8012f1c: 2b00 cmp r3, #0 - 8012f1e: d1e1 bne.n 8012ee4 - - /* Disable the DMA transfer for the receiver request by resetting the DMAR bit - in the UART CR3 register */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR); - 8012f20: 687b ldr r3, [r7, #4] - 8012f22: 681b ldr r3, [r3, #0] - 8012f24: 3314 adds r3, #20 - 8012f26: 663b str r3, [r7, #96] @ 0x60 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012f28: 6e3b ldr r3, [r7, #96] @ 0x60 - 8012f2a: e853 3f00 ldrex r3, [r3] - 8012f2e: 65fb str r3, [r7, #92] @ 0x5c - return(result); - 8012f30: 6dfb ldr r3, [r7, #92] @ 0x5c - 8012f32: f023 0340 bic.w r3, r3, #64 @ 0x40 - 8012f36: f8c7 30b0 str.w r3, [r7, #176] @ 0xb0 - 8012f3a: 687b ldr r3, [r7, #4] - 8012f3c: 681b ldr r3, [r3, #0] - 8012f3e: 3314 adds r3, #20 - 8012f40: f8d7 20b0 ldr.w r2, [r7, #176] @ 0xb0 - 8012f44: 66fa str r2, [r7, #108] @ 0x6c - 8012f46: 66bb str r3, [r7, #104] @ 0x68 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012f48: 6eb9 ldr r1, [r7, #104] @ 0x68 - 8012f4a: 6efa ldr r2, [r7, #108] @ 0x6c - 8012f4c: e841 2300 strex r3, r2, [r1] - 8012f50: 667b str r3, [r7, #100] @ 0x64 - return(result); - 8012f52: 6e7b ldr r3, [r7, #100] @ 0x64 - 8012f54: 2b00 cmp r3, #0 - 8012f56: d1e3 bne.n 8012f20 - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - 8012f58: 687b ldr r3, [r7, #4] - 8012f5a: 2220 movs r2, #32 - 8012f5c: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 8012f60: 687b ldr r3, [r7, #4] - 8012f62: 2200 movs r2, #0 - 8012f64: 631a str r2, [r3, #48] @ 0x30 - - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - 8012f66: 687b ldr r3, [r7, #4] - 8012f68: 681b ldr r3, [r3, #0] - 8012f6a: 330c adds r3, #12 - 8012f6c: 64fb str r3, [r7, #76] @ 0x4c - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012f6e: 6cfb ldr r3, [r7, #76] @ 0x4c - 8012f70: e853 3f00 ldrex r3, [r3] - 8012f74: 64bb str r3, [r7, #72] @ 0x48 - return(result); - 8012f76: 6cbb ldr r3, [r7, #72] @ 0x48 - 8012f78: f023 0310 bic.w r3, r3, #16 - 8012f7c: f8c7 30ac str.w r3, [r7, #172] @ 0xac - 8012f80: 687b ldr r3, [r7, #4] - 8012f82: 681b ldr r3, [r3, #0] - 8012f84: 330c adds r3, #12 - 8012f86: f8d7 20ac ldr.w r2, [r7, #172] @ 0xac - 8012f8a: 65ba str r2, [r7, #88] @ 0x58 - 8012f8c: 657b str r3, [r7, #84] @ 0x54 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8012f8e: 6d79 ldr r1, [r7, #84] @ 0x54 - 8012f90: 6dba ldr r2, [r7, #88] @ 0x58 - 8012f92: e841 2300 strex r3, r2, [r1] - 8012f96: 653b str r3, [r7, #80] @ 0x50 - return(result); - 8012f98: 6d3b ldr r3, [r7, #80] @ 0x50 - 8012f9a: 2b00 cmp r3, #0 - 8012f9c: d1e3 bne.n 8012f66 - - /* Last bytes received, so no need as the abort is immediate */ - (void)HAL_DMA_Abort(huart->hdmarx); - 8012f9e: 687b ldr r3, [r7, #4] - 8012fa0: 6bdb ldr r3, [r3, #60] @ 0x3c - 8012fa2: 4618 mov r0, r3 - 8012fa4: f7fd f9c3 bl 801032e - } - - /* Initialize type of RxEvent that correspond to RxEvent callback execution; - In this case, Rx Event type is Idle Event */ - huart->RxEventType = HAL_UART_RXEVENT_IDLE; - 8012fa8: 687b ldr r3, [r7, #4] - 8012faa: 2202 movs r2, #2 - 8012fac: 635a str r2, [r3, #52] @ 0x34 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount)); - 8012fae: 687b ldr r3, [r7, #4] - 8012fb0: 8d9a ldrh r2, [r3, #44] @ 0x2c - 8012fb2: 687b ldr r3, [r7, #4] - 8012fb4: 8ddb ldrh r3, [r3, #46] @ 0x2e - 8012fb6: b29b uxth r3, r3 - 8012fb8: 1ad3 subs r3, r2, r3 - 8012fba: b29b uxth r3, r3 - 8012fbc: 4619 mov r1, r3 - 8012fbe: 6878 ldr r0, [r7, #4] - 8012fc0: f7fa fa72 bl 800d4a8 -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - return; - 8012fc4: e09c b.n 8013100 - 8012fc6: bf00 nop - 8012fc8: 08013279 .word 0x08013279 - else - { - /* DMA mode not enabled */ - /* Check received length : If all expected data are received, do nothing. - Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ - uint16_t nb_rx_data = huart->RxXferSize - huart->RxXferCount; - 8012fcc: 687b ldr r3, [r7, #4] - 8012fce: 8d9a ldrh r2, [r3, #44] @ 0x2c - 8012fd0: 687b ldr r3, [r7, #4] - 8012fd2: 8ddb ldrh r3, [r3, #46] @ 0x2e - 8012fd4: b29b uxth r3, r3 - 8012fd6: 1ad3 subs r3, r2, r3 - 8012fd8: f8a7 30ce strh.w r3, [r7, #206] @ 0xce - if ((huart->RxXferCount > 0U) - 8012fdc: 687b ldr r3, [r7, #4] - 8012fde: 8ddb ldrh r3, [r3, #46] @ 0x2e - 8012fe0: b29b uxth r3, r3 - 8012fe2: 2b00 cmp r3, #0 - 8012fe4: f000 808e beq.w 8013104 - && (nb_rx_data > 0U)) - 8012fe8: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce - 8012fec: 2b00 cmp r3, #0 - 8012fee: f000 8089 beq.w 8013104 - { - /* Disable the UART Parity Error Interrupt and RXNE interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - 8012ff2: 687b ldr r3, [r7, #4] - 8012ff4: 681b ldr r3, [r3, #0] - 8012ff6: 330c adds r3, #12 - 8012ff8: 63bb str r3, [r7, #56] @ 0x38 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8012ffa: 6bbb ldr r3, [r7, #56] @ 0x38 - 8012ffc: e853 3f00 ldrex r3, [r3] - 8013000: 637b str r3, [r7, #52] @ 0x34 - return(result); - 8013002: 6b7b ldr r3, [r7, #52] @ 0x34 - 8013004: f423 7390 bic.w r3, r3, #288 @ 0x120 - 8013008: f8c7 30c8 str.w r3, [r7, #200] @ 0xc8 - 801300c: 687b ldr r3, [r7, #4] - 801300e: 681b ldr r3, [r3, #0] - 8013010: 330c adds r3, #12 - 8013012: f8d7 20c8 ldr.w r2, [r7, #200] @ 0xc8 - 8013016: 647a str r2, [r7, #68] @ 0x44 - 8013018: 643b str r3, [r7, #64] @ 0x40 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 801301a: 6c39 ldr r1, [r7, #64] @ 0x40 - 801301c: 6c7a ldr r2, [r7, #68] @ 0x44 - 801301e: e841 2300 strex r3, r2, [r1] - 8013022: 63fb str r3, [r7, #60] @ 0x3c - return(result); - 8013024: 6bfb ldr r3, [r7, #60] @ 0x3c - 8013026: 2b00 cmp r3, #0 - 8013028: d1e3 bne.n 8012ff2 - - /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - 801302a: 687b ldr r3, [r7, #4] - 801302c: 681b ldr r3, [r3, #0] - 801302e: 3314 adds r3, #20 - 8013030: 627b str r3, [r7, #36] @ 0x24 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8013032: 6a7b ldr r3, [r7, #36] @ 0x24 - 8013034: e853 3f00 ldrex r3, [r3] - 8013038: 623b str r3, [r7, #32] - return(result); - 801303a: 6a3b ldr r3, [r7, #32] - 801303c: f023 0301 bic.w r3, r3, #1 - 8013040: f8c7 30c4 str.w r3, [r7, #196] @ 0xc4 - 8013044: 687b ldr r3, [r7, #4] - 8013046: 681b ldr r3, [r3, #0] - 8013048: 3314 adds r3, #20 - 801304a: f8d7 20c4 ldr.w r2, [r7, #196] @ 0xc4 - 801304e: 633a str r2, [r7, #48] @ 0x30 - 8013050: 62fb str r3, [r7, #44] @ 0x2c - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8013052: 6af9 ldr r1, [r7, #44] @ 0x2c - 8013054: 6b3a ldr r2, [r7, #48] @ 0x30 - 8013056: e841 2300 strex r3, r2, [r1] - 801305a: 62bb str r3, [r7, #40] @ 0x28 - return(result); - 801305c: 6abb ldr r3, [r7, #40] @ 0x28 - 801305e: 2b00 cmp r3, #0 - 8013060: d1e3 bne.n 801302a - - /* Rx process is completed, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - 8013062: 687b ldr r3, [r7, #4] - 8013064: 2220 movs r2, #32 - 8013066: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 801306a: 687b ldr r3, [r7, #4] - 801306c: 2200 movs r2, #0 - 801306e: 631a str r2, [r3, #48] @ 0x30 - - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - 8013070: 687b ldr r3, [r7, #4] - 8013072: 681b ldr r3, [r3, #0] - 8013074: 330c adds r3, #12 - 8013076: 613b str r3, [r7, #16] - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8013078: 693b ldr r3, [r7, #16] - 801307a: e853 3f00 ldrex r3, [r3] - 801307e: 60fb str r3, [r7, #12] - return(result); - 8013080: 68fb ldr r3, [r7, #12] - 8013082: f023 0310 bic.w r3, r3, #16 - 8013086: f8c7 30c0 str.w r3, [r7, #192] @ 0xc0 - 801308a: 687b ldr r3, [r7, #4] - 801308c: 681b ldr r3, [r3, #0] - 801308e: 330c adds r3, #12 - 8013090: f8d7 20c0 ldr.w r2, [r7, #192] @ 0xc0 - 8013094: 61fa str r2, [r7, #28] - 8013096: 61bb str r3, [r7, #24] - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8013098: 69b9 ldr r1, [r7, #24] - 801309a: 69fa ldr r2, [r7, #28] - 801309c: e841 2300 strex r3, r2, [r1] - 80130a0: 617b str r3, [r7, #20] - return(result); - 80130a2: 697b ldr r3, [r7, #20] - 80130a4: 2b00 cmp r3, #0 - 80130a6: d1e3 bne.n 8013070 - - /* Initialize type of RxEvent that correspond to RxEvent callback execution; - In this case, Rx Event type is Idle Event */ - huart->RxEventType = HAL_UART_RXEVENT_IDLE; - 80130a8: 687b ldr r3, [r7, #4] - 80130aa: 2202 movs r2, #2 - 80130ac: 635a str r2, [r3, #52] @ 0x34 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx complete callback*/ - huart->RxEventCallback(huart, nb_rx_data); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, nb_rx_data); - 80130ae: f8b7 30ce ldrh.w r3, [r7, #206] @ 0xce - 80130b2: 4619 mov r1, r3 - 80130b4: 6878 ldr r0, [r7, #4] - 80130b6: f7fa f9f7 bl 800d4a8 -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - return; - 80130ba: e023 b.n 8013104 - } - } - - /* UART in mode Transmitter ------------------------------------------------*/ - if (((isrflags & USART_SR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET)) - 80130bc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 80130c0: f003 0380 and.w r3, r3, #128 @ 0x80 - 80130c4: 2b00 cmp r3, #0 - 80130c6: d009 beq.n 80130dc - 80130c8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 80130cc: f003 0380 and.w r3, r3, #128 @ 0x80 - 80130d0: 2b00 cmp r3, #0 - 80130d2: d003 beq.n 80130dc - { - UART_Transmit_IT(huart); - 80130d4: 6878 ldr r0, [r7, #4] - 80130d6: f000 f943 bl 8013360 - return; - 80130da: e014 b.n 8013106 - } - - /* UART in mode Transmitter end --------------------------------------------*/ - if (((isrflags & USART_SR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET)) - 80130dc: f8d7 30e4 ldr.w r3, [r7, #228] @ 0xe4 - 80130e0: f003 0340 and.w r3, r3, #64 @ 0x40 - 80130e4: 2b00 cmp r3, #0 - 80130e6: d00e beq.n 8013106 - 80130e8: f8d7 30e0 ldr.w r3, [r7, #224] @ 0xe0 - 80130ec: f003 0340 and.w r3, r3, #64 @ 0x40 - 80130f0: 2b00 cmp r3, #0 - 80130f2: d008 beq.n 8013106 - { - UART_EndTransmit_IT(huart); - 80130f4: 6878 ldr r0, [r7, #4] - 80130f6: f000 f982 bl 80133fe - return; - 80130fa: e004 b.n 8013106 - return; - 80130fc: bf00 nop - 80130fe: e002 b.n 8013106 - return; - 8013100: bf00 nop - 8013102: e000 b.n 8013106 - return; - 8013104: bf00 nop - } -} - 8013106: 37e8 adds r7, #232 @ 0xe8 - 8013108: 46bd mov sp, r7 - 801310a: bd80 pop {r7, pc} - -0801310c : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) -{ - 801310c: b480 push {r7} - 801310e: b083 sub sp, #12 - 8013110: af00 add r7, sp, #0 - 8013112: 6078 str r0, [r7, #4] - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_RxCpltCallback could be implemented in the user file - */ -} - 8013114: bf00 nop - 8013116: 370c adds r7, #12 - 8013118: 46bd mov sp, r7 - 801311a: bc80 pop {r7} - 801311c: 4770 bx lr - -0801311e : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -__weak void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) -{ - 801311e: b480 push {r7} - 8013120: b083 sub sp, #12 - 8013122: af00 add r7, sp, #0 - 8013124: 6078 str r0, [r7, #4] - /* Prevent unused argument(s) compilation warning */ - UNUSED(huart); - /* NOTE: This function should not be modified, when the callback is needed, - the HAL_UART_ErrorCallback could be implemented in the user file - */ -} - 8013126: bf00 nop - 8013128: 370c adds r7, #12 - 801312a: 46bd mov sp, r7 - 801312c: bc80 pop {r7} - 801312e: 4770 bx lr - -08013130 : - * @brief UART Abort Complete callback. - * @param huart UART handle. - * @retval None - */ -__weak void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) -{ - 8013130: b480 push {r7} - 8013132: b083 sub sp, #12 - 8013134: af00 add r7, sp, #0 - 8013136: 6078 str r0, [r7, #4] - UNUSED(huart); - - /* NOTE : This function should not be modified, when the callback is needed, - the HAL_UART_AbortCpltCallback can be implemented in the user file. - */ -} - 8013138: bf00 nop - 801313a: 370c adds r7, #12 - 801313c: 46bd mov sp, r7 - 801313e: bc80 pop {r7} - 8013140: 4770 bx lr - -08013142 : - * @param pData Pointer to data buffer (u8 or u16 data elements). - * @param Size Amount of data elements (u8 or u16) to be received. - * @retval HAL status - */ -HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) -{ - 8013142: b480 push {r7} - 8013144: b085 sub sp, #20 - 8013146: af00 add r7, sp, #0 - 8013148: 60f8 str r0, [r7, #12] - 801314a: 60b9 str r1, [r7, #8] - 801314c: 4613 mov r3, r2 - 801314e: 80fb strh r3, [r7, #6] - huart->pRxBuffPtr = pData; - 8013150: 68fb ldr r3, [r7, #12] - 8013152: 68ba ldr r2, [r7, #8] - 8013154: 629a str r2, [r3, #40] @ 0x28 - huart->RxXferSize = Size; - 8013156: 68fb ldr r3, [r7, #12] - 8013158: 88fa ldrh r2, [r7, #6] - 801315a: 859a strh r2, [r3, #44] @ 0x2c - huart->RxXferCount = Size; - 801315c: 68fb ldr r3, [r7, #12] - 801315e: 88fa ldrh r2, [r7, #6] - 8013160: 85da strh r2, [r3, #46] @ 0x2e - - huart->ErrorCode = HAL_UART_ERROR_NONE; - 8013162: 68fb ldr r3, [r7, #12] - 8013164: 2200 movs r2, #0 - 8013166: 645a str r2, [r3, #68] @ 0x44 - huart->RxState = HAL_UART_STATE_BUSY_RX; - 8013168: 68fb ldr r3, [r7, #12] - 801316a: 2222 movs r2, #34 @ 0x22 - 801316c: f883 2042 strb.w r2, [r3, #66] @ 0x42 - - if (huart->Init.Parity != UART_PARITY_NONE) - 8013170: 68fb ldr r3, [r7, #12] - 8013172: 691b ldr r3, [r3, #16] - 8013174: 2b00 cmp r3, #0 - 8013176: d007 beq.n 8013188 - { - /* Enable the UART Parity Error Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_PE); - 8013178: 68fb ldr r3, [r7, #12] - 801317a: 681b ldr r3, [r3, #0] - 801317c: 68da ldr r2, [r3, #12] - 801317e: 68fb ldr r3, [r7, #12] - 8013180: 681b ldr r3, [r3, #0] - 8013182: f442 7280 orr.w r2, r2, #256 @ 0x100 - 8013186: 60da str r2, [r3, #12] - } - - /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - __HAL_UART_ENABLE_IT(huart, UART_IT_ERR); - 8013188: 68fb ldr r3, [r7, #12] - 801318a: 681b ldr r3, [r3, #0] - 801318c: 695a ldr r2, [r3, #20] - 801318e: 68fb ldr r3, [r7, #12] - 8013190: 681b ldr r3, [r3, #0] - 8013192: f042 0201 orr.w r2, r2, #1 - 8013196: 615a str r2, [r3, #20] - - /* Enable the UART Data Register not empty Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE); - 8013198: 68fb ldr r3, [r7, #12] - 801319a: 681b ldr r3, [r3, #0] - 801319c: 68da ldr r2, [r3, #12] - 801319e: 68fb ldr r3, [r7, #12] - 80131a0: 681b ldr r3, [r3, #0] - 80131a2: f042 0220 orr.w r2, r2, #32 - 80131a6: 60da str r2, [r3, #12] - - return HAL_OK; - 80131a8: 2300 movs r3, #0 -} - 80131aa: 4618 mov r0, r3 - 80131ac: 3714 adds r7, #20 - 80131ae: 46bd mov sp, r7 - 80131b0: bc80 pop {r7} - 80131b2: 4770 bx lr - -080131b4 : - * @brief End ongoing Rx transfer on UART peripheral (following error detection or Reception completion). - * @param huart UART handle. - * @retval None - */ -static void UART_EndRxTransfer(UART_HandleTypeDef *huart) -{ - 80131b4: b480 push {r7} - 80131b6: b095 sub sp, #84 @ 0x54 - 80131b8: af00 add r7, sp, #0 - 80131ba: 6078 str r0, [r7, #4] - /* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE)); - 80131bc: 687b ldr r3, [r7, #4] - 80131be: 681b ldr r3, [r3, #0] - 80131c0: 330c adds r3, #12 - 80131c2: 637b str r3, [r7, #52] @ 0x34 - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 80131c4: 6b7b ldr r3, [r7, #52] @ 0x34 - 80131c6: e853 3f00 ldrex r3, [r3] - 80131ca: 633b str r3, [r7, #48] @ 0x30 - return(result); - 80131cc: 6b3b ldr r3, [r7, #48] @ 0x30 - 80131ce: f423 7390 bic.w r3, r3, #288 @ 0x120 - 80131d2: 64fb str r3, [r7, #76] @ 0x4c - 80131d4: 687b ldr r3, [r7, #4] - 80131d6: 681b ldr r3, [r3, #0] - 80131d8: 330c adds r3, #12 - 80131da: 6cfa ldr r2, [r7, #76] @ 0x4c - 80131dc: 643a str r2, [r7, #64] @ 0x40 - 80131de: 63fb str r3, [r7, #60] @ 0x3c - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 80131e0: 6bf9 ldr r1, [r7, #60] @ 0x3c - 80131e2: 6c3a ldr r2, [r7, #64] @ 0x40 - 80131e4: e841 2300 strex r3, r2, [r1] - 80131e8: 63bb str r3, [r7, #56] @ 0x38 - return(result); - 80131ea: 6bbb ldr r3, [r7, #56] @ 0x38 - 80131ec: 2b00 cmp r3, #0 - 80131ee: d1e5 bne.n 80131bc - ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE); - 80131f0: 687b ldr r3, [r7, #4] - 80131f2: 681b ldr r3, [r3, #0] - 80131f4: 3314 adds r3, #20 - 80131f6: 623b str r3, [r7, #32] - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 80131f8: 6a3b ldr r3, [r7, #32] - 80131fa: e853 3f00 ldrex r3, [r3] - 80131fe: 61fb str r3, [r7, #28] - return(result); - 8013200: 69fb ldr r3, [r7, #28] - 8013202: f023 0301 bic.w r3, r3, #1 - 8013206: 64bb str r3, [r7, #72] @ 0x48 - 8013208: 687b ldr r3, [r7, #4] - 801320a: 681b ldr r3, [r3, #0] - 801320c: 3314 adds r3, #20 - 801320e: 6cba ldr r2, [r7, #72] @ 0x48 - 8013210: 62fa str r2, [r7, #44] @ 0x2c - 8013212: 62bb str r3, [r7, #40] @ 0x28 - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8013214: 6ab9 ldr r1, [r7, #40] @ 0x28 - 8013216: 6afa ldr r2, [r7, #44] @ 0x2c - 8013218: e841 2300 strex r3, r2, [r1] - 801321c: 627b str r3, [r7, #36] @ 0x24 - return(result); - 801321e: 6a7b ldr r3, [r7, #36] @ 0x24 - 8013220: 2b00 cmp r3, #0 - 8013222: d1e5 bne.n 80131f0 - - /* In case of reception waiting for IDLE event, disable also the IDLE IE interrupt source */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - 8013224: 687b ldr r3, [r7, #4] - 8013226: 6b1b ldr r3, [r3, #48] @ 0x30 - 8013228: 2b01 cmp r3, #1 - 801322a: d119 bne.n 8013260 - { - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - 801322c: 687b ldr r3, [r7, #4] - 801322e: 681b ldr r3, [r3, #0] - 8013230: 330c adds r3, #12 - 8013232: 60fb str r3, [r7, #12] - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8013234: 68fb ldr r3, [r7, #12] - 8013236: e853 3f00 ldrex r3, [r3] - 801323a: 60bb str r3, [r7, #8] - return(result); - 801323c: 68bb ldr r3, [r7, #8] - 801323e: f023 0310 bic.w r3, r3, #16 - 8013242: 647b str r3, [r7, #68] @ 0x44 - 8013244: 687b ldr r3, [r7, #4] - 8013246: 681b ldr r3, [r3, #0] - 8013248: 330c adds r3, #12 - 801324a: 6c7a ldr r2, [r7, #68] @ 0x44 - 801324c: 61ba str r2, [r7, #24] - 801324e: 617b str r3, [r7, #20] - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8013250: 6979 ldr r1, [r7, #20] - 8013252: 69ba ldr r2, [r7, #24] - 8013254: e841 2300 strex r3, r2, [r1] - 8013258: 613b str r3, [r7, #16] - return(result); - 801325a: 693b ldr r3, [r7, #16] - 801325c: 2b00 cmp r3, #0 - 801325e: d1e5 bne.n 801322c - } - - /* At end of Rx process, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - 8013260: 687b ldr r3, [r7, #4] - 8013262: 2220 movs r2, #32 - 8013264: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 8013268: 687b ldr r3, [r7, #4] - 801326a: 2200 movs r2, #0 - 801326c: 631a str r2, [r3, #48] @ 0x30 -} - 801326e: bf00 nop - 8013270: 3754 adds r7, #84 @ 0x54 - 8013272: 46bd mov sp, r7 - 8013274: bc80 pop {r7} - 8013276: 4770 bx lr - -08013278 : - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMAAbortOnError(DMA_HandleTypeDef *hdma) -{ - 8013278: b580 push {r7, lr} - 801327a: b084 sub sp, #16 - 801327c: af00 add r7, sp, #0 - 801327e: 6078 str r0, [r7, #4] - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - 8013280: 687b ldr r3, [r7, #4] - 8013282: 6a5b ldr r3, [r3, #36] @ 0x24 - 8013284: 60fb str r3, [r7, #12] - huart->RxXferCount = 0x00U; - 8013286: 68fb ldr r3, [r7, #12] - 8013288: 2200 movs r2, #0 - 801328a: 85da strh r2, [r3, #46] @ 0x2e - huart->TxXferCount = 0x00U; - 801328c: 68fb ldr r3, [r7, #12] - 801328e: 2200 movs r2, #0 - 8013290: 84da strh r2, [r3, #38] @ 0x26 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered error callback*/ - huart->ErrorCallback(huart); -#else - /*Call legacy weak error callback*/ - HAL_UART_ErrorCallback(huart); - 8013292: 68f8 ldr r0, [r7, #12] - 8013294: f7ff ff43 bl 801311e -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - 8013298: bf00 nop - 801329a: 3710 adds r7, #16 - 801329c: 46bd mov sp, r7 - 801329e: bd80 pop {r7, pc} - -080132a0 : - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMATxAbortCallback(DMA_HandleTypeDef *hdma) -{ - 80132a0: b580 push {r7, lr} - 80132a2: b084 sub sp, #16 - 80132a4: af00 add r7, sp, #0 - 80132a6: 6078 str r0, [r7, #4] - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - 80132a8: 687b ldr r3, [r7, #4] - 80132aa: 6a5b ldr r3, [r3, #36] @ 0x24 - 80132ac: 60fb str r3, [r7, #12] - - huart->hdmatx->XferAbortCallback = NULL; - 80132ae: 68fb ldr r3, [r7, #12] - 80132b0: 6b9b ldr r3, [r3, #56] @ 0x38 - 80132b2: 2200 movs r2, #0 - 80132b4: 635a str r2, [r3, #52] @ 0x34 - - /* Check if an Abort process is still ongoing */ - if (huart->hdmarx != NULL) - 80132b6: 68fb ldr r3, [r7, #12] - 80132b8: 6bdb ldr r3, [r3, #60] @ 0x3c - 80132ba: 2b00 cmp r3, #0 - 80132bc: d004 beq.n 80132c8 - { - if (huart->hdmarx->XferAbortCallback != NULL) - 80132be: 68fb ldr r3, [r7, #12] - 80132c0: 6bdb ldr r3, [r3, #60] @ 0x3c - 80132c2: 6b5b ldr r3, [r3, #52] @ 0x34 - 80132c4: 2b00 cmp r3, #0 - 80132c6: d117 bne.n 80132f8 - return; - } - } - - /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0x00U; - 80132c8: 68fb ldr r3, [r7, #12] - 80132ca: 2200 movs r2, #0 - 80132cc: 84da strh r2, [r3, #38] @ 0x26 - huart->RxXferCount = 0x00U; - 80132ce: 68fb ldr r3, [r7, #12] - 80132d0: 2200 movs r2, #0 - 80132d2: 85da strh r2, [r3, #46] @ 0x2e - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - 80132d4: 68fb ldr r3, [r7, #12] - 80132d6: 2200 movs r2, #0 - 80132d8: 645a str r2, [r3, #68] @ 0x44 - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - 80132da: 68fb ldr r3, [r7, #12] - 80132dc: 2220 movs r2, #32 - 80132de: f883 2041 strb.w r2, [r3, #65] @ 0x41 - huart->RxState = HAL_UART_STATE_READY; - 80132e2: 68fb ldr r3, [r7, #12] - 80132e4: 2220 movs r2, #32 - 80132e6: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 80132ea: 68fb ldr r3, [r7, #12] - 80132ec: 2200 movs r2, #0 - 80132ee: 631a str r2, [r3, #48] @ 0x30 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); - 80132f0: 68f8 ldr r0, [r7, #12] - 80132f2: f7ff ff1d bl 8013130 - 80132f6: e000 b.n 80132fa - return; - 80132f8: bf00 nop -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - 80132fa: 3710 adds r7, #16 - 80132fc: 46bd mov sp, r7 - 80132fe: bd80 pop {r7, pc} - -08013300 : - * @param hdma Pointer to a DMA_HandleTypeDef structure that contains - * the configuration information for the specified DMA module. - * @retval None - */ -static void UART_DMARxAbortCallback(DMA_HandleTypeDef *hdma) -{ - 8013300: b580 push {r7, lr} - 8013302: b084 sub sp, #16 - 8013304: af00 add r7, sp, #0 - 8013306: 6078 str r0, [r7, #4] - UART_HandleTypeDef *huart = (UART_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent; - 8013308: 687b ldr r3, [r7, #4] - 801330a: 6a5b ldr r3, [r3, #36] @ 0x24 - 801330c: 60fb str r3, [r7, #12] - - huart->hdmarx->XferAbortCallback = NULL; - 801330e: 68fb ldr r3, [r7, #12] - 8013310: 6bdb ldr r3, [r3, #60] @ 0x3c - 8013312: 2200 movs r2, #0 - 8013314: 635a str r2, [r3, #52] @ 0x34 - - /* Check if an Abort process is still ongoing */ - if (huart->hdmatx != NULL) - 8013316: 68fb ldr r3, [r7, #12] - 8013318: 6b9b ldr r3, [r3, #56] @ 0x38 - 801331a: 2b00 cmp r3, #0 - 801331c: d004 beq.n 8013328 - { - if (huart->hdmatx->XferAbortCallback != NULL) - 801331e: 68fb ldr r3, [r7, #12] - 8013320: 6b9b ldr r3, [r3, #56] @ 0x38 - 8013322: 6b5b ldr r3, [r3, #52] @ 0x34 - 8013324: 2b00 cmp r3, #0 - 8013326: d117 bne.n 8013358 - return; - } - } - - /* No Abort process still ongoing : All DMA channels are aborted, call user Abort Complete callback */ - huart->TxXferCount = 0x00U; - 8013328: 68fb ldr r3, [r7, #12] - 801332a: 2200 movs r2, #0 - 801332c: 84da strh r2, [r3, #38] @ 0x26 - huart->RxXferCount = 0x00U; - 801332e: 68fb ldr r3, [r7, #12] - 8013330: 2200 movs r2, #0 - 8013332: 85da strh r2, [r3, #46] @ 0x2e - - /* Reset ErrorCode */ - huart->ErrorCode = HAL_UART_ERROR_NONE; - 8013334: 68fb ldr r3, [r7, #12] - 8013336: 2200 movs r2, #0 - 8013338: 645a str r2, [r3, #68] @ 0x44 - - /* Restore huart->gState and huart->RxState to Ready */ - huart->gState = HAL_UART_STATE_READY; - 801333a: 68fb ldr r3, [r7, #12] - 801333c: 2220 movs r2, #32 - 801333e: f883 2041 strb.w r2, [r3, #65] @ 0x41 - huart->RxState = HAL_UART_STATE_READY; - 8013342: 68fb ldr r3, [r7, #12] - 8013344: 2220 movs r2, #32 - 8013346: f883 2042 strb.w r2, [r3, #66] @ 0x42 - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 801334a: 68fb ldr r3, [r7, #12] - 801334c: 2200 movs r2, #0 - 801334e: 631a str r2, [r3, #48] @ 0x30 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /* Call registered Abort complete callback */ - huart->AbortCpltCallback(huart); -#else - /* Call legacy weak Abort complete callback */ - HAL_UART_AbortCpltCallback(huart); - 8013350: 68f8 ldr r0, [r7, #12] - 8013352: f7ff feed bl 8013130 - 8013356: e000 b.n 801335a - return; - 8013358: bf00 nop -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ -} - 801335a: 3710 adds r7, #16 - 801335c: 46bd mov sp, r7 - 801335e: bd80 pop {r7, pc} - -08013360 : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart) -{ - 8013360: b480 push {r7} - 8013362: b085 sub sp, #20 - 8013364: af00 add r7, sp, #0 - 8013366: 6078 str r0, [r7, #4] - const uint16_t *tmp; - - /* Check that a Tx process is ongoing */ - if (huart->gState == HAL_UART_STATE_BUSY_TX) - 8013368: 687b ldr r3, [r7, #4] - 801336a: f893 3041 ldrb.w r3, [r3, #65] @ 0x41 - 801336e: b2db uxtb r3, r3 - 8013370: 2b21 cmp r3, #33 @ 0x21 - 8013372: d13e bne.n 80133f2 - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - 8013374: 687b ldr r3, [r7, #4] - 8013376: 689b ldr r3, [r3, #8] - 8013378: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 801337c: d114 bne.n 80133a8 - 801337e: 687b ldr r3, [r7, #4] - 8013380: 691b ldr r3, [r3, #16] - 8013382: 2b00 cmp r3, #0 - 8013384: d110 bne.n 80133a8 - { - tmp = (const uint16_t *) huart->pTxBuffPtr; - 8013386: 687b ldr r3, [r7, #4] - 8013388: 6a1b ldr r3, [r3, #32] - 801338a: 60fb str r3, [r7, #12] - huart->Instance->DR = (uint16_t)(*tmp & (uint16_t)0x01FF); - 801338c: 68fb ldr r3, [r7, #12] - 801338e: 881b ldrh r3, [r3, #0] - 8013390: 461a mov r2, r3 - 8013392: 687b ldr r3, [r7, #4] - 8013394: 681b ldr r3, [r3, #0] - 8013396: f3c2 0208 ubfx r2, r2, #0, #9 - 801339a: 605a str r2, [r3, #4] - huart->pTxBuffPtr += 2U; - 801339c: 687b ldr r3, [r7, #4] - 801339e: 6a1b ldr r3, [r3, #32] - 80133a0: 1c9a adds r2, r3, #2 - 80133a2: 687b ldr r3, [r7, #4] - 80133a4: 621a str r2, [r3, #32] - 80133a6: e008 b.n 80133ba - } - else - { - huart->Instance->DR = (uint8_t)(*huart->pTxBuffPtr++ & (uint8_t)0x00FF); - 80133a8: 687b ldr r3, [r7, #4] - 80133aa: 6a1b ldr r3, [r3, #32] - 80133ac: 1c59 adds r1, r3, #1 - 80133ae: 687a ldr r2, [r7, #4] - 80133b0: 6211 str r1, [r2, #32] - 80133b2: 781a ldrb r2, [r3, #0] - 80133b4: 687b ldr r3, [r7, #4] - 80133b6: 681b ldr r3, [r3, #0] - 80133b8: 605a str r2, [r3, #4] - } - - if (--huart->TxXferCount == 0U) - 80133ba: 687b ldr r3, [r7, #4] - 80133bc: 8cdb ldrh r3, [r3, #38] @ 0x26 - 80133be: b29b uxth r3, r3 - 80133c0: 3b01 subs r3, #1 - 80133c2: b29b uxth r3, r3 - 80133c4: 687a ldr r2, [r7, #4] - 80133c6: 4619 mov r1, r3 - 80133c8: 84d1 strh r1, [r2, #38] @ 0x26 - 80133ca: 2b00 cmp r3, #0 - 80133cc: d10f bne.n 80133ee - { - /* Disable the UART Transmit Data Register Empty Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_TXE); - 80133ce: 687b ldr r3, [r7, #4] - 80133d0: 681b ldr r3, [r3, #0] - 80133d2: 68da ldr r2, [r3, #12] - 80133d4: 687b ldr r3, [r7, #4] - 80133d6: 681b ldr r3, [r3, #0] - 80133d8: f022 0280 bic.w r2, r2, #128 @ 0x80 - 80133dc: 60da str r2, [r3, #12] - - /* Enable the UART Transmit Complete Interrupt */ - __HAL_UART_ENABLE_IT(huart, UART_IT_TC); - 80133de: 687b ldr r3, [r7, #4] - 80133e0: 681b ldr r3, [r3, #0] - 80133e2: 68da ldr r2, [r3, #12] - 80133e4: 687b ldr r3, [r7, #4] - 80133e6: 681b ldr r3, [r3, #0] - 80133e8: f042 0240 orr.w r2, r2, #64 @ 0x40 - 80133ec: 60da str r2, [r3, #12] - } - return HAL_OK; - 80133ee: 2300 movs r3, #0 - 80133f0: e000 b.n 80133f4 - } - else - { - return HAL_BUSY; - 80133f2: 2302 movs r3, #2 - } -} - 80133f4: 4618 mov r0, r3 - 80133f6: 3714 adds r7, #20 - 80133f8: 46bd mov sp, r7 - 80133fa: bc80 pop {r7} - 80133fc: 4770 bx lr - -080133fe : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_EndTransmit_IT(UART_HandleTypeDef *huart) -{ - 80133fe: b580 push {r7, lr} - 8013400: b082 sub sp, #8 - 8013402: af00 add r7, sp, #0 - 8013404: 6078 str r0, [r7, #4] - /* Disable the UART Transmit Complete Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_TC); - 8013406: 687b ldr r3, [r7, #4] - 8013408: 681b ldr r3, [r3, #0] - 801340a: 68da ldr r2, [r3, #12] - 801340c: 687b ldr r3, [r7, #4] - 801340e: 681b ldr r3, [r3, #0] - 8013410: f022 0240 bic.w r2, r2, #64 @ 0x40 - 8013414: 60da str r2, [r3, #12] - - /* Tx process is ended, restore huart->gState to Ready */ - huart->gState = HAL_UART_STATE_READY; - 8013416: 687b ldr r3, [r7, #4] - 8013418: 2220 movs r2, #32 - 801341a: f883 2041 strb.w r2, [r3, #65] @ 0x41 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Tx complete callback*/ - huart->TxCpltCallback(huart); -#else - /*Call legacy weak Tx complete callback*/ - HAL_UART_TxCpltCallback(huart); - 801341e: 6878 ldr r0, [r7, #4] - 8013420: f7fa f894 bl 800d54c -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - - return HAL_OK; - 8013424: 2300 movs r3, #0 -} - 8013426: 4618 mov r0, r3 - 8013428: 3708 adds r7, #8 - 801342a: 46bd mov sp, r7 - 801342c: bd80 pop {r7, pc} - -0801342e : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval HAL status - */ -static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart) -{ - 801342e: b580 push {r7, lr} - 8013430: b08c sub sp, #48 @ 0x30 - 8013432: af00 add r7, sp, #0 - 8013434: 6078 str r0, [r7, #4] - uint8_t *pdata8bits; - uint16_t *pdata16bits; - - /* Check that a Rx process is ongoing */ - if (huart->RxState == HAL_UART_STATE_BUSY_RX) - 8013436: 687b ldr r3, [r7, #4] - 8013438: f893 3042 ldrb.w r3, [r3, #66] @ 0x42 - 801343c: b2db uxtb r3, r3 - 801343e: 2b22 cmp r3, #34 @ 0x22 - 8013440: f040 80ae bne.w 80135a0 - { - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE)) - 8013444: 687b ldr r3, [r7, #4] - 8013446: 689b ldr r3, [r3, #8] - 8013448: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 801344c: d117 bne.n 801347e - 801344e: 687b ldr r3, [r7, #4] - 8013450: 691b ldr r3, [r3, #16] - 8013452: 2b00 cmp r3, #0 - 8013454: d113 bne.n 801347e - { - pdata8bits = NULL; - 8013456: 2300 movs r3, #0 - 8013458: 62fb str r3, [r7, #44] @ 0x2c - pdata16bits = (uint16_t *) huart->pRxBuffPtr; - 801345a: 687b ldr r3, [r7, #4] - 801345c: 6a9b ldr r3, [r3, #40] @ 0x28 - 801345e: 62bb str r3, [r7, #40] @ 0x28 - *pdata16bits = (uint16_t)(huart->Instance->DR & (uint16_t)0x01FF); - 8013460: 687b ldr r3, [r7, #4] - 8013462: 681b ldr r3, [r3, #0] - 8013464: 685b ldr r3, [r3, #4] - 8013466: b29b uxth r3, r3 - 8013468: f3c3 0308 ubfx r3, r3, #0, #9 - 801346c: b29a uxth r2, r3 - 801346e: 6abb ldr r3, [r7, #40] @ 0x28 - 8013470: 801a strh r2, [r3, #0] - huart->pRxBuffPtr += 2U; - 8013472: 687b ldr r3, [r7, #4] - 8013474: 6a9b ldr r3, [r3, #40] @ 0x28 - 8013476: 1c9a adds r2, r3, #2 - 8013478: 687b ldr r3, [r7, #4] - 801347a: 629a str r2, [r3, #40] @ 0x28 - 801347c: e026 b.n 80134cc - } - else - { - pdata8bits = (uint8_t *) huart->pRxBuffPtr; - 801347e: 687b ldr r3, [r7, #4] - 8013480: 6a9b ldr r3, [r3, #40] @ 0x28 - 8013482: 62fb str r3, [r7, #44] @ 0x2c - pdata16bits = NULL; - 8013484: 2300 movs r3, #0 - 8013486: 62bb str r3, [r7, #40] @ 0x28 - - if ((huart->Init.WordLength == UART_WORDLENGTH_9B) || ((huart->Init.WordLength == UART_WORDLENGTH_8B) && (huart->Init.Parity == UART_PARITY_NONE))) - 8013488: 687b ldr r3, [r7, #4] - 801348a: 689b ldr r3, [r3, #8] - 801348c: f5b3 5f80 cmp.w r3, #4096 @ 0x1000 - 8013490: d007 beq.n 80134a2 - 8013492: 687b ldr r3, [r7, #4] - 8013494: 689b ldr r3, [r3, #8] - 8013496: 2b00 cmp r3, #0 - 8013498: d10a bne.n 80134b0 - 801349a: 687b ldr r3, [r7, #4] - 801349c: 691b ldr r3, [r3, #16] - 801349e: 2b00 cmp r3, #0 - 80134a0: d106 bne.n 80134b0 - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x00FF); - 80134a2: 687b ldr r3, [r7, #4] - 80134a4: 681b ldr r3, [r3, #0] - 80134a6: 685b ldr r3, [r3, #4] - 80134a8: b2da uxtb r2, r3 - 80134aa: 6afb ldr r3, [r7, #44] @ 0x2c - 80134ac: 701a strb r2, [r3, #0] - 80134ae: e008 b.n 80134c2 - } - else - { - *pdata8bits = (uint8_t)(huart->Instance->DR & (uint8_t)0x007F); - 80134b0: 687b ldr r3, [r7, #4] - 80134b2: 681b ldr r3, [r3, #0] - 80134b4: 685b ldr r3, [r3, #4] - 80134b6: b2db uxtb r3, r3 - 80134b8: f003 037f and.w r3, r3, #127 @ 0x7f - 80134bc: b2da uxtb r2, r3 - 80134be: 6afb ldr r3, [r7, #44] @ 0x2c - 80134c0: 701a strb r2, [r3, #0] - } - huart->pRxBuffPtr += 1U; - 80134c2: 687b ldr r3, [r7, #4] - 80134c4: 6a9b ldr r3, [r3, #40] @ 0x28 - 80134c6: 1c5a adds r2, r3, #1 - 80134c8: 687b ldr r3, [r7, #4] - 80134ca: 629a str r2, [r3, #40] @ 0x28 - } - - if (--huart->RxXferCount == 0U) - 80134cc: 687b ldr r3, [r7, #4] - 80134ce: 8ddb ldrh r3, [r3, #46] @ 0x2e - 80134d0: b29b uxth r3, r3 - 80134d2: 3b01 subs r3, #1 - 80134d4: b29b uxth r3, r3 - 80134d6: 687a ldr r2, [r7, #4] - 80134d8: 4619 mov r1, r3 - 80134da: 85d1 strh r1, [r2, #46] @ 0x2e - 80134dc: 2b00 cmp r3, #0 - 80134de: d15d bne.n 801359c - { - /* Disable the UART Data Register not empty Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE); - 80134e0: 687b ldr r3, [r7, #4] - 80134e2: 681b ldr r3, [r3, #0] - 80134e4: 68da ldr r2, [r3, #12] - 80134e6: 687b ldr r3, [r7, #4] - 80134e8: 681b ldr r3, [r3, #0] - 80134ea: f022 0220 bic.w r2, r2, #32 - 80134ee: 60da str r2, [r3, #12] - - /* Disable the UART Parity Error Interrupt */ - __HAL_UART_DISABLE_IT(huart, UART_IT_PE); - 80134f0: 687b ldr r3, [r7, #4] - 80134f2: 681b ldr r3, [r3, #0] - 80134f4: 68da ldr r2, [r3, #12] - 80134f6: 687b ldr r3, [r7, #4] - 80134f8: 681b ldr r3, [r3, #0] - 80134fa: f422 7280 bic.w r2, r2, #256 @ 0x100 - 80134fe: 60da str r2, [r3, #12] - - /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */ - __HAL_UART_DISABLE_IT(huart, UART_IT_ERR); - 8013500: 687b ldr r3, [r7, #4] - 8013502: 681b ldr r3, [r3, #0] - 8013504: 695a ldr r2, [r3, #20] - 8013506: 687b ldr r3, [r7, #4] - 8013508: 681b ldr r3, [r3, #0] - 801350a: f022 0201 bic.w r2, r2, #1 - 801350e: 615a str r2, [r3, #20] - - /* Rx process is completed, restore huart->RxState to Ready */ - huart->RxState = HAL_UART_STATE_READY; - 8013510: 687b ldr r3, [r7, #4] - 8013512: 2220 movs r2, #32 - 8013514: f883 2042 strb.w r2, [r3, #66] @ 0x42 - - /* Initialize type of RxEvent to Transfer Complete */ - huart->RxEventType = HAL_UART_RXEVENT_TC; - 8013518: 687b ldr r3, [r7, #4] - 801351a: 2200 movs r2, #0 - 801351c: 635a str r2, [r3, #52] @ 0x34 - - /* Check current reception Mode : - If Reception till IDLE event has been selected : */ - if (huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE) - 801351e: 687b ldr r3, [r7, #4] - 8013520: 6b1b ldr r3, [r3, #48] @ 0x30 - 8013522: 2b01 cmp r3, #1 - 8013524: d135 bne.n 8013592 - { - /* Set reception type to Standard */ - huart->ReceptionType = HAL_UART_RECEPTION_STANDARD; - 8013526: 687b ldr r3, [r7, #4] - 8013528: 2200 movs r2, #0 - 801352a: 631a str r2, [r3, #48] @ 0x30 - - /* Disable IDLE interrupt */ - ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE); - 801352c: 687b ldr r3, [r7, #4] - 801352e: 681b ldr r3, [r3, #0] - 8013530: 330c adds r3, #12 - 8013532: 617b str r3, [r7, #20] - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - 8013534: 697b ldr r3, [r7, #20] - 8013536: e853 3f00 ldrex r3, [r3] - 801353a: 613b str r3, [r7, #16] - return(result); - 801353c: 693b ldr r3, [r7, #16] - 801353e: f023 0310 bic.w r3, r3, #16 - 8013542: 627b str r3, [r7, #36] @ 0x24 - 8013544: 687b ldr r3, [r7, #4] - 8013546: 681b ldr r3, [r3, #0] - 8013548: 330c adds r3, #12 - 801354a: 6a7a ldr r2, [r7, #36] @ 0x24 - 801354c: 623a str r2, [r7, #32] - 801354e: 61fb str r3, [r7, #28] - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - 8013550: 69f9 ldr r1, [r7, #28] - 8013552: 6a3a ldr r2, [r7, #32] - 8013554: e841 2300 strex r3, r2, [r1] - 8013558: 61bb str r3, [r7, #24] - return(result); - 801355a: 69bb ldr r3, [r7, #24] - 801355c: 2b00 cmp r3, #0 - 801355e: d1e5 bne.n 801352c - - /* Check if IDLE flag is set */ - if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE)) - 8013560: 687b ldr r3, [r7, #4] - 8013562: 681b ldr r3, [r3, #0] - 8013564: 681b ldr r3, [r3, #0] - 8013566: f003 0310 and.w r3, r3, #16 - 801356a: 2b10 cmp r3, #16 - 801356c: d10a bne.n 8013584 - { - /* Clear IDLE flag in ISR */ - __HAL_UART_CLEAR_IDLEFLAG(huart); - 801356e: 2300 movs r3, #0 - 8013570: 60fb str r3, [r7, #12] - 8013572: 687b ldr r3, [r7, #4] - 8013574: 681b ldr r3, [r3, #0] - 8013576: 681b ldr r3, [r3, #0] - 8013578: 60fb str r3, [r7, #12] - 801357a: 687b ldr r3, [r7, #4] - 801357c: 681b ldr r3, [r3, #0] - 801357e: 685b ldr r3, [r3, #4] - 8013580: 60fb str r3, [r7, #12] - 8013582: 68fb ldr r3, [r7, #12] -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx Event callback*/ - huart->RxEventCallback(huart, huart->RxXferSize); -#else - /*Call legacy weak Rx Event callback*/ - HAL_UARTEx_RxEventCallback(huart, huart->RxXferSize); - 8013584: 687b ldr r3, [r7, #4] - 8013586: 8d9b ldrh r3, [r3, #44] @ 0x2c - 8013588: 4619 mov r1, r3 - 801358a: 6878 ldr r0, [r7, #4] - 801358c: f7f9 ff8c bl 800d4a8 - 8013590: e002 b.n 8013598 -#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) - /*Call registered Rx complete callback*/ - huart->RxCpltCallback(huart); -#else - /*Call legacy weak Rx complete callback*/ - HAL_UART_RxCpltCallback(huart); - 8013592: 6878 ldr r0, [r7, #4] - 8013594: f7ff fdba bl 801310c -#endif /* USE_HAL_UART_REGISTER_CALLBACKS */ - } - - return HAL_OK; - 8013598: 2300 movs r3, #0 - 801359a: e002 b.n 80135a2 - } - return HAL_OK; - 801359c: 2300 movs r3, #0 - 801359e: e000 b.n 80135a2 - } - else - { - return HAL_BUSY; - 80135a0: 2302 movs r3, #2 - } -} - 80135a2: 4618 mov r0, r3 - 80135a4: 3730 adds r7, #48 @ 0x30 - 80135a6: 46bd mov sp, r7 - 80135a8: bd80 pop {r7, pc} - ... - -080135ac : - * @param huart Pointer to a UART_HandleTypeDef structure that contains - * the configuration information for the specified UART module. - * @retval None - */ -static void UART_SetConfig(UART_HandleTypeDef *huart) -{ - 80135ac: b580 push {r7, lr} - 80135ae: b084 sub sp, #16 - 80135b0: af00 add r7, sp, #0 - 80135b2: 6078 str r0, [r7, #4] - assert_param(IS_UART_MODE(huart->Init.Mode)); - - /*-------------------------- USART CR2 Configuration -----------------------*/ - /* Configure the UART Stop Bits: Set STOP[13:12] bits - according to huart->Init.StopBits value */ - MODIFY_REG(huart->Instance->CR2, USART_CR2_STOP, huart->Init.StopBits); - 80135b4: 687b ldr r3, [r7, #4] - 80135b6: 681b ldr r3, [r3, #0] - 80135b8: 691b ldr r3, [r3, #16] - 80135ba: f423 5140 bic.w r1, r3, #12288 @ 0x3000 - 80135be: 687b ldr r3, [r7, #4] - 80135c0: 68da ldr r2, [r3, #12] - 80135c2: 687b ldr r3, [r7, #4] - 80135c4: 681b ldr r3, [r3, #0] - 80135c6: 430a orrs r2, r1 - 80135c8: 611a str r2, [r3, #16] - tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode | huart->Init.OverSampling; - MODIFY_REG(huart->Instance->CR1, - (uint32_t)(USART_CR1_M | USART_CR1_PCE | USART_CR1_PS | USART_CR1_TE | USART_CR1_RE | USART_CR1_OVER8), - tmpreg); -#else - tmpreg = (uint32_t)huart->Init.WordLength | huart->Init.Parity | huart->Init.Mode; - 80135ca: 687b ldr r3, [r7, #4] - 80135cc: 689a ldr r2, [r3, #8] - 80135ce: 687b ldr r3, [r7, #4] - 80135d0: 691b ldr r3, [r3, #16] - 80135d2: 431a orrs r2, r3 - 80135d4: 687b ldr r3, [r7, #4] - 80135d6: 695b ldr r3, [r3, #20] - 80135d8: 4313 orrs r3, r2 - 80135da: 60bb str r3, [r7, #8] - MODIFY_REG(huart->Instance->CR1, - 80135dc: 687b ldr r3, [r7, #4] - 80135de: 681b ldr r3, [r3, #0] - 80135e0: 68db ldr r3, [r3, #12] - 80135e2: f423 53b0 bic.w r3, r3, #5632 @ 0x1600 - 80135e6: f023 030c bic.w r3, r3, #12 - 80135ea: 687a ldr r2, [r7, #4] - 80135ec: 6812 ldr r2, [r2, #0] - 80135ee: 68b9 ldr r1, [r7, #8] - 80135f0: 430b orrs r3, r1 - 80135f2: 60d3 str r3, [r2, #12] - tmpreg); -#endif /* USART_CR1_OVER8 */ - - /*-------------------------- USART CR3 Configuration -----------------------*/ - /* Configure the UART HFC: Set CTSE and RTSE bits according to huart->Init.HwFlowCtl value */ - MODIFY_REG(huart->Instance->CR3, (USART_CR3_RTSE | USART_CR3_CTSE), huart->Init.HwFlowCtl); - 80135f4: 687b ldr r3, [r7, #4] - 80135f6: 681b ldr r3, [r3, #0] - 80135f8: 695b ldr r3, [r3, #20] - 80135fa: f423 7140 bic.w r1, r3, #768 @ 0x300 - 80135fe: 687b ldr r3, [r7, #4] - 8013600: 699a ldr r2, [r3, #24] - 8013602: 687b ldr r3, [r7, #4] - 8013604: 681b ldr r3, [r3, #0] - 8013606: 430a orrs r2, r1 - 8013608: 615a str r2, [r3, #20] - - - if(huart->Instance == USART1) - 801360a: 687b ldr r3, [r7, #4] - 801360c: 681b ldr r3, [r3, #0] - 801360e: 4a2c ldr r2, [pc, #176] @ (80136c0 ) - 8013610: 4293 cmp r3, r2 - 8013612: d103 bne.n 801361c - { - pclk = HAL_RCC_GetPCLK2Freq(); - 8013614: f7fd ff38 bl 8011488 - 8013618: 60f8 str r0, [r7, #12] - 801361a: e002 b.n 8013622 - } - else - { - pclk = HAL_RCC_GetPCLK1Freq(); - 801361c: f7fd ff20 bl 8011460 - 8013620: 60f8 str r0, [r7, #12] - else - { - huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); - } -#else - huart->Instance->BRR = UART_BRR_SAMPLING16(pclk, huart->Init.BaudRate); - 8013622: 68fa ldr r2, [r7, #12] - 8013624: 4613 mov r3, r2 - 8013626: 009b lsls r3, r3, #2 - 8013628: 4413 add r3, r2 - 801362a: 009a lsls r2, r3, #2 - 801362c: 441a add r2, r3 - 801362e: 687b ldr r3, [r7, #4] - 8013630: 685b ldr r3, [r3, #4] - 8013632: 009b lsls r3, r3, #2 - 8013634: fbb2 f3f3 udiv r3, r2, r3 - 8013638: 4a22 ldr r2, [pc, #136] @ (80136c4 ) - 801363a: fba2 2303 umull r2, r3, r2, r3 - 801363e: 095b lsrs r3, r3, #5 - 8013640: 0119 lsls r1, r3, #4 - 8013642: 68fa ldr r2, [r7, #12] - 8013644: 4613 mov r3, r2 - 8013646: 009b lsls r3, r3, #2 - 8013648: 4413 add r3, r2 - 801364a: 009a lsls r2, r3, #2 - 801364c: 441a add r2, r3 - 801364e: 687b ldr r3, [r7, #4] - 8013650: 685b ldr r3, [r3, #4] - 8013652: 009b lsls r3, r3, #2 - 8013654: fbb2 f2f3 udiv r2, r2, r3 - 8013658: 4b1a ldr r3, [pc, #104] @ (80136c4 ) - 801365a: fba3 0302 umull r0, r3, r3, r2 - 801365e: 095b lsrs r3, r3, #5 - 8013660: 2064 movs r0, #100 @ 0x64 - 8013662: fb00 f303 mul.w r3, r0, r3 - 8013666: 1ad3 subs r3, r2, r3 - 8013668: 011b lsls r3, r3, #4 - 801366a: 3332 adds r3, #50 @ 0x32 - 801366c: 4a15 ldr r2, [pc, #84] @ (80136c4 ) - 801366e: fba2 2303 umull r2, r3, r2, r3 - 8013672: 095b lsrs r3, r3, #5 - 8013674: f003 03f0 and.w r3, r3, #240 @ 0xf0 - 8013678: 4419 add r1, r3 - 801367a: 68fa ldr r2, [r7, #12] - 801367c: 4613 mov r3, r2 - 801367e: 009b lsls r3, r3, #2 - 8013680: 4413 add r3, r2 - 8013682: 009a lsls r2, r3, #2 - 8013684: 441a add r2, r3 - 8013686: 687b ldr r3, [r7, #4] - 8013688: 685b ldr r3, [r3, #4] - 801368a: 009b lsls r3, r3, #2 - 801368c: fbb2 f2f3 udiv r2, r2, r3 - 8013690: 4b0c ldr r3, [pc, #48] @ (80136c4 ) - 8013692: fba3 0302 umull r0, r3, r3, r2 - 8013696: 095b lsrs r3, r3, #5 - 8013698: 2064 movs r0, #100 @ 0x64 - 801369a: fb00 f303 mul.w r3, r0, r3 - 801369e: 1ad3 subs r3, r2, r3 - 80136a0: 011b lsls r3, r3, #4 - 80136a2: 3332 adds r3, #50 @ 0x32 - 80136a4: 4a07 ldr r2, [pc, #28] @ (80136c4 ) - 80136a6: fba2 2303 umull r2, r3, r2, r3 - 80136aa: 095b lsrs r3, r3, #5 - 80136ac: f003 020f and.w r2, r3, #15 - 80136b0: 687b ldr r3, [r7, #4] - 80136b2: 681b ldr r3, [r3, #0] - 80136b4: 440a add r2, r1 - 80136b6: 609a str r2, [r3, #8] -#endif /* USART_CR1_OVER8 */ -} - 80136b8: bf00 nop - 80136ba: 3710 adds r7, #16 - 80136bc: 46bd mov sp, r7 - 80136be: bd80 pop {r7, pc} - 80136c0: 40013800 .word 0x40013800 - 80136c4: 51eb851f .word 0x51eb851f - -080136c8 <__cvt>: - 80136c8: 2b00 cmp r3, #0 - 80136ca: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 80136ce: 461d mov r5, r3 - 80136d0: bfbb ittet lt - 80136d2: f103 4300 addlt.w r3, r3, #2147483648 @ 0x80000000 - 80136d6: 461d movlt r5, r3 - 80136d8: 2300 movge r3, #0 - 80136da: 232d movlt r3, #45 @ 0x2d - 80136dc: b088 sub sp, #32 - 80136de: 4614 mov r4, r2 - 80136e0: bfb8 it lt - 80136e2: 4614 movlt r4, r2 - 80136e4: 9a12 ldr r2, [sp, #72] @ 0x48 - 80136e6: 9e10 ldr r6, [sp, #64] @ 0x40 - 80136e8: 7013 strb r3, [r2, #0] - 80136ea: 9b14 ldr r3, [sp, #80] @ 0x50 - 80136ec: f8dd a04c ldr.w sl, [sp, #76] @ 0x4c - 80136f0: f023 0820 bic.w r8, r3, #32 - 80136f4: f1b8 0f46 cmp.w r8, #70 @ 0x46 - 80136f8: d005 beq.n 8013706 <__cvt+0x3e> - 80136fa: f1b8 0f45 cmp.w r8, #69 @ 0x45 - 80136fe: d100 bne.n 8013702 <__cvt+0x3a> - 8013700: 3601 adds r6, #1 - 8013702: 2302 movs r3, #2 - 8013704: e000 b.n 8013708 <__cvt+0x40> - 8013706: 2303 movs r3, #3 - 8013708: aa07 add r2, sp, #28 - 801370a: 9204 str r2, [sp, #16] - 801370c: aa06 add r2, sp, #24 - 801370e: e9cd a202 strd sl, r2, [sp, #8] - 8013712: e9cd 3600 strd r3, r6, [sp] - 8013716: 4622 mov r2, r4 - 8013718: 462b mov r3, r5 - 801371a: f000 ff01 bl 8014520 <_dtoa_r> - 801371e: f1b8 0f47 cmp.w r8, #71 @ 0x47 - 8013722: 4607 mov r7, r0 - 8013724: d119 bne.n 801375a <__cvt+0x92> - 8013726: 9b11 ldr r3, [sp, #68] @ 0x44 - 8013728: 07db lsls r3, r3, #31 - 801372a: d50e bpl.n 801374a <__cvt+0x82> - 801372c: eb00 0906 add.w r9, r0, r6 - 8013730: 2200 movs r2, #0 - 8013732: 2300 movs r3, #0 - 8013734: 4620 mov r0, r4 - 8013736: 4629 mov r1, r5 - 8013738: f7f5 f9a2 bl 8008a80 <__aeabi_dcmpeq> - 801373c: b108 cbz r0, 8013742 <__cvt+0x7a> - 801373e: f8cd 901c str.w r9, [sp, #28] - 8013742: 2230 movs r2, #48 @ 0x30 - 8013744: 9b07 ldr r3, [sp, #28] - 8013746: 454b cmp r3, r9 - 8013748: d31e bcc.n 8013788 <__cvt+0xc0> - 801374a: 4638 mov r0, r7 - 801374c: 9b07 ldr r3, [sp, #28] - 801374e: 9a15 ldr r2, [sp, #84] @ 0x54 - 8013750: 1bdb subs r3, r3, r7 - 8013752: 6013 str r3, [r2, #0] - 8013754: b008 add sp, #32 - 8013756: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 801375a: f1b8 0f46 cmp.w r8, #70 @ 0x46 - 801375e: eb00 0906 add.w r9, r0, r6 - 8013762: d1e5 bne.n 8013730 <__cvt+0x68> - 8013764: 7803 ldrb r3, [r0, #0] - 8013766: 2b30 cmp r3, #48 @ 0x30 - 8013768: d10a bne.n 8013780 <__cvt+0xb8> - 801376a: 2200 movs r2, #0 - 801376c: 2300 movs r3, #0 - 801376e: 4620 mov r0, r4 - 8013770: 4629 mov r1, r5 - 8013772: f7f5 f985 bl 8008a80 <__aeabi_dcmpeq> - 8013776: b918 cbnz r0, 8013780 <__cvt+0xb8> - 8013778: f1c6 0601 rsb r6, r6, #1 - 801377c: f8ca 6000 str.w r6, [sl] - 8013780: f8da 3000 ldr.w r3, [sl] - 8013784: 4499 add r9, r3 - 8013786: e7d3 b.n 8013730 <__cvt+0x68> - 8013788: 1c59 adds r1, r3, #1 - 801378a: 9107 str r1, [sp, #28] - 801378c: 701a strb r2, [r3, #0] - 801378e: e7d9 b.n 8013744 <__cvt+0x7c> - -08013790 <__exponent>: - 8013790: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} - 8013792: 2900 cmp r1, #0 - 8013794: bfb6 itet lt - 8013796: 232d movlt r3, #45 @ 0x2d - 8013798: 232b movge r3, #43 @ 0x2b - 801379a: 4249 neglt r1, r1 - 801379c: 2909 cmp r1, #9 - 801379e: 7002 strb r2, [r0, #0] - 80137a0: 7043 strb r3, [r0, #1] - 80137a2: dd29 ble.n 80137f8 <__exponent+0x68> - 80137a4: f10d 0307 add.w r3, sp, #7 - 80137a8: 461d mov r5, r3 - 80137aa: 270a movs r7, #10 - 80137ac: fbb1 f6f7 udiv r6, r1, r7 - 80137b0: 461a mov r2, r3 - 80137b2: fb07 1416 mls r4, r7, r6, r1 - 80137b6: 3430 adds r4, #48 @ 0x30 - 80137b8: f802 4c01 strb.w r4, [r2, #-1] - 80137bc: 460c mov r4, r1 - 80137be: 2c63 cmp r4, #99 @ 0x63 - 80137c0: 4631 mov r1, r6 - 80137c2: f103 33ff add.w r3, r3, #4294967295 @ 0xffffffff - 80137c6: dcf1 bgt.n 80137ac <__exponent+0x1c> - 80137c8: 3130 adds r1, #48 @ 0x30 - 80137ca: 1e94 subs r4, r2, #2 - 80137cc: f803 1c01 strb.w r1, [r3, #-1] - 80137d0: 4623 mov r3, r4 - 80137d2: 1c41 adds r1, r0, #1 - 80137d4: 42ab cmp r3, r5 - 80137d6: d30a bcc.n 80137ee <__exponent+0x5e> - 80137d8: f10d 0309 add.w r3, sp, #9 - 80137dc: 1a9b subs r3, r3, r2 - 80137de: 42ac cmp r4, r5 - 80137e0: bf88 it hi - 80137e2: 2300 movhi r3, #0 - 80137e4: 3302 adds r3, #2 - 80137e6: 4403 add r3, r0 - 80137e8: 1a18 subs r0, r3, r0 - 80137ea: b003 add sp, #12 - 80137ec: bdf0 pop {r4, r5, r6, r7, pc} - 80137ee: f813 6b01 ldrb.w r6, [r3], #1 - 80137f2: f801 6f01 strb.w r6, [r1, #1]! - 80137f6: e7ed b.n 80137d4 <__exponent+0x44> - 80137f8: 2330 movs r3, #48 @ 0x30 - 80137fa: 3130 adds r1, #48 @ 0x30 - 80137fc: 7083 strb r3, [r0, #2] - 80137fe: 70c1 strb r1, [r0, #3] - 8013800: 1d03 adds r3, r0, #4 - 8013802: e7f1 b.n 80137e8 <__exponent+0x58> - -08013804 <_printf_float>: - 8013804: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8013808: b091 sub sp, #68 @ 0x44 - 801380a: 460c mov r4, r1 - 801380c: f8dd 8068 ldr.w r8, [sp, #104] @ 0x68 - 8013810: 4616 mov r6, r2 - 8013812: 461f mov r7, r3 - 8013814: 4605 mov r5, r0 - 8013816: f000 fdbd bl 8014394 <_localeconv_r> - 801381a: 6803 ldr r3, [r0, #0] - 801381c: 4618 mov r0, r3 - 801381e: 9308 str r3, [sp, #32] - 8013820: f7f4 fd02 bl 8008228 - 8013824: 2300 movs r3, #0 - 8013826: 930e str r3, [sp, #56] @ 0x38 - 8013828: f8d8 3000 ldr.w r3, [r8] - 801382c: 9009 str r0, [sp, #36] @ 0x24 - 801382e: 3307 adds r3, #7 - 8013830: f023 0307 bic.w r3, r3, #7 - 8013834: f103 0208 add.w r2, r3, #8 - 8013838: f894 a018 ldrb.w sl, [r4, #24] - 801383c: f8d4 b000 ldr.w fp, [r4] - 8013840: f8c8 2000 str.w r2, [r8] - 8013844: e9d3 8900 ldrd r8, r9, [r3] - 8013848: f029 4300 bic.w r3, r9, #2147483648 @ 0x80000000 - 801384c: 930b str r3, [sp, #44] @ 0x2c - 801384e: f8cd 8028 str.w r8, [sp, #40] @ 0x28 - 8013852: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 8013856: e9dd 010a ldrd r0, r1, [sp, #40] @ 0x28 - 801385a: e9c4 8912 strd r8, r9, [r4, #72] @ 0x48 - 801385e: 4b9c ldr r3, [pc, #624] @ (8013ad0 <_printf_float+0x2cc>) - 8013860: f7f5 f940 bl 8008ae4 <__aeabi_dcmpun> - 8013864: bb70 cbnz r0, 80138c4 <_printf_float+0xc0> - 8013866: e9dd 010a ldrd r0, r1, [sp, #40] @ 0x28 - 801386a: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 801386e: 4b98 ldr r3, [pc, #608] @ (8013ad0 <_printf_float+0x2cc>) - 8013870: f7f5 f91a bl 8008aa8 <__aeabi_dcmple> - 8013874: bb30 cbnz r0, 80138c4 <_printf_float+0xc0> - 8013876: 2200 movs r2, #0 - 8013878: 2300 movs r3, #0 - 801387a: 4640 mov r0, r8 - 801387c: 4649 mov r1, r9 - 801387e: f7f5 f909 bl 8008a94 <__aeabi_dcmplt> - 8013882: b110 cbz r0, 801388a <_printf_float+0x86> - 8013884: 232d movs r3, #45 @ 0x2d - 8013886: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 801388a: 4a92 ldr r2, [pc, #584] @ (8013ad4 <_printf_float+0x2d0>) - 801388c: 4b92 ldr r3, [pc, #584] @ (8013ad8 <_printf_float+0x2d4>) - 801388e: f1ba 0f47 cmp.w sl, #71 @ 0x47 - 8013892: bf8c ite hi - 8013894: 4690 movhi r8, r2 - 8013896: 4698 movls r8, r3 - 8013898: 2303 movs r3, #3 - 801389a: f04f 0900 mov.w r9, #0 - 801389e: 6123 str r3, [r4, #16] - 80138a0: f02b 0304 bic.w r3, fp, #4 - 80138a4: 6023 str r3, [r4, #0] - 80138a6: 4633 mov r3, r6 - 80138a8: 4621 mov r1, r4 - 80138aa: 4628 mov r0, r5 - 80138ac: 9700 str r7, [sp, #0] - 80138ae: aa0f add r2, sp, #60 @ 0x3c - 80138b0: f000 f9d4 bl 8013c5c <_printf_common> - 80138b4: 3001 adds r0, #1 - 80138b6: f040 8090 bne.w 80139da <_printf_float+0x1d6> - 80138ba: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 80138be: b011 add sp, #68 @ 0x44 - 80138c0: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80138c4: 4642 mov r2, r8 - 80138c6: 464b mov r3, r9 - 80138c8: 4640 mov r0, r8 - 80138ca: 4649 mov r1, r9 - 80138cc: f7f5 f90a bl 8008ae4 <__aeabi_dcmpun> - 80138d0: b148 cbz r0, 80138e6 <_printf_float+0xe2> - 80138d2: 464b mov r3, r9 - 80138d4: 2b00 cmp r3, #0 - 80138d6: bfb8 it lt - 80138d8: 232d movlt r3, #45 @ 0x2d - 80138da: 4a80 ldr r2, [pc, #512] @ (8013adc <_printf_float+0x2d8>) - 80138dc: bfb8 it lt - 80138de: f884 3043 strblt.w r3, [r4, #67] @ 0x43 - 80138e2: 4b7f ldr r3, [pc, #508] @ (8013ae0 <_printf_float+0x2dc>) - 80138e4: e7d3 b.n 801388e <_printf_float+0x8a> - 80138e6: 6863 ldr r3, [r4, #4] - 80138e8: f00a 01df and.w r1, sl, #223 @ 0xdf - 80138ec: 1c5a adds r2, r3, #1 - 80138ee: d13f bne.n 8013970 <_printf_float+0x16c> - 80138f0: 2306 movs r3, #6 - 80138f2: 6063 str r3, [r4, #4] - 80138f4: 2200 movs r2, #0 - 80138f6: f44b 6380 orr.w r3, fp, #1024 @ 0x400 - 80138fa: 6023 str r3, [r4, #0] - 80138fc: 9206 str r2, [sp, #24] - 80138fe: aa0e add r2, sp, #56 @ 0x38 - 8013900: e9cd a204 strd sl, r2, [sp, #16] - 8013904: aa0d add r2, sp, #52 @ 0x34 - 8013906: 9203 str r2, [sp, #12] - 8013908: f10d 0233 add.w r2, sp, #51 @ 0x33 - 801390c: e9cd 3201 strd r3, r2, [sp, #4] - 8013910: 6863 ldr r3, [r4, #4] - 8013912: 4642 mov r2, r8 - 8013914: 9300 str r3, [sp, #0] - 8013916: 4628 mov r0, r5 - 8013918: 464b mov r3, r9 - 801391a: 910a str r1, [sp, #40] @ 0x28 - 801391c: f7ff fed4 bl 80136c8 <__cvt> - 8013920: 990a ldr r1, [sp, #40] @ 0x28 - 8013922: 4680 mov r8, r0 - 8013924: 2947 cmp r1, #71 @ 0x47 - 8013926: 990d ldr r1, [sp, #52] @ 0x34 - 8013928: d128 bne.n 801397c <_printf_float+0x178> - 801392a: 1cc8 adds r0, r1, #3 - 801392c: db02 blt.n 8013934 <_printf_float+0x130> - 801392e: 6863 ldr r3, [r4, #4] - 8013930: 4299 cmp r1, r3 - 8013932: dd40 ble.n 80139b6 <_printf_float+0x1b2> - 8013934: f1aa 0a02 sub.w sl, sl, #2 - 8013938: fa5f fa8a uxtb.w sl, sl - 801393c: 4652 mov r2, sl - 801393e: 3901 subs r1, #1 - 8013940: f104 0050 add.w r0, r4, #80 @ 0x50 - 8013944: 910d str r1, [sp, #52] @ 0x34 - 8013946: f7ff ff23 bl 8013790 <__exponent> - 801394a: 9a0e ldr r2, [sp, #56] @ 0x38 - 801394c: 4681 mov r9, r0 - 801394e: 1813 adds r3, r2, r0 - 8013950: 2a01 cmp r2, #1 - 8013952: 6123 str r3, [r4, #16] - 8013954: dc02 bgt.n 801395c <_printf_float+0x158> - 8013956: 6822 ldr r2, [r4, #0] - 8013958: 07d2 lsls r2, r2, #31 - 801395a: d501 bpl.n 8013960 <_printf_float+0x15c> - 801395c: 3301 adds r3, #1 - 801395e: 6123 str r3, [r4, #16] - 8013960: f89d 3033 ldrb.w r3, [sp, #51] @ 0x33 - 8013964: 2b00 cmp r3, #0 - 8013966: d09e beq.n 80138a6 <_printf_float+0xa2> - 8013968: 232d movs r3, #45 @ 0x2d - 801396a: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 801396e: e79a b.n 80138a6 <_printf_float+0xa2> - 8013970: 2947 cmp r1, #71 @ 0x47 - 8013972: d1bf bne.n 80138f4 <_printf_float+0xf0> - 8013974: 2b00 cmp r3, #0 - 8013976: d1bd bne.n 80138f4 <_printf_float+0xf0> - 8013978: 2301 movs r3, #1 - 801397a: e7ba b.n 80138f2 <_printf_float+0xee> - 801397c: f1ba 0f65 cmp.w sl, #101 @ 0x65 - 8013980: d9dc bls.n 801393c <_printf_float+0x138> - 8013982: f1ba 0f66 cmp.w sl, #102 @ 0x66 - 8013986: d118 bne.n 80139ba <_printf_float+0x1b6> - 8013988: 2900 cmp r1, #0 - 801398a: 6863 ldr r3, [r4, #4] - 801398c: dd0b ble.n 80139a6 <_printf_float+0x1a2> - 801398e: 6121 str r1, [r4, #16] - 8013990: b913 cbnz r3, 8013998 <_printf_float+0x194> - 8013992: 6822 ldr r2, [r4, #0] - 8013994: 07d0 lsls r0, r2, #31 - 8013996: d502 bpl.n 801399e <_printf_float+0x19a> - 8013998: 3301 adds r3, #1 - 801399a: 440b add r3, r1 - 801399c: 6123 str r3, [r4, #16] - 801399e: f04f 0900 mov.w r9, #0 - 80139a2: 65a1 str r1, [r4, #88] @ 0x58 - 80139a4: e7dc b.n 8013960 <_printf_float+0x15c> - 80139a6: b913 cbnz r3, 80139ae <_printf_float+0x1aa> - 80139a8: 6822 ldr r2, [r4, #0] - 80139aa: 07d2 lsls r2, r2, #31 - 80139ac: d501 bpl.n 80139b2 <_printf_float+0x1ae> - 80139ae: 3302 adds r3, #2 - 80139b0: e7f4 b.n 801399c <_printf_float+0x198> - 80139b2: 2301 movs r3, #1 - 80139b4: e7f2 b.n 801399c <_printf_float+0x198> - 80139b6: f04f 0a67 mov.w sl, #103 @ 0x67 - 80139ba: 9b0e ldr r3, [sp, #56] @ 0x38 - 80139bc: 4299 cmp r1, r3 - 80139be: db05 blt.n 80139cc <_printf_float+0x1c8> - 80139c0: 6823 ldr r3, [r4, #0] - 80139c2: 6121 str r1, [r4, #16] - 80139c4: 07d8 lsls r0, r3, #31 - 80139c6: d5ea bpl.n 801399e <_printf_float+0x19a> - 80139c8: 1c4b adds r3, r1, #1 - 80139ca: e7e7 b.n 801399c <_printf_float+0x198> - 80139cc: 2900 cmp r1, #0 - 80139ce: bfcc ite gt - 80139d0: 2201 movgt r2, #1 - 80139d2: f1c1 0202 rsble r2, r1, #2 - 80139d6: 4413 add r3, r2 - 80139d8: e7e0 b.n 801399c <_printf_float+0x198> - 80139da: 6823 ldr r3, [r4, #0] - 80139dc: 055a lsls r2, r3, #21 - 80139de: d407 bmi.n 80139f0 <_printf_float+0x1ec> - 80139e0: 6923 ldr r3, [r4, #16] - 80139e2: 4642 mov r2, r8 - 80139e4: 4631 mov r1, r6 - 80139e6: 4628 mov r0, r5 - 80139e8: 47b8 blx r7 - 80139ea: 3001 adds r0, #1 - 80139ec: d12b bne.n 8013a46 <_printf_float+0x242> - 80139ee: e764 b.n 80138ba <_printf_float+0xb6> - 80139f0: f1ba 0f65 cmp.w sl, #101 @ 0x65 - 80139f4: f240 80dc bls.w 8013bb0 <_printf_float+0x3ac> - 80139f8: e9d4 0112 ldrd r0, r1, [r4, #72] @ 0x48 - 80139fc: 2200 movs r2, #0 - 80139fe: 2300 movs r3, #0 - 8013a00: f7f5 f83e bl 8008a80 <__aeabi_dcmpeq> - 8013a04: 2800 cmp r0, #0 - 8013a06: d033 beq.n 8013a70 <_printf_float+0x26c> - 8013a08: 2301 movs r3, #1 - 8013a0a: 4631 mov r1, r6 - 8013a0c: 4628 mov r0, r5 - 8013a0e: 4a35 ldr r2, [pc, #212] @ (8013ae4 <_printf_float+0x2e0>) - 8013a10: 47b8 blx r7 - 8013a12: 3001 adds r0, #1 - 8013a14: f43f af51 beq.w 80138ba <_printf_float+0xb6> - 8013a18: e9dd 380d ldrd r3, r8, [sp, #52] @ 0x34 - 8013a1c: 4543 cmp r3, r8 - 8013a1e: db02 blt.n 8013a26 <_printf_float+0x222> - 8013a20: 6823 ldr r3, [r4, #0] - 8013a22: 07d8 lsls r0, r3, #31 - 8013a24: d50f bpl.n 8013a46 <_printf_float+0x242> - 8013a26: e9dd 2308 ldrd r2, r3, [sp, #32] - 8013a2a: 4631 mov r1, r6 - 8013a2c: 4628 mov r0, r5 - 8013a2e: 47b8 blx r7 - 8013a30: 3001 adds r0, #1 - 8013a32: f43f af42 beq.w 80138ba <_printf_float+0xb6> - 8013a36: f04f 0900 mov.w r9, #0 - 8013a3a: f108 38ff add.w r8, r8, #4294967295 @ 0xffffffff - 8013a3e: f104 0a1a add.w sl, r4, #26 - 8013a42: 45c8 cmp r8, r9 - 8013a44: dc09 bgt.n 8013a5a <_printf_float+0x256> - 8013a46: 6823 ldr r3, [r4, #0] - 8013a48: 079b lsls r3, r3, #30 - 8013a4a: f100 8102 bmi.w 8013c52 <_printf_float+0x44e> - 8013a4e: 68e0 ldr r0, [r4, #12] - 8013a50: 9b0f ldr r3, [sp, #60] @ 0x3c - 8013a52: 4298 cmp r0, r3 - 8013a54: bfb8 it lt - 8013a56: 4618 movlt r0, r3 - 8013a58: e731 b.n 80138be <_printf_float+0xba> - 8013a5a: 2301 movs r3, #1 - 8013a5c: 4652 mov r2, sl - 8013a5e: 4631 mov r1, r6 - 8013a60: 4628 mov r0, r5 - 8013a62: 47b8 blx r7 - 8013a64: 3001 adds r0, #1 - 8013a66: f43f af28 beq.w 80138ba <_printf_float+0xb6> - 8013a6a: f109 0901 add.w r9, r9, #1 - 8013a6e: e7e8 b.n 8013a42 <_printf_float+0x23e> - 8013a70: 9b0d ldr r3, [sp, #52] @ 0x34 - 8013a72: 2b00 cmp r3, #0 - 8013a74: dc38 bgt.n 8013ae8 <_printf_float+0x2e4> - 8013a76: 2301 movs r3, #1 - 8013a78: 4631 mov r1, r6 - 8013a7a: 4628 mov r0, r5 - 8013a7c: 4a19 ldr r2, [pc, #100] @ (8013ae4 <_printf_float+0x2e0>) - 8013a7e: 47b8 blx r7 - 8013a80: 3001 adds r0, #1 - 8013a82: f43f af1a beq.w 80138ba <_printf_float+0xb6> - 8013a86: e9dd 390d ldrd r3, r9, [sp, #52] @ 0x34 - 8013a8a: ea59 0303 orrs.w r3, r9, r3 - 8013a8e: d102 bne.n 8013a96 <_printf_float+0x292> - 8013a90: 6823 ldr r3, [r4, #0] - 8013a92: 07d9 lsls r1, r3, #31 - 8013a94: d5d7 bpl.n 8013a46 <_printf_float+0x242> - 8013a96: e9dd 2308 ldrd r2, r3, [sp, #32] - 8013a9a: 4631 mov r1, r6 - 8013a9c: 4628 mov r0, r5 - 8013a9e: 47b8 blx r7 - 8013aa0: 3001 adds r0, #1 - 8013aa2: f43f af0a beq.w 80138ba <_printf_float+0xb6> - 8013aa6: f04f 0a00 mov.w sl, #0 - 8013aaa: f104 0b1a add.w fp, r4, #26 - 8013aae: 9b0d ldr r3, [sp, #52] @ 0x34 - 8013ab0: 425b negs r3, r3 - 8013ab2: 4553 cmp r3, sl - 8013ab4: dc01 bgt.n 8013aba <_printf_float+0x2b6> - 8013ab6: 464b mov r3, r9 - 8013ab8: e793 b.n 80139e2 <_printf_float+0x1de> - 8013aba: 2301 movs r3, #1 - 8013abc: 465a mov r2, fp - 8013abe: 4631 mov r1, r6 - 8013ac0: 4628 mov r0, r5 - 8013ac2: 47b8 blx r7 - 8013ac4: 3001 adds r0, #1 - 8013ac6: f43f aef8 beq.w 80138ba <_printf_float+0xb6> - 8013aca: f10a 0a01 add.w sl, sl, #1 - 8013ace: e7ee b.n 8013aae <_printf_float+0x2aa> - 8013ad0: 7fefffff .word 0x7fefffff - 8013ad4: 08016d74 .word 0x08016d74 - 8013ad8: 08016d70 .word 0x08016d70 - 8013adc: 08016d7c .word 0x08016d7c - 8013ae0: 08016d78 .word 0x08016d78 - 8013ae4: 08016d80 .word 0x08016d80 - 8013ae8: 6da3 ldr r3, [r4, #88] @ 0x58 - 8013aea: f8dd a038 ldr.w sl, [sp, #56] @ 0x38 - 8013aee: 4553 cmp r3, sl - 8013af0: bfa8 it ge - 8013af2: 4653 movge r3, sl - 8013af4: 2b00 cmp r3, #0 - 8013af6: 4699 mov r9, r3 - 8013af8: dc36 bgt.n 8013b68 <_printf_float+0x364> - 8013afa: f04f 0b00 mov.w fp, #0 - 8013afe: ea29 79e9 bic.w r9, r9, r9, asr #31 - 8013b02: f104 021a add.w r2, r4, #26 - 8013b06: 6da3 ldr r3, [r4, #88] @ 0x58 - 8013b08: 930a str r3, [sp, #40] @ 0x28 - 8013b0a: eba3 0309 sub.w r3, r3, r9 - 8013b0e: 455b cmp r3, fp - 8013b10: dc31 bgt.n 8013b76 <_printf_float+0x372> - 8013b12: 9b0d ldr r3, [sp, #52] @ 0x34 - 8013b14: 459a cmp sl, r3 - 8013b16: dc3a bgt.n 8013b8e <_printf_float+0x38a> - 8013b18: 6823 ldr r3, [r4, #0] - 8013b1a: 07da lsls r2, r3, #31 - 8013b1c: d437 bmi.n 8013b8e <_printf_float+0x38a> - 8013b1e: 9b0d ldr r3, [sp, #52] @ 0x34 - 8013b20: ebaa 0903 sub.w r9, sl, r3 - 8013b24: 9b0a ldr r3, [sp, #40] @ 0x28 - 8013b26: ebaa 0303 sub.w r3, sl, r3 - 8013b2a: 4599 cmp r9, r3 - 8013b2c: bfa8 it ge - 8013b2e: 4699 movge r9, r3 - 8013b30: f1b9 0f00 cmp.w r9, #0 - 8013b34: dc33 bgt.n 8013b9e <_printf_float+0x39a> - 8013b36: f04f 0800 mov.w r8, #0 - 8013b3a: ea29 79e9 bic.w r9, r9, r9, asr #31 - 8013b3e: f104 0b1a add.w fp, r4, #26 - 8013b42: 9b0d ldr r3, [sp, #52] @ 0x34 - 8013b44: ebaa 0303 sub.w r3, sl, r3 - 8013b48: eba3 0309 sub.w r3, r3, r9 - 8013b4c: 4543 cmp r3, r8 - 8013b4e: f77f af7a ble.w 8013a46 <_printf_float+0x242> - 8013b52: 2301 movs r3, #1 - 8013b54: 465a mov r2, fp - 8013b56: 4631 mov r1, r6 - 8013b58: 4628 mov r0, r5 - 8013b5a: 47b8 blx r7 - 8013b5c: 3001 adds r0, #1 - 8013b5e: f43f aeac beq.w 80138ba <_printf_float+0xb6> - 8013b62: f108 0801 add.w r8, r8, #1 - 8013b66: e7ec b.n 8013b42 <_printf_float+0x33e> - 8013b68: 4642 mov r2, r8 - 8013b6a: 4631 mov r1, r6 - 8013b6c: 4628 mov r0, r5 - 8013b6e: 47b8 blx r7 - 8013b70: 3001 adds r0, #1 - 8013b72: d1c2 bne.n 8013afa <_printf_float+0x2f6> - 8013b74: e6a1 b.n 80138ba <_printf_float+0xb6> - 8013b76: 2301 movs r3, #1 - 8013b78: 4631 mov r1, r6 - 8013b7a: 4628 mov r0, r5 - 8013b7c: 920a str r2, [sp, #40] @ 0x28 - 8013b7e: 47b8 blx r7 - 8013b80: 3001 adds r0, #1 - 8013b82: f43f ae9a beq.w 80138ba <_printf_float+0xb6> - 8013b86: 9a0a ldr r2, [sp, #40] @ 0x28 - 8013b88: f10b 0b01 add.w fp, fp, #1 - 8013b8c: e7bb b.n 8013b06 <_printf_float+0x302> - 8013b8e: 4631 mov r1, r6 - 8013b90: e9dd 2308 ldrd r2, r3, [sp, #32] - 8013b94: 4628 mov r0, r5 - 8013b96: 47b8 blx r7 - 8013b98: 3001 adds r0, #1 - 8013b9a: d1c0 bne.n 8013b1e <_printf_float+0x31a> - 8013b9c: e68d b.n 80138ba <_printf_float+0xb6> - 8013b9e: 9a0a ldr r2, [sp, #40] @ 0x28 - 8013ba0: 464b mov r3, r9 - 8013ba2: 4631 mov r1, r6 - 8013ba4: 4628 mov r0, r5 - 8013ba6: 4442 add r2, r8 - 8013ba8: 47b8 blx r7 - 8013baa: 3001 adds r0, #1 - 8013bac: d1c3 bne.n 8013b36 <_printf_float+0x332> - 8013bae: e684 b.n 80138ba <_printf_float+0xb6> - 8013bb0: f8dd a038 ldr.w sl, [sp, #56] @ 0x38 - 8013bb4: f1ba 0f01 cmp.w sl, #1 - 8013bb8: dc01 bgt.n 8013bbe <_printf_float+0x3ba> - 8013bba: 07db lsls r3, r3, #31 - 8013bbc: d536 bpl.n 8013c2c <_printf_float+0x428> - 8013bbe: 2301 movs r3, #1 - 8013bc0: 4642 mov r2, r8 - 8013bc2: 4631 mov r1, r6 - 8013bc4: 4628 mov r0, r5 - 8013bc6: 47b8 blx r7 - 8013bc8: 3001 adds r0, #1 - 8013bca: f43f ae76 beq.w 80138ba <_printf_float+0xb6> - 8013bce: e9dd 2308 ldrd r2, r3, [sp, #32] - 8013bd2: 4631 mov r1, r6 - 8013bd4: 4628 mov r0, r5 - 8013bd6: 47b8 blx r7 - 8013bd8: 3001 adds r0, #1 - 8013bda: f43f ae6e beq.w 80138ba <_printf_float+0xb6> - 8013bde: e9d4 0112 ldrd r0, r1, [r4, #72] @ 0x48 - 8013be2: 2200 movs r2, #0 - 8013be4: 2300 movs r3, #0 - 8013be6: f10a 3aff add.w sl, sl, #4294967295 @ 0xffffffff - 8013bea: f7f4 ff49 bl 8008a80 <__aeabi_dcmpeq> - 8013bee: b9c0 cbnz r0, 8013c22 <_printf_float+0x41e> - 8013bf0: 4653 mov r3, sl - 8013bf2: f108 0201 add.w r2, r8, #1 - 8013bf6: 4631 mov r1, r6 - 8013bf8: 4628 mov r0, r5 - 8013bfa: 47b8 blx r7 - 8013bfc: 3001 adds r0, #1 - 8013bfe: d10c bne.n 8013c1a <_printf_float+0x416> - 8013c00: e65b b.n 80138ba <_printf_float+0xb6> - 8013c02: 2301 movs r3, #1 - 8013c04: 465a mov r2, fp - 8013c06: 4631 mov r1, r6 - 8013c08: 4628 mov r0, r5 - 8013c0a: 47b8 blx r7 - 8013c0c: 3001 adds r0, #1 - 8013c0e: f43f ae54 beq.w 80138ba <_printf_float+0xb6> - 8013c12: f108 0801 add.w r8, r8, #1 - 8013c16: 45d0 cmp r8, sl - 8013c18: dbf3 blt.n 8013c02 <_printf_float+0x3fe> - 8013c1a: 464b mov r3, r9 - 8013c1c: f104 0250 add.w r2, r4, #80 @ 0x50 - 8013c20: e6e0 b.n 80139e4 <_printf_float+0x1e0> - 8013c22: f04f 0800 mov.w r8, #0 - 8013c26: f104 0b1a add.w fp, r4, #26 - 8013c2a: e7f4 b.n 8013c16 <_printf_float+0x412> - 8013c2c: 2301 movs r3, #1 - 8013c2e: 4642 mov r2, r8 - 8013c30: e7e1 b.n 8013bf6 <_printf_float+0x3f2> - 8013c32: 2301 movs r3, #1 - 8013c34: 464a mov r2, r9 - 8013c36: 4631 mov r1, r6 - 8013c38: 4628 mov r0, r5 - 8013c3a: 47b8 blx r7 - 8013c3c: 3001 adds r0, #1 - 8013c3e: f43f ae3c beq.w 80138ba <_printf_float+0xb6> - 8013c42: f108 0801 add.w r8, r8, #1 - 8013c46: 68e3 ldr r3, [r4, #12] - 8013c48: 990f ldr r1, [sp, #60] @ 0x3c - 8013c4a: 1a5b subs r3, r3, r1 - 8013c4c: 4543 cmp r3, r8 - 8013c4e: dcf0 bgt.n 8013c32 <_printf_float+0x42e> - 8013c50: e6fd b.n 8013a4e <_printf_float+0x24a> - 8013c52: f04f 0800 mov.w r8, #0 - 8013c56: f104 0919 add.w r9, r4, #25 - 8013c5a: e7f4 b.n 8013c46 <_printf_float+0x442> - -08013c5c <_printf_common>: - 8013c5c: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8013c60: 4616 mov r6, r2 - 8013c62: 4698 mov r8, r3 - 8013c64: 688a ldr r2, [r1, #8] - 8013c66: 690b ldr r3, [r1, #16] - 8013c68: 4607 mov r7, r0 - 8013c6a: 4293 cmp r3, r2 - 8013c6c: bfb8 it lt - 8013c6e: 4613 movlt r3, r2 - 8013c70: 6033 str r3, [r6, #0] - 8013c72: f891 2043 ldrb.w r2, [r1, #67] @ 0x43 - 8013c76: 460c mov r4, r1 - 8013c78: f8dd 9020 ldr.w r9, [sp, #32] - 8013c7c: b10a cbz r2, 8013c82 <_printf_common+0x26> - 8013c7e: 3301 adds r3, #1 - 8013c80: 6033 str r3, [r6, #0] - 8013c82: 6823 ldr r3, [r4, #0] - 8013c84: 0699 lsls r1, r3, #26 - 8013c86: bf42 ittt mi - 8013c88: 6833 ldrmi r3, [r6, #0] - 8013c8a: 3302 addmi r3, #2 - 8013c8c: 6033 strmi r3, [r6, #0] - 8013c8e: 6825 ldr r5, [r4, #0] - 8013c90: f015 0506 ands.w r5, r5, #6 - 8013c94: d106 bne.n 8013ca4 <_printf_common+0x48> - 8013c96: f104 0a19 add.w sl, r4, #25 - 8013c9a: 68e3 ldr r3, [r4, #12] - 8013c9c: 6832 ldr r2, [r6, #0] - 8013c9e: 1a9b subs r3, r3, r2 - 8013ca0: 42ab cmp r3, r5 - 8013ca2: dc2b bgt.n 8013cfc <_printf_common+0xa0> - 8013ca4: f894 3043 ldrb.w r3, [r4, #67] @ 0x43 - 8013ca8: 6822 ldr r2, [r4, #0] - 8013caa: 3b00 subs r3, #0 - 8013cac: bf18 it ne - 8013cae: 2301 movne r3, #1 - 8013cb0: 0692 lsls r2, r2, #26 - 8013cb2: d430 bmi.n 8013d16 <_printf_common+0xba> - 8013cb4: 4641 mov r1, r8 - 8013cb6: 4638 mov r0, r7 - 8013cb8: f104 0243 add.w r2, r4, #67 @ 0x43 - 8013cbc: 47c8 blx r9 - 8013cbe: 3001 adds r0, #1 - 8013cc0: d023 beq.n 8013d0a <_printf_common+0xae> - 8013cc2: 6823 ldr r3, [r4, #0] - 8013cc4: 6922 ldr r2, [r4, #16] - 8013cc6: f003 0306 and.w r3, r3, #6 - 8013cca: 2b04 cmp r3, #4 - 8013ccc: bf14 ite ne - 8013cce: 2500 movne r5, #0 - 8013cd0: 6833 ldreq r3, [r6, #0] - 8013cd2: f04f 0600 mov.w r6, #0 - 8013cd6: bf08 it eq - 8013cd8: 68e5 ldreq r5, [r4, #12] - 8013cda: f104 041a add.w r4, r4, #26 - 8013cde: bf08 it eq - 8013ce0: 1aed subeq r5, r5, r3 - 8013ce2: f854 3c12 ldr.w r3, [r4, #-18] - 8013ce6: bf08 it eq - 8013ce8: ea25 75e5 biceq.w r5, r5, r5, asr #31 - 8013cec: 4293 cmp r3, r2 - 8013cee: bfc4 itt gt - 8013cf0: 1a9b subgt r3, r3, r2 - 8013cf2: 18ed addgt r5, r5, r3 - 8013cf4: 42b5 cmp r5, r6 - 8013cf6: d11a bne.n 8013d2e <_printf_common+0xd2> - 8013cf8: 2000 movs r0, #0 - 8013cfa: e008 b.n 8013d0e <_printf_common+0xb2> - 8013cfc: 2301 movs r3, #1 - 8013cfe: 4652 mov r2, sl - 8013d00: 4641 mov r1, r8 - 8013d02: 4638 mov r0, r7 - 8013d04: 47c8 blx r9 - 8013d06: 3001 adds r0, #1 - 8013d08: d103 bne.n 8013d12 <_printf_common+0xb6> - 8013d0a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8013d0e: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8013d12: 3501 adds r5, #1 - 8013d14: e7c1 b.n 8013c9a <_printf_common+0x3e> - 8013d16: 2030 movs r0, #48 @ 0x30 - 8013d18: 18e1 adds r1, r4, r3 - 8013d1a: f881 0043 strb.w r0, [r1, #67] @ 0x43 - 8013d1e: 1c5a adds r2, r3, #1 - 8013d20: f894 1045 ldrb.w r1, [r4, #69] @ 0x45 - 8013d24: 4422 add r2, r4 - 8013d26: 3302 adds r3, #2 - 8013d28: f882 1043 strb.w r1, [r2, #67] @ 0x43 - 8013d2c: e7c2 b.n 8013cb4 <_printf_common+0x58> - 8013d2e: 2301 movs r3, #1 - 8013d30: 4622 mov r2, r4 - 8013d32: 4641 mov r1, r8 - 8013d34: 4638 mov r0, r7 - 8013d36: 47c8 blx r9 - 8013d38: 3001 adds r0, #1 - 8013d3a: d0e6 beq.n 8013d0a <_printf_common+0xae> - 8013d3c: 3601 adds r6, #1 - 8013d3e: e7d9 b.n 8013cf4 <_printf_common+0x98> - -08013d40 <_printf_i>: - 8013d40: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} - 8013d44: 7e0f ldrb r7, [r1, #24] - 8013d46: 4691 mov r9, r2 - 8013d48: 2f78 cmp r7, #120 @ 0x78 - 8013d4a: 4680 mov r8, r0 - 8013d4c: 460c mov r4, r1 - 8013d4e: 469a mov sl, r3 - 8013d50: 9e0c ldr r6, [sp, #48] @ 0x30 - 8013d52: f101 0243 add.w r2, r1, #67 @ 0x43 - 8013d56: d807 bhi.n 8013d68 <_printf_i+0x28> - 8013d58: 2f62 cmp r7, #98 @ 0x62 - 8013d5a: d80a bhi.n 8013d72 <_printf_i+0x32> - 8013d5c: 2f00 cmp r7, #0 - 8013d5e: f000 80d1 beq.w 8013f04 <_printf_i+0x1c4> - 8013d62: 2f58 cmp r7, #88 @ 0x58 - 8013d64: f000 80b8 beq.w 8013ed8 <_printf_i+0x198> - 8013d68: f104 0642 add.w r6, r4, #66 @ 0x42 - 8013d6c: f884 7042 strb.w r7, [r4, #66] @ 0x42 - 8013d70: e03a b.n 8013de8 <_printf_i+0xa8> - 8013d72: f1a7 0363 sub.w r3, r7, #99 @ 0x63 - 8013d76: 2b15 cmp r3, #21 - 8013d78: d8f6 bhi.n 8013d68 <_printf_i+0x28> - 8013d7a: a101 add r1, pc, #4 @ (adr r1, 8013d80 <_printf_i+0x40>) - 8013d7c: f851 f023 ldr.w pc, [r1, r3, lsl #2] - 8013d80: 08013dd9 .word 0x08013dd9 - 8013d84: 08013ded .word 0x08013ded - 8013d88: 08013d69 .word 0x08013d69 - 8013d8c: 08013d69 .word 0x08013d69 - 8013d90: 08013d69 .word 0x08013d69 - 8013d94: 08013d69 .word 0x08013d69 - 8013d98: 08013ded .word 0x08013ded - 8013d9c: 08013d69 .word 0x08013d69 - 8013da0: 08013d69 .word 0x08013d69 - 8013da4: 08013d69 .word 0x08013d69 - 8013da8: 08013d69 .word 0x08013d69 - 8013dac: 08013eeb .word 0x08013eeb - 8013db0: 08013e17 .word 0x08013e17 - 8013db4: 08013ea5 .word 0x08013ea5 - 8013db8: 08013d69 .word 0x08013d69 - 8013dbc: 08013d69 .word 0x08013d69 - 8013dc0: 08013f0d .word 0x08013f0d - 8013dc4: 08013d69 .word 0x08013d69 - 8013dc8: 08013e17 .word 0x08013e17 - 8013dcc: 08013d69 .word 0x08013d69 - 8013dd0: 08013d69 .word 0x08013d69 - 8013dd4: 08013ead .word 0x08013ead - 8013dd8: 6833 ldr r3, [r6, #0] - 8013dda: 1d1a adds r2, r3, #4 - 8013ddc: 681b ldr r3, [r3, #0] - 8013dde: 6032 str r2, [r6, #0] - 8013de0: f104 0642 add.w r6, r4, #66 @ 0x42 - 8013de4: f884 3042 strb.w r3, [r4, #66] @ 0x42 - 8013de8: 2301 movs r3, #1 - 8013dea: e09c b.n 8013f26 <_printf_i+0x1e6> - 8013dec: 6833 ldr r3, [r6, #0] - 8013dee: 6820 ldr r0, [r4, #0] - 8013df0: 1d19 adds r1, r3, #4 - 8013df2: 6031 str r1, [r6, #0] - 8013df4: 0606 lsls r6, r0, #24 - 8013df6: d501 bpl.n 8013dfc <_printf_i+0xbc> - 8013df8: 681d ldr r5, [r3, #0] - 8013dfa: e003 b.n 8013e04 <_printf_i+0xc4> - 8013dfc: 0645 lsls r5, r0, #25 - 8013dfe: d5fb bpl.n 8013df8 <_printf_i+0xb8> - 8013e00: f9b3 5000 ldrsh.w r5, [r3] - 8013e04: 2d00 cmp r5, #0 - 8013e06: da03 bge.n 8013e10 <_printf_i+0xd0> - 8013e08: 232d movs r3, #45 @ 0x2d - 8013e0a: 426d negs r5, r5 - 8013e0c: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 8013e10: 230a movs r3, #10 - 8013e12: 4858 ldr r0, [pc, #352] @ (8013f74 <_printf_i+0x234>) - 8013e14: e011 b.n 8013e3a <_printf_i+0xfa> - 8013e16: 6821 ldr r1, [r4, #0] - 8013e18: 6833 ldr r3, [r6, #0] - 8013e1a: 0608 lsls r0, r1, #24 - 8013e1c: f853 5b04 ldr.w r5, [r3], #4 - 8013e20: d402 bmi.n 8013e28 <_printf_i+0xe8> - 8013e22: 0649 lsls r1, r1, #25 - 8013e24: bf48 it mi - 8013e26: b2ad uxthmi r5, r5 - 8013e28: 2f6f cmp r7, #111 @ 0x6f - 8013e2a: 6033 str r3, [r6, #0] - 8013e2c: bf14 ite ne - 8013e2e: 230a movne r3, #10 - 8013e30: 2308 moveq r3, #8 - 8013e32: 4850 ldr r0, [pc, #320] @ (8013f74 <_printf_i+0x234>) - 8013e34: 2100 movs r1, #0 - 8013e36: f884 1043 strb.w r1, [r4, #67] @ 0x43 - 8013e3a: 6866 ldr r6, [r4, #4] - 8013e3c: 2e00 cmp r6, #0 - 8013e3e: 60a6 str r6, [r4, #8] - 8013e40: db05 blt.n 8013e4e <_printf_i+0x10e> - 8013e42: 6821 ldr r1, [r4, #0] - 8013e44: 432e orrs r6, r5 - 8013e46: f021 0104 bic.w r1, r1, #4 - 8013e4a: 6021 str r1, [r4, #0] - 8013e4c: d04b beq.n 8013ee6 <_printf_i+0x1a6> - 8013e4e: 4616 mov r6, r2 - 8013e50: fbb5 f1f3 udiv r1, r5, r3 - 8013e54: fb03 5711 mls r7, r3, r1, r5 - 8013e58: 5dc7 ldrb r7, [r0, r7] - 8013e5a: f806 7d01 strb.w r7, [r6, #-1]! - 8013e5e: 462f mov r7, r5 - 8013e60: 42bb cmp r3, r7 - 8013e62: 460d mov r5, r1 - 8013e64: d9f4 bls.n 8013e50 <_printf_i+0x110> - 8013e66: 2b08 cmp r3, #8 - 8013e68: d10b bne.n 8013e82 <_printf_i+0x142> - 8013e6a: 6823 ldr r3, [r4, #0] - 8013e6c: 07df lsls r7, r3, #31 - 8013e6e: d508 bpl.n 8013e82 <_printf_i+0x142> - 8013e70: 6923 ldr r3, [r4, #16] - 8013e72: 6861 ldr r1, [r4, #4] - 8013e74: 4299 cmp r1, r3 - 8013e76: bfde ittt le - 8013e78: 2330 movle r3, #48 @ 0x30 - 8013e7a: f806 3c01 strble.w r3, [r6, #-1] - 8013e7e: f106 36ff addle.w r6, r6, #4294967295 @ 0xffffffff - 8013e82: 1b92 subs r2, r2, r6 - 8013e84: 6122 str r2, [r4, #16] - 8013e86: 464b mov r3, r9 - 8013e88: 4621 mov r1, r4 - 8013e8a: 4640 mov r0, r8 - 8013e8c: f8cd a000 str.w sl, [sp] - 8013e90: aa03 add r2, sp, #12 - 8013e92: f7ff fee3 bl 8013c5c <_printf_common> - 8013e96: 3001 adds r0, #1 - 8013e98: d14a bne.n 8013f30 <_printf_i+0x1f0> - 8013e9a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8013e9e: b004 add sp, #16 - 8013ea0: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8013ea4: 6823 ldr r3, [r4, #0] - 8013ea6: f043 0320 orr.w r3, r3, #32 - 8013eaa: 6023 str r3, [r4, #0] - 8013eac: 2778 movs r7, #120 @ 0x78 - 8013eae: 4832 ldr r0, [pc, #200] @ (8013f78 <_printf_i+0x238>) - 8013eb0: f884 7045 strb.w r7, [r4, #69] @ 0x45 - 8013eb4: 6823 ldr r3, [r4, #0] - 8013eb6: 6831 ldr r1, [r6, #0] - 8013eb8: 061f lsls r7, r3, #24 - 8013eba: f851 5b04 ldr.w r5, [r1], #4 - 8013ebe: d402 bmi.n 8013ec6 <_printf_i+0x186> - 8013ec0: 065f lsls r7, r3, #25 - 8013ec2: bf48 it mi - 8013ec4: b2ad uxthmi r5, r5 - 8013ec6: 6031 str r1, [r6, #0] - 8013ec8: 07d9 lsls r1, r3, #31 - 8013eca: bf44 itt mi - 8013ecc: f043 0320 orrmi.w r3, r3, #32 - 8013ed0: 6023 strmi r3, [r4, #0] - 8013ed2: b11d cbz r5, 8013edc <_printf_i+0x19c> - 8013ed4: 2310 movs r3, #16 - 8013ed6: e7ad b.n 8013e34 <_printf_i+0xf4> - 8013ed8: 4826 ldr r0, [pc, #152] @ (8013f74 <_printf_i+0x234>) - 8013eda: e7e9 b.n 8013eb0 <_printf_i+0x170> - 8013edc: 6823 ldr r3, [r4, #0] - 8013ede: f023 0320 bic.w r3, r3, #32 - 8013ee2: 6023 str r3, [r4, #0] - 8013ee4: e7f6 b.n 8013ed4 <_printf_i+0x194> - 8013ee6: 4616 mov r6, r2 - 8013ee8: e7bd b.n 8013e66 <_printf_i+0x126> - 8013eea: 6833 ldr r3, [r6, #0] - 8013eec: 6825 ldr r5, [r4, #0] - 8013eee: 1d18 adds r0, r3, #4 - 8013ef0: 6961 ldr r1, [r4, #20] - 8013ef2: 6030 str r0, [r6, #0] - 8013ef4: 062e lsls r6, r5, #24 - 8013ef6: 681b ldr r3, [r3, #0] - 8013ef8: d501 bpl.n 8013efe <_printf_i+0x1be> - 8013efa: 6019 str r1, [r3, #0] - 8013efc: e002 b.n 8013f04 <_printf_i+0x1c4> - 8013efe: 0668 lsls r0, r5, #25 - 8013f00: d5fb bpl.n 8013efa <_printf_i+0x1ba> - 8013f02: 8019 strh r1, [r3, #0] - 8013f04: 2300 movs r3, #0 - 8013f06: 4616 mov r6, r2 - 8013f08: 6123 str r3, [r4, #16] - 8013f0a: e7bc b.n 8013e86 <_printf_i+0x146> - 8013f0c: 6833 ldr r3, [r6, #0] - 8013f0e: 2100 movs r1, #0 - 8013f10: 1d1a adds r2, r3, #4 - 8013f12: 6032 str r2, [r6, #0] - 8013f14: 681e ldr r6, [r3, #0] - 8013f16: 6862 ldr r2, [r4, #4] - 8013f18: 4630 mov r0, r6 - 8013f1a: f000 fa3f bl 801439c - 8013f1e: b108 cbz r0, 8013f24 <_printf_i+0x1e4> - 8013f20: 1b80 subs r0, r0, r6 - 8013f22: 6060 str r0, [r4, #4] - 8013f24: 6863 ldr r3, [r4, #4] - 8013f26: 6123 str r3, [r4, #16] - 8013f28: 2300 movs r3, #0 - 8013f2a: f884 3043 strb.w r3, [r4, #67] @ 0x43 - 8013f2e: e7aa b.n 8013e86 <_printf_i+0x146> - 8013f30: 4632 mov r2, r6 - 8013f32: 4649 mov r1, r9 - 8013f34: 4640 mov r0, r8 - 8013f36: 6923 ldr r3, [r4, #16] - 8013f38: 47d0 blx sl - 8013f3a: 3001 adds r0, #1 - 8013f3c: d0ad beq.n 8013e9a <_printf_i+0x15a> - 8013f3e: 6823 ldr r3, [r4, #0] - 8013f40: 079b lsls r3, r3, #30 - 8013f42: d413 bmi.n 8013f6c <_printf_i+0x22c> - 8013f44: 68e0 ldr r0, [r4, #12] - 8013f46: 9b03 ldr r3, [sp, #12] - 8013f48: 4298 cmp r0, r3 - 8013f4a: bfb8 it lt - 8013f4c: 4618 movlt r0, r3 - 8013f4e: e7a6 b.n 8013e9e <_printf_i+0x15e> - 8013f50: 2301 movs r3, #1 - 8013f52: 4632 mov r2, r6 - 8013f54: 4649 mov r1, r9 - 8013f56: 4640 mov r0, r8 - 8013f58: 47d0 blx sl - 8013f5a: 3001 adds r0, #1 - 8013f5c: d09d beq.n 8013e9a <_printf_i+0x15a> - 8013f5e: 3501 adds r5, #1 - 8013f60: 68e3 ldr r3, [r4, #12] - 8013f62: 9903 ldr r1, [sp, #12] - 8013f64: 1a5b subs r3, r3, r1 - 8013f66: 42ab cmp r3, r5 - 8013f68: dcf2 bgt.n 8013f50 <_printf_i+0x210> - 8013f6a: e7eb b.n 8013f44 <_printf_i+0x204> - 8013f6c: 2500 movs r5, #0 - 8013f6e: f104 0619 add.w r6, r4, #25 - 8013f72: e7f5 b.n 8013f60 <_printf_i+0x220> - 8013f74: 08016d82 .word 0x08016d82 - 8013f78: 08016d93 .word 0x08016d93 - -08013f7c : - 8013f7c: 2300 movs r3, #0 - 8013f7e: b510 push {r4, lr} - 8013f80: 4604 mov r4, r0 - 8013f82: e9c0 3300 strd r3, r3, [r0] - 8013f86: e9c0 3304 strd r3, r3, [r0, #16] - 8013f8a: 6083 str r3, [r0, #8] - 8013f8c: 8181 strh r1, [r0, #12] - 8013f8e: 6643 str r3, [r0, #100] @ 0x64 - 8013f90: 81c2 strh r2, [r0, #14] - 8013f92: 6183 str r3, [r0, #24] - 8013f94: 4619 mov r1, r3 - 8013f96: 2208 movs r2, #8 - 8013f98: 305c adds r0, #92 @ 0x5c - 8013f9a: f000 f8ff bl 801419c - 8013f9e: 4b0d ldr r3, [pc, #52] @ (8013fd4 ) - 8013fa0: 6224 str r4, [r4, #32] - 8013fa2: 6263 str r3, [r4, #36] @ 0x24 - 8013fa4: 4b0c ldr r3, [pc, #48] @ (8013fd8 ) - 8013fa6: 62a3 str r3, [r4, #40] @ 0x28 - 8013fa8: 4b0c ldr r3, [pc, #48] @ (8013fdc ) - 8013faa: 62e3 str r3, [r4, #44] @ 0x2c - 8013fac: 4b0c ldr r3, [pc, #48] @ (8013fe0 ) - 8013fae: 6323 str r3, [r4, #48] @ 0x30 - 8013fb0: 4b0c ldr r3, [pc, #48] @ (8013fe4 ) - 8013fb2: 429c cmp r4, r3 - 8013fb4: d006 beq.n 8013fc4 - 8013fb6: f103 0268 add.w r2, r3, #104 @ 0x68 - 8013fba: 4294 cmp r4, r2 - 8013fbc: d002 beq.n 8013fc4 - 8013fbe: 33d0 adds r3, #208 @ 0xd0 - 8013fc0: 429c cmp r4, r3 - 8013fc2: d105 bne.n 8013fd0 - 8013fc4: f104 0058 add.w r0, r4, #88 @ 0x58 - 8013fc8: e8bd 4010 ldmia.w sp!, {r4, lr} - 8013fcc: f000 b9de b.w 801438c <__retarget_lock_init_recursive> - 8013fd0: bd10 pop {r4, pc} - 8013fd2: bf00 nop - 8013fd4: 08015fa9 .word 0x08015fa9 - 8013fd8: 08015fcb .word 0x08015fcb - 8013fdc: 08016003 .word 0x08016003 - 8013fe0: 08016027 .word 0x08016027 - 8013fe4: 20001090 .word 0x20001090 - -08013fe8 : - 8013fe8: 4a02 ldr r2, [pc, #8] @ (8013ff4 ) - 8013fea: 4903 ldr r1, [pc, #12] @ (8013ff8 ) - 8013fec: 4803 ldr r0, [pc, #12] @ (8013ffc ) - 8013fee: f000 b8a5 b.w 801413c <_fwalk_sglue> - 8013ff2: bf00 nop - 8013ff4: 20000084 .word 0x20000084 - 8013ff8: 0801584d .word 0x0801584d - 8013ffc: 20000094 .word 0x20000094 - -08014000 : - 8014000: 6841 ldr r1, [r0, #4] - 8014002: 4b0c ldr r3, [pc, #48] @ (8014034 ) - 8014004: b510 push {r4, lr} - 8014006: 4299 cmp r1, r3 - 8014008: 4604 mov r4, r0 - 801400a: d001 beq.n 8014010 - 801400c: f001 fc1e bl 801584c <_fflush_r> - 8014010: 68a1 ldr r1, [r4, #8] - 8014012: 4b09 ldr r3, [pc, #36] @ (8014038 ) - 8014014: 4299 cmp r1, r3 - 8014016: d002 beq.n 801401e - 8014018: 4620 mov r0, r4 - 801401a: f001 fc17 bl 801584c <_fflush_r> - 801401e: 68e1 ldr r1, [r4, #12] - 8014020: 4b06 ldr r3, [pc, #24] @ (801403c ) - 8014022: 4299 cmp r1, r3 - 8014024: d004 beq.n 8014030 - 8014026: 4620 mov r0, r4 - 8014028: e8bd 4010 ldmia.w sp!, {r4, lr} - 801402c: f001 bc0e b.w 801584c <_fflush_r> - 8014030: bd10 pop {r4, pc} - 8014032: bf00 nop - 8014034: 20001090 .word 0x20001090 - 8014038: 200010f8 .word 0x200010f8 - 801403c: 20001160 .word 0x20001160 - -08014040 : - 8014040: b510 push {r4, lr} - 8014042: 4b0b ldr r3, [pc, #44] @ (8014070 ) - 8014044: 4c0b ldr r4, [pc, #44] @ (8014074 ) - 8014046: 4a0c ldr r2, [pc, #48] @ (8014078 ) - 8014048: 4620 mov r0, r4 - 801404a: 601a str r2, [r3, #0] - 801404c: 2104 movs r1, #4 - 801404e: 2200 movs r2, #0 - 8014050: f7ff ff94 bl 8013f7c - 8014054: f104 0068 add.w r0, r4, #104 @ 0x68 - 8014058: 2201 movs r2, #1 - 801405a: 2109 movs r1, #9 - 801405c: f7ff ff8e bl 8013f7c - 8014060: f104 00d0 add.w r0, r4, #208 @ 0xd0 - 8014064: 2202 movs r2, #2 - 8014066: e8bd 4010 ldmia.w sp!, {r4, lr} - 801406a: 2112 movs r1, #18 - 801406c: f7ff bf86 b.w 8013f7c - 8014070: 200011c8 .word 0x200011c8 - 8014074: 20001090 .word 0x20001090 - 8014078: 08013fe9 .word 0x08013fe9 - -0801407c <__sfp_lock_acquire>: - 801407c: 4801 ldr r0, [pc, #4] @ (8014084 <__sfp_lock_acquire+0x8>) - 801407e: f000 b986 b.w 801438e <__retarget_lock_acquire_recursive> - 8014082: bf00 nop - 8014084: 200011cd .word 0x200011cd - -08014088 <__sfp_lock_release>: - 8014088: 4801 ldr r0, [pc, #4] @ (8014090 <__sfp_lock_release+0x8>) - 801408a: f000 b981 b.w 8014390 <__retarget_lock_release_recursive> - 801408e: bf00 nop - 8014090: 200011cd .word 0x200011cd - -08014094 <__sinit>: - 8014094: b510 push {r4, lr} - 8014096: 4604 mov r4, r0 - 8014098: f7ff fff0 bl 801407c <__sfp_lock_acquire> - 801409c: 6a23 ldr r3, [r4, #32] - 801409e: b11b cbz r3, 80140a8 <__sinit+0x14> - 80140a0: e8bd 4010 ldmia.w sp!, {r4, lr} - 80140a4: f7ff bff0 b.w 8014088 <__sfp_lock_release> - 80140a8: 4b04 ldr r3, [pc, #16] @ (80140bc <__sinit+0x28>) - 80140aa: 6223 str r3, [r4, #32] - 80140ac: 4b04 ldr r3, [pc, #16] @ (80140c0 <__sinit+0x2c>) - 80140ae: 681b ldr r3, [r3, #0] - 80140b0: 2b00 cmp r3, #0 - 80140b2: d1f5 bne.n 80140a0 <__sinit+0xc> - 80140b4: f7ff ffc4 bl 8014040 - 80140b8: e7f2 b.n 80140a0 <__sinit+0xc> - 80140ba: bf00 nop - 80140bc: 08014001 .word 0x08014001 - 80140c0: 200011c8 .word 0x200011c8 - -080140c4 <_vsniprintf_r>: - 80140c4: b530 push {r4, r5, lr} - 80140c6: 4614 mov r4, r2 - 80140c8: 2c00 cmp r4, #0 - 80140ca: 4605 mov r5, r0 - 80140cc: 461a mov r2, r3 - 80140ce: b09b sub sp, #108 @ 0x6c - 80140d0: da05 bge.n 80140de <_vsniprintf_r+0x1a> - 80140d2: 238b movs r3, #139 @ 0x8b - 80140d4: 6003 str r3, [r0, #0] - 80140d6: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 80140da: b01b add sp, #108 @ 0x6c - 80140dc: bd30 pop {r4, r5, pc} - 80140de: f44f 7302 mov.w r3, #520 @ 0x208 - 80140e2: f8ad 300c strh.w r3, [sp, #12] - 80140e6: f04f 0300 mov.w r3, #0 - 80140ea: 9319 str r3, [sp, #100] @ 0x64 - 80140ec: bf0c ite eq - 80140ee: 4623 moveq r3, r4 - 80140f0: f104 33ff addne.w r3, r4, #4294967295 @ 0xffffffff - 80140f4: 9302 str r3, [sp, #8] - 80140f6: 9305 str r3, [sp, #20] - 80140f8: f64f 73ff movw r3, #65535 @ 0xffff - 80140fc: 9100 str r1, [sp, #0] - 80140fe: 9104 str r1, [sp, #16] - 8014100: f8ad 300e strh.w r3, [sp, #14] - 8014104: 4669 mov r1, sp - 8014106: 9b1e ldr r3, [sp, #120] @ 0x78 - 8014108: f001 f83a bl 8015180 <_svfiprintf_r> - 801410c: 1c43 adds r3, r0, #1 - 801410e: bfbc itt lt - 8014110: 238b movlt r3, #139 @ 0x8b - 8014112: 602b strlt r3, [r5, #0] - 8014114: 2c00 cmp r4, #0 - 8014116: d0e0 beq.n 80140da <_vsniprintf_r+0x16> - 8014118: 2200 movs r2, #0 - 801411a: 9b00 ldr r3, [sp, #0] - 801411c: 701a strb r2, [r3, #0] - 801411e: e7dc b.n 80140da <_vsniprintf_r+0x16> - -08014120 : - 8014120: b507 push {r0, r1, r2, lr} - 8014122: 9300 str r3, [sp, #0] - 8014124: 4613 mov r3, r2 - 8014126: 460a mov r2, r1 - 8014128: 4601 mov r1, r0 - 801412a: 4803 ldr r0, [pc, #12] @ (8014138 ) - 801412c: 6800 ldr r0, [r0, #0] - 801412e: f7ff ffc9 bl 80140c4 <_vsniprintf_r> - 8014132: b003 add sp, #12 - 8014134: f85d fb04 ldr.w pc, [sp], #4 - 8014138: 20000090 .word 0x20000090 - -0801413c <_fwalk_sglue>: - 801413c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8014140: 4607 mov r7, r0 - 8014142: 4688 mov r8, r1 - 8014144: 4614 mov r4, r2 - 8014146: 2600 movs r6, #0 - 8014148: e9d4 9501 ldrd r9, r5, [r4, #4] - 801414c: f1b9 0901 subs.w r9, r9, #1 - 8014150: d505 bpl.n 801415e <_fwalk_sglue+0x22> - 8014152: 6824 ldr r4, [r4, #0] - 8014154: 2c00 cmp r4, #0 - 8014156: d1f7 bne.n 8014148 <_fwalk_sglue+0xc> - 8014158: 4630 mov r0, r6 - 801415a: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 801415e: 89ab ldrh r3, [r5, #12] - 8014160: 2b01 cmp r3, #1 - 8014162: d907 bls.n 8014174 <_fwalk_sglue+0x38> - 8014164: f9b5 300e ldrsh.w r3, [r5, #14] - 8014168: 3301 adds r3, #1 - 801416a: d003 beq.n 8014174 <_fwalk_sglue+0x38> - 801416c: 4629 mov r1, r5 - 801416e: 4638 mov r0, r7 - 8014170: 47c0 blx r8 - 8014172: 4306 orrs r6, r0 - 8014174: 3568 adds r5, #104 @ 0x68 - 8014176: e7e9 b.n 801414c <_fwalk_sglue+0x10> - -08014178 : - 8014178: b40f push {r0, r1, r2, r3} - 801417a: b507 push {r0, r1, r2, lr} - 801417c: 4906 ldr r1, [pc, #24] @ (8014198 ) - 801417e: ab04 add r3, sp, #16 - 8014180: 6808 ldr r0, [r1, #0] - 8014182: f853 2b04 ldr.w r2, [r3], #4 - 8014186: 6881 ldr r1, [r0, #8] - 8014188: 9301 str r3, [sp, #4] - 801418a: f001 f91d bl 80153c8 <_vfiprintf_r> - 801418e: b003 add sp, #12 - 8014190: f85d eb04 ldr.w lr, [sp], #4 - 8014194: b004 add sp, #16 - 8014196: 4770 bx lr - 8014198: 20000090 .word 0x20000090 - -0801419c : - 801419c: 4603 mov r3, r0 - 801419e: 4402 add r2, r0 - 80141a0: 4293 cmp r3, r2 - 80141a2: d100 bne.n 80141a6 - 80141a4: 4770 bx lr - 80141a6: f803 1b01 strb.w r1, [r3], #1 - 80141aa: e7f9 b.n 80141a0 - -080141ac : - 80141ac: b538 push {r3, r4, r5, lr} - 80141ae: 4b0b ldr r3, [pc, #44] @ (80141dc ) - 80141b0: 4604 mov r4, r0 - 80141b2: 681d ldr r5, [r3, #0] - 80141b4: 6b6b ldr r3, [r5, #52] @ 0x34 - 80141b6: b953 cbnz r3, 80141ce - 80141b8: 2024 movs r0, #36 @ 0x24 - 80141ba: f001 fa1d bl 80155f8 - 80141be: 4602 mov r2, r0 - 80141c0: 6368 str r0, [r5, #52] @ 0x34 - 80141c2: b920 cbnz r0, 80141ce - 80141c4: 213d movs r1, #61 @ 0x3d - 80141c6: 4b06 ldr r3, [pc, #24] @ (80141e0 ) - 80141c8: 4806 ldr r0, [pc, #24] @ (80141e4 ) - 80141ca: f000 f903 bl 80143d4 <__assert_func> - 80141ce: 4620 mov r0, r4 - 80141d0: 6b69 ldr r1, [r5, #52] @ 0x34 - 80141d2: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 80141d6: f000 b807 b.w 80141e8 - 80141da: bf00 nop - 80141dc: 20000090 .word 0x20000090 - 80141e0: 08016da4 .word 0x08016da4 - 80141e4: 08016dbb .word 0x08016dbb - -080141e8 : - 80141e8: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 80141ec: 2300 movs r3, #0 - 80141ee: 460c mov r4, r1 - 80141f0: e9d0 0100 ldrd r0, r1, [r0] - 80141f4: 4a4c ldr r2, [pc, #304] @ (8014328 ) - 80141f6: f7f4 fffd bl 80091f4 <__aeabi_ldivmod> - 80141fa: f44f 6161 mov.w r1, #3600 @ 0xe10 - 80141fe: 2a00 cmp r2, #0 - 8014200: bfbc itt lt - 8014202: f502 32a8 addlt.w r2, r2, #86016 @ 0x15000 - 8014206: f502 72c0 addlt.w r2, r2, #384 @ 0x180 - 801420a: fbb2 f3f1 udiv r3, r2, r1 - 801420e: fb01 2213 mls r2, r1, r3, r2 - 8014212: f04f 013c mov.w r1, #60 @ 0x3c - 8014216: 60a3 str r3, [r4, #8] - 8014218: fbb2 f3f1 udiv r3, r2, r1 - 801421c: fb01 2213 mls r2, r1, r3, r2 - 8014220: 6022 str r2, [r4, #0] - 8014222: f04f 0207 mov.w r2, #7 - 8014226: f500 202f add.w r0, r0, #716800 @ 0xaf000 - 801422a: bfac ite ge - 801422c: f600 206c addwge r0, r0, #2668 @ 0xa6c - 8014230: f600 206b addwlt r0, r0, #2667 @ 0xa6b - 8014234: 6063 str r3, [r4, #4] - 8014236: 1cc3 adds r3, r0, #3 - 8014238: fb93 f2f2 sdiv r2, r3, r2 - 801423c: ebc2 02c2 rsb r2, r2, r2, lsl #3 - 8014240: 1a9b subs r3, r3, r2 - 8014242: 493a ldr r1, [pc, #232] @ (801432c ) - 8014244: d555 bpl.n 80142f2 - 8014246: 3307 adds r3, #7 - 8014248: 61a3 str r3, [r4, #24] - 801424a: f5a0 330e sub.w r3, r0, #145408 @ 0x23800 - 801424e: f5a3 732c sub.w r3, r3, #688 @ 0x2b0 - 8014252: fb93 f1f1 sdiv r1, r3, r1 - 8014256: 4b36 ldr r3, [pc, #216] @ (8014330 ) - 8014258: f240 5cb4 movw ip, #1460 @ 0x5b4 - 801425c: fb03 0001 mla r0, r3, r1, r0 - 8014260: f648 63ac movw r3, #36524 @ 0x8eac - 8014264: fbb0 f3f3 udiv r3, r0, r3 - 8014268: fbb0 f2fc udiv r2, r0, ip - 801426c: 4403 add r3, r0 - 801426e: 1a9b subs r3, r3, r2 - 8014270: 4a30 ldr r2, [pc, #192] @ (8014334 ) - 8014272: f240 176d movw r7, #365 @ 0x16d - 8014276: fbb0 f2f2 udiv r2, r0, r2 - 801427a: 1a9b subs r3, r3, r2 - 801427c: fbb3 f2f7 udiv r2, r3, r7 - 8014280: 2664 movs r6, #100 @ 0x64 - 8014282: fbb3 f3fc udiv r3, r3, ip - 8014286: fbb2 f5f6 udiv r5, r2, r6 - 801428a: 1aeb subs r3, r5, r3 - 801428c: 4403 add r3, r0 - 801428e: 2099 movs r0, #153 @ 0x99 - 8014290: fb07 3312 mls r3, r7, r2, r3 - 8014294: eb03 0783 add.w r7, r3, r3, lsl #2 - 8014298: 3702 adds r7, #2 - 801429a: fbb7 fcf0 udiv ip, r7, r0 - 801429e: f04f 0805 mov.w r8, #5 - 80142a2: fb00 f00c mul.w r0, r0, ip - 80142a6: 3002 adds r0, #2 - 80142a8: fbb0 f0f8 udiv r0, r0, r8 - 80142ac: f103 0e01 add.w lr, r3, #1 - 80142b0: ebae 0000 sub.w r0, lr, r0 - 80142b4: f240 5ef9 movw lr, #1529 @ 0x5f9 - 80142b8: 4577 cmp r7, lr - 80142ba: bf8c ite hi - 80142bc: f06f 0709 mvnhi.w r7, #9 - 80142c0: 2702 movls r7, #2 - 80142c2: 4467 add r7, ip - 80142c4: f44f 7cc8 mov.w ip, #400 @ 0x190 - 80142c8: fb0c 2101 mla r1, ip, r1, r2 - 80142cc: 2f01 cmp r7, #1 - 80142ce: bf98 it ls - 80142d0: 3101 addls r1, #1 - 80142d2: f5b3 7f99 cmp.w r3, #306 @ 0x132 - 80142d6: d312 bcc.n 80142fe - 80142d8: f5a3 7399 sub.w r3, r3, #306 @ 0x132 - 80142dc: 61e3 str r3, [r4, #28] - 80142de: 2300 movs r3, #0 - 80142e0: f2a1 716c subw r1, r1, #1900 @ 0x76c - 80142e4: 60e0 str r0, [r4, #12] - 80142e6: e9c4 7104 strd r7, r1, [r4, #16] - 80142ea: 4620 mov r0, r4 - 80142ec: 6223 str r3, [r4, #32] - 80142ee: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 80142f2: 2800 cmp r0, #0 - 80142f4: 61a3 str r3, [r4, #24] - 80142f6: dba8 blt.n 801424a - 80142f8: fb90 f1f1 sdiv r1, r0, r1 - 80142fc: e7ab b.n 8014256 - 80142fe: f012 0f03 tst.w r2, #3 - 8014302: d102 bne.n 801430a - 8014304: fb06 2515 mls r5, r6, r5, r2 - 8014308: b95d cbnz r5, 8014322 - 801430a: f44f 75c8 mov.w r5, #400 @ 0x190 - 801430e: fbb2 f6f5 udiv r6, r2, r5 - 8014312: fb05 2216 mls r2, r5, r6, r2 - 8014316: fab2 f282 clz r2, r2 - 801431a: 0952 lsrs r2, r2, #5 - 801431c: 333b adds r3, #59 @ 0x3b - 801431e: 4413 add r3, r2 - 8014320: e7dc b.n 80142dc - 8014322: 2201 movs r2, #1 - 8014324: e7fa b.n 801431c - 8014326: bf00 nop - 8014328: 00015180 .word 0x00015180 - 801432c: 00023ab1 .word 0x00023ab1 - 8014330: fffdc54f .word 0xfffdc54f - 8014334: 00023ab0 .word 0x00023ab0 - -08014338 <__errno>: - 8014338: 4b01 ldr r3, [pc, #4] @ (8014340 <__errno+0x8>) - 801433a: 6818 ldr r0, [r3, #0] - 801433c: 4770 bx lr - 801433e: bf00 nop - 8014340: 20000090 .word 0x20000090 - -08014344 <__libc_init_array>: - 8014344: b570 push {r4, r5, r6, lr} - 8014346: 2600 movs r6, #0 - 8014348: 4d0c ldr r5, [pc, #48] @ (801437c <__libc_init_array+0x38>) - 801434a: 4c0d ldr r4, [pc, #52] @ (8014380 <__libc_init_array+0x3c>) - 801434c: 1b64 subs r4, r4, r5 - 801434e: 10a4 asrs r4, r4, #2 - 8014350: 42a6 cmp r6, r4 - 8014352: d109 bne.n 8014368 <__libc_init_array+0x24> - 8014354: f002 f904 bl 8016560 <_init> - 8014358: 2600 movs r6, #0 - 801435a: 4d0a ldr r5, [pc, #40] @ (8014384 <__libc_init_array+0x40>) - 801435c: 4c0a ldr r4, [pc, #40] @ (8014388 <__libc_init_array+0x44>) - 801435e: 1b64 subs r4, r4, r5 - 8014360: 10a4 asrs r4, r4, #2 - 8014362: 42a6 cmp r6, r4 - 8014364: d105 bne.n 8014372 <__libc_init_array+0x2e> - 8014366: bd70 pop {r4, r5, r6, pc} - 8014368: f855 3b04 ldr.w r3, [r5], #4 - 801436c: 4798 blx r3 - 801436e: 3601 adds r6, #1 - 8014370: e7ee b.n 8014350 <__libc_init_array+0xc> - 8014372: f855 3b04 ldr.w r3, [r5], #4 - 8014376: 4798 blx r3 - 8014378: 3601 adds r6, #1 - 801437a: e7f2 b.n 8014362 <__libc_init_array+0x1e> - 801437c: 08017144 .word 0x08017144 - 8014380: 08017144 .word 0x08017144 - 8014384: 08017144 .word 0x08017144 - 8014388: 08017148 .word 0x08017148 - -0801438c <__retarget_lock_init_recursive>: - 801438c: 4770 bx lr - -0801438e <__retarget_lock_acquire_recursive>: - 801438e: 4770 bx lr - -08014390 <__retarget_lock_release_recursive>: - 8014390: 4770 bx lr - ... - -08014394 <_localeconv_r>: - 8014394: 4800 ldr r0, [pc, #0] @ (8014398 <_localeconv_r+0x4>) - 8014396: 4770 bx lr - 8014398: 200001d0 .word 0x200001d0 - -0801439c : - 801439c: 4603 mov r3, r0 - 801439e: b510 push {r4, lr} - 80143a0: b2c9 uxtb r1, r1 - 80143a2: 4402 add r2, r0 - 80143a4: 4293 cmp r3, r2 - 80143a6: 4618 mov r0, r3 - 80143a8: d101 bne.n 80143ae - 80143aa: 2000 movs r0, #0 - 80143ac: e003 b.n 80143b6 - 80143ae: 7804 ldrb r4, [r0, #0] - 80143b0: 3301 adds r3, #1 - 80143b2: 428c cmp r4, r1 - 80143b4: d1f6 bne.n 80143a4 - 80143b6: bd10 pop {r4, pc} - -080143b8 : - 80143b8: 440a add r2, r1 - 80143ba: 4291 cmp r1, r2 - 80143bc: f100 33ff add.w r3, r0, #4294967295 @ 0xffffffff - 80143c0: d100 bne.n 80143c4 - 80143c2: 4770 bx lr - 80143c4: b510 push {r4, lr} - 80143c6: f811 4b01 ldrb.w r4, [r1], #1 - 80143ca: 4291 cmp r1, r2 - 80143cc: f803 4f01 strb.w r4, [r3, #1]! - 80143d0: d1f9 bne.n 80143c6 - 80143d2: bd10 pop {r4, pc} - -080143d4 <__assert_func>: - 80143d4: b51f push {r0, r1, r2, r3, r4, lr} - 80143d6: 4614 mov r4, r2 - 80143d8: 461a mov r2, r3 - 80143da: 4b09 ldr r3, [pc, #36] @ (8014400 <__assert_func+0x2c>) - 80143dc: 4605 mov r5, r0 - 80143de: 681b ldr r3, [r3, #0] - 80143e0: 68d8 ldr r0, [r3, #12] - 80143e2: b14c cbz r4, 80143f8 <__assert_func+0x24> - 80143e4: 4b07 ldr r3, [pc, #28] @ (8014404 <__assert_func+0x30>) - 80143e6: e9cd 3401 strd r3, r4, [sp, #4] - 80143ea: 9100 str r1, [sp, #0] - 80143ec: 462b mov r3, r5 - 80143ee: 4906 ldr r1, [pc, #24] @ (8014408 <__assert_func+0x34>) - 80143f0: f001 fe1e bl 8016030 - 80143f4: f001 ffe4 bl 80163c0 - 80143f8: 4b04 ldr r3, [pc, #16] @ (801440c <__assert_func+0x38>) - 80143fa: 461c mov r4, r3 - 80143fc: e7f3 b.n 80143e6 <__assert_func+0x12> - 80143fe: bf00 nop - 8014400: 20000090 .word 0x20000090 - 8014404: 08016e13 .word 0x08016e13 - 8014408: 08016e20 .word 0x08016e20 - 801440c: 08016e4e .word 0x08016e4e - -08014410 : - 8014410: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8014414: 6903 ldr r3, [r0, #16] - 8014416: 690c ldr r4, [r1, #16] - 8014418: 4607 mov r7, r0 - 801441a: 42a3 cmp r3, r4 - 801441c: db7e blt.n 801451c - 801441e: 3c01 subs r4, #1 - 8014420: 00a3 lsls r3, r4, #2 - 8014422: f100 0514 add.w r5, r0, #20 - 8014426: f101 0814 add.w r8, r1, #20 - 801442a: 9300 str r3, [sp, #0] - 801442c: eb05 0384 add.w r3, r5, r4, lsl #2 - 8014430: 9301 str r3, [sp, #4] - 8014432: f858 3024 ldr.w r3, [r8, r4, lsl #2] - 8014436: f855 2024 ldr.w r2, [r5, r4, lsl #2] - 801443a: 3301 adds r3, #1 - 801443c: 429a cmp r2, r3 - 801443e: fbb2 f6f3 udiv r6, r2, r3 - 8014442: eb08 0984 add.w r9, r8, r4, lsl #2 - 8014446: d32e bcc.n 80144a6 - 8014448: f04f 0a00 mov.w sl, #0 - 801444c: 46c4 mov ip, r8 - 801444e: 46ae mov lr, r5 - 8014450: 46d3 mov fp, sl - 8014452: f85c 3b04 ldr.w r3, [ip], #4 - 8014456: b298 uxth r0, r3 - 8014458: fb06 a000 mla r0, r6, r0, sl - 801445c: 0c1b lsrs r3, r3, #16 - 801445e: 0c02 lsrs r2, r0, #16 - 8014460: fb06 2303 mla r3, r6, r3, r2 - 8014464: f8de 2000 ldr.w r2, [lr] - 8014468: b280 uxth r0, r0 - 801446a: b292 uxth r2, r2 - 801446c: 1a12 subs r2, r2, r0 - 801446e: 445a add r2, fp - 8014470: f8de 0000 ldr.w r0, [lr] - 8014474: ea4f 4a13 mov.w sl, r3, lsr #16 - 8014478: b29b uxth r3, r3 - 801447a: ebc3 4322 rsb r3, r3, r2, asr #16 - 801447e: eb03 4310 add.w r3, r3, r0, lsr #16 - 8014482: b292 uxth r2, r2 - 8014484: ea42 4203 orr.w r2, r2, r3, lsl #16 - 8014488: 45e1 cmp r9, ip - 801448a: ea4f 4b23 mov.w fp, r3, asr #16 - 801448e: f84e 2b04 str.w r2, [lr], #4 - 8014492: d2de bcs.n 8014452 - 8014494: 9b00 ldr r3, [sp, #0] - 8014496: 58eb ldr r3, [r5, r3] - 8014498: b92b cbnz r3, 80144a6 - 801449a: 9b01 ldr r3, [sp, #4] - 801449c: 3b04 subs r3, #4 - 801449e: 429d cmp r5, r3 - 80144a0: 461a mov r2, r3 - 80144a2: d32f bcc.n 8014504 - 80144a4: 613c str r4, [r7, #16] - 80144a6: 4638 mov r0, r7 - 80144a8: f001 fc76 bl 8015d98 <__mcmp> - 80144ac: 2800 cmp r0, #0 - 80144ae: db25 blt.n 80144fc - 80144b0: 4629 mov r1, r5 - 80144b2: 2000 movs r0, #0 - 80144b4: f858 2b04 ldr.w r2, [r8], #4 - 80144b8: f8d1 c000 ldr.w ip, [r1] - 80144bc: fa1f fe82 uxth.w lr, r2 - 80144c0: fa1f f38c uxth.w r3, ip - 80144c4: eba3 030e sub.w r3, r3, lr - 80144c8: 4403 add r3, r0 - 80144ca: 0c12 lsrs r2, r2, #16 - 80144cc: ebc2 4223 rsb r2, r2, r3, asr #16 - 80144d0: eb02 421c add.w r2, r2, ip, lsr #16 - 80144d4: b29b uxth r3, r3 - 80144d6: ea43 4302 orr.w r3, r3, r2, lsl #16 - 80144da: 45c1 cmp r9, r8 - 80144dc: ea4f 4022 mov.w r0, r2, asr #16 - 80144e0: f841 3b04 str.w r3, [r1], #4 - 80144e4: d2e6 bcs.n 80144b4 - 80144e6: f855 2024 ldr.w r2, [r5, r4, lsl #2] - 80144ea: eb05 0384 add.w r3, r5, r4, lsl #2 - 80144ee: b922 cbnz r2, 80144fa - 80144f0: 3b04 subs r3, #4 - 80144f2: 429d cmp r5, r3 - 80144f4: 461a mov r2, r3 - 80144f6: d30b bcc.n 8014510 - 80144f8: 613c str r4, [r7, #16] - 80144fa: 3601 adds r6, #1 - 80144fc: 4630 mov r0, r6 - 80144fe: b003 add sp, #12 - 8014500: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8014504: 6812 ldr r2, [r2, #0] - 8014506: 3b04 subs r3, #4 - 8014508: 2a00 cmp r2, #0 - 801450a: d1cb bne.n 80144a4 - 801450c: 3c01 subs r4, #1 - 801450e: e7c6 b.n 801449e - 8014510: 6812 ldr r2, [r2, #0] - 8014512: 3b04 subs r3, #4 - 8014514: 2a00 cmp r2, #0 - 8014516: d1ef bne.n 80144f8 - 8014518: 3c01 subs r4, #1 - 801451a: e7ea b.n 80144f2 - 801451c: 2000 movs r0, #0 - 801451e: e7ee b.n 80144fe - -08014520 <_dtoa_r>: - 8014520: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8014524: 4614 mov r4, r2 - 8014526: 461d mov r5, r3 - 8014528: 69c7 ldr r7, [r0, #28] - 801452a: b097 sub sp, #92 @ 0x5c - 801452c: 4681 mov r9, r0 - 801452e: e9cd 4506 strd r4, r5, [sp, #24] - 8014532: 9e23 ldr r6, [sp, #140] @ 0x8c - 8014534: b97f cbnz r7, 8014556 <_dtoa_r+0x36> - 8014536: 2010 movs r0, #16 - 8014538: f001 f85e bl 80155f8 - 801453c: 4602 mov r2, r0 - 801453e: f8c9 001c str.w r0, [r9, #28] - 8014542: b920 cbnz r0, 801454e <_dtoa_r+0x2e> - 8014544: 21ef movs r1, #239 @ 0xef - 8014546: 4bac ldr r3, [pc, #688] @ (80147f8 <_dtoa_r+0x2d8>) - 8014548: 48ac ldr r0, [pc, #688] @ (80147fc <_dtoa_r+0x2dc>) - 801454a: f7ff ff43 bl 80143d4 <__assert_func> - 801454e: e9c0 7701 strd r7, r7, [r0, #4] - 8014552: 6007 str r7, [r0, #0] - 8014554: 60c7 str r7, [r0, #12] - 8014556: f8d9 301c ldr.w r3, [r9, #28] - 801455a: 6819 ldr r1, [r3, #0] - 801455c: b159 cbz r1, 8014576 <_dtoa_r+0x56> - 801455e: 685a ldr r2, [r3, #4] - 8014560: 2301 movs r3, #1 - 8014562: 4093 lsls r3, r2 - 8014564: 604a str r2, [r1, #4] - 8014566: 608b str r3, [r1, #8] - 8014568: 4648 mov r0, r9 - 801456a: f001 f9e3 bl 8015934 <_Bfree> - 801456e: 2200 movs r2, #0 - 8014570: f8d9 301c ldr.w r3, [r9, #28] - 8014574: 601a str r2, [r3, #0] - 8014576: 1e2b subs r3, r5, #0 - 8014578: bfaf iteee ge - 801457a: 2300 movge r3, #0 - 801457c: 2201 movlt r2, #1 - 801457e: f023 4300 biclt.w r3, r3, #2147483648 @ 0x80000000 - 8014582: 9307 strlt r3, [sp, #28] - 8014584: bfa8 it ge - 8014586: 6033 strge r3, [r6, #0] - 8014588: f8dd 801c ldr.w r8, [sp, #28] - 801458c: 4b9c ldr r3, [pc, #624] @ (8014800 <_dtoa_r+0x2e0>) - 801458e: bfb8 it lt - 8014590: 6032 strlt r2, [r6, #0] - 8014592: ea33 0308 bics.w r3, r3, r8 - 8014596: d112 bne.n 80145be <_dtoa_r+0x9e> - 8014598: f242 730f movw r3, #9999 @ 0x270f - 801459c: 9a22 ldr r2, [sp, #136] @ 0x88 - 801459e: 6013 str r3, [r2, #0] - 80145a0: f3c8 0313 ubfx r3, r8, #0, #20 - 80145a4: 4323 orrs r3, r4 - 80145a6: f000 855e beq.w 8015066 <_dtoa_r+0xb46> - 80145aa: 9b24 ldr r3, [sp, #144] @ 0x90 - 80145ac: f8df a254 ldr.w sl, [pc, #596] @ 8014804 <_dtoa_r+0x2e4> - 80145b0: 2b00 cmp r3, #0 - 80145b2: f000 8560 beq.w 8015076 <_dtoa_r+0xb56> - 80145b6: f10a 0303 add.w r3, sl, #3 - 80145ba: f000 bd5a b.w 8015072 <_dtoa_r+0xb52> - 80145be: e9dd 2306 ldrd r2, r3, [sp, #24] - 80145c2: e9cd 230c strd r2, r3, [sp, #48] @ 0x30 - 80145c6: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 - 80145ca: 2200 movs r2, #0 - 80145cc: 2300 movs r3, #0 - 80145ce: f7f4 fa57 bl 8008a80 <__aeabi_dcmpeq> - 80145d2: 4607 mov r7, r0 - 80145d4: b158 cbz r0, 80145ee <_dtoa_r+0xce> - 80145d6: 2301 movs r3, #1 - 80145d8: 9a22 ldr r2, [sp, #136] @ 0x88 - 80145da: 6013 str r3, [r2, #0] - 80145dc: 9b24 ldr r3, [sp, #144] @ 0x90 - 80145de: b113 cbz r3, 80145e6 <_dtoa_r+0xc6> - 80145e0: 4b89 ldr r3, [pc, #548] @ (8014808 <_dtoa_r+0x2e8>) - 80145e2: 9a24 ldr r2, [sp, #144] @ 0x90 - 80145e4: 6013 str r3, [r2, #0] - 80145e6: f8df a224 ldr.w sl, [pc, #548] @ 801480c <_dtoa_r+0x2ec> - 80145ea: f000 bd44 b.w 8015076 <_dtoa_r+0xb56> - 80145ee: ab14 add r3, sp, #80 @ 0x50 - 80145f0: 9301 str r3, [sp, #4] - 80145f2: ab15 add r3, sp, #84 @ 0x54 - 80145f4: 9300 str r3, [sp, #0] - 80145f6: 4648 mov r0, r9 - 80145f8: e9dd 230c ldrd r2, r3, [sp, #48] @ 0x30 - 80145fc: f001 fc7c bl 8015ef8 <__d2b> - 8014600: f3c8 560a ubfx r6, r8, #20, #11 - 8014604: 9003 str r0, [sp, #12] - 8014606: 2e00 cmp r6, #0 - 8014608: d078 beq.n 80146fc <_dtoa_r+0x1dc> - 801460a: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 - 801460e: 9b0d ldr r3, [sp, #52] @ 0x34 - 8014610: f2a6 36ff subw r6, r6, #1023 @ 0x3ff - 8014614: f3c3 0313 ubfx r3, r3, #0, #20 - 8014618: f043 537f orr.w r3, r3, #1069547520 @ 0x3fc00000 - 801461c: f443 1340 orr.w r3, r3, #3145728 @ 0x300000 - 8014620: 9712 str r7, [sp, #72] @ 0x48 - 8014622: 4619 mov r1, r3 - 8014624: 2200 movs r2, #0 - 8014626: 4b7a ldr r3, [pc, #488] @ (8014810 <_dtoa_r+0x2f0>) - 8014628: f7f3 fe0a bl 8008240 <__aeabi_dsub> - 801462c: a36c add r3, pc, #432 @ (adr r3, 80147e0 <_dtoa_r+0x2c0>) - 801462e: e9d3 2300 ldrd r2, r3, [r3] - 8014632: f7f3 ffbd bl 80085b0 <__aeabi_dmul> - 8014636: a36c add r3, pc, #432 @ (adr r3, 80147e8 <_dtoa_r+0x2c8>) - 8014638: e9d3 2300 ldrd r2, r3, [r3] - 801463c: f7f3 fe02 bl 8008244 <__adddf3> - 8014640: 4604 mov r4, r0 - 8014642: 4630 mov r0, r6 - 8014644: 460d mov r5, r1 - 8014646: f7f3 ff49 bl 80084dc <__aeabi_i2d> - 801464a: a369 add r3, pc, #420 @ (adr r3, 80147f0 <_dtoa_r+0x2d0>) - 801464c: e9d3 2300 ldrd r2, r3, [r3] - 8014650: f7f3 ffae bl 80085b0 <__aeabi_dmul> - 8014654: 4602 mov r2, r0 - 8014656: 460b mov r3, r1 - 8014658: 4620 mov r0, r4 - 801465a: 4629 mov r1, r5 - 801465c: f7f3 fdf2 bl 8008244 <__adddf3> - 8014660: 4604 mov r4, r0 - 8014662: 460d mov r5, r1 - 8014664: f7f4 fa54 bl 8008b10 <__aeabi_d2iz> - 8014668: 2200 movs r2, #0 - 801466a: 4607 mov r7, r0 - 801466c: 2300 movs r3, #0 - 801466e: 4620 mov r0, r4 - 8014670: 4629 mov r1, r5 - 8014672: f7f4 fa0f bl 8008a94 <__aeabi_dcmplt> - 8014676: b140 cbz r0, 801468a <_dtoa_r+0x16a> - 8014678: 4638 mov r0, r7 - 801467a: f7f3 ff2f bl 80084dc <__aeabi_i2d> - 801467e: 4622 mov r2, r4 - 8014680: 462b mov r3, r5 - 8014682: f7f4 f9fd bl 8008a80 <__aeabi_dcmpeq> - 8014686: b900 cbnz r0, 801468a <_dtoa_r+0x16a> - 8014688: 3f01 subs r7, #1 - 801468a: 2f16 cmp r7, #22 - 801468c: d854 bhi.n 8014738 <_dtoa_r+0x218> - 801468e: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 - 8014692: 4b60 ldr r3, [pc, #384] @ (8014814 <_dtoa_r+0x2f4>) - 8014694: eb03 03c7 add.w r3, r3, r7, lsl #3 - 8014698: e9d3 2300 ldrd r2, r3, [r3] - 801469c: f7f4 f9fa bl 8008a94 <__aeabi_dcmplt> - 80146a0: 2800 cmp r0, #0 - 80146a2: d04b beq.n 801473c <_dtoa_r+0x21c> - 80146a4: 2300 movs r3, #0 - 80146a6: 3f01 subs r7, #1 - 80146a8: 930f str r3, [sp, #60] @ 0x3c - 80146aa: 9b14 ldr r3, [sp, #80] @ 0x50 - 80146ac: 1b9b subs r3, r3, r6 - 80146ae: 1e5a subs r2, r3, #1 - 80146b0: bf49 itett mi - 80146b2: f1c3 0301 rsbmi r3, r3, #1 - 80146b6: 2300 movpl r3, #0 - 80146b8: 9304 strmi r3, [sp, #16] - 80146ba: 2300 movmi r3, #0 - 80146bc: 9209 str r2, [sp, #36] @ 0x24 - 80146be: bf54 ite pl - 80146c0: 9304 strpl r3, [sp, #16] - 80146c2: 9309 strmi r3, [sp, #36] @ 0x24 - 80146c4: 2f00 cmp r7, #0 - 80146c6: db3b blt.n 8014740 <_dtoa_r+0x220> - 80146c8: 9b09 ldr r3, [sp, #36] @ 0x24 - 80146ca: 970e str r7, [sp, #56] @ 0x38 - 80146cc: 443b add r3, r7 - 80146ce: 9309 str r3, [sp, #36] @ 0x24 - 80146d0: 2300 movs r3, #0 - 80146d2: 930a str r3, [sp, #40] @ 0x28 - 80146d4: 9b20 ldr r3, [sp, #128] @ 0x80 - 80146d6: 2b09 cmp r3, #9 - 80146d8: d865 bhi.n 80147a6 <_dtoa_r+0x286> - 80146da: 2b05 cmp r3, #5 - 80146dc: bfc4 itt gt - 80146de: 3b04 subgt r3, #4 - 80146e0: 9320 strgt r3, [sp, #128] @ 0x80 - 80146e2: 9b20 ldr r3, [sp, #128] @ 0x80 - 80146e4: bfc8 it gt - 80146e6: 2400 movgt r4, #0 - 80146e8: f1a3 0302 sub.w r3, r3, #2 - 80146ec: bfd8 it le - 80146ee: 2401 movle r4, #1 - 80146f0: 2b03 cmp r3, #3 - 80146f2: d864 bhi.n 80147be <_dtoa_r+0x29e> - 80146f4: e8df f003 tbb [pc, r3] - 80146f8: 2c385553 .word 0x2c385553 - 80146fc: e9dd 6314 ldrd r6, r3, [sp, #80] @ 0x50 - 8014700: 441e add r6, r3 - 8014702: f206 4332 addw r3, r6, #1074 @ 0x432 - 8014706: 2b20 cmp r3, #32 - 8014708: bfc1 itttt gt - 801470a: f1c3 0340 rsbgt r3, r3, #64 @ 0x40 - 801470e: fa08 f803 lslgt.w r8, r8, r3 - 8014712: f206 4312 addwgt r3, r6, #1042 @ 0x412 - 8014716: fa24 f303 lsrgt.w r3, r4, r3 - 801471a: bfd6 itet le - 801471c: f1c3 0320 rsble r3, r3, #32 - 8014720: ea48 0003 orrgt.w r0, r8, r3 - 8014724: fa04 f003 lslle.w r0, r4, r3 - 8014728: f7f3 fec8 bl 80084bc <__aeabi_ui2d> - 801472c: 2201 movs r2, #1 - 801472e: f1a1 73f8 sub.w r3, r1, #32505856 @ 0x1f00000 - 8014732: 3e01 subs r6, #1 - 8014734: 9212 str r2, [sp, #72] @ 0x48 - 8014736: e774 b.n 8014622 <_dtoa_r+0x102> - 8014738: 2301 movs r3, #1 - 801473a: e7b5 b.n 80146a8 <_dtoa_r+0x188> - 801473c: 900f str r0, [sp, #60] @ 0x3c - 801473e: e7b4 b.n 80146aa <_dtoa_r+0x18a> - 8014740: 9b04 ldr r3, [sp, #16] - 8014742: 1bdb subs r3, r3, r7 - 8014744: 9304 str r3, [sp, #16] - 8014746: 427b negs r3, r7 - 8014748: 930a str r3, [sp, #40] @ 0x28 - 801474a: 2300 movs r3, #0 - 801474c: 930e str r3, [sp, #56] @ 0x38 - 801474e: e7c1 b.n 80146d4 <_dtoa_r+0x1b4> - 8014750: 2301 movs r3, #1 - 8014752: 930b str r3, [sp, #44] @ 0x2c - 8014754: 9b21 ldr r3, [sp, #132] @ 0x84 - 8014756: eb07 0b03 add.w fp, r7, r3 - 801475a: f10b 0301 add.w r3, fp, #1 - 801475e: 2b01 cmp r3, #1 - 8014760: 9308 str r3, [sp, #32] - 8014762: bfb8 it lt - 8014764: 2301 movlt r3, #1 - 8014766: e006 b.n 8014776 <_dtoa_r+0x256> - 8014768: 2301 movs r3, #1 - 801476a: 930b str r3, [sp, #44] @ 0x2c - 801476c: 9b21 ldr r3, [sp, #132] @ 0x84 - 801476e: 2b00 cmp r3, #0 - 8014770: dd28 ble.n 80147c4 <_dtoa_r+0x2a4> - 8014772: 469b mov fp, r3 - 8014774: 9308 str r3, [sp, #32] - 8014776: 2100 movs r1, #0 - 8014778: 2204 movs r2, #4 - 801477a: f8d9 001c ldr.w r0, [r9, #28] - 801477e: f102 0514 add.w r5, r2, #20 - 8014782: 429d cmp r5, r3 - 8014784: d926 bls.n 80147d4 <_dtoa_r+0x2b4> - 8014786: 6041 str r1, [r0, #4] - 8014788: 4648 mov r0, r9 - 801478a: f001 f893 bl 80158b4 <_Balloc> - 801478e: 4682 mov sl, r0 - 8014790: 2800 cmp r0, #0 - 8014792: d143 bne.n 801481c <_dtoa_r+0x2fc> - 8014794: 4602 mov r2, r0 - 8014796: f240 11af movw r1, #431 @ 0x1af - 801479a: 4b1f ldr r3, [pc, #124] @ (8014818 <_dtoa_r+0x2f8>) - 801479c: e6d4 b.n 8014548 <_dtoa_r+0x28> - 801479e: 2300 movs r3, #0 - 80147a0: e7e3 b.n 801476a <_dtoa_r+0x24a> - 80147a2: 2300 movs r3, #0 - 80147a4: e7d5 b.n 8014752 <_dtoa_r+0x232> - 80147a6: 2401 movs r4, #1 - 80147a8: 2300 movs r3, #0 - 80147aa: 940b str r4, [sp, #44] @ 0x2c - 80147ac: 9320 str r3, [sp, #128] @ 0x80 - 80147ae: f04f 3bff mov.w fp, #4294967295 @ 0xffffffff - 80147b2: 2200 movs r2, #0 - 80147b4: 2312 movs r3, #18 - 80147b6: f8cd b020 str.w fp, [sp, #32] - 80147ba: 9221 str r2, [sp, #132] @ 0x84 - 80147bc: e7db b.n 8014776 <_dtoa_r+0x256> - 80147be: 2301 movs r3, #1 - 80147c0: 930b str r3, [sp, #44] @ 0x2c - 80147c2: e7f4 b.n 80147ae <_dtoa_r+0x28e> - 80147c4: f04f 0b01 mov.w fp, #1 - 80147c8: 465b mov r3, fp - 80147ca: f8cd b020 str.w fp, [sp, #32] - 80147ce: f8cd b084 str.w fp, [sp, #132] @ 0x84 - 80147d2: e7d0 b.n 8014776 <_dtoa_r+0x256> - 80147d4: 3101 adds r1, #1 - 80147d6: 0052 lsls r2, r2, #1 - 80147d8: e7d1 b.n 801477e <_dtoa_r+0x25e> - 80147da: bf00 nop - 80147dc: f3af 8000 nop.w - 80147e0: 636f4361 .word 0x636f4361 - 80147e4: 3fd287a7 .word 0x3fd287a7 - 80147e8: 8b60c8b3 .word 0x8b60c8b3 - 80147ec: 3fc68a28 .word 0x3fc68a28 - 80147f0: 509f79fb .word 0x509f79fb - 80147f4: 3fd34413 .word 0x3fd34413 - 80147f8: 08016da4 .word 0x08016da4 - 80147fc: 08016e5c .word 0x08016e5c - 8014800: 7ff00000 .word 0x7ff00000 - 8014804: 08016e58 .word 0x08016e58 - 8014808: 08016d81 .word 0x08016d81 - 801480c: 08016d80 .word 0x08016d80 - 8014810: 3ff80000 .word 0x3ff80000 - 8014814: 08016f70 .word 0x08016f70 - 8014818: 08016eb4 .word 0x08016eb4 - 801481c: f8d9 301c ldr.w r3, [r9, #28] - 8014820: 6018 str r0, [r3, #0] - 8014822: 9b08 ldr r3, [sp, #32] - 8014824: 2b0e cmp r3, #14 - 8014826: f200 80a1 bhi.w 801496c <_dtoa_r+0x44c> - 801482a: 2c00 cmp r4, #0 - 801482c: f000 809e beq.w 801496c <_dtoa_r+0x44c> - 8014830: 2f00 cmp r7, #0 - 8014832: dd33 ble.n 801489c <_dtoa_r+0x37c> - 8014834: 4b9c ldr r3, [pc, #624] @ (8014aa8 <_dtoa_r+0x588>) - 8014836: f007 020f and.w r2, r7, #15 - 801483a: eb03 03c2 add.w r3, r3, r2, lsl #3 - 801483e: 05f8 lsls r0, r7, #23 - 8014840: e9d3 3400 ldrd r3, r4, [r3] - 8014844: e9cd 3410 strd r3, r4, [sp, #64] @ 0x40 - 8014848: ea4f 1427 mov.w r4, r7, asr #4 - 801484c: d516 bpl.n 801487c <_dtoa_r+0x35c> - 801484e: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 - 8014852: 4b96 ldr r3, [pc, #600] @ (8014aac <_dtoa_r+0x58c>) - 8014854: 2603 movs r6, #3 - 8014856: e9d3 2308 ldrd r2, r3, [r3, #32] - 801485a: f7f3 ffd3 bl 8008804 <__aeabi_ddiv> - 801485e: e9cd 0106 strd r0, r1, [sp, #24] - 8014862: f004 040f and.w r4, r4, #15 - 8014866: 4d91 ldr r5, [pc, #580] @ (8014aac <_dtoa_r+0x58c>) - 8014868: b954 cbnz r4, 8014880 <_dtoa_r+0x360> - 801486a: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 - 801486e: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014872: f7f3 ffc7 bl 8008804 <__aeabi_ddiv> - 8014876: e9cd 0106 strd r0, r1, [sp, #24] - 801487a: e028 b.n 80148ce <_dtoa_r+0x3ae> - 801487c: 2602 movs r6, #2 - 801487e: e7f2 b.n 8014866 <_dtoa_r+0x346> - 8014880: 07e1 lsls r1, r4, #31 - 8014882: d508 bpl.n 8014896 <_dtoa_r+0x376> - 8014884: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 - 8014888: e9d5 2300 ldrd r2, r3, [r5] - 801488c: f7f3 fe90 bl 80085b0 <__aeabi_dmul> - 8014890: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 - 8014894: 3601 adds r6, #1 - 8014896: 1064 asrs r4, r4, #1 - 8014898: 3508 adds r5, #8 - 801489a: e7e5 b.n 8014868 <_dtoa_r+0x348> - 801489c: f000 80af beq.w 80149fe <_dtoa_r+0x4de> - 80148a0: e9dd 010c ldrd r0, r1, [sp, #48] @ 0x30 - 80148a4: 427c negs r4, r7 - 80148a6: 4b80 ldr r3, [pc, #512] @ (8014aa8 <_dtoa_r+0x588>) - 80148a8: f004 020f and.w r2, r4, #15 - 80148ac: eb03 03c2 add.w r3, r3, r2, lsl #3 - 80148b0: e9d3 2300 ldrd r2, r3, [r3] - 80148b4: f7f3 fe7c bl 80085b0 <__aeabi_dmul> - 80148b8: 2602 movs r6, #2 - 80148ba: 2300 movs r3, #0 - 80148bc: e9cd 0106 strd r0, r1, [sp, #24] - 80148c0: 4d7a ldr r5, [pc, #488] @ (8014aac <_dtoa_r+0x58c>) - 80148c2: 1124 asrs r4, r4, #4 - 80148c4: 2c00 cmp r4, #0 - 80148c6: f040 808f bne.w 80149e8 <_dtoa_r+0x4c8> - 80148ca: 2b00 cmp r3, #0 - 80148cc: d1d3 bne.n 8014876 <_dtoa_r+0x356> - 80148ce: e9dd 4506 ldrd r4, r5, [sp, #24] - 80148d2: 9b0f ldr r3, [sp, #60] @ 0x3c - 80148d4: 2b00 cmp r3, #0 - 80148d6: f000 8094 beq.w 8014a02 <_dtoa_r+0x4e2> - 80148da: 2200 movs r2, #0 - 80148dc: 4620 mov r0, r4 - 80148de: 4629 mov r1, r5 - 80148e0: 4b73 ldr r3, [pc, #460] @ (8014ab0 <_dtoa_r+0x590>) - 80148e2: f7f4 f8d7 bl 8008a94 <__aeabi_dcmplt> - 80148e6: 2800 cmp r0, #0 - 80148e8: f000 808b beq.w 8014a02 <_dtoa_r+0x4e2> - 80148ec: 9b08 ldr r3, [sp, #32] - 80148ee: 2b00 cmp r3, #0 - 80148f0: f000 8087 beq.w 8014a02 <_dtoa_r+0x4e2> - 80148f4: f1bb 0f00 cmp.w fp, #0 - 80148f8: dd34 ble.n 8014964 <_dtoa_r+0x444> - 80148fa: 4620 mov r0, r4 - 80148fc: 2200 movs r2, #0 - 80148fe: 4629 mov r1, r5 - 8014900: 4b6c ldr r3, [pc, #432] @ (8014ab4 <_dtoa_r+0x594>) - 8014902: f7f3 fe55 bl 80085b0 <__aeabi_dmul> - 8014906: 465c mov r4, fp - 8014908: e9cd 0106 strd r0, r1, [sp, #24] - 801490c: f107 38ff add.w r8, r7, #4294967295 @ 0xffffffff - 8014910: 3601 adds r6, #1 - 8014912: 4630 mov r0, r6 - 8014914: f7f3 fde2 bl 80084dc <__aeabi_i2d> - 8014918: e9dd 2306 ldrd r2, r3, [sp, #24] - 801491c: f7f3 fe48 bl 80085b0 <__aeabi_dmul> - 8014920: 2200 movs r2, #0 - 8014922: 4b65 ldr r3, [pc, #404] @ (8014ab8 <_dtoa_r+0x598>) - 8014924: f7f3 fc8e bl 8008244 <__adddf3> - 8014928: 4605 mov r5, r0 - 801492a: f1a1 7650 sub.w r6, r1, #54525952 @ 0x3400000 - 801492e: 2c00 cmp r4, #0 - 8014930: d16a bne.n 8014a08 <_dtoa_r+0x4e8> - 8014932: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014936: 2200 movs r2, #0 - 8014938: 4b60 ldr r3, [pc, #384] @ (8014abc <_dtoa_r+0x59c>) - 801493a: f7f3 fc81 bl 8008240 <__aeabi_dsub> - 801493e: 4602 mov r2, r0 - 8014940: 460b mov r3, r1 - 8014942: e9cd 2306 strd r2, r3, [sp, #24] - 8014946: 462a mov r2, r5 - 8014948: 4633 mov r3, r6 - 801494a: f7f4 f8c1 bl 8008ad0 <__aeabi_dcmpgt> - 801494e: 2800 cmp r0, #0 - 8014950: f040 8298 bne.w 8014e84 <_dtoa_r+0x964> - 8014954: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014958: 462a mov r2, r5 - 801495a: f106 4300 add.w r3, r6, #2147483648 @ 0x80000000 - 801495e: f7f4 f899 bl 8008a94 <__aeabi_dcmplt> - 8014962: bb38 cbnz r0, 80149b4 <_dtoa_r+0x494> - 8014964: e9dd 340c ldrd r3, r4, [sp, #48] @ 0x30 - 8014968: e9cd 3406 strd r3, r4, [sp, #24] - 801496c: 9b15 ldr r3, [sp, #84] @ 0x54 - 801496e: 2b00 cmp r3, #0 - 8014970: f2c0 8157 blt.w 8014c22 <_dtoa_r+0x702> - 8014974: 2f0e cmp r7, #14 - 8014976: f300 8154 bgt.w 8014c22 <_dtoa_r+0x702> - 801497a: 4b4b ldr r3, [pc, #300] @ (8014aa8 <_dtoa_r+0x588>) - 801497c: eb03 03c7 add.w r3, r3, r7, lsl #3 - 8014980: e9d3 3400 ldrd r3, r4, [r3] - 8014984: e9cd 3404 strd r3, r4, [sp, #16] - 8014988: 9b21 ldr r3, [sp, #132] @ 0x84 - 801498a: 2b00 cmp r3, #0 - 801498c: f280 80e5 bge.w 8014b5a <_dtoa_r+0x63a> - 8014990: 9b08 ldr r3, [sp, #32] - 8014992: 2b00 cmp r3, #0 - 8014994: f300 80e1 bgt.w 8014b5a <_dtoa_r+0x63a> - 8014998: d10c bne.n 80149b4 <_dtoa_r+0x494> - 801499a: e9dd 0104 ldrd r0, r1, [sp, #16] - 801499e: 2200 movs r2, #0 - 80149a0: 4b46 ldr r3, [pc, #280] @ (8014abc <_dtoa_r+0x59c>) - 80149a2: f7f3 fe05 bl 80085b0 <__aeabi_dmul> - 80149a6: e9dd 2306 ldrd r2, r3, [sp, #24] - 80149aa: f7f4 f887 bl 8008abc <__aeabi_dcmpge> - 80149ae: 2800 cmp r0, #0 - 80149b0: f000 8266 beq.w 8014e80 <_dtoa_r+0x960> - 80149b4: 2400 movs r4, #0 - 80149b6: 4625 mov r5, r4 - 80149b8: 9b21 ldr r3, [sp, #132] @ 0x84 - 80149ba: 4656 mov r6, sl - 80149bc: ea6f 0803 mvn.w r8, r3 - 80149c0: 2700 movs r7, #0 - 80149c2: 4621 mov r1, r4 - 80149c4: 4648 mov r0, r9 - 80149c6: f000 ffb5 bl 8015934 <_Bfree> - 80149ca: 2d00 cmp r5, #0 - 80149cc: f000 80bd beq.w 8014b4a <_dtoa_r+0x62a> - 80149d0: b12f cbz r7, 80149de <_dtoa_r+0x4be> - 80149d2: 42af cmp r7, r5 - 80149d4: d003 beq.n 80149de <_dtoa_r+0x4be> - 80149d6: 4639 mov r1, r7 - 80149d8: 4648 mov r0, r9 - 80149da: f000 ffab bl 8015934 <_Bfree> - 80149de: 4629 mov r1, r5 - 80149e0: 4648 mov r0, r9 - 80149e2: f000 ffa7 bl 8015934 <_Bfree> - 80149e6: e0b0 b.n 8014b4a <_dtoa_r+0x62a> - 80149e8: 07e2 lsls r2, r4, #31 - 80149ea: d505 bpl.n 80149f8 <_dtoa_r+0x4d8> - 80149ec: e9d5 2300 ldrd r2, r3, [r5] - 80149f0: f7f3 fdde bl 80085b0 <__aeabi_dmul> - 80149f4: 2301 movs r3, #1 - 80149f6: 3601 adds r6, #1 - 80149f8: 1064 asrs r4, r4, #1 - 80149fa: 3508 adds r5, #8 - 80149fc: e762 b.n 80148c4 <_dtoa_r+0x3a4> - 80149fe: 2602 movs r6, #2 - 8014a00: e765 b.n 80148ce <_dtoa_r+0x3ae> - 8014a02: 46b8 mov r8, r7 - 8014a04: 9c08 ldr r4, [sp, #32] - 8014a06: e784 b.n 8014912 <_dtoa_r+0x3f2> - 8014a08: 4b27 ldr r3, [pc, #156] @ (8014aa8 <_dtoa_r+0x588>) - 8014a0a: 990b ldr r1, [sp, #44] @ 0x2c - 8014a0c: eb03 03c4 add.w r3, r3, r4, lsl #3 - 8014a10: e953 2302 ldrd r2, r3, [r3, #-8] - 8014a14: 4454 add r4, sl - 8014a16: 2900 cmp r1, #0 - 8014a18: d054 beq.n 8014ac4 <_dtoa_r+0x5a4> - 8014a1a: 2000 movs r0, #0 - 8014a1c: 4928 ldr r1, [pc, #160] @ (8014ac0 <_dtoa_r+0x5a0>) - 8014a1e: f7f3 fef1 bl 8008804 <__aeabi_ddiv> - 8014a22: 4633 mov r3, r6 - 8014a24: 462a mov r2, r5 - 8014a26: f7f3 fc0b bl 8008240 <__aeabi_dsub> - 8014a2a: 4656 mov r6, sl - 8014a2c: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 - 8014a30: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014a34: f7f4 f86c bl 8008b10 <__aeabi_d2iz> - 8014a38: 4605 mov r5, r0 - 8014a3a: f7f3 fd4f bl 80084dc <__aeabi_i2d> - 8014a3e: 4602 mov r2, r0 - 8014a40: 460b mov r3, r1 - 8014a42: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014a46: f7f3 fbfb bl 8008240 <__aeabi_dsub> - 8014a4a: 4602 mov r2, r0 - 8014a4c: 460b mov r3, r1 - 8014a4e: 3530 adds r5, #48 @ 0x30 - 8014a50: e9cd 2306 strd r2, r3, [sp, #24] - 8014a54: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 - 8014a58: f806 5b01 strb.w r5, [r6], #1 - 8014a5c: f7f4 f81a bl 8008a94 <__aeabi_dcmplt> - 8014a60: 2800 cmp r0, #0 - 8014a62: d172 bne.n 8014b4a <_dtoa_r+0x62a> - 8014a64: e9dd 2306 ldrd r2, r3, [sp, #24] - 8014a68: 2000 movs r0, #0 - 8014a6a: 4911 ldr r1, [pc, #68] @ (8014ab0 <_dtoa_r+0x590>) - 8014a6c: f7f3 fbe8 bl 8008240 <__aeabi_dsub> - 8014a70: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 - 8014a74: f7f4 f80e bl 8008a94 <__aeabi_dcmplt> - 8014a78: 2800 cmp r0, #0 - 8014a7a: f040 80b4 bne.w 8014be6 <_dtoa_r+0x6c6> - 8014a7e: 42a6 cmp r6, r4 - 8014a80: f43f af70 beq.w 8014964 <_dtoa_r+0x444> - 8014a84: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 - 8014a88: 2200 movs r2, #0 - 8014a8a: 4b0a ldr r3, [pc, #40] @ (8014ab4 <_dtoa_r+0x594>) - 8014a8c: f7f3 fd90 bl 80085b0 <__aeabi_dmul> - 8014a90: 2200 movs r2, #0 - 8014a92: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 - 8014a96: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014a9a: 4b06 ldr r3, [pc, #24] @ (8014ab4 <_dtoa_r+0x594>) - 8014a9c: f7f3 fd88 bl 80085b0 <__aeabi_dmul> - 8014aa0: e9cd 0106 strd r0, r1, [sp, #24] - 8014aa4: e7c4 b.n 8014a30 <_dtoa_r+0x510> - 8014aa6: bf00 nop - 8014aa8: 08016f70 .word 0x08016f70 - 8014aac: 08016f48 .word 0x08016f48 - 8014ab0: 3ff00000 .word 0x3ff00000 - 8014ab4: 40240000 .word 0x40240000 - 8014ab8: 401c0000 .word 0x401c0000 - 8014abc: 40140000 .word 0x40140000 - 8014ac0: 3fe00000 .word 0x3fe00000 - 8014ac4: 4631 mov r1, r6 - 8014ac6: 4628 mov r0, r5 - 8014ac8: f7f3 fd72 bl 80085b0 <__aeabi_dmul> - 8014acc: 4656 mov r6, sl - 8014ace: e9cd 0110 strd r0, r1, [sp, #64] @ 0x40 - 8014ad2: 9413 str r4, [sp, #76] @ 0x4c - 8014ad4: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014ad8: f7f4 f81a bl 8008b10 <__aeabi_d2iz> - 8014adc: 4605 mov r5, r0 - 8014ade: f7f3 fcfd bl 80084dc <__aeabi_i2d> - 8014ae2: 4602 mov r2, r0 - 8014ae4: 460b mov r3, r1 - 8014ae6: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014aea: f7f3 fba9 bl 8008240 <__aeabi_dsub> - 8014aee: 4602 mov r2, r0 - 8014af0: 460b mov r3, r1 - 8014af2: 3530 adds r5, #48 @ 0x30 - 8014af4: f806 5b01 strb.w r5, [r6], #1 - 8014af8: 42a6 cmp r6, r4 - 8014afa: e9cd 2306 strd r2, r3, [sp, #24] - 8014afe: f04f 0200 mov.w r2, #0 - 8014b02: d124 bne.n 8014b4e <_dtoa_r+0x62e> - 8014b04: e9dd 0110 ldrd r0, r1, [sp, #64] @ 0x40 - 8014b08: 4bae ldr r3, [pc, #696] @ (8014dc4 <_dtoa_r+0x8a4>) - 8014b0a: f7f3 fb9b bl 8008244 <__adddf3> - 8014b0e: 4602 mov r2, r0 - 8014b10: 460b mov r3, r1 - 8014b12: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014b16: f7f3 ffdb bl 8008ad0 <__aeabi_dcmpgt> - 8014b1a: 2800 cmp r0, #0 - 8014b1c: d163 bne.n 8014be6 <_dtoa_r+0x6c6> - 8014b1e: e9dd 2310 ldrd r2, r3, [sp, #64] @ 0x40 - 8014b22: 2000 movs r0, #0 - 8014b24: 49a7 ldr r1, [pc, #668] @ (8014dc4 <_dtoa_r+0x8a4>) - 8014b26: f7f3 fb8b bl 8008240 <__aeabi_dsub> - 8014b2a: 4602 mov r2, r0 - 8014b2c: 460b mov r3, r1 - 8014b2e: e9dd 0106 ldrd r0, r1, [sp, #24] - 8014b32: f7f3 ffaf bl 8008a94 <__aeabi_dcmplt> - 8014b36: 2800 cmp r0, #0 - 8014b38: f43f af14 beq.w 8014964 <_dtoa_r+0x444> - 8014b3c: 9e13 ldr r6, [sp, #76] @ 0x4c - 8014b3e: 1e73 subs r3, r6, #1 - 8014b40: 9313 str r3, [sp, #76] @ 0x4c - 8014b42: f816 3c01 ldrb.w r3, [r6, #-1] - 8014b46: 2b30 cmp r3, #48 @ 0x30 - 8014b48: d0f8 beq.n 8014b3c <_dtoa_r+0x61c> - 8014b4a: 4647 mov r7, r8 - 8014b4c: e03b b.n 8014bc6 <_dtoa_r+0x6a6> - 8014b4e: 4b9e ldr r3, [pc, #632] @ (8014dc8 <_dtoa_r+0x8a8>) - 8014b50: f7f3 fd2e bl 80085b0 <__aeabi_dmul> - 8014b54: e9cd 0106 strd r0, r1, [sp, #24] - 8014b58: e7bc b.n 8014ad4 <_dtoa_r+0x5b4> - 8014b5a: 4656 mov r6, sl - 8014b5c: e9dd 4506 ldrd r4, r5, [sp, #24] - 8014b60: e9dd 2304 ldrd r2, r3, [sp, #16] - 8014b64: 4620 mov r0, r4 - 8014b66: 4629 mov r1, r5 - 8014b68: f7f3 fe4c bl 8008804 <__aeabi_ddiv> - 8014b6c: f7f3 ffd0 bl 8008b10 <__aeabi_d2iz> - 8014b70: 4680 mov r8, r0 - 8014b72: f7f3 fcb3 bl 80084dc <__aeabi_i2d> - 8014b76: e9dd 2304 ldrd r2, r3, [sp, #16] - 8014b7a: f7f3 fd19 bl 80085b0 <__aeabi_dmul> - 8014b7e: 4602 mov r2, r0 - 8014b80: 460b mov r3, r1 - 8014b82: 4620 mov r0, r4 - 8014b84: 4629 mov r1, r5 - 8014b86: f7f3 fb5b bl 8008240 <__aeabi_dsub> - 8014b8a: f108 0430 add.w r4, r8, #48 @ 0x30 - 8014b8e: 9d08 ldr r5, [sp, #32] - 8014b90: f806 4b01 strb.w r4, [r6], #1 - 8014b94: eba6 040a sub.w r4, r6, sl - 8014b98: 42a5 cmp r5, r4 - 8014b9a: 4602 mov r2, r0 - 8014b9c: 460b mov r3, r1 - 8014b9e: d133 bne.n 8014c08 <_dtoa_r+0x6e8> - 8014ba0: f7f3 fb50 bl 8008244 <__adddf3> - 8014ba4: e9dd 2304 ldrd r2, r3, [sp, #16] - 8014ba8: 4604 mov r4, r0 - 8014baa: 460d mov r5, r1 - 8014bac: f7f3 ff90 bl 8008ad0 <__aeabi_dcmpgt> - 8014bb0: b9c0 cbnz r0, 8014be4 <_dtoa_r+0x6c4> - 8014bb2: e9dd 2304 ldrd r2, r3, [sp, #16] - 8014bb6: 4620 mov r0, r4 - 8014bb8: 4629 mov r1, r5 - 8014bba: f7f3 ff61 bl 8008a80 <__aeabi_dcmpeq> - 8014bbe: b110 cbz r0, 8014bc6 <_dtoa_r+0x6a6> - 8014bc0: f018 0f01 tst.w r8, #1 - 8014bc4: d10e bne.n 8014be4 <_dtoa_r+0x6c4> - 8014bc6: 4648 mov r0, r9 - 8014bc8: 9903 ldr r1, [sp, #12] - 8014bca: f000 feb3 bl 8015934 <_Bfree> - 8014bce: 2300 movs r3, #0 - 8014bd0: 7033 strb r3, [r6, #0] - 8014bd2: 9b22 ldr r3, [sp, #136] @ 0x88 - 8014bd4: 3701 adds r7, #1 - 8014bd6: 601f str r7, [r3, #0] - 8014bd8: 9b24 ldr r3, [sp, #144] @ 0x90 - 8014bda: 2b00 cmp r3, #0 - 8014bdc: f000 824b beq.w 8015076 <_dtoa_r+0xb56> - 8014be0: 601e str r6, [r3, #0] - 8014be2: e248 b.n 8015076 <_dtoa_r+0xb56> - 8014be4: 46b8 mov r8, r7 - 8014be6: 4633 mov r3, r6 - 8014be8: 461e mov r6, r3 - 8014bea: f813 2d01 ldrb.w r2, [r3, #-1]! - 8014bee: 2a39 cmp r2, #57 @ 0x39 - 8014bf0: d106 bne.n 8014c00 <_dtoa_r+0x6e0> - 8014bf2: 459a cmp sl, r3 - 8014bf4: d1f8 bne.n 8014be8 <_dtoa_r+0x6c8> - 8014bf6: 2230 movs r2, #48 @ 0x30 - 8014bf8: f108 0801 add.w r8, r8, #1 - 8014bfc: f88a 2000 strb.w r2, [sl] - 8014c00: 781a ldrb r2, [r3, #0] - 8014c02: 3201 adds r2, #1 - 8014c04: 701a strb r2, [r3, #0] - 8014c06: e7a0 b.n 8014b4a <_dtoa_r+0x62a> - 8014c08: 2200 movs r2, #0 - 8014c0a: 4b6f ldr r3, [pc, #444] @ (8014dc8 <_dtoa_r+0x8a8>) - 8014c0c: f7f3 fcd0 bl 80085b0 <__aeabi_dmul> - 8014c10: 2200 movs r2, #0 - 8014c12: 2300 movs r3, #0 - 8014c14: 4604 mov r4, r0 - 8014c16: 460d mov r5, r1 - 8014c18: f7f3 ff32 bl 8008a80 <__aeabi_dcmpeq> - 8014c1c: 2800 cmp r0, #0 - 8014c1e: d09f beq.n 8014b60 <_dtoa_r+0x640> - 8014c20: e7d1 b.n 8014bc6 <_dtoa_r+0x6a6> - 8014c22: 9a0b ldr r2, [sp, #44] @ 0x2c - 8014c24: 2a00 cmp r2, #0 - 8014c26: f000 80ea beq.w 8014dfe <_dtoa_r+0x8de> - 8014c2a: 9a20 ldr r2, [sp, #128] @ 0x80 - 8014c2c: 2a01 cmp r2, #1 - 8014c2e: f300 80cd bgt.w 8014dcc <_dtoa_r+0x8ac> - 8014c32: 9a12 ldr r2, [sp, #72] @ 0x48 - 8014c34: 2a00 cmp r2, #0 - 8014c36: f000 80c1 beq.w 8014dbc <_dtoa_r+0x89c> - 8014c3a: f203 4333 addw r3, r3, #1075 @ 0x433 - 8014c3e: 9c0a ldr r4, [sp, #40] @ 0x28 - 8014c40: 9e04 ldr r6, [sp, #16] - 8014c42: 9a04 ldr r2, [sp, #16] - 8014c44: 2101 movs r1, #1 - 8014c46: 441a add r2, r3 - 8014c48: 9204 str r2, [sp, #16] - 8014c4a: 9a09 ldr r2, [sp, #36] @ 0x24 - 8014c4c: 4648 mov r0, r9 - 8014c4e: 441a add r2, r3 - 8014c50: 9209 str r2, [sp, #36] @ 0x24 - 8014c52: f000 ff23 bl 8015a9c <__i2b> - 8014c56: 4605 mov r5, r0 - 8014c58: b166 cbz r6, 8014c74 <_dtoa_r+0x754> - 8014c5a: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014c5c: 2b00 cmp r3, #0 - 8014c5e: dd09 ble.n 8014c74 <_dtoa_r+0x754> - 8014c60: 42b3 cmp r3, r6 - 8014c62: bfa8 it ge - 8014c64: 4633 movge r3, r6 - 8014c66: 9a04 ldr r2, [sp, #16] - 8014c68: 1af6 subs r6, r6, r3 - 8014c6a: 1ad2 subs r2, r2, r3 - 8014c6c: 9204 str r2, [sp, #16] - 8014c6e: 9a09 ldr r2, [sp, #36] @ 0x24 - 8014c70: 1ad3 subs r3, r2, r3 - 8014c72: 9309 str r3, [sp, #36] @ 0x24 - 8014c74: 9b0a ldr r3, [sp, #40] @ 0x28 - 8014c76: b30b cbz r3, 8014cbc <_dtoa_r+0x79c> - 8014c78: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014c7a: 2b00 cmp r3, #0 - 8014c7c: f000 80c6 beq.w 8014e0c <_dtoa_r+0x8ec> - 8014c80: 2c00 cmp r4, #0 - 8014c82: f000 80c0 beq.w 8014e06 <_dtoa_r+0x8e6> - 8014c86: 4629 mov r1, r5 - 8014c88: 4622 mov r2, r4 - 8014c8a: 4648 mov r0, r9 - 8014c8c: f000 ffbe bl 8015c0c <__pow5mult> - 8014c90: 9a03 ldr r2, [sp, #12] - 8014c92: 4601 mov r1, r0 - 8014c94: 4605 mov r5, r0 - 8014c96: 4648 mov r0, r9 - 8014c98: f000 ff16 bl 8015ac8 <__multiply> - 8014c9c: 9903 ldr r1, [sp, #12] - 8014c9e: 4680 mov r8, r0 - 8014ca0: 4648 mov r0, r9 - 8014ca2: f000 fe47 bl 8015934 <_Bfree> - 8014ca6: 9b0a ldr r3, [sp, #40] @ 0x28 - 8014ca8: 1b1b subs r3, r3, r4 - 8014caa: 930a str r3, [sp, #40] @ 0x28 - 8014cac: f000 80b1 beq.w 8014e12 <_dtoa_r+0x8f2> - 8014cb0: 4641 mov r1, r8 - 8014cb2: 9a0a ldr r2, [sp, #40] @ 0x28 - 8014cb4: 4648 mov r0, r9 - 8014cb6: f000 ffa9 bl 8015c0c <__pow5mult> - 8014cba: 9003 str r0, [sp, #12] - 8014cbc: 2101 movs r1, #1 - 8014cbe: 4648 mov r0, r9 - 8014cc0: f000 feec bl 8015a9c <__i2b> - 8014cc4: 9b0e ldr r3, [sp, #56] @ 0x38 - 8014cc6: 4604 mov r4, r0 - 8014cc8: 2b00 cmp r3, #0 - 8014cca: f000 81d8 beq.w 801507e <_dtoa_r+0xb5e> - 8014cce: 461a mov r2, r3 - 8014cd0: 4601 mov r1, r0 - 8014cd2: 4648 mov r0, r9 - 8014cd4: f000 ff9a bl 8015c0c <__pow5mult> - 8014cd8: 9b20 ldr r3, [sp, #128] @ 0x80 - 8014cda: 4604 mov r4, r0 - 8014cdc: 2b01 cmp r3, #1 - 8014cde: f300 809f bgt.w 8014e20 <_dtoa_r+0x900> - 8014ce2: 9b06 ldr r3, [sp, #24] - 8014ce4: 2b00 cmp r3, #0 - 8014ce6: f040 8097 bne.w 8014e18 <_dtoa_r+0x8f8> - 8014cea: 9b07 ldr r3, [sp, #28] - 8014cec: f3c3 0313 ubfx r3, r3, #0, #20 - 8014cf0: 2b00 cmp r3, #0 - 8014cf2: f040 8093 bne.w 8014e1c <_dtoa_r+0x8fc> - 8014cf6: 9b07 ldr r3, [sp, #28] - 8014cf8: f023 4300 bic.w r3, r3, #2147483648 @ 0x80000000 - 8014cfc: 0d1b lsrs r3, r3, #20 - 8014cfe: 051b lsls r3, r3, #20 - 8014d00: b133 cbz r3, 8014d10 <_dtoa_r+0x7f0> - 8014d02: 9b04 ldr r3, [sp, #16] - 8014d04: 3301 adds r3, #1 - 8014d06: 9304 str r3, [sp, #16] - 8014d08: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014d0a: 3301 adds r3, #1 - 8014d0c: 9309 str r3, [sp, #36] @ 0x24 - 8014d0e: 2301 movs r3, #1 - 8014d10: 930a str r3, [sp, #40] @ 0x28 - 8014d12: 9b0e ldr r3, [sp, #56] @ 0x38 - 8014d14: 2b00 cmp r3, #0 - 8014d16: f000 81b8 beq.w 801508a <_dtoa_r+0xb6a> - 8014d1a: 6923 ldr r3, [r4, #16] - 8014d1c: eb04 0383 add.w r3, r4, r3, lsl #2 - 8014d20: 6918 ldr r0, [r3, #16] - 8014d22: f000 fe6f bl 8015a04 <__hi0bits> - 8014d26: f1c0 0020 rsb r0, r0, #32 - 8014d2a: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014d2c: 4418 add r0, r3 - 8014d2e: f010 001f ands.w r0, r0, #31 - 8014d32: f000 8082 beq.w 8014e3a <_dtoa_r+0x91a> - 8014d36: f1c0 0320 rsb r3, r0, #32 - 8014d3a: 2b04 cmp r3, #4 - 8014d3c: dd73 ble.n 8014e26 <_dtoa_r+0x906> - 8014d3e: 9b04 ldr r3, [sp, #16] - 8014d40: f1c0 001c rsb r0, r0, #28 - 8014d44: 4403 add r3, r0 - 8014d46: 9304 str r3, [sp, #16] - 8014d48: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014d4a: 4406 add r6, r0 - 8014d4c: 4403 add r3, r0 - 8014d4e: 9309 str r3, [sp, #36] @ 0x24 - 8014d50: 9b04 ldr r3, [sp, #16] - 8014d52: 2b00 cmp r3, #0 - 8014d54: dd05 ble.n 8014d62 <_dtoa_r+0x842> - 8014d56: 461a mov r2, r3 - 8014d58: 4648 mov r0, r9 - 8014d5a: 9903 ldr r1, [sp, #12] - 8014d5c: f000 ffb0 bl 8015cc0 <__lshift> - 8014d60: 9003 str r0, [sp, #12] - 8014d62: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014d64: 2b00 cmp r3, #0 - 8014d66: dd05 ble.n 8014d74 <_dtoa_r+0x854> - 8014d68: 4621 mov r1, r4 - 8014d6a: 461a mov r2, r3 - 8014d6c: 4648 mov r0, r9 - 8014d6e: f000 ffa7 bl 8015cc0 <__lshift> - 8014d72: 4604 mov r4, r0 - 8014d74: 9b0f ldr r3, [sp, #60] @ 0x3c - 8014d76: 2b00 cmp r3, #0 - 8014d78: d061 beq.n 8014e3e <_dtoa_r+0x91e> - 8014d7a: 4621 mov r1, r4 - 8014d7c: 9803 ldr r0, [sp, #12] - 8014d7e: f001 f80b bl 8015d98 <__mcmp> - 8014d82: 2800 cmp r0, #0 - 8014d84: da5b bge.n 8014e3e <_dtoa_r+0x91e> - 8014d86: 2300 movs r3, #0 - 8014d88: 220a movs r2, #10 - 8014d8a: 4648 mov r0, r9 - 8014d8c: 9903 ldr r1, [sp, #12] - 8014d8e: f000 fdf3 bl 8015978 <__multadd> - 8014d92: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014d94: f107 38ff add.w r8, r7, #4294967295 @ 0xffffffff - 8014d98: 9003 str r0, [sp, #12] - 8014d9a: 2b00 cmp r3, #0 - 8014d9c: f000 8177 beq.w 801508e <_dtoa_r+0xb6e> - 8014da0: 4629 mov r1, r5 - 8014da2: 2300 movs r3, #0 - 8014da4: 220a movs r2, #10 - 8014da6: 4648 mov r0, r9 - 8014da8: f000 fde6 bl 8015978 <__multadd> - 8014dac: f1bb 0f00 cmp.w fp, #0 - 8014db0: 4605 mov r5, r0 - 8014db2: dc6f bgt.n 8014e94 <_dtoa_r+0x974> - 8014db4: 9b20 ldr r3, [sp, #128] @ 0x80 - 8014db6: 2b02 cmp r3, #2 - 8014db8: dc49 bgt.n 8014e4e <_dtoa_r+0x92e> - 8014dba: e06b b.n 8014e94 <_dtoa_r+0x974> - 8014dbc: 9b14 ldr r3, [sp, #80] @ 0x50 - 8014dbe: f1c3 0336 rsb r3, r3, #54 @ 0x36 - 8014dc2: e73c b.n 8014c3e <_dtoa_r+0x71e> - 8014dc4: 3fe00000 .word 0x3fe00000 - 8014dc8: 40240000 .word 0x40240000 - 8014dcc: 9b08 ldr r3, [sp, #32] - 8014dce: 1e5c subs r4, r3, #1 - 8014dd0: 9b0a ldr r3, [sp, #40] @ 0x28 - 8014dd2: 42a3 cmp r3, r4 - 8014dd4: db09 blt.n 8014dea <_dtoa_r+0x8ca> - 8014dd6: 1b1c subs r4, r3, r4 - 8014dd8: 9b08 ldr r3, [sp, #32] - 8014dda: 2b00 cmp r3, #0 - 8014ddc: f6bf af30 bge.w 8014c40 <_dtoa_r+0x720> - 8014de0: 9b04 ldr r3, [sp, #16] - 8014de2: 9a08 ldr r2, [sp, #32] - 8014de4: 1a9e subs r6, r3, r2 - 8014de6: 2300 movs r3, #0 - 8014de8: e72b b.n 8014c42 <_dtoa_r+0x722> - 8014dea: 9b0a ldr r3, [sp, #40] @ 0x28 - 8014dec: 9a0e ldr r2, [sp, #56] @ 0x38 - 8014dee: 1ae3 subs r3, r4, r3 - 8014df0: 441a add r2, r3 - 8014df2: 940a str r4, [sp, #40] @ 0x28 - 8014df4: 9e04 ldr r6, [sp, #16] - 8014df6: 2400 movs r4, #0 - 8014df8: 9b08 ldr r3, [sp, #32] - 8014dfa: 920e str r2, [sp, #56] @ 0x38 - 8014dfc: e721 b.n 8014c42 <_dtoa_r+0x722> - 8014dfe: 9c0a ldr r4, [sp, #40] @ 0x28 - 8014e00: 9e04 ldr r6, [sp, #16] - 8014e02: 9d0b ldr r5, [sp, #44] @ 0x2c - 8014e04: e728 b.n 8014c58 <_dtoa_r+0x738> - 8014e06: f8dd 800c ldr.w r8, [sp, #12] - 8014e0a: e751 b.n 8014cb0 <_dtoa_r+0x790> - 8014e0c: 9a0a ldr r2, [sp, #40] @ 0x28 - 8014e0e: 9903 ldr r1, [sp, #12] - 8014e10: e750 b.n 8014cb4 <_dtoa_r+0x794> - 8014e12: f8cd 800c str.w r8, [sp, #12] - 8014e16: e751 b.n 8014cbc <_dtoa_r+0x79c> - 8014e18: 2300 movs r3, #0 - 8014e1a: e779 b.n 8014d10 <_dtoa_r+0x7f0> - 8014e1c: 9b06 ldr r3, [sp, #24] - 8014e1e: e777 b.n 8014d10 <_dtoa_r+0x7f0> - 8014e20: 2300 movs r3, #0 - 8014e22: 930a str r3, [sp, #40] @ 0x28 - 8014e24: e779 b.n 8014d1a <_dtoa_r+0x7fa> - 8014e26: d093 beq.n 8014d50 <_dtoa_r+0x830> - 8014e28: 9a04 ldr r2, [sp, #16] - 8014e2a: 331c adds r3, #28 - 8014e2c: 441a add r2, r3 - 8014e2e: 9204 str r2, [sp, #16] - 8014e30: 9a09 ldr r2, [sp, #36] @ 0x24 - 8014e32: 441e add r6, r3 - 8014e34: 441a add r2, r3 - 8014e36: 9209 str r2, [sp, #36] @ 0x24 - 8014e38: e78a b.n 8014d50 <_dtoa_r+0x830> - 8014e3a: 4603 mov r3, r0 - 8014e3c: e7f4 b.n 8014e28 <_dtoa_r+0x908> - 8014e3e: 9b08 ldr r3, [sp, #32] - 8014e40: 46b8 mov r8, r7 - 8014e42: 2b00 cmp r3, #0 - 8014e44: dc20 bgt.n 8014e88 <_dtoa_r+0x968> - 8014e46: 469b mov fp, r3 - 8014e48: 9b20 ldr r3, [sp, #128] @ 0x80 - 8014e4a: 2b02 cmp r3, #2 - 8014e4c: dd1e ble.n 8014e8c <_dtoa_r+0x96c> - 8014e4e: f1bb 0f00 cmp.w fp, #0 - 8014e52: f47f adb1 bne.w 80149b8 <_dtoa_r+0x498> - 8014e56: 4621 mov r1, r4 - 8014e58: 465b mov r3, fp - 8014e5a: 2205 movs r2, #5 - 8014e5c: 4648 mov r0, r9 - 8014e5e: f000 fd8b bl 8015978 <__multadd> - 8014e62: 4601 mov r1, r0 - 8014e64: 4604 mov r4, r0 - 8014e66: 9803 ldr r0, [sp, #12] - 8014e68: f000 ff96 bl 8015d98 <__mcmp> - 8014e6c: 2800 cmp r0, #0 - 8014e6e: f77f ada3 ble.w 80149b8 <_dtoa_r+0x498> - 8014e72: 4656 mov r6, sl - 8014e74: 2331 movs r3, #49 @ 0x31 - 8014e76: f108 0801 add.w r8, r8, #1 - 8014e7a: f806 3b01 strb.w r3, [r6], #1 - 8014e7e: e59f b.n 80149c0 <_dtoa_r+0x4a0> - 8014e80: 46b8 mov r8, r7 - 8014e82: 9c08 ldr r4, [sp, #32] - 8014e84: 4625 mov r5, r4 - 8014e86: e7f4 b.n 8014e72 <_dtoa_r+0x952> - 8014e88: f8dd b020 ldr.w fp, [sp, #32] - 8014e8c: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014e8e: 2b00 cmp r3, #0 - 8014e90: f000 8101 beq.w 8015096 <_dtoa_r+0xb76> - 8014e94: 2e00 cmp r6, #0 - 8014e96: dd05 ble.n 8014ea4 <_dtoa_r+0x984> - 8014e98: 4629 mov r1, r5 - 8014e9a: 4632 mov r2, r6 - 8014e9c: 4648 mov r0, r9 - 8014e9e: f000 ff0f bl 8015cc0 <__lshift> - 8014ea2: 4605 mov r5, r0 - 8014ea4: 9b0a ldr r3, [sp, #40] @ 0x28 - 8014ea6: 2b00 cmp r3, #0 - 8014ea8: d05c beq.n 8014f64 <_dtoa_r+0xa44> - 8014eaa: 4648 mov r0, r9 - 8014eac: 6869 ldr r1, [r5, #4] - 8014eae: f000 fd01 bl 80158b4 <_Balloc> - 8014eb2: 4606 mov r6, r0 - 8014eb4: b928 cbnz r0, 8014ec2 <_dtoa_r+0x9a2> - 8014eb6: 4602 mov r2, r0 - 8014eb8: f240 21ef movw r1, #751 @ 0x2ef - 8014ebc: 4b80 ldr r3, [pc, #512] @ (80150c0 <_dtoa_r+0xba0>) - 8014ebe: f7ff bb43 b.w 8014548 <_dtoa_r+0x28> - 8014ec2: 692a ldr r2, [r5, #16] - 8014ec4: f105 010c add.w r1, r5, #12 - 8014ec8: 3202 adds r2, #2 - 8014eca: 0092 lsls r2, r2, #2 - 8014ecc: 300c adds r0, #12 - 8014ece: f7ff fa73 bl 80143b8 - 8014ed2: 2201 movs r2, #1 - 8014ed4: 4631 mov r1, r6 - 8014ed6: 4648 mov r0, r9 - 8014ed8: f000 fef2 bl 8015cc0 <__lshift> - 8014edc: 462f mov r7, r5 - 8014ede: 4605 mov r5, r0 - 8014ee0: f10a 0301 add.w r3, sl, #1 - 8014ee4: 9304 str r3, [sp, #16] - 8014ee6: eb0a 030b add.w r3, sl, fp - 8014eea: 930a str r3, [sp, #40] @ 0x28 - 8014eec: 9b06 ldr r3, [sp, #24] - 8014eee: f003 0301 and.w r3, r3, #1 - 8014ef2: 9309 str r3, [sp, #36] @ 0x24 - 8014ef4: 9b04 ldr r3, [sp, #16] - 8014ef6: 4621 mov r1, r4 - 8014ef8: 9803 ldr r0, [sp, #12] - 8014efa: f103 3bff add.w fp, r3, #4294967295 @ 0xffffffff - 8014efe: f7ff fa87 bl 8014410 - 8014f02: 4603 mov r3, r0 - 8014f04: 4639 mov r1, r7 - 8014f06: 3330 adds r3, #48 @ 0x30 - 8014f08: 9006 str r0, [sp, #24] - 8014f0a: 9803 ldr r0, [sp, #12] - 8014f0c: 930b str r3, [sp, #44] @ 0x2c - 8014f0e: f000 ff43 bl 8015d98 <__mcmp> - 8014f12: 462a mov r2, r5 - 8014f14: 9008 str r0, [sp, #32] - 8014f16: 4621 mov r1, r4 - 8014f18: 4648 mov r0, r9 - 8014f1a: f000 ff59 bl 8015dd0 <__mdiff> - 8014f1e: 68c2 ldr r2, [r0, #12] - 8014f20: 4606 mov r6, r0 - 8014f22: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014f24: bb02 cbnz r2, 8014f68 <_dtoa_r+0xa48> - 8014f26: 4601 mov r1, r0 - 8014f28: 9803 ldr r0, [sp, #12] - 8014f2a: f000 ff35 bl 8015d98 <__mcmp> - 8014f2e: 4602 mov r2, r0 - 8014f30: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014f32: 4631 mov r1, r6 - 8014f34: 4648 mov r0, r9 - 8014f36: e9cd 320b strd r3, r2, [sp, #44] @ 0x2c - 8014f3a: f000 fcfb bl 8015934 <_Bfree> - 8014f3e: 9b20 ldr r3, [sp, #128] @ 0x80 - 8014f40: 9a0c ldr r2, [sp, #48] @ 0x30 - 8014f42: 9e04 ldr r6, [sp, #16] - 8014f44: ea42 0103 orr.w r1, r2, r3 - 8014f48: 9b09 ldr r3, [sp, #36] @ 0x24 - 8014f4a: 4319 orrs r1, r3 - 8014f4c: 9b0b ldr r3, [sp, #44] @ 0x2c - 8014f4e: d10d bne.n 8014f6c <_dtoa_r+0xa4c> - 8014f50: 2b39 cmp r3, #57 @ 0x39 - 8014f52: d027 beq.n 8014fa4 <_dtoa_r+0xa84> - 8014f54: 9a08 ldr r2, [sp, #32] - 8014f56: 2a00 cmp r2, #0 - 8014f58: dd01 ble.n 8014f5e <_dtoa_r+0xa3e> - 8014f5a: 9b06 ldr r3, [sp, #24] - 8014f5c: 3331 adds r3, #49 @ 0x31 - 8014f5e: f88b 3000 strb.w r3, [fp] - 8014f62: e52e b.n 80149c2 <_dtoa_r+0x4a2> - 8014f64: 4628 mov r0, r5 - 8014f66: e7b9 b.n 8014edc <_dtoa_r+0x9bc> - 8014f68: 2201 movs r2, #1 - 8014f6a: e7e2 b.n 8014f32 <_dtoa_r+0xa12> - 8014f6c: 9908 ldr r1, [sp, #32] - 8014f6e: 2900 cmp r1, #0 - 8014f70: db04 blt.n 8014f7c <_dtoa_r+0xa5c> - 8014f72: 9820 ldr r0, [sp, #128] @ 0x80 - 8014f74: 4301 orrs r1, r0 - 8014f76: 9809 ldr r0, [sp, #36] @ 0x24 - 8014f78: 4301 orrs r1, r0 - 8014f7a: d120 bne.n 8014fbe <_dtoa_r+0xa9e> - 8014f7c: 2a00 cmp r2, #0 - 8014f7e: ddee ble.n 8014f5e <_dtoa_r+0xa3e> - 8014f80: 2201 movs r2, #1 - 8014f82: 9903 ldr r1, [sp, #12] - 8014f84: 4648 mov r0, r9 - 8014f86: 9304 str r3, [sp, #16] - 8014f88: f000 fe9a bl 8015cc0 <__lshift> - 8014f8c: 4621 mov r1, r4 - 8014f8e: 9003 str r0, [sp, #12] - 8014f90: f000 ff02 bl 8015d98 <__mcmp> - 8014f94: 2800 cmp r0, #0 - 8014f96: 9b04 ldr r3, [sp, #16] - 8014f98: dc02 bgt.n 8014fa0 <_dtoa_r+0xa80> - 8014f9a: d1e0 bne.n 8014f5e <_dtoa_r+0xa3e> - 8014f9c: 07da lsls r2, r3, #31 - 8014f9e: d5de bpl.n 8014f5e <_dtoa_r+0xa3e> - 8014fa0: 2b39 cmp r3, #57 @ 0x39 - 8014fa2: d1da bne.n 8014f5a <_dtoa_r+0xa3a> - 8014fa4: 2339 movs r3, #57 @ 0x39 - 8014fa6: f88b 3000 strb.w r3, [fp] - 8014faa: 4633 mov r3, r6 - 8014fac: 461e mov r6, r3 - 8014fae: f816 2c01 ldrb.w r2, [r6, #-1] - 8014fb2: 3b01 subs r3, #1 - 8014fb4: 2a39 cmp r2, #57 @ 0x39 - 8014fb6: d04e beq.n 8015056 <_dtoa_r+0xb36> - 8014fb8: 3201 adds r2, #1 - 8014fba: 701a strb r2, [r3, #0] - 8014fbc: e501 b.n 80149c2 <_dtoa_r+0x4a2> - 8014fbe: 2a00 cmp r2, #0 - 8014fc0: dd03 ble.n 8014fca <_dtoa_r+0xaaa> - 8014fc2: 2b39 cmp r3, #57 @ 0x39 - 8014fc4: d0ee beq.n 8014fa4 <_dtoa_r+0xa84> - 8014fc6: 3301 adds r3, #1 - 8014fc8: e7c9 b.n 8014f5e <_dtoa_r+0xa3e> - 8014fca: 9a04 ldr r2, [sp, #16] - 8014fcc: 990a ldr r1, [sp, #40] @ 0x28 - 8014fce: f802 3c01 strb.w r3, [r2, #-1] - 8014fd2: 428a cmp r2, r1 - 8014fd4: d028 beq.n 8015028 <_dtoa_r+0xb08> - 8014fd6: 2300 movs r3, #0 - 8014fd8: 220a movs r2, #10 - 8014fda: 9903 ldr r1, [sp, #12] - 8014fdc: 4648 mov r0, r9 - 8014fde: f000 fccb bl 8015978 <__multadd> - 8014fe2: 42af cmp r7, r5 - 8014fe4: 9003 str r0, [sp, #12] - 8014fe6: f04f 0300 mov.w r3, #0 - 8014fea: f04f 020a mov.w r2, #10 - 8014fee: 4639 mov r1, r7 - 8014ff0: 4648 mov r0, r9 - 8014ff2: d107 bne.n 8015004 <_dtoa_r+0xae4> - 8014ff4: f000 fcc0 bl 8015978 <__multadd> - 8014ff8: 4607 mov r7, r0 - 8014ffa: 4605 mov r5, r0 - 8014ffc: 9b04 ldr r3, [sp, #16] - 8014ffe: 3301 adds r3, #1 - 8015000: 9304 str r3, [sp, #16] - 8015002: e777 b.n 8014ef4 <_dtoa_r+0x9d4> - 8015004: f000 fcb8 bl 8015978 <__multadd> - 8015008: 4629 mov r1, r5 - 801500a: 4607 mov r7, r0 - 801500c: 2300 movs r3, #0 - 801500e: 220a movs r2, #10 - 8015010: 4648 mov r0, r9 - 8015012: f000 fcb1 bl 8015978 <__multadd> - 8015016: 4605 mov r5, r0 - 8015018: e7f0 b.n 8014ffc <_dtoa_r+0xadc> - 801501a: f1bb 0f00 cmp.w fp, #0 - 801501e: bfcc ite gt - 8015020: 465e movgt r6, fp - 8015022: 2601 movle r6, #1 - 8015024: 2700 movs r7, #0 - 8015026: 4456 add r6, sl - 8015028: 2201 movs r2, #1 - 801502a: 9903 ldr r1, [sp, #12] - 801502c: 4648 mov r0, r9 - 801502e: 9304 str r3, [sp, #16] - 8015030: f000 fe46 bl 8015cc0 <__lshift> - 8015034: 4621 mov r1, r4 - 8015036: 9003 str r0, [sp, #12] - 8015038: f000 feae bl 8015d98 <__mcmp> - 801503c: 2800 cmp r0, #0 - 801503e: dcb4 bgt.n 8014faa <_dtoa_r+0xa8a> - 8015040: d102 bne.n 8015048 <_dtoa_r+0xb28> - 8015042: 9b04 ldr r3, [sp, #16] - 8015044: 07db lsls r3, r3, #31 - 8015046: d4b0 bmi.n 8014faa <_dtoa_r+0xa8a> - 8015048: 4633 mov r3, r6 - 801504a: 461e mov r6, r3 - 801504c: f813 2d01 ldrb.w r2, [r3, #-1]! - 8015050: 2a30 cmp r2, #48 @ 0x30 - 8015052: d0fa beq.n 801504a <_dtoa_r+0xb2a> - 8015054: e4b5 b.n 80149c2 <_dtoa_r+0x4a2> - 8015056: 459a cmp sl, r3 - 8015058: d1a8 bne.n 8014fac <_dtoa_r+0xa8c> - 801505a: 2331 movs r3, #49 @ 0x31 - 801505c: f108 0801 add.w r8, r8, #1 - 8015060: f88a 3000 strb.w r3, [sl] - 8015064: e4ad b.n 80149c2 <_dtoa_r+0x4a2> - 8015066: 9b24 ldr r3, [sp, #144] @ 0x90 - 8015068: f8df a058 ldr.w sl, [pc, #88] @ 80150c4 <_dtoa_r+0xba4> - 801506c: b11b cbz r3, 8015076 <_dtoa_r+0xb56> - 801506e: f10a 0308 add.w r3, sl, #8 - 8015072: 9a24 ldr r2, [sp, #144] @ 0x90 - 8015074: 6013 str r3, [r2, #0] - 8015076: 4650 mov r0, sl - 8015078: b017 add sp, #92 @ 0x5c - 801507a: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 801507e: 9b20 ldr r3, [sp, #128] @ 0x80 - 8015080: 2b01 cmp r3, #1 - 8015082: f77f ae2e ble.w 8014ce2 <_dtoa_r+0x7c2> - 8015086: 9b0e ldr r3, [sp, #56] @ 0x38 - 8015088: 930a str r3, [sp, #40] @ 0x28 - 801508a: 2001 movs r0, #1 - 801508c: e64d b.n 8014d2a <_dtoa_r+0x80a> - 801508e: f1bb 0f00 cmp.w fp, #0 - 8015092: f77f aed9 ble.w 8014e48 <_dtoa_r+0x928> - 8015096: 4656 mov r6, sl - 8015098: 4621 mov r1, r4 - 801509a: 9803 ldr r0, [sp, #12] - 801509c: f7ff f9b8 bl 8014410 - 80150a0: f100 0330 add.w r3, r0, #48 @ 0x30 - 80150a4: f806 3b01 strb.w r3, [r6], #1 - 80150a8: eba6 020a sub.w r2, r6, sl - 80150ac: 4593 cmp fp, r2 - 80150ae: ddb4 ble.n 801501a <_dtoa_r+0xafa> - 80150b0: 2300 movs r3, #0 - 80150b2: 220a movs r2, #10 - 80150b4: 4648 mov r0, r9 - 80150b6: 9903 ldr r1, [sp, #12] - 80150b8: f000 fc5e bl 8015978 <__multadd> - 80150bc: 9003 str r0, [sp, #12] - 80150be: e7eb b.n 8015098 <_dtoa_r+0xb78> - 80150c0: 08016eb4 .word 0x08016eb4 - 80150c4: 08016e4f .word 0x08016e4f - -080150c8 <__ssputs_r>: - 80150c8: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 80150cc: 461f mov r7, r3 - 80150ce: 688e ldr r6, [r1, #8] - 80150d0: 4682 mov sl, r0 - 80150d2: 42be cmp r6, r7 - 80150d4: 460c mov r4, r1 - 80150d6: 4690 mov r8, r2 - 80150d8: 680b ldr r3, [r1, #0] - 80150da: d82d bhi.n 8015138 <__ssputs_r+0x70> - 80150dc: f9b1 200c ldrsh.w r2, [r1, #12] - 80150e0: f412 6f90 tst.w r2, #1152 @ 0x480 - 80150e4: d026 beq.n 8015134 <__ssputs_r+0x6c> - 80150e6: 6965 ldr r5, [r4, #20] - 80150e8: 6909 ldr r1, [r1, #16] - 80150ea: eb05 0545 add.w r5, r5, r5, lsl #1 - 80150ee: eba3 0901 sub.w r9, r3, r1 - 80150f2: eb05 75d5 add.w r5, r5, r5, lsr #31 - 80150f6: 1c7b adds r3, r7, #1 - 80150f8: 444b add r3, r9 - 80150fa: 106d asrs r5, r5, #1 - 80150fc: 429d cmp r5, r3 - 80150fe: bf38 it cc - 8015100: 461d movcc r5, r3 - 8015102: 0553 lsls r3, r2, #21 - 8015104: d527 bpl.n 8015156 <__ssputs_r+0x8e> - 8015106: 4629 mov r1, r5 - 8015108: f000 faa0 bl 801564c <_malloc_r> - 801510c: 4606 mov r6, r0 - 801510e: b360 cbz r0, 801516a <__ssputs_r+0xa2> - 8015110: 464a mov r2, r9 - 8015112: 6921 ldr r1, [r4, #16] - 8015114: f7ff f950 bl 80143b8 - 8015118: 89a3 ldrh r3, [r4, #12] - 801511a: f423 6390 bic.w r3, r3, #1152 @ 0x480 - 801511e: f043 0380 orr.w r3, r3, #128 @ 0x80 - 8015122: 81a3 strh r3, [r4, #12] - 8015124: 6126 str r6, [r4, #16] - 8015126: 444e add r6, r9 - 8015128: 6026 str r6, [r4, #0] - 801512a: 463e mov r6, r7 - 801512c: 6165 str r5, [r4, #20] - 801512e: eba5 0509 sub.w r5, r5, r9 - 8015132: 60a5 str r5, [r4, #8] - 8015134: 42be cmp r6, r7 - 8015136: d900 bls.n 801513a <__ssputs_r+0x72> - 8015138: 463e mov r6, r7 - 801513a: 4632 mov r2, r6 - 801513c: 4641 mov r1, r8 - 801513e: 6820 ldr r0, [r4, #0] - 8015140: f001 f8ab bl 801629a - 8015144: 2000 movs r0, #0 - 8015146: 68a3 ldr r3, [r4, #8] - 8015148: 1b9b subs r3, r3, r6 - 801514a: 60a3 str r3, [r4, #8] - 801514c: 6823 ldr r3, [r4, #0] - 801514e: 4433 add r3, r6 - 8015150: 6023 str r3, [r4, #0] - 8015152: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8015156: 462a mov r2, r5 - 8015158: f000 ff7c bl 8016054 <_realloc_r> - 801515c: 4606 mov r6, r0 - 801515e: 2800 cmp r0, #0 - 8015160: d1e0 bne.n 8015124 <__ssputs_r+0x5c> - 8015162: 4650 mov r0, sl - 8015164: 6921 ldr r1, [r4, #16] - 8015166: f001 f947 bl 80163f8 <_free_r> - 801516a: 230c movs r3, #12 - 801516c: f8ca 3000 str.w r3, [sl] - 8015170: 89a3 ldrh r3, [r4, #12] - 8015172: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8015176: f043 0340 orr.w r3, r3, #64 @ 0x40 - 801517a: 81a3 strh r3, [r4, #12] - 801517c: e7e9 b.n 8015152 <__ssputs_r+0x8a> - ... - -08015180 <_svfiprintf_r>: - 8015180: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8015184: 4698 mov r8, r3 - 8015186: 898b ldrh r3, [r1, #12] - 8015188: 4607 mov r7, r0 - 801518a: 061b lsls r3, r3, #24 - 801518c: 460d mov r5, r1 - 801518e: 4614 mov r4, r2 - 8015190: b09d sub sp, #116 @ 0x74 - 8015192: d510 bpl.n 80151b6 <_svfiprintf_r+0x36> - 8015194: 690b ldr r3, [r1, #16] - 8015196: b973 cbnz r3, 80151b6 <_svfiprintf_r+0x36> - 8015198: 2140 movs r1, #64 @ 0x40 - 801519a: f000 fa57 bl 801564c <_malloc_r> - 801519e: 6028 str r0, [r5, #0] - 80151a0: 6128 str r0, [r5, #16] - 80151a2: b930 cbnz r0, 80151b2 <_svfiprintf_r+0x32> - 80151a4: 230c movs r3, #12 - 80151a6: 603b str r3, [r7, #0] - 80151a8: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 80151ac: b01d add sp, #116 @ 0x74 - 80151ae: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 80151b2: 2340 movs r3, #64 @ 0x40 - 80151b4: 616b str r3, [r5, #20] - 80151b6: 2300 movs r3, #0 - 80151b8: 9309 str r3, [sp, #36] @ 0x24 - 80151ba: 2320 movs r3, #32 - 80151bc: f88d 3029 strb.w r3, [sp, #41] @ 0x29 - 80151c0: 2330 movs r3, #48 @ 0x30 - 80151c2: f04f 0901 mov.w r9, #1 - 80151c6: f8cd 800c str.w r8, [sp, #12] - 80151ca: f8df 8198 ldr.w r8, [pc, #408] @ 8015364 <_svfiprintf_r+0x1e4> - 80151ce: f88d 302a strb.w r3, [sp, #42] @ 0x2a - 80151d2: 4623 mov r3, r4 - 80151d4: 469a mov sl, r3 - 80151d6: f813 2b01 ldrb.w r2, [r3], #1 - 80151da: b10a cbz r2, 80151e0 <_svfiprintf_r+0x60> - 80151dc: 2a25 cmp r2, #37 @ 0x25 - 80151de: d1f9 bne.n 80151d4 <_svfiprintf_r+0x54> - 80151e0: ebba 0b04 subs.w fp, sl, r4 - 80151e4: d00b beq.n 80151fe <_svfiprintf_r+0x7e> - 80151e6: 465b mov r3, fp - 80151e8: 4622 mov r2, r4 - 80151ea: 4629 mov r1, r5 - 80151ec: 4638 mov r0, r7 - 80151ee: f7ff ff6b bl 80150c8 <__ssputs_r> - 80151f2: 3001 adds r0, #1 - 80151f4: f000 80a7 beq.w 8015346 <_svfiprintf_r+0x1c6> - 80151f8: 9a09 ldr r2, [sp, #36] @ 0x24 - 80151fa: 445a add r2, fp - 80151fc: 9209 str r2, [sp, #36] @ 0x24 - 80151fe: f89a 3000 ldrb.w r3, [sl] - 8015202: 2b00 cmp r3, #0 - 8015204: f000 809f beq.w 8015346 <_svfiprintf_r+0x1c6> - 8015208: 2300 movs r3, #0 - 801520a: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 801520e: e9cd 2305 strd r2, r3, [sp, #20] - 8015212: f10a 0a01 add.w sl, sl, #1 - 8015216: 9304 str r3, [sp, #16] - 8015218: 9307 str r3, [sp, #28] - 801521a: f88d 3053 strb.w r3, [sp, #83] @ 0x53 - 801521e: 931a str r3, [sp, #104] @ 0x68 - 8015220: 4654 mov r4, sl - 8015222: 2205 movs r2, #5 - 8015224: f814 1b01 ldrb.w r1, [r4], #1 - 8015228: 484e ldr r0, [pc, #312] @ (8015364 <_svfiprintf_r+0x1e4>) - 801522a: f7ff f8b7 bl 801439c - 801522e: 9a04 ldr r2, [sp, #16] - 8015230: b9d8 cbnz r0, 801526a <_svfiprintf_r+0xea> - 8015232: 06d0 lsls r0, r2, #27 - 8015234: bf44 itt mi - 8015236: 2320 movmi r3, #32 - 8015238: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 801523c: 0711 lsls r1, r2, #28 - 801523e: bf44 itt mi - 8015240: 232b movmi r3, #43 @ 0x2b - 8015242: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 8015246: f89a 3000 ldrb.w r3, [sl] - 801524a: 2b2a cmp r3, #42 @ 0x2a - 801524c: d015 beq.n 801527a <_svfiprintf_r+0xfa> - 801524e: 4654 mov r4, sl - 8015250: 2000 movs r0, #0 - 8015252: f04f 0c0a mov.w ip, #10 - 8015256: 9a07 ldr r2, [sp, #28] - 8015258: 4621 mov r1, r4 - 801525a: f811 3b01 ldrb.w r3, [r1], #1 - 801525e: 3b30 subs r3, #48 @ 0x30 - 8015260: 2b09 cmp r3, #9 - 8015262: d94b bls.n 80152fc <_svfiprintf_r+0x17c> - 8015264: b1b0 cbz r0, 8015294 <_svfiprintf_r+0x114> - 8015266: 9207 str r2, [sp, #28] - 8015268: e014 b.n 8015294 <_svfiprintf_r+0x114> - 801526a: eba0 0308 sub.w r3, r0, r8 - 801526e: fa09 f303 lsl.w r3, r9, r3 - 8015272: 4313 orrs r3, r2 - 8015274: 46a2 mov sl, r4 - 8015276: 9304 str r3, [sp, #16] - 8015278: e7d2 b.n 8015220 <_svfiprintf_r+0xa0> - 801527a: 9b03 ldr r3, [sp, #12] - 801527c: 1d19 adds r1, r3, #4 - 801527e: 681b ldr r3, [r3, #0] - 8015280: 9103 str r1, [sp, #12] - 8015282: 2b00 cmp r3, #0 - 8015284: bfbb ittet lt - 8015286: 425b neglt r3, r3 - 8015288: f042 0202 orrlt.w r2, r2, #2 - 801528c: 9307 strge r3, [sp, #28] - 801528e: 9307 strlt r3, [sp, #28] - 8015290: bfb8 it lt - 8015292: 9204 strlt r2, [sp, #16] - 8015294: 7823 ldrb r3, [r4, #0] - 8015296: 2b2e cmp r3, #46 @ 0x2e - 8015298: d10a bne.n 80152b0 <_svfiprintf_r+0x130> - 801529a: 7863 ldrb r3, [r4, #1] - 801529c: 2b2a cmp r3, #42 @ 0x2a - 801529e: d132 bne.n 8015306 <_svfiprintf_r+0x186> - 80152a0: 9b03 ldr r3, [sp, #12] - 80152a2: 3402 adds r4, #2 - 80152a4: 1d1a adds r2, r3, #4 - 80152a6: 681b ldr r3, [r3, #0] - 80152a8: 9203 str r2, [sp, #12] - 80152aa: ea43 73e3 orr.w r3, r3, r3, asr #31 - 80152ae: 9305 str r3, [sp, #20] - 80152b0: f8df a0b4 ldr.w sl, [pc, #180] @ 8015368 <_svfiprintf_r+0x1e8> - 80152b4: 2203 movs r2, #3 - 80152b6: 4650 mov r0, sl - 80152b8: 7821 ldrb r1, [r4, #0] - 80152ba: f7ff f86f bl 801439c - 80152be: b138 cbz r0, 80152d0 <_svfiprintf_r+0x150> - 80152c0: 2240 movs r2, #64 @ 0x40 - 80152c2: 9b04 ldr r3, [sp, #16] - 80152c4: eba0 000a sub.w r0, r0, sl - 80152c8: 4082 lsls r2, r0 - 80152ca: 4313 orrs r3, r2 - 80152cc: 3401 adds r4, #1 - 80152ce: 9304 str r3, [sp, #16] - 80152d0: f814 1b01 ldrb.w r1, [r4], #1 - 80152d4: 2206 movs r2, #6 - 80152d6: 4825 ldr r0, [pc, #148] @ (801536c <_svfiprintf_r+0x1ec>) - 80152d8: f88d 1028 strb.w r1, [sp, #40] @ 0x28 - 80152dc: f7ff f85e bl 801439c - 80152e0: 2800 cmp r0, #0 - 80152e2: d036 beq.n 8015352 <_svfiprintf_r+0x1d2> - 80152e4: 4b22 ldr r3, [pc, #136] @ (8015370 <_svfiprintf_r+0x1f0>) - 80152e6: bb1b cbnz r3, 8015330 <_svfiprintf_r+0x1b0> - 80152e8: 9b03 ldr r3, [sp, #12] - 80152ea: 3307 adds r3, #7 - 80152ec: f023 0307 bic.w r3, r3, #7 - 80152f0: 3308 adds r3, #8 - 80152f2: 9303 str r3, [sp, #12] - 80152f4: 9b09 ldr r3, [sp, #36] @ 0x24 - 80152f6: 4433 add r3, r6 - 80152f8: 9309 str r3, [sp, #36] @ 0x24 - 80152fa: e76a b.n 80151d2 <_svfiprintf_r+0x52> - 80152fc: 460c mov r4, r1 - 80152fe: 2001 movs r0, #1 - 8015300: fb0c 3202 mla r2, ip, r2, r3 - 8015304: e7a8 b.n 8015258 <_svfiprintf_r+0xd8> - 8015306: 2300 movs r3, #0 - 8015308: f04f 0c0a mov.w ip, #10 - 801530c: 4619 mov r1, r3 - 801530e: 3401 adds r4, #1 - 8015310: 9305 str r3, [sp, #20] - 8015312: 4620 mov r0, r4 - 8015314: f810 2b01 ldrb.w r2, [r0], #1 - 8015318: 3a30 subs r2, #48 @ 0x30 - 801531a: 2a09 cmp r2, #9 - 801531c: d903 bls.n 8015326 <_svfiprintf_r+0x1a6> - 801531e: 2b00 cmp r3, #0 - 8015320: d0c6 beq.n 80152b0 <_svfiprintf_r+0x130> - 8015322: 9105 str r1, [sp, #20] - 8015324: e7c4 b.n 80152b0 <_svfiprintf_r+0x130> - 8015326: 4604 mov r4, r0 - 8015328: 2301 movs r3, #1 - 801532a: fb0c 2101 mla r1, ip, r1, r2 - 801532e: e7f0 b.n 8015312 <_svfiprintf_r+0x192> - 8015330: ab03 add r3, sp, #12 - 8015332: 9300 str r3, [sp, #0] - 8015334: 462a mov r2, r5 - 8015336: 4638 mov r0, r7 - 8015338: 4b0e ldr r3, [pc, #56] @ (8015374 <_svfiprintf_r+0x1f4>) - 801533a: a904 add r1, sp, #16 - 801533c: f7fe fa62 bl 8013804 <_printf_float> - 8015340: 1c42 adds r2, r0, #1 - 8015342: 4606 mov r6, r0 - 8015344: d1d6 bne.n 80152f4 <_svfiprintf_r+0x174> - 8015346: 89ab ldrh r3, [r5, #12] - 8015348: 065b lsls r3, r3, #25 - 801534a: f53f af2d bmi.w 80151a8 <_svfiprintf_r+0x28> - 801534e: 9809 ldr r0, [sp, #36] @ 0x24 - 8015350: e72c b.n 80151ac <_svfiprintf_r+0x2c> - 8015352: ab03 add r3, sp, #12 - 8015354: 9300 str r3, [sp, #0] - 8015356: 462a mov r2, r5 - 8015358: 4638 mov r0, r7 - 801535a: 4b06 ldr r3, [pc, #24] @ (8015374 <_svfiprintf_r+0x1f4>) - 801535c: a904 add r1, sp, #16 - 801535e: f7fe fcef bl 8013d40 <_printf_i> - 8015362: e7ed b.n 8015340 <_svfiprintf_r+0x1c0> - 8015364: 08016ec5 .word 0x08016ec5 - 8015368: 08016ecb .word 0x08016ecb - 801536c: 08016ecf .word 0x08016ecf - 8015370: 08013805 .word 0x08013805 - 8015374: 080150c9 .word 0x080150c9 - -08015378 <__sfputc_r>: - 8015378: 6893 ldr r3, [r2, #8] - 801537a: b410 push {r4} - 801537c: 3b01 subs r3, #1 - 801537e: 2b00 cmp r3, #0 - 8015380: 6093 str r3, [r2, #8] - 8015382: da07 bge.n 8015394 <__sfputc_r+0x1c> - 8015384: 6994 ldr r4, [r2, #24] - 8015386: 42a3 cmp r3, r4 - 8015388: db01 blt.n 801538e <__sfputc_r+0x16> - 801538a: 290a cmp r1, #10 - 801538c: d102 bne.n 8015394 <__sfputc_r+0x1c> - 801538e: bc10 pop {r4} - 8015390: f000 be8e b.w 80160b0 <__swbuf_r> - 8015394: 6813 ldr r3, [r2, #0] - 8015396: 1c58 adds r0, r3, #1 - 8015398: 6010 str r0, [r2, #0] - 801539a: 7019 strb r1, [r3, #0] - 801539c: 4608 mov r0, r1 - 801539e: bc10 pop {r4} - 80153a0: 4770 bx lr - -080153a2 <__sfputs_r>: - 80153a2: b5f8 push {r3, r4, r5, r6, r7, lr} - 80153a4: 4606 mov r6, r0 - 80153a6: 460f mov r7, r1 - 80153a8: 4614 mov r4, r2 - 80153aa: 18d5 adds r5, r2, r3 - 80153ac: 42ac cmp r4, r5 - 80153ae: d101 bne.n 80153b4 <__sfputs_r+0x12> - 80153b0: 2000 movs r0, #0 - 80153b2: e007 b.n 80153c4 <__sfputs_r+0x22> - 80153b4: 463a mov r2, r7 - 80153b6: 4630 mov r0, r6 - 80153b8: f814 1b01 ldrb.w r1, [r4], #1 - 80153bc: f7ff ffdc bl 8015378 <__sfputc_r> - 80153c0: 1c43 adds r3, r0, #1 - 80153c2: d1f3 bne.n 80153ac <__sfputs_r+0xa> - 80153c4: bdf8 pop {r3, r4, r5, r6, r7, pc} - ... - -080153c8 <_vfiprintf_r>: - 80153c8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80153cc: 460d mov r5, r1 - 80153ce: 4614 mov r4, r2 - 80153d0: 4698 mov r8, r3 - 80153d2: 4606 mov r6, r0 - 80153d4: b09d sub sp, #116 @ 0x74 - 80153d6: b118 cbz r0, 80153e0 <_vfiprintf_r+0x18> - 80153d8: 6a03 ldr r3, [r0, #32] - 80153da: b90b cbnz r3, 80153e0 <_vfiprintf_r+0x18> - 80153dc: f7fe fe5a bl 8014094 <__sinit> - 80153e0: 6e6b ldr r3, [r5, #100] @ 0x64 - 80153e2: 07d9 lsls r1, r3, #31 - 80153e4: d405 bmi.n 80153f2 <_vfiprintf_r+0x2a> - 80153e6: 89ab ldrh r3, [r5, #12] - 80153e8: 059a lsls r2, r3, #22 - 80153ea: d402 bmi.n 80153f2 <_vfiprintf_r+0x2a> - 80153ec: 6da8 ldr r0, [r5, #88] @ 0x58 - 80153ee: f7fe ffce bl 801438e <__retarget_lock_acquire_recursive> - 80153f2: 89ab ldrh r3, [r5, #12] - 80153f4: 071b lsls r3, r3, #28 - 80153f6: d501 bpl.n 80153fc <_vfiprintf_r+0x34> - 80153f8: 692b ldr r3, [r5, #16] - 80153fa: b99b cbnz r3, 8015424 <_vfiprintf_r+0x5c> - 80153fc: 4629 mov r1, r5 - 80153fe: 4630 mov r0, r6 - 8015400: f000 fe94 bl 801612c <__swsetup_r> - 8015404: b170 cbz r0, 8015424 <_vfiprintf_r+0x5c> - 8015406: 6e6b ldr r3, [r5, #100] @ 0x64 - 8015408: 07dc lsls r4, r3, #31 - 801540a: d504 bpl.n 8015416 <_vfiprintf_r+0x4e> - 801540c: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8015410: b01d add sp, #116 @ 0x74 - 8015412: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8015416: 89ab ldrh r3, [r5, #12] - 8015418: 0598 lsls r0, r3, #22 - 801541a: d4f7 bmi.n 801540c <_vfiprintf_r+0x44> - 801541c: 6da8 ldr r0, [r5, #88] @ 0x58 - 801541e: f7fe ffb7 bl 8014390 <__retarget_lock_release_recursive> - 8015422: e7f3 b.n 801540c <_vfiprintf_r+0x44> - 8015424: 2300 movs r3, #0 - 8015426: 9309 str r3, [sp, #36] @ 0x24 - 8015428: 2320 movs r3, #32 - 801542a: f88d 3029 strb.w r3, [sp, #41] @ 0x29 - 801542e: 2330 movs r3, #48 @ 0x30 - 8015430: f04f 0901 mov.w r9, #1 - 8015434: f8cd 800c str.w r8, [sp, #12] - 8015438: f8df 81a8 ldr.w r8, [pc, #424] @ 80155e4 <_vfiprintf_r+0x21c> - 801543c: f88d 302a strb.w r3, [sp, #42] @ 0x2a - 8015440: 4623 mov r3, r4 - 8015442: 469a mov sl, r3 - 8015444: f813 2b01 ldrb.w r2, [r3], #1 - 8015448: b10a cbz r2, 801544e <_vfiprintf_r+0x86> - 801544a: 2a25 cmp r2, #37 @ 0x25 - 801544c: d1f9 bne.n 8015442 <_vfiprintf_r+0x7a> - 801544e: ebba 0b04 subs.w fp, sl, r4 - 8015452: d00b beq.n 801546c <_vfiprintf_r+0xa4> - 8015454: 465b mov r3, fp - 8015456: 4622 mov r2, r4 - 8015458: 4629 mov r1, r5 - 801545a: 4630 mov r0, r6 - 801545c: f7ff ffa1 bl 80153a2 <__sfputs_r> - 8015460: 3001 adds r0, #1 - 8015462: f000 80a7 beq.w 80155b4 <_vfiprintf_r+0x1ec> - 8015466: 9a09 ldr r2, [sp, #36] @ 0x24 - 8015468: 445a add r2, fp - 801546a: 9209 str r2, [sp, #36] @ 0x24 - 801546c: f89a 3000 ldrb.w r3, [sl] - 8015470: 2b00 cmp r3, #0 - 8015472: f000 809f beq.w 80155b4 <_vfiprintf_r+0x1ec> - 8015476: 2300 movs r3, #0 - 8015478: f04f 32ff mov.w r2, #4294967295 @ 0xffffffff - 801547c: e9cd 2305 strd r2, r3, [sp, #20] - 8015480: f10a 0a01 add.w sl, sl, #1 - 8015484: 9304 str r3, [sp, #16] - 8015486: 9307 str r3, [sp, #28] - 8015488: f88d 3053 strb.w r3, [sp, #83] @ 0x53 - 801548c: 931a str r3, [sp, #104] @ 0x68 - 801548e: 4654 mov r4, sl - 8015490: 2205 movs r2, #5 - 8015492: f814 1b01 ldrb.w r1, [r4], #1 - 8015496: 4853 ldr r0, [pc, #332] @ (80155e4 <_vfiprintf_r+0x21c>) - 8015498: f7fe ff80 bl 801439c - 801549c: 9a04 ldr r2, [sp, #16] - 801549e: b9d8 cbnz r0, 80154d8 <_vfiprintf_r+0x110> - 80154a0: 06d1 lsls r1, r2, #27 - 80154a2: bf44 itt mi - 80154a4: 2320 movmi r3, #32 - 80154a6: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 80154aa: 0713 lsls r3, r2, #28 - 80154ac: bf44 itt mi - 80154ae: 232b movmi r3, #43 @ 0x2b - 80154b0: f88d 3053 strbmi.w r3, [sp, #83] @ 0x53 - 80154b4: f89a 3000 ldrb.w r3, [sl] - 80154b8: 2b2a cmp r3, #42 @ 0x2a - 80154ba: d015 beq.n 80154e8 <_vfiprintf_r+0x120> - 80154bc: 4654 mov r4, sl - 80154be: 2000 movs r0, #0 - 80154c0: f04f 0c0a mov.w ip, #10 - 80154c4: 9a07 ldr r2, [sp, #28] - 80154c6: 4621 mov r1, r4 - 80154c8: f811 3b01 ldrb.w r3, [r1], #1 - 80154cc: 3b30 subs r3, #48 @ 0x30 - 80154ce: 2b09 cmp r3, #9 - 80154d0: d94b bls.n 801556a <_vfiprintf_r+0x1a2> - 80154d2: b1b0 cbz r0, 8015502 <_vfiprintf_r+0x13a> - 80154d4: 9207 str r2, [sp, #28] - 80154d6: e014 b.n 8015502 <_vfiprintf_r+0x13a> - 80154d8: eba0 0308 sub.w r3, r0, r8 - 80154dc: fa09 f303 lsl.w r3, r9, r3 - 80154e0: 4313 orrs r3, r2 - 80154e2: 46a2 mov sl, r4 - 80154e4: 9304 str r3, [sp, #16] - 80154e6: e7d2 b.n 801548e <_vfiprintf_r+0xc6> - 80154e8: 9b03 ldr r3, [sp, #12] - 80154ea: 1d19 adds r1, r3, #4 - 80154ec: 681b ldr r3, [r3, #0] - 80154ee: 9103 str r1, [sp, #12] - 80154f0: 2b00 cmp r3, #0 - 80154f2: bfbb ittet lt - 80154f4: 425b neglt r3, r3 - 80154f6: f042 0202 orrlt.w r2, r2, #2 - 80154fa: 9307 strge r3, [sp, #28] - 80154fc: 9307 strlt r3, [sp, #28] - 80154fe: bfb8 it lt - 8015500: 9204 strlt r2, [sp, #16] - 8015502: 7823 ldrb r3, [r4, #0] - 8015504: 2b2e cmp r3, #46 @ 0x2e - 8015506: d10a bne.n 801551e <_vfiprintf_r+0x156> - 8015508: 7863 ldrb r3, [r4, #1] - 801550a: 2b2a cmp r3, #42 @ 0x2a - 801550c: d132 bne.n 8015574 <_vfiprintf_r+0x1ac> - 801550e: 9b03 ldr r3, [sp, #12] - 8015510: 3402 adds r4, #2 - 8015512: 1d1a adds r2, r3, #4 - 8015514: 681b ldr r3, [r3, #0] - 8015516: 9203 str r2, [sp, #12] - 8015518: ea43 73e3 orr.w r3, r3, r3, asr #31 - 801551c: 9305 str r3, [sp, #20] - 801551e: f8df a0c8 ldr.w sl, [pc, #200] @ 80155e8 <_vfiprintf_r+0x220> - 8015522: 2203 movs r2, #3 - 8015524: 4650 mov r0, sl - 8015526: 7821 ldrb r1, [r4, #0] - 8015528: f7fe ff38 bl 801439c - 801552c: b138 cbz r0, 801553e <_vfiprintf_r+0x176> - 801552e: 2240 movs r2, #64 @ 0x40 - 8015530: 9b04 ldr r3, [sp, #16] - 8015532: eba0 000a sub.w r0, r0, sl - 8015536: 4082 lsls r2, r0 - 8015538: 4313 orrs r3, r2 - 801553a: 3401 adds r4, #1 - 801553c: 9304 str r3, [sp, #16] - 801553e: f814 1b01 ldrb.w r1, [r4], #1 - 8015542: 2206 movs r2, #6 - 8015544: 4829 ldr r0, [pc, #164] @ (80155ec <_vfiprintf_r+0x224>) - 8015546: f88d 1028 strb.w r1, [sp, #40] @ 0x28 - 801554a: f7fe ff27 bl 801439c - 801554e: 2800 cmp r0, #0 - 8015550: d03f beq.n 80155d2 <_vfiprintf_r+0x20a> - 8015552: 4b27 ldr r3, [pc, #156] @ (80155f0 <_vfiprintf_r+0x228>) - 8015554: bb1b cbnz r3, 801559e <_vfiprintf_r+0x1d6> - 8015556: 9b03 ldr r3, [sp, #12] - 8015558: 3307 adds r3, #7 - 801555a: f023 0307 bic.w r3, r3, #7 - 801555e: 3308 adds r3, #8 - 8015560: 9303 str r3, [sp, #12] - 8015562: 9b09 ldr r3, [sp, #36] @ 0x24 - 8015564: 443b add r3, r7 - 8015566: 9309 str r3, [sp, #36] @ 0x24 - 8015568: e76a b.n 8015440 <_vfiprintf_r+0x78> - 801556a: 460c mov r4, r1 - 801556c: 2001 movs r0, #1 - 801556e: fb0c 3202 mla r2, ip, r2, r3 - 8015572: e7a8 b.n 80154c6 <_vfiprintf_r+0xfe> - 8015574: 2300 movs r3, #0 - 8015576: f04f 0c0a mov.w ip, #10 - 801557a: 4619 mov r1, r3 - 801557c: 3401 adds r4, #1 - 801557e: 9305 str r3, [sp, #20] - 8015580: 4620 mov r0, r4 - 8015582: f810 2b01 ldrb.w r2, [r0], #1 - 8015586: 3a30 subs r2, #48 @ 0x30 - 8015588: 2a09 cmp r2, #9 - 801558a: d903 bls.n 8015594 <_vfiprintf_r+0x1cc> - 801558c: 2b00 cmp r3, #0 - 801558e: d0c6 beq.n 801551e <_vfiprintf_r+0x156> - 8015590: 9105 str r1, [sp, #20] - 8015592: e7c4 b.n 801551e <_vfiprintf_r+0x156> - 8015594: 4604 mov r4, r0 - 8015596: 2301 movs r3, #1 - 8015598: fb0c 2101 mla r1, ip, r1, r2 - 801559c: e7f0 b.n 8015580 <_vfiprintf_r+0x1b8> - 801559e: ab03 add r3, sp, #12 - 80155a0: 9300 str r3, [sp, #0] - 80155a2: 462a mov r2, r5 - 80155a4: 4630 mov r0, r6 - 80155a6: 4b13 ldr r3, [pc, #76] @ (80155f4 <_vfiprintf_r+0x22c>) - 80155a8: a904 add r1, sp, #16 - 80155aa: f7fe f92b bl 8013804 <_printf_float> - 80155ae: 4607 mov r7, r0 - 80155b0: 1c78 adds r0, r7, #1 - 80155b2: d1d6 bne.n 8015562 <_vfiprintf_r+0x19a> - 80155b4: 6e6b ldr r3, [r5, #100] @ 0x64 - 80155b6: 07d9 lsls r1, r3, #31 - 80155b8: d405 bmi.n 80155c6 <_vfiprintf_r+0x1fe> - 80155ba: 89ab ldrh r3, [r5, #12] - 80155bc: 059a lsls r2, r3, #22 - 80155be: d402 bmi.n 80155c6 <_vfiprintf_r+0x1fe> - 80155c0: 6da8 ldr r0, [r5, #88] @ 0x58 - 80155c2: f7fe fee5 bl 8014390 <__retarget_lock_release_recursive> - 80155c6: 89ab ldrh r3, [r5, #12] - 80155c8: 065b lsls r3, r3, #25 - 80155ca: f53f af1f bmi.w 801540c <_vfiprintf_r+0x44> - 80155ce: 9809 ldr r0, [sp, #36] @ 0x24 - 80155d0: e71e b.n 8015410 <_vfiprintf_r+0x48> - 80155d2: ab03 add r3, sp, #12 - 80155d4: 9300 str r3, [sp, #0] - 80155d6: 462a mov r2, r5 - 80155d8: 4630 mov r0, r6 - 80155da: 4b06 ldr r3, [pc, #24] @ (80155f4 <_vfiprintf_r+0x22c>) - 80155dc: a904 add r1, sp, #16 - 80155de: f7fe fbaf bl 8013d40 <_printf_i> - 80155e2: e7e4 b.n 80155ae <_vfiprintf_r+0x1e6> - 80155e4: 08016ec5 .word 0x08016ec5 - 80155e8: 08016ecb .word 0x08016ecb - 80155ec: 08016ecf .word 0x08016ecf - 80155f0: 08013805 .word 0x08013805 - 80155f4: 080153a3 .word 0x080153a3 - -080155f8 : - 80155f8: 4b02 ldr r3, [pc, #8] @ (8015604 ) - 80155fa: 4601 mov r1, r0 - 80155fc: 6818 ldr r0, [r3, #0] - 80155fe: f000 b825 b.w 801564c <_malloc_r> - 8015602: bf00 nop - 8015604: 20000090 .word 0x20000090 - -08015608 : - 8015608: b570 push {r4, r5, r6, lr} - 801560a: 4e0f ldr r6, [pc, #60] @ (8015648 ) - 801560c: 460c mov r4, r1 - 801560e: 6831 ldr r1, [r6, #0] - 8015610: 4605 mov r5, r0 - 8015612: b911 cbnz r1, 801561a - 8015614: f000 fe90 bl 8016338 <_sbrk_r> - 8015618: 6030 str r0, [r6, #0] - 801561a: 4621 mov r1, r4 - 801561c: 4628 mov r0, r5 - 801561e: f000 fe8b bl 8016338 <_sbrk_r> - 8015622: 1c43 adds r3, r0, #1 - 8015624: d103 bne.n 801562e - 8015626: f04f 34ff mov.w r4, #4294967295 @ 0xffffffff - 801562a: 4620 mov r0, r4 - 801562c: bd70 pop {r4, r5, r6, pc} - 801562e: 1cc4 adds r4, r0, #3 - 8015630: f024 0403 bic.w r4, r4, #3 - 8015634: 42a0 cmp r0, r4 - 8015636: d0f8 beq.n 801562a - 8015638: 1a21 subs r1, r4, r0 - 801563a: 4628 mov r0, r5 - 801563c: f000 fe7c bl 8016338 <_sbrk_r> - 8015640: 3001 adds r0, #1 - 8015642: d1f2 bne.n 801562a - 8015644: e7ef b.n 8015626 - 8015646: bf00 nop - 8015648: 200011d0 .word 0x200011d0 - -0801564c <_malloc_r>: - 801564c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8015650: 1ccd adds r5, r1, #3 - 8015652: f025 0503 bic.w r5, r5, #3 - 8015656: 3508 adds r5, #8 - 8015658: 2d0c cmp r5, #12 - 801565a: bf38 it cc - 801565c: 250c movcc r5, #12 - 801565e: 2d00 cmp r5, #0 - 8015660: 4606 mov r6, r0 - 8015662: db01 blt.n 8015668 <_malloc_r+0x1c> - 8015664: 42a9 cmp r1, r5 - 8015666: d904 bls.n 8015672 <_malloc_r+0x26> - 8015668: 230c movs r3, #12 - 801566a: 6033 str r3, [r6, #0] - 801566c: 2000 movs r0, #0 - 801566e: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 8015672: f8df 80d4 ldr.w r8, [pc, #212] @ 8015748 <_malloc_r+0xfc> - 8015676: f000 f911 bl 801589c <__malloc_lock> - 801567a: f8d8 3000 ldr.w r3, [r8] - 801567e: 461c mov r4, r3 - 8015680: bb44 cbnz r4, 80156d4 <_malloc_r+0x88> - 8015682: 4629 mov r1, r5 - 8015684: 4630 mov r0, r6 - 8015686: f7ff ffbf bl 8015608 - 801568a: 1c43 adds r3, r0, #1 - 801568c: 4604 mov r4, r0 - 801568e: d158 bne.n 8015742 <_malloc_r+0xf6> - 8015690: f8d8 4000 ldr.w r4, [r8] - 8015694: 4627 mov r7, r4 - 8015696: 2f00 cmp r7, #0 - 8015698: d143 bne.n 8015722 <_malloc_r+0xd6> - 801569a: 2c00 cmp r4, #0 - 801569c: d04b beq.n 8015736 <_malloc_r+0xea> - 801569e: 6823 ldr r3, [r4, #0] - 80156a0: 4639 mov r1, r7 - 80156a2: 4630 mov r0, r6 - 80156a4: eb04 0903 add.w r9, r4, r3 - 80156a8: f000 fe46 bl 8016338 <_sbrk_r> - 80156ac: 4581 cmp r9, r0 - 80156ae: d142 bne.n 8015736 <_malloc_r+0xea> - 80156b0: 6821 ldr r1, [r4, #0] - 80156b2: 4630 mov r0, r6 - 80156b4: 1a6d subs r5, r5, r1 - 80156b6: 4629 mov r1, r5 - 80156b8: f7ff ffa6 bl 8015608 - 80156bc: 3001 adds r0, #1 - 80156be: d03a beq.n 8015736 <_malloc_r+0xea> - 80156c0: 6823 ldr r3, [r4, #0] - 80156c2: 442b add r3, r5 - 80156c4: 6023 str r3, [r4, #0] - 80156c6: f8d8 3000 ldr.w r3, [r8] - 80156ca: 685a ldr r2, [r3, #4] - 80156cc: bb62 cbnz r2, 8015728 <_malloc_r+0xdc> - 80156ce: f8c8 7000 str.w r7, [r8] - 80156d2: e00f b.n 80156f4 <_malloc_r+0xa8> - 80156d4: 6822 ldr r2, [r4, #0] - 80156d6: 1b52 subs r2, r2, r5 - 80156d8: d420 bmi.n 801571c <_malloc_r+0xd0> - 80156da: 2a0b cmp r2, #11 - 80156dc: d917 bls.n 801570e <_malloc_r+0xc2> - 80156de: 1961 adds r1, r4, r5 - 80156e0: 42a3 cmp r3, r4 - 80156e2: 6025 str r5, [r4, #0] - 80156e4: bf18 it ne - 80156e6: 6059 strne r1, [r3, #4] - 80156e8: 6863 ldr r3, [r4, #4] - 80156ea: bf08 it eq - 80156ec: f8c8 1000 streq.w r1, [r8] - 80156f0: 5162 str r2, [r4, r5] - 80156f2: 604b str r3, [r1, #4] - 80156f4: 4630 mov r0, r6 - 80156f6: f000 f8d7 bl 80158a8 <__malloc_unlock> - 80156fa: f104 000b add.w r0, r4, #11 - 80156fe: 1d23 adds r3, r4, #4 - 8015700: f020 0007 bic.w r0, r0, #7 - 8015704: 1ac2 subs r2, r0, r3 - 8015706: bf1c itt ne - 8015708: 1a1b subne r3, r3, r0 - 801570a: 50a3 strne r3, [r4, r2] - 801570c: e7af b.n 801566e <_malloc_r+0x22> - 801570e: 6862 ldr r2, [r4, #4] - 8015710: 42a3 cmp r3, r4 - 8015712: bf0c ite eq - 8015714: f8c8 2000 streq.w r2, [r8] - 8015718: 605a strne r2, [r3, #4] - 801571a: e7eb b.n 80156f4 <_malloc_r+0xa8> - 801571c: 4623 mov r3, r4 - 801571e: 6864 ldr r4, [r4, #4] - 8015720: e7ae b.n 8015680 <_malloc_r+0x34> - 8015722: 463c mov r4, r7 - 8015724: 687f ldr r7, [r7, #4] - 8015726: e7b6 b.n 8015696 <_malloc_r+0x4a> - 8015728: 461a mov r2, r3 - 801572a: 685b ldr r3, [r3, #4] - 801572c: 42a3 cmp r3, r4 - 801572e: d1fb bne.n 8015728 <_malloc_r+0xdc> - 8015730: 2300 movs r3, #0 - 8015732: 6053 str r3, [r2, #4] - 8015734: e7de b.n 80156f4 <_malloc_r+0xa8> - 8015736: 230c movs r3, #12 - 8015738: 4630 mov r0, r6 - 801573a: 6033 str r3, [r6, #0] - 801573c: f000 f8b4 bl 80158a8 <__malloc_unlock> - 8015740: e794 b.n 801566c <_malloc_r+0x20> - 8015742: 6005 str r5, [r0, #0] - 8015744: e7d6 b.n 80156f4 <_malloc_r+0xa8> - 8015746: bf00 nop - 8015748: 200011d4 .word 0x200011d4 - -0801574c <__sflush_r>: - 801574c: f9b1 200c ldrsh.w r2, [r1, #12] - 8015750: b5f8 push {r3, r4, r5, r6, r7, lr} - 8015752: 0716 lsls r6, r2, #28 - 8015754: 4605 mov r5, r0 - 8015756: 460c mov r4, r1 - 8015758: d454 bmi.n 8015804 <__sflush_r+0xb8> - 801575a: 684b ldr r3, [r1, #4] - 801575c: 2b00 cmp r3, #0 - 801575e: dc02 bgt.n 8015766 <__sflush_r+0x1a> - 8015760: 6c0b ldr r3, [r1, #64] @ 0x40 - 8015762: 2b00 cmp r3, #0 - 8015764: dd48 ble.n 80157f8 <__sflush_r+0xac> - 8015766: 6ae6 ldr r6, [r4, #44] @ 0x2c - 8015768: 2e00 cmp r6, #0 - 801576a: d045 beq.n 80157f8 <__sflush_r+0xac> - 801576c: 2300 movs r3, #0 - 801576e: f412 5280 ands.w r2, r2, #4096 @ 0x1000 - 8015772: 682f ldr r7, [r5, #0] - 8015774: 6a21 ldr r1, [r4, #32] - 8015776: 602b str r3, [r5, #0] - 8015778: d030 beq.n 80157dc <__sflush_r+0x90> - 801577a: 6d62 ldr r2, [r4, #84] @ 0x54 - 801577c: 89a3 ldrh r3, [r4, #12] - 801577e: 0759 lsls r1, r3, #29 - 8015780: d505 bpl.n 801578e <__sflush_r+0x42> - 8015782: 6863 ldr r3, [r4, #4] - 8015784: 1ad2 subs r2, r2, r3 - 8015786: 6b63 ldr r3, [r4, #52] @ 0x34 - 8015788: b10b cbz r3, 801578e <__sflush_r+0x42> - 801578a: 6c23 ldr r3, [r4, #64] @ 0x40 - 801578c: 1ad2 subs r2, r2, r3 - 801578e: 2300 movs r3, #0 - 8015790: 4628 mov r0, r5 - 8015792: 6ae6 ldr r6, [r4, #44] @ 0x2c - 8015794: 6a21 ldr r1, [r4, #32] - 8015796: 47b0 blx r6 - 8015798: 1c43 adds r3, r0, #1 - 801579a: 89a3 ldrh r3, [r4, #12] - 801579c: d106 bne.n 80157ac <__sflush_r+0x60> - 801579e: 6829 ldr r1, [r5, #0] - 80157a0: 291d cmp r1, #29 - 80157a2: d82b bhi.n 80157fc <__sflush_r+0xb0> - 80157a4: 4a28 ldr r2, [pc, #160] @ (8015848 <__sflush_r+0xfc>) - 80157a6: 40ca lsrs r2, r1 - 80157a8: 07d6 lsls r6, r2, #31 - 80157aa: d527 bpl.n 80157fc <__sflush_r+0xb0> - 80157ac: 2200 movs r2, #0 - 80157ae: 6062 str r2, [r4, #4] - 80157b0: 6922 ldr r2, [r4, #16] - 80157b2: 04d9 lsls r1, r3, #19 - 80157b4: 6022 str r2, [r4, #0] - 80157b6: d504 bpl.n 80157c2 <__sflush_r+0x76> - 80157b8: 1c42 adds r2, r0, #1 - 80157ba: d101 bne.n 80157c0 <__sflush_r+0x74> - 80157bc: 682b ldr r3, [r5, #0] - 80157be: b903 cbnz r3, 80157c2 <__sflush_r+0x76> - 80157c0: 6560 str r0, [r4, #84] @ 0x54 - 80157c2: 6b61 ldr r1, [r4, #52] @ 0x34 - 80157c4: 602f str r7, [r5, #0] - 80157c6: b1b9 cbz r1, 80157f8 <__sflush_r+0xac> - 80157c8: f104 0344 add.w r3, r4, #68 @ 0x44 - 80157cc: 4299 cmp r1, r3 - 80157ce: d002 beq.n 80157d6 <__sflush_r+0x8a> - 80157d0: 4628 mov r0, r5 - 80157d2: f000 fe11 bl 80163f8 <_free_r> - 80157d6: 2300 movs r3, #0 - 80157d8: 6363 str r3, [r4, #52] @ 0x34 - 80157da: e00d b.n 80157f8 <__sflush_r+0xac> - 80157dc: 2301 movs r3, #1 - 80157de: 4628 mov r0, r5 - 80157e0: 47b0 blx r6 - 80157e2: 4602 mov r2, r0 - 80157e4: 1c50 adds r0, r2, #1 - 80157e6: d1c9 bne.n 801577c <__sflush_r+0x30> - 80157e8: 682b ldr r3, [r5, #0] - 80157ea: 2b00 cmp r3, #0 - 80157ec: d0c6 beq.n 801577c <__sflush_r+0x30> - 80157ee: 2b1d cmp r3, #29 - 80157f0: d001 beq.n 80157f6 <__sflush_r+0xaa> - 80157f2: 2b16 cmp r3, #22 - 80157f4: d11d bne.n 8015832 <__sflush_r+0xe6> - 80157f6: 602f str r7, [r5, #0] - 80157f8: 2000 movs r0, #0 - 80157fa: e021 b.n 8015840 <__sflush_r+0xf4> - 80157fc: f043 0340 orr.w r3, r3, #64 @ 0x40 - 8015800: b21b sxth r3, r3 - 8015802: e01a b.n 801583a <__sflush_r+0xee> - 8015804: 690f ldr r7, [r1, #16] - 8015806: 2f00 cmp r7, #0 - 8015808: d0f6 beq.n 80157f8 <__sflush_r+0xac> - 801580a: 0793 lsls r3, r2, #30 - 801580c: bf18 it ne - 801580e: 2300 movne r3, #0 - 8015810: 680e ldr r6, [r1, #0] - 8015812: bf08 it eq - 8015814: 694b ldreq r3, [r1, #20] - 8015816: 1bf6 subs r6, r6, r7 - 8015818: 600f str r7, [r1, #0] - 801581a: 608b str r3, [r1, #8] - 801581c: 2e00 cmp r6, #0 - 801581e: ddeb ble.n 80157f8 <__sflush_r+0xac> - 8015820: 4633 mov r3, r6 - 8015822: 463a mov r2, r7 - 8015824: 4628 mov r0, r5 - 8015826: 6a21 ldr r1, [r4, #32] - 8015828: f8d4 c028 ldr.w ip, [r4, #40] @ 0x28 - 801582c: 47e0 blx ip - 801582e: 2800 cmp r0, #0 - 8015830: dc07 bgt.n 8015842 <__sflush_r+0xf6> - 8015832: f9b4 300c ldrsh.w r3, [r4, #12] - 8015836: f043 0340 orr.w r3, r3, #64 @ 0x40 - 801583a: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 801583e: 81a3 strh r3, [r4, #12] - 8015840: bdf8 pop {r3, r4, r5, r6, r7, pc} - 8015842: 4407 add r7, r0 - 8015844: 1a36 subs r6, r6, r0 - 8015846: e7e9 b.n 801581c <__sflush_r+0xd0> - 8015848: 20400001 .word 0x20400001 - -0801584c <_fflush_r>: - 801584c: b538 push {r3, r4, r5, lr} - 801584e: 690b ldr r3, [r1, #16] - 8015850: 4605 mov r5, r0 - 8015852: 460c mov r4, r1 - 8015854: b913 cbnz r3, 801585c <_fflush_r+0x10> - 8015856: 2500 movs r5, #0 - 8015858: 4628 mov r0, r5 - 801585a: bd38 pop {r3, r4, r5, pc} - 801585c: b118 cbz r0, 8015866 <_fflush_r+0x1a> - 801585e: 6a03 ldr r3, [r0, #32] - 8015860: b90b cbnz r3, 8015866 <_fflush_r+0x1a> - 8015862: f7fe fc17 bl 8014094 <__sinit> - 8015866: f9b4 300c ldrsh.w r3, [r4, #12] - 801586a: 2b00 cmp r3, #0 - 801586c: d0f3 beq.n 8015856 <_fflush_r+0xa> - 801586e: 6e62 ldr r2, [r4, #100] @ 0x64 - 8015870: 07d0 lsls r0, r2, #31 - 8015872: d404 bmi.n 801587e <_fflush_r+0x32> - 8015874: 0599 lsls r1, r3, #22 - 8015876: d402 bmi.n 801587e <_fflush_r+0x32> - 8015878: 6da0 ldr r0, [r4, #88] @ 0x58 - 801587a: f7fe fd88 bl 801438e <__retarget_lock_acquire_recursive> - 801587e: 4628 mov r0, r5 - 8015880: 4621 mov r1, r4 - 8015882: f7ff ff63 bl 801574c <__sflush_r> - 8015886: 6e63 ldr r3, [r4, #100] @ 0x64 - 8015888: 4605 mov r5, r0 - 801588a: 07da lsls r2, r3, #31 - 801588c: d4e4 bmi.n 8015858 <_fflush_r+0xc> - 801588e: 89a3 ldrh r3, [r4, #12] - 8015890: 059b lsls r3, r3, #22 - 8015892: d4e1 bmi.n 8015858 <_fflush_r+0xc> - 8015894: 6da0 ldr r0, [r4, #88] @ 0x58 - 8015896: f7fe fd7b bl 8014390 <__retarget_lock_release_recursive> - 801589a: e7dd b.n 8015858 <_fflush_r+0xc> - -0801589c <__malloc_lock>: - 801589c: 4801 ldr r0, [pc, #4] @ (80158a4 <__malloc_lock+0x8>) - 801589e: f7fe bd76 b.w 801438e <__retarget_lock_acquire_recursive> - 80158a2: bf00 nop - 80158a4: 200011cc .word 0x200011cc - -080158a8 <__malloc_unlock>: - 80158a8: 4801 ldr r0, [pc, #4] @ (80158b0 <__malloc_unlock+0x8>) - 80158aa: f7fe bd71 b.w 8014390 <__retarget_lock_release_recursive> - 80158ae: bf00 nop - 80158b0: 200011cc .word 0x200011cc - -080158b4 <_Balloc>: - 80158b4: b570 push {r4, r5, r6, lr} - 80158b6: 69c6 ldr r6, [r0, #28] - 80158b8: 4604 mov r4, r0 - 80158ba: 460d mov r5, r1 - 80158bc: b976 cbnz r6, 80158dc <_Balloc+0x28> - 80158be: 2010 movs r0, #16 - 80158c0: f7ff fe9a bl 80155f8 - 80158c4: 4602 mov r2, r0 - 80158c6: 61e0 str r0, [r4, #28] - 80158c8: b920 cbnz r0, 80158d4 <_Balloc+0x20> - 80158ca: 216b movs r1, #107 @ 0x6b - 80158cc: 4b17 ldr r3, [pc, #92] @ (801592c <_Balloc+0x78>) - 80158ce: 4818 ldr r0, [pc, #96] @ (8015930 <_Balloc+0x7c>) - 80158d0: f7fe fd80 bl 80143d4 <__assert_func> - 80158d4: e9c0 6601 strd r6, r6, [r0, #4] - 80158d8: 6006 str r6, [r0, #0] - 80158da: 60c6 str r6, [r0, #12] - 80158dc: 69e6 ldr r6, [r4, #28] - 80158de: 68f3 ldr r3, [r6, #12] - 80158e0: b183 cbz r3, 8015904 <_Balloc+0x50> - 80158e2: 69e3 ldr r3, [r4, #28] - 80158e4: 68db ldr r3, [r3, #12] - 80158e6: f853 0025 ldr.w r0, [r3, r5, lsl #2] - 80158ea: b9b8 cbnz r0, 801591c <_Balloc+0x68> - 80158ec: 2101 movs r1, #1 - 80158ee: fa01 f605 lsl.w r6, r1, r5 - 80158f2: 1d72 adds r2, r6, #5 - 80158f4: 4620 mov r0, r4 - 80158f6: 0092 lsls r2, r2, #2 - 80158f8: f000 fd69 bl 80163ce <_calloc_r> - 80158fc: b160 cbz r0, 8015918 <_Balloc+0x64> - 80158fe: e9c0 5601 strd r5, r6, [r0, #4] - 8015902: e00e b.n 8015922 <_Balloc+0x6e> - 8015904: 2221 movs r2, #33 @ 0x21 - 8015906: 2104 movs r1, #4 - 8015908: 4620 mov r0, r4 - 801590a: f000 fd60 bl 80163ce <_calloc_r> - 801590e: 69e3 ldr r3, [r4, #28] - 8015910: 60f0 str r0, [r6, #12] - 8015912: 68db ldr r3, [r3, #12] - 8015914: 2b00 cmp r3, #0 - 8015916: d1e4 bne.n 80158e2 <_Balloc+0x2e> - 8015918: 2000 movs r0, #0 - 801591a: bd70 pop {r4, r5, r6, pc} - 801591c: 6802 ldr r2, [r0, #0] - 801591e: f843 2025 str.w r2, [r3, r5, lsl #2] - 8015922: 2300 movs r3, #0 - 8015924: e9c0 3303 strd r3, r3, [r0, #12] - 8015928: e7f7 b.n 801591a <_Balloc+0x66> - 801592a: bf00 nop - 801592c: 08016da4 .word 0x08016da4 - 8015930: 08016ed6 .word 0x08016ed6 - -08015934 <_Bfree>: - 8015934: b570 push {r4, r5, r6, lr} - 8015936: 69c6 ldr r6, [r0, #28] - 8015938: 4605 mov r5, r0 - 801593a: 460c mov r4, r1 - 801593c: b976 cbnz r6, 801595c <_Bfree+0x28> - 801593e: 2010 movs r0, #16 - 8015940: f7ff fe5a bl 80155f8 - 8015944: 4602 mov r2, r0 - 8015946: 61e8 str r0, [r5, #28] - 8015948: b920 cbnz r0, 8015954 <_Bfree+0x20> - 801594a: 218f movs r1, #143 @ 0x8f - 801594c: 4b08 ldr r3, [pc, #32] @ (8015970 <_Bfree+0x3c>) - 801594e: 4809 ldr r0, [pc, #36] @ (8015974 <_Bfree+0x40>) - 8015950: f7fe fd40 bl 80143d4 <__assert_func> - 8015954: e9c0 6601 strd r6, r6, [r0, #4] - 8015958: 6006 str r6, [r0, #0] - 801595a: 60c6 str r6, [r0, #12] - 801595c: b13c cbz r4, 801596e <_Bfree+0x3a> - 801595e: 69eb ldr r3, [r5, #28] - 8015960: 6862 ldr r2, [r4, #4] - 8015962: 68db ldr r3, [r3, #12] - 8015964: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 8015968: 6021 str r1, [r4, #0] - 801596a: f843 4022 str.w r4, [r3, r2, lsl #2] - 801596e: bd70 pop {r4, r5, r6, pc} - 8015970: 08016da4 .word 0x08016da4 - 8015974: 08016ed6 .word 0x08016ed6 - -08015978 <__multadd>: - 8015978: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 801597c: 4607 mov r7, r0 - 801597e: 460c mov r4, r1 - 8015980: 461e mov r6, r3 - 8015982: 2000 movs r0, #0 - 8015984: 690d ldr r5, [r1, #16] - 8015986: f101 0c14 add.w ip, r1, #20 - 801598a: f8dc 3000 ldr.w r3, [ip] - 801598e: 3001 adds r0, #1 - 8015990: b299 uxth r1, r3 - 8015992: fb02 6101 mla r1, r2, r1, r6 - 8015996: 0c1e lsrs r6, r3, #16 - 8015998: 0c0b lsrs r3, r1, #16 - 801599a: fb02 3306 mla r3, r2, r6, r3 - 801599e: b289 uxth r1, r1 - 80159a0: eb01 4103 add.w r1, r1, r3, lsl #16 - 80159a4: 4285 cmp r5, r0 - 80159a6: ea4f 4613 mov.w r6, r3, lsr #16 - 80159aa: f84c 1b04 str.w r1, [ip], #4 - 80159ae: dcec bgt.n 801598a <__multadd+0x12> - 80159b0: b30e cbz r6, 80159f6 <__multadd+0x7e> - 80159b2: 68a3 ldr r3, [r4, #8] - 80159b4: 42ab cmp r3, r5 - 80159b6: dc19 bgt.n 80159ec <__multadd+0x74> - 80159b8: 6861 ldr r1, [r4, #4] - 80159ba: 4638 mov r0, r7 - 80159bc: 3101 adds r1, #1 - 80159be: f7ff ff79 bl 80158b4 <_Balloc> - 80159c2: 4680 mov r8, r0 - 80159c4: b928 cbnz r0, 80159d2 <__multadd+0x5a> - 80159c6: 4602 mov r2, r0 - 80159c8: 21ba movs r1, #186 @ 0xba - 80159ca: 4b0c ldr r3, [pc, #48] @ (80159fc <__multadd+0x84>) - 80159cc: 480c ldr r0, [pc, #48] @ (8015a00 <__multadd+0x88>) - 80159ce: f7fe fd01 bl 80143d4 <__assert_func> - 80159d2: 6922 ldr r2, [r4, #16] - 80159d4: f104 010c add.w r1, r4, #12 - 80159d8: 3202 adds r2, #2 - 80159da: 0092 lsls r2, r2, #2 - 80159dc: 300c adds r0, #12 - 80159de: f7fe fceb bl 80143b8 - 80159e2: 4621 mov r1, r4 - 80159e4: 4638 mov r0, r7 - 80159e6: f7ff ffa5 bl 8015934 <_Bfree> - 80159ea: 4644 mov r4, r8 - 80159ec: eb04 0385 add.w r3, r4, r5, lsl #2 - 80159f0: 3501 adds r5, #1 - 80159f2: 615e str r6, [r3, #20] - 80159f4: 6125 str r5, [r4, #16] - 80159f6: 4620 mov r0, r4 - 80159f8: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 80159fc: 08016eb4 .word 0x08016eb4 - 8015a00: 08016ed6 .word 0x08016ed6 - -08015a04 <__hi0bits>: - 8015a04: 4603 mov r3, r0 - 8015a06: f5b0 3f80 cmp.w r0, #65536 @ 0x10000 - 8015a0a: bf3a itte cc - 8015a0c: 0403 lslcc r3, r0, #16 - 8015a0e: 2010 movcc r0, #16 - 8015a10: 2000 movcs r0, #0 - 8015a12: f1b3 7f80 cmp.w r3, #16777216 @ 0x1000000 - 8015a16: bf3c itt cc - 8015a18: 021b lslcc r3, r3, #8 - 8015a1a: 3008 addcc r0, #8 - 8015a1c: f1b3 5f80 cmp.w r3, #268435456 @ 0x10000000 - 8015a20: bf3c itt cc - 8015a22: 011b lslcc r3, r3, #4 - 8015a24: 3004 addcc r0, #4 - 8015a26: f1b3 4f80 cmp.w r3, #1073741824 @ 0x40000000 - 8015a2a: bf3c itt cc - 8015a2c: 009b lslcc r3, r3, #2 - 8015a2e: 3002 addcc r0, #2 - 8015a30: 2b00 cmp r3, #0 - 8015a32: db05 blt.n 8015a40 <__hi0bits+0x3c> - 8015a34: f013 4f80 tst.w r3, #1073741824 @ 0x40000000 - 8015a38: f100 0001 add.w r0, r0, #1 - 8015a3c: bf08 it eq - 8015a3e: 2020 moveq r0, #32 - 8015a40: 4770 bx lr - -08015a42 <__lo0bits>: - 8015a42: 6803 ldr r3, [r0, #0] - 8015a44: 4602 mov r2, r0 - 8015a46: f013 0007 ands.w r0, r3, #7 - 8015a4a: d00b beq.n 8015a64 <__lo0bits+0x22> - 8015a4c: 07d9 lsls r1, r3, #31 - 8015a4e: d421 bmi.n 8015a94 <__lo0bits+0x52> - 8015a50: 0798 lsls r0, r3, #30 - 8015a52: bf49 itett mi - 8015a54: 085b lsrmi r3, r3, #1 - 8015a56: 089b lsrpl r3, r3, #2 - 8015a58: 2001 movmi r0, #1 - 8015a5a: 6013 strmi r3, [r2, #0] - 8015a5c: bf5c itt pl - 8015a5e: 2002 movpl r0, #2 - 8015a60: 6013 strpl r3, [r2, #0] - 8015a62: 4770 bx lr - 8015a64: b299 uxth r1, r3 - 8015a66: b909 cbnz r1, 8015a6c <__lo0bits+0x2a> - 8015a68: 2010 movs r0, #16 - 8015a6a: 0c1b lsrs r3, r3, #16 - 8015a6c: b2d9 uxtb r1, r3 - 8015a6e: b909 cbnz r1, 8015a74 <__lo0bits+0x32> - 8015a70: 3008 adds r0, #8 - 8015a72: 0a1b lsrs r3, r3, #8 - 8015a74: 0719 lsls r1, r3, #28 - 8015a76: bf04 itt eq - 8015a78: 091b lsreq r3, r3, #4 - 8015a7a: 3004 addeq r0, #4 - 8015a7c: 0799 lsls r1, r3, #30 - 8015a7e: bf04 itt eq - 8015a80: 089b lsreq r3, r3, #2 - 8015a82: 3002 addeq r0, #2 - 8015a84: 07d9 lsls r1, r3, #31 - 8015a86: d403 bmi.n 8015a90 <__lo0bits+0x4e> - 8015a88: 085b lsrs r3, r3, #1 - 8015a8a: f100 0001 add.w r0, r0, #1 - 8015a8e: d003 beq.n 8015a98 <__lo0bits+0x56> - 8015a90: 6013 str r3, [r2, #0] - 8015a92: 4770 bx lr - 8015a94: 2000 movs r0, #0 - 8015a96: 4770 bx lr - 8015a98: 2020 movs r0, #32 - 8015a9a: 4770 bx lr - -08015a9c <__i2b>: - 8015a9c: b510 push {r4, lr} - 8015a9e: 460c mov r4, r1 - 8015aa0: 2101 movs r1, #1 - 8015aa2: f7ff ff07 bl 80158b4 <_Balloc> - 8015aa6: 4602 mov r2, r0 - 8015aa8: b928 cbnz r0, 8015ab6 <__i2b+0x1a> - 8015aaa: f240 1145 movw r1, #325 @ 0x145 - 8015aae: 4b04 ldr r3, [pc, #16] @ (8015ac0 <__i2b+0x24>) - 8015ab0: 4804 ldr r0, [pc, #16] @ (8015ac4 <__i2b+0x28>) - 8015ab2: f7fe fc8f bl 80143d4 <__assert_func> - 8015ab6: 2301 movs r3, #1 - 8015ab8: 6144 str r4, [r0, #20] - 8015aba: 6103 str r3, [r0, #16] - 8015abc: bd10 pop {r4, pc} - 8015abe: bf00 nop - 8015ac0: 08016eb4 .word 0x08016eb4 - 8015ac4: 08016ed6 .word 0x08016ed6 - -08015ac8 <__multiply>: - 8015ac8: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8015acc: 4617 mov r7, r2 - 8015ace: 690a ldr r2, [r1, #16] - 8015ad0: 693b ldr r3, [r7, #16] - 8015ad2: 4689 mov r9, r1 - 8015ad4: 429a cmp r2, r3 - 8015ad6: bfa2 ittt ge - 8015ad8: 463b movge r3, r7 - 8015ada: 460f movge r7, r1 - 8015adc: 4699 movge r9, r3 - 8015ade: 693d ldr r5, [r7, #16] - 8015ae0: f8d9 a010 ldr.w sl, [r9, #16] - 8015ae4: 68bb ldr r3, [r7, #8] - 8015ae6: 6879 ldr r1, [r7, #4] - 8015ae8: eb05 060a add.w r6, r5, sl - 8015aec: 42b3 cmp r3, r6 - 8015aee: b085 sub sp, #20 - 8015af0: bfb8 it lt - 8015af2: 3101 addlt r1, #1 - 8015af4: f7ff fede bl 80158b4 <_Balloc> - 8015af8: b930 cbnz r0, 8015b08 <__multiply+0x40> - 8015afa: 4602 mov r2, r0 - 8015afc: f44f 71b1 mov.w r1, #354 @ 0x162 - 8015b00: 4b40 ldr r3, [pc, #256] @ (8015c04 <__multiply+0x13c>) - 8015b02: 4841 ldr r0, [pc, #260] @ (8015c08 <__multiply+0x140>) - 8015b04: f7fe fc66 bl 80143d4 <__assert_func> - 8015b08: f100 0414 add.w r4, r0, #20 - 8015b0c: 4623 mov r3, r4 - 8015b0e: 2200 movs r2, #0 - 8015b10: eb04 0e86 add.w lr, r4, r6, lsl #2 - 8015b14: 4573 cmp r3, lr - 8015b16: d320 bcc.n 8015b5a <__multiply+0x92> - 8015b18: f107 0814 add.w r8, r7, #20 - 8015b1c: f109 0114 add.w r1, r9, #20 - 8015b20: eb08 0585 add.w r5, r8, r5, lsl #2 - 8015b24: eb01 038a add.w r3, r1, sl, lsl #2 - 8015b28: 9302 str r3, [sp, #8] - 8015b2a: 1beb subs r3, r5, r7 - 8015b2c: 3b15 subs r3, #21 - 8015b2e: f023 0303 bic.w r3, r3, #3 - 8015b32: 3304 adds r3, #4 - 8015b34: 3715 adds r7, #21 - 8015b36: 42bd cmp r5, r7 - 8015b38: bf38 it cc - 8015b3a: 2304 movcc r3, #4 - 8015b3c: 9301 str r3, [sp, #4] - 8015b3e: 9b02 ldr r3, [sp, #8] - 8015b40: 9103 str r1, [sp, #12] - 8015b42: 428b cmp r3, r1 - 8015b44: d80c bhi.n 8015b60 <__multiply+0x98> - 8015b46: 2e00 cmp r6, #0 - 8015b48: dd03 ble.n 8015b52 <__multiply+0x8a> - 8015b4a: f85e 3d04 ldr.w r3, [lr, #-4]! - 8015b4e: 2b00 cmp r3, #0 - 8015b50: d055 beq.n 8015bfe <__multiply+0x136> - 8015b52: 6106 str r6, [r0, #16] - 8015b54: b005 add sp, #20 - 8015b56: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8015b5a: f843 2b04 str.w r2, [r3], #4 - 8015b5e: e7d9 b.n 8015b14 <__multiply+0x4c> - 8015b60: f8b1 a000 ldrh.w sl, [r1] - 8015b64: f1ba 0f00 cmp.w sl, #0 - 8015b68: d01f beq.n 8015baa <__multiply+0xe2> - 8015b6a: 46c4 mov ip, r8 - 8015b6c: 46a1 mov r9, r4 - 8015b6e: 2700 movs r7, #0 - 8015b70: f85c 2b04 ldr.w r2, [ip], #4 - 8015b74: f8d9 3000 ldr.w r3, [r9] - 8015b78: fa1f fb82 uxth.w fp, r2 - 8015b7c: b29b uxth r3, r3 - 8015b7e: fb0a 330b mla r3, sl, fp, r3 - 8015b82: 443b add r3, r7 - 8015b84: f8d9 7000 ldr.w r7, [r9] - 8015b88: 0c12 lsrs r2, r2, #16 - 8015b8a: 0c3f lsrs r7, r7, #16 - 8015b8c: fb0a 7202 mla r2, sl, r2, r7 - 8015b90: eb02 4213 add.w r2, r2, r3, lsr #16 - 8015b94: b29b uxth r3, r3 - 8015b96: ea43 4302 orr.w r3, r3, r2, lsl #16 - 8015b9a: 4565 cmp r5, ip - 8015b9c: ea4f 4712 mov.w r7, r2, lsr #16 - 8015ba0: f849 3b04 str.w r3, [r9], #4 - 8015ba4: d8e4 bhi.n 8015b70 <__multiply+0xa8> - 8015ba6: 9b01 ldr r3, [sp, #4] - 8015ba8: 50e7 str r7, [r4, r3] - 8015baa: 9b03 ldr r3, [sp, #12] - 8015bac: 3104 adds r1, #4 - 8015bae: f8b3 9002 ldrh.w r9, [r3, #2] - 8015bb2: f1b9 0f00 cmp.w r9, #0 - 8015bb6: d020 beq.n 8015bfa <__multiply+0x132> - 8015bb8: 4647 mov r7, r8 - 8015bba: 46a4 mov ip, r4 - 8015bbc: f04f 0a00 mov.w sl, #0 - 8015bc0: 6823 ldr r3, [r4, #0] - 8015bc2: f8b7 b000 ldrh.w fp, [r7] - 8015bc6: f8bc 2002 ldrh.w r2, [ip, #2] - 8015bca: b29b uxth r3, r3 - 8015bcc: fb09 220b mla r2, r9, fp, r2 - 8015bd0: 4452 add r2, sl - 8015bd2: ea43 4302 orr.w r3, r3, r2, lsl #16 - 8015bd6: f84c 3b04 str.w r3, [ip], #4 - 8015bda: f857 3b04 ldr.w r3, [r7], #4 - 8015bde: ea4f 4a13 mov.w sl, r3, lsr #16 - 8015be2: f8bc 3000 ldrh.w r3, [ip] - 8015be6: 42bd cmp r5, r7 - 8015be8: fb09 330a mla r3, r9, sl, r3 - 8015bec: eb03 4312 add.w r3, r3, r2, lsr #16 - 8015bf0: ea4f 4a13 mov.w sl, r3, lsr #16 - 8015bf4: d8e5 bhi.n 8015bc2 <__multiply+0xfa> - 8015bf6: 9a01 ldr r2, [sp, #4] - 8015bf8: 50a3 str r3, [r4, r2] - 8015bfa: 3404 adds r4, #4 - 8015bfc: e79f b.n 8015b3e <__multiply+0x76> - 8015bfe: 3e01 subs r6, #1 - 8015c00: e7a1 b.n 8015b46 <__multiply+0x7e> - 8015c02: bf00 nop - 8015c04: 08016eb4 .word 0x08016eb4 - 8015c08: 08016ed6 .word 0x08016ed6 - -08015c0c <__pow5mult>: - 8015c0c: e92d 43f8 stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, lr} - 8015c10: 4615 mov r5, r2 - 8015c12: f012 0203 ands.w r2, r2, #3 - 8015c16: 4607 mov r7, r0 - 8015c18: 460e mov r6, r1 - 8015c1a: d007 beq.n 8015c2c <__pow5mult+0x20> - 8015c1c: 4c25 ldr r4, [pc, #148] @ (8015cb4 <__pow5mult+0xa8>) - 8015c1e: 3a01 subs r2, #1 - 8015c20: 2300 movs r3, #0 - 8015c22: f854 2022 ldr.w r2, [r4, r2, lsl #2] - 8015c26: f7ff fea7 bl 8015978 <__multadd> - 8015c2a: 4606 mov r6, r0 - 8015c2c: 10ad asrs r5, r5, #2 - 8015c2e: d03d beq.n 8015cac <__pow5mult+0xa0> - 8015c30: 69fc ldr r4, [r7, #28] - 8015c32: b97c cbnz r4, 8015c54 <__pow5mult+0x48> - 8015c34: 2010 movs r0, #16 - 8015c36: f7ff fcdf bl 80155f8 - 8015c3a: 4602 mov r2, r0 - 8015c3c: 61f8 str r0, [r7, #28] - 8015c3e: b928 cbnz r0, 8015c4c <__pow5mult+0x40> - 8015c40: f240 11b3 movw r1, #435 @ 0x1b3 - 8015c44: 4b1c ldr r3, [pc, #112] @ (8015cb8 <__pow5mult+0xac>) - 8015c46: 481d ldr r0, [pc, #116] @ (8015cbc <__pow5mult+0xb0>) - 8015c48: f7fe fbc4 bl 80143d4 <__assert_func> - 8015c4c: e9c0 4401 strd r4, r4, [r0, #4] - 8015c50: 6004 str r4, [r0, #0] - 8015c52: 60c4 str r4, [r0, #12] - 8015c54: f8d7 801c ldr.w r8, [r7, #28] - 8015c58: f8d8 4008 ldr.w r4, [r8, #8] - 8015c5c: b94c cbnz r4, 8015c72 <__pow5mult+0x66> - 8015c5e: f240 2171 movw r1, #625 @ 0x271 - 8015c62: 4638 mov r0, r7 - 8015c64: f7ff ff1a bl 8015a9c <__i2b> - 8015c68: 2300 movs r3, #0 - 8015c6a: 4604 mov r4, r0 - 8015c6c: f8c8 0008 str.w r0, [r8, #8] - 8015c70: 6003 str r3, [r0, #0] - 8015c72: f04f 0900 mov.w r9, #0 - 8015c76: 07eb lsls r3, r5, #31 - 8015c78: d50a bpl.n 8015c90 <__pow5mult+0x84> - 8015c7a: 4631 mov r1, r6 - 8015c7c: 4622 mov r2, r4 - 8015c7e: 4638 mov r0, r7 - 8015c80: f7ff ff22 bl 8015ac8 <__multiply> - 8015c84: 4680 mov r8, r0 - 8015c86: 4631 mov r1, r6 - 8015c88: 4638 mov r0, r7 - 8015c8a: f7ff fe53 bl 8015934 <_Bfree> - 8015c8e: 4646 mov r6, r8 - 8015c90: 106d asrs r5, r5, #1 - 8015c92: d00b beq.n 8015cac <__pow5mult+0xa0> - 8015c94: 6820 ldr r0, [r4, #0] - 8015c96: b938 cbnz r0, 8015ca8 <__pow5mult+0x9c> - 8015c98: 4622 mov r2, r4 - 8015c9a: 4621 mov r1, r4 - 8015c9c: 4638 mov r0, r7 - 8015c9e: f7ff ff13 bl 8015ac8 <__multiply> - 8015ca2: 6020 str r0, [r4, #0] - 8015ca4: f8c0 9000 str.w r9, [r0] - 8015ca8: 4604 mov r4, r0 - 8015caa: e7e4 b.n 8015c76 <__pow5mult+0x6a> - 8015cac: 4630 mov r0, r6 - 8015cae: e8bd 83f8 ldmia.w sp!, {r3, r4, r5, r6, r7, r8, r9, pc} - 8015cb2: bf00 nop - 8015cb4: 08016f3c .word 0x08016f3c - 8015cb8: 08016da4 .word 0x08016da4 - 8015cbc: 08016ed6 .word 0x08016ed6 - -08015cc0 <__lshift>: - 8015cc0: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8015cc4: 460c mov r4, r1 - 8015cc6: 4607 mov r7, r0 - 8015cc8: 4691 mov r9, r2 - 8015cca: 6923 ldr r3, [r4, #16] - 8015ccc: 6849 ldr r1, [r1, #4] - 8015cce: eb03 1862 add.w r8, r3, r2, asr #5 - 8015cd2: 68a3 ldr r3, [r4, #8] - 8015cd4: ea4f 1a62 mov.w sl, r2, asr #5 - 8015cd8: f108 0601 add.w r6, r8, #1 - 8015cdc: 42b3 cmp r3, r6 - 8015cde: db0b blt.n 8015cf8 <__lshift+0x38> - 8015ce0: 4638 mov r0, r7 - 8015ce2: f7ff fde7 bl 80158b4 <_Balloc> - 8015ce6: 4605 mov r5, r0 - 8015ce8: b948 cbnz r0, 8015cfe <__lshift+0x3e> - 8015cea: 4602 mov r2, r0 - 8015cec: f44f 71ef mov.w r1, #478 @ 0x1de - 8015cf0: 4b27 ldr r3, [pc, #156] @ (8015d90 <__lshift+0xd0>) - 8015cf2: 4828 ldr r0, [pc, #160] @ (8015d94 <__lshift+0xd4>) - 8015cf4: f7fe fb6e bl 80143d4 <__assert_func> - 8015cf8: 3101 adds r1, #1 - 8015cfa: 005b lsls r3, r3, #1 - 8015cfc: e7ee b.n 8015cdc <__lshift+0x1c> - 8015cfe: 2300 movs r3, #0 - 8015d00: f100 0114 add.w r1, r0, #20 - 8015d04: f100 0210 add.w r2, r0, #16 - 8015d08: 4618 mov r0, r3 - 8015d0a: 4553 cmp r3, sl - 8015d0c: db33 blt.n 8015d76 <__lshift+0xb6> - 8015d0e: 6920 ldr r0, [r4, #16] - 8015d10: ea2a 7aea bic.w sl, sl, sl, asr #31 - 8015d14: f104 0314 add.w r3, r4, #20 - 8015d18: f019 091f ands.w r9, r9, #31 - 8015d1c: eb01 018a add.w r1, r1, sl, lsl #2 - 8015d20: eb03 0c80 add.w ip, r3, r0, lsl #2 - 8015d24: d02b beq.n 8015d7e <__lshift+0xbe> - 8015d26: 468a mov sl, r1 - 8015d28: 2200 movs r2, #0 - 8015d2a: f1c9 0e20 rsb lr, r9, #32 - 8015d2e: 6818 ldr r0, [r3, #0] - 8015d30: fa00 f009 lsl.w r0, r0, r9 - 8015d34: 4310 orrs r0, r2 - 8015d36: f84a 0b04 str.w r0, [sl], #4 - 8015d3a: f853 2b04 ldr.w r2, [r3], #4 - 8015d3e: 459c cmp ip, r3 - 8015d40: fa22 f20e lsr.w r2, r2, lr - 8015d44: d8f3 bhi.n 8015d2e <__lshift+0x6e> - 8015d46: ebac 0304 sub.w r3, ip, r4 - 8015d4a: 3b15 subs r3, #21 - 8015d4c: f023 0303 bic.w r3, r3, #3 - 8015d50: 3304 adds r3, #4 - 8015d52: f104 0015 add.w r0, r4, #21 - 8015d56: 4560 cmp r0, ip - 8015d58: bf88 it hi - 8015d5a: 2304 movhi r3, #4 - 8015d5c: 50ca str r2, [r1, r3] - 8015d5e: b10a cbz r2, 8015d64 <__lshift+0xa4> - 8015d60: f108 0602 add.w r6, r8, #2 - 8015d64: 3e01 subs r6, #1 - 8015d66: 4638 mov r0, r7 - 8015d68: 4621 mov r1, r4 - 8015d6a: 612e str r6, [r5, #16] - 8015d6c: f7ff fde2 bl 8015934 <_Bfree> - 8015d70: 4628 mov r0, r5 - 8015d72: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8015d76: f842 0f04 str.w r0, [r2, #4]! - 8015d7a: 3301 adds r3, #1 - 8015d7c: e7c5 b.n 8015d0a <__lshift+0x4a> - 8015d7e: 3904 subs r1, #4 - 8015d80: f853 2b04 ldr.w r2, [r3], #4 - 8015d84: 459c cmp ip, r3 - 8015d86: f841 2f04 str.w r2, [r1, #4]! - 8015d8a: d8f9 bhi.n 8015d80 <__lshift+0xc0> - 8015d8c: e7ea b.n 8015d64 <__lshift+0xa4> - 8015d8e: bf00 nop - 8015d90: 08016eb4 .word 0x08016eb4 - 8015d94: 08016ed6 .word 0x08016ed6 - -08015d98 <__mcmp>: - 8015d98: 4603 mov r3, r0 - 8015d9a: 690a ldr r2, [r1, #16] - 8015d9c: 6900 ldr r0, [r0, #16] - 8015d9e: b530 push {r4, r5, lr} - 8015da0: 1a80 subs r0, r0, r2 - 8015da2: d10e bne.n 8015dc2 <__mcmp+0x2a> - 8015da4: 3314 adds r3, #20 - 8015da6: 3114 adds r1, #20 - 8015da8: eb03 0482 add.w r4, r3, r2, lsl #2 - 8015dac: eb01 0182 add.w r1, r1, r2, lsl #2 - 8015db0: f854 5d04 ldr.w r5, [r4, #-4]! - 8015db4: f851 2d04 ldr.w r2, [r1, #-4]! - 8015db8: 4295 cmp r5, r2 - 8015dba: d003 beq.n 8015dc4 <__mcmp+0x2c> - 8015dbc: d205 bcs.n 8015dca <__mcmp+0x32> - 8015dbe: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8015dc2: bd30 pop {r4, r5, pc} - 8015dc4: 42a3 cmp r3, r4 - 8015dc6: d3f3 bcc.n 8015db0 <__mcmp+0x18> - 8015dc8: e7fb b.n 8015dc2 <__mcmp+0x2a> - 8015dca: 2001 movs r0, #1 - 8015dcc: e7f9 b.n 8015dc2 <__mcmp+0x2a> - ... - -08015dd0 <__mdiff>: - 8015dd0: e92d 4ff7 stmdb sp!, {r0, r1, r2, r4, r5, r6, r7, r8, r9, sl, fp, lr} - 8015dd4: 4689 mov r9, r1 - 8015dd6: 4606 mov r6, r0 - 8015dd8: 4611 mov r1, r2 - 8015dda: 4648 mov r0, r9 - 8015ddc: 4614 mov r4, r2 - 8015dde: f7ff ffdb bl 8015d98 <__mcmp> - 8015de2: 1e05 subs r5, r0, #0 - 8015de4: d112 bne.n 8015e0c <__mdiff+0x3c> - 8015de6: 4629 mov r1, r5 - 8015de8: 4630 mov r0, r6 - 8015dea: f7ff fd63 bl 80158b4 <_Balloc> - 8015dee: 4602 mov r2, r0 - 8015df0: b928 cbnz r0, 8015dfe <__mdiff+0x2e> - 8015df2: f240 2137 movw r1, #567 @ 0x237 - 8015df6: 4b3e ldr r3, [pc, #248] @ (8015ef0 <__mdiff+0x120>) - 8015df8: 483e ldr r0, [pc, #248] @ (8015ef4 <__mdiff+0x124>) - 8015dfa: f7fe faeb bl 80143d4 <__assert_func> - 8015dfe: 2301 movs r3, #1 - 8015e00: e9c0 3504 strd r3, r5, [r0, #16] - 8015e04: 4610 mov r0, r2 - 8015e06: b003 add sp, #12 - 8015e08: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 8015e0c: bfbc itt lt - 8015e0e: 464b movlt r3, r9 - 8015e10: 46a1 movlt r9, r4 - 8015e12: 4630 mov r0, r6 - 8015e14: f8d9 1004 ldr.w r1, [r9, #4] - 8015e18: bfba itte lt - 8015e1a: 461c movlt r4, r3 - 8015e1c: 2501 movlt r5, #1 - 8015e1e: 2500 movge r5, #0 - 8015e20: f7ff fd48 bl 80158b4 <_Balloc> - 8015e24: 4602 mov r2, r0 - 8015e26: b918 cbnz r0, 8015e30 <__mdiff+0x60> - 8015e28: f240 2145 movw r1, #581 @ 0x245 - 8015e2c: 4b30 ldr r3, [pc, #192] @ (8015ef0 <__mdiff+0x120>) - 8015e2e: e7e3 b.n 8015df8 <__mdiff+0x28> - 8015e30: f100 0b14 add.w fp, r0, #20 - 8015e34: f8d9 7010 ldr.w r7, [r9, #16] - 8015e38: f109 0310 add.w r3, r9, #16 - 8015e3c: 60c5 str r5, [r0, #12] - 8015e3e: f04f 0c00 mov.w ip, #0 - 8015e42: f109 0514 add.w r5, r9, #20 - 8015e46: 46d9 mov r9, fp - 8015e48: 6926 ldr r6, [r4, #16] - 8015e4a: f104 0e14 add.w lr, r4, #20 - 8015e4e: eb05 0887 add.w r8, r5, r7, lsl #2 - 8015e52: eb0e 0686 add.w r6, lr, r6, lsl #2 - 8015e56: 9301 str r3, [sp, #4] - 8015e58: 9b01 ldr r3, [sp, #4] - 8015e5a: f85e 0b04 ldr.w r0, [lr], #4 - 8015e5e: f853 af04 ldr.w sl, [r3, #4]! - 8015e62: b281 uxth r1, r0 - 8015e64: 9301 str r3, [sp, #4] - 8015e66: fa1f f38a uxth.w r3, sl - 8015e6a: 1a5b subs r3, r3, r1 - 8015e6c: 0c00 lsrs r0, r0, #16 - 8015e6e: 4463 add r3, ip - 8015e70: ebc0 401a rsb r0, r0, sl, lsr #16 - 8015e74: eb00 4023 add.w r0, r0, r3, asr #16 - 8015e78: b29b uxth r3, r3 - 8015e7a: ea43 4300 orr.w r3, r3, r0, lsl #16 - 8015e7e: 4576 cmp r6, lr - 8015e80: ea4f 4c20 mov.w ip, r0, asr #16 - 8015e84: f849 3b04 str.w r3, [r9], #4 - 8015e88: d8e6 bhi.n 8015e58 <__mdiff+0x88> - 8015e8a: 1b33 subs r3, r6, r4 - 8015e8c: 3b15 subs r3, #21 - 8015e8e: f023 0303 bic.w r3, r3, #3 - 8015e92: 3415 adds r4, #21 - 8015e94: 3304 adds r3, #4 - 8015e96: 42a6 cmp r6, r4 - 8015e98: bf38 it cc - 8015e9a: 2304 movcc r3, #4 - 8015e9c: 441d add r5, r3 - 8015e9e: 445b add r3, fp - 8015ea0: 461e mov r6, r3 - 8015ea2: 462c mov r4, r5 - 8015ea4: 4544 cmp r4, r8 - 8015ea6: d30e bcc.n 8015ec6 <__mdiff+0xf6> - 8015ea8: f108 0103 add.w r1, r8, #3 - 8015eac: 1b49 subs r1, r1, r5 - 8015eae: f021 0103 bic.w r1, r1, #3 - 8015eb2: 3d03 subs r5, #3 - 8015eb4: 45a8 cmp r8, r5 - 8015eb6: bf38 it cc - 8015eb8: 2100 movcc r1, #0 - 8015eba: 440b add r3, r1 - 8015ebc: f853 1d04 ldr.w r1, [r3, #-4]! - 8015ec0: b199 cbz r1, 8015eea <__mdiff+0x11a> - 8015ec2: 6117 str r7, [r2, #16] - 8015ec4: e79e b.n 8015e04 <__mdiff+0x34> - 8015ec6: 46e6 mov lr, ip - 8015ec8: f854 1b04 ldr.w r1, [r4], #4 - 8015ecc: fa1f fc81 uxth.w ip, r1 - 8015ed0: 44f4 add ip, lr - 8015ed2: 0c08 lsrs r0, r1, #16 - 8015ed4: 4471 add r1, lr - 8015ed6: eb00 402c add.w r0, r0, ip, asr #16 - 8015eda: b289 uxth r1, r1 - 8015edc: ea41 4100 orr.w r1, r1, r0, lsl #16 - 8015ee0: ea4f 4c20 mov.w ip, r0, asr #16 - 8015ee4: f846 1b04 str.w r1, [r6], #4 - 8015ee8: e7dc b.n 8015ea4 <__mdiff+0xd4> - 8015eea: 3f01 subs r7, #1 - 8015eec: e7e6 b.n 8015ebc <__mdiff+0xec> - 8015eee: bf00 nop - 8015ef0: 08016eb4 .word 0x08016eb4 - 8015ef4: 08016ed6 .word 0x08016ed6 - -08015ef8 <__d2b>: - 8015ef8: e92d 4373 stmdb sp!, {r0, r1, r4, r5, r6, r8, r9, lr} - 8015efc: 2101 movs r1, #1 - 8015efe: 4690 mov r8, r2 - 8015f00: 4699 mov r9, r3 - 8015f02: 9e08 ldr r6, [sp, #32] - 8015f04: f7ff fcd6 bl 80158b4 <_Balloc> - 8015f08: 4604 mov r4, r0 - 8015f0a: b930 cbnz r0, 8015f1a <__d2b+0x22> - 8015f0c: 4602 mov r2, r0 - 8015f0e: f240 310f movw r1, #783 @ 0x30f - 8015f12: 4b23 ldr r3, [pc, #140] @ (8015fa0 <__d2b+0xa8>) - 8015f14: 4823 ldr r0, [pc, #140] @ (8015fa4 <__d2b+0xac>) - 8015f16: f7fe fa5d bl 80143d4 <__assert_func> - 8015f1a: f3c9 550a ubfx r5, r9, #20, #11 - 8015f1e: f3c9 0313 ubfx r3, r9, #0, #20 - 8015f22: b10d cbz r5, 8015f28 <__d2b+0x30> - 8015f24: f443 1380 orr.w r3, r3, #1048576 @ 0x100000 - 8015f28: 9301 str r3, [sp, #4] - 8015f2a: f1b8 0300 subs.w r3, r8, #0 - 8015f2e: d024 beq.n 8015f7a <__d2b+0x82> - 8015f30: 4668 mov r0, sp - 8015f32: 9300 str r3, [sp, #0] - 8015f34: f7ff fd85 bl 8015a42 <__lo0bits> - 8015f38: e9dd 1200 ldrd r1, r2, [sp] - 8015f3c: b1d8 cbz r0, 8015f76 <__d2b+0x7e> - 8015f3e: f1c0 0320 rsb r3, r0, #32 - 8015f42: fa02 f303 lsl.w r3, r2, r3 - 8015f46: 430b orrs r3, r1 - 8015f48: 40c2 lsrs r2, r0 - 8015f4a: 6163 str r3, [r4, #20] - 8015f4c: 9201 str r2, [sp, #4] - 8015f4e: 9b01 ldr r3, [sp, #4] - 8015f50: 2b00 cmp r3, #0 - 8015f52: bf0c ite eq - 8015f54: 2201 moveq r2, #1 - 8015f56: 2202 movne r2, #2 - 8015f58: 61a3 str r3, [r4, #24] - 8015f5a: 6122 str r2, [r4, #16] - 8015f5c: b1ad cbz r5, 8015f8a <__d2b+0x92> - 8015f5e: f2a5 4533 subw r5, r5, #1075 @ 0x433 - 8015f62: 4405 add r5, r0 - 8015f64: 6035 str r5, [r6, #0] - 8015f66: f1c0 0035 rsb r0, r0, #53 @ 0x35 - 8015f6a: 9b09 ldr r3, [sp, #36] @ 0x24 - 8015f6c: 6018 str r0, [r3, #0] - 8015f6e: 4620 mov r0, r4 - 8015f70: b002 add sp, #8 - 8015f72: e8bd 8370 ldmia.w sp!, {r4, r5, r6, r8, r9, pc} - 8015f76: 6161 str r1, [r4, #20] - 8015f78: e7e9 b.n 8015f4e <__d2b+0x56> - 8015f7a: a801 add r0, sp, #4 - 8015f7c: f7ff fd61 bl 8015a42 <__lo0bits> - 8015f80: 9b01 ldr r3, [sp, #4] - 8015f82: 2201 movs r2, #1 - 8015f84: 6163 str r3, [r4, #20] - 8015f86: 3020 adds r0, #32 - 8015f88: e7e7 b.n 8015f5a <__d2b+0x62> - 8015f8a: f2a0 4032 subw r0, r0, #1074 @ 0x432 - 8015f8e: eb04 0382 add.w r3, r4, r2, lsl #2 - 8015f92: 6030 str r0, [r6, #0] - 8015f94: 6918 ldr r0, [r3, #16] - 8015f96: f7ff fd35 bl 8015a04 <__hi0bits> - 8015f9a: ebc0 1042 rsb r0, r0, r2, lsl #5 - 8015f9e: e7e4 b.n 8015f6a <__d2b+0x72> - 8015fa0: 08016eb4 .word 0x08016eb4 - 8015fa4: 08016ed6 .word 0x08016ed6 - -08015fa8 <__sread>: - 8015fa8: b510 push {r4, lr} - 8015faa: 460c mov r4, r1 - 8015fac: f9b1 100e ldrsh.w r1, [r1, #14] - 8015fb0: f000 f9b0 bl 8016314 <_read_r> - 8015fb4: 2800 cmp r0, #0 - 8015fb6: bfab itete ge - 8015fb8: 6d63 ldrge r3, [r4, #84] @ 0x54 - 8015fba: 89a3 ldrhlt r3, [r4, #12] - 8015fbc: 181b addge r3, r3, r0 - 8015fbe: f423 5380 biclt.w r3, r3, #4096 @ 0x1000 - 8015fc2: bfac ite ge - 8015fc4: 6563 strge r3, [r4, #84] @ 0x54 - 8015fc6: 81a3 strhlt r3, [r4, #12] - 8015fc8: bd10 pop {r4, pc} - -08015fca <__swrite>: - 8015fca: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 8015fce: 461f mov r7, r3 - 8015fd0: 898b ldrh r3, [r1, #12] - 8015fd2: 4605 mov r5, r0 - 8015fd4: 05db lsls r3, r3, #23 - 8015fd6: 460c mov r4, r1 - 8015fd8: 4616 mov r6, r2 - 8015fda: d505 bpl.n 8015fe8 <__swrite+0x1e> - 8015fdc: 2302 movs r3, #2 - 8015fde: 2200 movs r2, #0 - 8015fe0: f9b1 100e ldrsh.w r1, [r1, #14] - 8015fe4: f000 f984 bl 80162f0 <_lseek_r> - 8015fe8: 89a3 ldrh r3, [r4, #12] - 8015fea: 4632 mov r2, r6 - 8015fec: f423 5380 bic.w r3, r3, #4096 @ 0x1000 - 8015ff0: 81a3 strh r3, [r4, #12] - 8015ff2: 4628 mov r0, r5 - 8015ff4: 463b mov r3, r7 - 8015ff6: f9b4 100e ldrsh.w r1, [r4, #14] - 8015ffa: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 8015ffe: f000 b9ab b.w 8016358 <_write_r> - -08016002 <__sseek>: - 8016002: b510 push {r4, lr} - 8016004: 460c mov r4, r1 - 8016006: f9b1 100e ldrsh.w r1, [r1, #14] - 801600a: f000 f971 bl 80162f0 <_lseek_r> - 801600e: 1c43 adds r3, r0, #1 - 8016010: 89a3 ldrh r3, [r4, #12] - 8016012: bf15 itete ne - 8016014: 6560 strne r0, [r4, #84] @ 0x54 - 8016016: f423 5380 biceq.w r3, r3, #4096 @ 0x1000 - 801601a: f443 5380 orrne.w r3, r3, #4096 @ 0x1000 - 801601e: 81a3 strheq r3, [r4, #12] - 8016020: bf18 it ne - 8016022: 81a3 strhne r3, [r4, #12] - 8016024: bd10 pop {r4, pc} - -08016026 <__sclose>: - 8016026: f9b1 100e ldrsh.w r1, [r1, #14] - 801602a: f000 b9a7 b.w 801637c <_close_r> - ... - -08016030 : - 8016030: b40e push {r1, r2, r3} - 8016032: b503 push {r0, r1, lr} - 8016034: 4601 mov r1, r0 - 8016036: ab03 add r3, sp, #12 - 8016038: 4805 ldr r0, [pc, #20] @ (8016050 ) - 801603a: f853 2b04 ldr.w r2, [r3], #4 - 801603e: 6800 ldr r0, [r0, #0] - 8016040: 9301 str r3, [sp, #4] - 8016042: f7ff f9c1 bl 80153c8 <_vfiprintf_r> - 8016046: b002 add sp, #8 - 8016048: f85d eb04 ldr.w lr, [sp], #4 - 801604c: b003 add sp, #12 - 801604e: 4770 bx lr - 8016050: 20000090 .word 0x20000090 - -08016054 <_realloc_r>: - 8016054: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr} - 8016058: 4607 mov r7, r0 - 801605a: 4614 mov r4, r2 - 801605c: 460d mov r5, r1 - 801605e: b921 cbnz r1, 801606a <_realloc_r+0x16> - 8016060: 4611 mov r1, r2 - 8016062: e8bd 41f0 ldmia.w sp!, {r4, r5, r6, r7, r8, lr} - 8016066: f7ff baf1 b.w 801564c <_malloc_r> - 801606a: b92a cbnz r2, 8016078 <_realloc_r+0x24> - 801606c: f000 f9c4 bl 80163f8 <_free_r> - 8016070: 4625 mov r5, r4 - 8016072: 4628 mov r0, r5 - 8016074: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc} - 8016078: f000 fa18 bl 80164ac <_malloc_usable_size_r> - 801607c: 4284 cmp r4, r0 - 801607e: 4606 mov r6, r0 - 8016080: d802 bhi.n 8016088 <_realloc_r+0x34> - 8016082: ebb4 0f50 cmp.w r4, r0, lsr #1 - 8016086: d8f4 bhi.n 8016072 <_realloc_r+0x1e> - 8016088: 4621 mov r1, r4 - 801608a: 4638 mov r0, r7 - 801608c: f7ff fade bl 801564c <_malloc_r> - 8016090: 4680 mov r8, r0 - 8016092: b908 cbnz r0, 8016098 <_realloc_r+0x44> - 8016094: 4645 mov r5, r8 - 8016096: e7ec b.n 8016072 <_realloc_r+0x1e> - 8016098: 42b4 cmp r4, r6 - 801609a: 4622 mov r2, r4 - 801609c: 4629 mov r1, r5 - 801609e: bf28 it cs - 80160a0: 4632 movcs r2, r6 - 80160a2: f7fe f989 bl 80143b8 - 80160a6: 4629 mov r1, r5 - 80160a8: 4638 mov r0, r7 - 80160aa: f000 f9a5 bl 80163f8 <_free_r> - 80160ae: e7f1 b.n 8016094 <_realloc_r+0x40> - -080160b0 <__swbuf_r>: - 80160b0: b5f8 push {r3, r4, r5, r6, r7, lr} - 80160b2: 460e mov r6, r1 - 80160b4: 4614 mov r4, r2 - 80160b6: 4605 mov r5, r0 - 80160b8: b118 cbz r0, 80160c2 <__swbuf_r+0x12> - 80160ba: 6a03 ldr r3, [r0, #32] - 80160bc: b90b cbnz r3, 80160c2 <__swbuf_r+0x12> - 80160be: f7fd ffe9 bl 8014094 <__sinit> - 80160c2: 69a3 ldr r3, [r4, #24] - 80160c4: 60a3 str r3, [r4, #8] - 80160c6: 89a3 ldrh r3, [r4, #12] - 80160c8: 071a lsls r2, r3, #28 - 80160ca: d501 bpl.n 80160d0 <__swbuf_r+0x20> - 80160cc: 6923 ldr r3, [r4, #16] - 80160ce: b943 cbnz r3, 80160e2 <__swbuf_r+0x32> - 80160d0: 4621 mov r1, r4 - 80160d2: 4628 mov r0, r5 - 80160d4: f000 f82a bl 801612c <__swsetup_r> - 80160d8: b118 cbz r0, 80160e2 <__swbuf_r+0x32> - 80160da: f04f 37ff mov.w r7, #4294967295 @ 0xffffffff - 80160de: 4638 mov r0, r7 - 80160e0: bdf8 pop {r3, r4, r5, r6, r7, pc} - 80160e2: 6823 ldr r3, [r4, #0] - 80160e4: 6922 ldr r2, [r4, #16] - 80160e6: b2f6 uxtb r6, r6 - 80160e8: 1a98 subs r0, r3, r2 - 80160ea: 6963 ldr r3, [r4, #20] - 80160ec: 4637 mov r7, r6 - 80160ee: 4283 cmp r3, r0 - 80160f0: dc05 bgt.n 80160fe <__swbuf_r+0x4e> - 80160f2: 4621 mov r1, r4 - 80160f4: 4628 mov r0, r5 - 80160f6: f7ff fba9 bl 801584c <_fflush_r> - 80160fa: 2800 cmp r0, #0 - 80160fc: d1ed bne.n 80160da <__swbuf_r+0x2a> - 80160fe: 68a3 ldr r3, [r4, #8] - 8016100: 3b01 subs r3, #1 - 8016102: 60a3 str r3, [r4, #8] - 8016104: 6823 ldr r3, [r4, #0] - 8016106: 1c5a adds r2, r3, #1 - 8016108: 6022 str r2, [r4, #0] - 801610a: 701e strb r6, [r3, #0] - 801610c: 6962 ldr r2, [r4, #20] - 801610e: 1c43 adds r3, r0, #1 - 8016110: 429a cmp r2, r3 - 8016112: d004 beq.n 801611e <__swbuf_r+0x6e> - 8016114: 89a3 ldrh r3, [r4, #12] - 8016116: 07db lsls r3, r3, #31 - 8016118: d5e1 bpl.n 80160de <__swbuf_r+0x2e> - 801611a: 2e0a cmp r6, #10 - 801611c: d1df bne.n 80160de <__swbuf_r+0x2e> - 801611e: 4621 mov r1, r4 - 8016120: 4628 mov r0, r5 - 8016122: f7ff fb93 bl 801584c <_fflush_r> - 8016126: 2800 cmp r0, #0 - 8016128: d0d9 beq.n 80160de <__swbuf_r+0x2e> - 801612a: e7d6 b.n 80160da <__swbuf_r+0x2a> - -0801612c <__swsetup_r>: - 801612c: b538 push {r3, r4, r5, lr} - 801612e: 4b29 ldr r3, [pc, #164] @ (80161d4 <__swsetup_r+0xa8>) - 8016130: 4605 mov r5, r0 - 8016132: 6818 ldr r0, [r3, #0] - 8016134: 460c mov r4, r1 - 8016136: b118 cbz r0, 8016140 <__swsetup_r+0x14> - 8016138: 6a03 ldr r3, [r0, #32] - 801613a: b90b cbnz r3, 8016140 <__swsetup_r+0x14> - 801613c: f7fd ffaa bl 8014094 <__sinit> - 8016140: f9b4 300c ldrsh.w r3, [r4, #12] - 8016144: 0719 lsls r1, r3, #28 - 8016146: d422 bmi.n 801618e <__swsetup_r+0x62> - 8016148: 06da lsls r2, r3, #27 - 801614a: d407 bmi.n 801615c <__swsetup_r+0x30> - 801614c: 2209 movs r2, #9 - 801614e: 602a str r2, [r5, #0] - 8016150: f043 0340 orr.w r3, r3, #64 @ 0x40 - 8016154: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 8016158: 81a3 strh r3, [r4, #12] - 801615a: e033 b.n 80161c4 <__swsetup_r+0x98> - 801615c: 0758 lsls r0, r3, #29 - 801615e: d512 bpl.n 8016186 <__swsetup_r+0x5a> - 8016160: 6b61 ldr r1, [r4, #52] @ 0x34 - 8016162: b141 cbz r1, 8016176 <__swsetup_r+0x4a> - 8016164: f104 0344 add.w r3, r4, #68 @ 0x44 - 8016168: 4299 cmp r1, r3 - 801616a: d002 beq.n 8016172 <__swsetup_r+0x46> - 801616c: 4628 mov r0, r5 - 801616e: f000 f943 bl 80163f8 <_free_r> - 8016172: 2300 movs r3, #0 - 8016174: 6363 str r3, [r4, #52] @ 0x34 - 8016176: 89a3 ldrh r3, [r4, #12] - 8016178: f023 0324 bic.w r3, r3, #36 @ 0x24 - 801617c: 81a3 strh r3, [r4, #12] - 801617e: 2300 movs r3, #0 - 8016180: 6063 str r3, [r4, #4] - 8016182: 6923 ldr r3, [r4, #16] - 8016184: 6023 str r3, [r4, #0] - 8016186: 89a3 ldrh r3, [r4, #12] - 8016188: f043 0308 orr.w r3, r3, #8 - 801618c: 81a3 strh r3, [r4, #12] - 801618e: 6923 ldr r3, [r4, #16] - 8016190: b94b cbnz r3, 80161a6 <__swsetup_r+0x7a> - 8016192: 89a3 ldrh r3, [r4, #12] - 8016194: f403 7320 and.w r3, r3, #640 @ 0x280 - 8016198: f5b3 7f00 cmp.w r3, #512 @ 0x200 - 801619c: d003 beq.n 80161a6 <__swsetup_r+0x7a> - 801619e: 4621 mov r1, r4 - 80161a0: 4628 mov r0, r5 - 80161a2: f000 f83e bl 8016222 <__smakebuf_r> - 80161a6: f9b4 300c ldrsh.w r3, [r4, #12] - 80161aa: f013 0201 ands.w r2, r3, #1 - 80161ae: d00a beq.n 80161c6 <__swsetup_r+0x9a> - 80161b0: 2200 movs r2, #0 - 80161b2: 60a2 str r2, [r4, #8] - 80161b4: 6962 ldr r2, [r4, #20] - 80161b6: 4252 negs r2, r2 - 80161b8: 61a2 str r2, [r4, #24] - 80161ba: 6922 ldr r2, [r4, #16] - 80161bc: b942 cbnz r2, 80161d0 <__swsetup_r+0xa4> - 80161be: f013 0080 ands.w r0, r3, #128 @ 0x80 - 80161c2: d1c5 bne.n 8016150 <__swsetup_r+0x24> - 80161c4: bd38 pop {r3, r4, r5, pc} - 80161c6: 0799 lsls r1, r3, #30 - 80161c8: bf58 it pl - 80161ca: 6962 ldrpl r2, [r4, #20] - 80161cc: 60a2 str r2, [r4, #8] - 80161ce: e7f4 b.n 80161ba <__swsetup_r+0x8e> - 80161d0: 2000 movs r0, #0 - 80161d2: e7f7 b.n 80161c4 <__swsetup_r+0x98> - 80161d4: 20000090 .word 0x20000090 - -080161d8 <__swhatbuf_r>: - 80161d8: b570 push {r4, r5, r6, lr} - 80161da: 460c mov r4, r1 - 80161dc: f9b1 100e ldrsh.w r1, [r1, #14] - 80161e0: 4615 mov r5, r2 - 80161e2: 2900 cmp r1, #0 - 80161e4: 461e mov r6, r3 - 80161e6: b096 sub sp, #88 @ 0x58 - 80161e8: da0c bge.n 8016204 <__swhatbuf_r+0x2c> - 80161ea: 89a3 ldrh r3, [r4, #12] - 80161ec: 2100 movs r1, #0 - 80161ee: f013 0f80 tst.w r3, #128 @ 0x80 - 80161f2: bf14 ite ne - 80161f4: 2340 movne r3, #64 @ 0x40 - 80161f6: f44f 6380 moveq.w r3, #1024 @ 0x400 - 80161fa: 2000 movs r0, #0 - 80161fc: 6031 str r1, [r6, #0] - 80161fe: 602b str r3, [r5, #0] - 8016200: b016 add sp, #88 @ 0x58 - 8016202: bd70 pop {r4, r5, r6, pc} - 8016204: 466a mov r2, sp - 8016206: f000 f8c9 bl 801639c <_fstat_r> - 801620a: 2800 cmp r0, #0 - 801620c: dbed blt.n 80161ea <__swhatbuf_r+0x12> - 801620e: 9901 ldr r1, [sp, #4] - 8016210: f401 4170 and.w r1, r1, #61440 @ 0xf000 - 8016214: f5a1 5300 sub.w r3, r1, #8192 @ 0x2000 - 8016218: 4259 negs r1, r3 - 801621a: 4159 adcs r1, r3 - 801621c: f44f 6380 mov.w r3, #1024 @ 0x400 - 8016220: e7eb b.n 80161fa <__swhatbuf_r+0x22> - -08016222 <__smakebuf_r>: - 8016222: 898b ldrh r3, [r1, #12] - 8016224: b5f7 push {r0, r1, r2, r4, r5, r6, r7, lr} - 8016226: 079d lsls r5, r3, #30 - 8016228: 4606 mov r6, r0 - 801622a: 460c mov r4, r1 - 801622c: d507 bpl.n 801623e <__smakebuf_r+0x1c> - 801622e: f104 0347 add.w r3, r4, #71 @ 0x47 - 8016232: 6023 str r3, [r4, #0] - 8016234: 6123 str r3, [r4, #16] - 8016236: 2301 movs r3, #1 - 8016238: 6163 str r3, [r4, #20] - 801623a: b003 add sp, #12 - 801623c: bdf0 pop {r4, r5, r6, r7, pc} - 801623e: 466a mov r2, sp - 8016240: ab01 add r3, sp, #4 - 8016242: f7ff ffc9 bl 80161d8 <__swhatbuf_r> - 8016246: 9f00 ldr r7, [sp, #0] - 8016248: 4605 mov r5, r0 - 801624a: 4639 mov r1, r7 - 801624c: 4630 mov r0, r6 - 801624e: f7ff f9fd bl 801564c <_malloc_r> - 8016252: b948 cbnz r0, 8016268 <__smakebuf_r+0x46> - 8016254: f9b4 300c ldrsh.w r3, [r4, #12] - 8016258: 059a lsls r2, r3, #22 - 801625a: d4ee bmi.n 801623a <__smakebuf_r+0x18> - 801625c: f023 0303 bic.w r3, r3, #3 - 8016260: f043 0302 orr.w r3, r3, #2 - 8016264: 81a3 strh r3, [r4, #12] - 8016266: e7e2 b.n 801622e <__smakebuf_r+0xc> - 8016268: 89a3 ldrh r3, [r4, #12] - 801626a: e9c4 0704 strd r0, r7, [r4, #16] - 801626e: f043 0380 orr.w r3, r3, #128 @ 0x80 - 8016272: 81a3 strh r3, [r4, #12] - 8016274: 9b01 ldr r3, [sp, #4] - 8016276: 6020 str r0, [r4, #0] - 8016278: b15b cbz r3, 8016292 <__smakebuf_r+0x70> - 801627a: 4630 mov r0, r6 - 801627c: f9b4 100e ldrsh.w r1, [r4, #14] - 8016280: f000 f826 bl 80162d0 <_isatty_r> - 8016284: b128 cbz r0, 8016292 <__smakebuf_r+0x70> - 8016286: 89a3 ldrh r3, [r4, #12] - 8016288: f023 0303 bic.w r3, r3, #3 - 801628c: f043 0301 orr.w r3, r3, #1 - 8016290: 81a3 strh r3, [r4, #12] - 8016292: 89a3 ldrh r3, [r4, #12] - 8016294: 431d orrs r5, r3 - 8016296: 81a5 strh r5, [r4, #12] - 8016298: e7cf b.n 801623a <__smakebuf_r+0x18> - -0801629a : - 801629a: 4288 cmp r0, r1 - 801629c: b510 push {r4, lr} - 801629e: eb01 0402 add.w r4, r1, r2 - 80162a2: d902 bls.n 80162aa - 80162a4: 4284 cmp r4, r0 - 80162a6: 4623 mov r3, r4 - 80162a8: d807 bhi.n 80162ba - 80162aa: 1e43 subs r3, r0, #1 - 80162ac: 42a1 cmp r1, r4 - 80162ae: d008 beq.n 80162c2 - 80162b0: f811 2b01 ldrb.w r2, [r1], #1 - 80162b4: f803 2f01 strb.w r2, [r3, #1]! - 80162b8: e7f8 b.n 80162ac - 80162ba: 4601 mov r1, r0 - 80162bc: 4402 add r2, r0 - 80162be: 428a cmp r2, r1 - 80162c0: d100 bne.n 80162c4 - 80162c2: bd10 pop {r4, pc} - 80162c4: f813 4d01 ldrb.w r4, [r3, #-1]! - 80162c8: f802 4d01 strb.w r4, [r2, #-1]! - 80162cc: e7f7 b.n 80162be - ... - -080162d0 <_isatty_r>: - 80162d0: b538 push {r3, r4, r5, lr} - 80162d2: 2300 movs r3, #0 - 80162d4: 4d05 ldr r5, [pc, #20] @ (80162ec <_isatty_r+0x1c>) - 80162d6: 4604 mov r4, r0 - 80162d8: 4608 mov r0, r1 - 80162da: 602b str r3, [r5, #0] - 80162dc: f7f7 ff49 bl 800e172 <_isatty> - 80162e0: 1c43 adds r3, r0, #1 - 80162e2: d102 bne.n 80162ea <_isatty_r+0x1a> - 80162e4: 682b ldr r3, [r5, #0] - 80162e6: b103 cbz r3, 80162ea <_isatty_r+0x1a> - 80162e8: 6023 str r3, [r4, #0] - 80162ea: bd38 pop {r3, r4, r5, pc} - 80162ec: 200011d8 .word 0x200011d8 - -080162f0 <_lseek_r>: - 80162f0: b538 push {r3, r4, r5, lr} - 80162f2: 4604 mov r4, r0 - 80162f4: 4608 mov r0, r1 - 80162f6: 4611 mov r1, r2 - 80162f8: 2200 movs r2, #0 - 80162fa: 4d05 ldr r5, [pc, #20] @ (8016310 <_lseek_r+0x20>) - 80162fc: 602a str r2, [r5, #0] - 80162fe: 461a mov r2, r3 - 8016300: f7f7 ff41 bl 800e186 <_lseek> - 8016304: 1c43 adds r3, r0, #1 - 8016306: d102 bne.n 801630e <_lseek_r+0x1e> - 8016308: 682b ldr r3, [r5, #0] - 801630a: b103 cbz r3, 801630e <_lseek_r+0x1e> - 801630c: 6023 str r3, [r4, #0] - 801630e: bd38 pop {r3, r4, r5, pc} - 8016310: 200011d8 .word 0x200011d8 - -08016314 <_read_r>: - 8016314: b538 push {r3, r4, r5, lr} - 8016316: 4604 mov r4, r0 - 8016318: 4608 mov r0, r1 - 801631a: 4611 mov r1, r2 - 801631c: 2200 movs r2, #0 - 801631e: 4d05 ldr r5, [pc, #20] @ (8016334 <_read_r+0x20>) - 8016320: 602a str r2, [r5, #0] - 8016322: 461a mov r2, r3 - 8016324: f7f7 feee bl 800e104 <_read> - 8016328: 1c43 adds r3, r0, #1 - 801632a: d102 bne.n 8016332 <_read_r+0x1e> - 801632c: 682b ldr r3, [r5, #0] - 801632e: b103 cbz r3, 8016332 <_read_r+0x1e> - 8016330: 6023 str r3, [r4, #0] - 8016332: bd38 pop {r3, r4, r5, pc} - 8016334: 200011d8 .word 0x200011d8 - -08016338 <_sbrk_r>: - 8016338: b538 push {r3, r4, r5, lr} - 801633a: 2300 movs r3, #0 - 801633c: 4d05 ldr r5, [pc, #20] @ (8016354 <_sbrk_r+0x1c>) - 801633e: 4604 mov r4, r0 - 8016340: 4608 mov r0, r1 - 8016342: 602b str r3, [r5, #0] - 8016344: f7f7 ff2c bl 800e1a0 <_sbrk> - 8016348: 1c43 adds r3, r0, #1 - 801634a: d102 bne.n 8016352 <_sbrk_r+0x1a> - 801634c: 682b ldr r3, [r5, #0] - 801634e: b103 cbz r3, 8016352 <_sbrk_r+0x1a> - 8016350: 6023 str r3, [r4, #0] - 8016352: bd38 pop {r3, r4, r5, pc} - 8016354: 200011d8 .word 0x200011d8 - -08016358 <_write_r>: - 8016358: b538 push {r3, r4, r5, lr} - 801635a: 4604 mov r4, r0 - 801635c: 4608 mov r0, r1 - 801635e: 4611 mov r1, r2 - 8016360: 2200 movs r2, #0 - 8016362: 4d05 ldr r5, [pc, #20] @ (8016378 <_write_r+0x20>) - 8016364: 602a str r2, [r5, #0] - 8016366: 461a mov r2, r3 - 8016368: f7f5 f816 bl 800b398 <_write> - 801636c: 1c43 adds r3, r0, #1 - 801636e: d102 bne.n 8016376 <_write_r+0x1e> - 8016370: 682b ldr r3, [r5, #0] - 8016372: b103 cbz r3, 8016376 <_write_r+0x1e> - 8016374: 6023 str r3, [r4, #0] - 8016376: bd38 pop {r3, r4, r5, pc} - 8016378: 200011d8 .word 0x200011d8 - -0801637c <_close_r>: - 801637c: b538 push {r3, r4, r5, lr} - 801637e: 2300 movs r3, #0 - 8016380: 4d05 ldr r5, [pc, #20] @ (8016398 <_close_r+0x1c>) - 8016382: 4604 mov r4, r0 - 8016384: 4608 mov r0, r1 - 8016386: 602b str r3, [r5, #0] - 8016388: f7f7 fed9 bl 800e13e <_close> - 801638c: 1c43 adds r3, r0, #1 - 801638e: d102 bne.n 8016396 <_close_r+0x1a> - 8016390: 682b ldr r3, [r5, #0] - 8016392: b103 cbz r3, 8016396 <_close_r+0x1a> - 8016394: 6023 str r3, [r4, #0] - 8016396: bd38 pop {r3, r4, r5, pc} - 8016398: 200011d8 .word 0x200011d8 - -0801639c <_fstat_r>: - 801639c: b538 push {r3, r4, r5, lr} - 801639e: 2300 movs r3, #0 - 80163a0: 4d06 ldr r5, [pc, #24] @ (80163bc <_fstat_r+0x20>) - 80163a2: 4604 mov r4, r0 - 80163a4: 4608 mov r0, r1 - 80163a6: 4611 mov r1, r2 - 80163a8: 602b str r3, [r5, #0] - 80163aa: f7f7 fed3 bl 800e154 <_fstat> - 80163ae: 1c43 adds r3, r0, #1 - 80163b0: d102 bne.n 80163b8 <_fstat_r+0x1c> - 80163b2: 682b ldr r3, [r5, #0] - 80163b4: b103 cbz r3, 80163b8 <_fstat_r+0x1c> - 80163b6: 6023 str r3, [r4, #0] - 80163b8: bd38 pop {r3, r4, r5, pc} - 80163ba: bf00 nop - 80163bc: 200011d8 .word 0x200011d8 - -080163c0 : - 80163c0: 2006 movs r0, #6 - 80163c2: b508 push {r3, lr} - 80163c4: f000 f8b0 bl 8016528 - 80163c8: 2001 movs r0, #1 - 80163ca: f7f7 fe90 bl 800e0ee <_exit> - -080163ce <_calloc_r>: - 80163ce: b570 push {r4, r5, r6, lr} - 80163d0: fba1 5402 umull r5, r4, r1, r2 - 80163d4: b934 cbnz r4, 80163e4 <_calloc_r+0x16> - 80163d6: 4629 mov r1, r5 - 80163d8: f7ff f938 bl 801564c <_malloc_r> - 80163dc: 4606 mov r6, r0 - 80163de: b928 cbnz r0, 80163ec <_calloc_r+0x1e> - 80163e0: 4630 mov r0, r6 - 80163e2: bd70 pop {r4, r5, r6, pc} - 80163e4: 220c movs r2, #12 - 80163e6: 2600 movs r6, #0 - 80163e8: 6002 str r2, [r0, #0] - 80163ea: e7f9 b.n 80163e0 <_calloc_r+0x12> - 80163ec: 462a mov r2, r5 - 80163ee: 4621 mov r1, r4 - 80163f0: f7fd fed4 bl 801419c - 80163f4: e7f4 b.n 80163e0 <_calloc_r+0x12> - ... - -080163f8 <_free_r>: - 80163f8: b538 push {r3, r4, r5, lr} - 80163fa: 4605 mov r5, r0 - 80163fc: 2900 cmp r1, #0 - 80163fe: d040 beq.n 8016482 <_free_r+0x8a> - 8016400: f851 3c04 ldr.w r3, [r1, #-4] - 8016404: 1f0c subs r4, r1, #4 - 8016406: 2b00 cmp r3, #0 - 8016408: bfb8 it lt - 801640a: 18e4 addlt r4, r4, r3 - 801640c: f7ff fa46 bl 801589c <__malloc_lock> - 8016410: 4a1c ldr r2, [pc, #112] @ (8016484 <_free_r+0x8c>) - 8016412: 6813 ldr r3, [r2, #0] - 8016414: b933 cbnz r3, 8016424 <_free_r+0x2c> - 8016416: 6063 str r3, [r4, #4] - 8016418: 6014 str r4, [r2, #0] - 801641a: 4628 mov r0, r5 - 801641c: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 8016420: f7ff ba42 b.w 80158a8 <__malloc_unlock> - 8016424: 42a3 cmp r3, r4 - 8016426: d908 bls.n 801643a <_free_r+0x42> - 8016428: 6820 ldr r0, [r4, #0] - 801642a: 1821 adds r1, r4, r0 - 801642c: 428b cmp r3, r1 - 801642e: bf01 itttt eq - 8016430: 6819 ldreq r1, [r3, #0] - 8016432: 685b ldreq r3, [r3, #4] - 8016434: 1809 addeq r1, r1, r0 - 8016436: 6021 streq r1, [r4, #0] - 8016438: e7ed b.n 8016416 <_free_r+0x1e> - 801643a: 461a mov r2, r3 - 801643c: 685b ldr r3, [r3, #4] - 801643e: b10b cbz r3, 8016444 <_free_r+0x4c> - 8016440: 42a3 cmp r3, r4 - 8016442: d9fa bls.n 801643a <_free_r+0x42> - 8016444: 6811 ldr r1, [r2, #0] - 8016446: 1850 adds r0, r2, r1 - 8016448: 42a0 cmp r0, r4 - 801644a: d10b bne.n 8016464 <_free_r+0x6c> - 801644c: 6820 ldr r0, [r4, #0] - 801644e: 4401 add r1, r0 - 8016450: 1850 adds r0, r2, r1 - 8016452: 4283 cmp r3, r0 - 8016454: 6011 str r1, [r2, #0] - 8016456: d1e0 bne.n 801641a <_free_r+0x22> - 8016458: 6818 ldr r0, [r3, #0] - 801645a: 685b ldr r3, [r3, #4] - 801645c: 4408 add r0, r1 - 801645e: 6010 str r0, [r2, #0] - 8016460: 6053 str r3, [r2, #4] - 8016462: e7da b.n 801641a <_free_r+0x22> - 8016464: d902 bls.n 801646c <_free_r+0x74> - 8016466: 230c movs r3, #12 - 8016468: 602b str r3, [r5, #0] - 801646a: e7d6 b.n 801641a <_free_r+0x22> - 801646c: 6820 ldr r0, [r4, #0] - 801646e: 1821 adds r1, r4, r0 - 8016470: 428b cmp r3, r1 - 8016472: bf01 itttt eq - 8016474: 6819 ldreq r1, [r3, #0] - 8016476: 685b ldreq r3, [r3, #4] - 8016478: 1809 addeq r1, r1, r0 - 801647a: 6021 streq r1, [r4, #0] - 801647c: 6063 str r3, [r4, #4] - 801647e: 6054 str r4, [r2, #4] - 8016480: e7cb b.n 801641a <_free_r+0x22> - 8016482: bd38 pop {r3, r4, r5, pc} - 8016484: 200011d4 .word 0x200011d4 - -08016488 <__ascii_mbtowc>: - 8016488: b082 sub sp, #8 - 801648a: b901 cbnz r1, 801648e <__ascii_mbtowc+0x6> - 801648c: a901 add r1, sp, #4 - 801648e: b142 cbz r2, 80164a2 <__ascii_mbtowc+0x1a> - 8016490: b14b cbz r3, 80164a6 <__ascii_mbtowc+0x1e> - 8016492: 7813 ldrb r3, [r2, #0] - 8016494: 600b str r3, [r1, #0] - 8016496: 7812 ldrb r2, [r2, #0] - 8016498: 1e10 subs r0, r2, #0 - 801649a: bf18 it ne - 801649c: 2001 movne r0, #1 - 801649e: b002 add sp, #8 - 80164a0: 4770 bx lr - 80164a2: 4610 mov r0, r2 - 80164a4: e7fb b.n 801649e <__ascii_mbtowc+0x16> - 80164a6: f06f 0001 mvn.w r0, #1 - 80164aa: e7f8 b.n 801649e <__ascii_mbtowc+0x16> - -080164ac <_malloc_usable_size_r>: - 80164ac: f851 3c04 ldr.w r3, [r1, #-4] - 80164b0: 1f18 subs r0, r3, #4 - 80164b2: 2b00 cmp r3, #0 - 80164b4: bfbc itt lt - 80164b6: 580b ldrlt r3, [r1, r0] - 80164b8: 18c0 addlt r0, r0, r3 - 80164ba: 4770 bx lr - -080164bc <__ascii_wctomb>: - 80164bc: 4603 mov r3, r0 - 80164be: 4608 mov r0, r1 - 80164c0: b141 cbz r1, 80164d4 <__ascii_wctomb+0x18> - 80164c2: 2aff cmp r2, #255 @ 0xff - 80164c4: d904 bls.n 80164d0 <__ascii_wctomb+0x14> - 80164c6: 228a movs r2, #138 @ 0x8a - 80164c8: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 80164cc: 601a str r2, [r3, #0] - 80164ce: 4770 bx lr - 80164d0: 2001 movs r0, #1 - 80164d2: 700a strb r2, [r1, #0] - 80164d4: 4770 bx lr - -080164d6 <_raise_r>: - 80164d6: 291f cmp r1, #31 - 80164d8: b538 push {r3, r4, r5, lr} - 80164da: 4605 mov r5, r0 - 80164dc: 460c mov r4, r1 - 80164de: d904 bls.n 80164ea <_raise_r+0x14> - 80164e0: 2316 movs r3, #22 - 80164e2: 6003 str r3, [r0, #0] - 80164e4: f04f 30ff mov.w r0, #4294967295 @ 0xffffffff - 80164e8: bd38 pop {r3, r4, r5, pc} - 80164ea: 6bc2 ldr r2, [r0, #60] @ 0x3c - 80164ec: b112 cbz r2, 80164f4 <_raise_r+0x1e> - 80164ee: f852 3021 ldr.w r3, [r2, r1, lsl #2] - 80164f2: b94b cbnz r3, 8016508 <_raise_r+0x32> - 80164f4: 4628 mov r0, r5 - 80164f6: f000 f831 bl 801655c <_getpid_r> - 80164fa: 4622 mov r2, r4 - 80164fc: 4601 mov r1, r0 - 80164fe: 4628 mov r0, r5 - 8016500: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 8016504: f000 b818 b.w 8016538 <_kill_r> - 8016508: 2b01 cmp r3, #1 - 801650a: d00a beq.n 8016522 <_raise_r+0x4c> - 801650c: 1c59 adds r1, r3, #1 - 801650e: d103 bne.n 8016518 <_raise_r+0x42> - 8016510: 2316 movs r3, #22 - 8016512: 6003 str r3, [r0, #0] - 8016514: 2001 movs r0, #1 - 8016516: e7e7 b.n 80164e8 <_raise_r+0x12> - 8016518: 2100 movs r1, #0 - 801651a: 4620 mov r0, r4 - 801651c: f842 1024 str.w r1, [r2, r4, lsl #2] - 8016520: 4798 blx r3 - 8016522: 2000 movs r0, #0 - 8016524: e7e0 b.n 80164e8 <_raise_r+0x12> - ... - -08016528 : - 8016528: 4b02 ldr r3, [pc, #8] @ (8016534 ) - 801652a: 4601 mov r1, r0 - 801652c: 6818 ldr r0, [r3, #0] - 801652e: f7ff bfd2 b.w 80164d6 <_raise_r> - 8016532: bf00 nop - 8016534: 20000090 .word 0x20000090 - -08016538 <_kill_r>: - 8016538: b538 push {r3, r4, r5, lr} - 801653a: 2300 movs r3, #0 - 801653c: 4d06 ldr r5, [pc, #24] @ (8016558 <_kill_r+0x20>) - 801653e: 4604 mov r4, r0 - 8016540: 4608 mov r0, r1 - 8016542: 4611 mov r1, r2 - 8016544: 602b str r3, [r5, #0] - 8016546: f7f7 fdc2 bl 800e0ce <_kill> - 801654a: 1c43 adds r3, r0, #1 - 801654c: d102 bne.n 8016554 <_kill_r+0x1c> - 801654e: 682b ldr r3, [r5, #0] - 8016550: b103 cbz r3, 8016554 <_kill_r+0x1c> - 8016552: 6023 str r3, [r4, #0] - 8016554: bd38 pop {r3, r4, r5, pc} - 8016556: bf00 nop - 8016558: 200011d8 .word 0x200011d8 - -0801655c <_getpid_r>: - 801655c: f7f7 bdb0 b.w 800e0c0 <_getpid> - -08016560 <_init>: - 8016560: b5f8 push {r3, r4, r5, r6, r7, lr} - 8016562: bf00 nop - 8016564: bcf8 pop {r3, r4, r5, r6, r7} - 8016566: bc08 pop {r3} - 8016568: 469e mov lr, r3 - 801656a: 4770 bx lr - -0801656c <_fini>: - 801656c: b5f8 push {r3, r4, r5, r6, r7, lr} - 801656e: bf00 nop - 8016570: bcf8 pop {r3, r4, r5, r6, r7} - 8016572: bc08 pop {r3} - 8016574: 469e mov lr, r3 - 8016576: 4770 bx lr diff --git a/Debug/GbTModuleSW30Web.srec b/Debug/GbTModuleSW30Web.srec deleted file mode 100755 index 003c7bd..0000000 --- a/Debug/GbTModuleSW30Web.srec +++ /dev/null @@ -1,3903 +0,0 @@ -S01800004762544D6F64756C65535733305765622E737265637E -S3150800800000000120D9E70008DDDF0008E5DF0008E9 -S31508008010EDDF0008F5DF0008FDDF000800000000BE -S3150800802000000000000000000000000005E0000855 -S3150800803011E00008000000001DE0000829E0000823 -S3150800804029E8000829E8000829E8000829E80008BE -S3150800805029E8000829E8000829E8000829E80008AE -S3150800806029E8000829E8000829E8000829E800089E -S3150800807029E8000829E8000829E8000829E800088E -S3150800808029E8000829E8000829E8000829E800087E -S3150800809035E0000829E8000829E8000829E800086A -S315080080A029E8000829E8000829E8000829E800085E -S315080080B029E8000829E8000829E8000829E800084E -S315080080C029E8000829E8000829E8000829E800083E -S315080080D029E8000849E000085DE0000871E00008AA -S315080080E029E8000829E8000829E800080000000037 -S315080080F00000000000000000000000000000000072 -S31508008100000000000000000029E8000829E800082F -S3150800811029E8000885E0000829E8000829E8000899 -S3150800812029E8000829E8000829E8000829E80008DD -S3150800813029E8000829E8000829E8000899E0000865 -S3150800814029E80008ADE0000829E8000829E8000841 -S315080081500000000000000000000000000000000011 -S315080081600000000000000000000000000000000001 -S3150800817000000000000000000000000000000000F1 -S3150800818000000000000000000000000000000000E1 -S3150800819000000000000000000000000000000000D1 -S315080081A000000000000000000000000000000000C1 -S315080081B000000000000000000000000000000000B1 -S315080081C000000000000000000000000000000000A1 -S315080081D00000000000000000000000000000000091 -S30D080081E05FF8E0F166666666C9 -S315080081E810B5054C237833B9044B13B10448AFF3DB -S315080081F800800123237010BD5002002000000000F3 -S315080082086065010808B5034B1BB103490348AFF37A -S31508008218008008BD000000005402002060650108BF -S31508008228034613F8012B002AFBD1181A01387047A0 -S3150800823881F0004102E000BF83F0004330B54FEA01 -S3150800824841044FEA430594EA050F08BF90EA020F6E -S315080082581FBF54EA000C55EA020C7FEA645C7FEA01 -S31508008268655C00F0E2804FEA5454D4EB5555B8BF24 -S315080082786D420CDD2C4480EA020281EA030382EA95 -S31508008288000083EA010180EA020281EA0303362D27 -S3150800829888BF30BD11F0004F4FEA01314FF4801CFA -S315080082A84CEA113102D0404261EB410113F0004F0C -S315080082B84FEA03334CEA133302D0524263EB4303C3 -S315080082C894EA050F00F0A780A4F10104D5F1200E61 -S315080082D80DDB02FA0EFC22FA05F2801841F10001BC -S315080082E803FA0EF2801843FA05F359410EE0A5F190 -S315080082F820050EF1200E012A03FA0EFC28BF4CF0C1 -S31508008308020C43FA05F3C01851EBE37101F0004576 -S3150800831807D54FF0000EDCF1000C7EEB00006EEB83 -S315080083280101B1F5801F1BD3B1F5001F0CD349080D -S315080083385FEA30004FEA3C0C04F101044FEA445264 -S3150800834812F5800F80F09A80BCF1004F08BF5FEAEB -S31508008358500C50F1000041EB045141EA050130BDCB -S315080083685FEA4C0C404141EB0101013C28BFB1F5DD -S31508008378801FE9D291F0000F04BF01460020B1FA28 -S3150800838881F308BF2033A3F10B03B3F120020CDAFB -S315080083980C3208DD02F1140CC2F10C0201FA0CF0D9 -S315080083A821FA02F10CE002F11402D8BFC2F1200C3E -S315080083B801FA02F120FA0CFCDCBF41EA0C019040F4 -S315080083C8E41AA2BF01EB0451294330BD6FEA04043D -S315080083D81F3C1CDA0C340EDC04F11404C4F1200228 -S315080083E820FA04F001FA02F340EA030021FA04F33A -S315080083F845EA030130BDC4F10C04C4F1200220FA91 -S3150800840802F001FA04F340EA0300294630BD21FACE -S3150800841804F0294630BD94F0000F83F4801306BF94 -S3150800842881F480110134013D4EE77FEA645C18BF88 -S315080084387FEA655C29D094EA050F08BF90EA020F1F -S3150800844805D054EA000C04BF1946104630BD91EA17 -S31508008458030F1EBF0021002030BD5FEA545C05D11A -S315080084684000494128BF41F0004130BD14F5800459 -S315080084783CBF01F5801130BD01F0004545F0FE41CD -S3150800848841F470014FF0000030BD7FEA645C1ABF02 -S31508008498194610467FEA655C1CBF0B46024650EA39 -S315080084A8013406BF52EA033591EA030F41F4002165 -S315080084B830BD00BF90F0000F04BF0021704730B5EB -S315080084C84FF4806404F132044FF000054FF00001C0 -S315080084D850E700BF90F0000F04BF0021704730B581 -S315080084E84FF4806404F1320410F0004548BF404256 -S315080084F84FF000013EE700BF42004FEAE2014FEAAB -S3150800850831014FEA02701FBF12F07F4393F07F4F85 -S3150800851881F06051704732F07F4208BF704793F088 -S315080085287F4F04BF41F40021704730B54FF460749B -S3150800853801F0004521F000411CE700BF50EA01029E -S3150800854808BF704730B54FF000050AE050EA010247 -S3150800855808BF704730B511F0004502D5404261EBB7 -S3150800856841014FF4806404F132045FEA915C3FF4F8 -S31508008578D8AE4FF003025FEADC0C18BF03325FEA95 -S31508008588DC0C18BF033202EBDC02C2F1200300FA46 -S3150800859803FC20FA02F001FA03FE40EA0E0021FA6B -S315080085A802F11444BDE600BF70B54FF0FF0C4CF459 -S315080085B8E06C1CEA11541DBF1CEA135594EA0C0F0B -S315080085C895EA0C0F00F0DEF82C4481EA030621EA46 -S315080085D84C5123EA4C5350EA013518BF52EA033581 -S315080085E841F4801143F4801338D0A0FB02CE4FF033 -S315080085F80005E1FB02E506F00042E0FB03E54FF063 -S315080086080006E1FB03569CF0000F18BF4EF0010E5A -S31508008618A4F1FF04B6F5007F64F5407404D25FEA56 -S315080086284E0E6D4146EB060642EAC62141EA555109 -S315080086384FEAC52040EA5E504FEACE2EB4F1FD0C4B -S3150800864888BFBCF5E06F1ED8BEF1004F08BF5FEAC9 -S31508008658500E50F1000041EB045170BD06F000467B -S3150800866846EA010140EA020081EA0301B4EB5C0428 -S31508008678C2BFD4EB0C0541EA045170BD41F4801120 -S315080086884FF0000E013C00F3AB8014F1360FDEBF45 -S31508008698002001F0004170BDC4F10004203C35DA21 -S315080086A80C341BDC04F11404C4F1200500FA05F3A4 -S315080086B820FA04F001FA05F240EA020001F0004245 -S315080086C821F0004110EBD37021FA04F642EB0601BB -S315080086D85EEA430E08BF20EAD37070BDC4F10C04E5 -S315080086E8C4F1200500FA04F320FA05F001FA04F2A9 -S315080086F840EA020001F0004110EBD37041F1000195 -S315080087085EEA430E08BF20EAD37070BDC4F120059F -S3150800871800FA05F24EEA020E20FA04F301FA05F207 -S3150800872843EA020321FA04F001F0004121FA04F2AF -S3150800873820EA020000EBD3705EEA430E08BF20EA7F -S31508008748D37070BD94F0000F0FD101F000464000B9 -S3150800875841EB010111F4801F08BF013CF7D041EA3B -S31508008768060195F0000F18BF704703F0004652003F -S3150800877843EB030313F4801F08BF013DF7D043EA10 -S315080087880603704794EA0C0F0CEA135518BF95EAC6 -S315080087980C0F0CD050EA410618BF52EA4306D1D14D -S315080087A881EA030101F000414FF0000070BD50EA6C -S315080087B8410606BF1046194652EA430619D094EAF6 -S315080087C80C0F02D150EA013613D195EA0C0F05D1E0 -S315080087D852EA03361CBF104619460AD181EA030134 -S315080087E801F0004141F0FE4141F470014FF00000EC -S315080087F870BD41F0FE4141F4780170BD70B54FF087 -S31508008808FF0C4CF4E06C1CEA11541DBF1CEA135506 -S3150800881894EA0C0F95EA0C0F00F0A7F8A4EB0504E8 -S3150800882881EA030E52EA03354FEA013100F08880DF -S315080088384FEA03334FF0805545EA131343EA1263A8 -S315080088484FEA022245EA111545EA10654FEA00265D -S315080088580EF000419D4208BF964244F1FD0404F516 -S31508008868407402D25B084FEA3202B61A65EB030572 -S315080088785B084FEA32024FF480104FF4002CB6EB2F -S31508008888020E75EB030E22BFB61A754640EA0C00AF -S315080088985B084FEA3202B6EB020E75EB030E22BFEF -S315080088A8B61A754640EA5C005B084FEA3202B6EB30 -S315080088B8020E75EB030E22BFB61A754640EA9C00EF -S315080088C85B084FEA3202B6EB020E75EB030E22BFBF -S315080088D8B61A754640EADC0055EA060E18D04FEA7D -S315080088E8051545EA16754FEA06164FEAC30343EA1D -S315080088F852734FEAC2025FEA1C1CC0D111F4801FEA -S315080089080BD141EA00014FF000004FF0004CB6E7E2 -S3150800891811F4801F04BF01430020B4F1FD0C88BF81 -S31508008928BCF5E06F3FF6AFAEB5EB030C04BFB6EB8C -S31508008938020C5FEA500C50F1000041EB045170BD7F -S315080089480EF0004E4EEA113114EB5C04C2BFD4EBAC -S315080089580C0541EA045170BD41F480114FF0000E30 -S31508008968013C90E645EA060E8DE60CEA135594EAAC -S315080089780C0F08BF95EA0C0F3FF43BAF94EA0C0FAF -S315080089880AD150EA01347FF434AF95EA0C0F7FF424 -S3150800899825AF104619462CE795EA0C0F06D152EA78 -S315080089A803353FF4FDAE1046194622E750EA41065C -S315080089B818BF52EA43067FF4C5AE50EA41047FF46D -S315080089C80DAF52EA43057FF4EBAE12E74FF0FF3CD2 -S315080089D806E000BF4FF0010C02E000BF4FF0010CA3 -S315080089E84DF804CD4FEA410C7FEA6C5C4FEA430C1C -S315080089F818BF7FEA6C5C1BD001B050EA410C0CBF6B -S31508008A0852EA430C91EA030F02BF90EA020F0020CC -S31508008A18704710F1000F91EA030F58BF994208BF33 -S31508008A2890422CBFD8176FEAE37040F001007047F0 -S31508008A384FEA410C7FEA6C5C02D150EA013C07D147 -S31508008A484FEA430C7FEA6C5CD6D152EA033CD3D092 -S31508008A585DF8040B704700BF8446104662468C468C -S31508008A681946634600E000BF01B5FFF7B7FF0028BF -S31508008A7848BF10F1000F01BD4DF808EDFFF7F4FFE8 -S31508008A880CBF012000205DF808FB00BF4DF808ED73 -S31508008A98FFF7EAFF34BF012000205DF808FB00BF96 -S31508008AA84DF808EDFFF7E0FF94BF012000205DF8B8 -S31508008AB808FB00BF4DF808EDFFF7CEFF94BF01206D -S31508008AC800205DF808FB00BF4DF808EDFFF7C4FF66 -S31508008AD834BF012000205DF808FB00BF4FEA410CAF -S31508008AE87FEA6C5C02D150EA013C0AD14FEA430C92 -S31508008AF87FEA6C5C02D152EA033C02D14FF00000CF -S31508008B0870474FF0010070474FEA410212F500120C -S31508008B1815D211D56FF47873B3EB625212D94FEAAE -S31508008B28C12343F0004343EA505311F0004F23FA98 -S31508008B3802F018BF404270474FF00000704750EAED -S31508008B48013005D111F0004008BF6FF000407047AA -S31508008B584FF00000704700BF4FEA4102B2F1E04308 -S31508008B6824BFB3F5001CDCF1FE5C0DD901F0004CFE -S31508008B784FEAC0024CEA5070B2F1004F40EB83004E -S31508008B8808BF20F00100704711F0804F21D113F17A -S31508008B983872BCBF01F00040704741F480114FEAB3 -S31508008BA85252C2F11802C2F1200C10FA0CF320FA3C -S31508008BB802F018BF40F001004FEAC1234FEAD32359 -S31508008BC803FA0CFC40EA0C0023FA02F34FEA4303C3 -S31508008BD8CCE77FEA625307D150EA01331EBF4FF04C -S31508008BE8FE4040F44000704701F0004040F0FE4067 -S31508008BF840F40000704700BF80F0004002E000BF64 -S31508008C0881F0004142001FBF5FEA410392EA030F61 -S31508008C187FEA226C7FEA236C6AD04FEA1262D2EBAB -S31508008C281363C1BFD218414048404140B8BF5B42B0 -S31508008C38192B88BF704710F0004F40F4000020F049 -S31508008C487F4018BF404211F0004F41F4000121F05F -S31508008C587F4118BF494292EA030F3FD0A2F10102A9 -S31508008C6841FA03FC10EB0C00C3F1200301FA03F1E7 -S31508008C7800F0004302D5494260EB4000B0F5000F0A -S31508008C8813D3B0F1807F06D340084FEA310102F1C9 -S31508008C980102FE2A51D2B1F1004F40EBC25008BF7B -S31508008CA820F0010040EA03007047490040EB000045 -S31508008CB8013A28BFB0F5000FEDD2B0FA80FCACF146 -S31508008CC8080CB2EB0C0200FA0CF0AABF00EBC25073 -S31508008CD852421843BCBFD0401843704792F0000F61 -S31508008CE881F4000106BF80F400000132013BB5E7B4 -S31508008CF84FEA41037FEA226C18BF7FEA236C21D02A -S31508008D0892EA030F04D092F0000F08BF084670478E -S31508008D1890EA010F1CBF0020704712F07F4F04D15C -S31508008D28400028BF40F00040704712F100723CBF6F -S31508008D3800F50000704700F0004343F0FE4040F499 -S31508008D48000070477FEA226216BF08467FEA236357 -S31508008D580146420206BF5FEA412390EA010F40F442 -S31508008D68800070474FF0000304E000BF10F000438E -S31508008D7848BF40425FEA000C08BF704743F0964375 -S31508008D8801464FF000001CE050EA010208BF704790 -S31508008D984FF000030AE000BF50EA010208BF704717 -S31508008DA811F0004302D5404261EB41015FEA010C2C -S31508008DB802BF84460146002043F0B64308BFA3F124 -S31508008DC88053A3F50003BCFA8CF2083AA3EBC25306 -S31508008DD810DB01FA02FC634400FA02FCC2F1200225 -S31508008DE8BCF1004F20FA02F243EB020008BF20F05C -S31508008DF80100704702F1200201FA02FCC2F12002C2 -S31508008E0850EA4C0021FA02F243EB020008BF20EAB6 -S31508008E18DC7070474FF0FF0C1CEAD0521EBF1CEAE4 -S31508008E28D15392EA0C0F93EA0C0F6FD01A4480EAD2 -S31508008E38010C400218BF5FEA41211ED04FF00063BB -S31508008E4843EA501043EA5111A0FB01310CF00040E7 -S31508008E58B1F5000F3EBF490041EAD3715B0040EA0D -S31508008E68010062F17F02FD2A1DD8B3F1004F40EBDD -S31508008E78C25008BF20F00100704790F0000F0CF0B0 -S31508008E88004C08BF49024CEA502040EA51207F3A74 -S31508008E98C2BFD2F1FF0340EAC250704740F400004F -S31508008EA84FF00003013A5DDC12F1190FDCBF00F040 -S31508008EB800407047C2F10002410021FA02F1C2F1EE -S31508008EC8200200FA02FC5FEA310040F1000053EA8A -S31508008ED84C0308BF20EADC70704792F0000F00F0D8 -S31508008EE8004C02BF400010F4000F013AF9D040EADE -S31508008EF80C0093F0000F01F0004C02BF490011F472 -S31508008F08000F013BF9D041EA0C018FE70CEAD1536F -S31508008F1892EA0C0F18BF93EA0C0F0AD030F0004CEF -S31508008F2818BF31F0004CD8D180EA010000F00040A3 -S31508008F38704790F0000F17BF90F0004F084691F061 -S31508008F48000F91F0004F14D092EA0C0F01D142029B -S31508008F580FD193EA0C0F03D14B0218BF084608D164 -S31508008F6880EA010000F0004040F0FE4040F40000AE -S31508008F78704740F0FE4040F4400070474FF0FF0C41 -S31508008F881CEAD0521EBF1CEAD15392EA0C0F93EA88 -S31508008F980C0F69D0A2EB030280EA010C49024FEADA -S31508008FA8402037D04FF0805343EA111143EA101393 -S31508008FB80CF000408B4238BF5B0042F17D024FF44B -S31508008FC8000C8B4224BF5B1A40EA0C00B3EB510F26 -S31508008FD824BFA3EB510340EA5C00B3EB910F24BF0F -S31508008FE8A3EB910340EA9C00B3EBD10F24BFA3EB94 -S31508008FF8D10340EADC001B0118BF5FEA1C1CE0D15C -S31508009008FD2A3FF650AF8B4240EBC25008BF20F00E -S31508009018010070470CF0004C4CEA50207F32C2BF62 -S31508009028D2F1FF0340EAC250704740F400004FF0FF -S315080090380003013A37E792F0000F00F0004C02BF30 -S31508009048400010F4000F013AF9D040EA0C0093F0FA -S31508009058000F01F0004C02BF490011F4000F013B54 -S31508009068F9D041EA0C0195E70CEAD15392EA0C0FBC -S3150800907808D142027FF47DAF93EA0C0F7FF470AFF4 -S31508009088084676E793EA0C0F04D14B023FF44CAF37 -S3150800909808466EE730F0004C18BF31F0004CCAD1CC -S315080090A830F000427FF45CAF31F000437FF43CAF08 -S315080090B85FE700BF4FF0FF3C06E000BF4FF0010C2A -S315080090C802E000BF4FF0010C4DF804CD4FEA40020C -S315080090D84FEA41037FEA226C18BF7FEA236C11D056 -S315080090E801B052EA530C18BF90EA010F58BFB2EB09 -S315080090F8030088BFC81738BF6FEAE17018BF40F089 -S31508009108010070477FEA226C02D15FEA402C05D13C -S315080091187FEA236CE4D15FEA412CE1D05DF8040BC1 -S31508009128704700BF844608466146FFE70FB5FFF754 -S31508009138C9FF002848BF10F1000F0FBD4DF808ED0C -S31508009148FFF7F4FF0CBF012000205DF808FB00BFFD -S315080091584DF808EDFFF7EAFF34BF012000205DF857 -S3150800916808FB00BF4DF808EDFFF7E0FF94BF0120A4 -S3150800917800205DF808FB00BF4DF808EDFFF7D2FFA1 -S3150800918894BF012000205DF808FB00BF4DF808EDE4 -S31508009198FFF7C8FF34BF012000205DF808FB00BFB1 -S315080091A84FEA4002B2F1FE4F0FD34FF09E03B3EBDE -S315080091B812620DD94FEA002343F0004310F0004F1E -S315080091C823FA02F018BF404270474FF00000704774 -S315080091D812F1610F01D1420205D110F0004008BF13 -S315080091E86FF0004070474FF0000070477BB972B9BE -S315080091F80029BEBF00204FF0004106E008BF00283E -S315080092081CBF6FF000414FF0FF3000F0D7B9ADF141 -S31508009218080C6DE904CE002909DB002B1ADB00F0DF -S315080092284DF8DDF804E0DDE9022304B07047404252 -S3150800923861EB4101002B1BDB00F040F8DDF804E088 -S31508009248DDE9022304B0404261EB4101524263EB77 -S3150800925843037047524263EB430300F02FF8DDF8E7 -S3150800926804E0DDE9022304B0404261EB410170479E -S31508009278524263EB430300F021F8DDF804E0DDE928 -S31508009288022304B0524263EB4303704753B94AB901 -S31508009298002908BF00281CBF4FF0FF314FF0FF30E8 -S315080092A800F08CB9ADF1080C6DE904CE00F006F8AB -S315080092B8DDF804E0DDE9022304B070472DE9F0473C -S315080092C8089D8E4604468846002B4AD18A42174688 -S315080092D862D9B2FA82F64EB1C6F1200301FA06F847 -S315080092E820FA03F3B74043EA0808B4404FEA174E92 -S315080092F8B8FBFEF11FFA87FC0EFB118801FB0CF27E -S31508009308230C43EA08439A4209D9FB1801F1FF30AE -S3150800931880F0EB809A4240F2E88002393B449A1A78 -S31508009328B2FBFEF00EFB102200FB0CFCA3B243EACC -S3150800933802439C4509D9FB1800F1FF3280F0D78013 -S315080093489C4540F2D4803B44023840EA014000215B -S31508009358A3EB0C031DB10022F340C5E90032BDE8B2 -S31508009368F0878B4205D90DB1C5E9000100210846E9 -S31508009378F5E7B3FA83F1002946D1734502D3824249 -S3150800938800F20881841A6EEB030201209046002D2C -S31508009398E5D0C5E90048E2E7002A00F09180B2FA6C -S315080093A882F6002E40F0A5808A1A0121030C4FEA9E -S315080093B8174E80B2BCB2B2FBFEFC0EFB1C2243EA77 -S315080093C8024304FB0CF29A4207D9FB180CF1FF3842 -S315080093D802D29A4200F2E380C4469B1AB3FBFEF215 -S315080093E80EFB123302FB04F440EA03439C4207D9F6 -S315080093F8FB1802F1FF3002D29C4200F2CD800246E9 -S315080094081B1B42EA0C40A5E7C1F120068B4022FA4D -S3150800941806F71F432EFA06FA4FEA1749BAFBF9F870 -S315080094280EFA01FE20FA06F309FB18AA1FFA87FCAA -S3150800943843EA0E0300FA01FE08FB0CF01C0C44EA8A -S315080094480A44A04202FA01F20AD93C1908F1FF3A7D -S3150800945880F09E80A04240F29B80A8F102083C4416 -S31508009468241A98B2B4FBF9F309FB134403FB0CFC62 -S3150800947840EA0444A44509D93C1903F1FF3080F0B1 -S315080094888580A44540F28280023B3C4443EA084072 -S31508009498A4EB0C04A0FB028C64454346E14664D35E -S315080094A861D05DB1BEEB030264EB090404FA06F663 -S315080094B822FA01F31E43CC40C5E9006400214EE7B1 -S315080094C8B1FBF2FC010C41EA0E4180B240EA0142C6 -S315080094D83B46B1FBF7F138463C46B846BE46202619 -S315080094E8A2EB080241EA0C4165E7014617E7104670 -S315080094F82BE7C6F120012EFA01FCB7400EFA06FE44 -S3150800950820FA01F141EA0E014FEA174EBCFBFEF8B4 -S31508009518BCB20EFB18CC08FB04F90A0C42EA0C424A -S31508009528B04091454FEA104380B23ED9BA1808F1BF -S31508009538FF3C01D291451FD8A2EB0902B2FBFEF9FE -S3150800954809FB04F80EFB192A8AB242EA0A4242457E -S3150800955829D2BA1809F1FF31C2D24245C0D2A9F1B7 -S3150800956802013A44BCE7C6459BD2B8EB02036CEB4A -S31508009578070C0138E14694E7A7EB09094A44B2FB08 -S31508009588FEF9A8F1020C09FB04F8DBE703467DE7B8 -S31508009598D04665E70846FAE63B44023A30E7ACF1B6 -S315080095A8020C3B4419E749469AE7A2EB0902B2FBC3 -S315080095B8FEF9C44609FB04F8C4E700BF704700BFB4 -S315080095C880B584B000AF3B1D00221A605A609A60C5 -S315080095D8184B194A1A60174B00229A60154B002235 -S315080095E81A73144B00221A75124B4FF46022DA616B -S315080095F8104B00225A600F4B01221A610D4805F0DC -S3150800960897F90346002B01D002F0EAFE08237B608F -S315080096180123BB600023FB603B1D1946054805F07E -S315080096284BFC0346002B01D002F0DAFE00BF1037C8 -S31508009638BD4680BD6C0200200024014080B58AB072 -S3150800964800AF786007F1180300221A605A609A601A -S31508009658DA607B681B681F4A934237D11E4B9B69A1 -S315080096681D4A43F4007393611B4B9B6903F400730B -S315080096787B617B69184B9B69174A43F0040393611E -S31508009688154B9B6903F004033B613B69124B9B69C5 -S31508009698114A43F0080393610F4B9B6903F00803CB -S315080096A8FB60FB680823BB610323FB6107F118030A -S315080096B819460A4806F07AFF0323BB610323FB61B0 -S315080096C807F118031946064806F070FF00BF283741 -S315080096D8BD4680BD00240140001002400008014034 -S315080096E8000C014080B582B000AF03460A46FB71FC -S315080096F81346BB71FB79062B47D801A252F823F00B -S3150800970825970008359700084597000855970008D3 -S31508009718659700087597000885970008BB791A4663 -S315080097284FF480711D4807F0DCF82FE0BB791A461C -S315080097384FF40071194807F0D4F827E0BB791A46A0 -S315080097484FF48061154807F0CCF81FE0BB791A4634 -S315080097584FF40061114807F0C4F817E0BB791A46B8 -S315080097684FF480510D4807F0BCF80FE0BB791A464C -S315080097784FF400410A4807F0B4F807E0BB791A46DF -S315080097880821084807F0ADF800E000BFFB7906494C -S31508009798BA79CA5400BF0837BD4680BD00180140CB -S315080097A800080140001401409C02002080B483B0E0 -S315080097B800AF0346FB71FB79034AD35C18460C379E -S315080097C8BD4680BC704700BF9C02002080B582B0A9 -S315080097D800AF0346FB71FB79062B3BD801A252F86A -S315080097E823F000BF09980008159800082198000872 -S315080097F82D980008399800084598000851980008D7 -S315080098080221174807F056F8034624E004211448AD -S3150800981807F050F803461EE08021124807F04AF878 -S31508009828034618E08021104807F044F8034612E07A -S3150800983810210E4807F03EF803460CE008210B48AD -S3150800984807F038F8034606E00221064807F032F81A -S31508009858034600E0002318460837BD4680BD00BF0A -S31508009868000801400018014000140140000C01409E -S3150800987880B500AF104805F0B3FC00210020FFF7BB -S3150800988831FF00210120FFF72DFF00210220FFF7F5 -S3150800989829FF00210320FFF725FF00210420FFF7F1 -S315080098A821FF01210520FFF71DFF00210620FFF7EC -S315080098B819FF00BF80BD00BF6C02002090B587B0B5 -S315080098C800AF78600C4B7B610C4B3B617969786813 -S315080098D8FFF796F903461C4639697869FFF79AFA35 -S315080098E8034619462046FFF749FB0346FB60FB6813 -S315080098F818461C37BD4690BD00007A443211803B95 -S31508009908B0B586B000AFF860B9607A603B60F868B1 -S31508009918FEF7E0FD1CA3D3E90023FEF76FFF024616 -S315080099280B4614461D46B868FEF7E6FD02460B4682 -S3150800993820462946FEF738FE02460B4610461946C3 -S31508009948FFF70AF903467B6179687869FFF714FC1B -S315080099580346002B01D00E4B10E079697868FFF7AB -S315080099684FF9034619467869FFF708FB034619466F -S315080099783868FFF74FFA03463B613B6918461837BC -S31508009988BD46B0BDAFF300800000000000FEAF4042 -S31508009998000080BF80B588B000AF0346FB71FB792D -S315080099A8002B03D0082000F03BF802E0092000F05D -S315080099B837F8174805F094F84FF0FF31144805F0C2 -S315080099C869F9134805F06CFAF861114805F036F993 -S315080099D8FB69B3F57A6F01D9142315E00D4BBB6102 -S315080099E80D4B7B610D4B3B61F8693B697A69B9692F -S315080099F8FFF786FF03461846FFF760FFF860F86822 -S31508009A08FFF7CEFB03461BB218462037BD4680BD76 -S31508009A186C020020333353400000A04000007A440B -S31508009A2880B586B000AF78607B68FB6001233B6130 -S31508009A3803237B6107F10C031946064805F03CFA2F -S31508009A480346002B01D002F0CBFC00BF1837BD46F1 -S31508009A5880BD00BF6C02002080B500AF174B184ABE -S31508009A681A60164B08225A60144B00229A60134B48 -S31508009A780022DA60114B4FF460221A610F4B4FF43B -S31508009A8880125A610D4B00221A760C4B01225A761F -S31508009A980A4B01229A76094B0122DA76074B0022ED -S31508009AA81A77064B01225A77044805F047FC0346FD -S31508009AB8002B01D002F094FC00BF80BDA402002050 -S31508009AC80064004080B500AF174B184A1A60164B59 -S31508009AD810225A60144B00229A60134B0022DA604F -S31508009AE8114B4FF460221A610F4B4FF480125A61DA -S31508009AF80D4B00221A760C4B01225A760A4B012284 -S31508009B089A76094B0122DA76074B00221A77064B12 -S31508009B1801225A77044805F011FC0346002B01D0A8 -S31508009B2802F05EFC00BF80BDCC0200200068004041 -S31508009B3880B58EB000AF786007F1200300221A605E -S31508009B485A609A60DA607B681B68614A934253D107 -S31508009B58604B1B6801335F4A13605E4B1B68012B19 -S31508009B680BD15D4BDB695C4A43F00073D3615A4BF2 -S31508009B78DB6903F00073FB61FB69574B9B69564A1F -S31508009B8843F020039361544B9B6903F02003BB61A0 -S31508009B98BB6901233B6200237B620023BB6207F192 -S31508009BA8200319464D4806F001FD02233B620223AD -S31508009BB87B620323FB6207F120031946474806F030 -S31508009BC8F5FC474B5B683B633B6B23F4C0433B633D -S31508009BD83B6B43F0E0633B633B6B43F4C0433B6337 -S31508009BE83F4A3B6B536000220021142006F049FBCC -S31508009BF8142006F062FB67E07B681B68394A9342C3 -S31508009C0862D1354BDB69344A43F08063D361324B02 -S31508009C18DB6903F080637B617B692E4B1B68013324 -S31508009C282C4A13602B4B1B68012B0BD12A4BDB697B -S31508009C38294A43F00073D361274BDB6903F00073A5 -S31508009C483B613B69244B9B69234A43F008039361AC -S31508009C58214B9B6903F00803FB60FB6820233B62E2 -S31508009C6800237B620023BB6207F1200319461E48BE -S31508009C7806F09CFC40233B6202237B620323FB62BB -S31508009C8807F120031946184806F090FC144B5B6840 -S31508009C987B637B6B43F0E0637B637B6B43F48003F6 -S31508009CA87B630F4A7B6B5360002200213F2006F036 -S31508009CB8E8FA3F2006F001FB00220021412006F0C1 -S31508009CC8E0FA412006F0F9FA00BF3837BD4680BDEC -S31508009CD800640040F402002000100240001401400D -S31508009CE80000014000680040000C014080B400AF45 -S31508009CF8084B00221A70074B00225A70054B00229F -S31508009D0862F06902DA7300221A7400BFBD4680BC85 -S31508009D18704700BFF802002080B500AF1E4B5A787E -S31508009D281E4B1B789A4206D01B4B5A781B4B1A7047 -S31508009D38194B00221A701A4B5B78002B03D0164B66 -S31508009D4804225A7716E0174B1B7B002B03D0124BBD -S31508009D5807225A770EE0134B5B7B002B03D00E4B7A -S31508009D680A225A7706E00C4B9B7F002B02D10A4B36 -S31508009D7800225A77084B5B7F0021184602F0DEF965 -S31508009D880346002B06D0044B5B7F1A46002106487B -S31508009D980AF0EEF900BF80BDF8020020170300207C -S31508009DA808000020140A00207865010880B500AF6D -S31508009DB80B4B10221A7000F077FF0A4B42F210720A -S31508009DC81A80084B40F2DC525A80064B40F6B832E5 -S31508009DD89A80044B40F69672DA8000BF80BD00BFB1 -S31508009DE8180300203003002080B500AF0C4BD3F8C9 -S31508009DF80730184603F074FF094B1A78094B5A714D -S31508009E08074B5A78074B9A71054B9A78054BDA71BE -S31508009E18034BD3F80330034AC2F8013000BF80BDAC -S31508009E286C00002038030020B0B584B002AFAB4BF5 -S31508009E3893F80A31022B40F0D180A84BD3F80031A9 -S31508009E48B3F51C5F47D0B3F51C5F00F2C380B3F5C2 -S31508009E58E05F00F0B680B3F5E05F00F2BB80B3F5CB -S31508009E68B85F00F0B280B3F5B85F00F2B380B3F517 -S31508009E78B05F00F0AC80B3F5B05F00F2AB80B3F525 -S31508009E88A85F00F0A680B3F5A85F00F2A380B3F533 -S31508009E98985F00F08680B3F5985F00F29B80B3F56B -S31508009EA8885F6FD0B3F5885F00F29480B3F5805F5A -S31508009EB846D0B3F5805F00F28D80B3F5106F2CD0CD -S31508009EC8B3F5106F00F28680B3F5007F0BD0B3F5B3 -S31508009ED8C06F18D07EE0824B01221A707F4B1A8811 -S31508009EE8804B1A8076E0804B01221A707F4A7B4B9A -S31508009EF814461D460FCD0FC40FCD0FC40FCD0FC482 -S31508009F082B68237066E07A4B01221A70794A734BDC -S31508009F1814460FCB07C423705CE0774B01221A70EE -S31508009F286E4B1B78AA2B03D1744B01221A7002E0D8 -S31508009F38724B00221A70694B1A78714B1A7049E0ED -S31508009F4804F0C8FC03466F4A13606F4B634A92E8ED -S31508009F5803001860043319706B4B1B88FB806A4B27 -S31508009F685B88C3F57A63BB80FB88684AA2FB032330 -S31508009F78DB089AB2664BA3F80F20654BBA88A3F894 -S31508009F881B2027E004F0A6FC03465E4A1360614BD3 -S31508009F98524A07CA03C31A705E4B9A795C4B9A7081 -S31508009FA818E004F097FC0346564A13605A4B4B4A86 -S31508009FB892E8030018600433198002330A0C1A70F1 -S31508009FC808E0564B01221A7004E000BF02E000BF01 -S31508009FD800E000BF414B002283F80A2104F07AFC0E -S31508009FE802464F4B1B68D21A4E4B1B689A42C0F062 -S31508009FF8C7844D4B1B78103B122B00F2A28401A292 -S3150800A00852F823F059A000084BA900084BA90008E4 -S3150800A0187FA0000891A0000841A100088BA10008AC -S3150800A028FDA100089FA20008F1A200087DA4000867 -S3150800A03881A5000813A6000869A60008DBA600087B -S3150800A048C3A8000805A9000825A9000837A9000813 -S3150800A05800210020FFF746FB00210120FFF742FBFD -S3150800A068324B1B78032B40F0708400F01DFE00F07D -S3150800A078A9FE00F06ABC142000F0B4FC4FF4FA708C -S3150800A08800F068FD00F07CBC144B93F80A31002BED -S3150800A09801D101F0BDFAFA2000F05CFD104B1B78DF -S3150800A0A8002B02D0152000F09DFC0D4B1B78002BC9 -S3150800A0B840F04D8400F042FD034642F21072934286 -S3150800A0C840F245841A4800F0D3FD114B09225A7705 -S3150800A0D81849042001F042FA00F039BC7408002037 -S3150800A0E82B030020400300202803002044030020F7 -S3150800A0F829030020780300202A0300202D030020C6 -S3150800A108BC030020C403002088030020CDCCCCCC97 -S3150800A118F802002098030020A40300202C0300203E -S3150800A128200300202403002018030020D103002060 -S3150800A138FCC0F0FCC0650108AF4B93F80A31002B48 -S3150800A14801D101F065FAFA2000F004FDAB4B5B7A01 -S3150800A158002B02D0162000F045FC00F0EFFC034661 -S3150800A16842F21072934240F2F4834FF2F04000F044 -S3150800A1782BFDA34B0A225A77A249042001F0EEF9CF -S3150800A188FEE39D4B93F80A31002B01D101F040FA02 -S3150800A198FA2000F0DFFC9C4B1B889C4AA2FB032391 -S3150800A1A8DB089AB2964BA3F80F20954B002242F08B -S3150800A1B80A02DA7600221A77914B0122DA758F4B52 -S3150800A1C8DB79052B02D1172000F00CFC00F0B6FC51 -S3150800A1D8034642F21072934240F2BD834FF2F040B2 -S3150800A1E800F0F2FC864B0A225A778949042001F0C6 -S3150800A1F8B5F9C5E3804B93F80A31002B01D101F074 -S3150800A20807FAFA2000F0A6FC7D4B5B7F002B03D0EB -S3150800A2184FF2F04000F0D8FC00F090FC034641F2FB -S3150800A2288832934202D9182000F0DCFB794BB3F840 -S3150800A23801309BB21946774BB3F907301BB2DA0FD0 -S3150800A24813445B101BB2994206DA6D4B01225A7702 -S3150800A2587149052001F082F96E4BB3F801309BB2BB -S3150800A26819466C4BB3F907301BB26C4A82FB0302DA -S3150800A2789210DB17D31A1BB2994280F26E83604B91 -S3150800A28801225A776649052001F068F94FF2F0402D -S3150800A29800F09AFC61E35A4B0022DA7300221A741A -S3150800A2A8574B0022DA7600221A77554B0022DA75C0 -S3150800A2B800F044FC034641F2883293420BD94FF228 -S3150800A2C8F04000F081FC4E4B0A225A775549042083 -S3150800A2D801F044F954E3494B9B7A002B40F03F833D -S3150800A2E8192000F07FFB3AE3434B93F80A31002B19 -S3150800A2F802D1002001F0A0F9FA2000F02BFC4A4B05 -S3150800A3081B78002B60D01A2000F06CFB4749072001 -S3150800A31801F024F9464B1B781A46454B5B781946D3 -S3150800A328434B9B7800930B464249072001F016F9E0 -S3150800A3383F4BDB781A464049072001F00FF93C4B9A -S3150800A3489B881A463D49072001F008F9384BDB88EF -S3150800A3581A463B49072001F001F93A4A3A490720C3 -S3150800A36801F0FCF8324BDB681A463849072001F039 -S3150800A378F5F82F4B9B7C1A462D4B5B7C19462C4BC4 -S3150800A3881B7C03F2C17300930B463149072001F081 -S3150800A398E5F8274BDA7C9B8A1B0213431A462D4994 -S3150800A3A8072001F0DBF8224B9B7D1A462A4907202D -S3150800A3B801F0D4F8294A2A49072001F0CFF8294A92 -S3150800A3C82949072001F0CAF800F0B8FB034641F20C -S3150800A3D88832934240F2C582134B1B78002B40F013 -S3150800A3E8C082074B09225A77204800F041FC2049C9 -S3150800A3F8042001F0B3F8B4E274080020140A002017 -S3150800A408F8020020D065010840030020CDCCCCCC4A -S3150800A418F065010860000020106601086766666630 -S3150800A4282466010854660108280300207466010892 -S3150800A438440300208066010894660108A866010896 -S3150800A448C06601084C030020D8660108F0660108B2 -S3150800A4580467010830670108446701085C0300209F -S3150800A468546701086D03002064670108FCC0F0FD05 -S3150800A47878670108B04B93F80A31002B02D1AA2055 -S3150800A48801F0DAF8FA2000F065FBAC4B1B78002BD4 -S3150800A4985AD01B2000F0A6FAA949072001F05EF851 -S3150800A4A8A84B1B88A84AA2FB03235B099BB21A463A -S3150800A4B8A649072001F052F8A24B5B88A44AA2FBDA -S3150800A4C80323DB089BB21A46A249072001F046F87F -S3150800A4D89C4B9B889E4AA2FB0323DB089BB21A4621 -S3150800A4E89D49072001F03AF8964BDB88984AA2FB63 -S3150800A4F80323DB089BB21A469449072001F02EF875 -S3150800A508904B1B7A323B1A469449072001F026F8E5 -S3150800A5188C4BB3F809309BB28D4AA2FB0323DB08A0 -S3150800A5289BB21A468E49072001F018F8854BB3F8EE -S3150800A5380B309BB2864AA2FB0323DB089BB21A465A -S3150800A5488849072001F00AF800F0F8FA034641F2AC -S3150800A5588832934240F20782784B1B78002B40F0EA -S3150800A5680282814B09225A77804800F081FB80498C -S3150800A578042000F0F3FFF6E16F4B93F80A31002B3D -S3150800A58801D101F021F8022004F0AEF96A4B93F8DC -S3150800A5980A31002B01D101F02DF8FA2000F0DAFA79 -S3150800A5A800F0CCFA034641F2883293420DD9714B32 -S3150800A5B81B78002B09D16C4B09225A776E4800F094 -S3150800A5C857FB6E49042000F0C9FF6D4B1B78002B1A -S3150800A5D803D01C2000F006FAC7E100F0AFFA0346DC -S3150800A5E84EF66022934240F2C081624B1B78012BDB -S3150800A5F840F0BB815C4B09225A775F4800F038FB6C -S3150800A6086049042000F0AAFFAFE14B4B93F80A31E2 -S3150800A618002B02D1002001F025F8FA2000F09AFA5A -S3150800A628594B5B7A002B02D01D2000F0DBF900F0AD -S3150800A63885FA034641F27072934240F29881524B6A -S3150800A6485B7A002B40F093814FF2F04000F0BCFA99 -S3150800A658454B0A225A774D49042000F07FFF86E1C8 -S3150800A668354B93F80A31002B02D1AA2000F0FAFFDD -S3150800A678FA2000F06FFA464B1B79002B00F0798117 -S3150800A6881E2000F0AFF904F025F90346414A136085 -S3150800A698082000F0E7FC3E4B5B88C3F57A637B80AD -S3150800A6A83B4B1B883B803B88294AA2FB0323DB08D4 -S3150800A6B89AB22D4BA3F80F202B4B7A88A3F81B20A8 -S3150800A6C8294B0122DA7503F001FB0346324A136067 -S3150800A6D84FE104F0FFF802462E4B1B68D31AB3F570 -S3150800A6E8FA6F0BD94FF2F04000F06EFA1E4B0922AA -S3150800A6F85A772A49052000F031FF41E11A4B1B78A1 -S3150800A708012B02D1264800F07BFA174B1B78032B3E -S3150800A71802D1234800F074FA224B5B78002B45D007 -S3150800A7284FF2F04000F050FA0F4B04225A771E49B0 -S3150800A738052000F013FF23E17408002029030020F0 -S3150800A74888670108780300201F85EB519867010878 -S3150800A758CDCCCCCCA4670108B0670108BC67010852 -S3150800A768C8670108D4670108F8020020FCC0F1FC94 -S3150800A778E06701082A030020FCC0F4FCF06701081A -S3150800A7882D03002000680108140A0020186801082B -S3150800A79888030020C4030020C00300203468010889 -S3150800A7A8F0F00004080000205868010800F036FD9B -S3150800A7B80346032B0BD04FF2F04000F005FA784B0E -S3150800A7C808225A777749052000F0C8FED8E0002005 -S3150800A7D8FFF7E0F803465A2B05DC0120FFF7DAF8FD -S3150800A7E803465A2B14DD704800F0EEF96C4B052227 -S3150800A7F85A770020FFF7CEF803461C460120FFF7D4 -S3150800A808C9F8034622466949052000F0A7FEB7E0BD -S3150800A818674BB3F801309BB21946654BB3F9073055 -S3150800A8281BB2644A82FB03029210DB17D31A1BB2C7 -S3150800A838994206DA5A4B01225A775F49052000F0F1 -S3150800A8488DFE574B5B7F002B03D04FF2F04000F08C -S3150800A858BBF95A4B4FF6FD72DA8003F037FA02460F -S3150800A868574B1B68D31A574AA2FB03235B099AB2AC -S3150800A878524B9A804A4BB3F815309BB2C3F57A63A4 -S3150800A8889AB24E4B5A80464BB3F813309BB21A46C7 -S3150800A898920013445B009AB2484B1A804A4B93F8C5 -S3150800A8A80A31002B05D100F0F1FE312000F052F9EB -S3150800A8B866E00A2000F04EF962E00A2000F04AF93C -S3150800A8C8374B0022DA75414B1B68184600F0ECFE38 -S3150800A8D800F034F9034642F21072934206D93C490D -S3150800A8E8042000F03BFE3B4800F0C2F93A4B1B78BF -S3150800A8F8002B40D0202000F075F83CE0FA2000F044 -S3150800A90829F900F0F1FE00F019F9034640F6C412D9 -S3150800A918934232D9222000F065F82EE02F4B1B68A7 -S3150800A928184600F001FF222000F05CF828E02C4BBE -S3150800A9381B780A2B23D0102000F054F800F0B4F93D -S3150800A9481DE0102000F04EF81AE000BF18E000BF1E -S3150800A95816E000BF14E000BF12E000BF10E000BF19 -S3150800A9680EE000BF0CE000BF0AE000BF08E000BF29 -S3150800A97806E000BF04E000BF02E000BF00E000BF39 -S3150800A98800F04CFC0346032B03D1054B01229A77AA -S3150800A99802E0034B00229A7700BF0837BD46B0BDD0 -S3150800A9A8F802002074680108F0F0010094680108AC -S3150800A9B8600000206766666624660108AC03002006 -S3150800A9C8C00300208988888874080020C8030020E6 -S3150800A9D8BC680108FDC0F0FC2C030020CC0300204D -S3150800A9E8D103002080B582B000AF0346FB71424A06 -S3150800A9F8FB79137003F06EFF0346404A13603E4B1B -S3150800AA081B78102B03D13E49072000F0A7FD3A4BC7 -S3150800AA181B78132B03D13B49072000F09FFD364BC3 -S3150800AA281B78142B03D13849072000F097FD324BC1 -S3150800AA381B78152B03D13549072000F08FFD2E4BBF -S3150800AA481B78172B03D13249072000F087FD2A4BBC -S3150800AA581B78192B03D12F49072000F07FFD264BB9 -S3150800AA681B781A2B03D12C49072000F077FD224BB7 -S3150800AA781B781B2B03D12949072000F06FFD1E4BB5 -S3150800AA881B781C2B03D12649072000F067FD1A4BB3 -S3150800AA981B781D2B03D12349072000F05FFD164BB1 -S3150800AAA81B781E2B03D12049072000F057FD124BAF -S3150800AAB81B781F2B03D11D49072000F04FFD0E4BAD -S3150800AAC81B78202B03D11A49072000F047FD0A4BAB -S3150800AAD81B78212B03D11749072000F03FFD064BA9 -S3150800AAE81B78222B03D11449072000F037FD00BF35 -S3150800AAF80837BD4680BD00BF180300201C03002088 -S3150800AB08CC680108D8680108EC68010800690108DA -S3150800AB181869010828690108446901086069010873 -S3150800AB28746901088C690108A0690108B8690108EF -S3150800AB38CC690108E8690108F869010880B500AF19 -S3150800AB4803F0C8FE0246024B1B68D31A184680BD96 -S3150800AB581C03002080B582B000AF786003F0BAFE07 -S3150800AB680346044A1360044A7B68136000BF083723 -S3150800AB78BD4680BD200300202403002080B582B08E -S3150800AB8800AF78600C4B5B7F002B03D00B4B002281 -S3150800AB981A7002E0094B01221A70094A7B68136089 -S3150800ABA8084B1B781F2B02D01F20FFF71BFF00BF7F -S3150800ABB80837BD4680BD00BFF8020020D003002034 -S3150800ABC8C80300201803002080B582B000AF78605B -S3150800ABD8084B00221A70084A7B681360074B1B78D3 -S3150800ABE81F2B02D01F20FFF7FDFE00BF0837BD4602 -S3150800ABF880BD00BFD0030020C8030020180300202A -S3150800AC0880B582B000AF7860084B02221A70084AED -S3150800AC187B681360074B1B781F2B02D01F20FFF792 -S3150800AC28E1FE00BF0837BD4680BD00BFD00300203F -S3150800AC38C80300201803002080B500AF0A4B01227C -S3150800AC481A700A4B0022DA752220FFF7CBFE00207D -S3150800AC5801F02EF900210020FEF744FD002101200D -S3150800AC68FEF740FD00BF80BDD0030020F802002093 -S3150800AC7880B582B000AF7860084B01221A707A68EE -S3150800AC880749042000F06AFC064A7B6813602120FD -S3150800AC98FFF7A8FE00BF0837BD4680BDD0030020D1 -S3150800ACA80C6A0108CC03002080B500AF03F012FE39 -S3150800ACB80346314A1360314B00221A70304B002282 -S3150800ACC81A70304B00221A702F4B00221A702F4B1D -S3150800ACD800221A702E4B00221A702E4B00229A70E8 -S3150800ACE82C4B0022DA752B4B0022DA7600221A77CB -S3150800ACF8284B0022DA7300221A74312200212648CA -S3150800AD0809F048FA0D220021244809F043FA0522D9 -S3150800AD180021234809F03EFA05220021214809F0B6 -S3150800AD2839FA02220021204809F034FA09220021BA -S3150800AD381E4809F02FFA072200211D4809F02AFAA9 -S3150800AD48082200211B4809F025FA082200211A487A -S3150800AD5809F020FA134B4FF47A625A80114B4FF4D4 -S3150800AD68FA721A80154B00221A60154B00221A70BF -S3150800AD7801F0A8F900BF80BDC403002028030020FD -S3150800AD88290300202A0300202B0300202C03002077 -S3150800AD982D030020F8020020440300207803002031 -S3150800ADA88803002090030020400300209803002011 -S3150800ADB8A4030020AC030020B4030020C00300202D -S3150800ADC8BC03002080B500AF01210020FEF78AFCED -S3150800ADD801210120FEF786FC1320FFF703FE00BFBA -S3150800ADE880BD000080B582B000AF984B1B780C2B4D -S3150800ADF800F2168101A252F823F000BF39AE000806 -S3150800AE0877AE000851AE000803AF0008BDAE0008CB -S3150800AE1829B0000829B0000829B0000857AF00086B -S3150800AE2829B00008B9AF0008ABAF00089DAF000805 -S3150800AE38002001F03DF8864B1B78002B00F0F480C3 -S3150800AE48012000F00FF9EFE0002001F031F8814BFE -S3150800AE585B7F002B02D1012000F004F97D4B1B789B -S3150800AE68032B40F0E380002000F0EEFFDEE0002030 -S3150800AE7801F01EF8774B5B7F002B02D0022000F00A -S3150800AE88F1F8744B1B78032B02D1002000F0DCFF85 -S3150800AE9800F0C4F90346032B40F0CA806D4B1B78B3 -S3150800AEA8032B00F0C580042000F0DCF8002000F031 -S3150800AEB8FFFFBDE0002000F0FBFF664B1B78032B65 -S3150800AEC802D1002000F0C0FF00F0A8F90346032BC2 -S3150800AED80FD1604B1B78022B02D1032000F0C2F871 -S3150800AEE85C4B1B78032B40F0A580012000F0BAF8CC -S3150800AEF8A0E0012000F0B6F89CE0012000F0D8FF99 -S3150800AF08554B1B78222B1AD1544B1B78002B03D18F -S3150800AF180B2000F0A7F812E0504B1B78012B03D141 -S3150800AF280C2000F09FF80AE04C4B1B78022B03D143 -S3150800AF380A2000F097F802E00B2000F093F8464B39 -S3150800AF481B781E2B78D1082000F08CF874E00120B5 -S3150800AF5800F0AEFF404B1B78222B6FD13F4B1B7876 -S3150800AF68002B03D10B2000F07DF867E03B4B1B78DC -S3150800AF78012B03D10C2000F075F85FE0374B1B78DE -S3150800AF88022B03D10A2000F06DF857E00B2000F0D9 -S3150800AF9869F853E0002000F08BFF0A2000F062F8F9 -S3150800AFA84FE0002000F084FF0A2000F05BF848E034 -S3150800AFB8002000F07DFF274B1B78032B02D10020C9 -S3150800AFC800F042FF0023FB7100F028F90346022B24 -S3150800AFD819D1234B1B68002B05D103F07BFC0346CC -S3150800AFE81F4A136012E003F075FC02461C4B1B68E7 -S3150800AFF8D31A41F28732934208D90123FB71184BB9 -S3150800B00800221A6002E0164B00221A60FB79002B10 -S3150800B01816D0002000F04CFF012000F023F80FE0BE -S3150800B028002000F01FF80CE000BF0AE000BF08E0A7 -S3150800B03800BF06E000BF04E000BF02E000BF00E072 -S3150800B04800BF00BF0837BD4680BD00BFD10300203A -S3150800B0581E0F0020F802002018030020D003002045 -S3150800B068D403002080B582B000AF0346FB713D4A81 -S3150800B078FB7913703B4B1B78002B03D13A49072001 -S3150800B08800F06CFA374B1B78012B03D13749072098 -S3150800B09800F064FA334B1B78022B03D13449072096 -S3150800B0A800F05CFA2F4B1B78032B03D13149072094 -S3150800B0B800F054FA2B4B1B78042B03D12E49072092 -S3150800B0C800F04CFA274B1B78052B03D12B49072090 -S3150800B0D800F044FA234B1B78062B03D1284907208E -S3150800B0E800F03CFA1F4B1B78072B03D1254907208C -S3150800B0F800F034FA1B4B1B78082B03D1224907208A -S3150800B10800F02CFA174B1B78092B03D11F49072087 -S3150800B11800F024FA134B1B780A2B03D11C49072085 -S3150800B12800F01CFA0F4B1B780B2B03D11949072083 -S3150800B13800F014FA0B4B1B780C2B03D11649072081 -S3150800B14800F00CFA074B1B780D2B03D1134907207F -S3150800B15800F004FA124AFB79537000BF0837BD4657 -S3150800B16880BD00BFD1030020246A0108386A010897 -S3150800B178506A0108686A0108806A01089C6A010819 -S3150800B188BC6A0108DC6A0108FC6A0108146B010834 -S3150800B1982C6B0108446B0108606B0108786B010881 -S3150800B1A8F802002080B582B000AF03F093FB024690 -S3150800B1B8164B1B68D31A632B24D903F08BFB03465B -S3150800B1C8124A136000F034F80346FB71104B1B78DB -S3150800B1D8FA799A4208D003F07DFB03460D4A1360B4 -S3150800B1E80B4AFB7913700EE003F074FB0246094B11 -S3150800B1F81B68D31AB3F5967F05D3054B1A78064B01 -S3150800B2081A7000E000BF0837BD4680BDD803002085 -S3150800B218DC030020E0030020D203002080B400AF3E -S3150800B228024B1B781846BD4680BC7047D2030020DF -S3150800B23880B582B000AF00F051F878602249786886 -S3150800B248FDF786FF0346002B08D020497868FDF7E6 -S3150800B2589DFF0346002B01D0012331E01C4978687D -S3150800B268FDF776FF0346002B08D01A497868FDF7DC -S3150800B2788DFF0346002B01D0022321E01549786883 -S3150800B288FDF766FF0346002B08D013497868FDF7D3 -S3150800B2987DFF0346002B01D0032311E00E49786889 -S3150800B2A8FDF756FF0346002B09D04FF07E51786804 -S3150800B2B8FDF76CFF0346002B01D0042300E00023AA -S3150800B2C818460837BD4680BD000050410000304189 -S3150800B2D86666E6409A9999400000404080B582B073 -S3150800B2E800AF0320FEF79CFB0E4803F0F9FB642128 -S3150800B2F80C4803F0CFFC0B4803F0D2FD78600948E8 -S3150800B30803F09CFC7868FDF72DFD034606491846A8 -S3150800B318FDF734FE03463B603B6818460837BD46CA -S3150800B32880BD00BF6C020020CDCCE24280B500AFDC -S3150800B338064B074A1A60054804F0D9FF0346002B4E -S3150800B34801D001F04DF800BF80BD00BFE40300201E -S3150800B3580030024080B485B000AF78607B681B680F -S3150800B368094A93420BD1094B5B69084A43F04003E3 -S3150800B3785361064B5B6903F04003FB60FB6800BF3B -S3150800B3881437BD4680BC70470030024000100240A2 -S3150800B39880B584B000AFF860B9607A607B689BB204 -S3150800B3A81946B86800F006F87B6818461037BD468F -S3150800B3B880BD000080B485B000AF78600B467B80FE -S3150800B3C872B600BF0023FB8145E0284BB3F8043466 -S3150800B3D89BB2B3F5806F18D3244BB3F802349BB2EB -S3150800B3E801335A42C3F30903C2F3090258BF534249 -S3150800B3F89AB21E4BA3F802241C4BB3F804349BB22A -S3150800B408013B9AB2194BA3F80424FB897A681344BA -S3150800B418164AB2F8002492B21978144B9954134B69 -S3150800B428B3F800349BB201335A42C3F30903C2F393 -S3150800B438090258BF53429AB20C4BA3F800240B4B87 -S3150800B448B3F804349BB201339AB2084BA3F8042420 -S3150800B458FB890133FB81FA897B889A42B5D362B6A0 -S3150800B46800BF00BF1437BD4680BC7047EC030020F8 -S3150800B47880B483B000AF72B600BF064BB3F8043485 -S3150800B488FB8062B600BFFB8818460C37BD4680BCF1 -S3150800B498704700BFEC03002080B582B000AF72B6D3 -S3150800B4A800BF2D4BB3F804349BB2002B02D162B609 -S3150800B4B800BF4EE0284BB3F80434FB80FB88802B8A -S3150800B4C801D98023FB80244BB3F802349BB2C3F519 -S3150800B4D88063BB80FA88BB889A4201D9BB88FB80FF -S3150800B4E81D4BB3F804349BB2FA889A420CD11A4B0E -S3150800B4F8B3F802349BB21A46174B1344F9885022FC -S3150800B508184602F0D3F80BE0134BB3F802349BB293 -S3150800B5181A46114B1344F9885122184602F0C6F800 -S3150800B5280D4BB3F802349AB2FB8813449BB2C3F3A3 -S3150800B53809039AB2084BA3F80224074BB3F8043454 -S3150800B5489AB2FB88D31A9AB2034BA3F8042462B6B4 -S3150800B55800BF0837BD4680BDEC0300200EB480B591 -S3150800B56885B000AF0346FB71154AFB79137007F1DE -S3150800B5782003BB60BB68FA697E21124808F0CCFD37 -S3150800B588F860FB68002B01DAFB6812E0FB687D2B84 -S3150800B59801DD7E23FB60FB680133094A0021D1548B -S3150800B5A8FB689BB202339BB219460548FFF702FFB0 -S3150800B5B8FB6818461437BD46BDE8804003B0704797 -S3150800B5C8F4070020F507002080B582B000AF02F026 -S3150800B5D87DFB02463B461946104602F0B5FB3B463C -S3150800B5E8072206214FF4E06000F060FB00BF083729 -S3150800B5F8BD4680BD80B500AF044B082206214FF42E -S3150800B608006000F053FB00BF80BD00BF3003002078 -S3150800B61880B582B000AF01233B7101237B710023FB -S3150800B628BB713B1D032206214FF4185000F03EFB60 -S3150800B63800BF0837BD4680BD80B582B000AF034657 -S3150800B648FB71074AFB791370054B082206214FF44C -S3150800B658807000F02BFB00BF0837BD4680BD00BFD1 -S3150800B6683803002080B584B000AF0346FB71FB7928 -S3150800B6783B7307F10C03012204214FF4206000F004 -S3150800B68815FB00BF1037BD4680BD000080B500AF6A -S3150800B698044B082206214FF4905000F007FB00BF20 -S3150800B6A880BD00BFAC03002080B584B000AF7860C9 -S3150800B6B87B681B0EDBB23B727B681B0CDBB27B72AA -S3150800B6C87B681B0ADBB2BB727B68DBB2FB7207F1CD -S3150800B6D80803042204214FF4D05000F0E7FA00BF0B -S3150800B6E81037BD4680BD000080B500AF0B4BD3F8B8 -S3150800B6F801300B4A53600A4B00229A700022DA700E -S3150800B708084B9B889AB2064B1A80054B07220621D6 -S3150800B7184FF4E85000F0CAFA00BF80BD380300208D -S3150800B728B4030020AC03002080B584B000AF78606D -S3150800B7387B681B0EDBB23B727B681B0CDBB27B7229 -S3150800B7487B681B0ADBB2BB727B68DBB2FB7207F14C -S3150800B7580803042204214FF4F85000F0A7FA00BFA2 -S3150800B7681037BD4680BD000080B58AB000AF07F126 -S3150800B778140300221A605A609A60DA607D4B9B6946 -S3150800B7887C4A43F0100393617A4B9B6903F01003D4 -S3150800B7983B613B69774B9B69764A43F0040393619F -S3150800B7A8744B9B6903F00403FB60FB68714B9B6948 -S3150800B7B8704A43F0080393616E4B9B6903F00803CC -S3150800B7C8BB60BB686B4B9B696A4A43F0400393614D -S3150800B7D8684B9B6903F040037B607B68654B9B69F4 -S3150800B7E8644A43F020039361624B9B6903F0200384 -S3150800B7F83B603B68002230215F4805F072F800225A -S3150800B8084FF4F8515D4805F06CF800224FF40041F2 -S3150800B8185B4805F066F8002218215A4805F061F8D1 -S3150800B82800228021584805F05CF802237B61002332 -S3150800B838BB610023FB6107F114031946504804F05D -S3150800B848B5FE04237B610023BB610223FB6107F174 -S3150800B858140319464A4804F0A9FE30237B610123DC -S3150800B868BB610023FB6102233B6207F114031946F7 -S3150800B878414804F09BFE44F282037B610023BB61C6 -S3150800B8880023FB6107F1140319463C4804F08EFEB1 -S3150800B8984FF4F8537B610123BB610023FB61022344 -S3150800B8A83B6207F114031946344804F07FFE4FF447 -S3150800B8B800437B610123BB610023FB6102233B62D2 -S3150800B8C807F1140319462E4804F070FE18237B6105 -S3150800B8D80123BB610023FB6102233B6207F11403C2 -S3150800B8E81946284804F062FE80237B610023BB6161 -S3150800B8F80023FB6107F114031946224804F056FE93 -S3150800B90818237B610023BB610023FB6107F114033D -S3150800B91819461D4804F04AFE80237B610123BB6152 -S3150800B9280023FB6102233B6207F1140319461648F4 -S3150800B93804F03CFE4FF440737B611223BB6103237A -S3150800B9483B6207F1140319460F4804F02FFE0F4B04 -S3150800B9585B687B627B6A43F0E0637B627B6A43F0E1 -S3150800B96802037B62094A7B6A536000BF2837BD46D3 -S3150800B97880BD00BF001002400010014000180140B9 -S3150800B9880008014000140140000C01400000014075 -S3150800B99890B5CDB040AF786007F10C0300221A6065 -S3150800B9A85A6007F10C0307F114020021786804F0BD -S3150800B9B831F80346002B40F05381BB699BB245F228 -S3150800B9C8F462934240F04C81BB691B0A03F47F4337 -S3150800B9D8B3F56C4F13D0B3F56C4F00F20C81B3F581 -S3150800B9E86B4F57D0B3F56B4F00F20581B3F5C85FB7 -S3150800B9F800F0DD80B3F5F05F00F0B680FBE03B7B36 -S3150800BA08102B3ED17B7B1AB2BB7B1BB21B021BB227 -S3150800BA1813431BB29AB2944BA3F80421924B012202 -S3150800BA2883F80721FA7B904B83F806218E4B02226E -S3150800BA3883F808218C4B93F808218B4B83F8092146 -S3150800BA48FB7C1A04BB7C1B0213437A7C13431A46F5 -S3150800BA58854BC3F80021844BB3F80431FF2B10D863 -S3150800BA68814C684604F110034FF48072194608F0B1 -S3150800BA789FFC94E80F0000F041F97B4B012283F8FC -S3150800BA880A213B7BFF2B40F0E680774B002283F8A0 -S3150800BA980A21E0E0744B93F80A31012B40F0DD8067 -S3150800BAA83B7B002B00F0DB803B7B222B00F2D78008 -S3150800BAB86D4B93F807213B7B9A4240F0D0803B7B3D -S3150800BAC85A1E1346DB009B1A674A981807F10C0397 -S3150800BAD801330722194608F06BFC634B93F80731C4 -S3150800BAE80133DAB2604B83F807215F4B93F80721D5 -S3150800BAF85D4B93F806319A4211D95B4C684604F1B6 -S3150800BB0810034FF48072194608F052FC94E80F00A7 -S3150800BB1800F03AF9544B022283F80A219FE0524B67 -S3150800BB2893F80931002B07D04F4B93F80931013B9D -S3150800BB38DAB24D4B83F809214B4B93F80931002BA0 -S3150800BB4840F08D80484C684604F110034FF4807223 -S3150800BB58194608F02DFC94E80F0000F0CFF8424B80 -S3150800BB68022283F809217AE040490420FFF7F6FC07 -S3150800BB783B7B19467B7B1846BB7BFA7B0192009375 -S3150800BB8803460A463A490420FFF7E8FC3B7C19466F -S3150800BB987B7C1846BB7CFA7C0192009303460A46CE -S3150800BBA834490420FFF7DAFCFFF746F858E032492B -S3150800BBB80720FFF7D3FC3B7B19467B7B1846BB7BE4 -S3150800BBC8FA7B0192009303460A462C490720FFF799 -S3150800BBD8C5FC3B7C19467B7C1846BB7CFA7C0192E3 -S3150800BBE8009303460A4623490720FFF7B7FC24486B -S3150800BBF8FEF7C4FF34E01C4B93F80A31002B2FD10B -S3150800BC087B6A9AB2184BA3F80421174B012283F8CA -S3150800BC180721154B012283F80621134B012283F8C5 -S3150800BC280821114B002283F80921BB691B0A03F472 -S3150800BC387F430D4AC2F800310B4B022283F80A21CA -S3150800BC48094BB3F804311A4607F10C031946064896 -S3150800BC5808F0AEFB04E000BF02E000BF00E000BF4A -S3150800BC6800BF3437BD4690BD74080020906B0108A4 -S3150800BC78B46B0108D06B0108E86B0108046C01086D -S3150800BC88F0F0004080B500AF074803F077FDFDF7F0 -S3150800BC98E3FE00F0B3F8044803F02CFD022102483D -S3150800BCA803F0D9FF00BF80BDA402002080B58CB080 -S3150800BCB800AFF8607B600B46FB721346BB72FB7AD3 -S3150800BCC89A06FB681B02134343F4744343F056036E -S3150800BCD8FB6100237B6204233B62BB7ABB6207F1E4 -S3150800BCE8140307F118017A68034803F090FD00BFAA -S3150800BCF83037BD4680BD00BFA402002084B080B599 -S3150800BD0882B000AF07F1100C8CE80F0011233B70C6 -S3150800BD1897F818317B7097F818311A4697F816313C -S3150800BD28194697F81731CB1A01339A4208DD97F85E -S3150800BD38162197F81731D31ADBB20133DBB27B70B9 -S3150800BD4897F81731BB70FF23FB70FF233B71D7F8B1 -S3150800BD581031DBB27B71D7F810311B0ADBB2BB7125 -S3150800BD68D7F810311B0CDBB2FB713B4608220721BA -S3150800BD784FF46C40FFF79AFF00BF0837BD46BDE889 -S3150800BD88804004B07047000084B080B582B000AF28 -S3150800BD9807F1100C8CE80F0013233B70164BB3F809 -S3150800BDA80431DBB27B70144BB3F804311B0A9BB21F -S3150800BDB8DBB2BB70104B93F80631FB70FF233B715F -S3150800BDC8D7F81031DBB27B71D7F810311B0ADBB212 -S3150800BDD8BB71D7F810311B0CDBB2FB713B46082246 -S3150800BDE807214FF46C40FFF761FF00BF0837BD46CF -S3150800BDF8BDE8804004B070477408002080B58AB052 -S3150800BE0800AF00237B610023BB610123FB6100238C -S3150800BE183B6000237B600023BB600023FB60002394 -S3150800BE283B6101233B623B461946064803F082FB01 -S3150800BE380346002B01D000F0D3FA00BF2837BD46C9 -S3150800BE4880BD00BFA402002080B483B000AF0346BB -S3150800BE58FB71FB79002B14BF01230023DBB21A46BA -S3150800BE68044B9A70034B00221A7200BF0C37BD4662 -S3150800BE7880BC70470800002080B500AF0A4B1B78C5 -S3150800BE88002B05D08021094804F014FD034609E073 -S3150800BE988021064804F00EFD0346002B0CBF01233B -S3150800BEA80023DBB2184680BD0400002000180140B4 -S3150800BEB880B483B000AF0346FB71044AFB7913705C -S3150800BEC800BF0C37BD4680BC704700BF080000207D -S3150800BED880B582B000AF02F0FDFC786000F004F986 -S3150800BEE8724B5B78002B40F0DD80FFF7C5FF0346F1 -S3150800BEF8002B0CBF01230023FB706C4B1B78002B0F -S3150800BF080CBF01230023BB70684B9B78FF2B04D119 -S3150800BF18FA78BB789A4200F0AD80644B9B78FF2B81 -S3150800BF2809D1BB7883F00103DBB21A465F4B9A70D6 -S3150800BF385E4B00221A725D4BDB78022B4AD0022B25 -S3150800BF4800F3B180002B02D0012B2AD0ABE0584B66 -S3150800BF581B78002B0FD0554B9B78012B05D1012256 -S3150800BF682021544804F0BDFC14E001221021514850 -S3150800BF7804F0B7FC0EE04D4B9B78012B05D1012246 -S3150800BF8810214C4804F0ADFC04E001222021494860 -S3150800BF9804F0A7FC454B0122DA70444A7B685360D3 -S3150800BFA867E0424B5B687A68D31A434A1288934219 -S3150800BFB85CD3002210213F4804F093FC002220217C -S3150800BFC83C4804F08EFC394B0222DA70374A7B6803 -S3150800BFD853604BE0354B5B687A68D31A312B47D9DF -S3150800BFE8FFF74AFF0346002B0CBF01230023FB700B -S3150800BFF8FB782E4A9278002A0CBF01220022D2B278 -S3150800C00893420CBF012300237B707B78002B09D051 -S3150800C018264BFF229A70254B0022DA70234B002202 -S3150800C0281A7225E0214B1B7A0133DAB21F4B1A72B2 -S3150800C0381E4B1A7A214B1B789A4213D31B4B0122A3 -S3150800C0485A701A4A7B68D360184B00229A70174BA5 -S3150800C0580022DA70154B00221A7219490420FFF7D4 -S3150800C0687DFA05E0114B0022DA7001E000BF1AE0FC -S3150800C07800BF18E00D4BDB78002B0CD000221021EE -S3150800C0880C4804F02EFC002220210A4804F029FC5A -S3150800C098064B0022DA70054BFF229A70034B0022E2 -S3150800C0A81A7200E000BF0837BD4680BD08000020A8 -S3150800C0B8050000200010014006000020136D010845 -S3150800C0C8206C010880B500AF054B00225A70044B56 -S3150800C0D80022DA6003490720FFF740FA00BF80BD4F -S3150800C0E8080000202C6C010880B500AF0A4B5B7865 -S3150800C0F8002B0FD0084BDB68002B0BD002F0EAFBAD -S3150800C1080246054BDB68D21A044B1B689A4201D3D0 -S3150800C118FFF7D8FF00BF80BD08000020146D01088E -S3150800C12880B400AF034B044A9A6000BFBD4680BC82 -S3150800C138704700BF00ED00E00080000880B485B0B5 -S3150800C14800AF03460A46FB711346BB71BB791F2B22 -S3150800C15801D900230EE00023FB73BB79084AD35C98 -S3150800C168FA799A4201D00123FB73BB790449FA7913 -S3150800C178CA54FB7B18461437BD4680BC704700BFB7 -S3150800C1888409002080B584B000AF786002F0A2FB6D -S3150800C198B8607B68FB60FB68B3F1FF3F12D0104BB1 -S3150800C1A81B781A46FB681344FB600BE0FEF7FAFF98 -S3150800C1B8FFF78EFEFEF716FEFDF736FE00F0F4FFD3 -S3150800C1C801F008F902F086FB0246BB68D31AFA683A -S3150800C1D89A42EBD800BF00BF1037BD4680BD00BFE6 -S3150800C1E88000002080B500AF0320FDF7EFFA03466C -S3150800C1F8002B02D1024B01221A7000BF80BD00BF76 -S3150800C208F802002080B582B002AFFFF789FF02F076 -S3150800C21809FB04F08BFB00F073F8FFF7A5FAFDF7A6 -S3150800C228CFF9FDF719FCFDF74DFC01F05BF801F0B5 -S3150800C238EFFF02F02FF9FFF779F802F0D7F802F0C6 -S3150800C248FFF802F051F9FDF713FB00F08DFF4FF4E4 -S3150800C258967002F049FBFDF7A9FD01F0A7F800233F -S3150800C268012222490720FFF779F901F07BF8204BCC -S3150800C2781B889BB21A461F490720FFF76FF91C4B04 -S3150800C2889B781A461C490720FFF768F9184B9B88BC -S3150800C2989BB21A46164BDB889BB21946144B1B8968 -S3150800C2A89BB200930B4615490720FFF757F9FDF788 -S3150800C2B89BFDFFF7E7FC00F07DFAFDF717FD00F098 -S3150800C2C887FB00F023FC0A20FFF75CFF00F08EF8D6 -S3150800C2D8FDF722FD00F00EFE0A20FFF753FFFFF7D1 -S3150800C2E881FF3220FFF74EFF00BFE8E7406C0108E0 -S3150800C2F8140F0020546C0108686C01087C6C01084E -S3150800C30880B59CB000AF07F13803382200211846DB -S3150800C31807F040FF07F1240300221A605A609A6062 -S3150800C328DA601A613B1D20220021184607F032FF01 -S3150800C3380523BB634FF480333B6404237B640123E2 -S3150800C348BB640123FB644FF48033FB630223BB659C -S3150800C3584FF48033FB654FF4E0133B6602237B6694 -S3150800C3684FF4C063BB664023FB6607F138031846DB -S3150800C37804F0ACFB0346002B01D000F031F80F237C -S3150800C3887B620223BB620023FB624FF480633B6334 -S3150800C39800237B6307F124030221184604F0ACFE48 -S3150800C3A80346002B01D000F01BF803237B604FF4EB -S3150800C3B88073BB604FF40043FB603B1D184605F0CD -S3150800C3C891F80346002B01D000F00AF8034B012226 -S3150800C3D81A6000BF7037BD4680BD00BF7000424274 -S3150800C3E880B400AF72B600BF00BFFDE72DE9B043C1 -S3150800C3F884B000AF2E4B00221A712E4B5B78082B9F -S3150800C40804D12B4B012283F8242003E0284B002271 -S3150800C41883F8242002F05EFAF860254B9B68FA68D0 -S3150800C428D31ABB60224AFB689360224BD3F80330C1 -S3150800C438BA6802FB03F3204AA2FB03239B097B6025 -S3150800C4481B4BD3E90423796800200C46054612EBF2 -S3150800C458040843EB0509164BC3E90489144BD3E9C9 -S3150800C4680423164BA3FB0223DB0A114A9361104BDC -S3150800C47893F82430002B08D00D4B9A690C4BDB69CE -S3150800C488D31A0C4AC2F807300CE00A4B0022DA71B4 -S3150800C49800221A7200225A7200229A72044B9B6969 -S3150800C4A8034AD36100BF1037BD46BDE8B08300BF55 -S3150800C4B8A8090020F8020020D34D6210C5B3A2913E -S3150800C4C880B582B000AF0346FB71064AFB79D37183 -S3150800C4D802F000FA0346034A136100BF0837BD464F -S3150800C4E880BD00BF140A002080B500AF02F0F2F93B -S3150800C4F80246024B1B69D31A184680BD140A002047 -S3150800C50880B584B000AF7860884B894A012178687D -S3150800C51803F080FA0346002B40F00481844B5B68DD -S3150800C528BB603B7A002B40F0FC8002F0D3F9034647 -S3150800C538804A1360BB7A03F03F03DBB2022B05D1AE -S3150800C5487D4B7A4A92E8030083E80300BB7A03F036 -S3150800C5583F03DBB2042B19D1784B744A92E80300DF -S3150800C56883E80300754B1B791A46754BDA61734BDA -S3150800C5781A7A734B83F82020704BDA79704B83F854 -S3150800C58821206E4B9A796E4B83F82220BB7A03F0EA -S3150800C5983F03DBB2062B23D16A4B644A92E80300B1 -S3150800C5A883E80300674B5B781A46664B1B781B02C1 -S3150800C5B813441A46634B9A60624BDB781A46614BFA -S3150800C5C89B781B0213441A465E4BDA605D4B5B790F -S3150800C5D81A465C4B1B791B0213441A46594B1A61B7 -S3150800C5E8BB7A03F03F03DBB2082B05D1564B4F4AFB -S3150800C5F892E8030083E80300BB7A03F03F03DBB243 -S3150800C608092B40F08F80514B484A92E8030083E88B -S3150800C61803004E4BDB791A464C4BDA604B4BDA680B -S3150800C6284A4B9B791B021343484AD360474BDA683F -S3150800C638464B5B791B041343444AD360434BDA6879 -S3150800C648424B1B791B061343404AD3603F4BDB78A2 -S3150800C6581A463E4B9A603D4B9A683C4B9B781B02A0 -S3150800C66813433A4A9360394B9A68384B5B781B04EC -S3150800C6781343364A9360354B9A68344B1B781B0626 -S3150800C6881343324A9360314B9B68314AA2FB032312 -S3150800C6989B09FB812D4BDB682E4AA2FB03235B090A -S3150800C6A8BB81274AFB895380254ABB899380FB8926 -S3150800C6B8132B8CBF01230023DBB21A46204B9A7230 -S3150800C6C81F4B01221A721D4B1A791D4B9A711C4B66 -S3150800C6D8DB79012B26D91A4B5A881F4BA3F8132046 -S3150800C6E8174BB3F904309AB21B4BA3F815201A4B0B -S3150800C6F8B3F815309BB21A46174BB3F813309BB2EA -S3150800C70802FB03F3154A82FB03129210DB17D31AAE -S3150800C7181A46114BC3F80320094B9A7A0E4B1A7618 -S3150800C72800E000BF1037BD4680BD00BF580A00208C -S3150800C7383C0A0020380A0020D0090020DC0900201D -S3150800C748140A0020E8090020FC090020040A002031 -S3150800C758D34D62101F85EB51F8020020676666669E -S3150800C76880B58AB000AF0E237B610023BB61012325 -S3150800C778FB6100233B6000237B600023BB6000232A -S3150800C788FB6000233B6101233B6201233B610E23C7 -S3150800C7987B623B461946064802F0CCFE0346002B48 -S3150800C7A801D0FFF71DFE00BF2837BD4680BD00BF74 -S3150800C7B8CC02002080B500AF134802F0DFFFFDF772 -S3150800C7C881F9FFF7CDFF104802F094FF10210E48B3 -S3150800C7D803F041FA242200210C4807F0DBFC0B4B36 -S3150800C7E80022DA7102F076F80346084A1361074B05 -S3150800C7F847F230525A61054B00221A76002100206A -S3150800C80800F006F800BF80BDCC020020140A0020FC -S3150800C81880B584B000AF03460A46FB711346BB7160 -S3150800C82807F1080308220021184607F0B3FCFB792C -S3150800C838002B15D10D4B1B7A002B13D0BB79002B77 -S3150800C8480CBF01230023DBB23B72F97907F1080311 -S3150800C8581A22F02000F066F81420FFF793FC02E08D -S3150800C86800BF00E000BF1037BD4680BD140A00208F -S3150800C87880B586B000AF0346FB710B46BB801346EE -S3150800C8887B8007F1080308220021184607F082FC76 -S3150800C898FB79002B40D1BB88952B01D89623BB8002 -S3150800C8A81F4B1B7E002B06D1BB88B3F5FA7F02D334 -S3150800C8B840F2F313BB807B88642202FB03F37B6197 -S3150800C8C8BB884FF47A7202FB03F33B617B691B0E44 -S3150800C8D8DBB23B737B691B0CDBB27B737B691B0A78 -S3150800C8E8DBB2BB737B69DBB2FB733B691B0EDBB23E -S3150800C8F83B723B691B0CDBB27B723B691B0ADBB2DA -S3150800C908BB723B69DBB2FB72F97907F108031C2293 -S3150800C918F02000F007F800E000BF1837BD4680BDD4 -S3150800C928140A002080B58CB000AF3B600346FB7143 -S3150800C9380B46BB7113467B71FB7987F82830BB79A0 -S3150800C94887F829307B7903F03F03DAB297F82A305B -S3150800C95862F3050387F82A307B8D0A2262F3891366 -S3150800C9687B850A2387F82F30BB6A7B610023FB6126 -S3150800C9780423BB6108233B621EE0144803F016F83B -S3150800C9880346002B0ED007F10C0307F110013A688D -S3150800C9980E4802F03CFF034687F82E3097F82E30EB -S3150800C9A8002B0ED00120FFF7EDFB97F92F30DBB2ED -S3150800C9B8013BDBB287F82F3097F92F30002BDCDCE8 -S3150800C9C800E000BF3037BD4680BD00BFCC0200205E -S3150800C9D880B582B000AF3B4600221A605A603B46D3 -S3150800C9E804220021F020FFF79DFF1420FFF7CAFB59 -S3150800C9F83B4606220021F020FFF794FF1420FFF794 -S3150800CA08C1FB3B4609220021F020FFF78BFF1420C3 -S3150800CA18FFF7B8FB394BB3F81B309BB2384AA2FB71 -S3150800CA280323DB089BB21A46344BB3F813309BB280 -S3150800CA3802FB03F31A46334B5B699A4211D9314B09 -S3150800CA485A6913469B0013445B001A462B4BB3F8E6 -S3150800CA5813309BB2B2FBF3F39AB2284BA3F8112012 -S3150800CA6806E0264BB3F81B309AB2244BA3F81120DC -S3150800CA78224BB3F811309BB2B3F57A7F08D91F4B0E -S3150800CA88002262F017025A74002242F003029A74CE -S3150800CA981A4BB3F811309BB21A46184BB3F80F3035 -S3150800CAA89BB202FB03F3184A82FB03129210DB17A8 -S3150800CAB8D31A1A46114BC3F80B20124B5B7A002B74 -S3150800CAC818D00E4BB3F80F309BB20C4AB2F81120A7 -S3150800CAD892B219460020FFF7CBFE1420FFF752FB47 -S3150800CAE8064BB3F813309BB2B3F5F57F02D9054B5D -S3150800CAF801221A7600BF0837BD4680BDF802002015 -S3150800CB08CDCCCCCC140A00206766666698B500AF0B -S3150800CB1801F0E0FE0246B44B1B68D31AB3F5FA7F58 -S3150800CB2820D9B24B00221A72B04B00229A72B04B27 -S3150800CB3800221A71AE4B00221A72AD4B0022DA7126 -S3150800CB48AB4B00229A71AB4B00229A60A94B002284 -S3150800CB58DA60A84B00221A61A74B0022DA60A64BB6 -S3150800CB6800229A60A14B1B7A002B03D09F4B1B7897 -S3150800CB78002B0CD1A14B0022DA7400221A759F4BA0 -S3150800CB8800225A7500229A759C4B00221A769B4BEE -S3150800CB989B7F002B0CD001210420FCF7A3FD01F094 -S3150800CBA899FE0346964A1360904B01221A7010E0C4 -S3150800CBB801F090FE0246924B1B68D31A4EF6602285 -S3150800CBC8934206D900210420FCF78CFD874B0022E6 -S3150800CBD81A700520FCF7FAFD03461A46834BDA72E3 -S3150800CBE8824B1B7A002B07D0804B1B7B002B03D16B -S3150800CBF87E4B1B78002B02D17C4B00225A727B4B4A -S3150800CC08DB79092B00F2558101A252F823F000BFFF -S3150800CC1841CC000875CC000891CC0008C9CC00089E -S3150800CC2817CD000859CD0008C3CD00086DCE0008F9 -S3150800CC381DCE0008A7CE00086C4B00225A700021AA -S3150800CC480320FCF74FFD694B1B7A002B00F0358152 -S3150800CC58664B1B78002B00F03081644B1B7B002B3E -S3150800CC6840F02B810120FFF72BFC26E1FFF73CFC5F -S3150800CC780346B3F57A6F40F222815C4B01225A7259 -S3150800CC880220FFF71DFC1AE1584B00221A760021EC -S3150800CC980320FCF727FD554B5B7A002B03D10020B0 -S3150800CCA8FFF70EFC1CE1554BDB7D002B00F00981D4 -S3150800CCB801210020FFF7ACFD0320FFF701FC00E186 -S3150800CCC84A4B9B7A002B0CD0484B5B7A002B08D032 -S3150800CCD801F000FE03464B4A13600420FFF7F0FBF9 -S3150800CCE8F1E0FFF701FC034642F21072934240F264 -S3150800CCF8EA803E4B01225A73404B0A225A77002093 -S3150800CD08FFF7DEFB40490420FEF728FCDBE001219B -S3150800CD180320FCF7E7FC354BDB7A002B03D005200C -S3150800CD28FFF7CEFBD1E0FFF7DFFB0346B3F57A7FC3 -S3150800CD3840F2CB802D4B01221A73304B07225A77C3 -S3150800CD480620FFF7BDFB31490420FEF707FCBCE0C7 -S3150800CD582A4BDB7D002B03D0244B5B7A002B03D1AF -S3150800CD680620FFF7ADFBBBE00520FCF72FFD0346C1 -S3150800CD781C460320FCF71AFD03469C4217D001F00F -S3150800CD88A9FD0246224B1B68D31AB3F57A7F40F2EF -S3150800CD989E801A4B07225A77144B01221A730620CB -S3150800CDA8FFF78EFB19490420FEF7D8FB8FE001F040 -S3150800CDB891FD0346164A136089E0104B00225A74FF -S3150800CDC800229A740D4BB3F815309BB21D2B06D961 -S3150800CDD8FFF78AFB034641F28832934279D908203D -S3150800CDE8FFF76EFB75E000BF380A0020140A00201A -S3150800CDF8DC090020E8090020040A0020F8020020BF -S3150800CE08600A0020640A0020946C0108A46C0108D2 -S3150800CE18680A002000210320FCF764FC314BDB7A02 -S3150800CE28002B07D100210020FFF7F2FC0720FFF7A7 -S3150800CE3847FB50E0FFF758FB0346B3F57A7F4AD914 -S3150800CE48284B01221A73284B07225A7700210020FB -S3150800CE58FFF7DEFC0720FFF733FB24490420FEF71B -S3150800CE687DFB38E01F4B9B7A002B03D10920FFF77F -S3150800CE7827FB32E0FFF738FB034642F2107293426B -S3150800CE882BD9184B01225A73174B0A225A770020B6 -S3150800CE98FFF716FB16490420FEF760FB1DE0FFF7AF -S3150800CEA823FB0346B3F57A6F19D90220FFF708FB67 -S3150800CEB815E00020FFF704FB12E000BF10E000BFF2 -S3150800CEC80EE000BF0CE000BF0AE000BF08E000BFA4 -S3150800CED806E000BF04E000BF02E000BF00E000BFB4 -S3150800CEE800BF98BD140A0020F8020020A46C0108A7 -S3150800CEF8C46C010880B500AF344B5B7F002B03D0A8 -S3150800CF08334800F01FF95FE0304B5B780D2B57D894 -S3150800CF1801A252F823F000BF59CF000861CF0008D4 -S3150800CF2869CF000871CF000879CF000881CF0008BB -S3150800CF3889CF000891CF000899CF0008A1CF00082B -S3150800CF48A9CF0008B1CF0008B9CF0008C1CF00089B -S3150800CF58204800F0F7F837E01F4800F0F3F833E008 -S3150800CF681B4800F0EFF82FE01C4800F0EBF82BE020 -S3150800CF781A4800F0E7F827E0194800F0E3F823E034 -S3150800CF88174800F0DFF81FE0154800F0DBF81BE04B -S3150800CF98134800F0D7F817E0124800F0D3F813E062 -S3150800CFA8104800F0CFF80FE00E4800F0CBF80BE079 -S3150800CFB80C4800F0C7F807E0084800F0C3F803E093 -S3150800CFC8044800F0BFF800BF80BD00BFF802002083 -S3150800CFD854000020180000202400002030000020FB -S3150800CFE83C0000204800002080B487B000AFF860F5 -S3150800CFF8B96011461A460B46FB801346BB80FA8869 -S3150800D008BB889A4201D9BB88FB80BB88002B01D113 -S3150800D0180123BB80FA8813461B029A1ABB8892FB1F -S3150800D028F3F3FB82FB681B781A46FB8AC3F1FF03F6 -S3150800D03803FB02F2BB681B781946FB8A01FB03F35C -S3150800D0481344204A82FB03121A44D211DB17D31A57 -S3150800D058DAB23B6A1A70FB685B781A46FB8AC3F130 -S3150800D068FF0303FB02F2BB685B781946FB8A01FBE0 -S3150800D07803F31344134A82FB03121A44D211DB172B -S3150800D088D31ADAB23B6A5A70FB689B781A46FB8A47 -S3150800D098C3F1FF0303FB02F2BB689B781946FB8AB8 -S3150800D0A801FB03F31344074A82FB03121A44D211FD -S3150800D0B8DB17D31ADAB23B6A9A7000BF1C37BD462B -S3150800D0C880BC70478180808080B483B000AF786068 -S3150800D0D87B681B781A46642302FB03F3174A82FB0C -S3150800D0E803121A44D211DB17D21A154B1B689A6316 -S3150800D0F87B685B781A46642302FB03F30F4A82FBB4 -S3150800D10803121A44D211DB17D21A0D4B1B68DA63BD -S3150800D1187B689B781A46642302FB03F3074A82FB5B -S3150800D12803121A44D211DB17D21A054B1B681A6464 -S3150800D13800BF0C37BD4680BC704700BF8180808021 -S3150800D148240F002080B483B000AF7860054B7A6856 -S3150800D1581068516803C312891A8000BF0C37BD4688 -S3150800D16880BC7047740A002080B582B000AF0023DF -S3150800D1783B7100237B710023BB710421094804F025 -S3150800D188E5FD0821074804F0E1FD0C21054804F0EF -S3150800D198DDFD3B1D1846FFF797FF00BF0837BD465C -S3150800D1A880BD00BF240F002080B582B002AF01F011 -S3150800D1B891FB0246464B1B68D31A142B40F285800E -S3150800D1C801F088FB0346424A1360424B5B880133E9 -S3150800D1D89AB2404B5A803F4B1B78032B67D801A25B -S3150800D1E852F823F0FDD100082FD200085BD20008B8 -S3150800D1F88DD20008374B5A88374BDB781946374B98 -S3150800D20800930B4634493648FFF7EEFE314B5B88E8 -S3150800D218314AD27893424ED92E4B01221A702D4B99 -S3150800D22800225A8047E02B4B2B4A043312681146D2 -S3150800D23819800233120C1A70264B5B88264A127913 -S3150800D24893423AD9234B02221A70224B00225A805B -S3150800D25833E0204B5A88204B5B7919461F4B0093BD -S3150800D2680B461F491C48FFF7BFFE1A4B5B881A4A2C -S3150800D2785279934223D9174B03221A70154B002269 -S3150800D2885A801CE0134B144A0433073211889278E3 -S3150800D29819809A700F4B5B880F4A9279934210D976 -S3150800D2A80C4B00221A700B4B00225A8009E0094BD6 -S3150800D2B800221A7006E000BF04E000BF02E000BFC3 -S3150800D2C800E000BF0548FFF7FFFE00BFBD4680BD6A -S3150800D2D8800A00206C0A0020740A0020700A0020C0 -S3150800D2E87B0A002080B500AF0A4B0B4A1A60094B27 -S3150800D2F84FF0FF325A60074B4FF480729A60054820 -S3150800D30804F074FB0346002B01D0FFF769F800BF49 -S3150800D31880BD00BF840A00200028004080B584B07C -S3150800D32800AF78607B681B680B4A934210D103F0FC -S3150800D338F1FA0A4BDB69094A43F00063D361074BE4 -S3150800D348DB6903F00063FB60FB68054B01221A6082 -S3150800D35800BF1037BD4680BD0028004000100240B7 -S3150800D3683C04424280B400AF0E4B1B681B689AB255 -S3150800D3780D4B1A800B4B1B685A790B4B9A70094B45 -S3150800D3881B681A79084BDA70074B01229A80064BF4 -S3150800D3980022DA80044B01221A8100BFBD4680BCF0 -S3150800D3A8704700BF00000020140F002080B500AFAA -S3150800D3B84FF404720021054806F0ECFE4FF4047297 -S3150800D3C80021034806F0E6FE00BF80BD980A002043 -S3150800D3D8A80C002080B500AF2A4B93F84230DBB280 -S3150800D3E8202B0AD1284B93F80832DBB2002B04D13C -S3150800D3F8FF222649234805F082FA254B93F842303E -S3150800D408DBB2202B04D1FF222249214805F077FAFE -S3150800D4181C4B93F84130DBB2212B19D11A4BD3F8A0 -S3150800D4280C32002B14D001F055FA0246164BD3F8E5 -S3150800D4380C32D31A642B0BD9124805F0BDFA002210 -S3150800D4481021154803F04DFA0F4B0022C3F80C2299 -S3150800D4580D4B93F80832DBB2002B11D0094B93F821 -S3150800D4684130DBB2212B0BD00C4800F0DFF9FF2244 -S3150800D4780649044805F043FA034B002283F80822B4 -S3150800D48800BF80BDFC0F0020980A0020980B0020DA -S3150800D4986C0F0020A80D002000140140980C0020ED -S3150800D4A880B582B000AF78600B467B807B681A68C7 -S3150800D4B81C4B1B689A4216D17B881A461A491B4880 -S3150800D4C800F080F90346002B04D11422002100201D -S3150800D4D800F0ECF8164B00221A70FF221249114880 -S3150800D4E805F00DFA19E07B681A68124B1B689A4210 -S3150800D4F813D17B881A461049104800F063F9034689 -S3150800D508002B05D00A4B01221A700D4800F08EF937 -S3150800D518FF220949074805F0F2F900BF0837BD4652 -S3150800D52880BD00BFFC0F0020980B0020980A002039 -S3150800D538B80E00206C0F0020A80D0020A80C0020AB -S3150800D548A80E002080B582B000AF78607B681A689C -S3150800D558084B1B689A4208D100221021064803F096 -S3150800D568C0F9064B0022C3F80C2200BF0837BD468F -S3150800D57880BD00BFFC0F002000140140980A002057 -S3150800D58880B485B000AF78600B467B804FF0FF33D8 -S3150800D598FB6000237B8121E07B897A6813441B782A -S3150800D5A81A46FB685340FB6000237B7210E0FB6851 -S3150800D5B803F00103002B05D0FB685A080D4B5340AE -S3150800D5C8FB6002E0FB685B08FB607B7A01337B72D1 -S3150800D5D87B7A072BEBD97B8901337B817A897B8810 -S3150800D5E89A42D9D3FB68DB4318461437BD4680BC34 -S3150800D5F8704700BF2083B8ED80B588B000AFF860E3 -S3150800D6087A601A460B467B8113467B720023FB8396 -S3150800D618FB8B5A1CFA831A467B6813447A7A1A7063 -S3150800D628FB68002B19D00023BB8312E0BB8BFA6872 -S3150800D6381A44FB8B591CF98319467B680B441278E4 -S3150800D6481A70FB8BFA2B01D900232AE0BB8B01330E -S3150800D658BB83BA8B7B899A42E8D3FB8B19467868D1 -S3150800D668FFF78EFF03463B6107F110037B61002332 -S3150800D678BB6112E0BB697A691A44FB8B591CF983AA -S3150800D68819467B680B4412781A70FB8BFE2B01D956 -S3150800D698002306E0BB690133BB61BB69032BE9DDDF -S3150800D6A8FB8B18462037BD4680BD000080B584B080 -S3150800D6B800AF78600B467B8013467B707B78798849 -S3150800D6C8154A7868FFF798FF0346FB81FB89002B04 -S3150800D6D81ED0124B93F84130DBB2212B07D10F48E5 -S3150800D6E805F06AF9002210210D4803F0FAF801221C -S3150800D6F810210B4803F0F5F8FB891A46064907482E -S3150800D70805F0C8F801F0E6F80346034AC2F80C32F1 -S3150800D71800BF1037BD4680BD980A0020FC0F0020C0 -S3150800D7280014014080B588B000AFF8600B467A60EF -S3150800D7387B817B89042B01D800233FE07B89B3F5DD -S3150800D748807F01D9002339E07B89043BFB83FB8B67 -S3150800D758FA6813441B781946FB8B0133FA68134495 -S3150800D7681B781B0241EA0302FB8B0233F9680B4458 -S3150800D7781B781B041A43FB8B0333F9680B441B7885 -S3150800D7881B061343BB61FB8B1946F868FFF7F8FEBF -S3150800D7987861BA697B699A4201D000230EE0FB6872 -S3150800D7A85A1C7B685A60FB681A787B681A70FB8B68 -S3150800D7B8DBB2013BDAB27B685A7001231846203778 -S3150800D7C8BD4680BD80B584B000AFF860B960134621 -S3150800D7D8FB80FB6803F50072FB881946B868FFF7F3 -S3150800D7E8A1FF0346002B01D1002304E0FB680122B0 -S3150800D7F883F80822012318461037BD4680BD000065 -S3150800D80880B400AFBFF34F8F00BF064BDB6803F445 -S3150800D818E0620449044B1343CB60BFF34F8F00BF44 -S3150800D82800BFFDE700ED00E00400FA0580B584B006 -S3150800D83800AF78601323FB737B681B78C22B00F351 -S3150800D848D080B02B0FDA602B42D0602B00F3C9804A -S3150800D858502B43D0502B00F3C480012B00F0AA802C -S3150800D868402B2DD0BDE0B03B122B00F2BA8001A2A6 -S3150800D87852F823F0EBD80008EBD90008EBD90008D2 -S3150800D888EBD90008EBD900089BD90008EBD90008A2 -S3150800D898EBD90008EBD90008EBD90008EBD9000842 -S3150800D8A8EBD90008EBD90008EBD90008EBD9000832 -S3150800D8B8EBD9000831D9000895D9000869D90008B4 -S3150800D8C800F0B6F8402258214D48FFF7EFFE93E0DE -S3150800D8D860220A214B48FFF7E9FE8DE0FDF7DCFDDB -S3150800D8E88AE07B685B780B2B1BD17B685A68464BAA -S3150800D8F81068516803C31189927A19809A70FCF7DF -S3150800D90873FA424B01221A70FCF76EFA3E4BD3F8AB -S3150800D91803303D4A3E490720FDF720FE1223FB73D4 -S3150800D92862E01323FB735FE07B685B78012B14D1F5 -S3150800D9387B685B681B781A464FF47A7302FB03F315 -S3150800D9481A46344B5A61334B5B691A4632490720E3 -S3150800D958FDF704FE1223FB7346E01323FB7343E02B -S3150800D9687B685B78012B0ED17B685B681A782B4B32 -S3150800D9781A702A4B1B781A4629490720FDF7EEFD27 -S3150800D9881223FB7330E01323FB732DE01323FB7379 -S3150800D9982AE0122200210020FFF788FE00BF214B4B -S3150800D9A893F84130DBB2212BF9D00A2000F09CFF0E -S3150800D9B8FFF726FF7B685B78092B0FD17B685A68C7 -S3150800D9C8194B1068516803C3127A1A70174B1B78DB -S3150800D9D8DBB2012B0FD01223FB7305E01323FB736D -S3150800D9E802E01323FB7300BFFB7B1A4600210020C5 -S3150800D9F8FFF75CFE00E000BF1037BD4680BD00BFDC -S3150800DA08BC0E0020140F00206C0000201E0F0020FA -S3150800DA18D86C0108140A0020EC6C0108F8020020EA -S3150800DA28006D0108FC0F002060000020B80E0020D9 -S3150800DA38B0B500AF9D4B9A789D4B9A709B4BD3F81F -S3150800DA4807309B4AC2F80330984BB3F80F309AB29E -S3150800DA58974BA3F80720954BB3F81B309AB2944B0B -S3150800DA68A3F80920914BB3F813309AB2904BA3F850 -S3150800DA780B208E4BB3F815309AB28D4BA3F80D20B0 -S3150800DA888A4B1A7E8A4BDA73884B5A7F884B5A70A8 -S3150800DA98864B5A78864B1A70854B00221A740022D0 -S3150800DAA85A74834B00229A74814B0022DA74002236 -S3150800DAB81A750420FBF77AFE034603F00103D9B268 -S3150800DAC87B4A537D61F3000353750320FBF76EFE0B -S3150800DAD8034603F00103D9B2754A537D61F341033E -S3150800DAE853750020FBF762FE034603F00103D9B21B -S3150800DAF86F4A537D61F382035375FEF7BDF90346F2 -S3150800DB0803F00103D9B26A4A537D61F3C303537517 -S3150800DB180320FBF75BFE0346002B0CBF01230023FB -S3150800DB28D9B2634A537D61F304135375FDF7A0FC14 -S3150800DB380346002B14BF01230023D9B25C4A537D40 -S3150800DB4861F3451353755B4B1B7803F00103D9B290 -S3150800DB58574A537D61F386135375574B1B7A03F05F -S3150800DB680103D9B2524A537D61F3C713537500208E -S3150800DB78FBF710FF03465AB24D4B5A760120FBF7BE -S3150800DB8809FF03465AB24A4B9A764B4BDB695AB297 -S3150800DB98474BDA76494B5B785AB2454B1A77474B67 -S3150800DBA8DB785AB2424B5A77454B9B889AB2404B18 -S3150800DBB8DA83424B9A793E4B83F82020414B9B687F -S3150800DBC89AB23B4BA3F821203E4BDB689AB2384BF6 -S3150800DBD8A3F823203B4B1B699AB2354BA3F825209B -S3150800DBE8334B394A27331832156854689068D16810 -S3150800DBF81D605C609860D960127C1A74324BDA78BA -S3150800DC082B4B83F83820304B9B889AB2284BA3F8BD -S3150800DC1839202D4BDB889AB2254BA3F83B202A4B93 -S3150800DC289B681A46224BC3F83D20274BDB68204AD7 -S3150800DC38C2F84130244B9A7C1D4B83F84720224B67 -S3150800DC485A7C1B4B83F846201F4B1A7C184B83F8C3 -S3150800DC5845201D4BDA7C197D09020A435B7D1B04A6 -S3150800DC6813439AB2124BA3F84820174B9A7D104BC8 -S3150800DC7883F84A200E4B144A4B33293211685268E6 -S3150800DC8819605A600A4B002283F85320084B002271 -S3150800DC9883F85420002283F85520054B002283F880 -S3150800DCA85620002283F8572000BFB0BDF80200208E -S3150800DCB8BC0E002029030020140A0020A403002013 -S3150800DCC898030020E80900204403002080B500AF27 -S3150800DCD8024800F0A5F80346184680BD840A0020C5 -S3150800DCE880B582B000AF78607968034800F0C8F854 -S3150800DCF800BF0837BD4680BD840A002080B483B0BB -S3150800DD0800AF78607B680F4A82FB03129210DB1714 -S3150800DD18D31A5BB21B0158B27A680A4B83FB021303 -S3150800DD289910D317C91A0B469B000B445B00D11AE6 -S3150800DD384BB203435BB2DBB218460C37BD4680BC10 -S3150800DD48704700BF6766666690B587B000AF7860AB -S3150800DD583960796800200A460346C7E9022307F1AD -S3150800DD680803184606F01EFA78617B691B68184688 -S3150800DD78FFF7C4FF03461A463B681A707B695A6858 -S3150800DD883B685C1C1046FFF7B9FF034623707B699E -S3150800DD989A683B689C1C1046FFF7B0FF0346237039 -S3150800DDA87B69DA683B68DC1C1046FFF7A7FF034661 -S3150800DDB823707B691B695A1C3B681C1D1046FFF7B4 -S3150800DDC89DFF034623707B695B6903F26C73134AEC -S3150800DDD882FB03125111DA178A1A642101FB02F22F -S3150800DDE89A1A3B685C1D1046FFF788FF034623709E -S3150800DDF87B695B6903F26C73084A82FB031252114A -S3150800DE08DB17D21A3B689C1D1046FFF777FF0346B7 -S3150800DE18237000BF1C37BD4690BD00BF1F85EB5158 -S3150800DE2880B487B000AF786000237B8200233B82EA -S3150800DE380023FB8100237B617B681B689B697B82C7 -S3150800DE487B681B68DB69FB817B681B689B693B826F -S3150800DE587A8A3B8A9A4208D03B8A1A047B681B68E6 -S3150800DE68DB699BB213437B6104E07B8A1A04FB894E -S3150800DE7813437B617B6918461C37BD4680BC7047CF -S3150800DE8880B584B000AF786039600023FB73786882 -S3150800DE9800F01DF80346002B02D00123FB7311E09E -S3150800DEA87B681B683A68120C9A617B681B683A6833 -S3150800DEB892B2DA61786800F032F80346002B01D08E -S3150800DEC80123FB73FB7B18461037BD4680BD80B51A -S3150800DED884B000AF78600023FB6000F0FBFCF860B4 -S3150800DEE809E000F0F7FC0246FB68D31AB3F57A7F17 -S3150800DEF801D903230FE07B681B685B6803F02003DE -S3150800DF08002BEED07B681B685A687B681B6842F052 -S3150800DF1810025A60002318461037BD4680BD80B5E2 -S3150800DF2884B000AF78600023FB607B681B685A687A -S3150800DF387B681B6822F010025A6000F0CBFCF86078 -S3150800DF4809E000F0C7FC0246FB68D31AB3F57A7FE6 -S3150800DF5801D9032307E07B681B685B6803F0200385 -S3150800DF68002BEED0002318461037BD4680BD0000AA -S3150800DF7880B485B000AF154B9B69144A43F001037A -S3150800DF889361124B9B6903F00103BB60BB680F4B97 -S3150800DF98DB690E4A43F08053D3610C4BDB6903F007 -S3150800DFA880537B607B680A4B5B68FB60FB6823F0E1 -S3150800DFB8E063FB60FB6843F00073FB60044AFB6898 -S3150800DFC8536000BF1437BD4680BC70470010024036 -S3150800DFD80000014080B400AF00BFFDE780B400AF81 -S3150800DFE800BFFDE780B400AF00BFFDE780B400AF0F -S3150800DFF800BFFDE780B400AF00BFFDE780B400AFFF -S3150800E00800BFBD4680BC704780B400AF00BFBD46A0 -S3150800E01880BC704780B400AF00BFBD4680BC70475F -S3150800E02880B500AF00F044FC00BF80BD80B500AFE6 -S3150800E038024801F035FE00BF80BD00BFA4020020DB -S3150800E04880B500AF024804F0CBFD00BF80BD00BF15 -S3150800E058B40F002080B500AF024804F0C1FD00BF28 -S3150800E06880BD00BFFC0F002080B500AF024804F051 -S3150800E078B7FD00BF80BD00BF4410002080B500AFC3 -S3150800E088024804F0ADFD00BF80BD00BF6C0F00203C -S3150800E09880B500AF024801F003FE00BF80BD00BF8F -S3150800E0A8CC02002080B500AF024801F0F9FD00BF98 -S3150800E0B880BD00BFCC02002080B400AF01231846FB -S3150800E0C8BD4680BC704780B582B000AF78603960BD -S3150800E0D806F02EF9034616221A604FF0FF33184643 -S3150800E0E80837BD4680BD80B582B000AF78604FF06E -S3150800E0F8FF317868FFF7E7FF00BFFDE780B586B010 -S3150800E10800AFF860B9607A6000237B610AE0AFF374 -S3150800E11800800146BB685A1CBA60CAB21A707B6985 -S3150800E12801337B617A697B689A42F0DB7B6818461B -S3150800E1381837BD4680BD80B483B000AF78604FF00D -S3150800E148FF3318460C37BD4680BC704780B483B089 -S3150800E15800AF786039603B684FF400525A60002374 -S3150800E16818460C37BD4680BC704780B483B000AFEC -S3150800E1787860012318460C37BD4680BC704780B4C2 -S3150800E18885B000AFF860B9607A600023184614377E -S3150800E198BD4680BC7047000080B586B000AF786081 -S3150800E1A8144A154BD31A7B617B693B61134B1B6871 -S3150800E1B8002B02D1114B124A1A60104B1A687B6859 -S3150800E1C813443A699A4207D206F0B2F803460C2273 -S3150800E1D81A604FF0FF3309E0084B1B68FB60074BD2 -S3150800E1E81A687B681344054A1360FB68184618378B -S3150800E1F8BD4680BD0000012000040000200F002055 -S3150800E208E011002080B400AF00BFBD4680BC70474F -S3150800E21880B58EB000AF07F1280300221A605A604D -S3150800E2289A60DA6007F1200300221A605A603B1DDB -S3150800E23800221A605A609A60DA601A615A619A610D -S3150800E248374B384A1A60364B4FF434725A60344B97 -S3150800E25800229A60324B6422DA60314B00221A6136 -S3150800E2682F4B00229A612E4803F0C9FC0346002B5F -S3150800E27801D0FEF7B5F84FF48053BB6207F12803BF -S3150800E2881946274803F0CEFE0346002B01D0FEF7B1 -S3150800E298A7F8234803F002FD0346002B01D0FEF732 -S3150800E2A89FF800233B6200237B6207F12003194687 -S3150800E2B81B4804F039FA0346002B01D0FEF790F8FC -S3150800E2C860237B600023BB600023FB6000237B611F -S3150800E2D83B1D04221946124803F0E2FD0346002BAB -S3150800E2E801D0FEF77DF83B1D082219460C4803F0B5 -S3150800E2F8D7FD0346002B01D0FEF772F83B1D0C220A -S3150800E3081946074803F0CCFD0346002B01D0FEF753 -S3150800E31867F8034800F026F800BF3837BD4680BDC1 -S3150800E328240F00200008004080B485B000AF78604C -S3150800E3387B681B68094A93420BD1094BDB69084A73 -S3150800E34843F00403D361064BDB6903F00403FB605F -S3150800E358FB6800BF1437BD4680BC704700080040FC -S3150800E3680010024080B588B000AF786007F10C034A -S3150800E37800221A605A609A60DA607B681B68174A36 -S3150800E388934226D1164B9B69154A43F0200393619D -S3150800E398134B9B6903F02003BB60BB684FF46043CB -S3150800E3A8FB6002233B610223BB6107F10C03194694 -S3150800E3B80C4802F0FBF80C4B5B68FB61FB6943F001 -S3150800E3C8E063FB61FB6943F48053FB61064AFB691A -S3150800E3D8536000BF2037BD4680BD00BF0008004017 -S3150800E3E800100240001401400000014080B500AF4B -S3150800E3F8114B124A1A60104B4FF416525A600E4BBC -S3150800E40800229A600C4B0022DA600B4B00221A6134 -S3150800E418094B0C225A61084B00229A61064B0022C6 -S3150800E428DA61054804F0E6F90346002B01D0FDF742 -S3150800E438D7FF00BF80BD00BF6C0F0020005000400A -S3150800E44880B500AF114B124A1A60104B4FF4E132EF -S3150800E4585A600E4B00229A600C4B0022DA600B4B6E -S3150800E46800221A61094B0C225A61084B00229A614C -S3150800E478064B0022DA61054804F0BCF90346002B6E -S3150800E48801D0FDF7ADFF00BF80BD00BFB40F002067 -S3150800E4980038014080B500AF114B124A1A60104B7C -S3150800E4A84FF4E1325A600E4B00229A600C4B002258 -S3150800E4B8DA600B4B00221A61094B0C225A61084B89 -S3150800E4C800229A61064B0022DA61054804F092F99F -S3150800E4D80346002B01D0FDF783FF00BF80BD00BFB0 -S3150800E4E8FC0F00200044004080B500AF114B124ACB -S3150800E4F81A60104B4FF4E1325A600E4B00229A60AC -S3150800E5080C4B0022DA600B4B00221A61094B0C22CD -S3150800E5185A61084B00229A61064B0022DA610548BF -S3150800E52804F068F90346002B01D0FDF759FF00BF30 -S3150800E53880BD00BF441000200048004080B592B056 -S3150800E54800AF786007F1300300221A605A609A60B3 -S3150800E558DA607B681B68954A934245D1944BDB6918 -S3150800E568934A43F48013D361914BDB6903F4801310 -S3150800E578FB62FB6A8E4B9B698D4A43F010039361D5 -S3150800E5888B4B9B6903F01003BB62BB6A884B9B697C -S3150800E598874A43F020039361854B9B6903F0200360 -S3150800E5A87B627B6A4FF480533B6302237B630323B6 -S3150800E5B8FB6307F1300319467E4801F0F7FF042389 -S3150800E5C83B6300237B630023BB6307F130031946CB -S3150800E5D8794801F0EBFF00220021352001F051FEB1 -S3150800E5E8352001F06AFEDCE07B681B68734A9342B3 -S3150800E5F83AD16F4B9B696E4A43F4804393616C4BDF -S3150800E6089B6903F480433B623B6A694B9B69684A8A -S3150800E61843F004039361664B9B6903F00403FB61AB -S3150800E628FB694FF400733B6302237B630323FB6395 -S3150800E63807F130031946624801F0B8FF4FF48063C2 -S3150800E6483B6300237B630023BB6307F1300319464A -S3150800E6585B4801F0ABFF00220021252001F011FEDE -S3150800E668252001F02AFE9CE07B681B68554A9342E0 -S3150800E67846D14F4BDB694E4A43F40033D3614C4BC2 -S3150800E688DB6903F40033BB61BB69494B9B69484A9C -S3150800E69843F020039361464B9B6903F020037B6193 -S3150800E6A87B6920233B6302237B630323FB6307F110 -S3150800E6B830031946404801F079FF40233B6300239D -S3150800E6C87B630023BB6307F1300319463A4801F018 -S3150800E6D86DFF3D4B5B683B643B6C43F0E0633B6412 -S3150800E6E83B6C43F008033B64374A3B6C5360002293 -S3150800E6F80021262001F0C5FD262001F0DEFD50E0A8 -S3150800E7087B681B68314A93424BD1294BDB69284AF7 -S3150800E71843F48023D361264BDB6903F480233B61EA -S3150800E7283B69234B9B69224A43F010039361204BAC -S3150800E7389B6903F01003FB60FB684FF480633B6337 -S3150800E74802237B630323FB6307F130031946194841 -S3150800E75801F02CFF4FF400633B6300237B6300231F -S3150800E768BB6307F130031946124801F01FFF164B21 -S3150800E7785B687B647B6C23F030037B647B6C43F0BB -S3150800E788E0637B647B6C43F010037B640E4A7B6C06 -S3150800E798536000220021272001F073FD272001F08D -S3150800E7A88CFD00BF4837BD4680BD00BF00500040FD -S3150800E7B800100240001001400014014000380140D2 -S3150800E7C8000801400044004000000140004800409D -S3150800E7D8DFF834D0FFF716FD0C480D490D4A00231B -S3150800E7E802E0D458C4500433C4188C42F9D30A4AF0 -S3150800E7F80A4C002301E013600432A242FBD305F059 -S3150800E8089DFDFDF7FFFC7047000001200000002071 -S3150800E8184C0200204C71010850020020DC1100202F -S3150800E828FEE7000080B500AF084B1B68074A43F0AF -S3150800E83810031360032001F019FD0F2000F008F8F3 -S3150800E848FFF796FB0023184680BD00BF002002404C -S3150800E85880B582B000AF7860124B1A68124B1B78E5 -S3150800E86819464FF47A73B3FBF1F3B2FBF3F3184680 -S3150800E87801F031FD0346002B01D001230EE07B6829 -S3150800E8880F2B0AD8002279684FF0FF3001F0F9FCFF -S3150800E898064A7B681360002300E0012318460837F8 -S3150800E8A8BD4680BD78000020800000207C0000203E -S3150800E8B880B400AF054B1B781A46054B1B681344F2 -S3150800E8C8034A136000BFBD4680BC7047800000201D -S3150800E8D88C10002080B400AF024B1B681846BD4652 -S3150800E8E880BC70478C10002080B584B000AF786073 -S3150800E8F8FFF7F0FFB8607B68FB60FB68B3F1FF3F82 -S3150800E90805D00A4B1B781A46FB681344FB6000BF00 -S3150800E918FFF7E0FF0246BB68D31AFA689A42F7D8A7 -S3150800E92800BF00BF1037BD4680BD00BF800000206D -S3150800E93880B586B000AF78600023FB7500233B617D -S3150800E9480023BB600023FB607B68002B01D10123F1 -S3150800E958BEE07B689B68002B7B689B6A002B09D105 -S3150800E9687B680022DA627B68002283F824207868AC -S3150800E978FAF764FE786800F0F1FB0346FB757B68D6 -S3150800E9889B6A03F01003002B40F09980FB7D002B4F -S3150800E99840F095807B689B6A23F4885323F002032A -S3150800E9A843F002027B689A627B685A687B68DB696F -S3150800E9B81A437B681B7B5B001343BA681343BB6027 -S3150800E9C87B689B68B3F5807F03D07B689B68012BBF -S3150800E9D802D14FF4807300E000233A6913433B6180 -S3150800E9E87B681B7D012B19D17B681B7B002B09D102 -S3150800E9F87B689B69013B5A033B69134343F40063ED -S3150800EA083B610BE07B689B6A43F020027B689A624D -S3150800EA187B68DB6A43F001027B68DA627B681B68FD -S3150800EA285B6823F469417B681B683A690A435A603C -S3150800EA387B681B689A68284B13407A681268B96815 -S3150800EA480B4393607B689B68B3F5807F03D07B682C -S3150800EA589B68012B04D17B681B69013B1B05FB607E -S3150800EA687B681B68DB6A23F470017B681B68FA6895 -S3150800EA780A43DA627B681B689A68184B1340BA68B7 -S3150800EA889A420BD17B680022DA627B689B6A23F07C -S3150800EA98030343F001027B689A6218E07B689B6A65 -S3150800EAA823F0120343F010027B689A627B68DB6ADC -S3150800EAB843F001027B68DA620123FB7507E07B688D -S3150800EAC89B6A43F010027B689A620123FB75FB7DFB -S3150800EAD818461837BD4680BDFDF7E1FFFE0E1FFF35 -S3150800EAE880B584B000AF78600023FB737B6893F821 -S3150800EAF82430012B01D1022398E07B68012283F890 -S3150800EB082420786800F0D0FA0346FB73FB7B002BB9 -S3150800EB1840F087807B689B6A23F4407323F00103DF -S3150800EB2843F480727B689A627B681B68414A934201 -S3150800EB3805D1414B5B6803F47023002B15D17B681C -S3150800EB489B6A23F480127B689A627B681B685B68F9 -S3150800EB5803F48063002B26D07B689B6A23F4405312 -S3150800EB6843F480527B689A621DE07B689B6A43F48B -S3150800EB7880127B689A627B681B682F4A934204D086 -S3150800EB887B681B682B4A93420DD12B4B5B6803F4B1 -S3150800EB988063002B07D07B689B6A23F4405343F4B1 -S3150800EBA880527B689A627B689B6A03F48053002BC1 -S3150800EBB806D07B68DB6A23F006027B68DA6202E025 -S3150800EBC87B680022DA627B68002283F824207B6847 -S3150800EBD81B686FF002021A607B681B689B6803F45F -S3150800EBE86023B3F5602F13D17B681B68114A9342DB -S3150800EBF805D1114B5B6803F47023002B08D17B6899 -S3150800EC081B689A687B681B6842F4A0029A600CE045 -S3150800EC187B681B689A687B681B6842F480129A604E -S3150800EC2803E07B68002283F82420FB7B184610370C -S3150800EC38BD4680BD002801400024014080B584B047 -S3150800EC4800AF78600023FB737B6893F82430012BA8 -S3150800EC5801D102231AE07B68012283F82420786808 -S3150800EC6800F07CFA0346FB73FB7B002B09D17B6813 -S3150800EC789B6A23F4885323F0010343F001027B6857 -S3150800EC889A627B68002283F82420FB7B1846103793 -S3150800EC98BD4680BD90B587B000AF7860396000235F -S3150800ECA87B610023FB6000233B61FFF713FE786155 -S3150800ECB87B681B689B6803F48073002B0BD07B6802 -S3150800ECC89B6A43F020027B689A627B68002283F875 -S3150800ECD824200123D3E07B681B685B6803F48073F0 -S3150800ECE8002B31D17B681B68DB6A03F47003002BA1 -S3150800ECF82AD121E03B68B3F1FF3F1DD03B68002BC2 -S3150800ED0807D0FFF7E7FD02467B69D31A3A689A42A5 -S3150800ED1812D27B681B681B6803F00203002B0BD111 -S3150800ED287B689B6A43F004027B689A627B680022C8 -S3150800ED3883F824200323A2E07B681B681B6803F07A -S3150800ED480203002BD6D070E04F4B1C68022002F055 -S3150800ED58FBFC0346B4FBF3F27B681B6819694B4B4B -S3150800ED680B40002B18D17B681B68D968484B0B40A9 -S3150800ED78002B11D17B681B681969464B0B40002B81 -S3150800ED8808D17B681B68D968434B0B40002B01D117 -S3150800ED98142320E029231EE07B681B6819693D4B6C -S3150800EDA80B40002B06D17B681B68D9683A4B0B4089 -S3150800EDB8002B0DD07B681B681969384B0B40002B54 -S3150800EDC808D17B681B68D968344B0B40002B01D1E6 -S3150800EDD8542300E0FC2302FB03F33B6121E03B6874 -S3150800EDE8B3F1FF3F1AD03B68002B07D0FFF772FD37 -S3150800EDF802467B69D31A3A689A420FD2FB683A697F -S3150800EE089A420BD97B689B6A43F004027B689A622C -S3150800EE187B68002283F82420032330E0FB6801334B -S3150800EE28FB60FB683A699A42D9D87B681B686FF019 -S3150800EE3812021A607B689B6A43F400727B689A62BE -S3150800EE487B681B689B6803F46023B3F5602F15D1AC -S3150800EE587B681B7B002B11D17B689B6A23F4807225 -S3150800EE687B689A627B689B6A03F48053002B05D1FA -S3150800EE787B689B6A43F001027B689A6200231846FE -S3150800EE881C37BD4690BD00BF78000020244992244F -S3150800EE98244992009224491292244900499224004E -S3150800EEA880B483B000AF78607B681B68DB6C184653 -S3150800EEB80C37BD4680BC704780B485B000AF786013 -S3150800EEC839600023FB730023BB607B6893F8243002 -S3150800EED8012B01D10223DCE07B68012283F8242078 -S3150800EEE83B685B68062B1CD87B681B68596B3B68B4 -S3150800EEF85A6813469B001344053B1F2202FA03F37C -S3150800EF08DB4319403B6818683B685A6813469B00F8 -S3150800EF181344053B00FA03F27B681B680A435A63E5 -S3150800EF283CE03B685B680C2B1CD87B681B68196B34 -S3150800EF383B685A6813469B001344233B1F2202FA70 -S3150800EF4803F3DB4319403B6818683B685A6813465D -S3150800EF589B001344233B00FA03F27B681B680A43A9 -S3150800EF681A631BE07B681B68D96A3B685A681346AC -S3150800EF789B001344413B1F2202FA03F3DB43194063 -S3150800EF883B6818683B685A6813469B001344413B1C -S3150800EF9800FA03F27B681B680A43DA623B681B6857 -S3150800EFA8092B1CD97B681B68D9683B681A681346FD -S3150800EFB85B0013441E3B072202FA03F3DB4319409E -S3150800EFC83B6898683B681A6813465B0013441E3BFF -S3150800EFD800FA03F27B681B680A43DA6019E07B6863 -S3150800EFE81B6819693B681A6813465B0013440722AD -S3150800EFF802FA03F3DB4319403B6898683B681A68CA -S3150800F00813465B00134400FA03F27B681B680A433D -S3150800F0181A613B681B68102B03D03B681B68112BC9 -S3150800F02832D17B681B681D4A934225D17B681B68C9 -S3150800F0389B6803F40003002B26D17B681B689A6833 -S3150800F0487B681B6842F400029A603B681B68102BB1 -S3150800F0581AD1134B1B68134AA2FB03239A0C1346AF -S3150800F0689B0013445B00BB6002E0BB68013BBB60C6 -S3150800F078BB68002BF9D107E07B689B6A43F020023E -S3150800F0887B689A620123FB737B68002283F8242035 -S3150800F098FB7B18461437BD4680BC704700240140E0 -S3150800F0A87800002083DE1B4380B584B000AF786003 -S3150800F0B80023FB600023BB607B681B689B6803F022 -S3150800F0C80103012B40D07B681B689A687B681B681C -S3150800F0D842F001029A601F4B1B681F4AA2FB0323D2 -S3150800F0E89B0CBB6002E0BB68013BBB60BB68002B9E -S3150800F0F8F9D1FFF7EFFBF8601FE0FFF7EBFB0246D5 -S3150800F108FB68D31A022B18D97B681B689B6803F01F -S3150800F1180103012B11D07B689B6A43F010027B68B8 -S3150800F1289A627B68DB6A43F001027B68DA627B686D -S3150800F138002283F82420012307E07B681B689B6864 -S3150800F14803F00103012BD8D1002318461037BD4612 -S3150800F15880BD00BF7800002083DE1B4380B584B0DD -S3150800F16800AF78600023FB607B681B689B6803F028 -S3150800F1780103012B2ED17B681B689A687B681B687C -S3150800F18822F001029A60FFF7A5FBF8601BE0FFF77B -S3150800F198A1FB0246FB68D31A022B14D97B681B68A5 -S3150800F1A89B6803F00103012B0DD17B689B6A43F02A -S3150800F1B810027B689A627B68DB6A43F001027B6807 -S3150800F1C8DA62012307E07B681B689B6803F0010382 -S3150800F1D8012BDCD0002318461037BD4680BD000039 -S3150800F1E890B587B000AF78600023FB750023FB60F5 -S3150800F1F87B6893F82430012B01D1022397E07B68BA -S3150800F208012283F824207868FFF7A8FF0346FB75D0 -S3150800F2187868FFF749FF0346FB75FB7D002B40F02E -S3150800F22881807B689B6A23F4885323F0020343F0A2 -S3150800F23802027B689A62404B1C68022002F084FA34 -S3150800F2480346B4FBF3F35B00FB6002E0FB68013B93 -S3150800F258FB60FB68002BF9D17B681B689A687B689A -S3150800F2681B6842F008029A60FFF734FB38611BE016 -S3150800F278FFF730FB02463B69D31A0A2B14D97B6879 -S3150800F2881B689B6803F00803002B0DD07B689B6AF4 -S3150800F29823F0120343F010027B689A627B68002207 -S3150800F2A883F82420012342E07B681B689B6803F0E7 -S3150800F2B80803002BDCD17B681B689A687B681B6887 -S3150800F2C842F004029A60FFF705FB38611BE0FFF776 -S3150800F2D801FB02463B69D31A0A2B14D97B681B68BB -S3150800F2E89B6803F00403002B0DD07B689B6A23F008 -S3150800F2F8120343F010027B689A627B68002283F83F -S3150800F3082420012313E07B681B689B6803F0040329 -S3150800F318002BDCD17B689B6A23F0030343F00102C8 -S3150800F3287B689A627B68002283F82420FB7D18464E -S3150800F3381C37BD4690BD00BF7800002080B584B054 -S3150800F34800AF78607B68002B01D10123EDE07B686C -S3150800F35893F82030DBB2002B02D17868FAF7E8FB7D -S3150800F3687B681B681A687B681B6842F001021A608A -S3150800F378FFF7B0FAF86012E0FFF7ACFA0246FB6846 -S3150800F388D31A0A2B0BD97B685B6A43F400327B686D -S3150800F3985A627B68052283F820200123C5E07B682A -S3150800F3A81B685B6803F00103002BE5D07B681B68C4 -S3150800F3B81A687B681B6822F002021A60FFF78AFA45 -S3150800F3C8F86012E0FFF786FA0246FB68D31A0A2B9A -S3150800F3D80BD97B685B6A43F400327B685A627B68A0 -S3150800F3E8052283F8202001239FE07B681B685B6859 -S3150800F3F803F00203002BE5D17B681B7E012B08D19D -S3150800F4087B681B681A687B681B6842F080021A606A -S3150800F41807E07B681B681A687B681B6822F080020D -S3150800F4281A607B685B7E012B08D17B681B681A68A3 -S3150800F4387B681B6842F040021A6007E07B681B6815 -S3150800F4481A687B681B6822F040021A607B689B7EF4 -S3150800F458012B08D17B681B681A687B681B6842F011 -S3150800F46820021A6007E07B681B681A687B681B68B5 -S3150800F47822F020021A607B68DB7E012B08D17B68A4 -S3150800F4881B681A687B681B6822F010021A6007E076 -S3150800F4987B681B681A687B681B6842F010021A604A -S3150800F4A87B681B7F012B08D17B681B681A687B68F9 -S3150800F4B81B6842F008021A6007E07B681B681A682E -S3150800F4C87B681B6822F008021A607B685B7F012B41 -S3150800F4D808D17B681B681A687B681B6842F00402B7 -S3150800F4E81A6007E07B681B681A687B681B6822F045 -S3150800F4F804021A607B689A687B68DB681A437B682B -S3150800F5081B691A437B685B6942EA03017B685B6887 -S3150800F5185A1E7B681B680A43DA617B6800225A62AE -S3150800F5287B68012283F82020002318461037BD4639 -S3150800F53880BD000080B487B000AF786039607B680A -S3150800F5481B687B617B6893F82030FB74FB7C012B76 -S3150800F55803D0FB7C022B40F0BE80654B7B617B6940 -S3150800F568D3F8003243F001027B69C3F800227B69AD -S3150800F578D3F8003223F47C527B69C3F800227B69EE -S3150800F588D3F800223B685B6A1B021A437B69C3F8F7 -S3150800F59800223B685B6903F01F03012202FA03F3A2 -S3150800F5A8FB607B69D3F81C22FB68DB431A407B693E -S3150800F5B8C3F81C223B68DB69002B23D17B69D3F887 -S3150800F5C80C22FB68DB431A407B69C3F80C223B68AC -S3150800F5D8DB6819043B685B689BB23A685269194349 -S3150800F5E87B69483243F832103B689B6819043B68C4 -S3150800F5F81B689AB23B685B690A4379694833DB003A -S3150800F6080B445A603B68DB69012B22D17B69D3F826 -S3150800F6180C22FB681A437B69C3F80C223B681B68F3 -S3150800F62819043B685B689BB23A68526919437B6957 -S3150800F638483243F832103B689B6819043B68DB6814 -S3150800F6489AB23B685B690A4379694833DB000B441D -S3150800F6585A603B689B69002B09D17B69D3F8042259 -S3150800F668FB68DB431A407B69C3F8042207E07B6919 -S3150800F678D3F80422FB681A437B69C3F804223B685B -S3150800F6881B69002B09D17B69D3F81422FB68DB4375 -S3150800F6981A407B69C3F8142207E07B69D3F8142259 -S3150800F6A8FB681A437B69C3F814223B681B6A012B5B -S3150800F6B807D17B69D3F81C22FB681A437B69C3F810 -S3150800F6C81C227B69D3F8003223F001027B69C3F850 -S3150800F6D80022002306E07B685B6A43F480227B6885 -S3150800F6E85A62012318461C37BD4680BC704700BFBE -S3150800F6F80064004080B584B000AF78607B6893F8F2 -S3150800F7082030DBB2012B2ED17B68022283F8202019 -S3150800F7187B681B681A687B681B6822F001021A60F6 -S3150800F728FFF7D8F8F86012E0FFF7D4F80246FB6846 -S3150800F738D31A0A2B0BD97B685B6A43F400327B68B9 -S3150800F7485A627B68052283F82020012312E07B6829 -S3150800F7581B685B6803F00103002BE5D17B68002270 -S3150800F7685A62002306E07B685B6A43F400227B68DA -S3150800F7785A62012318461037BD4680BD80B584B045 -S3150800F78800AF78607B6893F82030DBB2022B33D160 -S3150800F7987B681B681A687B681B6842F001021A6056 -S3150800F7A8FFF798F8F86012E0FFF794F80246FB6846 -S3150800F7B8D31A0A2B0BD97B685B6A43F400327B6839 -S3150800F7C85A627B68052283F8202001231BE07B68A0 -S3150800F7D81B685B6803F00103002BE5D07B681B6890 -S3150800F7E81A687B681B6822F002021A607B68012285 -S3150800F7F883F82020002306E07B685B6A43F48012BE -S3150800F8087B685A62012318461037BD4680BD80B406 -S3150800F81889B000AFF860B9607A603B60FB6893F816 -S3150800F8282030FB77FB681B689B68BB61FB7F012B55 -S3150800F83803D0FB7F022B40F0AD80BB6903F08063E1 -S3150800F848002B0AD1BB6903F00063002B05D1BB69FD -S3150800F85803F08053002B00F09580BB691B0E03F05C -S3150800F86803037B6101227B699A403B681A60BB687F -S3150800F8789B68002B0DD1BB681B685A05BB68DB68FB -S3150800F888F96809681A437B6918331B010B441A601F -S3150800F8980FE0BB685B68DA00BB689B681A43BB68FD -S3150800F8A8DB68F96809681A437B6918331B010B4436 -S3150800F8B81A60FB681968BB681A697B6918331B01E3 -S3150800F8C80B4404331A60BB681B7D012B11D1FB68F6 -S3150800F8D81A687B6918331B01134404331B68FA68D2 -S3150800F8E8116843F480727B6918331B010B4404338F -S3150800F8F81A607B6807331B781A067B6806331B78F9 -S3150800F9081B041A437B6805331B781B0213437A6862 -S3150800F918043212781046FA68116843EA00027B69CD -S3150800F9281B010B4403F5C6731A607B6803331B78FF -S3150800F9381A067B6802331B781B041A437B68013353 -S3150800F9481B781B0213437A6812781046FA681168FE -S3150800F95843EA00027B691B010B4403F5C4731A606A -S3150800F968FB681A687B6918331B0113441B68FA6815 -S3150800F978116843F001027B6918331B010B441A60AE -S3150800F98800230EE0FB685B6A43F40012FB685A62C0 -S3150800F998012306E0FB685B6A43F48022FB685A6227 -S3150800F9A8012318462437BD4680BC704780B485B005 -S3150800F9B800AF78600023FB607B6893F82030FB7201 -S3150800F9C8FB7A012B02D0FB7A022B1DD17B681B68B8 -S3150800F9D89B6803F08063002B02D0FB680133FB6049 -S3150800F9E87B681B689B6803F00063002B02D0FB68E2 -S3150800F9F80133FB607B681B689B6803F08053002B08 -S3150800FA0802D0FB680133FB60FB6818461437BD460D -S3150800FA1880BC704780B487B000AFF860B9607A6078 -S3150800FA283B60FB6893F82030FB75FB7D012B03D000 -S3150800FA38FB7D022B40F00381BB68002B0ED1FB68C7 -S3150800FA481B68DB6803F00303002B16D1FB685B6AA7 -S3150800FA5843F40012FB685A620123F7E0FB681B6847 -S3150800FA681B6903F00303002B07D1FB685B6A43F4A1 -S3150800FA780012FB685A620123E8E0FB681A68BB684B -S3150800FA881B331B0113441B6803F004027B689A6046 -S3150800FA987B689B68002B0CD1FB681A68BB681B330C -S3150800FAA81B0113441B685B0DC3F30A027B681A60C3 -S3150800FAB80BE0FB681A68BB681B331B0113441B68F9 -S3150800FAC8DB0823F060427B685A60FB681A68BB68E3 -S3150800FAD81B331B0113441B6803F002027B68DA60B8 -S3150800FAE8FB681A68BB681B331B01134404331B687D -S3150800FAF803F00803002B03D07B6808221A610BE081 -S3150800FB08FB681A68BB681B331B01134404331B685C -S3150800FB1803F00F027B681A61FB681A68BB681B3317 -S3150800FB281B01134404331B681B0ADAB27B689A6103 -S3150800FB38FB681A68BB681B331B01134404331B682C -S3150800FB481B0C9AB27B685A61FB681A68BB681B016A -S3150800FB58134403F5DC731B68DAB23B681A70FB6852 -S3150800FB681A68BB681B01134403F5DC731B681A0A79 -S3150800FB783B680133D2B21A70FB681A68BB681B0166 -S3150800FB88134403F5DC731B681A0C3B680233D2B2BC -S3150800FB981A70FB681A68BB681B01134403F5DC7303 -S3150800FBA81B681A0E3B680333D2B21A70FB681A68C8 -S3150800FBB8BB681B01134403F5DE731A683B680433F4 -S3150800FBC8D2B21A70FB681A68BB681B01134403F59E -S3150800FBD8DE731B681A0A3B680533D2B21A70FB68CB -S3150800FBE81A68BB681B01134403F5DE731B681A0CF5 -S3150800FBF83B680633D2B21A70FB681A68BB681B01E1 -S3150800FC08134403F5DE731B681A0E3B680733D2B232 -S3150800FC181A70BB68002B08D1FB681B68DA68FB6892 -S3150800FC281B6842F02002DA6007E0FB681B681A695D -S3150800FC38FB681B6842F020021A61002306E0FB688D -S3150800FC485B6A43F48022FB685A62012318461C370C -S3150800FC58BD4680BC704780B485B000AF786039600F -S3150800FC687B6893F82030FB73FB7B012B02D0FB7B68 -S3150800FC78022B09D17B681B6859697B681B683A6837 -S3150800FC880A435A61002306E07B685B6A43F48022CC -S3150800FC987B685A62012318461437BD4680BC7047EC -S3150800FCA880B58AB000AF786000237B627B681B68E2 -S3150800FCB85B693B627B681B685B68FB617B681B68E2 -S3150800FCC89B68BB617B681B68DB687B617B681B6814 -S3150800FCD81B693B617B681B689B69FB603B6A03F091 -S3150800FCE80103002B7CD0BB6903F00103002B23D04A -S3150800FCF87B681B6801229A60BB6903F00203002B24 -S3150800FD0803D0786800F083F916E0BB6903F00403AA -S3150800FD18002B04D07B6A43F400637B620CE0BB6962 -S3150800FD2803F00803002B04D07B6A43F480537B62F4 -S3150800FD3802E0786800F086F9BB6903F48073002B43 -S3150800FD4824D07B681B684FF480729A60BB6903F4F9 -S3150800FD580073002B03D0786800F062F916E0BB69D7 -S3150800FD6803F48063002B04D07B6A43F400537B6258 -S3150800FD780CE0BB6903F40063002B04D07B6A43F4E8 -S3150800FD8880437B6202E0786800F065F9BB6903F492 -S3150800FD988033002B24D07B681B684FF480329A6026 -S3150800FDA8BB6903F40033002B03D0786800F041F9E7 -S3150800FDB816E0BB6903F48023002B04D07B6A43F45E -S3150800FDC800437B620CE0BB6903F40023002B04D0D4 -S3150800FDD87B6A43F480337B6202E0786800F044F972 -S3150800FDE83B6A03F00803002B0CD07B6903F0100369 -S3150800FDF8002B07D07B6A43F400737B627B681B6819 -S3150800FE081022DA603B6A03F00403002B0BD07B69E7 -S3150800FE1803F00803002B06D07B681B680822DA6003 -S3150800FE28786800F02AF93B6A03F00203002B09D028 -S3150800FE387B681B68DB6803F00303002B02D078682D -S3150800FE48FBF7A6FD3B6A03F04003002B0CD03B6981 -S3150800FE5803F01003002B07D07B6A43F480637B62A8 -S3150800FE687B681B6810221A613B6A03F02003002B83 -S3150800FE780BD03B6903F00803002B06D07B681B6888 -S3150800FE8808221A61786800F001F93B6A03F0100342 -S3150800FE98002B09D07B681B681B6903F00303002B3A -S3150800FEA802D07868FCF72CFB3B6A03F40033002B76 -S3150800FEB80BD0FB6903F01003002B06D07B681B6880 -S3150800FEC810225A60786800F0EAF83B6A03F480332F -S3150800FED8002B0BD0FB6903F00803002B06D07B68C0 -S3150800FEE81B6808225A60786800F0E2F83B6A03F44F -S3150800FEF80043002B7BD0FB6903F00403002B72D068 -S3150800FF083B6A03F48073002B08D0FB6803F00103EF -S3150800FF18002B03D07B6A43F001037B623B6A03F438 -S3150800FF280073002B08D0FB6803F00203002B03D0EC -S3150800FF387B6A43F002037B623B6A03F48063002B07 -S3150800FF4808D0FB6803F00403002B03D07B6A43F050 -S3150800FF5804037B623B6A03F40063002B43D0FB6807 -S3150800FF6803F07003002B3ED0FB6803F07003602B88 -S3150800FF782BD0602B2ED8502B22D0502B2AD8402B8A -S3150800FF8819D0402B26D8302B10D0302B22D8102B3E -S3150800FF9802D0202B05D01DE07B6A43F008037B625C -S3150800FFA819E07B6A43F010037B6214E07B6A43F02E -S3150800FFB820037B620FE07B6A43F040037B620AE01A -S3150800FFC87B6A43F080037B6205E07B6A43F48073AF -S3150800FFD87B6200E000BF7B681B689A697B681B68C0 -S3150800FFE822F070029A617B681B6804225A607B6A51 -S3150800FFF8002B08D07B685A6A7B6A1A437B685A6260 -S31508010008786800F05EF800BF2837BD4680BD80B421 -S3150801001883B000AF786000BF0C37BD4680BC704717 -S3150801002880B483B000AF786000BF0C37BD4680BC8A -S31508010038704780B483B000AF786000BF0C37BD46FF -S3150801004880BC704780B483B000AF786000BF0C37B6 -S31508010058BD4680BC704780B483B000AF786000BFE6 -S315080100680C37BD4680BC704780B483B000AF786052 -S3150801007800BF0C37BD4680BC704780B483B000AF5B -S31508010088786000BF0C37BD4680BC704780B483B022 -S3150801009800AF786000BF0C37BD4680BC704780B496 -S315080100A883B000AF786000BF0C37BD4680BC704787 -S315080100B880B483B000AF786000BF0C37BD4680BCFA -S315080100C8704780B483B000AF786000BF0C37BD466F -S315080100D880BC704780B485B000AF78607B6803F050 -S315080100E80703FB600C4BDB68BB60BA684FF6FF0376 -S315080100F81340BB60FB681A02BB68134343F0BF632E -S3150801010843F40033BB60044ABB68D36000BF1437A5 -S31508010118BD4680BC704700BF00ED00E080B400AF63 -S31508010128044BDB681B0A03F007031846BD4680BC67 -S31508010138704700BF00ED00E080B483B000AF034606 -S31508010148FB7197F90730002B0BDBFB7903F01F02CC -S31508010158064997F907305B09012000FA02F241F8C6 -S31508010168232000BF0C37BD4680BC704700E100E07C -S3150801017880B483B000AF03463960FB7197F907303D -S31508010188002B0ADB3B68DAB20C4997F907301201EA -S31508010198D2B20B4483F800230AE03B68DAB208496D -S315080101A8FB7903F00F03043B1201D2B20B441A760A -S315080101B800BF0C37BD4680BC704700BF00E100E0B0 -S315080101C800ED00E080B489B000AFF860B9607A60E4 -S315080101D8FB6803F00703FB61FB69C3F10703042BFB -S315080101E828BF0423BB61FB690433062B02D9FB69C3 -S315080101F8033B00E000237B614FF0FF32BB6902FA3B -S3150801020803F3DA43BB681A407B699A404FF0FF311A -S315080102187B6901FA03F3D9437B680B4013431846F4 -S315080102282437BD4680BC704780B582B000AF786078 -S315080102387B68013BB3F1807F01D301230FE00A4AAA -S315080102487B68013B53600F214FF0FF30FFF790FFA2 -S31508010258054B00229A60044B07221A6000231846A8 -S315080102680837BD4680BD00BF10E000E080B582B002 -S3150801027800AF78607868FFF72DFF00BF0837BD46DD -S3150801028880BD80B586B000AF0346B9607A60FB7356 -S3150801029800237B61FFF742FF78617A68B968786954 -S315080102A8FFF790FF024697F90F3011461846FFF7F0 -S315080102B85FFF00BF1837BD4680BD80B582B000AF65 -S315080102C80346FB7197F907301846FFF735FF00BF54 -S315080102D80837BD4680BD80B582B000AF78607868BA -S315080102E8FFF7A2FF034618460837BD4680BD80B505 -S315080102F882B000AF78607B68002B01D101230EE03C -S315080103087B685B79DBB2002B05D17B6800221A7101 -S315080103187868FBF71FF87B6801225A71002318468B -S315080103280837BD4680BD80B485B000AF7860002324 -S31508010338FB737B6893F82130DBB2022B08D07B6804 -S3150801034804229A637B68002283F82020012320E08F -S315080103587B681B681A687B681B6822F00E021A609C -S315080103687B681B681A687B681B6822F001021A6099 -S315080103787B681A6C7B68DB6B012101FA02F25A6009 -S315080103887B68012283F821207B68002283F82020D4 -S31508010398FB7B18461437BD4680BC704780B584B0C8 -S315080103A800AF78600023FB737B6893F82130DBB2D2 -S315080103B8022B05D07B6804229A630123FB73D6E0D6 -S315080103C87B681B681A687B681B6822F00E021A602C -S315080103D87B681B681A687B681B6822F001021A6029 -S315080103E87B681B681A46644B9A4258D97B681B680E -S315080103F8624A93424FD07B681B68614A934248D048 -S315080104087B681B685F4A934240D07B681B685E4AD3 -S31508010418934238D07B681B685C4A934230D07B6824 -S315080104281B685B4A934228D07B681B68524A9342E9 -S3150801043820D07B681B68574A934219D07B681B688A -S31508010448554A934212D07B681B68544A93420AD08C -S315080104587B681B68524A934202D14FF480531BE0CA -S315080104684FF4803318E04FF4807315E0102313E036 -S31508010478012311E04FF080730EE04FF480130BE06F -S315080104884FF4803308E04FF4805305E04FF4807346 -S3150801049802E0102300E00123424A536057E07B68D3 -S315080104A81B68364A93424FD07B681B68344A934285 -S315080104B848D07B681B68334A934240D07B681B68DF -S315080104C8314A934238D07B681B68304A934230D008 -S315080104D87B681B682E4A934228D07B681B68264A84 -S315080104E8934220D07B681B682A4A934219D07B68B5 -S315080104F81B68294A934212D07B681B68274A93428C -S315080105080AD07B681B68264A934202D14FF4805366 -S315080105181BE04FF4803318E04FF4807315E010237D -S3150801052813E0012311E04FF080730EE04FF48013B6 -S315080105380BE04FF4803308E04FF4805305E04FF49D -S31508010548807302E0102300E00123174A53607B6891 -S31508010558012283F821207B68002283F820207B6802 -S315080105685B6B002B03D07B685B6B78689847FB7BD2 -S3150801057818461037BD4680BD800002400800024073 -S315080105881C00024030000240440002405800024064 -S315080105986C000240080402401C0402403004024070 -S315080105A844040240000402400000024080B48BB0B3 -S315080105B800AF7860396000237B6200233B6269E1FA -S315080105C801227B6A02FA03F3FB613B681B68FA6935 -S315080105D81340BB61BA69FB699A4240F058813B6886 -S315080105E85B689A4A93425ED0984A934275D8984A64 -S315080105F8934258D0964A93426FD8964A934252D014 -S31508010608944A934269D8944A93424CD0924A93425F -S3150801061863D8924A934246D0904A93425DD8122BA0 -S315080106282AD8122B59D801A252F823F0AF06010885 -S31508010638890601089B060108DD060108E306010883 -S31508010648E3060108E3060108E3060108E3060108CB -S31508010658E3060108E3060108E3060108E3060108BB -S31508010668E3060108E3060108E3060108E3060108AB -S3150801067891060108A5060108794A934213D02CE088 -S315080106883B68DB683B6229E03B68DB6804333B620D -S3150801069824E03B68DB6808333B621FE03B68DB689C -S315080106A80C333B621AE03B689B68002B02D1042392 -S315080106B83B6213E03B689B68012B05D108233B6223 -S315080106C87B68FA691A6109E008233B627B68FA695B -S315080106D85A6103E000233B6200E000BFBB69FF2BB8 -S315080106E801D87B6801E07B6804337B61BB69FF2B12 -S315080106F802D87B6A9B0002E07B6A083B9B003B6148 -S315080107087B691A680F213B6901FA03F3DB431A402F -S31508010718396A3B6901FA03F31A437B691A603B682C -S315080107285B6803F08053002B00F0B1804D4B9B6941 -S315080107384C4A43F0010393614A4B9B6903F0010351 -S31508010748BB60BB68484A7B6A9B08023352F8233068 -S31508010758FB607B6A03F003039B000F2202FA03F38B -S31508010768DB43FA681340FB607B68404A934213D01F -S315080107787B683F4A93420DD07B683E4A934207D02D -S315080107887B683D4A934201D1032306E0042304E02A -S31508010798022302E0012300E000237A6A02F0030239 -S315080107A892009340FA681343FB602F497B6A9B08BA -S315080107B80233FA6841F823203B685B6803F480131F -S315080107C8002B06D02D4B9A682C49BB6913438B60BD -S315080107D806E02A4B9A68BB69DB43284913408B60B4 -S315080107E83B685B6803F40013002B06D0234BDA68D1 -S315080107F82249BB691343CB6006E0204BDA68BB691B -S31508010808DB431E491340CB603B685B6803F400333E -S31508010818002B06D0194B5A681849BB6913434B6014 -S3150801082806E0164B5A68BB69DB43144913404B600B -S315080108383B685B6803F48033002B21D00F4B1A6899 -S315080108480E49BB6913430B6021E000BF0000321053 -S3150801085800003110000022100000211000001210BB -S315080108680000111000100240000001400008014074 -S31508010878000C014000100140001401400004014029 -S315080108880B4B1A68BB69DB43094913400B607B6A42 -S3150801089801337B623B681A687B6A22FA03F3002BE9 -S315080108A87FF48EAE00BF00BF2C37BD4680BC7047AB -S315080108B80004014080B485B000AF78600B467B80A0 -S315080108C87B689A687B881340002B02D00123FB7347 -S315080108D801E00023FB73FB7B18461437BD4680BC31 -S315080108E8704780B483B000AF78600B467B801346A7 -S315080108F87B707B78002B03D07A887B681A6103E0C2 -S315080109087B881A047B681A6100BF0C37BD4680BC10 -S315080109187047000080B400AF034B01221A6000BF7C -S31508010928BD4680BC704700BF20000E4280B582B024 -S3150801093800AFFDF7CFFF7860604B1B685F4A43F04D -S315080109480103136008E0FDF7C5FF02467B68D31A61 -S31508010958022B01D90323ACE0584B1B6803F00203A9 -S31508010968002BF0D0554B1B6823F0F803534A43F084 -S3150801097880031360FDF7AEFF7860504B00225A607A -S315080109880AE0FDF7A7FF02467B68D31A41F28832C7 -S31508010998934201D903238CE0484B5B6803F00C03A7 -S315080109A8002BEED1464B474A1A60474B1B68184637 -S315080109B8FDF74EFF0346002B01D0012379E0FDF729 -S315080109C889FF78603D4B1B683C4A23F080731360A6 -S315080109D808E0FDF77FFF02467B68D31A022B01D987 -S315080109E8032366E0354B1B6803F00073002BF0D12F -S315080109F8324B00225A60FDF76DFF78602F4B1B6852 -S31508010A082E4A23F41023136008E0FDF763FF024614 -S31508010A187B68D31A642B01D903234AE0274B1B6841 -S31508010A2803F40033002BF0D1244B1B68234A23F423 -S31508010A3880231360FDF74EFF7860204B1B681F4A19 -S31508010A4823F08063136008E0FDF744FF02467B68DC -S31508010A58D31A642B01D903232BE0184B1B6803F01F -S31508010A680063002BF0D1FDF735FF7860134B1B683F -S31508010A78124A23F08053136008E0FDF72BFF02465C -S31508010A887B68D31A642B01D9032312E00B4B1B6825 -S31508010A9803F00053002BF0D1084B0022DA62074B0A -S31508010AA85B6A064A43F080735362044B00229A60D4 -S31508010AB8002318460837BD4680BD00BF001002400E -S31508010AC87800002000127A007C00002080B586B0E4 -S31508010AD800AF78607B68002B01D1012304E37B68AA -S31508010AE81B6803F00103002B00F08780924B5B68B3 -S31508010AF803F00C03042B0CD08F4B5B6803F00C0333 -S31508010B08082B12D18C4B5B6803F48033B3F5803F0D -S31508010B180BD1894B1B6803F40033002B6CD07B6817 -S31508010B289B68002B68D10123DEE27B689B68B3F5D5 -S31508010B38803F06D1804B1B687F4A43F48033136094 -S31508010B482EE07B689B68002B0CD17B4B1B687A4A85 -S31508010B5823F480331360784B1B68774A23F4802380 -S31508010B6813601DE07B689B68B3F5A02F0CD1724B07 -S31508010B781B68714A43F4802313606F4B1B686E4ADE -S31508010B8843F4803313600BE06B4B1B686A4A23F402 -S31508010B9880331360684B1B68674A23F48023136004 -S31508010BA87B689B68002B13D0FDF794FE386108E033 -S31508010BB8FDF790FE02463B69D31A642B01D9032334 -S31508010BC892E25D4B1B6803F40033002BF0D014E066 -S31508010BD8FDF780FE386108E0FDF77CFE02463B69B1 -S31508010BE8D31A642B01D903237EE2534B1B6803F4FA -S31508010BF80033002BF0D100E000BF7B681B6803F0C7 -S31508010C080203002B63D04C4B5B6803F00C03002BE3 -S31508010C180BD0494B5B6803F00C03082B1CD1464BD8 -S31508010C285B6803F48033002B16D1434B1B6803F02A -S31508010C380203002B05D07B685B69012B01D00123D0 -S31508010C4852E23D4B1B6823F0F8027B689B69DB007F -S31508010C58394913430B603AE07B685B69002B20D05E -S31508010C68364B01221A60FDF735FE386108E0FDF7B3 -S31508010C7831FE02463B69D31A022B01D9032333E213 -S31508010C882D4B1B6803F00203002BF0D02A4B1B6877 -S31508010C9823F0F8027B689B69DB00274913430B603D -S31508010CA815E0264B00221A60FDF714FE386108E0A4 -S31508010CB8FDF710FE02463B69D31A022B01D9032315 -S31508010CC812E21D4B1B6803F00203002BF0D17B6867 -S31508010CD81B6803F00803002B3AD07B68DB69002BF5 -S31508010CE819D0174B01221A60FDF7F4FD386108E09F -S31508010CF8FDF7F0FD02463B69D31A022B01D90323F6 -S31508010D08F2E10D4B5B6A03F00203002BF0D00120D8 -S31508010D1800F0CAFB1CE00A4B00221A60FDF7DAFD4F -S31508010D2838610FE0FDF7D6FD02463B69D31A022B57 -S31508010D3808D90323D8E100BF001002400000424247 -S31508010D48800442429B4B5B6A03F00203002BE9D1FC -S31508010D587B681B6803F00403002B00F0A6800023B8 -S31508010D68FB75944BDB6903F08053002B0DD1914B2E -S31508010D78DB69904A43F08053D3618E4BDB6903F0F4 -S31508010D888053BB60BB680123FB758B4B1B6803F457 -S31508010D988073002B18D1884B1B68874A43F48073E4 -S31508010DA81360FDF797FD386108E0FDF793FD0246E4 -S31508010DB83B69D31A642B01D9032395E17E4B1B683A -S31508010DC803F48073002BF0D07B681B69012B06D1CD -S31508010DD8784B1B6A774A43F0010313622DE07B6857 -S31508010DE81B69002B0CD1734B1B6A724A23F001034A -S31508010DF81362704B1B6A6F4A23F0040313621CE0E3 -S31508010E087B681B69052B0CD16A4B1B6A694A43F037 -S31508010E1804031362674B1B6A664A43F001031362AC -S31508010E280BE0644B1B6A634A23F001031362614BA7 -S31508010E381B6A604A23F0040313627B681B69002B4B -S31508010E4815D0FDF747FD38610AE0FDF743FD02466F -S31508010E583B69D31A41F28832934201D9032343E104 -S31508010E68544B1B6A03F00203002BEED014E0FDF77E -S31508010E7831FD38610AE0FDF72DFD02463B69D31AB3 -S31508010E8841F28832934201D903232DE1494B1B6A62 -S31508010E9803F00203002BEED1FB7D012B05D1454B4F -S31508010EA8DB69444A23F08053D3617B68DB6A002BEC -S31508010EB800F08C803F4B5B6803F48033B3F5803FC1 -S31508010EC80ED13C4B5B6803F00C03082B08D1394B50 -S31508010ED8DB6A03F48033B3F5803F01D1012303E1CB -S31508010EE87B68DB6A022B4ED1324B1B6803F08053B1 -S31508010EF8002B09D02F4BDB6A03F0F0027B685B6B8A -S31508010F089A4201D00123EFE02C4B00221A60FDF723 -S31508010F18E1FC386108E0FDF7DDFC02463B69D31AB6 -S31508010F28642B01D90323DFE0224B1B6803F0006316 -S31508010F38002BF0D11F4BDB6A23F0F0027B685B6B51 -S31508010F481C491343CB621B4BDB6A23F470627B682B -S31508010F581B6B18491343CB62184B01221A60FDF71C -S31508010F68B9FC386108E0FDF7B5FC02463B69D31AB6 -S31508010F78642B01D90323B7E00E4B1B6803F0006302 -S31508010F88002BF0D022E00B4BDB6A0A4A23F48033A4 -S31508010F98D3620A4B00221A60FDF79CFC38610FE000 -S31508010FA8FDF798FC02463B69D31A642B08D9032333 -S31508010FB89AE000BF001002400070004068004242F3 -S31508010FC84B4B1B6803F00063002BE9D17B681B6A4E -S31508010FD8002B00F08880464B5B6803F00C03082B4E -S31508010FE868D07B681B6A022B4DD1424B00221A60D6 -S31508010FF8FDF770FC386108E0FDF76CFC02463B69B1 -S31508011008D31A022B01D903236EE0394B1B6803F067 -S315080110180073002BF0D17B685B6AB3F5803F0FD16B -S31508011028334BDA6A7B685B6831491343CB62304BC9 -S31508011038DB6A23F00F027B68DB682D491343CB6211 -S315080110482B4B5B6823F474127B68596A7B689B6A25 -S315080110580B43274913434B60264B01221A60FDF7B8 -S3150801106839FC386108E0FDF735FC02463B69D31AB5 -S31508011078022B01D9032337E01D4B1B6803F00073C4 -S31508011088002BF0D02FE01B4B00221A60FDF722FC3B -S31508011098386108E0FDF71EFC02463B69D31A022BA4 -S315080110A801D9032320E0124B1B6803F00073002BB8 -S315080110B8F0D118E07B681B6A012B01D1012313E0E3 -S315080110C80B4B5B68FB60FB6803F480327B685B6AE1 -S315080110D89A4206D1FB6803F470127B689B6A9A42A6 -S315080110E801D0012300E0002318461837BD4680BD04 -S315080110F8001002406000424280B584B000AF7860B3 -S3150801110839607B68002B01D10123D0E06A4B1B6843 -S3150801111803F007033A689A4210D9674B1B6823F00C -S31508011128070265493B6813430B60634B1B6803F069 -S3150801113807033A689A4201D00123B8E07B681B681D -S3150801114803F00203002B20D07B681B6803F0040315 -S31508011158002B05D0594B5B68584A43F4E063536042 -S315080111687B681B6803F00803002B05D0534B5B68A3 -S31508011178524A43F460535360504B5B6823F0F002BC -S315080111887B689B684D4913434B607B681B6803F072 -S315080111980103002B40D07B685B68012B07D1474BBD -S315080111A81B6803F40033002B15D101237FE07B6804 -S315080111B85B68022B07D1414B1B6803F00073002BB0 -S315080111C809D1012373E03D4B1B6803F00203002B89 -S315080111D801D101236BE0394B5B6823F003027B6875 -S315080111E85B68364913434B60FDF774FBF8600AE000 -S315080111F8FDF770FB0246FB68D31A41F2883293421F -S3150801120801D9032353E02D4B5B6803F00C027B6875 -S315080112185B689B009A42EBD1274B1B6803F00703CF -S315080112283A689A4210D2244B1B6823F007022249CE -S315080112383B6813430B60204B1B6803F007033A68A6 -S315080112489A4201D0012332E07B681B6803F0040344 -S31508011258002B08D0194B5B6823F4E0627B68DB68CE -S31508011268164913434B607B681B6803F00803002B78 -S3150801127809D0124B5B6823F460527B681B69DB0053 -S315080112880E4913434B6000F021F802460B4B5B6885 -S315080112981B0903F00F030A49CB5C22FA03F3094A2F -S315080112A81360094B1B681846FDF7D2FA002318463E -S315080112B81037BD4680BD00BF00200240001002401D -S315080112C8186D0108780000207C0000202DE9B04F30 -S315080112D88EB000AF0023FB620023BB6200237B6349 -S315080112E800237B6200233B6300233B620023FB61E7 -S315080112F84E4B5B68FB62FB6A03F00C03042B02D0B6 -S31508011308082B03D089E04A4B3B6389E0FB6A9B0CAF -S3150801131803F00F02474B9B5C7B62FB6A03F480333D -S31508011328002B72D0414BDB6A03F00F02424B9B5CE0 -S31508011338BB623E4BDB6A03F48033002B53D03B4B2D -S31508011348DB6A1B0903F00F0301333B62374BDB6A80 -S315080113581B0A03F00F030233FB61FB6900229A4655 -S3150801136893467B6A00223B617A613B6903FB0BF270 -S315080113787B690AFB03F313443A69AAFB02010B4486 -S3150801138819462B4B03FB01F2002300FB03F3134415 -S31508011398274AA0FB02452B441D463B6A0022BB602F -S315080113A8FA60BB6A00223B607A60D7E902010B46FC -S315080113B8D7E900AB524602FB03F25B4684460CFBAF -S315080113C803F3134402465146A2FB01894B44994645 -S315080113D842464B4620462946F7F758FF02460B462A -S315080113E813467B6307E07B6A114A03FB02F2BB6A71 -S315080113F8B2FBF3F37B630F4B5B7B1A467B6A93421B -S3150801140808D17B6B5B087B6304E07B6A0B4A02FBAA -S3150801141803F37B637B6B3B6302E0094B3B6300BFCA -S315080114283B6B18463837BD46BDE8B08F00100240F9 -S3150801143840787D01306D0108406D010800093D00BD -S3150801144800127A0080B400AF024B1B681846BD46E5 -S3150801145880BC70477800002080B500AFFFF7F2FF1F -S315080114680246054B5B681B0A03F007030349CB5C75 -S3150801147822FA03F3184680BD00100240286D0108B8 -S3150801148880B500AFFFF7DEFF0246054B5B68DB0A4E -S3150801149803F007030349CB5C22FA03F3184680BD18 -S315080114A800100240286D010880B485B000AF786045 -S315080114B80A4B1B680A4AA2FB03235B0A7A6802FBE2 -S315080114C803F3FB6000BFFB685A1EFA60002BF9D1CB -S315080114D800BF00BF1437BD4680BC7047780000209E -S315080114E8D34D621080B588B000AF786000237B6160 -S315080114F800233B610023FB617B681B6803F001033A -S31508011508002B7DD00023FB768B4BDB6903F08053D8 -S31508011518002B0DD1884BDB69874A43F08053D36189 -S31508011528854BDB6903F08053FB60FB680123FB7677 -S31508011538824B1B6803F48073002B18D17F4B1B68F9 -S315080115487E4A43F480731360FDF7C4F9786108E0AD -S31508011558FDF7C0F902467B69D31A642B01D903231F -S31508011568E5E0764B1B6803F48073002BF0D0724BC9 -S315080115781B6A03F440733B613B69002B2ED07B68D9 -S315080115885B6803F440733A699A4227D06A4B1B6A27 -S3150801159823F440733B616A4B01221A60684B0022A7 -S315080115A81A60654A3B6913623B6903F00103002B1C -S315080115B814D0FDF78FF978610AE0FDF78BF9024631 -S315080115C87B69D31A41F28832934201D90323AEE0E3 -S315080115D8594B1B6A03F00203002BEED0564B1B6AC4 -S315080115E823F440727B685B68534913430B62FB7E9D -S315080115F8012B05D1504BDB694F4A23F08053D36140 -S315080116087B681B6803F00203002B08D04A4B5B680A -S3150801161823F440427B689B68474913434B607B68C0 -S315080116281B6803F00403002B08D0434BDB6A23F439 -S3150801163800327B68DB6840491343CB627B681B68C9 -S3150801164803F00803002B08D03B4BDB6A23F48022FE -S315080116587B681B6938491343CB62374BDB6A03F44A -S315080116680033002B05D1344BDB6A03F48023002BA6 -S3150801167801D00123FB61FB69012B48D12E4B1B685D -S3150801168803F08053002B38D12B4B1B6803F080637A -S31508011698002B09D0284BDB6A03F0F0027B689B69AB -S315080116A89A4201D0012342E0234BDB6A23F0F00278 -S315080116B87B689B6920491343CB621F4BDB6A23F47A -S315080116C870427B685B691C491343CB621D4B012237 -S315080116D81A60FDF7FFF8786108E0FDF7FBF802469E -S315080116E87B69D31A642B01D9032320E0124B1B68A3 -S315080116F803F00053002BF0D009E00F4BDB6A03F423 -S3150801170870427B685B699A4201D001230FE07B68C6 -S315080117181B6803F01003002B08D0074B5B6823F4FA -S3150801172880027B68DB69044913434B60002318462A -S315080117382037BD4680BD00BF00100240007000403A -S31508011748400442427000424280B58AB000AF7860D0 -S315080117580023FB6100237B620023BB6100237B61B5 -S3150801176800233B610023FB600023BB6000233B6227 -S315080117787B68013B0F2B00F21D8101A252F823F069 -S315080117883D190108A1190108BD1901089B18010885 -S31508011798BD190108BD190108BD190108ED18010887 -S315080117A8BD190108BD190108BD190108BD190108A6 -S315080117B8BD190108BD190108BD190108C91701088C -S315080117C8834B5B68BB60824B1B6803F08073002BF5 -S315080117D800F0F280BB689B0C03F00F037D4AD35CCB -S315080117E8BB61BB6803F48033002B3BD0784BDB6ABB -S315080117F803F00F03784AD35CFB61754BDB6A03F484 -S315080118088033002B1CD0724BDB6A1B0903F00F03CC -S315080118180133FB606E4BDB6A1B0A03F00F030233C5 -S315080118287B616E4AFB68B2FBF3F37A6903FB02F242 -S31508011838FB69B2FBF3F2BB6902FB03F37B6207E0C0 -S31508011848664AFB69B2FBF3F2BB6902FB03F37B62E7 -S31508011858604B5B7B1A46BB69934208D17B6A5B0876 -S315080118687B6204E0BB695E4A02FB03F37B62584B61 -S315080118785B6803F48003B3F5800F02D17B6A3B6288 -S315080118889AE07B6A5B00574AA2FB03235B083B6223 -S3150801189892E04F4BDB6A03F40033002B03D1FFF7C1 -S315080118A815FD38628AE04A4B1B6803F08053002B02 -S315080118B800F08480464BDB6A1B0903F00F030133EA -S315080118C8FB60434BDB6A1B0B03F00F0302333B61D7 -S315080118D8424AFB68B2FBF3F33A6902FB03F35B007E -S315080118E83B626BE03A4BDB6A03F48023002B03D196 -S315080118F8FFF7ECFC386263E0354B1B6803F080534D -S31508011908002B5DD0324BDB6A1B0903F00F03013349 -S31508011918FB602F4BDB6A1B0B03F00F0302333B619A -S315080119282E4AFB68B2FBF3F33A6902FB03F35B0041 -S315080119383B6245E0264B1B6ABB60BB6803F44073F0 -S31508011948B3F5807F08D1BB6803F00203002B03D0E7 -S315080119584FF400433B621EE0BB6803F44073B3F5DA -S31508011968007F09D11A4B5B6A03F00203002B03D0E7 -S3150801197849F640433B620EE0BB6803F44073B3F58E -S31508011988407F1FD1124B1B6803F40033002B19D073 -S31508011998154B3B6216E015E0FFF772FD02460C4B44 -S315080119A85B689B0B03F0030301335B00B2FBF3F39C -S315080119B83B6208E000BF06E000BF04E000BF02E0A2 -S315080119C800BF00E000BF3B6A18462837BD4680BD00 -S315080119D800100240506D0108606D010840787D01CC -S315080119E800093D00ABAAAAAAF0FA020080B584B09C -S315080119F800AF78600023FB607B68002B01D10123C7 -S31508011A087AE07B685B7CDBB2002B05D17B68002218 -S31508011A181A747868FBF782FC7B6802225A7478681C -S31508011A2800F070F80346002B04D07B6804225A7428 -S31508011A38012361E0786800F092F80346002B04D088 -S31508011A487B6804225A74012356E07B681B685A6826 -S31508011A587B681B6822F007025A607B689B68002B23 -S31508011A6805D0274B1B6B264A23F001031363244B26 -S31508011A78DB6A23F460727B689B6821491343CB624E -S31508011A887B685B68B3F1FF3F03D07B685B68FB60E3 -S31508011A980EE00120FFF758FEF860FB68002B04D119 -S31508011AA87B6804225A74012326E0FB68013BFB6024 -S31508011AB8FB681A0C7B681B6802F00F029A607B6840 -S31508011AC81B68FA6892B2DA60786800F070F803461B -S31508011AD8002B04D07B6804225A7401230CE07B6826 -S31508011AE80022DA737B6801225A737B6801229A738A -S31508011AF87B6801225A74002318461037BD4680BDF3 -S31508011B08006C004080B584B000AF78600023FB60A4 -S31508011B187B68002B01D101231DE07B681B685A6885 -S31508011B287B681B6822F008025A60FCF7D3FEF86046 -S31508011B3809E0FCF7CFFE0246FB68D31AB3F57A7FAC -S31508011B4801D9032307E07B681B685B6803F0080370 -S31508011B58002BEED0002318461037BD4680BD80B548 -S31508011B6884B000AF78600023FB60FCF7B3FEF86029 -S31508011B7809E0FCF7AFFE0246FB68D31AB3F57A7F8C -S31508011B8801D903230FE07B681B685B6803F0200310 -S31508011B98002BEED07B681B685A687B681B6842F085 -S31508011BA810025A60002318461037BD4680BD80B515 -S31508011BB884B000AF78600023FB607B681B685A68AD -S31508011BC87B681B6822F010025A60FCF783FEF860EE -S31508011BD809E0FCF77FFE0246FB68D31AB3F57A7F5C -S31508011BE801D9032307E07B681B685B6803F02003B8 -S31508011BF8002BEED0002318461037BD4680BD80B5A8 -S31508011C0882B000AF78607B68002B01D1012341E0DF -S31508011C187B6893F83D30DBB2002B06D17B6800223E -S31508011C2883F83C207868FCF77FFB7B68022283F8F7 -S31508011C383D207B681A687B6804331946104600F00C -S31508011C48B9FA7B68012283F846207B68012283F862 -S31508011C583E207B68012283F83F207B68012283F8AE -S31508011C6840207B68012283F841207B68012283F89A -S31508011C7842207B68012283F843207B68012283F886 -S31508011C8844207B68012283F845207B68012283F872 -S31508011C983D20002318460837BD4680BD80B582B069 -S31508011CA800AF78607B68002B01D1012341E07B688E -S31508011CB893F83D30DBB2002B06D17B68002283F806 -S31508011CC83C20786800F039F87B68022283F83D20C1 -S31508011CD87B681A687B6804331946104600F06AFA65 -S31508011CE87B68012283F846207B68012283F83E2017 -S31508011CF87B68012283F83F207B68012283F840200C -S31508011D087B68012283F841207B68012283F84220F7 -S31508011D187B68012283F843207B68012283F84420E3 -S31508011D287B68012283F845207B68012283F83D20D8 -S31508011D38002318460837BD4680BD80B483B000AF76 -S31508011D48786000BF0C37BD4680BC704780B584B043 -S31508011D5800AF786039603B68002B09D17B6893F836 -S31508011D683E30DBB2012B14BF01230023DBB222E08C -S31508011D783B68042B09D17B6893F83F30DBB2012B0A -S31508011D8814BF01230023DBB215E03B68082B09D1F0 -S31508011D987B6893F84030DBB2012B14BF012300237B -S31508011DA8DBB208E07B6893F84130DBB2012B14BF3C -S31508011DB801230023DBB2002B01D0012363E03B6832 -S31508011DC8002B04D17B68022283F83E2013E03B6886 -S31508011DD8042B04D17B68022283F83F200BE03B6879 -S31508011DE8082B04D17B68022283F8402003E07B682C -S31508011DF8022283F841207B681B6801223968184644 -S31508011E0800F06EFC7B681B68214A934207D17B6800 -S31508011E181B685A6C7B681B6842F400425A647B68E3 -S31508011E281B681B4A934213D07B681B68B3F1804F22 -S31508011E380ED07B681B68174A934209D07B681B68D2 -S31508011E48154A934204D07B681B68144A934211D1F8 -S31508011E587B681B689B6803F00703FB60FB68062B16 -S31508011E6810D07B681B681A687B681B6842F00102F8 -S31508011E781A6007E07B681B681A687B681B6842F06A -S31508011E8801021A60002318461037BD4680BD00BFF7 -S31508011E98002C01400004004000080040000C0040E6 -S31508011EA880B586B000AFF860B9607A600023FB7523 -S31508011EB8FB6893F83C30012B01D10223AEE0FB689D -S31508011EC8012283F83C207B680C2B00F29F8001A233 -S31508011ED852F823F0111F01081520010815200108D9 -S31508011EE815200108511F01081520010815200108A8 -S31508011EF815200108931F0108152001081520010856 -S31508011F0815200108D31F0108FB681B68B96818461C -S31508011F1800F0C8F9FB681B689A69FB681B6842F0F8 -S31508011F2808029A61FB681B689A69FB681B6822F0B4 -S31508011F3804029A61FB681B689969BB681A69FB6898 -S31508011F481B680A439A6164E0FB681B68B968184606 -S31508011F5800F00EFAFB681B689A69FB681B6842F46D -S31508011F6800629A61FB681B689A69FB681B6822F418 -S31508011F7880629A61FB681B689969BB681B691A02C2 -S31508011F88FB681B680A439A6143E0FB681B68B968E2 -S31508011F98184600F057FAFB681B68DA69FB681B687C -S31508011FA842F00802DA61FB681B68DA69FB681B6894 -S31508011FB822F00402DA61FB681B68D969BB681A69E9 -S31508011FC8FB681B680A43DA6123E0FB681B68B96882 -S31508011FD8184600F0A1FAFB681B68DA69FB681B68F2 -S31508011FE842F40062DA61FB681B68DA69FB681B68F8 -S31508011FF822F48062DA61FB681B68D969BB681B69C8 -S315080120081A02FB681B680A43DA6102E00123FB75B9 -S3150801201800BFFB68002283F83C20FB7D1846183769 -S31508012028BD4680BD80B584B000AF786039600023AD -S31508012038FB737B6893F83C30012B01D10223B4E08A -S315080120487B68012283F83C207B68022283F83D20BD -S315080120587B681B689B68BB60BB6823F07703BB601A -S31508012068BB6823F47F43BB607B681B68BA689A60C0 -S315080120783B681B68B3F5005F3ED0B3F5005F00F215 -S315080120888780B3F5805F00F08680B3F5805F7FD8D7 -S31508012098702B1AD0702B7BD8602B50D0602B77D831 -S315080120A8502B3CD0502B73D8402B58D0402B6FD887 -S315080120B8302B64D0302B6BD8202B60D0202B67D8D7 -S315080120C8002B5CD0102B5AD062E07B6818683B68F5 -S315080120D899683B685A683B68DB6800F0E2FA7B68EE -S315080120E81B689B68BB60BB6843F07703BB607B686A -S315080120F81B68BA689A604FE07B6818683B689968F4 -S315080121083B685A683B68DB6800F0CBFA7B681B6852 -S315080121189A687B681B6842F480429A603CE07B684F -S3150801212818683B6859683B68DB681A4600F042FA42 -S315080121387B681B685021184600F099FA2CE07B68E1 -S3150801214818683B6859683B68DB681A4600F060FA04 -S315080121587B681B686021184600F089FA1CE07B68D1 -S3150801216818683B6859683B68DB681A4600F022FA22 -S315080121787B681B684021184600F079FA0CE07B68F1 -S315080121881A683B681B681946104600F070FA03E09E -S315080121980123FB7300E000BF7B68012283F83D2019 -S315080121A87B68002283F83C20FB7B18461037BD461E -S315080121B880BD000080B485B000AF786039607B685F -S315080121C81B68FB607B68334A93420FD07B68B3F17F -S315080121D8804F0BD07B68304A934207D07B682F4AD9 -S315080121E8934203D07B682E4A934208D1FB6823F0B1 -S315080121F87003FB603B685B68FA681343FB607B689E -S31508012208244A93420FD07B68B3F1804F0BD07B6881 -S31508012218214A934207D07B68204A934203D07B68B8 -S315080122281F4A934208D1FB6823F44073FB603B6855 -S31508012238DB68FA681343FB60FB6823F080023B6896 -S315080122485B691343FB607B68FA681A603B689A689E -S315080122587B68DA623B681A687B689A627B680D4A0A -S31508012268934203D13B681A697B681A637B68012222 -S315080122785A617B681B6903F00103002B05D07B684B -S315080122881B6923F001027B681A6100BF1437BD4632 -S3150801229880BC7047002C014000040040000800403B -S315080122A8000C004080B487B000AF786039607B685D -S315080122B81B6A7B617B681B6A23F001027B681A62C9 -S315080122C87B685B683B617B689B69FB60FB6823F0FD -S315080122D87003FB60FB6823F00303FB603B681B681C -S315080122E8FA681343FB607B6923F002037B613B6849 -S315080122F89B687A6913437B617B681C4A93420CD1B4 -S315080123087B6923F008037B613B68DB687A691343B9 -S315080123187B617B6923F004037B617B68134A9342DB -S3150801232811D13B6923F480733B613B6923F400733C -S315080123383B613B685B693A6913433B613B689B6947 -S315080123483A6913433B617B683A695A607B68FA685C -S315080123589A613B685A687B685A637B687A691A6224 -S3150801236800BF1C37BD4680BC704700BF002C014022 -S3150801237880B487B000AF786039607B681B6A7B6177 -S315080123887B681B6A23F010027B681A627B685B68A4 -S315080123983B617B689B69FB60FB6823F4E043FB6050 -S315080123A8FB6823F44073FB603B681B681B02FA68E9 -S315080123B81343FB607B6923F020037B613B689B68B9 -S315080123C81B017A6913437B617B681D4A93420DD1C8 -S315080123D87B6923F080037B613B68DB681B017A69AB -S315080123E813437B617B6923F040037B617B68144A4D -S315080123F8934213D13B6923F480633B613B6923F418 -S3150801240800633B613B685B699B003A6913433B611F -S315080124183B689B699B003A6913433B617B683A6948 -S315080124285A607B68FA689A613B685A687B689A6356 -S315080124387B687A691A6200BF1C37BD4680BC70473B -S31508012448002C014080B487B000AF786039607B689A -S315080124581B6A7B617B681B6A23F480727B681A6234 -S315080124687B685B683B617B68DB69FB60FB6823F01B -S315080124787003FB60FB6823F00303FB603B681B687A -S31508012488FA681343FB607B6923F400737B613B6835 -S315080124989B681B027A6913437B617B681D4A9342D1 -S315080124A80DD17B6923F400637B613B68DB681B02FA -S315080124B87A6913437B617B6923F480637B617B6853 -S315080124C8144A934213D13B6923F480533B613B6910 -S315080124D823F400533B613B685B691B013A69134363 -S315080124E83B613B689B691B013A6913433B617B68FE -S315080124F83A695A607B68FA68DA613B685A687B68A0 -S31508012508DA637B687A691A6200BF1C37BD4680BCE4 -S31508012518704700BF002C014080B487B000AF7860CF -S3150801252839607B681B6A3B617B681B6A23F48052A6 -S315080125387B681A627B685B687B617B68DB69FB6021 -S31508012548FB6823F4E043FB60FB6823F44073FB60F4 -S315080125583B681B681B02FA681343FB603B6923F453 -S3150801256800533B613B689B681B033A6913433B610C -S315080125787B680F4A934209D17B6923F480437B61BF -S315080125883B685B699B017A6913437B617B687A6956 -S315080125985A607B68FA68DA613B685A687B681A6424 -S315080125A87B683A691A6200BF1C37BD4680BC70470A -S315080125B8002C014080B487B000AFF860B9607A6032 -S315080125C8FB681B6A7B61FB681B6A23F00102FB68CF -S315080125D81A62FB689B693B613B6923F0F0033B611F -S315080125E87B681B013A6913433B617B6923F00A033C -S315080125F87B617A69BB6813437B61FB683A699A61AF -S31508012608FB687A691A6200BF1C37BD4680BC7047E9 -S3150801261880B487B000AFF860B9607A60FB681B6A56 -S315080126287B61FB681B6A23F01002FB681A62FB6868 -S315080126389B693B613B6923F470433B617B681B03D8 -S315080126483A6913433B617B6923F0A0037B61BB6845 -S315080126581B017A6913437B61FB683A699A61FB68CE -S315080126687A691A6200BF1C37BD4680BC704780B4B8 -S3150801267885B000AF786039607B689B68FB60FB684A -S3150801268823F07003FB603A68FB68134343F00703BA -S31508012698FB607B68FA689A6000BF1437BD4680BC40 -S315080126A8704780B487B000AFF860B9607A603B605C -S315080126B8FB689B687B617B6923F47F437B613B6885 -S315080126C81A027B681A43BB6813437A6913437B6109 -S315080126D8FB687A699A6000BF1C37BD4680BC70479B -S315080126E880B487B000AFF860B9607A60BB6803F058 -S315080126F81F03012202FA03F37B61FB681A6A7B69E5 -S31508012708DB431A40FB681A62FB681A6ABB6803F05E -S315080127181F03796801FA03F31A43FB681A6200BFB3 -S315080127281C37BD4680BC704780B485B000AF786059 -S3150801273839607B6893F83C30012B01D102234BE0C1 -S315080127487B68012283F83C207B68022283F83D20B6 -S315080127587B681B685B68FB607B681B689B68BB605A -S31508012768FB6823F07003FB603B681B68FA68134330 -S31508012778FB607B681B68FA685A607B681B68194A9C -S31508012788934213D07B681B68B3F1804F0ED07B68E0 -S315080127981B68154A934209D07B681B68134A9342FA -S315080127A804D07B681B68124A93420CD1BB6823F094 -S315080127B88003BB603B685B68BA681343BB607B6888 -S315080127C81B68BA689A607B68012283F83D207B6892 -S315080127D8002283F83C20002318461437BD4680BCDE -S315080127E8704700BF002C0140000400400008004063 -S315080127F8000C004080B582B000AF78607B68002B7A -S3150801280801D1012342E07B6893F84130DBB2002B02 -S3150801281806D17B68002283F840207868FBF78EFE8C -S315080128287B68242283F841207B681B68DA687B6801 -S315080128381B6822F40052DA60786800F0B3FE7B68F8 -S315080128481B681A697B681B6822F490421A617B68BF -S315080128581B685A697B681B6822F02A025A617B68D9 -S315080128681B68DA687B681B6842F40052DA607B6881 -S3150801287800225A647B68202283F841207B6820223B -S3150801288883F842207B6800225A63002318460837D2 -S31508012898BD4680BD80B485B000AFF860B9601346FF -S315080128A8FB80FB6893F84130DBB2202B21D1BB684A -S315080128B8002B02D0FB88002B01D101231AE0FB6803 -S315080128C8BA681A62FB68FA889A84FB68FA88DA840D -S315080128D8FB6800225A64FB68212283F84120FB68B9 -S315080128E81B68DA68FB681B6842F08002DA60002315 -S315080128F800E0022318461437BD4680BC704780B5E8 -S315080129088CB000AFF860B9601346FB80FB6893F892 -S315080129184230DBB2202B4AD1BB68002B02D0FB8898 -S31508012928002B01D1012343E0FB6801221A63FB68E6 -S3150801293800225A63FB881A46B968F86800F0FDFB55 -S31508012948034687F82F3097F82F30002B2CD1FB68D0 -S315080129581B6B012B25D100233B61FB681B681B6890 -S315080129683B61FB681B685B683B613B69FB681B68E5 -S315080129780C33BB61BB6953E8003F7B617B6943F054 -S315080129881003BB62FB681B680C33BA6A7A623B623E -S31508012998396A7A6A41E80023FB61FB69002BE5D1AC -S315080129A802E0012387F82F3097F82F3000E0022339 -S315080129B818463037BD4680BD80B5A2B000AF7860ED -S315080129C80123C7F884307B681B680C333B663B6E6A -S315080129D853E8003FFB65FB6D23F4F073C7F88030B5 -S315080129E87B681B680C33D7F88020FA66BB66B96E14 -S315080129F8FA6E41E800237B667B6E002BE3D17B6880 -S31508012A081B681433FB64FB6C53E8003FBB64BB6C5F -S31508012A1823F00103FB677B681B681433FA6FBA65F1 -S31508012A287B65796DBA6D41E800233B653B6D002BE3 -S31508012A38E5D17B681B6B012B19D17B681B680C33A5 -S31508012A48BB63BB6B53E8003F7B637B6B23F01003C7 -S31508012A58BB677B681B680C33BA6F7A643B64396C4D -S31508012A687A6C41E80023FB63FB6B002BE5D17B6895 -S31508012A789B6B002B0FD07B681B685B6903F080038F -S31508012A88002B04D07B689B6B534A5A6303E07B6827 -S31508012A989B6B00225A637B68DB6B002B0FD07B6824 -S31508012AA81B685B6903F04003002B04D07B68DB6B6A -S31508012AB84A4A5A6303E07B68DB6B00225A637B68E0 -S31508012AC81B685B6903F08003002B2DD07B681B68A4 -S31508012AD814337B627B6A53E8003F3B623B6A23F007 -S31508012AE880037B677B681B6814337A6F3A63FB62DA -S31508012AF8F96A3A6B41E80023BB62BB6A002BE5D148 -S31508012B087B689B6B002B0FD07B689B6B1846FDF780 -S31508012B1845FC0346002B04D07B689B6B00225A634D -S31508012B2802E00023C7F884307B681B685B6903F0F9 -S31508012B384003002B30D07B681B6814333B613B6923 -S31508012B4853E8003FFB60FB6823F040033B677B685B -S31508012B581B6814333A6FFA61BB61B969FA6941E8C6 -S31508012B6800237B617B69002BE5D17B68DB6B002B36 -S31508012B7812D07B68DB6B1846FDF710FC0346002B61 -S31508012B8807D07B68DB6B00225A630123C7F88430B8 -S31508012B9802E00023C7F88430D7F88430012B16D110 -S31508012BA87B680022DA847B680022DA857B68002242 -S31508012BB85A647B68202283F841207B68202283F89F -S31508012BC842207B6800221A63786800F0ADFA002370 -S31508012BD818468837BD4680BDA13201080133010868 -S31508012BE880B5BAB000AF78607B681B681B68C7F800 -S31508012BF8E4307B681B68DB68C7F8E0307B681B68CC -S31508012C085B69C7F8DC300023C7F8D8300023C7F852 -S31508012C18D430D7F8E43003F00F03C7F8D830D7F81B -S31508012C28D830002B0FD1D7F8E43003F02003002B56 -S31508012C3809D0D7F8E03003F02003002B03D07868D1 -S31508012C4800F0F1FB5BE2D7F8D830002B00F0DE8004 -S31508012C58D7F8DC3003F00103002B06D1D7F8E030AA -S31508012C6803F49073002B00F0D180D7F8E43003F011 -S31508012C780103002B0BD0D7F8E03003F48073002B3F -S31508012C8805D07B685B6C43F001027B685A64D7F808 -S31508012C98E43003F00403002B0BD0D7F8DC3003F03B -S31508012CA80103002B05D07B685B6C43F002027B6845 -S31508012CB85A64D7F8E43003F00203002B0BD0D7F88F -S31508012CC8DC3003F00103002B05D07B685B6C43F00D -S31508012CD804027B685A64D7F8E43003F00803002B2A -S31508012CE811D0D7F8E03003F02003002B05D1D7F827 -S31508012CF8DC3003F00103002B05D07B685B6C43F0DD -S31508012D0808027B685A647B685B6C002B00F0F281C9 -S31508012D18D7F8E43003F02003002B08D0D7F8E030C1 -S31508012D2803F02003002B02D0786800F07CFB7B684F -S31508012D381B685B6903F04003002B14BF01230023BA -S31508012D48DBB2C7F8D4307B685B6C03F00803002B49 -S31508012D5803D1D7F8D430002B4FD0786800F026FA7B -S31508012D687B681B685B6903F04003002B41D07B68CD -S31508012D781B681433C7F89C30D7F89C3053E8003FD2 -S31508012D88C7F89830D7F8983023F04003C7F8D030F9 -S31508012D987B681B681433D7F8D020C7F8A820C7F86A -S31508012DA8A430D7F8A410D7F8A82041E80023C7F813 -S31508012DB8A030D7F8A030002BD9D17B68DB6B002B64 -S31508012DC813D07B68DB6B7E4A5A637B68DB6B1846D4 -S31508012DD8FDF7E4FA0346002B16D07B68DB6B5B6BC1 -S31508012DE87A68D26B104698470EE0786800F093F92E -S31508012DF80AE0786800F08FF906E0786800F08BF940 -S31508012E087B6800225A6475E100BF73E17B681B6B16 -S31508012E18012B40F04F81D7F8E43003F01003002B5B -S31508012E2800F04881D7F8E03003F01003002B00F0D2 -S31508012E3841810023BB607B681B681B68BB607B6894 -S31508012E481B685B68BB60BB687B681B685B6903F0CA -S31508012E584003002B00F0B6807B68DB6B1B685B6858 -S31508012E68A7F8BE30B7F8BE30002B00F045817B685D -S31508012E789B8DB7F8BE209A4280F03E817B68B7F8E9 -S31508012E88BE20DA857B68DB6B9B69202B00F088807E -S31508012E987B681B680C33C7F88830D7F8883053E83D -S31508012EA8003FC7F88430D7F8843023F48073C7F80D -S31508012EB8B8307B681B680C33D7F8B820C7F8942054 -S31508012EC8C7F89030D7F89010D7F8942041E800232E -S31508012ED8C7F88C30D7F88C30002BD9D17B681B689A -S31508012EE814337B677B6F53E8003F3B673B6F23F0DF -S31508012EF80103C7F8B4307B681B681433D7F8B420C4 -S31508012F08C7F88020FB67F96FD7F8802041E80023C6 -S31508012F18BB67BB6F002BE1D17B681B6814333B6623 -S31508012F283B6E53E8003FFB65FB6D23F04003C7F88A -S31508012F38B0307B681B681433D7F8B020FA66BB66CD -S31508012F48B96EFA6E41E800237B667B6E002BE3D1E6 -S31508012F587B68202283F842207B6800221A637B68F3 -S31508012F681B680C33FB64FB6C53E8003FBB64BB6C02 -S31508012F7823F01003C7F8AC307B681B680C33D7F805 -S31508012F88AC20BA657B65796DBA6D41E800233B6566 -S31508012F983B6D002BE3D17B68DB6B1846FDF7C3F95C -S31508012FA87B6802225A637B689A8D7B68DB8D9BB2A4 -S31508012FB8D31A9BB219467868FAF772FA9CE000BFE9 -S31508012FC8793201087B689A8D7B68DB8D9BB2D31AA7 -S31508012FD8A7F8CE307B68DB8D9BB2002B00F08E807C -S31508012FE8B7F8CE30002B00F089807B681B680C3354 -S31508012FF8BB63BB6B53E8003F7B637B6B23F490731E -S31508013008C7F8C8307B681B680C33D7F8C8207A64B8 -S315080130183B64396C7A6C41E80023FB63FB6B002B34 -S31508013028E3D17B681B6814337B627B6A53E8003FEC -S315080130383B623B6A23F00103C7F8C4307B681B6807 -S315080130481433D7F8C4203A63FB62F96A3A6B41E844 -S315080130580023BB62BB6A002BE3D17B68202283F875 -S3150801306842207B6800221A637B681B680C333B6124 -S315080130783B6953E8003FFB60FB6823F01003C7F878 -S31508013088C0307B681B680C33D7F8C020FA61BB616E -S31508013098B969FA6941E800237B617B69002BE3D1A9 -S315080130A87B6802225A63B7F8CE3019467868FAF768 -S315080130B8F7F923E0D7F8E43003F08003002B09D0A9 -S315080130C8D7F8E03003F08003002B03D0786800F0C6 -S315080130D843F914E0D7F8E43003F04003002B0ED087 -S315080130E8D7F8E03003F04003002B08D0786800F0E1 -S315080130F882F904E000BF02E000BF00E000BFE8373C -S31508013108BD4680BD80B483B000AF786000BF0C3778 -S31508013118BD4680BC704780B483B000AF786000BFF5 -S315080131280C37BD4680BC704780B483B000AF786061 -S3150801313800BF0C37BD4680BC704780B485B000AF68 -S31508013148F860B9601346FB80FB68BA689A62FB683F -S31508013158FA889A85FB68FA88DA85FB6800225A6430 -S31508013168FB68222283F84220FB681B69002B07D0DB -S31508013178FB681B68DA68FB681B6842F48072DA60C8 -S31508013188FB681B685A69FB681B6842F001025A61A9 -S31508013198FB681B68DA68FB681B6842F02002DA607C -S315080131A8002318461437BD4680BC704780B495B0CD -S315080131B800AF78607B681B680C337B637B6B53E8CD -S315080131C8003F3B633B6B23F49073FB647B681B6886 -S315080131D80C33FA6C3A64FB63F96B3A6C41E80023E1 -S315080131E8BB63BB6B002BE5D17B681B6814333B6259 -S315080131F83B6A53E8003FFB61FB6923F00103BB64A3 -S315080132087B681B681433BA6CFA62BB62B96AFA6AD4 -S3150801321841E800237B627B6A002BE5D17B681B6B3F -S31508013228012B19D17B681B680C33FB60FB6853E8D3 -S31508013238003FBB60BB6823F010037B647B681B688F -S315080132480C337A6CBA617B617969BA6941E80023FA -S315080132583B613B69002BE5D17B68202283F8422034 -S315080132687B6800221A6300BF5437BD4680BC704785 -S3150801327880B584B000AF78607B685B6AFB60FB68E1 -S315080132880022DA85FB680022DA84F868FFF743FF2B -S3150801329800BF1037BD4680BD80B584B000AF7860E1 -S315080132A87B685B6AFB60FB689B6B00225A63FB6859 -S315080132B8DB6B002B04D0FB68DB6B5B6B002B17D130 -S315080132C8FB680022DA84FB680022DA85FB6800229B -S315080132D85A64FB68202283F84120FB68202283F878 -S315080132E84220FB6800221A63F868FFF71DFF00E011 -S315080132F800BF1037BD4680BD80B584B000AF786081 -S315080133087B685B6AFB60FB68DB6B00225A63FB68B8 -S315080133189B6B002B04D0FB689B6B5B6B002B17D14F -S31508013328FB680022DA84FB680022DA85FB6800223A -S315080133385A64FB68202283F84120FB68202283F817 -S315080133484220FB6800221A63F868FFF7EDFE00E0E1 -S3150801335800BF1037BD4680BD80B485B000AF786020 -S315080133687B6893F84130DBB2212B3ED17B689B6899 -S31508013378B3F5805F14D17B681B69002B10D17B6874 -S315080133881B6AFB60FB681B881A467B681B68C2F3C5 -S3150801339808025A607B681B6A9A1C7B681A6208E0ED -S315080133A87B681B6A591C7A6811621A787B681B68DC -S315080133B85A607B68DB8C9BB2013B9BB27A681946DB -S315080133C8D184002B0FD17B681B68DA687B681B6878 -S315080133D822F08002DA607B681B68DA687B681B68FA -S315080133E842F04002DA60002300E002231846143747 -S315080133F8BD4680BC704780B582B000AF78607B68EF -S315080134081B68DA687B681B6822F04002DA607B6809 -S31508013418202283F841207868FAF794F80023184699 -S315080134280837BD4680BD80B58CB000AF78607B682B -S3150801343893F84230DBB2222B40F0AE807B689B685A -S31508013448B3F5805F17D17B681B69002B13D100235D -S31508013458FB627B689B6ABB627B681B685B689BB27D -S31508013468C3F308039AB2BB6A1A807B689B6A9A1CDB -S315080134787B689A6226E07B689B6AFB620023BB62CB -S315080134887B689B68B3F5805F07D07B689B68002BD0 -S315080134980AD17B681B69002B06D17B681B685B68A8 -S315080134A8DAB2FB6A1A7008E07B681B685B68DBB2EC -S315080134B803F07F03DAB2FB6A1A707B689B6A5A1CA7 -S315080134C87B689A627B68DB8D9BB2013B9BB27A6803 -S315080134D81946D185002B5DD17B681B68DA687B683C -S315080134E81B6822F02002DA607B681B68DA687B6849 -S315080134F81B6822F48072DA607B681B685A697B68E4 -S315080135081B6822F001025A617B68202283F842204F -S315080135187B6800225A637B681B6B012B35D17B6854 -S3150801352800221A637B681B680C337B617B6953E845 -S31508013538003F3B613B6923F010037B627B681B688C -S315080135480C337A6A3A62FB61F9693A6A41E80023F7 -S31508013558BB61BB69002BE5D17B681B681B6803F057 -S315080135681003102B0AD10023FB607B681B681B68B4 -S31508013578FB607B681B685B68FB60FB687B689B8DE7 -S3150801358819467868F9F78CFF02E07868FFF7BAFDFB -S31508013598002302E0002300E0022318463037BD461F -S315080135A880BD000080B584B000AF78607B681B6871 -S315080135B81B6923F440517B68DA687B681B680A43F0 -S315080135C81A617B689A687B681B691A437B685B6919 -S315080135D81343BB607B681B68DB6823F4B05323F08D -S315080135E80C037A681268B9680B43D3607B681B6851 -S315080135F85B6923F440717B689A697B681B680A438F -S315080136085A617B681B682C4A934203D1FDF738FF38 -S31508013618F86002E0FDF720FFF860FA6813469B0098 -S3150801362813449A001A447B685B689B00B2FBF3F360 -S31508013638224AA2FB03235B091901FA6813469B0070 -S3150801364813449A001A447B685B689B00B2FBF3F241 -S315080136581A4BA3FB02035B09642000FB03F3D31A85 -S315080136681B013233154AA2FB03235B0903F0F00356 -S315080136781944FA6813469B0013449A001A447B684E -S315080136885B689B00B2FBF3F20C4BA3FB02035B09D5 -S31508013698642000FB03F3D31A1B013233074AA2FB42 -S315080136A803235B0903F00F027B681B680A449A60C7 -S315080136B800BF1037BD4680BD003801401F85EB5154 -S315080136C8002B2DE9F0471D46BBBF03F100431D46F4 -S315080136D800232D2388B01446B8BF1446129A109EA3 -S315080136E81370149BDDF84CA023F02008B8F1460F97 -S315080136F805D0B8F1450F00D10136022300E00323AE -S3150801370807AA049206AACDE902A2CDE900362246FD -S315080137182B4600F001FFB8F1470F074619D1119B4F -S31508013728DB070ED500EB06090022002320462946A9 -S31508013738F5F7A2F908B1CDF81C903022079B4B453D -S315080137481ED33846079B159ADB1B136008B0BDE8DC -S31508013758F087B8F1460F00EB0609E5D10378302B57 -S315080137680AD10022002320462946F5F785F918B912 -S31508013778C6F10106CAF80060DAF800309944D3E7B9 -S31508013788591C07911A70D9E7F7B50029B6BF2D2331 -S315080137982B23494209290270437029DD0DF10703D4 -S315080137A81D460A27B1FBF7F61A4607FB16143034E5 -S315080137B802F8014C0C46632C314603F1FF33F1DC60 -S315080137C83031941E03F8011C2346411CAB420AD327 -S315080137D80DF109039B1AAC4288BF0023023303443F -S315080137E8181A03B0F0BD13F8016B01F8016FEDE77C -S315080137F8302330318370C170031DF1E72DE9F04F8D -S3150801380891B00C46DDF8688016461F46054600F055 -S31508013818BDFD036818460893F4F702FD00230E93C5 -S31508013828D8F800300990073323F0070303F1080293 -S3150801383894F818A0D4F800B0C8F80020D3E900898C -S3150801384829F000430B93CDF828804FF0FF32DDE9C4 -S315080138580A01C4E912899C4BF5F740F970BBDDE901 -S315080138680A014FF0FF32984BF5F71AF930BB0022D7 -S31508013878002340464946F5F709F910B12D2384F87E -S315080138884330924A924BBAF1470F8CBF90469846F5 -S3150801389803234FF0000923612BF004032360334601 -S315080138A82146284600970FAA00F0D4F9013040F0BE -S315080138B890804FF0FF3011B0BDE8F08F42464B4675 -S315080138C840464946F5F70AF948B14B46002BB8BFB1 -S315080138D82D23804AB8BF84F843307F4BD3E7636802 -S315080138E80AF0DF015A1C3FD10623636000224BF414 -S315080138F88063236006920EAACDE904A20DAA039253 -S315080139080DF13302CDE90132636842460093284630 -S315080139184B460A91FFF7D4FE0A99804647290D991D -S3150801392828D1C81C02DB6368994240DDAAF1020A5C -S315080139385FFA8AFA5246013904F150000D91FFF7E8 -S3150801394823FF0E9A81461318012A236102DC22688D -S31508013958D20701D5013323619DF83330002B9ED058 -S315080139682D2384F843309AE74729BFD1002BBDD1C7 -S315080139780123BAE7BAF1650FDCD9BAF1660F18D18E -S31508013988002963680BDD216113B92268D00702D5BE -S3150801399801330B4423614FF00009A165DCE713B92C -S315080139A82268D20701D50233F4E70123F2E74FF07B -S315080139B8670A0E9B994205DB23682161D807EAD570 -S315080139C84B1CE7E70029CCBF0122C1F102021344C7 -S315080139D8E0E723685A0507D423694246314628464B -S315080139E8B84701302BD164E7BAF1650F40F2DC809C -S315080139F8D4E9120100220023F5F73EF8002833D04E -S31508013A08012331462846354AB84701303FF451AFB4 -S31508013A18DDE90D38434502DB2368D8070FD5DDE90B -S31508013A28082331462846B84701303FF442AF4FF0DC -S31508013A38000908F1FF3804F11A0AC84509DC2368A0 -S31508013A489B0700F10281E0680F9B9842B8BF1846A8 -S31508013A5831E70123524631462846B84701303FF433 -S31508013A6828AF09F10109E8E70D9B002B38DC01238A -S31508013A7831462846194AB84701303FF41AAFDDE9F5 -S31508013A880D3959EA030302D12368D907D7D5DDE9E0 -S31508013A98082331462846B84701303FF40AAF4FF0A4 -S31508013AA8000A04F11A0B0D9B5B42534501DC4B4690 -S31508013AB893E701235A4631462846B84701303FF469 -S31508013AC8F8AE0AF1010AEEE7FFFFEF7F746D010808 -S31508013AD8706D01087C6D0108786D0108806D010813 -S31508013AE8A36DDDF838A05345A8BF5346002B994660 -S31508013AF836DC4FF0000B29EAE97904F11A02A36DBD -S31508013B080A93A3EB09035B4531DC0D9B9A453ADC1D -S31508013B182368DA0737D40D9BAAEB03090A9BAAEB94 -S31508013B2803039945A8BF9946B9F1000F33DC4FF04D -S31508013B38000829EAE97904F11A0B0D9BAAEB030394 -S31508013B48A3EB090343457FF77AAF01235A46314662 -S31508013B582846B84701303FF4ACAE08F10108ECE74E -S31508013B68424631462846B8470130C2D1A1E6012363 -S31508013B78314628460A92B84701303FF49AAE0A9A5E -S31508013B880BF1010BBBE73146DDE908232846B8479F -S31508013B980130C0D18DE60A9A4B4631462846424439 -S31508013BA8B8470130C3D184E6DDF838A0BAF1010F68 -S31508013BB801DCDB0736D50123424631462846B84794 -S31508013BC801303FF476AEDDE9082331462846B84781 -S31508013BD801303FF46EAED4E91201002200230AF13E -S31508013BE8FF3AF4F749FFC0B9534608F101023146CD -S31508013BF82846B84701300CD15BE601235A463146B7 -S31508013C082846B84701303FF454AE08F10108D045B3 -S31508013C18F3DB4B4604F15002E0E64FF0000804F1E5 -S31508013C281A0BF4E701234246E1E701234A463146DE -S31508013C382846B84701303FF43CAE08F10108E36865 -S31508013C480F995B1A4345F0DCFDE64FF0000804F1CD -S31508013C581909F4E72DE9F047164698468A680B6963 -S31508013C6807469342B8BF1346336091F843200C467A -S31508013C78DDF820900AB1013333602368990642BFFB -S31508013C88336802333360256815F0060506D104F151 -S31508013C98190AE36832689B1AAB422BDC94F843305D -S31508013CA82268003B18BF0123920630D4414638469C -S31508013CB804F14302C847013023D02368226903F077 -S31508013CC80603042B14BF002533684FF0000608BF06 -S31508013CD8E56804F11A0408BFED1A54F8123C08BF3E -S31508013CE825EAE5759342C4BF9B1AED18B5421AD160 -S31508013CF8002008E00123524641463846C8470130A4 -S31508013D0803D14FF0FF30BDE8F0870135C1E7302010 -S31508013D18E11881F843005A1C94F8451022440233E5 -S31508013D2882F84310C2E70123224641463846C84766 -S31508013D380130E6D00136D9E72DE9FF470F7E9146CE -S31508013D48782F80460C469A460C9E01F1430207D8FD -S31508013D58622F0AD8002F00F0D180582F00F0B880BA -S31508013D6804F1420684F842703AE0A7F16303152B79 -S31508013D78F6D801A151F823F0D93D0108ED3D01080E -S31508013D88693D0108693D0108693D0108693D010860 -S31508013D98ED3D0108693D0108693D0108693D0108CC -S31508013DA8693D0108EB3E0108173E0108A53E0108D1 -S31508013DB8693D0108693D01080D3F0108693D01088A -S31508013DC8173E0108693D0108693D0108AD3E01082C -S31508013DD833681A1D1B68326004F1420684F84230BA -S31508013DE801239CE033682068191D3160060601D550 -S31508013DF81D6803E04506FBD5B3F90050002D03DA23 -S31508013E082D236D4284F843300A23584811E0216866 -S31508013E183368080653F8045B02D4490648BFADB2AD -S31508013E286F2F336014BF0A2308235048002184F8EA -S31508013E3843106668002EA66005DB21682E4321F02B -S31508013E48040121604BD01646B5FBF3F103FB115764 -S31508013E58C75D06F8017D2F46BB420D46F4D9082BE6 -S31508013E680BD12368DF0708D5236961689942DEBF44 -S31508013E78302306F8013C06F1FF36921B22614B46B0 -S31508013E8821464046CDF800A003AAFFF7E3FE013014 -S31508013E984AD14FF0FF3004B0BDE8F087236843F0F4 -S31508013EA8200323607827324884F8457023683168E7 -S31508013EB81F0651F8045B02D45F0648BFADB23160EC -S31508013EC8D90744BF43F0200323601DB11023ADE78A -S31508013ED82648E9E7236823F020032360F6E7164610 -S31508013EE8BDE733682568181D616930602E061B68A9 -S31508013EF801D5196002E06806FBD519800023164624 -S31508013F082361BCE7336800211A1D32601E6862689E -S31508013F18304600F03FFA08B1801B60606368236188 -S31508013F28002384F84330AAE73246494640462369BE -S31508013F38D0470130ADD023689B0713D4E068039BAB -S31508013F489842B8BF1846A6E701233246494640466D -S31508013F58D04701309DD00135E36803995B1AAB4216 -S31508013F68F2DCEBE7002504F11906F5E7826D01088D -S31508013F78936D0108002310B50446C0E90033C0E96A -S31508013F880433836081814366C281836119460822A5 -S31508013F985C3000F0FFF80D4B246263620C4BA36298 -S31508013FA80C4BE3620C4B23630C4B9C4206D003F182 -S31508013FB86802944202D0D0339C4205D104F15800D4 -S31508013FC8BDE8104000F0DEB910BD00BFA95F0108C1 -S31508013FD8CB5F0108036001082760010890100020DB -S31508013FE8024A0349034800F0A5B800BF8400002027 -S31508013FF84D5801089400002041680C4B10B59942A8 -S31508014008044601D001F01EFCA168094B994202D069 -S31508014018204601F017FCE168064B994204D0204670 -S31508014028BDE8104001F00EBC10BD00BF901000207D -S31508014038F81000206011002010B50B4B0B4C0C4AE8 -S3150801404820461A6004210022FFF794FF04F168004C -S3150801405801220921FFF78EFF04F1D0000222BDE8EB -S3150801406810401221FFF786BFC811002090100020C2 -S31508014078E93F0108014800F086B900BFCD110020C3 -S31508014088014800F081B900BFCD11002010B50446DA -S31508014098FFF7F0FF236A1BB1BDE81040FFF7F0BF31 -S315080140A8044B2362044B1B68002BF5D1FFF7C4FFA9 -S315080140B8F2E700BF01400108C811002030B51446CF -S315080140C8002C05461A469BB005DA8B2303604FF088 -S315080140D8FF301BB030BD4FF40273ADF80C304FF00A -S315080140E8000319930CBF234604F1FF330293059382 -S315080140F84FF6FF7300910491ADF80E3069461E9B81 -S3150801410801F03AF8431CBCBF8B232B60002CE0D086 -S315080141180022009B1A70DCE707B5009313460A4686 -S31508014128014603480068FFF7C9FF03B05DF804FBB9 -S31508014138900000202DE9F8430746884614460026CC -S31508014148D4E90195B9F1010905D52468002CF7D1F7 -S315080141583046BDE8F883AB89012B07D9B5F90E3086 -S31508014168013303D029463846C04706436835E9E787 -S315080141780FB407B5064904AB086853F8042B8168D8 -S31508014188019301F01DF903B05DF804EB04B070471B -S315080141989000002003460244934200D1704703F871 -S315080141A8011BF9E738B50B4B04461D686B6B53B908 -S315080141B8242001F01DFA0246686320B93D21064B01 -S315080141C8064800F003F92046696BBDE8384000F057 -S315080141D807B800BF90000020A46D0108BB6D01084F -S315080141E82DE9F04100230C46D0E900014C4AF4F7C1 -S315080141F8FDFF4FF46161002ABCBF02F5A83202F53A -S31508014208C072B2FBF1F301FB13224FF03C01A36024 -S31508014218B2FBF1F301FB132222604FF0070200F506 -S315080142282F20ACBF00F66C2000F66B206360C31C18 -S3150801423893FBF2F2C2EBC2029B1A3A4955D50733E8 -S31508014248A361A0F50E33A3F52C7393FBF1F1364B55 -S3150801425840F2B45C03FB010048F6AC63B0FBF3F328 -S31508014268B0FBFCF203449B1A304A40F26D17B0FBC7 -S31508014278F2F29B1AB3FBF7F26426B3FBFCF3B2FB23 -S31508014288F6F5EB1A0344992007FB123303EB830768 -S315080142980237B7FBF0FC4FF0050800FB0CF00230BB -S315080142A8B0FBF8F003F1010EAEEB000040F2F95E3F -S315080142B877458CBF6FF00907022767444FF4C87C16 -S315080142C80CFB0121012F98BF0131B3F5997F12D350 -S315080142D8A3F59973E3610023A1F26C71E060C4E95F -S315080142E8047120462362BDE8F0810028A361A8DB92 -S315080142F890FBF1F1ABE712F0030F02D106FB152586 -S315080143085DB94FF4C875B2FBF5F605FB1622B2FA84 -S3150801431882F252093B331344DCE70122FAE700BF6C -S3150801432880510100B13A02004FC5FDFFB03A0200BB -S31508014338014B1868704700BF9000002070B5002629 -S315080143480C4D0D4C641BA410A64209D102F004F9C0 -S3150801435800260A4D0A4C641BA410A64205D170BD55 -S3150801436855F8043B98470136EEE755F8043B984754 -S315080143780136F2E7447101084471010844710108DC -S315080143884871010870477047704700000048704730 -S31508014398D0010020034610B5C9B202449342184613 -S315080143A801D1002003E0047801338C42F6D110BD0F -S315080143B80A44914200F1FF3300D1704710B511F84C -S315080143C8014B914203F8014FF9D110BD1FB51446A7 -S315080143D81A46094B05461B68D8684CB1074BCDE9FF -S315080143E8013400912B46064901F01EFE01F0E4FF4F -S315080143F8044B1C46F3E700BF90000020136E010822 -S31508014408206E01084E6E01082DE9F74F03690C69FC -S315080144180746A3427EDB013CA30000F1140501F11E -S315080144281408009305EB8403019358F8243055F8CA -S31508014438242001339A42B2FBF3F608EB84092ED3FA -S315080144484FF0000AC446AE46D3465CF8043B98B218 -S3150801445806FB00A01B0C020C06FB0323DEF8002052 -S3150801446880B292B2121A5A44DEF800004FEA134A89 -S315080144789BB2C3EB224303EB104392B242EA0342CF -S31508014488E1454FEA234B4EF8042BDED2009BEB5845 -S315080144982BB9019B043B9D421A462FD33C613846EA -S315080144A801F076FC002825DB2946002058F8042B5C -S315080144B8D1F800C01FFA82FE1FFA8CF3A3EB0E038C -S315080144C80344120CC2EB234202EB1C429BB243EA99 -S315080144D80243C1454FEA224041F8043BE6D255F862 -S315080144E8242005EB840322B9043B9D421A460BD3C3 -S315080144F83C610136304603B0BDE8F08F1268043BCB -S31508014508002ACBD1013CC6E71268043B002AEFD141 -S31508014518013CEAE70020EEE72DE9F04F14461D466F -S31508014528C76997B08146CDE90645239E7FB910200C -S3150801453801F05EF80246C9F81C0020B9EF21AC4B18 -S31508014548AC48FFF743FFC0E901770760C760D9F8A8 -S315080145581C30196859B15A68012393404A608B601F -S31508014568484601F0E3F90022D9F81C301A602B1ED7 -S31508014578AFBF0023012223F000430793A8BF336086 -S31508014588DDF81C809C4BB8BF326033EA080312D1A8 -S3150801459842F20F73229A1360C8F31303234300F0F8 -S315080145A85E85249BDFF854A2002B00F060850AF18A -S315080145B8030300F05ABDDDE90623CDE90C23DDE93D -S315080145C80C0100220023F4F757FA074658B10123CC -S315080145D8229A1360249B13B1894B249A1360DFF836 -S315080145E824A200F044BD14AB019315AB00934846C9 -S315080145F8DDE90C2301F07CFCC8F30A560390002E6A -S3150801460878D0DDE90C010D9BA6F2FF36C3F3130337 -S3150801461843F07F5343F440131297194600227A4B05 -S31508014628F3F70AFE6CA3D3E90023F3F7BDFF6CA3DE -S31508014638D3E90023F3F702FE044630460D46F3F79D -S3150801464849FF69A3D3E90023F3F7AEFF02460B46F0 -S3150801465820462946F3F7F2FD04460D46F4F754FABF -S3150801466800220746002320462946F4F70FFA40B1E7 -S315080146783846F3F72FFF22462B46F4F7FDF900B91A -S31508014688013F162F54D8DDE90C01604B03EBC7032C -S31508014698D3E90023F4F7FAF900284BD00023013FA0 -S315080146A80F93149B9B1B5A1E49BFC3F10103002391 -S315080146B804930023099254BF04930993002F3BDB03 -S315080146C8099B0E973B44099300230A93209B092BC0 -S315080146D865D8052BC4BF043B2093209BC8BF00247B -S315080146E8A3F10203D8BF0124032B64D8DFE803F03A -S315080146F85355382CDDE914631E4406F23243202B40 -S31508014708C1BFC3F1400308FA03F806F2124324FAB3 -S3150801471803F3D6BFC3F1200348EA030004FA03F0FA -S31508014728F3F7C8FE0122A1F1F873013E129274E764 -S315080147380123B5E70F90B4E7049BDB1B04937B427F -S315080147480A9300230E93C1E701230B93219B07EBD9 -S31508014758030B0BF10103012B0893B8BF012306E0EC -S3150801476801230B93219B002B28DD9B4608930021E7 -S315080147780422D9F81C0002F114059D4226D9416084 -S31508014788484601F093F88246002843D1024640F28A -S31508014798AF111F4BD4E60023E3E70023D5E701242D -S315080147A800230B9420934FF0FF3B00221223CDF8E8 -S315080147B820B02192DBE701230B93F4E74FF0010BB5 -S315080147C85B46CDF820B0CDF884B0D0E70131520068 -S315080147D8D1E700BFAFF3008061436F63A787D23F74 -S315080147E8B3C8608B288AC63FFB799F501344D33FC9 -S315080147F8A46D01085C6E01080000F07F586E010877 -S31508014808816D0108806D01080000F83F706F010885 -S31508014818B46E0108D9F81C301860089B0E2B00F2F3 -S31508014828A180002C00F09E80002F33DD9C4B07F0F9 -S315080148380F0203EBC203F805D3E90034CDE91034B6 -S315080148484FEA271416D5DDE90C01964B0326D3E959 -S315080148580823F3F7D3FFCDE9060104F00F04914DB8 -S3150801486854B9DDE91023DDE90601F3F7C7FFCDE9F8 -S31508014878060128E00226F2E7E10708D5DDE9100175 -S31508014888D5E90023F3F790FECDE910010136641046 -S315080148980835E5E700F0AF80DDE90C017C42804B7D -S315080148A804F00F0203EBC203D3E90023F3F77CFEF6 -S315080148B802260023CDE906017A4D2411002C40F081 -S315080148C88F80002BD3D1DDE906450F9B002B00F01D -S315080148D89480002220462946734BF4F7D7F8002816 -S315080148E800F08B80089B002B00F08780BBF1000F36 -S315080148F834DD2046002229466C4BF3F755FE5C4603 -S31508014908CDE9060107F1FF3801363046F3F7E2FD2E -S31508014918DDE90623F3F748FE0022654BF3F78EFC1B -S315080149280546A1F15076002C6AD1DDE90601002277 -S31508014938604BF3F781FC02460B46CDE906232A4666 -S315080149483346F4F7C1F8002840F09882DDE90601F4 -S315080149582A4606F10043F4F799F838BBDDE90C3421 -S31508014968CDE90634159B002BC0F257810E2F00F3AB -S3150801497854814B4B03EBC703D3E90034CDE904341F -S31508014988219B002B80F2E580089B002B00F3E18030 -S315080149980CD1DDE904010022464BF3F705FEDDE9F2 -S315080149A80623F4F787F8002800F0668200242546CE -S315080149B8219B56466FEA030800272146484600F018 -S315080149C8B5FF002D00F0BD802FB1AF4203D039469F -S315080149D8484600F0ABFF2946484600F0A7FFB0E075 -S315080149E8E20705D5D5E90023F3F7DEFD01230136EC -S315080149F86410083562E7022665E7B846089C84E725 -S31508014A08274B0B9903EBC40353E9022354440029A2 -S31508014A1854D000202849F3F7F1FE33462A46F3F71E -S31508014A280BFC5646CDE91001DDE90601F4F76CF8E9 -S31508014A380546F3F74FFD02460B46DDE90601F3F78E -S31508014A48FBFB02460B463035CDE90623DDE9102383 -S31508014A5806F8015BF4F71AF8002872D1DDE906238E -S31508014A6800201149F3F7E8FBDDE91023F4F70EF8FE -S31508014A78002840F0B480A6423FF470AFDDE9100182 -S31508014A8800220A4BF3F790FD0022CDE91001DDE972 -S31508014A980601064BF3F788FDCDE90601C4E700BF11 -S31508014AA8706F0108486F01080000F03F00002440B4 -S31508014AB800001C40000014400000E03F314628462B -S31508014AC8F3F772FD5646CDE910011394DDE906019F -S31508014AD8F4F71AF80546F3F7FDFC02460B46DDE935 -S31508014AE80601F3F7A9FB02460B46303506F8015BC2 -S31508014AF8A642CDE906234FF0000224D1DDE91001CB -S31508014B08AE4BF3F79BFB02460B46DDE90601F3F7C5 -S31508014B18DBFF002863D1DDE910230020A749F3F755 -S31508014B288BFB02460B46DDE90601F3F7AFFF0028C2 -S31508014B383FF414AF139E731E139316F8013C302BDA -S31508014B48F8D047463BE09E4BF3F72EFDCDE9060123 -S31508014B58BCE75646DDE90645DDE90423204629462C -S31508014B68F3F74CFEF3F7D0FF8046F3F7B3FCDDE91C -S31508014B780423F3F719FD02460B4620462946F3F79F -S31508014B885BFB08F13004089D06F8014BA6EB0A04FD -S31508014B98A54202460B4633D1F3F750FBDDE9042358 -S31508014BA804460D46F3F790FFC0B9DDE9042320460C -S31508014BB82946F3F761FF10B118F0010F0ED14846DF -S31508014BC8039900F0B3FE00233370229B01371F6057 -S31508014BD8249B002B00F04B821E6048E2B8463346F8 -S31508014BE81E4613F8012D392A06D19A45F8D13022DD -S31508014BF808F101088AF800201A7801321A70A0E724 -S31508014C0800226F4BF3F7D0FC0022002304460D4619 -S31508014C18F3F732FF00289FD0D1E70B9A002A00F054 -S31508014C28EA80209A012A00F3CD80129A002A00F018 -S31508014C38C18003F233430A9C049E049A01211A444B -S31508014C480492099A48461A44099200F023FF054630 -S31508014C5866B1099B002B09DDB342A8BF3346049AFE -S31508014C68F61AD21A0492099AD31A09930A9B0BB30C -S31508014C780B9B002B00F0C680002C00F0C08029464B -S31508014C882246484600F0BEFF039A014605464846AD -S31508014C9800F016FF03998046484600F047FE0A9B2E -S31508014CA81B1B0A9300F0B18041460A9A484600F050 -S31508014CB8A9FF03900121484600F0ECFE0E9B044625 -S31508014CC8002B00F0D8811A460146484600F09AFF9B -S31508014CD8209B0446012B00F39F80069B002B40F07E -S31508014CE89780079BC3F31303002B40F09380079B18 -S31508014CF823F000431B0D1B0533B1049B01330493B1 -S31508014D08099B0133099301230A930E9B002B00F093 -S31508014D18B881236904EB8303186900F06FFEC0F1B3 -S31508014D282000099B184410F01F0000F08280C0F18A -S31508014D382003042B73DD049BC0F11C000344049370 -S31508014D48099B064403440993049B002B05DD1A466F -S31508014D584846039900F0B0FF0390099B002B05DD2F -S31508014D6821461A46484600F0A7FF04460F9B002B22 -S31508014D7861D02146039801F00BF800285BDA002375 -S31508014D880A224846039900F0F3FD0B9B07F1FF3801 -S31508014D980390002B00F07781294600230A2248460A -S31508014DA800F0E6FDBBF1000F05466FDC209B022BE0 -S31508014DB849DC6BE0149BC3F136033CE70000E03F8E -S31508014DC800002440089B5C1E0A9BA34209DB1C1BA6 -S31508014DD8089B002BBFF630AF049B089A9E1A00233E -S31508014DE82BE70A9B0E9AE31A1A440A94049E00248E -S31508014DF8089B0E9221E70A9C049E0B9D28E7DDF87D -S31508014E080C8051E70A9A039950E7CDF80C8051E7C7 -S31508014E18002379E7069B77E700230A9379E793D076 -S31508014E28049A1C331A440492099A1E441A4409928C -S31508014E388AE70346F4E7089BB846002B20DC9B461D -S31508014E48209B022B1EDDBBF1000F7FF4B1AD214675 -S31508014E585B460522484600F08BFD01460446039841 -S31508014E6800F096FF00287FF7A3AD5646312308F1CF -S31508014E78010806F8013B9FE5B846089C2546F4E76C -S31508014E88DDF820B00B9B002B00F00181002E05DD13 -S31508014E9829463246484600F00FFF05460A9B002B6D -S31508014EA85CD04846696800F001FD064628B90246FD -S31508014EB840F2EF21804BFFF743BB2A6905F10C0144 -S31508014EC8023292000C30FFF773FA0122314648463E -S31508014ED800F0F2FE2F4605460AF1010304930AEB90 -S31508014EE80B030A93069B03F001030993049B2146C6 -S31508014EF8039803F1FF3BFFF787FA03463946303330 -S31508014F08069003980B9300F043FF2A46089021461A -S31508014F18484600F059FFC26806460B9B02BB014684 -S31508014F28039800F035FF02460B9B31464846CDE902 -S31508014F380B3200F0FBFC209B0C9A049E42EA030103 -S31508014F48099B19430B9B0DD1392B27D0089A002A9F -S31508014F5801DD069B31338BF800302EE52846B9E783 -S31508014F680122E2E70899002904DB209801430998F8 -S31508014F78014320D1002AEEDD01220399484604930C -S31508014F8800F09AFE2146039000F002FF0028049BD0 -S31508014F9802DCE0D1DA07DED5392BDAD139238BF8E9 -S31508014FA8003033461E4616F8012C013B392A4ED0E5 -S31508014FB801321A7001E5002A03DD392BEED00133D7 -S31508014FC8C9E7049A0A9902F8013C8A4228D00023BB -S31508014FD80A220399484600F0CBFCAF4203904FF0EA -S31508014FE800034FF00A023946484607D100F0C0FCCB -S31508014FF807460546049B0133049377E700F0B8FC96 -S315080150082946074600230A22484600F0B1FC054608 -S31508015018F0E7BBF1000FCCBF5E46012600275644D0 -S31508015028012203994846049300F046FE2146039057 -S3150801503800F0AEFE0028B4DC02D1049BDB07B0D42D -S3150801504833461E4613F8012D302AFAD0B5E49A4597 -S31508015058A8D1312308F101088AF80030ADE4249B68 -S31508015068DFF858A01BB10AF10803249A13605046C1 -S3150801507817B0BDE8F08F209B012B7FF72EAE0E9B4C -S315080150880A9301204DE6BBF1000F7FF7D9AE5646C4 -S3150801509821460398FFF7B8F900F1300306F8013BF2 -S315080150A8A6EB0A029345B4DD00230A22484603996A -S315080150B800F05EFC0390EBE7B46E01084F6E010839 -S315080150C82DE9F0471F468E688246BE420C46904631 -S315080150D80B682DD8B1F90C2012F4906F26D06569A2 -S315080150E8096905EB4505A3EB010905EBD5757B1C94 -S315080150F84B446D109D4238BF1D46530527D5294691 -S3150801510800F0A0FA064660B34A462169FFF750F946 -S31508015118A38923F4906343F08003A38126614E444F -S3150801512826603E466561A5EB0905A560BE4200D91C -S315080151383E4632464146206801F0ABF80020A3688E -S315080151489B1BA360236833442360BDE8F0872A467E -S3150801515800F07CFF06460028E0D15046216901F097 -S3150801516847F90C23CAF80030A3894FF0FF3043F0FA -S315080151784003A381E9E700002DE9F04F98468B899A -S3150801518807461B060D4614469DB010D50B6973B91B -S31508015198402100F057FA2860286130B90C233B6092 -S315080151A84FF0FF301DB0BDE8F08F40236B61002337 -S315080151B8099320238DF8293030234FF00109CDF8BA -S315080151C80C80DFF898818DF82A3023469A4613F819 -S315080151D8012B0AB1252AF9D1BAEB040B0BD05B4688 -S315080151E8224629463846FFF76BFF013000F0A780AB -S315080151F8099A5A4409929AF80030002B00F09F80C0 -S3150801520800234FF0FF32CDE905230AF1010A049379 -S3150801521807938DF853301A935446052214F8011B3F -S315080152284E48FFF7B7F8049AD8B9D00644BF2023E1 -S315080152388DF85330110744BF2B238DF853309AF84C -S3150801524800302A2B15D0544600204FF00A0C079A2D -S31508015258214611F8013B303B092B4BD9B0B10792CE -S3150801526814E0A0EB080309FA03F31343A2460493CF -S31508015278D2E7039B191D1B680391002BBBBF5B4231 -S3150801528842F0020207930793B8BF049223782E2B9C -S315080152980AD163782A2B32D1039B02341A1D1B685B -S315080152A8039243EAE3730593DFF8B4A00322504651 -S315080152B82178FFF76FF838B14022049BA0EB0A0062 -S315080152C8824013430134049314F8011B0622254826 -S315080152D88DF82810FFF75EF8002836D0224B1BBB3D -S315080152E8039B073323F0070308330393099B3344C6 -S315080152F809936AE70C4601200CFB0232A8E700234A -S315080153084FF00A0C194601340593204610F8012B6B -S31508015318303A092A03D9002BC6D00591C4E70446B1 -S3150801532801230CFB0121F0E703AB00932A46384613 -S315080153380E4B04A9FEF762FA421C0646D6D1AB897A -S315080153485B063FF52DAF09982CE703AB00932A4670 -S315080153583846064B04A9FEF7EFFCEDE7C56E0108CA -S31508015368CB6E0108CF6E010805380108C950010836 -S31508015378936810B4013B002B936007DA9469A3423A -S3150801538801DB0A2902D110BC00F08EBE1368581C2D -S3150801539810601970084610BC7047F8B506460F46DE -S315080153A81446D518AC4201D1002007E03A463046E2 -S315080153B814F8011BFFF7DCFF431CF3D1F8BD000005 -S315080153C82DE9F04F0D461446984606469DB018B184 -S315080153D8036A0BB9FEF75AFE6B6ED90705D4AB8972 -S315080153E89A0502D4A86DFEF7CEFFAB891B0701D52E -S315080153F82B699BB92946304600F094FE70B16B6E4D -S31508015408DC0704D54FF0FF301DB0BDE8F08FAB8936 -S315080154189805F7D4A86DFEF7B7FFF3E700230993B4 -S3150801542820238DF8293030234FF00109CDF80C8057 -S31508015438DFF8A8818DF82A3023469A4613F8012BF6 -S315080154480AB1252AF9D1BAEB040B0BD05B462246D9 -S3150801545829463046FFF7A1FF013000F0A780099ACF -S315080154685A4409929AF80030002B00F09F800023CD -S315080154784FF0FF32CDE905230AF1010A0493079390 -S315080154888DF853301A935446052214F8011B5348CC -S31508015498FEF780FF049AD8B9D10644BF20238DF8B0 -S315080154A85330130744BF2B238DF853309AF800302D -S315080154B82A2B15D0544600204FF00A0C079A214684 -S315080154C811F8013B303B092B4BD9B0B1079214E0CF -S315080154D8A0EB080309FA03F31343A2460493D2E798 -S315080154E8039B191D1B680391002BBBBF5B4242F046 -S315080154F8020207930793B8BF049223782E2B0AD181 -S3150801550863782A2B32D1039B02341A1D1B6803922E -S3150801551843EAE3730593DFF8C8A0032250462178C6 -S31508015528FEF738FF38B14022049BA0EB0A008240F7 -S3150801553813430134049314F8011B062229488DF8EC -S315080155482810FEF727FF00283FD0274B1BBB039BD4 -S31508015558073323F0070308330393099B3B4409934D -S315080155686AE70C4601200CFB0232A8E700234FF034 -S315080155780A0C194601340593204610F8012B303ACE -S31508015588092A03D9002BC6D00591C4E70446012385 -S315080155980CFB0121F0E703AB00932A463046134B6F -S315080155A804A9FEF72BF90746781CD6D16B6ED907DD -S315080155B805D4AB899A0502D4A86DFEF7E5FEAB8931 -S315080155C85B063FF51FAF09981EE703AB00932A460A -S315080155D83046064B04A9FEF7AFFBE4E7C56E01089A -S315080155E8CB6E0108CF6E010805380108A3530108D7 -S315080155F8024B0146186800F025B800BF9000002044 -S3150801560870B50F4E0C463168054611B900F090FE83 -S3150801561830602146284600F08BFE431C03D14FF023 -S31508015628FF34204670BDC41C24F00304A042F8D0F8 -S31508015638211A284600F07CFE0130F2D1EFE700BFB7 -S31508015648D01100202DE9F843CD1C25F003050835AE -S315080156580C2D38BF0C25002D064601DBA94204D9B5 -S315080156680C2333600020BDE8F883DFF8D48000F006 -S3150801567811F9D8F800301C4644BB29463046FFF7CD -S31508015688BFFF431C044658D1D8F800402746002FC7 -S3150801569843D1002C4BD023683946304604EB03091D -S315080156A800F046FE814542D1216830466D1A2946E1 -S315080156B8FFF7A6FF01303AD023682B442360D8F8B0 -S315080156C800305A6862BBC8F800700FE02268521B9E -S315080156D820D40B2A17D96119A342256018BF596026 -S315080156E8636808BFC8F8001062514B60304600F07D -S315080156F8D7F804F10B00231D20F00700C21A1CBFB6 -S315080157081B1AA350AFE76268A3420CBFC8F800206A -S315080157185A60EBE723466468AEE73C467F68B6E716 -S315080157281A465B68A342FBD100235360DEE70C23C4 -S315080157383046336000F0B4F894E70560D6E700BF51 -S31508015748D4110020B1F90C20F8B5160705460C4600 -S3150801575854D44B68002B02DC0B6C002B48DDE66A37 -S31508015768002E45D0002312F480522F68216A2B6037 -S3150801577830D0626DA389590705D56368D21A636B58 -S315080157880BB1236CD21A00232846E66A216AB04768 -S31508015798431CA38906D129681D292BD8284ACA403A -S315080157A8D60727D5002262602269D904226004D562 -S315080157B8421C01D12B6803B96065616B2F60B9B1C9 -S315080157C804F14403994202D0284600F011FE002349 -S315080157D863630DE001232846B0470246501CC9D128 -S315080157E82B68002BC6D01D2B01D0162B1DD12F6077 -S315080157F8002021E043F040031BB21AE00F69002F8D -S31508015808F6D0930718BF00230E6808BF4B69F61B25 -S315080158180F608B60002EEBDD33463A462846216A2F -S31508015828D4F828C0E047002807DCB4F90C3043F05F -S3150801583840034FF0FF30A381F8BD0744361AE9E75C -S315080158480100402038B50B6905460C4613B90025F1 -S31508015858284638BD18B1036A0BB9FEF717FCB4F91F -S315080158680C30002BF3D0626ED00704D4990502D404 -S31508015878A06DFEF788FD28462146FFF763FF636E8C -S315080158880546DA07E4D4A3899B05E1D4A06DFEF79A -S315080158987BFDDDE70148FEF776BD00BFCC11002088 -S315080158A80148FEF771BD00BFCC11002070B5C66965 -S315080158B804460D4676B91020FFF79AFE0246E061BE -S315080158C820B96B21174B1848FEF780FDC0E9016618 -S315080158D80660C660E669F36883B1E369DB6853F86D -S315080158E82500B8B9012101FA05F6721D204692006C -S315080158F800F069FD60B1C0E901560EE021220421D4 -S31508015908204600F060FDE369F060DB68002BE4D10E -S31508015918002070BD026843F825200023C0E9033337 -S31508015928F7E700BFA46D0108D66E010870B5C66908 -S3150801593805460C4676B91020FFF75AFE0246E86175 -S3150801594820B98F21084B0948FEF740FDC0E90166D1 -S315080159580660C6603CB1EB696268DB6853F82210D9 -S31508015968216043F8224070BDA46D0108D66E01086E -S315080159782DE9F04107460C461E4600200D6901F13E -S31508015988140CDCF80030013099B202FB01611E0CD7 -S315080159980B0C02FB063389B201EB034185424FEA38 -S315080159A813464CF8041BECDC0EB3A368AB4219DCAE -S315080159B8616838460131FFF779FF804628B90246FA -S315080159C8BA210C4B0C48FEF701FD226904F10C01BA -S315080159D8023292000C30FEF7EBFC21463846FFF7F7 -S315080159E8A5FF444604EB850301355E61256120461A -S315080159F8BDE8F081B46E0108D66E01080346B0F514 -S31508015A08803F3ABF030410200020B3F1807F3CBFD2 -S31508015A181B020830B3F1805F3CBF1B010430B3F1A8 -S31508015A28804F3CBF9B000230002B05DB13F0804FEB -S31508015A3800F1010008BF202070470368024613F0E9 -S31508015A4807000BD0D90721D4980749BF5B089B08DB -S31508015A58012013605CBF02201360704799B209B927 -S31508015A6810201B0CD9B209B908301B0A190704BF3B -S31508015A781B090430990704BF9B080230D90703D4C8 -S31508015A885B0800F1010003D01360704700207047D6 -S31508015A982020704710B50C460121FFF707FF02467B -S31508015AA828B940F24511044B0448FEF78FFC012337 -S31508015AB84461036110BD00BFB46E0108D66E0108C2 -S31508015AC82DE9F04F17460A693B6989469A42A2BFEA -S31508015AD83B460F4699463D69D9F810A0BB687968CF -S31508015AE805EB0A06B34285B0B8BF0131FFF7DEFEFA -S31508015AF830B902464FF4B171404B4148FEF766FC8E -S31508015B0800F114042346002204EB860E734520D3BC -S31508015B1807F1140809F1140108EB850501EB8A0355 -S31508015B280293EB1B153B23F0030304331537BD42D8 -S31508015B3838BF04230193029B03918B420CD8002E8C -S31508015B4803DD5EF8043D002B55D0066105B0BDE8B6 -S31508015B58F08F43F8042BD9E7B1F800A0BAF1000F82 -S31508015B681FD0C446A14600275CF8042BD9F8003093 -S31508015B781FFA82FB9BB20AFB0B333B44D9F8007028 -S31508015B88120C3F0C0AFB027202EB13429BB243EA60 -S31508015B98024365454FEA124749F8043BE4D8019B95 -S31508015BA8E750039B0431B3F80290B9F1000F20D0EE -S31508015BB84746A4464FF0000A2368B7F800B0BCF870 -S31508015BC802209BB209FB0B22524443EA02434CF8D2 -S31508015BD8043B57F8043B4FEA134ABCF80030BD4268 -S31508015BE809FB0A3303EB12434FEA134AE5D8019A2C -S31508015BF8A35004349FE7013EA1E700BFB46E01082C -S31508015C08D66E01082DE9F843154612F00302074630 -S31508015C180E4607D0254C013A002354F82220FFF7EF -S31508015C28A7FE0646AD103DD0FC697CB91020FFF7E2 -S31508015C38DFFC0246F86128B940F2B3111C4B1D482E -S31508015C48FEF7C4FBC0E901440460C460D7F81C80A8 -S31508015C58D8F808404CB940F271213846FFF71AFFBF -S31508015C6800230446C8F8080003604FF00009EB074B -S31508015C780AD5314622463846FFF722FF804631467D -S31508015C883846FFF753FE46466D100BD0206838B9DB -S31508015C98224621463846FFF713FF2060C0F80090D0 -S31508015CA80446E4E73046BDE8F88300BF3C6F0108BF -S31508015CB8A46D0108D66E01082DE9F0470C4607467A -S31508015CC891462369496803EB6218A3684FEA621A81 -S31508015CD808F10106B3420BDB3846FFF7E7FD05462F -S31508015CE848B902464FF4EF71274B2848FEF76EFB71 -S31508015CF801315B00EEE7002300F1140100F11002FF -S31508015D081846534533DB20692AEAEA7A04F114036B -S31508015D1819F01F0901EB8A0103EB800C2BD08A467F -S31508015D280022C9F1200E186800FA09F010434AF84A -S31508015D38040B53F8042B9C4522FA0EF2F3D8ACEB64 -S31508015D480403153B23F00303043304F115006045E6 -S31508015D5888BF0423CA500AB108F10206013E38462B -S31508015D6821462E61FFF7E2FD2846BDE8F08742F88D -S31508015D78040F0133C5E7043953F8042B9C4541F848 -S31508015D88042FF9D8EAE700BFB46E0108D66E0108F0 -S31508015D9803460A69006930B5801A0ED114331431DD -S31508015DA803EB820401EB820154F8045D51F8042DD2 -S31508015DB8954203D005D24FF0FF3030BDA342F3D345 -S31508015DC8FBE70120F9E700002DE9F74F8946064662 -S31508015DD8114648461446FFF7DBFF051E12D1294628 -S31508015DE83046FFF763FD024628B940F237213E4B94 -S31508015DF83E48FEF7EBFA0123C0E90435104603B01D -S31508015E08BDE8F08FBCBF4B46A1463046D9F8041009 -S31508015E18BABF1C4601250025FFF748FD024618B9F1 -S31508015E2840F24521304BE3E700F1140BD9F810701D -S31508015E3809F11003C5604FF0000C09F11405D9469C -S31508015E48266904F1140E05EB87080EEB86060193FD -S31508015E58019B5EF8040B53F804AF81B201931FFA4C -S31508015E688AF35B1A000C6344C0EB1A4000EB234023 -S31508015E789BB243EA004376454FEA204C49F8043B6E -S31508015E88E6D8331B153B23F0030315340433A6421E -S31508015E9838BF04231D445B441E462C4644450ED38D -S31508015EA808F10301491B21F00301033DA84538BF41 -S31508015EB800210B4453F8041D99B117619EE7E6467C -S31508015EC854F8041B1FFA81FCF444080C714400EBCE -S31508015ED82C4089B241EA00414FEA204C46F8041B96 -S31508015EE8DCE7013FE6E700BFB46E0108D66E010894 -S31508015EF82DE97343012190469946089EFFF7D6FC7A -S31508015F08044630B9024640F20F31234B2348FEF7BF -S31508015F185DFAC9F30A55C9F313030DB143F480139E -S31508015F280193B8F1000324D068460093FFF785FD6D -S31508015F38DDE90012D8B1C0F1200302FA03F30B43D5 -S31508015F48C24063610192019B002B0CBF0122022208 -S31508015F58A3612261ADB1A5F2334505443560C0F1A7 -S31508015F683500099B1860204602B0BDE87083616157 -S31508015F78E9E701A8FFF761FD019B0122636120306A -S31508015F88E7E7A0F2324004EB820330601869FFF7AD -S31508015F9835FDC0EB4210E4E7B46E0108D66E010878 -S31508015FA810B50C46B1F90E1000F0B0F90028ABBFD0 -S31508015FB8636DA3891B1823F48053ACBF6365A3815A -S31508015FC810BD2DE9F0411F468B890546DB050C46B0 -S31508015FD8164605D502230022B1F90E1000F084F9F8 -S31508015FE8A389324623F48053A38128463B46B4F94C -S31508015FF80E10BDE8F04100F0ABB910B50C46B1F981 -S315080160080E1000F071F9431CA38915BF606523F4C6 -S31508016018805343F48053A38118BFA38110BDB1F9F6 -S315080160280E1000F0A7B900000EB403B5014603AB7C -S31508016038054853F8042B00680193FFF7C1F902B024 -S315080160485DF804EB03B07047900000202DE9F04194 -S31508016058074614460D4621B91146BDE8F041FFF732 -S31508016068F1BA2AB900F0C4F925462846BDE8F081EF -S3150801607800F018FA8442064602D8B4EB500FF4D851 -S3150801608821463846FFF7DEFA804608B94546ECE761 -S31508016098B4422246294628BF3246FEF789F92946D7 -S315080160A8384600F0A5F9F1E7F8B50E46144605464F -S315080160B818B1036A0BB9FDF7E9FFA369A360A389B8 -S315080160C81A0701D5236943B92146284600F02AF853 -S315080160D818B14FF0FF373846F8BD23682269F6B27A -S315080160E8981A63693746834205DC21462846FFF72D -S315080160F8A9FB0028EDD1A368013BA36023685A1CB4 -S3150801610822601E706269431C9A4204D0A389DB0780 -S31508016118E1D50A2EDFD121462846FFF793FB002849 -S31508016128D9D0D6E738B5294B054618680C4618B1AB -S31508016138036A0BB9FDF7AAFFB4F90C30190722D47B -S31508016148DA0607D409222A6043F040034FF0FF30E4 -S31508016158A38133E0580712D5616B41B104F14403B1 -S31508016168994202D0284600F043F900236363A389BC -S3150801617823F02403A3810023636023692360A38989 -S3150801618843F00803A38123694BB9A38903F4207350 -S31508016198B3F5007F03D02146284600F03EF8B4F946 -S315080161A80C3013F001020AD00022A2606269524239 -S315080161B8A261226942B913F08000C5D138BD990791 -S315080161C858BF6269A260F4E70020F7E7900000204B -S315080161D870B50C46B1F90E10154600291E4696B03B -S315080161E80CDAA389002113F0800F14BF40234FF45A -S315080161F88063002031602B6016B070BD6A4600F0D6 -S31508016208C9F80028EDDB019901F47041A1F500539D -S31508016218594259414FF48063EBE78B89F7B59D07D6 -S3150801622806460C4607D504F1470323602361012373 -S31508016238636103B0F0BD6A4601ABFFF7C9FF009F6A -S31508016248054639463046FFF7FDF948B9B4F90C3021 -S315080162589A05EED423F0030343F00203A381E2E788 -S31508016268A389C4E9040743F08003A381019B20603D -S315080162785BB13046B4F90E1000F026F828B1A389A7 -S3150801628823F0030343F00103A381A3891D43A581D1 -S31508016298CFE7884210B501EB020402D984422346A6 -S315080162A807D8431EA14208D011F8012B03F8012F7C -S315080162B8F8E7014602448A4200D110BD13F8014D98 -S315080162C802F8014DF7E7000038B50023054D0446E5 -S315080162D808462B60F7F749FF431C02D12B6803B11F -S315080162E8236038BDD811002038B50446084611463A -S315080162F80022054D2A601A46F7F741FF431C02D1C9 -S315080163082B6803B1236038BDD811002038B5044677 -S31508016318084611460022054D2A601A46F7F7EEFE89 -S31508016328431C02D12B6803B1236038BDD81100205C -S3150801633838B50023054D044608462B60F7F72CFFA8 -S31508016348431C02D12B6803B1236038BDD81100203C -S3150801635838B50446084611460022054D2A601A46EC -S31508016368F5F716F8431C02D12B6803B1236038BD2B -S31508016378D811002038B50023054D044608462B6078 -S31508016388F7F7D9FE431C02D12B6803B1236038BD40 -S31508016398D811002038B50023064D0446084611468B -S315080163A82B60F7F7D3FE431C02D12B6803B1236090 -S315080163B838BD00BFD8110020062008B500F0B0F88E -S315080163C80120F7F790FE70B5A1FB025434B92946A6 -S315080163D8FFF738F9064628B9304670BD0C2200265B -S315080163E80260F9E72A462146FDF7D4FEF4E70000DC -S315080163F838B50546002940D051F8043C0C1F002B36 -S31508016408B8BFE418FFF746FA1C4A136833B963603C -S3150801641814602846BDE83840FFF742BAA34208D9AE -S31508016428206821188B4201BF19685B680918216021 -S31508016438EDE71A465B680BB1A342FAD911685018F9 -S31508016448A0420BD120680144501883421160E0D15B -S3150801645818685B68084410605360DAE702D90C23A8 -S315080164682B60D6E7206821188B4201BF19685B683B -S315080164780918216063605460CBE738BDD411002040 -S3150801648882B001B901A942B14BB113780B601278F0 -S31508016498101E18BF012002B070471046FBE76FF0BF -S315080164A80100F8E751F8043C181F002BBCBF0B582C -S315080164B8C01870470346084641B1FF2A04D98A22FB -S315080164C84FF0FF301A60704701200A7070471F297C -S315080164D838B505460C4604D9162303604FF0FF3034 -S315080164E838BDC26B12B152F821304BB9284600F0B3 -S315080164F831F8224601462846BDE8384000F018B862 -S31508016508012B0AD0591C03D1162303600120E7E79A -S315080165180021204642F8241098470020E0E70000A9 -S31508016528024B01461868FFF7D2BF00BF900000204A -S3150801653838B50023064D0446084611462B60F7F779 -S31508016548C2FD431C02D12B6803B1236038BD00BFC5 -S31508016558D8110020F7F7B0BDF8B500BFF8BC08BCDC -S315080165689E467047F8B500BFF8BC08BC9E467047FA -S31508016578434F4E4E2564204572726F723A20256440 -S315080165880A000000434F4E4E25642043686172672E -S31508016598696E672046696E69736865643A0A000018 -S315080165A84368617267696E6720456E657267793AED -S315080165B82025640A0000000042484D2054696D658B -S315080165C86F75740A0000000050535520726561649E -S315080165D8792074696D656F75742C2073746F707082 -S315080165E8696E672E2E2E0A00505355206F6E207439 -S315080165F8696D656F75742C2073746F7070696E6731 -S315080166082E2E2E0A0000000049736F6C6174696F9B -S315080166186E207761726E696E670A00004375727239 -S31508016628656E74206C65616B6167652C20696E738C -S31508016638756C6174696F6E206572726F722C20733E -S31508016648746F7070696E672E2E2E0A005053552086 -S315080166586F66662074696D656F75742C2073746F1F -S315080166687070696E672E2E2E0A000000455620693D -S315080166786E666F3A0A0000004742545F76657220D3 -S315080166885625642E256425640A000000426174743F -S3150801669865727920747970653A2025640A000000C4 -S315080166A8426174746572792063617061636974798A -S315080166B83A2025640A0000004261747465727920DB -S315080166C8766F6C746167653A2025640A00000000D4 -S315080166D8426174746572792076656E646F723A20C0 -S315080166E8252E34730A000000426174746572792094 -S315080166F8534E3A20256C750A0000000042617474ED -S31508016708657279206D616E75666163747572652047 -S31508016718646174653A20253032642E253032642E38 -S31508016728253034640A000000426174746572792060 -S315080167386379636C65733A2025640A004F776E207E -S315080167486175746F3A2025640A0000004556494E5A -S315080167583A20252E3137730A0000000045565F5343 -S31508016768575F5645523A20252E38730A000000000D -S3150801677842524D2054696D656F75740A0000000010 -S315080167884261747465727920696E666F3A0A000007 -S315080167986D61784356202564560A00006D61784371 -S315080167A843202564410A0000746F74452025646BEB -S315080167B857680A006D617854202564430A00000069 -S315080167C8534F43202564700A00000000566F6C7405 -S315080167D82E202564560A00004243502054696D65E7 -S315080167E86F75740A0000000042524F2054696D659E -S315080167F86F75740A000000004556206E6F74207282 -S315080168086561647920666F722061203630730A00E3 -S31508016818505355206E6F742072656164792C207304 -S31508016828746F7070696E672E2E2E0A0042434C2FBC -S315080168384243532F42534D2074696D656F75742C05 -S315080168482073746F7070696E672E2E2E0A00000009 -S315080168584C6F636B206572726F722C2073746F703C -S3150801686870696E672E2E2E0A00000000486F747034 -S315080168786C75672064657465637465642C20737424 -S315080168886F7070696E672E2E2E0A0000436F6E6E42 -S315080168986563746F72206F76657268656174202501 -S315080168A8642025642C2073746F7070696E672E2EA8 -S315080168B82E0A00004253442054696D656F75740A9F -S315080168C80000000044697361626C65640A0000008F -S315080168D84368617267696E67207374617274656467 -S315080168E80A00000057616974696E6720666F72202D -S315080168F842484D0A0000000057616974696E6720AD -S31508016908666F72205053552072656164790A0000D2 -S3150801691849736F6C6174696F6E20746573740A00C4 -S3150801692857616974696E6720666F7220626174744B -S3150801693865727920696E666F0A0000005761697485 -S31508016948696E6720666F7220626174746572792050 -S315080169587374617475730A0057616974696E67207F -S31508016968666F7220424D530A00000000496E697429 -S3150801697869616C697A696E672063686172676572AD -S315080169880A00000057616974696E6720666F72208C -S3150801699842434C0A000000004368617267696E67E2 -S315080169A820696E2070726F67726573730A0000003A -S315080169B84368617267696E672053746F707065649E -S315080169C80A0000004368617267696E672053746F2D -S315080169D8707065642077697468204353440A000017 -S315080169E84368617267696E67204572726F720A0039 -S315080169F84368617267696E672046696E6973686577 -S31508016A08640A0000474254204572726F7220636F08 -S31508016A1864653A20307825580A000000436F6E6E7F -S31508016A286563746F723A20556E6B6E6F776E0A00DE -S31508016A38436F6E6E6563746F723A20556E706C7526 -S31508016A48676765640A000000436F6E6E6563746F55 -S31508016A58723A2044697361626C65640A0000000031 -S31508016A68436F6E6E6563746F723A20507265706112 -S31508016A7872696E670A000000436F6E6E6563746F0C -S31508016A88723A204175746852657175697265640A46 -S31508016A9800000000436F6E6E6563746F723A205783 -S31508016AA8616974696E67466F72456E657267790AB8 -S31508016AB800000000436F6E6E6563746F723A204377 -S31508016AC868617267696E6750617573656445560AC8 -S31508016AD800000000436F6E6E6563746F723A204357 -S31508016AE868617267696E675061757365644556535F -S31508016AF8450A0000436F6E6E6563746F723A2043E8 -S31508016B0868617267696E670A00000000436F6E6EF6 -S31508016B186563746F723A204175746854696D656F57 -S31508016B2875740A00436F6E6E6563746F723A204610 -S31508016B38696E69736865640A00000000436F6E6EC2 -S31508016B486563746F723A2046696E69736865644548 -S31508016B585653450A00000000436F6E6E6563746FED -S31508016B68723A2046696E697368656445560A000073 -S31508016B78436F6E6E6563746F723A205265706C75F1 -S31508016B886767696E670A000042454D205265636565 -S31508016B98697665642C20666F7263652073746F70F5 -S31508016BA870696E672E2E2E0A0000000042454D3A7E -S31508016BB820253032582025303258202530325820A1 -S31508016BC8253032580000000020253032582025305B -S31508016BD83258202530325820253032580A0000000C -S31508016BE84253542052656365697665642C2073742B -S31508016BF86F7070696E672E2E2E0A00004253543A3A -S31508016C082025303258202530325820253032582050 -S31508016C1825303258000000004C6F636B206572728C -S31508016C286F720A004C6F636B206572726F722072FD -S31508016C38657365740A000000474254204368617207 -S31508016C48676572207625642E25640A00536572697C -S31508016C58616C206E756D6265723A2025640A0000BA -S31508016C68426F617264207265766973696F6E3A203C -S31508016C7825640A0046572076657273696F6E3A204D -S31508016C8825642E25642E25640A00000050535520D4 -S31508016C986F6E2074696D656F75740A00436F6E743B -S31508016CA86163746F72206572726F722C2073746FC8 -S31508016CB87070696E672E2E2E0A00000050535520F3 -S31508016CC86F66662074696D656F75740A0000000041 -S31508016CD853657420436F6E6669673A2025732025C4 -S31508016CE8640A0000506F776572206C696D69743A99 -S31508016CF82025640A000000004368617267652070F0 -S31508016D0865726D69743A2025640A0005E0930400E2 -S31508016D180000000000000000010203040607080934 -S31508016D28000000000102030400000405060708091B -S31508016D3800000000000D000001020304050607080B -S31508016D48090A0B0C0D0E0F100000040506070809A1 -S31508016D5800000000000D00000102030405060708EB -S31508016D68090A0B0C0D0E0F10494E4600696E66008E -S31508016D784E414E006E616E00300030313233343583 -S31508016D88363738394142434445460030313233347F -S31508016D983536373839616263646566005245454E4A -S31508016DA854206D616C6C6F632073756363656564E4 -S31508016DB86564002F6275696C642F676E752D746F2B -S31508016DC86F6C732D666F722D73746D33325F313341 -S31508016DD82E332E72656C312E3230323430393236D2 -S31508016DE82D313731352F7372632F6E65776C69626A -S31508016DF82F6E65776C69622F6C6962632F74696D8A -S31508016E08652F676D74696D652E63002C2066756E2E -S31508016E186374696F6E3A2000617373657274696F7A -S31508016E286E2022257322206661696C65643A20669C -S31508016E38696C6520222573222C206C696E652025CC -S31508016E4864257325730A00496E66696E6974790043 -S31508016E584E614E002F6275696C642F676E752D74C5 -S31508016E686F6F6C732D666F722D73746D33325F3164 -S31508016E78332E332E72656C312E3230323430393234 -S31508016E88362D313731352F7372632F6E65776C69F5 -S31508016E98622F6E65776C69622F6C6962632F7374EA -S31508016EA8646C69622F64746F612E630042616C6C4D -S31508016EB86F632073756363656564656400232D30A4 -S31508016EC82B2000686C4C00656667454647002F62AB -S31508016ED875696C642F676E752D746F6F6C732D6683 -S31508016EE86F722D73746D33325F31332E332E72659B -S31508016EF86C312E32303234303932362D313731351C -S31508016F082F7372632F6E65776C69622F6E65776C5E -S31508016F1869622F6C6962632F7374646C69622F6D79 -S31508016F28707265632E63004300504F534958002E0B -S31508016F380000000005000000190000007D0000009F -S31508016F480080E03779C34143176E05B5B5B893464E -S31508016F58F5F93FE9034F384D321D30F94877825A1A -S31508016F683CBF737FDD4F1575000000000000F03F38 -S31508016F7800000000000024400000000000005940FD -S31508016F880000000000408F40000000000088C34050 -S31508016F9800000000006AF8400000000080842E41C5 -S31508016FA800000000D01263410000000084D7974111 -S31508016FB80000000065CDCD41000000205FA0024217 -S31508016FC8000000E876483742000000A2941A6D428C -S31508016FD8000040E59C30A2420000901EC4BCD6427F -S31508016FE800003426F56B0C430080E03779C341432A -S31508016FF800A0D8855734764300C84E676DC1AB43A0 -S31508017008003D9160E458E143408CB5781DAF1544BD -S3150801701850EFE2D6E41A4B4492D54D06CFF0804498 -S31508017028F64AE1C7022DB544B49DD9794378EA44AD -S315080170380020202020202020202028282828282031 -S315080170482020202020202020202020202020202029 -S315080170582088101010101010101010101010101091 -S315080170681004040404040404040404101010101081 -S31508017078101041414141414101010101010101014B -S31508017088010101010101010101010101101010109D -S31508017098101042424242424202020202020202021D -S315080170A80202020202020202020202021010101071 -S315080170B82000000000000000000000000000000099 -S315080170C800000000000000000000000000000000A9 -S315080170D80000000000000000000000000000000099 -S315080170E80000000000000000000000000000000089 -S315080170F80000000000000000000000000000000079 -S315080171080000000000000000000000000000000068 -S315080171180000000000000000000000000000000058 -S315080171280000000000000000000000000000000048 -S309080171380000000044 -S30D0801713CEC10FF7F01000000C1 -S309080171440D820008A1 -S30908017148E9810008C2 -S3150801714CE4010000010164000000FF0000000000DA -S3150801715C0000000000000000400000320A32004026 -S3150801716C00000000008000320A3200008000000096 -S3150801717C0000FA320A32000000FA000000FF003261 -S3150801718C0A32000020000000FFFFFF320A3200FF1E -S3150801719CFFFF0000FF0000320A3200200000000049 -S315080171AC00FFFF00000000000000000052555301CB -S315080171BC000000FE529E66000024F4001000000038 -S315080171CC01000000000000000300000090100020E0 -S315080171DC940000200000000090100020F8100020F8 -S315080171EC60110020000000000000000000000000F3 -S315080171FC0000000000000000000000000000000074 -S3150801720C0000000000000000000000000000000063 -S3150801721C0000000000000000000000000000000053 -S3150801722C4300000000000000000000000000000000 -S3150801723C0000000000000000000000000000000033 -S3150801724C43000000000000000000000000000000E0 -S3150801725C0000000000000000000000000000000013 -S3150801726C43000000000000000000000000000000C0 -S3150801727C00000000000000000000000000000000F3 -S3150801728C43000000000000000000000000000000A0 -S3150801729C00000000000000000000000000000000D3 -S315080172AC4300000000000000000000000000000080 -S315080172BC00000000000000000000000000000000B3 -S315080172CC4300000000000000000000000000000060 -S315080172DC0000000000000000000000000000000093 -S315080172EC4300000000000000000000000000000040 -S315080172FC0000000000000000000000000000000073 -S3150801730CBD64010889640108000000003870010891 -S3150801731C376F01084E6E01084E6E01084E6E010854 -S3150801732C4E6E01084E6E01084E6E01084E6E01082E -S3150801733C4E6E01084E6E0108FFFFFFFFFFFFFFFFB0 -S3150801734CFFFFFFFFFFFF00000100415343494900BE -S3150801735C0000000000000000000000000000000012 -S3150801736C0000000000000000000041534349490099 -S3150801737C00000000000000000000000000000000F2 -S3110801738C000000000000000000000000E6 -S7050800E7D932 diff --git a/Debug/objects.list b/Debug/objects.list index adc90af..ce6b1bc 100755 --- a/Debug/objects.list +++ b/Debug/objects.list @@ -2,21 +2,19 @@ "./Core/Src/board.o" "./Core/Src/can.o" "./Core/Src/charger_control.o" -"./Core/Src/charger_gbt.o" -"./Core/Src/connector.o" +"./Core/Src/cp.o" "./Core/Src/crc.o" "./Core/Src/debug.o" -"./Core/Src/gbt_packet.o" "./Core/Src/gpio.o" -"./Core/Src/j1939.o" -"./Core/Src/lock.o" "./Core/Src/main.o" "./Core/Src/meter.o" "./Core/Src/psu_control.o" "./Core/Src/rgb_controller.o" "./Core/Src/rtc.o" +"./Core/Src/serial.o" "./Core/Src/serial_control.o" "./Core/Src/serial_handler.o" +"./Core/Src/sma_filter.o" "./Core/Src/soft_rtc.o" "./Core/Src/stm32f1xx_hal_msp.o" "./Core/Src/stm32f1xx_it.o" diff --git a/GbTModuleSW30Web.code-workspace b/GbTModuleSW30Web.code-workspace deleted file mode 100644 index e663051..0000000 --- a/GbTModuleSW30Web.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": "." - } - ], - "settings": { - "files.associations": { - "charger_config.h": "c", - "connector.h": "c", - "serial_control.h": "c" - } - } -} \ No newline at end of file diff --git a/plan.md b/plan.md new file mode 100644 index 0000000..f601958 --- /dev/null +++ b/plan.md @@ -0,0 +1,146 @@ +--- +name: gbt-to-ccs-port +overview: Перенос прошивки модуля GBT на CCS с сохранением логики силовой части и веб-интерфейса, интеграцией готового CCS-стека из проекта CS60DC_CCS_STM32 и разделением двух независимых UART-протоколов. +todos: + - id: analyze-gbt-project + content: Просмотреть проект `GbTModuleSW30Web` (main, PSU, CONN, LED, веб/диагностика) и зафиксировать все места, где используется GBT-логика (функции GBT_*, структуры, CAN2 и т.п.). + status: completed + - id: extract-ccs-modules + content: Выделить из `CS60DC_CCS_STM32` полный набор CCS-модулей (cp, serial, charger_ccs, структуры CCS_EDCAN_*) и их зависимости (EDCAN, board, adc_filter) для переноса. + status: completed + - id: wire-cp-and-uart3 + content: Спланировать привязку CP (ADC1_IN4 и PWM на PA7) и перенастройку CCS-протокола на USART3 в проекте модуля, учитывая текущую конфигурацию таймеров и UART в `GbTModuleSW30Web`. + status: completed + - id: rewrite-main-loop + content: Спроектировать новое содержимое `main()` и `ED_Delay()` в `GbTModuleSW30Web`, убрав GBT-задачи и интегрировав CCS_SerialLoop, CP_Loop, EDCAN_Loop и существующие PSU/METER/CONN/LED/StopButton задачи. + status: completed + - id: clean-gbt-and-keep-can1 + content: Определить, какие файлы/части кода GBT можно удалить или заглушить, при этом оставив инициализацию CAN1 и минимально необходимый код для корректной работы bootloader и EDCAN. + status: completed + - id: adapt-web-diagnostics + content: "Наметить изменения веб-интерфейса и диагностического протокола: заменить источники данных с GBT на CCS-структуры, сохранив максимально существующую функциональность." + status: in_progress + - id: define-test-plan + content: Уточнить и зафиксировать подробный тест-план для стендовой проверки новой CCS-прошивки (переходы состояний CP/EVSE, обмен по USART3, защитные сценарии и регрессия веб/диагностики). + status: pending +isProject: false +--- + +## Цель + +Сделать новую прошивку для платы модуля, основанную на проекте `GbTModuleSW30Web`, которая: + +- **полностью избавлена от GBT-логики и GBT-протоколов**, +- **использует CCS-алгоритмы и протокол** из проекта `[CS60DC_CCS_STM32](CS60DC_CCS_STM32/Core/Src/main.c)`, +- **сохраняет силовую часть и веб/диагностический функционал** существующей GBT-прошивки, +- использует **два независимых UART**: существующий (как в GBT) + новый `USART3` под CCS-протокол, +- сохраняет **инициализацию CAN1 как заглушку**, но не использует старый GBT‑CAN. + +## Архитектура на целевом проекте + +- **Базовый проект**: берем за основу прошивку модуля GBT — `[GbTModuleSW30Web](GbTModuleSW30Web/Core/Src/main.c)`. +- **Источник CCS-логики**: переносим state machine и протокол CCS из `[CS60DC_CCS_STM32](CS60DC_CCS_STM32/Core/Src/main.c)` и связанных файлов: + - `[Core/Src/serial.c](CS60DC_CCS_STM32/Core/Src/serial.c)` — протокол MCU↔Everest (через UART, сейчас `huart1`), + - `[Core/Src/cp.c](CS60DC_CCS_STM32/Core/Src/cp.c)` — формирование и измерение CP (PWM+ADC), + - `[Core/Src/charger_ccs.c](CS60DC_CCS_STM32/Core/Src/charger_ccs.c)` + соответствующие заголовки и типы `CCS_*` и `CCS_EDCAN_*`. +- **Распределение UART**: + - существующий UART из GBT‑прошивки **оставляем без изменений** (диагностика / веб / что используется сейчас), + - **добавляем `USART3` для CCS‑протокола**, берём настройки (baud, parity и т.п.) из `CS60DC_CCS_STM32` (там CCS сейчас сидит на `USART1`, но параметры переносим на `USART3`). +- **CAN1**: + - оставляем `MX_CAN1_Init()` и базовую инициализацию как заглушку (по требованию), + - старые GBT‑обработчики CAN и `GBT_CAN_ReInit()` удаляем или заменяем пустыми/адаптированными вызовами к EDCAN при необходимости. +- **Силовая часть, реле, измерения**: + - логика `PSU_*`, `METER_*`, `CONN_*`, `LED_*` и Stop/E‑Stop остаётся из GBT‑проекта, + - управление главным DC‑контактором остаётся как в `[GbTModuleSW30Web](GbTModuleSW30Web/Core/Src/main.c)` и связанных файлах, но команды/состояния будут приходить из CCS‑логики. + +## План изменения `main.c` и ядра логики + +- **Инициализация (start‑up)**: + - в `[GbTModuleSW30Web/Core/Src/main.c](GbTModuleSW30Web/Core/Src/main.c)` сохраняем логику OpenBLT/VectorBase (`VectorBase_Config()` и т.п.); + - после стандартной HAL‑инициализации (`HAL_Init`, `HAL_RCC_DeInit`, `SystemClock_Config`, `MX_GPIO_Init` и т.д.) + - оставляем инициализацию общих периферий: `GPIO`, `ADC1`, `CAN1`, `RTC`, `TIM4` (если используется для других задач), существующие UART (2/5/1) и `USART3`; + - **убираем GBT‑специфичные инициализации**: `GBT_Init()`, `GBT_SetConfig()`, `GBT_CAN_ReInit()`, прямые вызовы `charger_gbt.h`, `j1939.h` и т.п.; + - **добавляем CCS‑инициализации** по образцу из `CS60DC_CCS_STM32/Core/Src/main.c`: + - `ADC_Init()` (если в проект переносится фильтрация АЦП / `adc_filter.c`), + - `CP_Init()` и первоначальное `CP_SetDuty(100);`, + - `CCS_Init();`, + - инициализацию EDCAN/адреса: `EDCAN_Init(SW_GetAddr());` и возможный `CAN_ReInit();`, если EDCAN используется. +- **Главный цикл**: + - исходно в GBT‑прошивке основной цикл делает: + - `PSU_ReadWrite();`, `PSU_Task();`, `METER_CalculateEnergy();`, `CONN_Loop();`, `LED_Write();`, `StopButtonControl();` и несколько `ED_Delay(...)`, в которых вызываются GBT‑таски (`GBT_ChargerTask()`, `GBT_ManageLockMotor()`, `CONN_CC_ReadStateFiltered()` и т.п.); + - **заменяем содержимое `ED_Delay()` и цикла `while(1)` так, чтобы:** + - в основном цикле выполнялись: + - `CCS_SerialLoop();` (как в `[CS60DC_CCS_STM32/Core/Src/main.c](CS60DC_CCS_STM32/Core/Src/main.c)`), + - `EDCAN_Loop();` (если EDCAN используется для обмена с главным контроллером), + - `CP_Loop();` (обновление состояния CP и заполнение `CCS_EDCAN_Output.cpState`), + - существующие `PSU_*`, `METER_*`, `CONN_Loop()`, `LED_Write()`, `StopButtonControl()`; + - `ED_Delay()` больше **не опирается на GBT‑таски**, а, при необходимости, просто крутит `CCS_SerialLoop()` / `CP_Loop()` и необязательные сервисные задачи. + +## Интеграция CCS‑протокола в проект модуля + +- **Перенос файлов CCS**: + - добавляем в проект модуля исходники и заголовки из `CS60DC_CCS_STM32`: + - `[Core/Src/cp.c](CS60DC_CCS_STM32/Core/Src/cp.c)` + `Core/Inc/cp.h`, + - `[Core/Src/serial.c](CS60DC_CCS_STM32/Core/Src/serial.c)` + `Core/Inc/serial.h`, + - `[Core/Src/charger_ccs.c](CS60DC_CCS_STM32/Core/Src/charger_ccs.c)` + `Core/Inc/charger_ccs.h`, + - необходимые типы `CCS_*` и `CCS_EDCAN_*` (структуры состояний, входов/выходов, команд). + - подправляем include‑пути и зависимости под структуру каталогов `GbTModuleSW30Web`. +- **Привязка к `USART3`**: + - в перенесённом `serial.c` заменяем все использования `huart1` на `huart3`: + - глобальный `extern UART_HandleTypeDef huart1;` → `huart3;`, + - `HAL_UARTEx_ReceiveToIdle_IT(&huart1, ...)` → `&huart3`, + - `HAL_UART_Transmit(&huart1, ...)` → `&huart3`; + - обновляем `HAL_UARTEx_RxEventCallback` так, чтобы он реагировал на `huart3`; + - убеждаемся, что `MX_USART3_UART_Init()` в `GbTModuleSW30Web/Core/Src/usart.c` настроен на тот же baud/формат, что и `USART1` в `CS60DC_CCS_STM32`. +- **CP‑цепь (CP ADC + PWM на PA7)**: + - в переносимом `cp.c` уже есть логика расчёта напряжения CP по `ADC_CP_CHANNEL` и управление PWM через `TIM2`; + - на целевой плате: + - настраиваем канал ADC, соответствующий `ADC1_IN4`, как `ADC_CP_CHANNEL` в конфигурационных файлах/enum‑ах ADC; + - убеждаемся, что ножка `PA7` привязана к нужному таймеру (по CubeMX‑конфигу) и совпадает с тем, что ожидает `cp.c` (сейчас TIM2/CH1/CH2) — при необходимости в план добавим правку конфигурации таймера и каналов; + - оставляем границы состояний CP (A/B/C/D/E/F) и формулы из текущего `cp.c` без изменений, чтобы поведение соответствовало проверенной CCS‑прошивке. +- **Связка CCS ↔ силовая часть/EDCAN**: + - `CCS_SerialLoop()` управляет структурами `CCS_EDCAN_Output` и читает `CCS_EDCAN_Input`; + - в коде модуля (там, где сейчас GBT‑логика связывает CAN/силовую часть с протоколом) заменяем связь на работу с `CCS_EDCAN_*`: + - измеренные ток/напряжение из силовой части кладём в `CCS_EDCAN_Input.measuredVoltage` и `measuredCurrent`, + - команды включения/отключения питания (`PSU_ON/OFF/PREPARE`) и ошибки записываем в `CCS_EDCAN_Input.*`, + - из `CCS_EDCAN_Output` читаем: + - `enablePSU`/`requestedVoltage`/`requestedCurrent` — для управления источником питания, + - `connectorState`, `cpState`, `chargingPercentage` — для индикации, логов и веб‑интерфейса. + +## Удаление GBT и чистка кода + +- **Удаление GBT‑зависимостей**: + - в `GbTModuleSW30Web` находим и удаляем/отключаем: + - `#include "charger_gbt.h"`, `j1939.h`, GBT‑специфические модули блокировки/замка, если они не используются механически; + - функции `GBT_Init()`, `GBT_ChargerTask()`, `GBT_ManageLockMotor()`, `GBT_SetConfig()`, `GBT_CAN_ReInit()` и т.п.; + - оставляем общий код, не завязанный именно на GBT (питание, измерения, коннектор, индикация, веб‑сервер, логирование). +- **CAN**: + - инициализация `CAN1` (`MX_CAN1_Init()`) должна остаться, чтобы bootloader/система не сломались; + - если от GBT остался `CAN2`, его можно выключить из конфигурации, если он аппаратно не используется в CCS‑варианте; + - при необходимости добавляем простую заглушку вместо старых GBT‑обработчиков, чтобы сборка прошла без ошибок. + +## Сохранение веб‑/диагностического функционала + +- **Веб‑интерфейс и диагностика**: + - по вашему требованию **сохраняем весь существующий веб‑функционал `GbTModuleSW30Web`**, только: + - удаляем/переписываем поля и страницы, завязанные на GBT‑состояния/параметры, + - вместо GBT‑переменных и структур подставляем данные из `CCS_EDCAN_Output`, `CCS_State`, `CCS_EvInfo` и т.п.; + - протокол диагностики через существующий UART не меняем по формату, только отключаем GBT‑команды/состояния и, при необходимости, добавляем новые поля/команды под CCS (по согласованию). + +## Тестирование и критерии приёмки + +- **Юнит‑/модульные проверки на стенде**: + - запуск прошивки без подключенного EV — проверка, что станция в состоянии `Unplugged`/`EV_STATE_A_IDLE`, нет перезагрузок и ошибок; + - подключение EV/эмулятора: + - проверка переходов CP‑состояний A→B→C, корректных значений напряжения CP, + - проверка, что `CCS_ConnectorState` и `CCS_EvseState` меняются ожидаемо (Preparing, Charging, Finished и т.п.); + - проверка обмена по `USART3`: + - корректный приём/передача пакетов с CRC16, + - реакция на команды Everest (ENABLE, START/STOP, PWM_DUTY, SET_OUTPUT_VOLTAGE, EV_INFO, EVSE_STATE, KEEP_ALIVE); + - проверка защиты: + - ESTOP/StopButton — немедленное отключение выхода и отправка `CCS_SendEmergencyStop()`; + - таймаут связи с хостом (`last_host_seen`) — перевод в безопасное состояние (отключение PSU, CP duty = 100%, лог `Everest timeout`). +- **Регрессионные проверки существующей функциональности**: + - веб‑страницы открываются, основные параметры (напряжение, ток, энергии, состояния коннектора) отображаются корректно; + - сохранены привычные логи/формат сообщений (насколько возможно) для удобства отладки. +