From 1dee44ab7c9d8d5b11b0034ecc75faa629da3dde Mon Sep 17 00:00:00 2001 From: kevin Date: Fri, 12 Mar 2021 15:00:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9A=8F=E4=BE=BF=E8=B0=83=E8=AF=95=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=B8=8B=E5=8F=91=E7=8E=B0=E4=B8=8D=E8=83=BD=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E4=BB=8Esd=E5=8D=A1=E8=AF=BB=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: kevin --- 103ze/.settings/language.settings.xml | 4 +- 103ze/Debug/103ze_code.bin | Bin 29812 -> 27352 bytes 103ze/Debug/103ze_code.elf | Bin 1021220 -> 1011288 bytes 103ze/Debug/103ze_code.list | 20857 +++++++++++------------- 103ze/Debug/103ze_code.map | 1402 +- 103ze/Debug/mycode/c.o | Bin 804504 -> 804348 bytes 103ze/Debug/mycode/c.su | 2 +- 103ze/Debug/mycode/fatfs_sd.o | Bin 810192 -> 810192 bytes 103ze/mycode/c.c | 9 +- 103ze/mycode/fatfs_sd.c | 4 +- 10 files changed, 10509 insertions(+), 11769 deletions(-) diff --git a/103ze/.settings/language.settings.xml b/103ze/.settings/language.settings.xml index 90db629..af83ebf 100644 --- a/103ze/.settings/language.settings.xml +++ b/103ze/.settings/language.settings.xml @@ -13,7 +13,7 @@ - + @@ -37,7 +37,7 @@ - + diff --git a/103ze/Debug/103ze_code.bin b/103ze/Debug/103ze_code.bin index 3382a07f95fbc0b2488b29a548ddeeeb059439fc..e29b4d69b4c5cd2d754029cc3cbbe4b97025073c 100644 GIT binary patch delta 1734 zcmc(fU2GIp6vxk*+3if1Qd-l((z0cDX8UDr1S+65*cO`Y^aDyMNT6t2sI?KrB@_Z8 zb{{Z)kS3C2{E9VHjnY_b$*_simX#<$6HO>YB_<#t*6M?CC^fs&pLa*U+RZG z>4sa(Q^4mAIE_bWi*O&lNF?Ms!1ygrXN1<&d{YcS0bT&Zh(RPY)K1IAuB3~%Kymmo zG%&upMOVcPEFe?#cota>b)Xqls~Obd?V@^cyRE-4;N-$&Dsr5}vozvZEPM%+;Jlt$ zG*LSqT2su$2bqCp=|;-!;v5na9u>w+dOX3MKVsI573~>l5>%^+HMvaYGMP0mn{W*x z?v+D<&=5pQ=|sYlX?v&J44vZVk8pf2SOGw9N_km7#GOXOibtC#gB7P91DSWrYj3B` zHHofEe*ACevDoG5(M zNLSNN3pI`OM*1v{FO_$BY=+=S2BCEFVH zA6IBeg!D(RK(Ks*|^ z#K3d0^UG{~_6c$hN|ktYYH~L2zFYXaC`?P1TT`PDfg~(F#*cBFdD;oy-bPB+GH`_Q zwcNT*@rmbKRI^ReCZk7UsIb-QMDG6F#Gj6_1=@Lwr@t09w7~f==WRDZ8kX8|ydCeM zZY|T7%spd)Ic$1r$Di7RimjL)hlqUJgY9%hTaZ0AF;jKgGgAkIs>pqmn*#^jftlKN zT3A^x^h&g=@|D8fb`xwlu^N<&;2*|~%*NS@`)94Vo0eAX6i!I`TU8mN^MnN6APudx zFsOgLPC^XQ+1mG)kFIBi!v%Ydl<2rgyEc6|#i+P9XVfvUbGq8bN z^{t+UdXUqZ#Y{d^#H?Z}m^!_)z5%m3H?j)T&0JzWV8Tp<`C=m_Y-$zyC4JYX4>7x+ zA7SPVpl_dMMR!=syjJwH81k!*M_-<_S3`Q)=JRM@;@XmB&vfV3`|YW9>)ZC^YIsl> zl=STlcc4A*+ct$RtqJ787LYmp%){Tf?b`&ykdw4_ZcR((yD9IjP8zqgkU zgjxFezZek8X*CQ7E5sOPnxnL&?XW)BHtxDBQ2==a`S|dULkgcEhyWuB$f+vt0kea7 If#ERx4m}AB9RL6T delta 4117 zcmc&%eRLGn6@PDLc6at8xFG>In=I_^u&}TOHd&&PsD#<%WkbLOf{MhC2?3lOwT5!^ zU@6^Ib1I-v!t?Y9fu2A>MT#VbR3gU3siBHic+Qa&CXsq|%LP3D~=EI~dTLyDrJXr%WH zEn@dr_>0KRx$GgNuovmatR2_W5!T^Yn&O1x^;k&NBcWs^D{NS)+0P+5P%NVXt`jHe zS#BzG9j1ESUvnErtItP*C7`?kaJ=3yY#mp=jk5Z?81E>(M{k>%JG$sxVBK+v5mFM^ z1T`Mic(6HP6b+)N?V4T^=|$1~^sxTE@S(9V5sGyG9M-p9%3e6B>d*EK^&1*X>a(hH zW#nVxnN<@P+9hk1UEUyPmCbA1B^ut*Dd;$rIWskO%-3R({zzjJ39>$PaiN$ z!&_*pVe6!3e0e$p?rdbtL`8Gg^*m)NUoa!S1<(#S3mEz@uoLDS?#eOWVq{*D>5sEt zWI{5XJ*f@v>w0@q+{6rwcI|UcXN;R53=72eIE}jnTuv{zeK?1@gd#kV-XeH#Bi#tk z_i4MZ0KY}g3RUndm^L4tYqe)r=d?F4K1v^)UV)Exy)yl7?Iqt^3oj3OzsbnMA4rKohMewn^3uic$89T^62}Bk#>#MNp5tE~pfU3#bt!?O$bw6E z!;cdjEpqA zjo*bcv_5pD=ZjI6VBbjmMaPJv`utDUA&LbS^sgH^{-BLq);&Y_gld^Qo}LT+GG{<@ z4P<7k;0&6^DP4i019Wd?79OD8m3K1^zRSJP&gvXM{C>J%aSHc$U4Nqi<9=FR{d7^o z62$MVL3}N=BmV*SgM25Tx64&i%}mLtMSK<@2QU@j0r&s~fNN^$wxw$ve}QfbpcQZc za0Ji;colH6E3>u^PchyERsaq_HDCsy08j!bzlm;HwuW)?UFViPhdoa1?rND5$o4=e zm8?q@I#bD)R19aGPCju_d+Y9c{pL5YHf7uLDOyXPyLFz{d~xeOt=YEXX67os>(dnz zvDS{(UBaeCjfg*SFXBPW-0|Kt%?+-y$xX16(_n|2y3usY;*3SBa`#)G5{+@B-1Z$+ z?wA%nvkvj!<1^^9gejvUiZ@lTD$X5AOgMUG zIjEGf?GN>SraZckxEhi2r_uJ!!ujnDK_vp?)9Y_6n=aizR@WaGGU^UUFNc!A>_^J85#z2EWyT%5V4cW^lzkDTt-J8# z=Q_bOj7=Oh(5-5%-%ghiojV&2XbF_01*6=q{+^h=EUG!L^=BH&qQ0@7W@nafQfwJP z&T7SEG3;`YOcj^-ON_o72Rb?pJHpw6Z9_b39A&@B3hpBueJ8=T<~VX?wgvf)N9#mU zVHg9rJr?D52~~4213PS(JT^>TGXJ^LOxQR5mP4)1SCP;sTZRGnSs7Xo}}n?`Zzb7V>&Gt z%B}W8qW8lmU`Eyyw`_}IVTV5d-AV|N8xArj!WG!>j0y5tnN{>G=d(qTr%X@74*0-f@_pNn+iFxn$zO%|1%Td$AL8GQRj)?;TF@eH^Xcy^OiSm*QtmoK#U8`)oRS>Js)Z8ap6PBj2NQL(OV=(*#+N zZ&tZ*-BkSqDZ6g~?rczTvV!F35oBSkXBCbl1o`sldcmtr^Pf)Kp$|n5KmTcBGC2#c}eeQ#idC3dW zAaT-H2|KBi&7JMy=s>1iV`~%5ai@&SYHW{)nbOB`8z|$lOsQ7tPcQ=(!6&_&aLO** zV_+x;WJa4yYLJ#mZzhW2Yw1I%d}{Z}JdeWa_##Vwan#~L`FessI4H6(J0O9)7bzQ6 zSEVT|XOrDM&gv3b=y4H0l%kbtu{3k6ce@(Q6XF)Z4=D#J_o%0V4RyI!zH9ce1A>%S z=8?F;26>-oiJBoaZSD${8#W`s;ZzLhxAwPUx%T#&Hxq8MN`5QxTHZ8;<=Vv4F_&G_ zovmX3NAd96komNT2gjl|K%JXFTs@hvX=-UYxjX9aNhcSlJ;Y12nEh&-c*Q%ev68hd z4V&*h7b_rcC}3IXg0azS(w`@aNCJ)q3A)7`;fYTgNj{kl<}q=f%ytS=ac_c9u3c%a@|&7cbmZ-96KjS+Y-NvQ9P#5FmjNR*^sm2}{_KeMm?kKnNiTJ34GC2r79| z%O&6fE(o$HILIQ4xS^uphKdL(;{Jl7tjhhJ?wJ6-_xt|1-~HbE-0)O)om1zWI(6#Q zsp{(LVcqjxj~%~dr7I-cENMBCBvntYPf6*zZL%a$G6N$?4FBkl)5Qb4mWIqp6q*PV zC?^=nb8Pa~MT@Sn><3lW**6Db{|_eLf4y?uAdQ#$%}8$mlban}nc1b$h`yxNv;i7W3`10Rp7HnU+ zMcQmW=aMs0q-0ltdbV7Q;H)FNN37zksUn^I|{qm zc<2?sBbhbf78jJULC1J;ODaocw}_Hd)`EqLdsA6E79w6tW$CO${6M#(A~cQVu`)3* zjrGB8bsD=Bw=eaZKOvpH$yi@;x(VyW`ubZoWm5=zB!dkG_)7-+-EMjdjx^fq|1Ot( zuCRRn{?6>*oE3_#UD*YI>u+T~GXys4#hUtZZ&%<;PI*B}>;fr;C8rc#y>ROl>FkHs z3V+M$#?H>T#Lm91`;qN~ZmE1#QYu^3|NQJ8(yFjjSMRW7$-~Z0y~0wQMKOifF1&ih zeC}bHr9>CG3a(wac113@`{J8zNIpD?p-k$Qa_z$3e+BWb*8HDBC0%6xmA}tOdnFs| z_5|AU9MXJM@@(`9MHi{+QI|Oo&o<#Z(X#>)Bq`gRQ4-uxJYy#h6_E!yMn^^i5G{xu- zmOQiY%7yV)+IX&9ICznv>#tpS;4gyq`15XqqZ3oe2$o10(R?K9ME40J*;8~68O4V2 z-DZF3C>FseGjlZin}rmPleFDsk_L)9#D6Ey0B-uTaHL)Q!a|x zUY6$Bh#(S7TacFvc>b#H(vj+3@5Ry#U`zbFE7SjDo^J8)?=cbnLi@;|4tJ}%sfWU`cCuz zWacSM{`_anA7BJFTOKY2N{toKQ&2~+jSr_k{TWE3N|{|&6&~YPI27BSU3Nu zcz&FdypBoyYSW!qa46C=6<4N>;gW6c2b#o|nxwbTBKqqRgC)uw|H9^c7bC8&nS6Tm z4n&KHXmkr(8LG-e7P?b0u6?giMq9j^5h^teX4k0nhhS^+lDT}+Ql3TgwOD@GK-$GKH zvI*Sr%4AR`D5p?EqGE=mBt-z@Q3OhpmBo;dqO3zcRoQ`Sni366x>5@ICdwb6Y^rnw zCPV3uYcoX=Pq*SRz28Iyt&}KSTPw9-%Tm%nnyoBE1#OhiLE2XN5ttn1c9gbLwoWul zxyoM<+Ft1hd(!-zR`x|gRizZTDKP%=OvG!y!M)^!B>e>-8Fo#DE`hkJcYOV zNSw^!QNEQ_$9=lm^TC;^b4pziE);1u4NW6ZC4CAq1gZ}LLEy`#k~D9=9t3FcEB~u8 zU@EHr{}=?&^#A)}z}WwNF+h_#DJz>xQfEnJrWI9+WXkwV{FuwP^V^PzC)@K_U+QP* zyx}ZjJSL9?)_0Eq8o?qe06k$FP0&cAOk%c&h!o2YD)cbhOVsV71DwqE1eJ~nurk|4 z@}02(UT#}PqP#3(Ht}+M(Ey2!V-XL_PWY5;d!BepSj1|So|SEd$HagRd{U2o#5A5M z%i!Y?E7(kC`58`Zy^E-4vxp@WU#xGC8gp2L50GMwC1|bzY1YG^iK`uW?ywRPU_cqxi3BY)piJvUf)*K2mUSl8wAg@htY=B~5(DaBedJTIv?I?AJ5AVSEFudt z_W0?52L!lxP+hewhw8#w#2rC8*0O#?jL7Qld`#@^0%x30bi=Rf z3fKDw%281Jt-yW7P~()NR~Ph3bN+rSVF7=ZN5$#fyJu3 z@|bXRdny)OXwGDMHl`vUNUxAndljlR(7mm2W! zrteVAFPVZGH~p5%w*}$qrr%Sw+f6o~A+S=)uo1;WCSBKV(6vlgW5LAYY1$eRnk2WfQI9OSoQTZc5I8gbcIxL3X%9A@$$Fkc^?Soy`ne9 zEQ>W`VbP@KMOk8Rsm`T973wv$#F#aj{Fd4&V4kM)smX`bfIX{?CcYDd>!jua4ZxJc>AOMHKm z#@Sq7L>bGBu?WM_j8w?xEw?~6ub(M7cM>9n>w_puH^5zubSXR|NEeg$1?aA^$Wp{a z`YT3a4M&Og8xnDiwIKk3L9avb0-oCJJ?PHP7?B1|1%n5H)L=NnnqFrR#RWXccL$Ll zVW!!3Ni%e*Xe2+vni%ADMjMW>Ttl~-=wGS+BdqvCsK)E3OEG6j*Uc=H5cJmyi8X9% zl(m_)x?Z(T+LdID<@J+e`;!h^S-2r=mK4>Sq9%Y$@fcxIt)kNcX?FPbp^ zv<$R@HCzULyl&|iQ;j-@#DAv~b)h0&KOjM`a$B&*gaj(x9sny7juH5BuK-+;FpJvd z4}hZ+BEJH-BLG$>=xV+a(6TH+*K%i|bX?*GR?(`ErziX2UV-)GbXpT*J*fq3ez=Py zyaFIQVH$NH}F@#6uW!#x8>0%G_kY~#x-Wx zEq!!f_aE=WkFw$_TI>&1?OmcJ4fVlH52KS~E|D%nRgYo&N|*jjaGRw6!$HWUHq?3W3A0=t~bRoY&E7wLU>ZXL7^##HZS3XI| zSHk}`x?22L%){Hp60%Tn8_le6eMPkwDoqTy&NY#Q6e?{ExXcxSCbsI2O@{A?(52|j zH|FJNiD*M_L?t~+s2^pWs#;g=G0ZkGw;JeVL+a?56$YGRz{6vb47jfW4{?p5%6^uk ze$=Bwg$MiOAN1#L$84f&DMzk=!#o!uF7)RKzF!U8aD%tPr9Zs2mIHoQCnd*|uu;rl zLX?ouNvvTaCf}I7zu_g&DAp-PH&L0vJ0>`=s$HREt+7G4($gtS()z-@u4F23aA$j2 zpG;?YdW%N~@VI`ZRM#QBDzsk8(Z_zOuF|`W8cDBU>Q4>-NswUN#AN>_ia2a>cOi}AU!nv1e7LkPx$*QO`JzbS6%n- z9k!!JNxV+^gCjs$O^Zp1RwD6z>7iK-RSgkXmn8It^kKt!%V@pmc}JkA4n-e-t%-++ z^Rx(Ee9n#H#o^&RW{S=-FvtRFNev`F*%7+|4bSuh$1ZhaT+RD>Q9kzMNc*@}2I*i! z=jymz11>k4^T~Vm*c)v+l|;W9gsY{5c_%UIM)Gv|TlCa0 z%DfJP-9ee(fq8~9ub_txQ)bC2P5eojX`o3Qh0I}K3Mg|1G*zScEk+OYvdKp0U}PpN zMbW-dJg1f3q2E~lA3D?;m{jZ!6B5$;1O&rcN&Us2r)N$l_vr;nPYjg){m1F zD?^;UFrLRIN?I(ukTpDQ4?09;NT+~9NXaK4Z^>A)2)H*=hC|_xDAO95tCYEbMx}X? zxf7Val!*kUjxtNY)j*jPH0q$2r$xSa3YFJd8oSVpf-7Dg+fR4g`z@BB!l}UlQh}Xl zW00&0mR9J`V)`Y%8~H$kCD70^NlLpLB1^~djHq1{9r{?J$@A&S&*Oz&YsT?r@*1)_ zWtO9Te}cBHPP#f zk2m15xIOz!*f=nEpfwh+FOAN2bmC!5w*)+nabb=xDS5vUzhS2^&q3@%A&X@8G zL(BqG@0-LdFpa!P%%XpYIc_p^^ISyNjTs*_Nrq`aP>gPp3{&Y%Cdn|>-DHyHrkhRD z!gRAqGEJ_4+Zfu{1gcG&P9`~|Hkzc1P|AWPIiwZ_mC#LcNF9DtTi#V~HiteDt_Kv?O;&wS30SqvaI}Y% zfK{i&>(NXE%PZp@PfQA;IA@_v_)no(D1|^xLjXSJSVFs#7`6W2zevCtJg%{%)W_&M}MZ9 zYPPt2B2P|!IHGYedm;JdyFmHaU#4?L|2rHXf!Hz3o!3X`7` z??dNOW(6=WRv|+Fgv<%bY(~runTE`Jz~oLt%wB+vAhw_PF<~u($2<37a>@PNYrtjh zlhmLCytU!7<6`mZK-5p;QSw|!cn%VV=n_`)-a!dglDLwOy-7knZ*_wN2?s`^C&0%r zqr~PVSTG2Ij9o*z zm-C1y>`>v!D0Vu*6S&>btWt_nXrhes5;~hll0x)%9};VL*&^Pl=8=XH*}>+GbL-8^ z4mK~KM4Mpq0!rlkLy30Rm2gmPxs6H~&2JxU{uC*08QJeo7EniwnU3cS-4cJYKraO> z@h9^R!Y&i94=8bg1$rr<#3gpKB`&j@Epdg}4gSj52CDNavp$Zd^ZF^U486gPt0MGH z7AY=G$5WWD#7-9I=zt}5vavTQu?t%jx{!bpd;X!stJjs#EwT3>O6&_NG1;)peim?y zDXJ8A6`t`#P0%xzUspx<+U0DFRiDuV_E_-`Rqp$TD)+PSmDuZQ^o*6vX7H0|Y@qh< zroO_{ThKFB0?8WM*aY@91D-L86&danu*WDi`X(htvz9m60}pftTxYna_qr0gJ;pUE zVYI)bvHem)Ds@M$u~8o(iO*_ztlS-g{m)uHL;e}IsjA~mZR3b)ldf}xc(RTsMBsb@ zFvIh)Iz?lXo&w7Ub=>W_2a{T0H)Q88AVJ(Z8;D!EHIh^)*g&4(>G|_byPwhO1h(0lhNdFwk^r-Tydlt{7y_}C` z>CyV3*?c#hFcEua^9OttV76G9jT$J~tUm#A7?5J?gek@nZa|vN`XkDs49I5t6be~l z3@FUDoS;|(in2|H3YJ6za!K|a5}M59a?A+UFiQrrq@bH@Q;Evg+#r)|Pm_o&15#`o zVIoVe0co~7sO%O4!h89*&j9Sspe2er6F^V*QOZHY+30`4uD{IXuI76A z2Dva$?$n)iqddI3PG1drYHaia-)o}vJnr)8^eg55H__M2-XMMSOK2;bab1^Ax-R<~ zb(taey@_|GJi3whMRXAxcAdAI&U>|ycbF{Rn8!W7(?oZPH@5d4ovsS|F-ChY@%98@ zbJ@9(2Hz!KRHwrg&R27>fq#jQB!A)cWlsJ1{W8xq;Bm$_&{eMclVLB4K1M)}o(^YY zC%7n|j~N)25cB8rMEOtHa`k-f(lI-LnS7b(mS5LzrmkNr%<+bP%Y*vW8Tu^eg+~3= zQgi}!Sow8cJUXE-=Qi?|^FBt~>Zq?ox7(q?l3z4YayxfL>b-LdFT9ar1yOW|vM+!_ z*YT~}d73;6n12T`A$Rb^#9fFZY#VE|YID8j1(>}_Yf%82Ro~!%PNS@3c1uv!D5^Gv^%OmQ+@0_nMcBhpG(r^U@R81U5`3}Lws}4t zH*Pfb+L2(-$Hh=pM+0DW+(8Ul_F({|De5~KY~Mn0Me0DCdd4}4?Nlpm=fP>|&p%I+ zn%#|a62%?F)tx-vAF+Uk)8f;gzK{=N`f0d37V-DO=`@_SP@4}PjYrZUxzUTco8#!) zti^$&Zz0|7yAd)Z7ae^I>7fIPi;lj9{YAEPF;G?OMDp^F{3vxbCc37crz0!*5Y zk$%9NFGczoC)NUO|5L>R5DkAK(Drv1A->(il5wU>om5qaLtW|l4!EpWVI#Gt4#Zn!H-G{HZjn4v_%d*5 zOzp4TLrRQvp>RM5B};j$tZ8=CtP>mA^-{*nUV*@*Aq z{qa&%OGu3V4CUk0IZPv@a}OEuc4jz;^H<_s#H`&g9VpI<3s7|tiy}yKUL!j$Vu=LV zoVQV%mN1PP73Taj63|`DGQ=eLq$ua39N$1ILxYd z$Nn3;87Yw?dNPM;_}yvge_M35X48)}3UBcN10u$gpO3Q1ZTg8-Psff|dY2 zupBl?V%T!tJS>Y;J{JBF3iGWi>=viuXBL)>R$j(hCGXo8e*M6J_%FDFzs6sJBY@~IA+8h=U5w{5{C)dp#X^BF3fZa`Vi$EfdW45)*1B6U-( z0d;e}u31E<`*^&3&S?=N?&F06PE&i{XDLr$499tCWPT6;{-l9Y;<)*_`*=Ci&y3r<+s|XFm#j2#+I#4LVx@`Go^N;IAyl){ z#Az?EcL!jzV&Yt}l0V9~$BT@5p5lu#VPb2rthGqeQk;Zu4pFS(SCFQDi>_v?&0SD} zlbvbfr0pJF(hoz8P1ogiX_VX0D7Pjk z*AQE)JpkJ@imkg@>2K9?M2`EJLaQe~R!>v(UAsxUd5zw! zmhSdZH2;KAw_1AWfD%UCYRR|LQ9&(?y46x(Uk|_*hHeet!`JdZlEuq=_=qeE<_^nn z{y7Rm6y#Z+yDOY8N?!nNa?skA{)`1sG`JlPVFisY7tJ2xaTS5yeaz@xm)^TiS$Bhj zdN-P?M(+|_mnLc5aAyt8&}66XGT;Gk)P7HaVsT8|1;GtIp#6_jJGL`lt!r9Qx$DuTCxGe_q%nEKw#)W4BQYMn|R za9>=b2XsXEClAmlkmAq13a{$xv3zb^Kc5!dsk^~n5A)HyS%!bqBiv!EqbnZ`d{u&V z^g=Kj>u5<^q(e3yNne#{i*+cBM`CGR{un>VN2ZDv4LmmN#a39NJQbuplOl#T@IF5J zE=BX}Sjn}PNOqVDAzX2tBj6PsFuBITf3%%?Lp9g>W&n0+`B+xN!*-!3h9DcF&j1p? zl7Z5F@+DYRCcMqe=pk8q!|^j9`(j9v>?@nX5cap4`YaN+N2XgO*znMWU@fz~3)N=71Em)GolUU*w_8wy)!r9*oBc)L?e@1I)M0-EyrK3VGcm{5UqU|I zE`vA1{w^pZB|eQB^o3jwEqL!LCRrjK&BU73yo$#+5so!Hw&yko#urJUb1^_wIUl3b z-5$I+&1EN>sMtr4JeDey?nBZW%p`X#ahZ777M-iFn7W3$JFG`#ER9Egqa*19KRyi2 z49SQyqwixcKt07OB_bc!7x_{c5o%pZ6R)n}t@&$B#lP3^?9i{#7PdQFZVo!nZyEm9 zkJGnCw&o)L2|kKnY$l$3f{)-6QpMFL_^^Z>ROh5{Z4IVF`kRZy8VV5p(og4zX;1Py z6K0bGHV?B70_hjPA4bvS9!PlKl)VX1y2K8w7I2vEMVNQbO z`rSVF&lI6@!x9X{4xf81akMui$n_h2?p$;x5CIWU!`%fi91yw;UO&X`ZY>^O%Mq;>)#o$VAI7uH~~^^`trvIT{;34k3v(EXKxVx|u}1;|N^})5-N$XQm%Z z5o^}*RozaJ7LQ-&`4RfEhExPi7z{;E1bKGPOYcWc{iMT8mXhmt%}d8awV3`iACT}6 zx}FWaF2yC2loN&&apGydhI=x^9nTobKJpA7z^gOFPtR}-(mkC$AB9OA`!1USF7gp_N$mEbpB13-!rryVdA}O7|IRz-oKA z0aqaAiL=l0yo6WCPBqu7`j_5j9&R{E@pF7Qzdu7f_Z;`~&S}E39!I%Xq>KFZJcCSK zwVrq7i!#Kf^}IL#B|}_Z&s*`C>7x1bd`v_vR{E@o&0|#A*F7plJn}qG;=Yz*=kt)W zwWavudB}ghsp!7}^5C~~Ht<^v)!z>ZxKo{>`uiacL(Vw&zEp8+12&_-q$VB-aomZ` zXL{jOnBgG; zj~XWjYaH(0Ni|Ili3)0P4|&j(kiY<_P8~mDxnC9D?@bO;Pqbj?_~SRkWi1_ zM-`Ii7aEzLTXYS(-71Oj7kGS>?qbI+0k_;TFMS(MF66zys~qLz4jT;eEnUSPP?Pb$ zc!7_#e@6X(uTfSg3O4c9x8^hl>RU~hzO93#J%I7g8aQ6qCf7{BvhB1MLas#P%<${) zv@j}_>!0(bZ)hpDZQ@;h`keT)7J{z~VXE8QrDW7!w8k<18F~3HT3~=yx;K%De$fIE zqQbp`{OT7i(J)z|Tldpnv?d0e@BV?>^o!QgfXh-#YY1#dua)KcZ9dt3Pll-5%)1Xi zM}pqcOf=9=whwN14W`ymW8T&*vAS97(sdU<)TpAA@ga@T<(fJUti!>2m+srUz)Ato zv4!`^bW_*#Gi)_KSJIB_Bm+iiS|V=A?!se!uKQuN;rPY!sc@&Rb`0Cbk!iqKp*OW|G!j@5!f<0@5Z2rPVr>wY@FN$@m&O){RICc#2HIMGTOiR2j% zaow8h(naDcytjQmbzX(RT`gw3!du(BQVYi#s5G(l6+S7XEjh_hZaSML((qFVAq7N| z&rRFX#N3^Hbd!ECd*IRK6sd!SD^6eNf1M9V(hCpj`@aACpIm%5Jh|Wn4Qg%|PERhX zT!v*(^oyiRy@kQ0=?_B}uI-GZ*YkHbV)4`kYy-Gr^dNe73gzjQheJ6JPS=AZWojdR zrA~iIr)MeR{#W5f&$kvYyvh@LE+NtqopfITPI2g@Z4hDHWi>NV(z1gg+Ni0dgHcnp z6n~f)^L55d5xUoy-J9>_E!sa%CB3ZF2Kw$m+Kbsoku07@gFny?1TZ)@xb(jhZ{wpG zp&#||GMQP%e$Rf*i) z7C^KPXpw2)wK#Ra7P&fWB%l}_3XA+3`dM5$5EVI$#JP3A6}f;U#OgqN2OMr5gwQVC=2bhg~2gy3n`~c8+V8)el zArAxcNtPzaKaCVa@HHm6vbeR_@;tgRYSyGG$vQ|W6)CUrHTpY?*IwfzdJ;8NG+RCf zDx;z~*DIQ9ROHI!)|r-dm=mK)XH1Z+^OToCEyZFcvfgf4CrS?T*81xY>q4zRBx>AE zuRoqVXuST|jp8QHgWJR1745Kzv)r-;P#Vr`;FB-weP(J$2FH>6=SBGIJSLuWk?Hxx z7U`fig_&6w)Ms-#uBamab>7T(82k}Y_HLFzc=(8)l(>@yc$~5wSoxD~vSjbe&B$x!FrF&lD6_0MG8%|UnIh`GUU@7)ZLo>Aeho^FGJ^~!TA!inF+1R z^pho?c=#c6sP&L|5`%pk?yTV%@#-7+wvRaE`nTq#oT8nt2=gZ{xBMrII(?nFw;0yQW2Y~gZlSDynaF)7RxgZb5HUesg2sdNEFZ> zVMhPk`>7;#fBgCxH9yX%W$3C;I>H-Bb@S2dKS6P4qw4qx3IYt(_Z$tXUip#nYa3$W z$9&nu?bwiIQSK}#j<e4Uvmk+)W}Ev!-|4C~`4tdtD@U#1^w|HoXcwXiO*BbD1R#hqrDh$( z+0S@W-(iy2Pp@Y;WOUGFY$bAi*Ry}4Moph3%3k&-K!vq5YWfsZM*DlEP179%-{mwV zs!qDRGEh=@W({H3WN|-4nsy1wbN@<Gx8ZEx$X#;LtXhht&(1`e-E;O7sEHvgKA9WWl z%o3u?^s7J7$sNVxU-CS@x}*5|OWuih?j#aV@PPzRKf&XD2RcGy8#fspSmAC?EwFLB z0hhVIphnwxlmU-(e`CP$20YqbZt$lW@Nl=CV0%#B5O;(D2OMO8dzAr)8T5Ul+zSmv zw1FtZ?@x3Tp0D^gUf4-2`ihtGmL0`+U-5w{tBLSkHuP>x8N6O{S71TI4l{j@ppA*e zIby^~j+369#EO$f3%@$aoBK8q-=-klWVilZ;^rV+Aw|a!!764tJ3`Xd=^Z-*ogAar zw~D!G8OZCa+#~6c^g(7d0(YJJ8)ADX2;(45Uqal&Oj{tQn=a=S$Pr6V@q|cS*gY)U z5LP2a|JqUPIK{Ka>jhI-;M)Zhyh&2}G1JQ7lIGFlUOR-9nBfLG!4NPr=3xWQG+=y$ zHH13uifP?2N&8u6OYA}`9s1QLOxiM&)+j3`bV-Sz<-avr2eb%U{#%_oV2fCdsoxr-17Q)g`nS4tAS!}Z|5mpSxFTrv zZ;jP~_y}74TjO-VW32wI@qDDIDOPK={I@1XeujPu53xBcL*WS#^w47qv(mvSiDJ=n zKk~F(ibb|4U0Jgpi)_(W(p=MHkXVi#-il>?0c>T0Cr_@=?sBh-E+V4n_LO z@lmWR>4G<6@ud@~w6AgMOG?lO)u`YpFeSdSyo$;v8s+${rh7_FX5>y zaq(xYb98;8*{~Y~WcKiVME;qDw0vNszs;|Fo%-Ma`ECE$KY2r(SQ#nz@E1qOI9%8^PW~%Ajcg+=Nunu= z{!&Cqyqpl(Jtc_18c!=k!E8|y2#JN&ww4>a*;f}9(U^PKvRDo~|;k-CXf335!tI*aiG72o5I<8RX677>ytC$e18 zEKwd~otYbyH$c=U$}w!VSf41ji=TB%5Kr>xBiZKy-{s^Bi z3-917^584@;4A*6;#`Uxo%;6OL5AS#(%=i%;OpHw(JWO?_r1BIkr3~FskXDY)8Z#B z-FQP=jXS~Xa6g87a69ZEw#6!84EkG&l$BxhWN)?hbex?sb6m z{ly`$b$(0ZIqxFwolwxGwQ-8`QQR{C2RBf+w86$X1mw4sw2`>4!JS;@N8H!oPJgc= zEfvXWa!lUU97$UM_TV0JaJxCUV;$UwFYGF5)HPdhUx_<*|1~F!Jxt6=llMej-W)Vg zCZ0#B{(S|ace1F?Lj5luS1t|O9V`z%;{}SPb$a=|uLa8qpHG)UV?`NU zSq9gk!BuQ<-K(#XX_5>sxr2-G;4*zjk+HxJJ}A742L`INx(^;^V3T}2)L_z*f)6*r z=cdB`_^lOmN$?LXL_;pWA5=6r`O#cC))SzjX*4(w2WM?6(pwa`2UilVp^~-&3Itak z!G#OacK|-P96CEf9Bm@!w`hRJDO89cX1G%@{#_kqj78fRNxO)0MdUS=KUL|+2wRDk z8FHM5Le}g+nv1(G2ABEBQ@9fQGGv#Faul>EWd>3=-1Slu<(A^xiVLH=O#2}fa0=ZU5q1v^UgMI@!M zBB6!6R;5p$XH)hu7X>~FdXzFfMykMFJdrJDsg&d5g-m&EBE>t3aluL{Pbax4ZNbY) z*l_}dItp`?zD5cvMxl+u8YK#AlqjrGqJvSCUPKDgQ)Hv4Mv0;trMf`E9{Q%Ha;$F~ zUN%jtT|mUFW~u#5{0KAA?42o5(OuH z)QNpfWvvN;6sIUroT5Z=ijp$cNXN(e|IC)N!}uyLnst{m_@Up#;O_EDf=_pslL6nY z^^pBq4<)q1KX8-s7~?w<{l9Kj*0N@=;Wrx9&THt}CGQBXw=_M9Yu7~l)}z{E_a`{C zj(_~irv9Bc{gi8BuiNcA(yeI33(5@K+tlwfS?s@1d-g!F5;%wPd~e3c3?iiS26OfHZ{h- zWV`YJi)n=)Gf_vj#@E2=sKOHgV%FQ=+OOdJaC3a5t+THw_kXp6)X%N)-@Oy+cl`#@ zRvmrhJ6tQ?#1|B5)wkc{T001zPpET$qU!>dgs(`{JK5d%-~t+s0hun%KhIyWTls|X zw#)q8UR5;KmA)WoR4?73YRxa=m()T+RqYm>CY3|NRIQZ<4=j#wb2N5}6+Ca?DqHaj z#iwxG_pZH4nw*_z5id}t1Sgyy-JmoTSN19qZD*?BYs~{J<};Y{3YpbRyurp_Bxpj+N6ChSwz^7Z!$>wYDNPqTINnedu5xZn0MbtrD(jQhW?R=b6sIc;n-;+cq{8b zhnKgpe@6iCXZ@}K+R5JkP4o9ZfYZIcu5>my^o-7RkWTN0YmvA{yalz@$X73eJZcN& zqwhk+s`D#4e;pHsR;#XV#N}pmtTy&h7p`&d{0;i}>1O29UjsdK;B@-3(fFNZv(a!K zXgIapf5$=PbryMJQ}vE?uksIjLwS$+ZYYs`7BhZGRZ?)Oy#Z$o)Q4C$Uc%zw`boMy z$u{F9ueyneG~AZ(FuL8z`{7uIdbivaZv)k(^4?asEt5I6Zq&!*v?jPU$UhO^Q*u)( zTPr`Af!jKHCf%O)$=?#`Gja#IJuB}cj_2f-crUGPlm`*V3vw*+Z9$+$MjGysmlFG{awQp+?8(M z%1ue_({f~U99~qvlcy5t8Mz4w{a(IIg+IuTlI$PlCItN?pC^)^*WfYRp*N?F3AZ|YRts3DvF{-iC>9La>|w%HRQ}fl-V#e+rDVRhgB}s zx$7%r;@#rhP9=)PiYGTIiLN+vX(XCrz5`deHeQYW0c&wND?u#yP-!AQcu!G763xX) zq`oIfOy8wM<#^2bqX3)T;|P0>C7Zu3LHPTarI;_`NTy=`x{M0`V5w$HIpr>~G|{cC zoSWWEbq?MN@k!0iYp0+@^*x1Gk&3*Xw=iGA%UMN!n_~;&c_lVXku}Zy=_7=*Sj;7> z#m2)*GHWRgA6Bw_tpbtLX1gg~hMdJ#nQGfa*SG`N0aN26@Ty)-8cSEtChT;n$-hxP zWocVn(*_ew`Y3F@sZF*KzG*07nw_I-^R;wsu?(ALYUWzHw(L)otxP^5ZT%3TvPwx% z_7TFg*-x0ZO^7I`Eitz%AWZH)!nB`7`A!E&iO#D@#V(nYzcr62^9m^6qaD%Y|BGZ6 z3?@vkF;rSOn(#&Ah^u!+I~qcLMp1F!Pe^pX9ds>TLB;*!hYJ;=?>bP<$ zD0!Ura4}m%&=S^>Snp(2B<(JCnV9cp?TBG1dnK3b zzl{A#9QUwUByBmf5XTBOl=$yuk5Sou>?(2G&o&ePN_Lo_dN!DZ{)_FP+bZ@W-5y|l ziTyzqLAQt4QeqeEFqJ*bTF~tg_9?MH%GzX+{U2i&iL`;uBH|ZH%`JKbqAt{+wA1(9~=)#Ni&M>n9{^WRd4~JS`C8}?m`Ez#v z^G($EIDam}Kc|_R$Jl)TuIB0+jCJuZ%2c)}+ zx$5o^Hr78rPo1HF?z5hlkCuu_1^9$C(|@Qy4bfPI|KnoyAsbUfc6#0{lvt#rHYstY6Aa0Rpic4TbXHp zQ2s*_D`u#%tj>Se3^mTou~E2ozM92x2>0XpY7?w4ug+IT;s1&ne!F@L$AMmPJEq9_ zqU{}OM}Dx0zv>P(jG?=IKD8ZNBDVX~dCV!Y7hra+5r-D2Z8=UsUt6Gl#4`LJEyNeJ zEMK%=tj^;&g}rUD`ZjAL?pUH0ah&OXdx`o1Kak~r>`wJo{D)0##PPfE0dBtNdbgSx zNBe;CmJp`$5pS#PG{^reWY_>F)9<`ny$aJWTB@GqS9APz%hb;3NwMV~O!&h^ujT3- zezLtduv{(V+dBAdE7YIqzcagZAGE-?3N!ClN1{uP+^>#iY?!}Qy}BxvWr_nE)Y~{- zZNzOn0aRonDV)LJUNu6rq z5A^bTcdCl{HVHd>a#MIG`fkK^yz>Z0v z*=1tqest3lh2rP^s+;dF6y^hJHa}k|Ivr4J_=+O2>455tU5D*Mc_ny4vQ*aky65aD z5+@F*1JJ##UsD%woT=LS8opMp_QxMo%czeQz7EH#6pz1-ua>(B>l;|s75Z1ap?+xQ z8wZM#!>WtFHBihujPd#XKs-XIiTJ;2-Z_kQQx|{5`&f)Im$>|adWNqXCcZhMj^HbY z`@0@hJE3Doh`ArC8T{-B|GE#=+e7#RBSq>7wHrS>Qk0)iS8}`&zHkByIGb4h71mSA z-B~A9BomSuNkg(Ag&LNR^sn-ju`Q~-{BI`zX9z2fg?)v_{}j=tbW5WL#+PIFL!i%AS)tXbxabz-yNwA@8A)Gz1|@s z2J{^4E%b;de|JQSuU>Ps4EIhgC5Cb|kpy__MC?JwSdpZLHWMd*ca$rrb&BYI-qA(K zyB)>icH|PggL?KX9^&m$*t16;@35YOiV8+}vL$cv(7t^=S>n{&juCB!4n~V+)l4GE z6DC!X{PC6LB~>%3k?U1Fv`62fK0UpLO8pCnTbw)Kh!gi8b%cux2VlA{&O73o_2}Eb zN1vj6?+~vCrkFIbs=Q3M5ve=DJE3Gsxwp2iY}$-EasIp`T|D`!qn-HXJx7jk{ozQq zdTR@c`u5bx{O$j6^k9jG;)9EN73cN!4lWwm)6*sgve3H~(`M9&Rl6M>#PU7(vU2X9 zj`%i#J|5h&XTH(L*=^e9G(&@`YH_KaR_jF<755)fIH><^$>T zRp#cD5F~jgmQ0;mg5H@}g&b;`P+2~^q^8C*Dr=17Ev=kF{U%Ho9Ib`P?`SL9U2yag z`(JlBA3Eyrgp!@$M!Fz0Q_Q*G808#4Z3cevg}T0`ZrZHzwXh*vKpeT?NE9z0cFeHl z6%Q`T@7bfTx6tbmzW{BYH6El>O9PZ+Ux%@+7aijxr%jkpTTWJ(QCV41T3HS=h$ol9 z2Fs43`9Hpb(J&Wuq28L3s4!TmgKMf_HbtotrGHi-IHFuXeMaI}o^ zPO9~epIsus>TTN5z=YM?U}R1`;%K8$PtPhVnImj3J6;IA(TB=wYQ*EOLEVvWJ1Wxy zu4dfG*~%uBO{$ut8x1F10%q8I2*YCUJ80;=hv2razvGA$BQHDViO4;UXeT-K)ash@ z@wiQ@#dShu$;4W5^s=LTP-W=^>NZI3(Z9Gy-jM8!*_m^id1iZ3Q$2HFq@KNsioJt} zL-pyOxO>HRmT=a9TXy>RIcr`88XaWAR_eSmS>=Zd3$AH61TO?f%>Z*@Dk>5Xl~ zhXMt8Lkb3a2j^4Ik_Xf@wnjHt+n~YPHWRJhLhRac#gUpjfr0?}I`vY(eZ7PG zdSvO5-xE@Gk=|M3D@x(dWo6>~D~?X$&z1%V*!TL2j-KN3Hb<#A^cTWG@|)<9(|ru<0n5%Tshm+RrX6s&h5EN+xHbW1shm_>C)ylv+#0J#ba;Z~MbB4F zlXM65R+Z1L6QllyR~^~o=qQ%`?HC|@I~~JCr#BH9(q4D8OeBp>)eHU=!ii^P~~juH(=auL|QQ$*Z57(%n(cdXS)F&fJd*D#4X znrC_Yb@%q|S?ukXH=O#`TWbv6lDfK@Nu@LD%Dq!dD$yNY>b@$Ji7&6g30ECPU$H%o z46%N@BUQ{fK13uRgksg%NI0(cCyBrC|^swfT!z{ks<%kf6SZJc9d}?{k#PX`~b3~^j=(tYrI7T+} z4j(*ZP*HI&nh?E^5y)e#RC&v1Ppb2l)J&|U$SdCTI}-a+gw749k)2Bso`z~0(k?qI zh|ePZ5I<^ZL>q43zqp{N7yO<&1HJ5>Fr#X`NaCTjc73vLjOZ(QXnbs0?KE!%q99F% zc|&>*FB)RZKyBNIyAC*-ix+t4o*o!IG%P7B8$kwDk@54o7xgU~GQvAxP+qToc~~F}0F}LXoU_Li=o}+uZt~3RXfXdz;J-ma54j_wTb>J-+THFIof!E!J zwTPG2J;iy&{k;YK2ldMvG6a)gQGc;f4qfe{p&FcrsYj*2;zSfEp`#rWs>r&CThpdZ znN%*GP(quu@_K19C9fu<=IEY*z?_p!)1k4H%FE9uQ)3-fDn3#|i_B9I%FAl&{GY$- zxK*}#CzjWhVVc5t6)rWje^C`rn4*T_xA=>O^u&s(J!Yy0FG?Fe{@ zmFQSfA5;so5&Hq_dGf5*mPTDS?D@-AN$WT1L*>^&l{LbaUZmpoaX0xtsJQhvtKphy zXz`Isd2L_%BPGa`ZMkf?^KV>Dr8IB+~5@8x4@z5*UV+y{ie5tOU`c%LgT09(;Z>PDzRLGIr& z@wAAJVSON!N~ln(5R-5@Q+Dt{QG_ES?0>B;vbHH3RN zg~JWM#wiE|xW^9JT&#-mo$CXB@CQFAAFhQapfE^FSejTnT;+ur=dV@v)u_QCZ3v=z zd2=|*p+nC3$#Y87K%EY27*~|2Tpj;3B=Zn2qz&$ds)n70^wfI-Tap^mBgo#Y^wfrM z*o#2kA-hVnK?FlnxZ|utJ}W^TF!5Lkm8zlLc}bVEC8*O5nOtg!q(d9vSI|%Z;~A&z;BYn2sClKeC8A3GEG$Z!3||vdrg@d7dYNW zo-I>(!Q*gG!Je&;y5pIWhRP;iTCVaKvho=&LzqJS)v~o*6;t$I1!#-BSH#~dSA%j% z^EVv-Y)OUjs?Pg>PUc8e#B^669QJ?fVq>YS8L9HAjwW9!o%!e}Uxm5B_uY|dXyB`` zTo{QQBFr5HvnJFkow8z-$`4Zee75WyrSi0RkQ{-Snjf1K=@q_(%PM>ea}EBn34dzB zmrZ!agz1&OKEk|U1UCnp^AM-)wI+0PWpnrc4MWVj{<4Q`y-E!Zvix8=eYAhsv7`M< z%{AeVO?c+-gz00;clMdl?DAb(_IE$C?_bQF(H-MrHUFo{hcLi{v5_WBDRy92#)8 zG>k*5{yV`*p9@uMl}bOD;|FW}V7DK$D_?sRxfLOtz*!FvI)-lC}+GDnqaAq z4v$y)GJQBk*#beFsZK+LAXKAK<#z?UYt*=yI8ZsMf%u z=UQl_Qp|mka;R8EG=tL--U1W&CP%)Wpo(?f@OKqUp2-qj8z6fQA-h@pLD|I{tix zJlB9>f<~~0`mt4?B%wy5jzc^yYcwiYKAqc$5f{1oA!Pd68)R3bpV8+bBK2{jDk`Bx zyNTS^bNX;RmjVa%gDHaYrOs-pnuv;EbhgZysPao0wcE_QQ)V#bjXEXA8|v(@mY+>D znP`?{u%a(&ccOPE)fWZA)6gcZmrEv@@@kV>M49dRlhDf%-aE;^jbE7XEhE2RaPDNE zZ#3aell^pC4F07Fe`n->Ghxw{zTPww-e$swP5APazTGn>OmFh_$C_|nlbV)tw8-44f~P_nPr$bsjRVM`!D4o`zh9&ek)86tWdk)q=`nv_s|~n#$;- zP?F`yR4EbntoE3kuqv;OPfn=e# zE}epA&3J)Koq~F2)b7&nuJ>#(MfXHMwiHG7}3&t30-BP%~F1q z8XfF}^9|OpZ@LOyfN`v2Z$Uh%Q}#hqi?F2qJBU(9XUWB@Fqm}8uvScnbTCj)>`2zg z4XwC5quH{)RSnH!)b8fD8RwjYy@T8Xv*qPh%x^p8G*arTVMRQBs>&@S%^kFlLDeQr z*Z17geb1dTV=BhuPPxMmcKN}pQ*{=<01D9ze{FK40ki6gX=+GlNxAVDkfc#+pq|82 zgeCXereWY<9Lw%I5l>;fuNsGgWRTdU%AmmzT!C`>?kZ zU8{Z*qdS8Zcmb~xks1eA0grKTBk*(wUkNK7Q(E_Yw2>hhRLZiI$^o)^Xcd(F+`-N^fy#_}=rDlt=yuqdsbEhPL=*26}M?m|lf zjsh1Pysk}+O6pf{3W4c(+HSq(^16bYa9$d*Q<8~QE0An@J_k0P4$n_oy6MM zhg;kT+zdg$ zy;ZEz1t>KDcR)ZT8hOm&xsm&E;7Nv$B0S~r)aT!(5#Z;i=X;%t>E~i`PQa5tBNL7E zc(KALB5ydDMu+t2$)|?nnEa%$6kV@!!}O2=#4q4oCTHiOkhS}t5nYM=*TVUQ^CDYl zSvVzG(7`?F6p`f)p6=fR z9d@h=lh9?yVmfP;N8BC^N9 zzt<+~I4gHmUU4u@(BsJRe?-aHU$S@h+b;t0(G4nZDR&@PohTxGvCF_>+Msum#Zg46 z9Za5HOO_|*E(I6Ui^<|seg)H!$%>+goN_Qt(80;&D=@jYm^?Q&SR6%Uxr52CaxnS5 z4!#*9d#`qk1nAWfaQLNp|AVq2P6kRcBYd;Np9fFOBD6d_F(ZKZrFj=Y5Od_WJkMa& zG#{9~Fbe_h)Vv%g8ZCB-8(1pwL{lK3E9s_}G)^zQ%{H5Rvfsu)B zo-SXO9|nE}a6CP{Dd`Jl6-uD+IPh^}Ad2vIybD>L8REN<#XL&sPT*z;Y&ZFp!&9HW zWmbPY^j`v|1FhDlH)q-KxB?T<`OGHZmkRMTbw_Zo)8VPl_b;o@bDq`%Z-c;=(14OS z&m)iq0)Nl&F&g0OnKeMXKLOLb&E@IkX7Tr7a5C_I2&*MPv ze}Tee2qMM%Op8@}$zz;j=>9%M2=fQ6TzQyoSgx|BhB4#Et zeBrbSUPpq9z@4^{fLH}TKg+X<==W#w`_R7=_yh#@2IvoH`A@*l0lwSe`I<@|?JwYc z1%;CkyloVs2=~B$5CMMv6P^Bq7GH$^0bm|y$_qw8TsuC_GlR1oOuo9VCr`gbh}-ZF z{T?Gu3j{Z5o`J=X?Og(+*sL(`bQ#=X08;~RxcboJ}=Ded)%%Ro%{HKr3Vgxnq zC3zu_#~Ut($jAO1o7hj1=8XrxB7rBiJnjND+8obQ6A~l=b4a#TmF4ifZN3`&1_It> z=wF(kU*_=C=iV)=KMneoz;;B9^7>InfeGjgY7@*sf`!0#h>wDJ$l>rTeaR{;?u|>Y$QD6ePyV?YgLH`-xC60b%N}Q)Y-D0i&Q_wF2e!}RJ z=MsY9W8U*nI0nIEjso3ije_p3)l=h`2IyYv@{1fyo^H1;Uk&$Li^n^UshS@z7u=WziQ7G=gVvE)11?j?UaTJkH9Za5!GcLag{>&EtHd#JepfY34 zQ7h}E8x+su@pb&SbNWKtG*LuOIapuA!Q{`wR~i9+e&y14+Qsytwm9nHCH1@`pg}rV zI||-$2fwEqP|gWQ1RGvf_uwAzPHL4f*Ltj#Gk&Tuj))hkckp4^wOI9^U+svfGReWd zHUEDO`TRUleA%S8w+lGFJQDPH@MawM_FmCg+Loy)u@4Zx18WwXfajs0a3rV4FR!7) zd;Ks0=SK})o(pm=E=<7Hz+sf*d8E&Ty~)4_O8j$Lh^GR78-xS9&&RxZ5bQwBar#Jw zMN|m+qc8ED!0rVf06vLF=6<99AaDcTwD3&R>7NCD9~VHrH9iV#DKj`1lU$zhL_^q4jjLO0GE5bJF{@ug2~V>VD_a|sKb7k zWc({|3&uvi;j=`a0nSPBS7%}ryad5nbWo1&#IFO}<%bMl90I^U3`aoY6xlQnp8DRC z7zz0Rr9PbHy#|cdJkWp`pSJR5q+x!INgZ)7xIWZkgyR8l#2LW*P-U{NR*!y?j zjVQ5F!@unFvF?HA9SA-|k$~5Y?0sLMo9BnID$z?=}V&!O&Nw6Ha90O06!FK_>8Q7kH_W++pE4Smup#=VQ z;K?yef`%J|A0#OJB>{7Ux)cv`oB*NkARE{%u>xQ>Lt_%~MBuG>jC8IB9PfVqU80nCBs-xBm+1fDg~|3(Kd_!{sL^r|d#!zcQp{C8)@ z`}vnp_zYt|_7dnEhQoN%&-POD%)pTY>}I$ect?{z&*cR!PvBdCFXE}sB}eizf%%b9 zK;4M152OFN2A4shJr`#enGD2$-$5Ow8+;#dIR+Nq0UMzJr=X3zZTQ{53((5#vtvK7 zYyU;y$1(T%++^rCyg;ETLgw%t;FHe4vmM>65dA*ST;LP%oEPx}+${35z=H>4CEX0Q zA>Z;tjv&K!djeH#p1|p9XgC@LU2;#rZ2CR3V0Iq{sM|1%aEOAOVj7UWpk@BNFhACnWGQf$>Hh z!GGu#N#6Ad{1V{!vmxZIOm(_#%$gPv9R1Mnl6vD1L?x0yj+X zkD6l!acGTqE0#3tk)HTD@c2PWdr97Fj=dO*@B>Fc{1@PxBRF9S31}b%9o#LUOA~N8 z@R|WQ;>)y&x&;1e;1oQ3jvIUPfS>fMG^X!xAq1Z|t^T$I18)IWId`-nfqxMA$d&#F z9hl+Wz!CKGGSjAhnV|m?Fh3|<5oq>{_;m=DVkox#_yq7Jn6V5uIsP=kz{LbSpx?pF z)oMf1!Kdz2(O!z~5hE9POBXJML&(SlvTUt-Lw>MU{a)JdQVZnxUFud@x=t;WkJhPK zGIPBul+N{PzMNSPS=-%eglxH6Jt9^2sKxT}J*q*jV=e{WDv$cr0QOP}`k`72kp zFI?8q-hQz7UbQMocHgJU<@|kWhRocgI_3RMDk^Q8u~q7>&8l6#-K^HhrY&l#Out_Z zllAwjB6;q9>{q{jqw0I`k_Xg%NhOPJz`dGZvI)x(vfrT?^@OmsJ;{s8t6Q-vfRl>? z`C=>n*4-T)C}rDJUxRD6;cxV$_AHhy+tdJA4KB#n6#RJ_f>LaddS)9oTe5Ey;1Y-A zBw&zFH2k4DxLwhOvV1$XiB1LE^e36S9or7N{)9nngsf%!X?#iId>{Ea;wgLa#q3Ar z&F#48^uk`={ZGgRhSh9EEq9^%XYFM!AwG{8SSICquYzg^(P?mM6qTr#R^45)% nosfm=tI+WC@iu_lT`jM6VLxB}Y~>a7lQT@xakHfFPy_xK$0^i- delta 53132 zcmc$H349bqw{KN-_e@V_CS;w=B$;HANkSkCfdmLUgfN6nc4Sk+K0uHiQN#(0h=@o4 zX_TO>3IYNOMm9mk4M9OsK~Ygra1V+SK;`{U_e=oqcb9kHyYEeY)m`V*+3Hl)>FVn0 z&Z#r4Hay#Ui8E}qnW+Vgv6dATsj01hoWd9-Gcb&C{LxR)!2`Uy0GU#iF%w~e|2|*7d&v&A-F(q0 zWu~$er%$QgtPK#n89$^g6TGg>tFvmfmjxdcIpm7uV_Ez-tFEqL2g?tf(;7>BwN3qt zrOGMsC9GQdOZ!~n@qDOuMdEIEuWPb*-%#$oHk5f=43oSwhmjVSPXTGMmM`<2{Id3q z%#%e+u9+16Rl=C7-7l55Zvpz5Nc)DGFGd9E2Wygvj~1C%wK5ZT)=RkB_1F9<`$~oP zS}6pBPz9k1!QofgS$5Fb^nkDY06Vxr+h*bu0$X%@87tpCA9bBk8q+zp%Lnl@ht3?+ zVrX=i1V76XCnCE5ndMKIVxc^ZQCQ`&07SQsYazS6|P!oK-=4t<)T( zQ94JLUh_MBL1m147`p5xc%Hg#`7U_=Ak5f5k$2Sc%seyco9jyTv1`{aXZUP+Mi@kHpU7h6DkPPMAop8|iWI zY^!ov`Rx|5->*%M;d@1iU(1cn7 zcjUXOUdiC&2+Yaky#db7XD4!atGu)~dcO_%DL*&^ol{mjSkF!vkgr zJmBMX0~xbqbXm|SDwdK{buJGz(dZ)D=Z|fDylD&Lc z_e(R{vt<$9gw7Eu%)_gvUE`^)PVptzFTZ@ve6hd8Q=OfhzU!B-Uz2Iv(rDi`Q~|xeXEZADnYOJXuiLEK^{Wd;c(3@)C4XI>Tf_BY3B?Dl-ss^Z`W)Iu zALtl|0_EE@dkK$ouLT(m0v5yDmhYZ}o-g^XO=1UCh%;&JN_e#0ejQ+Nten$^f-C*| ztCEjrT{*GWeZ}4V(!EpIGVYbY(elc^dz?Ol_?))7g!dMSs`hIMU*S4U`qAB`E@+8~ z!A{?i9XzeA?Zl(`X>E5WK2EsRs?^RrUQ*l`9jCN*-S{d;qP*oTi29<}P%KKwbJ?xBHB zAr`%FddaoRgRV95T)Vu#hNJPXUtazfLA$G7?}u(rOpE*TB+6*d4dBh`{QUsFj?Rk* z@_r&)t@?H#kK&ZMI*9+x!@7=P>Y?#W1%IlcxpFO<`&%T|i#)iQ;8N?8L;5QVmbIaz1?5glg7~?XKM6-XfNm zmY6H#3bn-2sdtT>rBpD#*vyx)YJUw&6|3SWChoYSM*czCF|i|QRmJt|Ip0-xT)_glvBK>o%bxMk#+F2%|Z9Teq<52uZfSY1?j(CzE3 zH2kohk5%`+X7cseWAh@g<{hbFdFvl)U)@$(Kl{Li>IXafQpT|AcdxF0$a`tY@b=Z^ zz-J7-tvI8!wQuCmjXzkFjioOavD2-6jePBV9zUyoco$2*4W`2;Z z*5iYGsR3U-Um>E%`0G56RXBC(B~h>&h9`yV0@l6mQr?9wsj{FMFh> zcV7ImK0YNi1`X5`SF(0jcj7&DArk6ZYlNrIPzq!H!nT5x_T@v<5tIYY{YO|!~OUo>)@{29Y zMxVF&xW{%)G}?Hcybxw{`FMe{%;SrI8}pi5>Px3t*6YWWir3D|KJK+$<0;kWr7dh( zeR#A^7kM*Ha*7g7zK>39d1#QS&F|UUEi2tS&~F|MQ7K&l@@7_jU(FAQy*tqR_afn9 z%l;a|)EAMb-s|u^?px@$jxqa|6}@yY+LvEiQPbXI^LM#42lM>` z`E-A5wMj9ZkT1HzzV;3A%ZSkpN)Pw2Ye=}`a(cy!u;(v0+7wj&IKY^ijmV0~o zNX#KfkWNr1q!GazA3mSw`O-PNrac>&xV)xAL~60fpHtI5;`Q^~n_A29?Q!1ZG&*@8 z=ez42ZN9qqSNLW$C`TW)Jx+F+PYr7jc8WD%)u+q* zcf;9qzv|C5v5T@4_Mzgpma-h_lN|5(qIos#^TND$mblKwR=2G~CC-C6&;N4X>QDDO z-D+v3iGS$!i?d@)*FJPFn9#s>Q1ym+dzG-109YeN`C0C!gDL)}OE(-$sg`+4seKR2 z?RMPZ+kNe~i_*2o+uyvyRKsUA@a-$I`!1bUv#ck){x8hxhu$$m{f`%YelX9A@|LEH z*PAR&NFCb6m*Q*dJ66NiNY7rs{KelqudCibGIhQO3rgnIbeI_K_xk(Q$bmu0rts33 z4^Lyvwy*X`-ct7-uivZZBD~wrd;JD>hBuSg^1eQQr>W%Nw&%Y+@9^zI{WAP+cj*{= zX=77@pMU5q6=x@*j!wi4htE57FDT;OVWmlamXhZihWOW@M%`JSP+B_N??t$pR}*NT zx9NN%bc?n=@0jE0N?XtwSDB+vp7l$sR-(TtrkGZ;7N z=;@~4&%c7v@;;K}i`f14^K=ctdIxElM`HPDFI1zCmthl0xUA&%8SC@$02t-{f z0!6sYbiaba1w|3N`42)Cr{@)Uedbf`lhzig$3c_@iUu|3IW9~Kabb!$fH2xkAYDFR zxLfhDdhL(*tdU#Vk|_|KbF%8=HA$VL{Sm(WJ;O_5N;7>2E)=$9)$hEtz9{T;ihr1M zSrI=N?;qsv}K*?lZAy;@S##*WAgD&Hy26Z&M!sz0aiV$CZ$tYz#rqQ+~euq!tdRa;>*LOXjn~QX+1r6M@{=g z?+KeX4z6AJrtZ0Zx!d)0U#5?2&Z}8dROkH^{gSo#I-H;R>+y!ZR9wKKuQ$}OO|O4< zzOnB-nud9mZn97HWtCpJyz+YcL~$a^FYWY}79Qw9vlCpnB41+Z2m1#B+e=K(Q(HRG zmirG{`yX;n>_~rF!4N*roQ`z?{Hm&k@ZZDoy*YVV9_BCW%0`YF-NDz9cR&eI9P9+Nz4FLMk&^ zs=QVa%|)|TRfRT@!=)d7Q8m9^9LpY9-@>A1tC6@zQiU667BxqQY{EU~0mh={>QIDm zKbEfz4HpNSOl@UhF-3N79T*iggn;%sAV>8gpxE9KC2G`z1o-Te0NA1yw$%F75x>RI zY(HgKjly_t%n}P@iiF$eJ0e7pv>A4_Q>S+@H`5dL{pwc z3>n9irlgU{*4KYVK~pOMQL42Z3YDfY1lg>)pQ+lx`$R^7OoqTyAE+!%X{mO=I-B(p z0Hw8sD4BJ{uK?QUfNVYV6M(ilpjv-~ok}|$uvt?+22i8}5!SCraeEzzv9^J$lwuul zT6+`FK?f48=Ps%NrucNo!y@nfP{q(wx~mJxh=C_T*&~ed%sTgb06i@Plt(#9Rqrq_ z)t5&Vkmvg8kj$By0_+nY)7v7M)#(IJEm8)mXLOn5sX)B6L?b<96UrgRfMk~|+9c`D%J9XNk2dc`wYF!CJdQqdyjHEoX_92t+GX#Q( zx<#EUXS4zLiw1#7qg(7}Qi*uLI!`LxzoF%7)16kR4&YKt^rU+s|n|Uf05u zXQD31j3u&|9O#JMhPsz3_i&Yvj^h|e$}FyvGlzmvq0Hgd4rVmI<2W_<93DfE>Il3= zq;q%@fi}lrs_i_kQr#mQQ_caJ&nr4TneqsadI3qk*g^&p^jpVblRV*8WLox+CsU@MxN~Fb2R;_hS@Dt*_Gvc+b8EK(=*wBa|Gs ze1Ir*tX$N;(?q@GROD$C7F&O&VR$<7I{+OchLjCs${F2=5^Fg1x-WDidRVRG%(G$7 zpeg%UJCKLywh7g?HX~`@g;OXRY(4djs`Z^Ma=EO{n=Kj#VirQKT`t4X`2u*!AQ!pB zMKy2{%B4pDyS$2MC=WYtq5=0oAoTD@M(RUO81R)4jBCzGvNny!{|4c)6VOaHC6fo# zHfT179=q!ENCKGS^rxWAGJ1*Z=s^|BHd<7LGHPeLOp;?CMLcjS#avxVLU!vxg+~#< z9M@_MgH58B|7{U)@>%bK>J+>vfO@wj>SHB~<6R8uG zawD=jsuBK`p&{eGr`8^3l&OxM)cJ<<7-F-*NQ%X=o6wVcD5JT$5}nYofV?o)=z`3# zDL|2Q9M>C1c1)xAR%Spp$G23U@dgy*h@|@5Wk^YM{7ldU!-_P=F0yH&L7C}zj8sfA zpghMIs`+FCDs(KOU_Hfv+B!b_AOLWx0hTazAe_1hR_cB*v+xHn`s^}c>@xW$o(8qv zJAl}uqq_iYmtRFi<7qgC`U)HjG|a;B7my_Uc?z1|*6O zXd<GD{*#b|2bO=Gk7xssVo#wB&C(mmeh)*B;w93}Yh(hvF2(rtI!4NJNB40;-3=9#n9}JQ5fE_Z6k{6znShO5-m&#(~ zGoXx>-^I}(&jd}Jyk&-9PI+!yg}LN~p9vN({|w0q@=K7GC{G2YTmAtWljO+XG2)Wt zwLp2~wJ1)JAAyKe`8njh@~b$e$;rT^%Vl85kgtQXuG}7&OnCr~^<;Uv%IeGa++|`} z^2mV9vgI!xRauUF0xEOmBpe&avmhr=&INBn`C(M1k$euk`SPVdR4*%#A4G9udFN;| zYa*Lb+*EE4(n5JXh?>cLe%EHDi7GMS53NbM$c*HmkoSqGDd>)fYC|q*6Vk;*(W^%L zGF`-rGncf#(uFtTBA88!dE{NxYpp-mXn7f;d*q9ReaygmnElWn+L8>hgZgPvT~S{+ zf79-&E5`D9+UdGtX<#A@<6rWyVUR(;7$ja9(-ao)Q~w5CpV0698+1R^g}-qF?KFhE z2Y>Px{|)*%qJG*yYu{%IYhW~qt>ktx00Rv9=wd=Gx)~KaolujxeJlD_iB7c>G0AZs zvk=-tHNa4gn<)TKEa0Sj? zM|lx%O68(rLR?QL1Qzqyy*hk%+%+^f?|>782O(Mm>W*{DTzd@klacC2Tg( z(MeQ|bZ(ytRGO~YHJPcUIy!(c9{&Zk&-ZyoWu~%(`oC%U^+jr+kes+Z znpo&Zk&#y>K0zuM>(~njC)qldwMJNx*-W|{H0}fIT>%-Q+Sy>R_z;A<1A4HaAb};_ z|14Gn{-=TkJn>(N6@mY$VDVp!6@mY$VDVpw6)I~kM=Yt&SPP~Y_u!^R*R-M8Vs~KZ zRWxir9yOdUK-L-U0Nu``{D3^xoNIvk8)fCzkBD-BQMSf5iXc4J()qY;4UrBCGIHAi z>MnzWoZR*-mEI9#5L=s_8_P3L& z;aq+Qqatb%pUy2mq7Pe_5cLcmHIL$u^*G7A2a`uYvNesMdksjnp1P(@$rVldjUzz; z1Dj^uK~T8?Wm+c@G~0l(t%79FF`ztaIYDy`sK9!aWY068LhJe~+I7gz{)Mm)@u)nk zo%FE2OdJb&RA)e?hF2fvQQZMewO+cS4Q(LGU0;yKN4T^PwT+74FAB?clv@$euQmuq zbdHEl)w8ikMD+YT;isUyI!_FY-2{EomqxTR<^XX$u4%T0qFKMy5G?KHVRS8^AI%MT zQ4ZL26F8=xzZB;|zYM~2Q&a*-V z3HOn*IX4R!S1Vx7O^WiaYQHoTu>oDc6rLUw;ChwnF@+b9v6$+(63L(`yxVJ#g4pcp zK=P;XF$V0%rJ5)$1iI%FZ~q$=4c9B0w3}GI(W}2M3^Pj|TL&RKdBrtc*`;qX3}sW9 z=QYxHO0T^U(o;Ss%sV&vqa!iuR=<-Ls&&c~(!B2`s`0f{`@FSOW|FnhG!{k_>P8%* zyBI^*#-Il#B)fI0pacBLKC*t}ZH9>>Qr{x*8C%HW6fC<%j=Gej5H)yIY9#dLNU%^G0}Sq_>*~K{8e+KhNvlME-gUk=%I!k)PnE zb9UT7>g4`f@)JD6AfIZOdxAGH%$OWoL)uU9+de=j78R3N+||Fd+?JTw>3X*F+#7m8 zxSh8)7{|sBAbmS|q``PMi|Ip>h8Xs)M3Ci`E#U*h-XT2QkTcjYUr(0NAXw(s)xH=6{qEURnW`W-*zM++)xH!2C%Qel zU3-FNjc|WJvi1gxOOsmKw2iGqddhS>GwuE#wO0awX?3My+@&b zD%)|7lF{a-dlbTYSUB!c=C=`B#9P<3{I=q4X%w?)*V|&m;`&&(o!)V)dbbnr^V??7 zWWTRs-xSMKS|jF_E72w5Bm?a+JYMG1?+I>K^wEL4f95(%1nm|04NHMKU;NupGNrvp zlP)9kM0<>v7p`kBwinrf0wUfnhmkb;84QUhslx03iFOYqN3OhqHU?4>Cv zXK>sK11>P&{&DpTxT^v8agM&OHSHkkh0h^;jugEJT_Gk~yQ_n6H>fdi{S8{bQ@<^1 zAO-6*m8E2mZG*VM6t3+BQ*)i@j?l=N=yXxV?+n3Zo~N;N*cD!LW>G=7a5UA&_}!it zwMd^x=vGEDkLV();R-;?E4{kZqqUmZ9$af>_FZIcS8gXm8oKhzU{}6!8)Nk!(7SRK z;%+q8VoSvK2y{zkUM2OT$qhXa(@vJ?eRD-8v49@lE$npT;avxWzS@U(1Q-wR+IALO zx&EB;moAVibyO^x(oJMZ^-LBmzne&lc?plMczT`4&tX4xUAHPM+BlR%>D9OpZhPM- zNqp&owzivyi|t1@yhn3uHqG!W{MN?7qg>2F4+$PdWbZG@QOM~9V z;X%CJOQ2OPkXOhc>c7HsO3o|A$ts-b4g64wJl!R9Sd~{li!22d+c5Ca1>q| zk?=dN*?6{$yV}#5a4;U{6v}WEt)k4Mz`RBoH){6-Wfr3-x-T->s7s5!A}w#f1RYZ>wG9`?JE*6hArB*zHn)0YS&6j(E1Trd9Hxu(|tu|%#bVo73%; zXAG=BGu4wek!vaQ7{rY4Co=EUY3HgT+C(#1F;5No(db?esI}c|Bgvj0g8l#SrqvQ0 zv1HF_^n%}@!>jA~&0MQP@3NQ7p%I%1nOf`Hg~RAcW7S|!@9SU%=M zHqgh7KcNlTImA5NfJY=;q80Q~bD=RM8kV@1T5y=z862aD=LsHec2bLCYM7|oG@{m~ z^w+61KBo&CerZ1u^rI=7JV?JKT10;l-)<85{6|x#kP*7lA58-crK1d?Kbt}oHH3B# z2|bPW8P{KA8e+;#oo^9SZW?%tm^uFtbH-%Y<`HnoNr*9Al4lz z-r|z_rdwT-WxCZR*(PVO+ZfhQ4ysL?NiI2})VidlHgiD8B}bH!kP*5|jwtXn z^)UKNg*?Q7yBhtaLY`#U+1ZG*OXUKizp%s+CWu@vJ8yB`V{*`WBaHsELJm4_T%sOj zv`~53?TJq6D^G+FQ;oi{N)CE=is9YS3V#mQhot2=&@{)mW{psSqi8U?;!u)vNYd*z z!lktuB-{brTZg0$w>bTf)HmpKqcVr2;03AFFz!{Uc2Mh`|265>Mwu=1vIOj8O`AqT zCBe}6ql2k?asR`T zq*_Z1w z;I^%oN<%xCJ{u}lacPj*qRkvGT1dN**)tqhDi3yfU8KwkVCs!Pr2QS4zLeR6*gKmt z9|N;(gvji?P=!^mh%P3qo#2kjb&C4jD`JQNk8piYR=+A51m_0v`g;Ch5j!dv*JETV zNt_3H$sZ{3fc&ND+l?4XEkF_?ZNc5_ZF~GCV1x zi*Uji)FfvVLYuCyVW=jhF1;oVLp2HNYZR(UP+!46^fkVr&q?~4)ao;8+B8(taV%jO zx#|xdO|E53J2?uYOgG{W9&DaqrT^eVdSS^%R0NH<%!ADnG~x=swbEDlt(CsU?FN5Y z{0Vx{`zNDm1+Kk7^2$aw?Pb4+HvBP&cQSfT&>w^N z;9HCs%yVw>2X4d+c&gD8hukni_eW{15k~!o*4Cf7bEr9*7%SXSOzSa5#7kXiFXtFB zP5J`^~u5Bz)J*V4zQgeufiTp1>8Ia9J z&rVE-c_j6v2-|y5YkJ)%i?Q{M0Q81Y=F}gSnBFv?MB5AqpHL=TInTlb(-DIu)3%<3 zzhgkz`V$n>QG+GV_MOF|?Jg5uX%=`t1#j{|E2vKy)T+%->P{Pw&6Z@t40ya~LTe*k z#v7sb?(t$jZG+XC+$EMrmVw)1%+3MIK^e*9QS;q!+jDfb2w&g8Guvk3$ul6?wgc6*G%+C6Hiybu84w;|A43hx zAt4vWFiV$^1YPTGAql$HUO@@WUWLx_>I5-9a2t5|VJSL3cynHiT49d_8rLxt2BD}0 z0d%h%BOgZKiCux3@+~(wn(G`zwH#Zdk|2je?_OJ_{#1yF3JIy`P_Zk~Gx!o+0_{{{ z%n&iJR>Tsi`z<0Wq#+>@u~n!%pY~7nhiZAJNnLN@oh}Wo<$aM%?{|Z@Ez@!^Ign6O zt=S|jR(*%&FP$Wu(R$slh^BWLk5(Kz;ID@#33s%9t9w;s8~aO2Y2iiNH%Y_~oQ8hE zKNq!*Y@)m6MerMr{9Lp&giUq4+yu+spNnpWjEOAvD%o}TpS-^Yd9?#aEVTO%mEY?T8A^e7{<+?1)`*c}an<*kKX(rLU!E1d`U#BS!(afGAl9CQm zO?ims0BCaGB!7%IXtt&@b)qikOpu0(`rNHw{-;tG(=1bQ2d$EBpTScM9;2?gh+Rfq zeY|MWO+4eK!h>lTdyA%qJea~;g(!x=wN;=P@CSMD-544j6H}OaQa9u*gvRSVJ2CKAc3KikU*pC{UA6o;Vq2V+-bswQ?U{VYmUCvCkC^V!4T zHJcM#@4voB{1RBinI~a5P~2fsqy+@g7I+?KR;2wBpqT_Y6-8Qtvc#vTRyk%et}Wg` zFrGTPw-7eTln6{3N)T_p!*d^*EqB$rV|9YzjvYaF9Db0o4v%oH=S<;JX}7$L-SXPx znPN!ZO*`C`|7eGM2dJVQ?i#-jbCw&M*y;H=HU`%2VOMV1!>-)4hh6#Cd)Sr##vb-W z+DmS1V*l5B*mDB^zc#O9SE8jJW3AZ#$>w!!(=3tL^gr3A{vYj9&&~TU??@kshW+P` zbS&T9*pW`a|GX5x`Tm(Dw6#2-^Q<`}zCmL;uO{ z^Vh+5WB2(xfd0MR=VwrMWA{0S`PhA4h`pc+wx3gNZfrltYOcQh9A*FE?(;hO>j5uY zLXDx_Q7)W4^p^qtdwb1kn{4e~^IZUFuetVmxo8yHV}26I+CApy0Q}$EWBzvFUvBwU zo5MG?JH83{_jY{iJp@}b$+vd-5{$dCOW>1nE1z!}TrS^sbn`Q!l3j~UA)T;%FQ6rN6k)Vn0gqJ2JJB#5_~ zY1iiC2EG8x4Sc>%`YuQ_bkYvE91B(6D`I#{NWom%yEqNtL+Sv% zw9Kn7S1&Yo(?LH=?SnTp_#|EIrdqL;wPGiS#0CtxQ`F`9%q1vy>aB98-H_XrwrdWt zjD(*1AU9h#_l;V)r6IX2V}}EjJ#@+*wUkDsde&00?5mh-$n4dG+AIIF8Q{Z2=q$zu z{T{}>^}waI6QRT^y!h5#Ukf|CQ%u&I%Tiw@k5FmpFFrwG*m+Xl&ea+-z8HP>@?1DgKj~-8USb#0 z)38d*egnx`;>;^w1HFS9cg@2_;~sbzjZ0e5xI}t3jj3&Q(t4;dky7K<14dMgb_5%D zJuJZV(GhH1QjA3$N3e1G>0p27lnODA5YxSU@xCyQ&GeLN#l?dq(PCU6E z&vXd(fU!VlG;HX4D^vGcCf2}99iW@LwgV(2;`Jfw0Zs~o_(iV7`>f0L9#Dm;a3j6( zr!E$Qg)OJ*{ly~Om<@mZs5ll$FQQ^LJR5ArY*>3`iEs%_ea|crhqGJ3Vs(wV1jVM{ z^muKE__2JHt~aEi1Q?dXb! zC~P;flg|`shxW=c5mWjXY~UslLDO?Z+66jGW0Zd#5*5JfuE@I;WiL21zhuqqp2Z5s@NKExzNBs1V!|B)kEC@ z>mo!&AJ?Dcwx)&z&Gop57EfksxsQu9_hh1U*0JClO8W0-9C_t_1mJYkZ^GkZMs6nA zb0oZ$q!dAgSI)&6U;6h{^iFu41-LLv6@N}o-&a?QeL^g2dzdVI>ITpEx>zqF9>k(( zO^9dz%=A2J`?cYEUzaNO%}l4;*$YpI9`1XnXZ5`yg*Gqo%FhicTHjUTNw-AKjJQGa zJX)Mrj>qF;vOl6y^hoPXByr&(e|x8lx(ihf7q6m{QpFlPDh|)p=2c=_X6r2Ny-MLq z)lFPs*Q+Hex~6|j{YA4|GSIt4MM?T6`C8a&(IWLYNnUNY8ZB4mIzm-jZI3iyKjN7- zdbMcht|T{2w%2-asqPJdEiGi^>#Ie7F*!#|eo_n(N%geyCq*+cp}w~7Ns&pN?3*V= zYcVoMOMgmq7RPh6Nl%GfF`&M-_9<~kR7=d+d4|nnsO;)$jY_W($zoU|t>GHTS>8x1 zTLbxzWNUA%fjo5L>NTR3VfuSvL8nYLOn)yd+>lf1TA!(PUn|^Ehp37t!onYjp{n~` z{pxA=uNA5GF4Uujh3Qp#Roezq5`A>7Xw^vf%GiI19vc$f-?f@Vjtz?msTyBTYq3ta zbNf+OEDH+;_93p1$eU$hbv(M){mgTm;`k>PUFTM9{yLEqqqo!CDTod?W$Jw04f|j_)%$^sqKo~{ z43Km)DtSTsY$KWyMSpG-t-~9VihIm@{r!!#lBaPILfNRN#eA_LNBj9{Y)_q^sSSBX zG_!w2F=(Pmr@f?Yd5C2|q|(XQ#oD z+faLWvq+4(kKFr$Y$^q}sOay)$l0@5WQC8WW|(czn)0+?H;e2jz01y*ZyF6+-m~}s zS{LeqBW2yVC$&M(iaWA>Ucg@vEd) zXNT5i3;c_sJGY1i_N653d825#_C&B~&lb@&`wcRGrlhO()Mx5cUC-#`pq~4roAor@ zigr9q#*Q&KKGz=Fiq&PkUgM-t7i4v3*Vp!JMPv0Mn^FzMbF}NA6^qlfq-`SEK9;<% z7)8}u=WQs$m21p4k!!hw%)KZ~mD-wZxS)CKYVU3nzVOY|@_U78G(4SGS4(|Pw6Nbv z3U&y+-(AqgJ}2DaoLYK?(ESjRp*{AT=xiTCjo~-Q&S*bA2cM)+#qTswOSH`GVoaEW znzyeo4NliqZ5Lg`>Jdq?FnQ9oi`&IugumL!-eJ;iy4 zFnN;MTPd}!zq>i4!Sxqk*zy;}$U38N52{93cMy4W zm!_IpCDH=ECP2o7(Gy~GwA=zftp2!Ijb4Z+?5aZtFx|Zi`qVhgWiU0bp%Pc*-N;9! zSt2drFh2TdQ%rcHbwMn800dcLthB*Zj((~TK&%d^(PrqgICQ`kUEX*gpg0|hi2f4x zS)4i$6Wxr&xpcr8J)9)O>p)`kP?C_K10E)gAi6~HDA_fYv?fK9IT9A$m6t@bLCPRN zu}oOIOAjIE7?IzIS$mj`d?B;;G(QeB?mKa$To`Uw@FKP)1Nmo>;t0OZnKMsVZ?kO2 z)iLJoF?Zo38}evv`AgzS{VO_+_lN- zjbhfB@;*?rcw8o}vn-pn5B7)#`UiQev(@g9s0tU|#8~I(kWIMgsepB^4n+tTZjEyH ziUzIejVh0D`7w{TK5W?yC=GiL@OqDRv6-rtDewj`S)U+N%@Smio#^Y-m02sK&$Ly0 zF~w#k?Zv&KUf=_8N5$CNT5iX@Kbr0*v7$m>jbPEi6%_*H=-`S9-GQjl!4(x+*0V*^ zO}4$0oo*r`nEOr0BaS4}4AmsoO^^AAQ%5F|`AK9_QhRy}A4K#G2%YG;S|U9cB+_Xb z={2EcMV*q=8RAG$(q0Mz3G!ZGrH|T5%-&VlkXI9bGqLcr1p1zZI^(E`)k%$@-fy9f zV#hG+t#<(llbEMvR>y0ncTv=|5y+>7lLuA%VKAlJ_QB@l-o=dD%!F1X`ZB8LI_*md z$0sN;P3Xwf!#MNGSGBzTB0fMIQpH;{QxDT>P?Y&qXp<@y%uE?Jnek|SU`iG9XQoV< z3OL66zFvIkUhh$iy$D7klfD8j3Gc76w4lXAq#NAEr~wh^a2?d0s+1rP!;v*LgGFX< zdut;|BCUiVg5(7wNd1o(+p?y1XSY}XSklykVz&PArGvr!+v?23k*IBE6n%V2ouvcW zQToT14u$q_4}Mi7^A2rDexxa)B=ot0T$mQ0t78+o!>O24#5d8wY-8_)KR#RsgKwRT zO28!d&}+hza$9<>)vJjDR<{jW{l*!rWv#2i1K6Fq!MolNxVgBh^?Eb7wd&_LgIlZA zw?g(+y={C4OFMc*JT&?%T8oQu<-s~d@?aRbULhT^daqEVQ-rA|j3bD_n;D*XH?5W= zL~Vg<70Hbk=;Oa5nuK@*lL$=0gM|5(TZTdOVQv3AA}Ojfv3<)ke$nfHn;SL!@f|TG zFpu!t4buI$;hWg#yu9)(uB&eSj(0mxG+6Eii%yzLg}9@2>&s2sd2?EDflJ-`dee5^ z(Wb+GJh#6FWeMF$!(2ndg>Ipzp+#^bG<4O=5^hm3m)E`jW)*XJ{w*rz^0pxrp1~yi zUT(p+DcB*c{xQsKCJ`#yK>euoJ0|Y1KS!wZcG6PPMLTp%^lv_yTvVl_)^uj-Cb*MV zuEA<%nqJMSOrw@%Y2%2uD&MehoGY!B*6Urws^^Jc)AEa#_Zj8E{rLQ6JOY{czKo0J|U`Ix4!Y;I{z!+1Bx?M=$5c|YVOr;A$2Cuvu zOS-Pd2tCwFdEDf2-~gq{kH&^#5H@N4VY~_t`{@0hhYoHQ+=89_;F2@TVDYe^(8a z+e7mDxc)L=t5M#=bwAPDMT7x&jd7J3h*$$r!r~9L*2bL_r6RwLcI>1WCY-Ich98Qa zsSAkkDDV3qE+nFYxw>HT!{6olm4hrF)lA#)p=c;Nwb4EXJ=L)ON1}e=^@4FcxUn7u&y$pH++-WT zRF57A8zZj7wKvdiL%{U7xdxnVz<3>~4K>^~ljnAPrCeuAs!Jq$P0KayW09n)R9}1@{@7=?g!JRoSQUq=ZIsr%#O;!qHD}%n+(E5May@=9~## zfg64<5_y1b8LZJ^)ZthZ-7;8XtQ0flD7s~^#_E6?MYjxAhYr}H$}zvP#_2#r6x}gc zojMQ`MRyEVmkv0i=#Ie}uLFrubjM&#&;bwA?-;C!VxS3w2)7K{i7!O79)@fYR@yMd zC=C7fg-B~cVaOJv+h^9pkS*3q#;ST4vN?1hcyDBj6Bp4JaBrk_JBwBC2g!Glv5%tT zDpJ=m+9PMN+BlAolVkVmNcu2({5Rm?CvA$9O%sMyR6dBC%C(bcMWJ}0u@?R%Rs<+; zeJPSH)2O&HH!aZmeu+4S;tCW;>Eov{zunmFB`3}PTRZfnXc1OHMj zG2jND=+n?O0k^(~I+nMjI!P5z1rmpiCWg+2Am-Ku$MSwR37+zmC~NX83A$)18-%T) z`Z%Kwl5&Lh$6rjQJfr7`C`5S`cq(R?AO?uIlPV5?Q7w+?;;teEu=bPP}Quj z#Ri3|T0^tsvSGzpaWE;oxwVB-we6bl@_H#Ca~BvmYcp%7=r*pF*lv_`Gm4f7leLCF z!(kppd+s-Jx$67xL}fy3E^p(~rCIB`IzC~q^(-JNGUEV z^tFS~2NK4HX=5X$B)(32C{nt^x~gqR-hS;O==nL#5+yZGtn3)Vle_{nUrac|RuG({ zwSiF(a6!8#N@~hCX*;7Nx3zwc5dAsrbQG!)dS7D%UX@72b#}gHiI$$>N3@;M(o>P4 zcM&h)Q#~7?V5K%RMrvg}KPn{Uq_#Om+U9LEHG~N5%p-F^#X{TvwrcmpN)PmQ;dapQ zOK8JcXe$~q(2wRpg7F7JbfM?fp(os-C+P16pQK;XdOD<7@6Wi}8iGSlJ4264*90HK zp4A?5Na=weSJV=w8?&y#IMYOG3C`3aXM%7<22)P~zJN3JguJ?#k;23DTYyxVX|!ZD z&h%7bPCcd$rb7G%g6?y`MaYL%AeUz$SoeXCcjVyzZJ;2u1o~tHV~eCI4_6s5<~C&N z&p3zHZ+BoFcOdA)3Je4L;rt|E`n`;FNt+!f#kIp~fm#l>3r(1M2I$a|b=N}U_Q2B& z%T(wYyIM1qnkKZezZEO|4*2d>?R1=UASQWl$U&iXEi8dO>y)wsyP(YQap+zcQuLoO z+Sb1jDi7TyhRQb}BiQFyKr;9VUyKx*iiResp*d}6LYx?!LKos(h_1szGxg9MJ~X=z z-7SRfI!d}29rj0@Pr@gMaEp`){?M&b=%(y&cYMYJO%nQ1vk2DZlaQgI3oKoZ@AL$z zXgVFb)Q4sUR75qRADv$U1AR?!IsQ+_A{Y>w#e^n7L{|uWXlhk9P-_$~6=(hQRY-LN z;xTonP+Xod*my5^!5z3P0bj1Ijh8--rNBlX)FXlPqkN?{D?v)|Pzb}8B0YV36A67V zi^7){ktjKxl%pU6dMD9`A?QOGA;!>|a53T9Vz<;Nf}&hZw2|nW z1G*5Ea`e3f-7pX3&LM^P$vgBT9ECldCzf&){3y-G>ui*cXycQl^~w>vWOt6TtDF=F zDF{+p=`qqtoVDsSDNmu?UD{vC()uKde-!gVN-0mXqp(LI zkJ78{jkHqxELD0ToC02UM9^5#pFjyQi^~DZ)S0);E@x5Zt(llmhs{{!OH+{!QdM{!*6( zvuw<3EqLGj>PPsNlvPoz)z}d$VN<;N6lKD!irV8tWWsIcSo(U4&LK-yyCRlj(Or_m zgBYcbk-6!py}4a>n<5lb!cX`=NZaMQd6AMOEGQyKXSx?(e3zy8D9IA7gq@#_uff}6 z%#H}ClEPK(;tn|)-^|1nP6=1(gR<@o^tIgNOQ&%3?8p1&O3G`5Nj>m0j$RjG(w>H8 zO8WiuE$fWsU*cHzkI!(-Y;h9DdcR;Nuu{JZm1b>2C6(+^^u^#j8+~QC;SkhTY4qAB zIOY$zh+{$EUhJM%8uubplTLVFP-&V$$_l^y7{_K0lZfWi;XkE?_kA2&eo4l)%07)_ z>mMlJrke6?JCf*jCrN10K9bWugYv~6lUdytlMy{u5oXYnBzf>zl6=Qw0kZVYKd4S4 zd}RCB4RjngfEXt3rfsW}CKKkq)1;=HmlF4E{>QgC&EeO`ZF6~hGH@QxB3%#g`6P2b z_YlK_{O?b3TEKgfkcar+L=} zD^AP#8RCD8=M(=5oC?4{&;tmlDHMTqa}I@L|NTmOoDn z>v$=(#xp$cd)3F3O}rU3>}LKn@$cl{oWSXMzKJ~W0zXTPyLbkuaVdDddKi3O{K*qI=1YB?_?^i8eYP&btXR0skDEi25(Fd zQ*$JY|$S52#CtOsM@i9bPbUostMwfGyy`*%=2@I4*Nd85B@n$1U0$z1*!o#yj# zgv9^&A(90=hL8{O?Sx#&IX*jsud^>CXb~SyB#&?bNY_svMly$E)`NGdq&7AsuIh=6 z@^T(mNL&M(;Wcq(P%lPbbAz#0Zma6>jEw#41yT^RVrp~cgQ~FtOy!RJ6mgAo?;q(B1*oxCaJ``lS{O#pc_ivRy;$r-ws(#PO zDsO%G!JEuW4_DL|VsN`3RwoocB0}*a^49nfrN?SUQ6?BCnhofi03i)T zC{(22T^lJ<7$HN7aVqkv6j&rVT}qNU9XWGDqBy|g5lS-bO2e&qpd%Hk=AMMEV^&Np zwkn_+y+pfjhrC{Vy+ljdDHn(}7254P<=q3uV>T(9ZBzA7RKKZWi6#BkLdA0L1T=$W zQ)TlX6;uj0Fs05e>irRaCu8}R;GNtZ4L|MTpLuYq;&U80?d3DETekZXa$MDY&&!YT zKpD2RD0QBLxk^L~9V4rWJnCUoMTu@qJTWsVANyuJj*hpJaEwcZC5p2x(YtoJaExz< zhcQY*es>E+DTm7Ra!{F+KXWAsrpsRcge5w=$q@Sw`=6es)=fX=6Zolf*nNCD7>^ zX+3dlk|G-6v{hZ;d!#5T+bd<0`h8MA zI_;OdWZ?m69I?MFnFu;4`H10=6o?`*uSn5E`l_^@D*BqVhm1KanW*e_=@J?9hO~*0 zZ%PeG#amJgNqbuwM#v*lGMW93w3wtEl?GDTG3hm8e^)v~r}w0ul=C6VA?vXRX9 zr8fdZ`hk>2r;}0{6@DlUCfh!eo+Fx%rT2;dlyonVd?Kkt@~IR?Bxj`NB=j?BKT&=z z{X`^RNC6@_D}6=CFQpQy(pOSrlJd2bLZ@?57@7Tz^ha(0=WnGRM0#GbkkAX#XH@u| zG>c?^FIfosLHd|Tew1FM+W#bVq_Ur-3MyMDKTpuZ_{TIjEs|xTeA-h^r)NBQP%pjU z4KqKAJut!HlsuE%<&jVnFr|J#TI)_HQ4P*gLEaFO*YGp!hEob2Ci9y-M8`325oOtZ zL^&aoXeM8y{In0iMZD3@LSRy1CmZ zgu-(o!))f@2)r7HF%&XQ=1{Z;tS+E4B(cCTwegW8&{v$X1fu;W@wJslckUlJXhlQ^ytJ znAVzT(pzKYTglJ}U-v2<>zyHd{l#?5DkBNm^XZt=h$wTv3lPxY9y;cAAVCdx5nH1T zgvqxMQ9%+hH?BvRChG~)bRgxMZzLmHl#_`q>rlQ;Hc_^#NBQeZ<|2H-T$UzkC&;m=QKL@+Cing2hy=meG=W* zMnd}yBFftj6Q+MY9S1C?Y7E>*$_5=H%;03=x}yi>?|h9)heS8U6BebkgbIdkqJm+I z=s5f&VMcsJ`H`zg!KgZvAAO$K{0-10-^36PWc(JB<`MTgt>PxG0f~m%=h)C{H#}q z=Ki@<8kk9x<=jNTY<`l;=kRZdU@jj?&^(?WdyC~nRME~-z4Nl{ve&6=E-z=hF>IMoA`7h*~}j!=vkglRocSmQ9ZZvwSYP+ z+xRNtc#c<7;dY)*>UZ#tq<1I(7$<~MrdU29D*HDmrO;X*8)0hWp=wnu7h6<){HnZ* zH@F7jM$DvbCm|X|?T1A!#S(@Gf=XBcj{mE-Z;y|vIQu`l*^?W|oP-1jAqj_YO9Bbm zB-~Ukn`D!$=4LKHR6Lu@hO8u;m`wmJx_Chmt)jIZwA7-teQ668D`mCfg^OAg@dnll zC|anX*jKCetyT2*ede5#J&En_^ZVoXx_rpYcb;dSxjpmD?3^>tMk$P@e)x|E9J_4` z^?h1GWS<86q3^ilwAU!-_~rO3wkq_j+!PxX6Dz}1gdchqRy)-2E9BC5X#e|`gZgK< z;RsO&es7ioWsNW#q|4u*<@m1QfG&TJmgBpIBlNvm4s`Yi!x8#kEys5aN9cRC9N#q@ zIseXb*y(}z&~znB@z$KM{SYk0G_obwEhHG*hWNyo$9_9BfniY4!--#=A3pY?WAV5c z*q|usca9&wB9G&4|uYDN(_ENb&gF|YvtLhJX)P4Cltxi1@f3edE8<-`a)S=D37{8 zPM9SpFOpLh$njmWZIV49oOa4_d9-a4U;UBe1KSp^opsExoebZ4*0DAk&lzJsb9C5K zV|m~+htoE|w|?drXWPsl{mil2wmn?yFE1}%u{8T&2~Ec<{0@|n{8Wo>o|E=G#;EbXJH9B z8+J^T*V^nImTfqkz8}kPq7K<6C-Vj~$mp zKIoNSwih_VkM+rmZ1#*|{;wYwKLu(+glFGwo`VzXs34#uDbl9 zU;Y~Xzcna-V(*$AzH2}}AH&HH4`Q!!fcsX-SJ`oO=foG={!u#A@x)K$rFJ~foX_POW9xBB6D5s}p{W{He=fgc z3m<>U@xG1!^r!MG2^X{t`nw16{egv&6ux4Me1+X!UCCd+Pgdgx6S=y?xy7Y?YplR#C*g;a;_LXmwC zhe$?moZttyWArjS{HyKqcspJ+9J@ny+WS1*vqSDLqGt$EIGmFcQR;$7HhQK2-!C>f zzEHN!il|D-h5X|ka=mRUU-*!`&Q5P{K7=2RI~$(yJGsMVdzx?B3AH@UAKHoEkK4o3 zAI8S@K=`K*%df@Qa~gQxV^Hz(2EOqzd6vDSfj|D3oCS?~>oM#M9}TbmBet8iyLsFm z`2)MUl>dE?++t5?3D-O!pJ%hryoBHKq?}{#z9js}lkzq3_M}UB(Ls5!z57x=a8TZ4 z$LlT8&tr?af#3T)c8u$8Ui5;D|Izp#ga5JkABX?(_&*B&6T*vLNPOw#Om}TvQ@N)> zEh>~Wt-H6qwcDo+AiAoxd(g*&FW{QuC(p1pzU4_a!4br}`n>oo`+2 z9_%0J?P&|ba<>lnV37s0HqfI5eeIIFzM-zEuC}hRxxT)xp-IKh2TNM_oRU@{)9tAR zy|TgG*r+<4^TAyaVVyrma+g(ks>@X;8dY6hTCKS+))1&pEEE2#eW{Yx8EEZa5tQ7X z#(guu_a0+1 z&pE*|5=g1sHT6v`>ik0f;^QnmzsXbM)|xa`qg7Sw_O%8F=9ECuz}eW;pw2-T_xOYD zTEEX17~t9=RuJc|!MzN(T2#U>d4m1V65^~cQ;X(F?uNRGMzy#QqwdCFQFDWxT4(D@ zpS}r@v?|vUw^m(OTd9@THJ3sNnqOO2+Kg<@LiAUo7?Yy;lEx1mWSRVmy)2o(dXS~Z zn~l~~KK&z>*+4BpH$%}&ByBJd?DMtzJN>>6bE^0QoxLbO;6oBF#0(fsYH3vGp`ta7 zm5rWDP<&AlK((j#BDI*0d!1d91;rDy4wd%@pzXEpre^4ltE>u|Q^J?O!tx7xTGwb@ zzScg{R&@4KD4N!U(a=jHMb-vX$-S)Hy+n1+<99xfxq9sxHiH+w%QEyf&3>1S=k3q3 z6zPl-$wQ6@Q=@|7|z~9>jxmIP<`tW|Z=7t_NHkE5-knXZfEN9^yp7jiyHygbo z8Z&3EF;AOXpySR$KvF~WnQMv5gZWm3&aM!|x%2s&H(73+KCjiePX6`VET^!&w|AxA zC%LPj2IX~2F%xM*^v%Z9bXB@MglTw56T}Gf=4V*mgw-9OQx_MbS1z2C_6tk z=wG3A4hGt}^C{+^;x2WSSKx8B7|gn|i%?Ur_jYy$aea-<6PdMX``KIv^+@>slWbAc zcrd${xy#gf5{BKsf+mq3@VKLF5x?sQ8^^2OV>#o49e(UQ{m^Ba|E^M4D>46z`PKWF zoA(@Jb1$(fsF=n06X>N12{Tt$4?|EmUn(e=Ro2_@o7LFgK1<){7POPeS`ldN7Isf$ zQ*-jf1P}D)>>`cdv4{B+SGS9$&#=A95lq+q*V){Vu%{iZ=;vBjjk~F?j%=7ZA3Zcki=(@= z83x=r2UT=06RRR(b)}7U)$S%YW_44QR_?BFp?sR&M$bs@rFG4;2$JIKlS|~apkb~itYH`tGI3&o^SIrx zyPl>d%vKl?kE<5_?!y3KUh)sw-TdOy?6M54y>}45B_CPv)WS7$JM|C${fjIx0n5s2 z(G8y3C9Y}})>AAsS0Rmmx|g*q#1_HVfrY?TTZy7eF!ny*N=X!?b^CiT8MV&7-k{jY zV7+Xk-Wcdz-EQ>w{x{j|(PAq=_PYGy<~sCPaS?YPW*4Zd+i6>(b4prAuvhCsZ_x@( zy;d@hfAwc*^snD#O)+iVE6EJ=&|$W~(bgLD@%?YJB4owzuGG4*$Wg%nX31!Wn8I3r z4lHf1nj?bzg?ef(R;C850MN-!vSp(BWcnnn)LrSRHHyVw&cO%#m(8^Z~Y5gT+9^KWhMr>Fb>S(uDh~*RZ*4j z$4pa;e)1HXFuodF8-0JH)%XKiBMqk3NUgr*IGd7GgC)yT>((@~@{L**&-<7;`DObV zUI2fAjXSTWZD^AL{dJXNNmS>;#FMIb^$zw6BV<^9GzZE9)qz&2PX5#}tYxilva~pN zt-ci~=9m77t*&TrH@O-r@dpM3%RJhTS%M`V3uJ=|Wx&EoD}+XyCUm!MLTZ~~Hn7d0 zg0J$m_Dg)mJ~n}uyut2ROcNOvt-@0&HfN~QGW6~osjuI+%3>Jwx$dcj&g-fV?Iz3D zz~9@)Qi{6UI!PO7MTc%;yMlcUI^Sxxbem!JmCF0DHwyWKTKk$-R2#*?+|xeD*m6OZ z)=UF{-2-N|rwVp^F3hbl$I(=M%Vrj$+ZdQuPX+7*?F(Jy)fcHH=veC(1G3 zMQ5>XJ|BFS706f*wE_O%Ayzb|wL_Rep?YWtjal(*UjH^LOeZ5q`wiF$7#N}2#txqU z>^YX*40<&TO$m0;u4-&(%25$~w?J|etr-ANMZ=(AuV9$THmH7i9X8(RFDmsyqo>unuyL)ZYk)<>QmkPpX^nxn z9)EzJ_#;aTvn?!pYwv#q%~``YKgFhw zMh-ChDW{QjrIgzn{JjS!+X+tF8i-S@=F1=V)%MQhC&V zSfRW2Gd29we&(|A&@(I}3R_hE%~>{Xd|)t$9jTU^E0xuhJH={LQaHm|l*_MsmN^q( zUwms?`}@^P3zzc~&$3y(^f^|^UwMu#r=DlkeDn)!BJX$sJLj!0uxMEXWF~4I!OCJvff>En&YQ($~Qx>Zo zOb+(yQ(j@`@r|#r5BS-u`YHe7rI?xidsdZqW-`_TfZ-PCo z-LTR4D#xe33B!5)+pLUFImU8E=`&538~(vDrpD0s*#Unqzx+8img(_;ra?cjd;9Hi zHjfv-!`c(k;Q2;-=jZZA-eFa|_Fb06&%MjisB@ij461XEKB$EzF3jbdPOu;!{T_CL zz3;Inx$Avw`}^NV)3?8mFX!*S&+g%ce}VV!pZ|r`^KbvcrZ7k>aT*dzoc!XG%)>wV zfL-W-fgj*`XV?P1?F_ye9XZ1SR5z2?nah`b#C-hKj~KoToMmH)XjTO^`RXjp|C1hh zN;vc}`z9qOD0;Iqyw;}V#PX+86-W9Tc+rVYQoHe9qKn1eY`@*+VyY`K#?K!rP}1cD z+?3kHTjP{*(Nn;Z5XGO5!^77OB#WOc=C7nEDYg!t8Lv#RcSP}mWFclvb3Q*&nLLT2^xinN&BYuy+t5dqiHWY~ za5ac}W;4GgQJIdzxnJtRi+YgBM4}N;Vl+v@nQ=c;vg1tW%+>t&Qp{u5pRm;wTMrpbb1eco~W5+2$!;0S7M^1irU?&2!RMD%JlC4 zX8xvvF`@Gp@%R2RnIQ!u8R`RpV!3svQsk!Yfa7ypptyUzw^*CU&TNo|sH>4s_upKbWdawC6DXVJd2fkd1*@BNQxW zdFvQuax`({w{13#QL;tyP5fab6X)wjj&DFBoIO^TaN$@T2aND8BiwC-ZyDh?20y~= zXq6hwc*Yh~8%|22%Gs?)`Sbbg&vnIJ3!iufi?ujaJzdQle|VZaFA`VZkZ zMtXL-p0C0PuQ0;fjj&*%lEq(6R~%H&Vc=f|N7e*gLg$EZBd{?#4^O}Zp!$E#k4{h~ zi|A&44yhzHD?=Ax_Ex8XH)a?kkga6%J=sc(6fmwGTMOK^Jh;7UEXM-TR931O%7Ab+AVQM4R_5vO7$vF5`$(uA@jo@THC>WsAh&!9Cf^-0TvVP`W)rv(7pT$+8k{@nrt@Y$Z=#hj=}A zPeubNx;7Hs#(!w09*#sm=MPU-W<{67@uxb4|8+9VB*pPaDSirU1I4%U{3#f7ik_gT z-gV{tDx})V`Ol^(vr-GQkRKOIE)dltL(f!xB2h_=CJLTC{c8%8iQ;&vbtU`Ija;oU~=<7%X_2bzu&SEoyZI(nQ&x^E-3&ivAu+M0!0( znU+fu&6|AY5VIVtnD($(lT`FA@to#UbB!h+;GSG%avr6ccm0NPCQ;5-k&~2$c;Jlh zC%Hx?;HwW(;wV{M2jnltDC5LhN=e(foM-g#KAw*#)v_TE^BLjQd3vqyGs1mF`iBN) zGjw{95iXgb=eyRx4;bOIM*823aO_N-Z=n%(8sY6mxO=89_bns*#z>!*uji}HS88Qx zIxW-p=PQ$ADN2`m_@N{v!!Awd9}*+N(FG8M5X)dXuP;ziGyVity66srtG)hSmh@SNEoheEx zPb$Pu-V!q&@}(C-iz&X9FDO(d=2FzW89AgOX`~@FLmEOnXZiXb-PpyG zi?H<(fv$E$e3aJ|p?Hek%?FE=iP;o2Z%~>Qr`-ol2BIaj@ZCk&$?oDukyDh02aVq# zX)2NFmePZfF?BJ~X3tQYcX3xSOztl3*MmFt;IU#+#p6J6B!)gq_`}n&e^yJBjJU1& zblV+w>-eXs$~duIrzAYd>@0zupg5jpZbV$B_y)eC1kIx8I)1c7nZ*ldD~`DC0_{YJOOn0@`);t8GWEvT z^)WX^-z;x%+!D1B-*3eBk9g?w5Bx7pH+%trL|5OR$xw{?L{Dk1bkrlP? zif1bP!Sg#}l`$!J@+qD0>0dxfS?rCdqfWRCgs%-krIm0a2x*=Ay>K(f#6)Gxr0pP7 zgRmKObFriw95+U-hq$Kr!_OSp&!o~(VwkwMKyidlg7+kN=~6Lt?uO_a<@Ju6qUehv z-2B529X{}`xRxa(ijGZn!f36~?|6^kuZ%zZ+_Odr-^oiVQ;)nSkyjOEiF(=A^NiU_ z+W55~Il7==AklxqNrd&P3MJf*v<##PEgM&P2#`MM_-|?Dg?c0PUBAimD0oU)(v6Pw zaJ!Gecf}t@O{ps+K5@1(CX|EM&gp}Z66OE@z%xqy>|4uwpOp%NBY&rdiosCD~rs z#h1)g7G_f==}spc3`k!5J#92zLK(jjnC}Lk^EU92s+oLdC*h?z=@e2;Yy&BOR5EXfx9f2=mQo^^i38_^vxDb^lcUl zdX}`^l0Xc&1~^oqN4RsIk}?KY`G%67M^E6IUu+eB^L%AOh>lH=2_L(33M9OZERIp^ zMsu1hbgIrW3kHkS0^B5W>&<`ALMQ(17EI1ScK~-7{GeZsQduEwg2@P{mY5jee04USxCff7VHI%O&Lxnmjgna(fvnKhhx)@ z7z(*iB98>t44Y8_6H|fYqrk*oM2=aoUvC4sD==9o3pp$>@il1EJ!+&)L?=fECjD;E zznG|ReyGhvCkF>6oiH6nSTVUeFfo3jW1(~k2}#gBv(r9-K$C$4kWU0FCjST~eonL@ zksKtLNykJ|4LM3Mle~y5hJyqXlT`Y$ZN=n3!Nguf((pCd#GeR}3+bD&nM5ol7EB_^ z--1d1Cwj*GIHXU%jgI1Ni&jyoDm|p6%V)Ef& z;&b`{(|es}k{6MB3nmfd-oZ-WV!=eG7e1}@V-`&G6Bg_R&cHWxli!cU;D*IYa%j87 z8jp&CVX#9zxE?PwS$@Pax{~_o;U~>6x4k@_=G3X)b zUNHO|30)QeAOMC1isrMpL~w!bo?;U z(_nZQ3FK+X6hN;hn*t7kJ_^{XROF<@q`wOKQsDb6`N?UCNq-ykFM#_Ex)#H3Rflh+dye-8dLz{ikaHh{dLm~^^c@C@)x7CN05 z5gqzxmlDBHV>pW<0bUT&;5~&Hh%R)(g2`#rBw%tXW%56L{&4;S7VL$T2Nw>flUEib zFA)V~L*O5f&?%5!ARS8qiWD#YZnI#j5V>(dfRE0%QzDbai^xAMcpm>0Swaz~F?uNjRgo-<(NOcF zuRfxRDn?qe!9l`Bpu_eUShui*^*r%X6X>Llm8mfy7T| zYzXkd_X+UF0b6@8!$K#1I)xML;1B%{873hiRbnc)fW&j#+c@Ncou ziGQmF9|HgVz}pOdqSN6X0(|Tt>1{B0knkWu{38Z(B1B|L@#62Ung}L3ITu2Jk4`^n z!9*vgLxODPhw~v56P=t9>9|oBum@g=tPJF($i!Ymy6PjC1Z=fnqECT0A_Vx@rN4@a z<%&2t(%V#SVex{|Yr!Ov93COSN3YUt{FFzT7}{k?CN}bWB)AN=vldMBgvR0YJ_{!L zCJXigpKglq6Fs&$f zIXDG1ae=f5cFvOE1*OA+NdO(2ni+^5i?dD><3TJLxoW?e6eaYDyrAkV`g%skqh=N_ zB3=s?MOZM=2jD0Q0Y3WJlH({VCI?a`_QF%5G;nz&fdrCwDGP(tq($&&LVq&pu+_@q zwcxLGmJUl2ijlThu${ZAm6Sv}lQpG`5=ohK&T1x6uFoxaj9|&9vsIIYsw>V$MS?!Y zTXF1Z(x-|nHFOecCQ%kT^)#^;ks}sN^qC#Q>2LTVc&=V|Itw*Lxb-AD1vQfz^&~p~ zG?SK#q)a;bG?ToDoUmY>WdR*{T3I%&7>=so%WvyTd6*$FR{=GFScO#%ozF*zZYoAP!GjPGeFM)rgYjUAZ!;2!1%<`4?_%nNWc(4 zgzzHJBL{pj5?z5a5AGz~DD4=AW2Dsr^WD|Tg&{9w>nGiW@$gSdhK0Gzs6ak&Q>?zNq6*XiuZ-6>4aDCDY^}f`a80HDJaDvx?+Di* zVFwN(`V4_T2Ywp`(kPRFhk=vP;sgWl1vdLD3B3jIGAbA%hSf+oYH9Hez^48rNwRbYu(iOgz-Ln7wa_TwQD9m$2Cz9v z#%6jSa0`s0*#pl5KZ892Ic25t-T=;&#i3+KB%DM-4;Cic)eyr0;Cl1`xB>*tNtOI+RKnI*}8l%g+XW4E)EiqY?$qLc%#% zOH;rc;7p9s6hmM+a1WF&!4Oyr{4us&aS!lP3w{*% z9#pW}khdS$2PLdB@KIoE1^*^+C{p7XsOwa;pxelh2z+WxM2XUYFF=b(Ahmcp`rm1o zd1}BU(BW-JeEA^kr2Lj1DFgljI+bV0uO)iO!mu0(UbF~wF(mCH1gr)A8Te@osf#y` zpx-wF{|n%|B0s{#(18euBCNrjx!vQifPyYXNB^@O0orY{_XJ z694QG^crBAr}QDyd)Wy3Un-cuY#fFdYGIhUFV;&_4zCjo0166Mx923~ymFaB@{-7G#c~=L27b4Lm(O zAOUlM(Y@3GVpc2~!QTMM^&;V(SiJ?L)jt51(F4#mQNS(0 zSK_(C5d;4e_$3H1m(yPXTZd>ja6a;zI`jtcBz&tnYgG7s;2qE@eFKB_{|pk|vzX2` z7_X@q`fQ`XuRy1-K%d}5jD|!;&YLITiJ7sOWCG*&%7!YO3w#PXw9Cj}44kFt7Q^y);4v6NF9gyMehZAss-%>( zIE_lSv>5aWz<+2H?}F&-e;yLBkPI1~IU_Q7fU$2A%P|$uOad&+E&crIP?v%p9D#2D zem7V5+)qk-`w$)Tp9DUD1Z=)l{J}J|NxvCl(CLo@Z$JfgdYp7Clqq62MoIfXZ?W{q zyCd@d3-}Q7(-2aRerwWc{iO;dk46_Vj3JbaYB(8q2b6}6V+qG$u-?P^y%_w2^FYT( zjCnFDJQvv70~e0K?Z8$Y=mtKjO0l7P4S`pW$Z-1z`~dLBcuKj(P`XD(&<_A#hwtfc z81h~N&b0K%TfiS!X4yx2{?O2d;T#e!v1GtwS?N*>z90C0OAkx~{&73jd!s^yz}6mE z44hvH=juj5oRg}0#|u&0KLmMI%-W8g!G?p6=K`y1ZfqI5)s#1&0Y z=~g!au;QXPBF0@7!~(5>-uzXa`rVe1So77D zmVUdHJ2hqXMEzzwF15jf1-X^LHN!!;Jz9lJOt{IkhHrWh7wewTlzKKKBOvb5kMb%l z<0HBI+e_#QY%ea-iG1x|Wm*h+hZ@5-c$Icso)Ue>KlCb{(V(>VUB&BKm6-`z(CjU( zpI_aoY>n1?o~N}b-DPyw6oZRJC#_%sXmBr)rOK6?ADvjR7t#)J7`v!RN3T09vb*Ep~KJ;hf3dNf-)Kjek z+LeQTG)9cIK2pD5p{$2f1U(0z)1};1G{oQ0feX&TE`3ZR9X@cinPQaV=g)O1*(pN} zBxR*r()|PcbeA%H^bmor?c)}9aDX$vGAmNCU}s;XV|C%-3;YV+W9;bUuU~;Tg6aEb zRhLcL!p~iSH)iRp$p$`YC0_m`yR;GcYwHueC9tL&u$Nctg2=M$3JJ^|gH^t{o zh?3H9r3Z1jetHysDO~PBc@mzIAN(yZ=uxs`4jy+%d+av8v`3i~z5awOJ-LWq3xd5& z: 8000208: b508 push {r3, lr} @@ -73,8 +73,8 @@ Disassembly of section .text: 8000212: f3af 8000 nop.w 8000216: bd08 pop {r3, pc} 8000218: 00000000 .word 0x00000000 - 800021c: 2000008c .word 0x2000008c - 8000220: 08006830 .word 0x08006830 + 800021c: 20000028 .word 0x20000028 + 8000220: 08005f34 .word 0x08005f34 08000224
: /** @@ -91,7 +91,7 @@ int main(void) /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); - 8000228: f000 fade bl 80007e8 + 8000228: f000 faa8 bl 800077c /* USER CODE BEGIN Init */ /* USER CODE END Init */ @@ -111,10 +111,10 @@ int main(void) MX_SPI2_Init(); 8000238: f000 f84a bl 80002d0 MX_FATFS_Init(); - 800023c: f002 f86e bl 800231c + 800023c: f002 f838 bl 80022b0 /* USER CODE BEGIN 2 */ my_main(); - 8000240: f004 fa84 bl 800474c + 8000240: f004 fa4e bl 80046e0 /* USER CODE END 2 */ @@ -138,7 +138,7 @@ void SystemClock_Config(void) 8000250: 2228 movs r2, #40 ; 0x28 8000252: 2100 movs r1, #0 8000254: 4618 mov r0, r3 - 8000256: f005 fea9 bl 8005fac + 8000256: f005 fe65 bl 8005f24 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; 800025a: 1d3b adds r3, r7, #4 800025c: 2200 movs r2, #0 @@ -175,7 +175,7 @@ void SystemClock_Config(void) if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 800028a: f107 0318 add.w r3, r7, #24 800028e: 4618 mov r0, r3 - 8000290: f000 fdc0 bl 8000e14 + 8000290: f000 fd8a bl 8000da8 8000294: 4603 mov r3, r0 8000296: 2b00 cmp r3, #0 8000298: d001 beq.n 800029e @@ -206,7 +206,7 @@ void SystemClock_Config(void) 80002b4: 1d3b adds r3, r7, #4 80002b6: 2102 movs r1, #2 80002b8: 4618 mov r0, r3 - 80002ba: f001 f82b bl 8001314 + 80002ba: f000 fff5 bl 80012a8 80002be: 4603 mov r3, r0 80002c0: 2b00 cmp r3, #0 80002c2: d001 beq.n 80002c8 @@ -284,7 +284,7 @@ static void MX_SPI2_Init(void) 800031e: 62da str r2, [r3, #44] ; 0x2c if (HAL_SPI_Init(&hspi2) != HAL_OK) 8000320: 4804 ldr r0, [pc, #16] ; (8000334 ) - 8000322: f001 f95f bl 80015e4 + 8000322: f001 f929 bl 8001578 8000326: 4603 mov r3, r0 8000328: 2b00 cmp r3, #0 800032a: d001 beq.n 8000330 @@ -299,7 +299,7 @@ static void MX_SPI2_Init(void) } 8000330: bf00 nop 8000332: bd80 pop {r7, pc} - 8000334: 200000e4 .word 0x200000e4 + 8000334: 20000074 .word 0x20000074 8000338: 40003800 .word 0x40003800 0800033c : @@ -382,14 +382,14 @@ static void MX_GPIO_Init(void) 80003c8: 2200 movs r2, #0 80003ca: f241 0101 movw r1, #4097 ; 0x1001 80003ce: 481c ldr r0, [pc, #112] ; (8000440 ) - 80003d0: f000 fd08 bl 8000de4 + 80003d0: f000 fcd2 bl 8000d78 /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(SD_E_GPIO_Port, SD_E_Pin, GPIO_PIN_RESET); 80003d4: 2200 movs r2, #0 80003d6: 2104 movs r1, #4 80003d8: 481a ldr r0, [pc, #104] ; (8000444 ) - 80003da: f000 fd03 bl 8000de4 + 80003da: f000 fccd bl 8000d78 /*Configure GPIO pin : LCD_BL_Pin */ GPIO_InitStruct.Pin = LCD_BL_Pin; @@ -408,7 +408,7 @@ static void MX_GPIO_Init(void) 80003ee: f107 0318 add.w r3, r7, #24 80003f2: 4619 mov r1, r3 80003f4: 4812 ldr r0, [pc, #72] ; (8000440 ) - 80003f6: f000 fb61 bl 8000abc + 80003f6: f000 fb2b bl 8000a50 /*Configure GPIO pin : FLASH_E_Pin */ GPIO_InitStruct.Pin = FLASH_E_Pin; @@ -427,7 +427,7 @@ static void MX_GPIO_Init(void) 800040c: f107 0318 add.w r3, r7, #24 8000410: 4619 mov r1, r3 8000412: 480b ldr r0, [pc, #44] ; (8000440 ) - 8000414: f000 fb52 bl 8000abc + 8000414: f000 fb1c bl 8000a50 /*Configure GPIO pin : SD_E_Pin */ GPIO_InitStruct.Pin = SD_E_Pin; @@ -446,7 +446,7 @@ static void MX_GPIO_Init(void) 8000428: f107 0318 add.w r3, r7, #24 800042c: 4619 mov r1, r3 800042e: 4805 ldr r0, [pc, #20] ; (8000444 ) - 8000430: f000 fb44 bl 8000abc + 8000430: f000 fb0e bl 8000a50 } 8000434: bf00 nop @@ -575,7 +575,7 @@ static void MX_FSMC_Init(void) 80004dc: 2200 movs r2, #0 80004de: 4619 mov r1, r3 80004e0: 4808 ldr r0, [pc, #32] ; (8000504 ) - 80004e2: f001 fdf7 bl 80020d4 + 80004e2: f001 fdc1 bl 8002068 80004e6: 4603 mov r3, r0 80004e8: 2b00 cmp r3, #0 80004ea: d001 beq.n 80004f0 @@ -602,7 +602,7 @@ static void MX_FSMC_Init(void) 80004fe: 3720 adds r7, #32 8000500: 46bd mov sp, r7 8000502: bd80 pop {r7, pc} - 8000504: 2000013c .word 0x2000013c + 8000504: 200000cc .word 0x200000cc 8000508: a0000104 .word 0xa0000104 800050c: 40010000 .word 0x40010000 @@ -768,7 +768,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) 80005de: f107 0310 add.w r3, r7, #16 80005e2: 4619 mov r1, r3 80005e4: 480b ldr r0, [pc, #44] ; (8000614 ) - 80005e6: f000 fa69 bl 8000abc + 80005e6: f000 fa33 bl 8000a50 GPIO_InitStruct.Pin = GPIO_PIN_14; 80005ea: f44f 4380 mov.w r3, #16384 ; 0x4000 @@ -783,7 +783,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) 80005f8: f107 0310 add.w r3, r7, #16 80005fc: 4619 mov r1, r3 80005fe: 4805 ldr r0, [pc, #20] ; (8000614 ) - 8000600: f000 fa5c bl 8000abc + 8000600: f000 fa26 bl 8000a50 /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ @@ -860,7 +860,7 @@ static void HAL_FSMC_MspInit(void){ 8000660: f107 0308 add.w r3, r7, #8 8000664: 4619 mov r1, r3 8000666: 4813 ldr r0, [pc, #76] ; (80006b4 ) - 8000668: f000 fa28 bl 8000abc + 8000668: f000 f9f2 bl 8000a50 GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 800066c: f64f 7380 movw r3, #65408 ; 0xff80 @@ -877,7 +877,7 @@ static void HAL_FSMC_MspInit(void){ 800067a: f107 0308 add.w r3, r7, #8 800067e: 4619 mov r1, r3 8000680: 480d ldr r0, [pc, #52] ; (80006b8 ) - 8000682: f000 fa1b bl 8000abc + 8000682: f000 f9e5 bl 8000a50 GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14 8000686: f24c 7333 movw r3, #50995 ; 0xc733 @@ -894,7 +894,7 @@ static void HAL_FSMC_MspInit(void){ 8000694: f107 0308 add.w r3, r7, #8 8000698: 4619 mov r1, r3 800069a: 4808 ldr r0, [pc, #32] ; (80006bc ) - 800069c: f000 fa0e bl 8000abc + 800069c: f000 f9d8 bl 8000a50 80006a0: e000 b.n 80006a4 return; 80006a2: bf00 nop @@ -907,7 +907,7 @@ static void HAL_FSMC_MspInit(void){ 80006a6: 46bd mov sp, r7 80006a8: bd80 pop {r7, pc} 80006aa: bf00 nop - 80006ac: 200000a4 .word 0x200000a4 + 80006ac: 20000040 .word 0x20000040 80006b0: 40021000 .word 0x40021000 80006b4: 40012000 .word 0x40012000 80006b8: 40011800 .word 0x40011800 @@ -1083,15346 +1083,14319 @@ void SysTick_Handler(void) /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); - 800071a: f000 f8ab bl 8000874 + 800071a: f000 f875 bl 8000808 /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ } 800071e: bf00 nop 8000720: bd80 pop {r7, pc} - ... -08000724 <_sbrk>: - * - * @param incr Memory size - * @return Pointer to allocated memory - */ -void *_sbrk(ptrdiff_t incr) -{ - 8000724: b580 push {r7, lr} - 8000726: b086 sub sp, #24 - 8000728: af00 add r7, sp, #0 - 800072a: 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; - 800072c: 4a14 ldr r2, [pc, #80] ; (8000780 <_sbrk+0x5c>) - 800072e: 4b15 ldr r3, [pc, #84] ; (8000784 <_sbrk+0x60>) - 8000730: 1ad3 subs r3, r2, r3 - 8000732: 617b str r3, [r7, #20] - const uint8_t *max_heap = (uint8_t *)stack_limit; - 8000734: 697b ldr r3, [r7, #20] - 8000736: 613b str r3, [r7, #16] - uint8_t *prev_heap_end; - - /* Initialize heap end at first call */ - if (NULL == __sbrk_heap_end) - 8000738: 4b13 ldr r3, [pc, #76] ; (8000788 <_sbrk+0x64>) - 800073a: 681b ldr r3, [r3, #0] - 800073c: 2b00 cmp r3, #0 - 800073e: d102 bne.n 8000746 <_sbrk+0x22> - { - __sbrk_heap_end = &_end; - 8000740: 4b11 ldr r3, [pc, #68] ; (8000788 <_sbrk+0x64>) - 8000742: 4a12 ldr r2, [pc, #72] ; (800078c <_sbrk+0x68>) - 8000744: 601a str r2, [r3, #0] - } - - /* Protect heap from growing into the reserved MSP stack */ - if (__sbrk_heap_end + incr > max_heap) - 8000746: 4b10 ldr r3, [pc, #64] ; (8000788 <_sbrk+0x64>) - 8000748: 681a ldr r2, [r3, #0] - 800074a: 687b ldr r3, [r7, #4] - 800074c: 4413 add r3, r2 - 800074e: 693a ldr r2, [r7, #16] - 8000750: 429a cmp r2, r3 - 8000752: d207 bcs.n 8000764 <_sbrk+0x40> - { - errno = ENOMEM; - 8000754: f005 fc00 bl 8005f58 <__errno> - 8000758: 4603 mov r3, r0 - 800075a: 220c movs r2, #12 - 800075c: 601a str r2, [r3, #0] - return (void *)-1; - 800075e: f04f 33ff mov.w r3, #4294967295 - 8000762: e009 b.n 8000778 <_sbrk+0x54> - } - - prev_heap_end = __sbrk_heap_end; - 8000764: 4b08 ldr r3, [pc, #32] ; (8000788 <_sbrk+0x64>) - 8000766: 681b ldr r3, [r3, #0] - 8000768: 60fb str r3, [r7, #12] - __sbrk_heap_end += incr; - 800076a: 4b07 ldr r3, [pc, #28] ; (8000788 <_sbrk+0x64>) - 800076c: 681a ldr r2, [r3, #0] - 800076e: 687b ldr r3, [r7, #4] - 8000770: 4413 add r3, r2 - 8000772: 4a05 ldr r2, [pc, #20] ; (8000788 <_sbrk+0x64>) - 8000774: 6013 str r3, [r2, #0] - - return (void *)prev_heap_end; - 8000776: 68fb ldr r3, [r7, #12] -} - 8000778: 4618 mov r0, r3 - 800077a: 3718 adds r7, #24 - 800077c: 46bd mov sp, r7 - 800077e: bd80 pop {r7, pc} - 8000780: 20010000 .word 0x20010000 - 8000784: 00000800 .word 0x00000800 - 8000788: 200000a8 .word 0x200000a8 - 800078c: 20000860 .word 0x20000860 - -08000790 : +08000722 : * @note This function should be used only after reset. * @param None * @retval None */ void SystemInit (void) { - 8000790: b480 push {r7} - 8000792: af00 add r7, sp, #0 + 8000722: b480 push {r7} + 8000724: 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 */ } - 8000794: bf00 nop - 8000796: 46bd mov sp, r7 - 8000798: bc80 pop {r7} - 800079a: 4770 bx lr + 8000726: bf00 nop + 8000728: 46bd mov sp, r7 + 800072a: bc80 pop {r7} + 800072c: 4770 bx lr + ... -0800079c : +08000730 : .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: /* Copy the data segment initializers from flash to SRAM */ movs r1, #0 - 800079c: 2100 movs r1, #0 + 8000730: 2100 movs r1, #0 b LoopCopyDataInit - 800079e: e003 b.n 80007a8 + 8000732: e003 b.n 800073c -080007a0 : +08000734 : CopyDataInit: ldr r3, =_sidata - 80007a0: 4b0b ldr r3, [pc, #44] ; (80007d0 ) + 8000734: 4b0b ldr r3, [pc, #44] ; (8000764 ) ldr r3, [r3, r1] - 80007a2: 585b ldr r3, [r3, r1] + 8000736: 585b ldr r3, [r3, r1] str r3, [r0, r1] - 80007a4: 5043 str r3, [r0, r1] + 8000738: 5043 str r3, [r0, r1] adds r1, r1, #4 - 80007a6: 3104 adds r1, #4 + 800073a: 3104 adds r1, #4 -080007a8 : +0800073c : LoopCopyDataInit: ldr r0, =_sdata - 80007a8: 480a ldr r0, [pc, #40] ; (80007d4 ) + 800073c: 480a ldr r0, [pc, #40] ; (8000768 ) ldr r3, =_edata - 80007aa: 4b0b ldr r3, [pc, #44] ; (80007d8 ) + 800073e: 4b0b ldr r3, [pc, #44] ; (800076c ) adds r2, r0, r1 - 80007ac: 1842 adds r2, r0, r1 + 8000740: 1842 adds r2, r0, r1 cmp r2, r3 - 80007ae: 429a cmp r2, r3 + 8000742: 429a cmp r2, r3 bcc CopyDataInit - 80007b0: d3f6 bcc.n 80007a0 + 8000744: d3f6 bcc.n 8000734 ldr r2, =_sbss - 80007b2: 4a0a ldr r2, [pc, #40] ; (80007dc ) + 8000746: 4a0a ldr r2, [pc, #40] ; (8000770 ) b LoopFillZerobss - 80007b4: e002 b.n 80007bc + 8000748: e002 b.n 8000750 -080007b6 : +0800074a : /* Zero fill the bss segment. */ FillZerobss: movs r3, #0 - 80007b6: 2300 movs r3, #0 + 800074a: 2300 movs r3, #0 str r3, [r2], #4 - 80007b8: f842 3b04 str.w r3, [r2], #4 + 800074c: f842 3b04 str.w r3, [r2], #4 -080007bc : +08000750 : LoopFillZerobss: ldr r3, = _ebss - 80007bc: 4b08 ldr r3, [pc, #32] ; (80007e0 ) + 8000750: 4b08 ldr r3, [pc, #32] ; (8000774 ) cmp r2, r3 - 80007be: 429a cmp r2, r3 + 8000752: 429a cmp r2, r3 bcc FillZerobss - 80007c0: d3f9 bcc.n 80007b6 + 8000754: d3f9 bcc.n 800074a /* Call the clock system intitialization function.*/ bl SystemInit - 80007c2: f7ff ffe5 bl 8000790 + 8000756: f7ff ffe4 bl 8000722 /* Call static constructors */ bl __libc_init_array - 80007c6: f005 fbcd bl 8005f64 <__libc_init_array> + 800075a: f005 fbbf bl 8005edc <__libc_init_array> /* Call the application's entry point.*/ bl main - 80007ca: f7ff fd2b bl 8000224
+ 800075e: f7ff fd61 bl 8000224
bx lr - 80007ce: 4770 bx lr + 8000762: 4770 bx lr ldr r3, =_sidata - 80007d0: 080073ec .word 0x080073ec + 8000764: 08006ab4 .word 0x08006ab4 ldr r0, =_sdata - 80007d4: 20000000 .word 0x20000000 + 8000768: 20000000 .word 0x20000000 ldr r3, =_edata - 80007d8: 20000088 .word 0x20000088 + 800076c: 20000024 .word 0x20000024 ldr r2, =_sbss - 80007dc: 20000088 .word 0x20000088 + 8000770: 20000024 .word 0x20000024 ldr r3, = _ebss - 80007e0: 20000860 .word 0x20000860 + 8000774: 200007e0 .word 0x200007e0 -080007e4 : +08000778 : * @retval : None */ .section .text.Default_Handler,"ax",%progbits Default_Handler: Infinite_Loop: b Infinite_Loop - 80007e4: e7fe b.n 80007e4 + 8000778: e7fe b.n 8000778 ... -080007e8 : +0800077c : * 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) { - 80007e8: b580 push {r7, lr} - 80007ea: af00 add r7, sp, #0 + 800077c: b580 push {r7, lr} + 800077e: 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(); - 80007ec: 4b08 ldr r3, [pc, #32] ; (8000810 ) - 80007ee: 681b ldr r3, [r3, #0] - 80007f0: 4a07 ldr r2, [pc, #28] ; (8000810 ) - 80007f2: f043 0310 orr.w r3, r3, #16 - 80007f6: 6013 str r3, [r2, #0] + 8000780: 4b08 ldr r3, [pc, #32] ; (80007a4 ) + 8000782: 681b ldr r3, [r3, #0] + 8000784: 4a07 ldr r2, [pc, #28] ; (80007a4 ) + 8000786: f043 0310 orr.w r3, r3, #16 + 800078a: 6013 str r3, [r2, #0] #endif #endif /* PREFETCH_ENABLE */ /* Set Interrupt Group Priority */ HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); - 80007f8: 2003 movs r0, #3 - 80007fa: f000 f92b bl 8000a54 + 800078c: 2003 movs r0, #3 + 800078e: f000 f92b bl 80009e8 /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */ HAL_InitTick(TICK_INT_PRIORITY); - 80007fe: 2000 movs r0, #0 - 8000800: f000 f808 bl 8000814 + 8000792: 2000 movs r0, #0 + 8000794: f000 f808 bl 80007a8 /* Init the low level hardware */ HAL_MspInit(); - 8000804: f7ff fe8a bl 800051c + 8000798: f7ff fec0 bl 800051c /* Return function status */ return HAL_OK; - 8000808: 2300 movs r3, #0 + 800079c: 2300 movs r3, #0 } - 800080a: 4618 mov r0, r3 - 800080c: bd80 pop {r7, pc} - 800080e: bf00 nop - 8000810: 40022000 .word 0x40022000 + 800079e: 4618 mov r0, r3 + 80007a0: bd80 pop {r7, pc} + 80007a2: bf00 nop + 80007a4: 40022000 .word 0x40022000 -08000814 : +080007a8 : * implementation in user file. * @param TickPriority Tick interrupt priority. * @retval HAL status */ __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { - 8000814: b580 push {r7, lr} - 8000816: b082 sub sp, #8 - 8000818: af00 add r7, sp, #0 - 800081a: 6078 str r0, [r7, #4] + 80007a8: b580 push {r7, lr} + 80007aa: b082 sub sp, #8 + 80007ac: af00 add r7, sp, #0 + 80007ae: 6078 str r0, [r7, #4] /* Configure the SysTick to have interrupt in 1ms time basis*/ if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) - 800081c: 4b12 ldr r3, [pc, #72] ; (8000868 ) - 800081e: 681a ldr r2, [r3, #0] - 8000820: 4b12 ldr r3, [pc, #72] ; (800086c ) - 8000822: 781b ldrb r3, [r3, #0] - 8000824: 4619 mov r1, r3 - 8000826: f44f 737a mov.w r3, #1000 ; 0x3e8 - 800082a: fbb3 f3f1 udiv r3, r3, r1 - 800082e: fbb2 f3f3 udiv r3, r2, r3 - 8000832: 4618 mov r0, r3 - 8000834: f000 f935 bl 8000aa2 - 8000838: 4603 mov r3, r0 - 800083a: 2b00 cmp r3, #0 - 800083c: d001 beq.n 8000842 + 80007b0: 4b12 ldr r3, [pc, #72] ; (80007fc ) + 80007b2: 681a ldr r2, [r3, #0] + 80007b4: 4b12 ldr r3, [pc, #72] ; (8000800 ) + 80007b6: 781b ldrb r3, [r3, #0] + 80007b8: 4619 mov r1, r3 + 80007ba: f44f 737a mov.w r3, #1000 ; 0x3e8 + 80007be: fbb3 f3f1 udiv r3, r3, r1 + 80007c2: fbb2 f3f3 udiv r3, r2, r3 + 80007c6: 4618 mov r0, r3 + 80007c8: f000 f935 bl 8000a36 + 80007cc: 4603 mov r3, r0 + 80007ce: 2b00 cmp r3, #0 + 80007d0: d001 beq.n 80007d6 { return HAL_ERROR; - 800083e: 2301 movs r3, #1 - 8000840: e00e b.n 8000860 + 80007d2: 2301 movs r3, #1 + 80007d4: e00e b.n 80007f4 } /* Configure the SysTick IRQ priority */ if (TickPriority < (1UL << __NVIC_PRIO_BITS)) - 8000842: 687b ldr r3, [r7, #4] - 8000844: 2b0f cmp r3, #15 - 8000846: d80a bhi.n 800085e + 80007d6: 687b ldr r3, [r7, #4] + 80007d8: 2b0f cmp r3, #15 + 80007da: d80a bhi.n 80007f2 { HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U); - 8000848: 2200 movs r2, #0 - 800084a: 6879 ldr r1, [r7, #4] - 800084c: f04f 30ff mov.w r0, #4294967295 - 8000850: f000 f90b bl 8000a6a + 80007dc: 2200 movs r2, #0 + 80007de: 6879 ldr r1, [r7, #4] + 80007e0: f04f 30ff mov.w r0, #4294967295 + 80007e4: f000 f90b bl 80009fe uwTickPrio = TickPriority; - 8000854: 4a06 ldr r2, [pc, #24] ; (8000870 ) - 8000856: 687b ldr r3, [r7, #4] - 8000858: 6013 str r3, [r2, #0] + 80007e8: 4a06 ldr r2, [pc, #24] ; (8000804 ) + 80007ea: 687b ldr r3, [r7, #4] + 80007ec: 6013 str r3, [r2, #0] { return HAL_ERROR; } /* Return function status */ return HAL_OK; - 800085a: 2300 movs r3, #0 - 800085c: e000 b.n 8000860 + 80007ee: 2300 movs r3, #0 + 80007f0: e000 b.n 80007f4 return HAL_ERROR; - 800085e: 2301 movs r3, #1 + 80007f2: 2301 movs r3, #1 } - 8000860: 4618 mov r0, r3 - 8000862: 3708 adds r7, #8 - 8000864: 46bd mov sp, r7 - 8000866: bd80 pop {r7, pc} - 8000868: 20000000 .word 0x20000000 - 800086c: 20000008 .word 0x20000008 - 8000870: 20000004 .word 0x20000004 + 80007f4: 4618 mov r0, r3 + 80007f6: 3708 adds r7, #8 + 80007f8: 46bd mov sp, r7 + 80007fa: bd80 pop {r7, pc} + 80007fc: 20000000 .word 0x20000000 + 8000800: 20000008 .word 0x20000008 + 8000804: 20000004 .word 0x20000004 -08000874 : +08000808 : * @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) { - 8000874: b480 push {r7} - 8000876: af00 add r7, sp, #0 + 8000808: b480 push {r7} + 800080a: af00 add r7, sp, #0 uwTick += uwTickFreq; - 8000878: 4b05 ldr r3, [pc, #20] ; (8000890 ) - 800087a: 781b ldrb r3, [r3, #0] - 800087c: 461a mov r2, r3 - 800087e: 4b05 ldr r3, [pc, #20] ; (8000894 ) - 8000880: 681b ldr r3, [r3, #0] - 8000882: 4413 add r3, r2 - 8000884: 4a03 ldr r2, [pc, #12] ; (8000894 ) - 8000886: 6013 str r3, [r2, #0] + 800080c: 4b05 ldr r3, [pc, #20] ; (8000824 ) + 800080e: 781b ldrb r3, [r3, #0] + 8000810: 461a mov r2, r3 + 8000812: 4b05 ldr r3, [pc, #20] ; (8000828 ) + 8000814: 681b ldr r3, [r3, #0] + 8000816: 4413 add r3, r2 + 8000818: 4a03 ldr r2, [pc, #12] ; (8000828 ) + 800081a: 6013 str r3, [r2, #0] } - 8000888: bf00 nop - 800088a: 46bd mov sp, r7 - 800088c: bc80 pop {r7} - 800088e: 4770 bx lr - 8000890: 20000008 .word 0x20000008 - 8000894: 20000184 .word 0x20000184 + 800081c: bf00 nop + 800081e: 46bd mov sp, r7 + 8000820: bc80 pop {r7} + 8000822: 4770 bx lr + 8000824: 20000008 .word 0x20000008 + 8000828: 20000114 .word 0x20000114 -08000898 : +0800082c : * @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) { - 8000898: b480 push {r7} - 800089a: af00 add r7, sp, #0 + 800082c: b480 push {r7} + 800082e: af00 add r7, sp, #0 return uwTick; - 800089c: 4b02 ldr r3, [pc, #8] ; (80008a8 ) - 800089e: 681b ldr r3, [r3, #0] + 8000830: 4b02 ldr r3, [pc, #8] ; (800083c ) + 8000832: 681b ldr r3, [r3, #0] } - 80008a0: 4618 mov r0, r3 - 80008a2: 46bd mov sp, r7 - 80008a4: bc80 pop {r7} - 80008a6: 4770 bx lr - 80008a8: 20000184 .word 0x20000184 + 8000834: 4618 mov r0, r3 + 8000836: 46bd mov sp, r7 + 8000838: bc80 pop {r7} + 800083a: 4770 bx lr + 800083c: 20000114 .word 0x20000114 -080008ac : +08000840 : * implementations in user file. * @param Delay specifies the delay time length, in milliseconds. * @retval None */ __weak void HAL_Delay(uint32_t Delay) { - 80008ac: b580 push {r7, lr} - 80008ae: b084 sub sp, #16 - 80008b0: af00 add r7, sp, #0 - 80008b2: 6078 str r0, [r7, #4] + 8000840: b580 push {r7, lr} + 8000842: b084 sub sp, #16 + 8000844: af00 add r7, sp, #0 + 8000846: 6078 str r0, [r7, #4] uint32_t tickstart = HAL_GetTick(); - 80008b4: f7ff fff0 bl 8000898 - 80008b8: 60b8 str r0, [r7, #8] + 8000848: f7ff fff0 bl 800082c + 800084c: 60b8 str r0, [r7, #8] uint32_t wait = Delay; - 80008ba: 687b ldr r3, [r7, #4] - 80008bc: 60fb str r3, [r7, #12] + 800084e: 687b ldr r3, [r7, #4] + 8000850: 60fb str r3, [r7, #12] /* Add a freq to guarantee minimum wait */ if (wait < HAL_MAX_DELAY) - 80008be: 68fb ldr r3, [r7, #12] - 80008c0: f1b3 3fff cmp.w r3, #4294967295 - 80008c4: d005 beq.n 80008d2 + 8000852: 68fb ldr r3, [r7, #12] + 8000854: f1b3 3fff cmp.w r3, #4294967295 + 8000858: d005 beq.n 8000866 { wait += (uint32_t)(uwTickFreq); - 80008c6: 4b0a ldr r3, [pc, #40] ; (80008f0 ) - 80008c8: 781b ldrb r3, [r3, #0] - 80008ca: 461a mov r2, r3 - 80008cc: 68fb ldr r3, [r7, #12] - 80008ce: 4413 add r3, r2 - 80008d0: 60fb str r3, [r7, #12] + 800085a: 4b0a ldr r3, [pc, #40] ; (8000884 ) + 800085c: 781b ldrb r3, [r3, #0] + 800085e: 461a mov r2, r3 + 8000860: 68fb ldr r3, [r7, #12] + 8000862: 4413 add r3, r2 + 8000864: 60fb str r3, [r7, #12] } while ((HAL_GetTick() - tickstart) < wait) - 80008d2: bf00 nop - 80008d4: f7ff ffe0 bl 8000898 - 80008d8: 4602 mov r2, r0 - 80008da: 68bb ldr r3, [r7, #8] - 80008dc: 1ad3 subs r3, r2, r3 - 80008de: 68fa ldr r2, [r7, #12] - 80008e0: 429a cmp r2, r3 - 80008e2: d8f7 bhi.n 80008d4 + 8000866: bf00 nop + 8000868: f7ff ffe0 bl 800082c + 800086c: 4602 mov r2, r0 + 800086e: 68bb ldr r3, [r7, #8] + 8000870: 1ad3 subs r3, r2, r3 + 8000872: 68fa ldr r2, [r7, #12] + 8000874: 429a cmp r2, r3 + 8000876: d8f7 bhi.n 8000868 { } } - 80008e4: bf00 nop - 80008e6: bf00 nop - 80008e8: 3710 adds r7, #16 - 80008ea: 46bd mov sp, r7 - 80008ec: bd80 pop {r7, pc} - 80008ee: bf00 nop - 80008f0: 20000008 .word 0x20000008 + 8000878: bf00 nop + 800087a: bf00 nop + 800087c: 3710 adds r7, #16 + 800087e: 46bd mov sp, r7 + 8000880: bd80 pop {r7, pc} + 8000882: bf00 nop + 8000884: 20000008 .word 0x20000008 -080008f4 <__NVIC_SetPriorityGrouping>: +08000888 <__NVIC_SetPriorityGrouping>: In case of a conflict between priority grouping and available priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. \param [in] PriorityGroup Priority grouping field. */ __STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) { - 80008f4: b480 push {r7} - 80008f6: b085 sub sp, #20 - 80008f8: af00 add r7, sp, #0 - 80008fa: 6078 str r0, [r7, #4] + 8000888: b480 push {r7} + 800088a: b085 sub sp, #20 + 800088c: af00 add r7, sp, #0 + 800088e: 6078 str r0, [r7, #4] uint32_t reg_value; uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 80008fc: 687b ldr r3, [r7, #4] - 80008fe: f003 0307 and.w r3, r3, #7 - 8000902: 60fb str r3, [r7, #12] + 8000890: 687b ldr r3, [r7, #4] + 8000892: f003 0307 and.w r3, r3, #7 + 8000896: 60fb str r3, [r7, #12] reg_value = SCB->AIRCR; /* read old register configuration */ - 8000904: 4b0c ldr r3, [pc, #48] ; (8000938 <__NVIC_SetPriorityGrouping+0x44>) - 8000906: 68db ldr r3, [r3, #12] - 8000908: 60bb str r3, [r7, #8] + 8000898: 4b0c ldr r3, [pc, #48] ; (80008cc <__NVIC_SetPriorityGrouping+0x44>) + 800089a: 68db ldr r3, [r3, #12] + 800089c: 60bb str r3, [r7, #8] reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ - 800090a: 68ba ldr r2, [r7, #8] - 800090c: f64f 03ff movw r3, #63743 ; 0xf8ff - 8000910: 4013 ands r3, r2 - 8000912: 60bb str r3, [r7, #8] + 800089e: 68ba ldr r2, [r7, #8] + 80008a0: f64f 03ff movw r3, #63743 ; 0xf8ff + 80008a4: 4013 ands r3, r2 + 80008a6: 60bb str r3, [r7, #8] reg_value = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ - 8000914: 68fb ldr r3, [r7, #12] - 8000916: 021a lsls r2, r3, #8 + 80008a8: 68fb ldr r3, [r7, #12] + 80008aa: 021a lsls r2, r3, #8 ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | - 8000918: 68bb ldr r3, [r7, #8] - 800091a: 4313 orrs r3, r2 + 80008ac: 68bb ldr r3, [r7, #8] + 80008ae: 4313 orrs r3, r2 reg_value = (reg_value | - 800091c: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 - 8000920: f443 3300 orr.w r3, r3, #131072 ; 0x20000 - 8000924: 60bb str r3, [r7, #8] + 80008b0: f043 63bf orr.w r3, r3, #100139008 ; 0x5f80000 + 80008b4: f443 3300 orr.w r3, r3, #131072 ; 0x20000 + 80008b8: 60bb str r3, [r7, #8] SCB->AIRCR = reg_value; - 8000926: 4a04 ldr r2, [pc, #16] ; (8000938 <__NVIC_SetPriorityGrouping+0x44>) - 8000928: 68bb ldr r3, [r7, #8] - 800092a: 60d3 str r3, [r2, #12] + 80008ba: 4a04 ldr r2, [pc, #16] ; (80008cc <__NVIC_SetPriorityGrouping+0x44>) + 80008bc: 68bb ldr r3, [r7, #8] + 80008be: 60d3 str r3, [r2, #12] } - 800092c: bf00 nop - 800092e: 3714 adds r7, #20 - 8000930: 46bd mov sp, r7 - 8000932: bc80 pop {r7} - 8000934: 4770 bx lr - 8000936: bf00 nop - 8000938: e000ed00 .word 0xe000ed00 + 80008c0: bf00 nop + 80008c2: 3714 adds r7, #20 + 80008c4: 46bd mov sp, r7 + 80008c6: bc80 pop {r7} + 80008c8: 4770 bx lr + 80008ca: bf00 nop + 80008cc: e000ed00 .word 0xe000ed00 -0800093c <__NVIC_GetPriorityGrouping>: +080008d0 <__NVIC_GetPriorityGrouping>: \brief Get Priority Grouping \details Reads the priority grouping field from the NVIC Interrupt Controller. \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). */ __STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) { - 800093c: b480 push {r7} - 800093e: af00 add r7, sp, #0 + 80008d0: b480 push {r7} + 80008d2: af00 add r7, sp, #0 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); - 8000940: 4b04 ldr r3, [pc, #16] ; (8000954 <__NVIC_GetPriorityGrouping+0x18>) - 8000942: 68db ldr r3, [r3, #12] - 8000944: 0a1b lsrs r3, r3, #8 - 8000946: f003 0307 and.w r3, r3, #7 + 80008d4: 4b04 ldr r3, [pc, #16] ; (80008e8 <__NVIC_GetPriorityGrouping+0x18>) + 80008d6: 68db ldr r3, [r3, #12] + 80008d8: 0a1b lsrs r3, r3, #8 + 80008da: f003 0307 and.w r3, r3, #7 } - 800094a: 4618 mov r0, r3 - 800094c: 46bd mov sp, r7 - 800094e: bc80 pop {r7} - 8000950: 4770 bx lr - 8000952: bf00 nop - 8000954: e000ed00 .word 0xe000ed00 + 80008de: 4618 mov r0, r3 + 80008e0: 46bd mov sp, r7 + 80008e2: bc80 pop {r7} + 80008e4: 4770 bx lr + 80008e6: bf00 nop + 80008e8: e000ed00 .word 0xe000ed00 -08000958 <__NVIC_SetPriority>: +080008ec <__NVIC_SetPriority>: \param [in] IRQn Interrupt number. \param [in] priority Priority to set. \note The priority cannot be set for every processor exception. */ __STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) { - 8000958: b480 push {r7} - 800095a: b083 sub sp, #12 - 800095c: af00 add r7, sp, #0 - 800095e: 4603 mov r3, r0 - 8000960: 6039 str r1, [r7, #0] - 8000962: 71fb strb r3, [r7, #7] + 80008ec: b480 push {r7} + 80008ee: b083 sub sp, #12 + 80008f0: af00 add r7, sp, #0 + 80008f2: 4603 mov r3, r0 + 80008f4: 6039 str r1, [r7, #0] + 80008f6: 71fb strb r3, [r7, #7] if ((int32_t)(IRQn) >= 0) - 8000964: f997 3007 ldrsb.w r3, [r7, #7] - 8000968: 2b00 cmp r3, #0 - 800096a: db0a blt.n 8000982 <__NVIC_SetPriority+0x2a> + 80008f8: f997 3007 ldrsb.w r3, [r7, #7] + 80008fc: 2b00 cmp r3, #0 + 80008fe: db0a blt.n 8000916 <__NVIC_SetPriority+0x2a> { NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 800096c: 683b ldr r3, [r7, #0] - 800096e: b2da uxtb r2, r3 - 8000970: 490c ldr r1, [pc, #48] ; (80009a4 <__NVIC_SetPriority+0x4c>) - 8000972: f997 3007 ldrsb.w r3, [r7, #7] - 8000976: 0112 lsls r2, r2, #4 - 8000978: b2d2 uxtb r2, r2 - 800097a: 440b add r3, r1 - 800097c: f883 2300 strb.w r2, [r3, #768] ; 0x300 + 8000900: 683b ldr r3, [r7, #0] + 8000902: b2da uxtb r2, r3 + 8000904: 490c ldr r1, [pc, #48] ; (8000938 <__NVIC_SetPriority+0x4c>) + 8000906: f997 3007 ldrsb.w r3, [r7, #7] + 800090a: 0112 lsls r2, r2, #4 + 800090c: b2d2 uxtb r2, r2 + 800090e: 440b add r3, r1 + 8000910: f883 2300 strb.w r2, [r3, #768] ; 0x300 } else { SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); } } - 8000980: e00a b.n 8000998 <__NVIC_SetPriority+0x40> + 8000914: e00a b.n 800092c <__NVIC_SetPriority+0x40> SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); - 8000982: 683b ldr r3, [r7, #0] - 8000984: b2da uxtb r2, r3 - 8000986: 4908 ldr r1, [pc, #32] ; (80009a8 <__NVIC_SetPriority+0x50>) - 8000988: 79fb ldrb r3, [r7, #7] - 800098a: f003 030f and.w r3, r3, #15 - 800098e: 3b04 subs r3, #4 - 8000990: 0112 lsls r2, r2, #4 - 8000992: b2d2 uxtb r2, r2 - 8000994: 440b add r3, r1 - 8000996: 761a strb r2, [r3, #24] + 8000916: 683b ldr r3, [r7, #0] + 8000918: b2da uxtb r2, r3 + 800091a: 4908 ldr r1, [pc, #32] ; (800093c <__NVIC_SetPriority+0x50>) + 800091c: 79fb ldrb r3, [r7, #7] + 800091e: f003 030f and.w r3, r3, #15 + 8000922: 3b04 subs r3, #4 + 8000924: 0112 lsls r2, r2, #4 + 8000926: b2d2 uxtb r2, r2 + 8000928: 440b add r3, r1 + 800092a: 761a strb r2, [r3, #24] } - 8000998: bf00 nop - 800099a: 370c adds r7, #12 - 800099c: 46bd mov sp, r7 - 800099e: bc80 pop {r7} - 80009a0: 4770 bx lr - 80009a2: bf00 nop - 80009a4: e000e100 .word 0xe000e100 - 80009a8: e000ed00 .word 0xe000ed00 + 800092c: bf00 nop + 800092e: 370c adds r7, #12 + 8000930: 46bd mov sp, r7 + 8000932: bc80 pop {r7} + 8000934: 4770 bx lr + 8000936: bf00 nop + 8000938: e000e100 .word 0xe000e100 + 800093c: e000ed00 .word 0xe000ed00 -080009ac : +08000940 : \param [in] PreemptPriority Preemptive priority value (starting from 0). \param [in] SubPriority Subpriority value (starting from 0). \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). */ __STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) { - 80009ac: b480 push {r7} - 80009ae: b089 sub sp, #36 ; 0x24 - 80009b0: af00 add r7, sp, #0 - 80009b2: 60f8 str r0, [r7, #12] - 80009b4: 60b9 str r1, [r7, #8] - 80009b6: 607a str r2, [r7, #4] + 8000940: b480 push {r7} + 8000942: b089 sub sp, #36 ; 0x24 + 8000944: af00 add r7, sp, #0 + 8000946: 60f8 str r0, [r7, #12] + 8000948: 60b9 str r1, [r7, #8] + 800094a: 607a str r2, [r7, #4] uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ - 80009b8: 68fb ldr r3, [r7, #12] - 80009ba: f003 0307 and.w r3, r3, #7 - 80009be: 61fb str r3, [r7, #28] + 800094c: 68fb ldr r3, [r7, #12] + 800094e: f003 0307 and.w r3, r3, #7 + 8000952: 61fb str r3, [r7, #28] uint32_t PreemptPriorityBits; uint32_t SubPriorityBits; PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); - 80009c0: 69fb ldr r3, [r7, #28] - 80009c2: f1c3 0307 rsb r3, r3, #7 - 80009c6: 2b04 cmp r3, #4 - 80009c8: bf28 it cs - 80009ca: 2304 movcs r3, #4 - 80009cc: 61bb str r3, [r7, #24] + 8000954: 69fb ldr r3, [r7, #28] + 8000956: f1c3 0307 rsb r3, r3, #7 + 800095a: 2b04 cmp r3, #4 + 800095c: bf28 it cs + 800095e: 2304 movcs r3, #4 + 8000960: 61bb str r3, [r7, #24] SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); - 80009ce: 69fb ldr r3, [r7, #28] - 80009d0: 3304 adds r3, #4 - 80009d2: 2b06 cmp r3, #6 - 80009d4: d902 bls.n 80009dc - 80009d6: 69fb ldr r3, [r7, #28] - 80009d8: 3b03 subs r3, #3 - 80009da: e000 b.n 80009de - 80009dc: 2300 movs r3, #0 - 80009de: 617b str r3, [r7, #20] + 8000962: 69fb ldr r3, [r7, #28] + 8000964: 3304 adds r3, #4 + 8000966: 2b06 cmp r3, #6 + 8000968: d902 bls.n 8000970 + 800096a: 69fb ldr r3, [r7, #28] + 800096c: 3b03 subs r3, #3 + 800096e: e000 b.n 8000972 + 8000970: 2300 movs r3, #0 + 8000972: 617b str r3, [r7, #20] return ( ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 80009e0: f04f 32ff mov.w r2, #4294967295 - 80009e4: 69bb ldr r3, [r7, #24] - 80009e6: fa02 f303 lsl.w r3, r2, r3 - 80009ea: 43da mvns r2, r3 - 80009ec: 68bb ldr r3, [r7, #8] - 80009ee: 401a ands r2, r3 - 80009f0: 697b ldr r3, [r7, #20] - 80009f2: 409a lsls r2, r3 + 8000974: f04f 32ff mov.w r2, #4294967295 + 8000978: 69bb ldr r3, [r7, #24] + 800097a: fa02 f303 lsl.w r3, r2, r3 + 800097e: 43da mvns r2, r3 + 8000980: 68bb ldr r3, [r7, #8] + 8000982: 401a ands r2, r3 + 8000984: 697b ldr r3, [r7, #20] + 8000986: 409a lsls r2, r3 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) - 80009f4: f04f 31ff mov.w r1, #4294967295 - 80009f8: 697b ldr r3, [r7, #20] - 80009fa: fa01 f303 lsl.w r3, r1, r3 - 80009fe: 43d9 mvns r1, r3 - 8000a00: 687b ldr r3, [r7, #4] - 8000a02: 400b ands r3, r1 + 8000988: f04f 31ff mov.w r1, #4294967295 + 800098c: 697b ldr r3, [r7, #20] + 800098e: fa01 f303 lsl.w r3, r1, r3 + 8000992: 43d9 mvns r1, r3 + 8000994: 687b ldr r3, [r7, #4] + 8000996: 400b ands r3, r1 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | - 8000a04: 4313 orrs r3, r2 + 8000998: 4313 orrs r3, r2 ); } - 8000a06: 4618 mov r0, r3 - 8000a08: 3724 adds r7, #36 ; 0x24 - 8000a0a: 46bd mov sp, r7 - 8000a0c: bc80 pop {r7} - 8000a0e: 4770 bx lr + 800099a: 4618 mov r0, r3 + 800099c: 3724 adds r7, #36 ; 0x24 + 800099e: 46bd mov sp, r7 + 80009a0: bc80 pop {r7} + 80009a2: 4770 bx lr -08000a10 : +080009a4 : \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) { - 8000a10: b580 push {r7, lr} - 8000a12: b082 sub sp, #8 - 8000a14: af00 add r7, sp, #0 - 8000a16: 6078 str r0, [r7, #4] + 80009a4: b580 push {r7, lr} + 80009a6: b082 sub sp, #8 + 80009a8: af00 add r7, sp, #0 + 80009aa: 6078 str r0, [r7, #4] if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - 8000a18: 687b ldr r3, [r7, #4] - 8000a1a: 3b01 subs r3, #1 - 8000a1c: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 - 8000a20: d301 bcc.n 8000a26 + 80009ac: 687b ldr r3, [r7, #4] + 80009ae: 3b01 subs r3, #1 + 80009b0: f1b3 7f80 cmp.w r3, #16777216 ; 0x1000000 + 80009b4: d301 bcc.n 80009ba { return (1UL); /* Reload value impossible */ - 8000a22: 2301 movs r3, #1 - 8000a24: e00f b.n 8000a46 + 80009b6: 2301 movs r3, #1 + 80009b8: e00f b.n 80009da } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - 8000a26: 4a0a ldr r2, [pc, #40] ; (8000a50 ) - 8000a28: 687b ldr r3, [r7, #4] - 8000a2a: 3b01 subs r3, #1 - 8000a2c: 6053 str r3, [r2, #4] + 80009ba: 4a0a ldr r2, [pc, #40] ; (80009e4 ) + 80009bc: 687b ldr r3, [r7, #4] + 80009be: 3b01 subs r3, #1 + 80009c0: 6053 str r3, [r2, #4] NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - 8000a2e: 210f movs r1, #15 - 8000a30: f04f 30ff mov.w r0, #4294967295 - 8000a34: f7ff ff90 bl 8000958 <__NVIC_SetPriority> + 80009c2: 210f movs r1, #15 + 80009c4: f04f 30ff mov.w r0, #4294967295 + 80009c8: f7ff ff90 bl 80008ec <__NVIC_SetPriority> SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - 8000a38: 4b05 ldr r3, [pc, #20] ; (8000a50 ) - 8000a3a: 2200 movs r2, #0 - 8000a3c: 609a str r2, [r3, #8] + 80009cc: 4b05 ldr r3, [pc, #20] ; (80009e4 ) + 80009ce: 2200 movs r2, #0 + 80009d0: 609a str r2, [r3, #8] SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - 8000a3e: 4b04 ldr r3, [pc, #16] ; (8000a50 ) - 8000a40: 2207 movs r2, #7 - 8000a42: 601a str r2, [r3, #0] + 80009d2: 4b04 ldr r3, [pc, #16] ; (80009e4 ) + 80009d4: 2207 movs r2, #7 + 80009d6: 601a str r2, [r3, #0] SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ - 8000a44: 2300 movs r3, #0 + 80009d8: 2300 movs r3, #0 } - 8000a46: 4618 mov r0, r3 - 8000a48: 3708 adds r7, #8 - 8000a4a: 46bd mov sp, r7 - 8000a4c: bd80 pop {r7, pc} - 8000a4e: bf00 nop - 8000a50: e000e010 .word 0xe000e010 + 80009da: 4618 mov r0, r3 + 80009dc: 3708 adds r7, #8 + 80009de: 46bd mov sp, r7 + 80009e0: bd80 pop {r7, pc} + 80009e2: bf00 nop + 80009e4: e000e010 .word 0xe000e010 -08000a54 : +080009e8 : * @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) { - 8000a54: b580 push {r7, lr} - 8000a56: b082 sub sp, #8 - 8000a58: af00 add r7, sp, #0 - 8000a5a: 6078 str r0, [r7, #4] + 80009e8: b580 push {r7, lr} + 80009ea: b082 sub sp, #8 + 80009ec: af00 add r7, sp, #0 + 80009ee: 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); - 8000a5c: 6878 ldr r0, [r7, #4] - 8000a5e: f7ff ff49 bl 80008f4 <__NVIC_SetPriorityGrouping> + 80009f0: 6878 ldr r0, [r7, #4] + 80009f2: f7ff ff49 bl 8000888 <__NVIC_SetPriorityGrouping> } - 8000a62: bf00 nop - 8000a64: 3708 adds r7, #8 - 8000a66: 46bd mov sp, r7 - 8000a68: bd80 pop {r7, pc} + 80009f6: bf00 nop + 80009f8: 3708 adds r7, #8 + 80009fa: 46bd mov sp, r7 + 80009fc: bd80 pop {r7, pc} -08000a6a : +080009fe : * 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) { - 8000a6a: b580 push {r7, lr} - 8000a6c: b086 sub sp, #24 - 8000a6e: af00 add r7, sp, #0 - 8000a70: 4603 mov r3, r0 - 8000a72: 60b9 str r1, [r7, #8] - 8000a74: 607a str r2, [r7, #4] - 8000a76: 73fb strb r3, [r7, #15] + 80009fe: b580 push {r7, lr} + 8000a00: b086 sub sp, #24 + 8000a02: af00 add r7, sp, #0 + 8000a04: 4603 mov r3, r0 + 8000a06: 60b9 str r1, [r7, #8] + 8000a08: 607a str r2, [r7, #4] + 8000a0a: 73fb strb r3, [r7, #15] uint32_t prioritygroup = 0x00U; - 8000a78: 2300 movs r3, #0 - 8000a7a: 617b str r3, [r7, #20] + 8000a0c: 2300 movs r3, #0 + 8000a0e: 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(); - 8000a7c: f7ff ff5e bl 800093c <__NVIC_GetPriorityGrouping> - 8000a80: 6178 str r0, [r7, #20] + 8000a10: f7ff ff5e bl 80008d0 <__NVIC_GetPriorityGrouping> + 8000a14: 6178 str r0, [r7, #20] NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority)); - 8000a82: 687a ldr r2, [r7, #4] - 8000a84: 68b9 ldr r1, [r7, #8] - 8000a86: 6978 ldr r0, [r7, #20] - 8000a88: f7ff ff90 bl 80009ac - 8000a8c: 4602 mov r2, r0 - 8000a8e: f997 300f ldrsb.w r3, [r7, #15] - 8000a92: 4611 mov r1, r2 - 8000a94: 4618 mov r0, r3 - 8000a96: f7ff ff5f bl 8000958 <__NVIC_SetPriority> + 8000a16: 687a ldr r2, [r7, #4] + 8000a18: 68b9 ldr r1, [r7, #8] + 8000a1a: 6978 ldr r0, [r7, #20] + 8000a1c: f7ff ff90 bl 8000940 + 8000a20: 4602 mov r2, r0 + 8000a22: f997 300f ldrsb.w r3, [r7, #15] + 8000a26: 4611 mov r1, r2 + 8000a28: 4618 mov r0, r3 + 8000a2a: f7ff ff5f bl 80008ec <__NVIC_SetPriority> } - 8000a9a: bf00 nop - 8000a9c: 3718 adds r7, #24 - 8000a9e: 46bd mov sp, r7 - 8000aa0: bd80 pop {r7, pc} + 8000a2e: bf00 nop + 8000a30: 3718 adds r7, #24 + 8000a32: 46bd mov sp, r7 + 8000a34: bd80 pop {r7, pc} -08000aa2 : +08000a36 : * @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) { - 8000aa2: b580 push {r7, lr} - 8000aa4: b082 sub sp, #8 - 8000aa6: af00 add r7, sp, #0 - 8000aa8: 6078 str r0, [r7, #4] + 8000a36: b580 push {r7, lr} + 8000a38: b082 sub sp, #8 + 8000a3a: af00 add r7, sp, #0 + 8000a3c: 6078 str r0, [r7, #4] return SysTick_Config(TicksNumb); - 8000aaa: 6878 ldr r0, [r7, #4] - 8000aac: f7ff ffb0 bl 8000a10 - 8000ab0: 4603 mov r3, r0 + 8000a3e: 6878 ldr r0, [r7, #4] + 8000a40: f7ff ffb0 bl 80009a4 + 8000a44: 4603 mov r3, r0 } - 8000ab2: 4618 mov r0, r3 - 8000ab4: 3708 adds r7, #8 - 8000ab6: 46bd mov sp, r7 - 8000ab8: bd80 pop {r7, pc} + 8000a46: 4618 mov r0, r3 + 8000a48: 3708 adds r7, #8 + 8000a4a: 46bd mov sp, r7 + 8000a4c: bd80 pop {r7, pc} ... -08000abc : +08000a50 : * @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) { - 8000abc: b480 push {r7} - 8000abe: b08b sub sp, #44 ; 0x2c - 8000ac0: af00 add r7, sp, #0 - 8000ac2: 6078 str r0, [r7, #4] - 8000ac4: 6039 str r1, [r7, #0] + 8000a50: b480 push {r7} + 8000a52: b08b sub sp, #44 ; 0x2c + 8000a54: af00 add r7, sp, #0 + 8000a56: 6078 str r0, [r7, #4] + 8000a58: 6039 str r1, [r7, #0] uint32_t position = 0x00u; - 8000ac6: 2300 movs r3, #0 - 8000ac8: 627b str r3, [r7, #36] ; 0x24 + 8000a5a: 2300 movs r3, #0 + 8000a5c: 627b str r3, [r7, #36] ; 0x24 uint32_t ioposition; uint32_t iocurrent; uint32_t temp; uint32_t config = 0x00u; - 8000aca: 2300 movs r3, #0 - 8000acc: 623b str r3, [r7, #32] + 8000a5e: 2300 movs r3, #0 + 8000a60: 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) - 8000ace: e179 b.n 8000dc4 + 8000a62: e179 b.n 8000d58 { /* Get the IO position */ ioposition = (0x01uL << position); - 8000ad0: 2201 movs r2, #1 - 8000ad2: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000ad4: fa02 f303 lsl.w r3, r2, r3 - 8000ad8: 61fb str r3, [r7, #28] + 8000a64: 2201 movs r2, #1 + 8000a66: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000a68: fa02 f303 lsl.w r3, r2, r3 + 8000a6c: 61fb str r3, [r7, #28] /* Get the current IO position */ iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition; - 8000ada: 683b ldr r3, [r7, #0] - 8000adc: 681b ldr r3, [r3, #0] - 8000ade: 69fa ldr r2, [r7, #28] - 8000ae0: 4013 ands r3, r2 - 8000ae2: 61bb str r3, [r7, #24] + 8000a6e: 683b ldr r3, [r7, #0] + 8000a70: 681b ldr r3, [r3, #0] + 8000a72: 69fa ldr r2, [r7, #28] + 8000a74: 4013 ands r3, r2 + 8000a76: 61bb str r3, [r7, #24] if (iocurrent == ioposition) - 8000ae4: 69ba ldr r2, [r7, #24] - 8000ae6: 69fb ldr r3, [r7, #28] - 8000ae8: 429a cmp r2, r3 - 8000aea: f040 8168 bne.w 8000dbe + 8000a78: 69ba ldr r2, [r7, #24] + 8000a7a: 69fb ldr r3, [r7, #28] + 8000a7c: 429a cmp r2, r3 + 8000a7e: f040 8168 bne.w 8000d52 { /* 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) - 8000aee: 683b ldr r3, [r7, #0] - 8000af0: 685b ldr r3, [r3, #4] - 8000af2: 4aa0 ldr r2, [pc, #640] ; (8000d74 ) - 8000af4: 4293 cmp r3, r2 - 8000af6: d05e beq.n 8000bb6 - 8000af8: 4a9e ldr r2, [pc, #632] ; (8000d74 ) - 8000afa: 4293 cmp r3, r2 - 8000afc: d875 bhi.n 8000bea - 8000afe: 4a9e ldr r2, [pc, #632] ; (8000d78 ) - 8000b00: 4293 cmp r3, r2 - 8000b02: d058 beq.n 8000bb6 - 8000b04: 4a9c ldr r2, [pc, #624] ; (8000d78 ) - 8000b06: 4293 cmp r3, r2 - 8000b08: d86f bhi.n 8000bea - 8000b0a: 4a9c ldr r2, [pc, #624] ; (8000d7c ) - 8000b0c: 4293 cmp r3, r2 - 8000b0e: d052 beq.n 8000bb6 - 8000b10: 4a9a ldr r2, [pc, #616] ; (8000d7c ) - 8000b12: 4293 cmp r3, r2 - 8000b14: d869 bhi.n 8000bea - 8000b16: 4a9a ldr r2, [pc, #616] ; (8000d80 ) - 8000b18: 4293 cmp r3, r2 - 8000b1a: d04c beq.n 8000bb6 - 8000b1c: 4a98 ldr r2, [pc, #608] ; (8000d80 ) + 8000a82: 683b ldr r3, [r7, #0] + 8000a84: 685b ldr r3, [r3, #4] + 8000a86: 4aa0 ldr r2, [pc, #640] ; (8000d08 ) + 8000a88: 4293 cmp r3, r2 + 8000a8a: d05e beq.n 8000b4a + 8000a8c: 4a9e ldr r2, [pc, #632] ; (8000d08 ) + 8000a8e: 4293 cmp r3, r2 + 8000a90: d875 bhi.n 8000b7e + 8000a92: 4a9e ldr r2, [pc, #632] ; (8000d0c ) + 8000a94: 4293 cmp r3, r2 + 8000a96: d058 beq.n 8000b4a + 8000a98: 4a9c ldr r2, [pc, #624] ; (8000d0c ) + 8000a9a: 4293 cmp r3, r2 + 8000a9c: d86f bhi.n 8000b7e + 8000a9e: 4a9c ldr r2, [pc, #624] ; (8000d10 ) + 8000aa0: 4293 cmp r3, r2 + 8000aa2: d052 beq.n 8000b4a + 8000aa4: 4a9a ldr r2, [pc, #616] ; (8000d10 ) + 8000aa6: 4293 cmp r3, r2 + 8000aa8: d869 bhi.n 8000b7e + 8000aaa: 4a9a ldr r2, [pc, #616] ; (8000d14 ) + 8000aac: 4293 cmp r3, r2 + 8000aae: d04c beq.n 8000b4a + 8000ab0: 4a98 ldr r2, [pc, #608] ; (8000d14 ) + 8000ab2: 4293 cmp r3, r2 + 8000ab4: d863 bhi.n 8000b7e + 8000ab6: 4a98 ldr r2, [pc, #608] ; (8000d18 ) + 8000ab8: 4293 cmp r3, r2 + 8000aba: d046 beq.n 8000b4a + 8000abc: 4a96 ldr r2, [pc, #600] ; (8000d18 ) + 8000abe: 4293 cmp r3, r2 + 8000ac0: d85d bhi.n 8000b7e + 8000ac2: 2b12 cmp r3, #18 + 8000ac4: d82a bhi.n 8000b1c + 8000ac6: 2b12 cmp r3, #18 + 8000ac8: d859 bhi.n 8000b7e + 8000aca: a201 add r2, pc, #4 ; (adr r2, 8000ad0 ) + 8000acc: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8000ad0: 08000b4b .word 0x08000b4b + 8000ad4: 08000b25 .word 0x08000b25 + 8000ad8: 08000b37 .word 0x08000b37 + 8000adc: 08000b79 .word 0x08000b79 + 8000ae0: 08000b7f .word 0x08000b7f + 8000ae4: 08000b7f .word 0x08000b7f + 8000ae8: 08000b7f .word 0x08000b7f + 8000aec: 08000b7f .word 0x08000b7f + 8000af0: 08000b7f .word 0x08000b7f + 8000af4: 08000b7f .word 0x08000b7f + 8000af8: 08000b7f .word 0x08000b7f + 8000afc: 08000b7f .word 0x08000b7f + 8000b00: 08000b7f .word 0x08000b7f + 8000b04: 08000b7f .word 0x08000b7f + 8000b08: 08000b7f .word 0x08000b7f + 8000b0c: 08000b7f .word 0x08000b7f + 8000b10: 08000b7f .word 0x08000b7f + 8000b14: 08000b2d .word 0x08000b2d + 8000b18: 08000b41 .word 0x08000b41 + 8000b1c: 4a7f ldr r2, [pc, #508] ; (8000d1c ) 8000b1e: 4293 cmp r3, r2 - 8000b20: d863 bhi.n 8000bea - 8000b22: 4a98 ldr r2, [pc, #608] ; (8000d84 ) - 8000b24: 4293 cmp r3, r2 - 8000b26: d046 beq.n 8000bb6 - 8000b28: 4a96 ldr r2, [pc, #600] ; (8000d84 ) - 8000b2a: 4293 cmp r3, r2 - 8000b2c: d85d bhi.n 8000bea - 8000b2e: 2b12 cmp r3, #18 - 8000b30: d82a bhi.n 8000b88 - 8000b32: 2b12 cmp r3, #18 - 8000b34: d859 bhi.n 8000bea - 8000b36: a201 add r2, pc, #4 ; (adr r2, 8000b3c ) - 8000b38: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8000b3c: 08000bb7 .word 0x08000bb7 - 8000b40: 08000b91 .word 0x08000b91 - 8000b44: 08000ba3 .word 0x08000ba3 - 8000b48: 08000be5 .word 0x08000be5 - 8000b4c: 08000beb .word 0x08000beb - 8000b50: 08000beb .word 0x08000beb - 8000b54: 08000beb .word 0x08000beb - 8000b58: 08000beb .word 0x08000beb - 8000b5c: 08000beb .word 0x08000beb - 8000b60: 08000beb .word 0x08000beb - 8000b64: 08000beb .word 0x08000beb - 8000b68: 08000beb .word 0x08000beb - 8000b6c: 08000beb .word 0x08000beb - 8000b70: 08000beb .word 0x08000beb - 8000b74: 08000beb .word 0x08000beb - 8000b78: 08000beb .word 0x08000beb - 8000b7c: 08000beb .word 0x08000beb - 8000b80: 08000b99 .word 0x08000b99 - 8000b84: 08000bad .word 0x08000bad - 8000b88: 4a7f ldr r2, [pc, #508] ; (8000d88 ) - 8000b8a: 4293 cmp r3, r2 - 8000b8c: d013 beq.n 8000bb6 + 8000b20: d013 beq.n 8000b4a config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; break; /* Parameters are checked with assert_param */ default: break; - 8000b8e: e02c b.n 8000bea + 8000b22: e02c b.n 8000b7e config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP; - 8000b90: 683b ldr r3, [r7, #0] - 8000b92: 68db ldr r3, [r3, #12] - 8000b94: 623b str r3, [r7, #32] + 8000b24: 683b ldr r3, [r7, #0] + 8000b26: 68db ldr r3, [r3, #12] + 8000b28: 623b str r3, [r7, #32] break; - 8000b96: e029 b.n 8000bec + 8000b2a: e029 b.n 8000b80 config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD; - 8000b98: 683b ldr r3, [r7, #0] - 8000b9a: 68db ldr r3, [r3, #12] - 8000b9c: 3304 adds r3, #4 - 8000b9e: 623b str r3, [r7, #32] + 8000b2c: 683b ldr r3, [r7, #0] + 8000b2e: 68db ldr r3, [r3, #12] + 8000b30: 3304 adds r3, #4 + 8000b32: 623b str r3, [r7, #32] break; - 8000ba0: e024 b.n 8000bec + 8000b34: e024 b.n 8000b80 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP; - 8000ba2: 683b ldr r3, [r7, #0] - 8000ba4: 68db ldr r3, [r3, #12] - 8000ba6: 3308 adds r3, #8 - 8000ba8: 623b str r3, [r7, #32] + 8000b36: 683b ldr r3, [r7, #0] + 8000b38: 68db ldr r3, [r3, #12] + 8000b3a: 3308 adds r3, #8 + 8000b3c: 623b str r3, [r7, #32] break; - 8000baa: e01f b.n 8000bec + 8000b3e: e01f b.n 8000b80 config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD; - 8000bac: 683b ldr r3, [r7, #0] - 8000bae: 68db ldr r3, [r3, #12] - 8000bb0: 330c adds r3, #12 - 8000bb2: 623b str r3, [r7, #32] + 8000b40: 683b ldr r3, [r7, #0] + 8000b42: 68db ldr r3, [r3, #12] + 8000b44: 330c adds r3, #12 + 8000b46: 623b str r3, [r7, #32] break; - 8000bb4: e01a b.n 8000bec + 8000b48: e01a b.n 8000b80 if (GPIO_Init->Pull == GPIO_NOPULL) - 8000bb6: 683b ldr r3, [r7, #0] - 8000bb8: 689b ldr r3, [r3, #8] - 8000bba: 2b00 cmp r3, #0 - 8000bbc: d102 bne.n 8000bc4 + 8000b4a: 683b ldr r3, [r7, #0] + 8000b4c: 689b ldr r3, [r3, #8] + 8000b4e: 2b00 cmp r3, #0 + 8000b50: d102 bne.n 8000b58 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING; - 8000bbe: 2304 movs r3, #4 - 8000bc0: 623b str r3, [r7, #32] + 8000b52: 2304 movs r3, #4 + 8000b54: 623b str r3, [r7, #32] break; - 8000bc2: e013 b.n 8000bec + 8000b56: e013 b.n 8000b80 else if (GPIO_Init->Pull == GPIO_PULLUP) - 8000bc4: 683b ldr r3, [r7, #0] - 8000bc6: 689b ldr r3, [r3, #8] - 8000bc8: 2b01 cmp r3, #1 - 8000bca: d105 bne.n 8000bd8 + 8000b58: 683b ldr r3, [r7, #0] + 8000b5a: 689b ldr r3, [r3, #8] + 8000b5c: 2b01 cmp r3, #1 + 8000b5e: d105 bne.n 8000b6c config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 8000bcc: 2308 movs r3, #8 - 8000bce: 623b str r3, [r7, #32] + 8000b60: 2308 movs r3, #8 + 8000b62: 623b str r3, [r7, #32] GPIOx->BSRR = ioposition; - 8000bd0: 687b ldr r3, [r7, #4] - 8000bd2: 69fa ldr r2, [r7, #28] - 8000bd4: 611a str r2, [r3, #16] + 8000b64: 687b ldr r3, [r7, #4] + 8000b66: 69fa ldr r2, [r7, #28] + 8000b68: 611a str r2, [r3, #16] break; - 8000bd6: e009 b.n 8000bec + 8000b6a: e009 b.n 8000b80 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD; - 8000bd8: 2308 movs r3, #8 - 8000bda: 623b str r3, [r7, #32] + 8000b6c: 2308 movs r3, #8 + 8000b6e: 623b str r3, [r7, #32] GPIOx->BRR = ioposition; - 8000bdc: 687b ldr r3, [r7, #4] - 8000bde: 69fa ldr r2, [r7, #28] - 8000be0: 615a str r2, [r3, #20] + 8000b70: 687b ldr r3, [r7, #4] + 8000b72: 69fa ldr r2, [r7, #28] + 8000b74: 615a str r2, [r3, #20] break; - 8000be2: e003 b.n 8000bec + 8000b76: e003 b.n 8000b80 config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG; - 8000be4: 2300 movs r3, #0 - 8000be6: 623b str r3, [r7, #32] + 8000b78: 2300 movs r3, #0 + 8000b7a: 623b str r3, [r7, #32] break; - 8000be8: e000 b.n 8000bec + 8000b7c: e000 b.n 8000b80 break; - 8000bea: bf00 nop + 8000b7e: 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; - 8000bec: 69bb ldr r3, [r7, #24] - 8000bee: 2bff cmp r3, #255 ; 0xff - 8000bf0: d801 bhi.n 8000bf6 - 8000bf2: 687b ldr r3, [r7, #4] - 8000bf4: e001 b.n 8000bfa - 8000bf6: 687b ldr r3, [r7, #4] - 8000bf8: 3304 adds r3, #4 - 8000bfa: 617b str r3, [r7, #20] + 8000b80: 69bb ldr r3, [r7, #24] + 8000b82: 2bff cmp r3, #255 ; 0xff + 8000b84: d801 bhi.n 8000b8a + 8000b86: 687b ldr r3, [r7, #4] + 8000b88: e001 b.n 8000b8e + 8000b8a: 687b ldr r3, [r7, #4] + 8000b8c: 3304 adds r3, #4 + 8000b8e: 617b str r3, [r7, #20] registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u); - 8000bfc: 69bb ldr r3, [r7, #24] - 8000bfe: 2bff cmp r3, #255 ; 0xff - 8000c00: d802 bhi.n 8000c08 - 8000c02: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000c04: 009b lsls r3, r3, #2 - 8000c06: e002 b.n 8000c0e - 8000c08: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000c0a: 3b08 subs r3, #8 - 8000c0c: 009b lsls r3, r3, #2 - 8000c0e: 613b str r3, [r7, #16] + 8000b90: 69bb ldr r3, [r7, #24] + 8000b92: 2bff cmp r3, #255 ; 0xff + 8000b94: d802 bhi.n 8000b9c + 8000b96: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000b98: 009b lsls r3, r3, #2 + 8000b9a: e002 b.n 8000ba2 + 8000b9c: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000b9e: 3b08 subs r3, #8 + 8000ba0: 009b lsls r3, r3, #2 + 8000ba2: 613b str r3, [r7, #16] /* Apply the new configuration of the pin to the register */ MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset)); - 8000c10: 697b ldr r3, [r7, #20] - 8000c12: 681a ldr r2, [r3, #0] - 8000c14: 210f movs r1, #15 - 8000c16: 693b ldr r3, [r7, #16] - 8000c18: fa01 f303 lsl.w r3, r1, r3 - 8000c1c: 43db mvns r3, r3 - 8000c1e: 401a ands r2, r3 - 8000c20: 6a39 ldr r1, [r7, #32] - 8000c22: 693b ldr r3, [r7, #16] - 8000c24: fa01 f303 lsl.w r3, r1, r3 - 8000c28: 431a orrs r2, r3 - 8000c2a: 697b ldr r3, [r7, #20] - 8000c2c: 601a str r2, [r3, #0] + 8000ba4: 697b ldr r3, [r7, #20] + 8000ba6: 681a ldr r2, [r3, #0] + 8000ba8: 210f movs r1, #15 + 8000baa: 693b ldr r3, [r7, #16] + 8000bac: fa01 f303 lsl.w r3, r1, r3 + 8000bb0: 43db mvns r3, r3 + 8000bb2: 401a ands r2, r3 + 8000bb4: 6a39 ldr r1, [r7, #32] + 8000bb6: 693b ldr r3, [r7, #16] + 8000bb8: fa01 f303 lsl.w r3, r1, r3 + 8000bbc: 431a orrs r2, r3 + 8000bbe: 697b ldr r3, [r7, #20] + 8000bc0: 601a str r2, [r3, #0] /*--------------------- EXTI Mode Configuration ------------------------*/ /* Configure the External Interrupt or event for the current IO */ if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) - 8000c2e: 683b ldr r3, [r7, #0] - 8000c30: 685b ldr r3, [r3, #4] - 8000c32: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 8000c36: 2b00 cmp r3, #0 - 8000c38: f000 80c1 beq.w 8000dbe + 8000bc2: 683b ldr r3, [r7, #0] + 8000bc4: 685b ldr r3, [r3, #4] + 8000bc6: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8000bca: 2b00 cmp r3, #0 + 8000bcc: f000 80c1 beq.w 8000d52 { /* Enable AFIO Clock */ __HAL_RCC_AFIO_CLK_ENABLE(); - 8000c3c: 4b53 ldr r3, [pc, #332] ; (8000d8c ) - 8000c3e: 699b ldr r3, [r3, #24] - 8000c40: 4a52 ldr r2, [pc, #328] ; (8000d8c ) - 8000c42: f043 0301 orr.w r3, r3, #1 - 8000c46: 6193 str r3, [r2, #24] - 8000c48: 4b50 ldr r3, [pc, #320] ; (8000d8c ) - 8000c4a: 699b ldr r3, [r3, #24] - 8000c4c: f003 0301 and.w r3, r3, #1 - 8000c50: 60bb str r3, [r7, #8] - 8000c52: 68bb ldr r3, [r7, #8] + 8000bd0: 4b53 ldr r3, [pc, #332] ; (8000d20 ) + 8000bd2: 699b ldr r3, [r3, #24] + 8000bd4: 4a52 ldr r2, [pc, #328] ; (8000d20 ) + 8000bd6: f043 0301 orr.w r3, r3, #1 + 8000bda: 6193 str r3, [r2, #24] + 8000bdc: 4b50 ldr r3, [pc, #320] ; (8000d20 ) + 8000bde: 699b ldr r3, [r3, #24] + 8000be0: f003 0301 and.w r3, r3, #1 + 8000be4: 60bb str r3, [r7, #8] + 8000be6: 68bb ldr r3, [r7, #8] temp = AFIO->EXTICR[position >> 2u]; - 8000c54: 4a4e ldr r2, [pc, #312] ; (8000d90 ) - 8000c56: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000c58: 089b lsrs r3, r3, #2 - 8000c5a: 3302 adds r3, #2 - 8000c5c: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8000c60: 60fb str r3, [r7, #12] + 8000be8: 4a4e ldr r2, [pc, #312] ; (8000d24 ) + 8000bea: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000bec: 089b lsrs r3, r3, #2 + 8000bee: 3302 adds r3, #2 + 8000bf0: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8000bf4: 60fb str r3, [r7, #12] CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u))); - 8000c62: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000c64: f003 0303 and.w r3, r3, #3 - 8000c68: 009b lsls r3, r3, #2 - 8000c6a: 220f movs r2, #15 - 8000c6c: fa02 f303 lsl.w r3, r2, r3 - 8000c70: 43db mvns r3, r3 - 8000c72: 68fa ldr r2, [r7, #12] - 8000c74: 4013 ands r3, r2 - 8000c76: 60fb str r3, [r7, #12] + 8000bf6: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000bf8: f003 0303 and.w r3, r3, #3 + 8000bfc: 009b lsls r3, r3, #2 + 8000bfe: 220f movs r2, #15 + 8000c00: fa02 f303 lsl.w r3, r2, r3 + 8000c04: 43db mvns r3, r3 + 8000c06: 68fa ldr r2, [r7, #12] + 8000c08: 4013 ands r3, r2 + 8000c0a: 60fb str r3, [r7, #12] SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u))); - 8000c78: 687b ldr r3, [r7, #4] - 8000c7a: 4a46 ldr r2, [pc, #280] ; (8000d94 ) - 8000c7c: 4293 cmp r3, r2 - 8000c7e: d01f beq.n 8000cc0 - 8000c80: 687b ldr r3, [r7, #4] - 8000c82: 4a45 ldr r2, [pc, #276] ; (8000d98 ) - 8000c84: 4293 cmp r3, r2 - 8000c86: d019 beq.n 8000cbc - 8000c88: 687b ldr r3, [r7, #4] - 8000c8a: 4a44 ldr r2, [pc, #272] ; (8000d9c ) - 8000c8c: 4293 cmp r3, r2 - 8000c8e: d013 beq.n 8000cb8 - 8000c90: 687b ldr r3, [r7, #4] - 8000c92: 4a43 ldr r2, [pc, #268] ; (8000da0 ) - 8000c94: 4293 cmp r3, r2 - 8000c96: d00d beq.n 8000cb4 - 8000c98: 687b ldr r3, [r7, #4] - 8000c9a: 4a42 ldr r2, [pc, #264] ; (8000da4 ) - 8000c9c: 4293 cmp r3, r2 - 8000c9e: d007 beq.n 8000cb0 - 8000ca0: 687b ldr r3, [r7, #4] - 8000ca2: 4a41 ldr r2, [pc, #260] ; (8000da8 ) - 8000ca4: 4293 cmp r3, r2 - 8000ca6: d101 bne.n 8000cac - 8000ca8: 2305 movs r3, #5 - 8000caa: e00a b.n 8000cc2 - 8000cac: 2306 movs r3, #6 - 8000cae: e008 b.n 8000cc2 - 8000cb0: 2304 movs r3, #4 - 8000cb2: e006 b.n 8000cc2 - 8000cb4: 2303 movs r3, #3 - 8000cb6: e004 b.n 8000cc2 - 8000cb8: 2302 movs r3, #2 - 8000cba: e002 b.n 8000cc2 - 8000cbc: 2301 movs r3, #1 - 8000cbe: e000 b.n 8000cc2 - 8000cc0: 2300 movs r3, #0 - 8000cc2: 6a7a ldr r2, [r7, #36] ; 0x24 - 8000cc4: f002 0203 and.w r2, r2, #3 - 8000cc8: 0092 lsls r2, r2, #2 - 8000cca: 4093 lsls r3, r2 - 8000ccc: 68fa ldr r2, [r7, #12] - 8000cce: 4313 orrs r3, r2 - 8000cd0: 60fb str r3, [r7, #12] + 8000c0c: 687b ldr r3, [r7, #4] + 8000c0e: 4a46 ldr r2, [pc, #280] ; (8000d28 ) + 8000c10: 4293 cmp r3, r2 + 8000c12: d01f beq.n 8000c54 + 8000c14: 687b ldr r3, [r7, #4] + 8000c16: 4a45 ldr r2, [pc, #276] ; (8000d2c ) + 8000c18: 4293 cmp r3, r2 + 8000c1a: d019 beq.n 8000c50 + 8000c1c: 687b ldr r3, [r7, #4] + 8000c1e: 4a44 ldr r2, [pc, #272] ; (8000d30 ) + 8000c20: 4293 cmp r3, r2 + 8000c22: d013 beq.n 8000c4c + 8000c24: 687b ldr r3, [r7, #4] + 8000c26: 4a43 ldr r2, [pc, #268] ; (8000d34 ) + 8000c28: 4293 cmp r3, r2 + 8000c2a: d00d beq.n 8000c48 + 8000c2c: 687b ldr r3, [r7, #4] + 8000c2e: 4a42 ldr r2, [pc, #264] ; (8000d38 ) + 8000c30: 4293 cmp r3, r2 + 8000c32: d007 beq.n 8000c44 + 8000c34: 687b ldr r3, [r7, #4] + 8000c36: 4a41 ldr r2, [pc, #260] ; (8000d3c ) + 8000c38: 4293 cmp r3, r2 + 8000c3a: d101 bne.n 8000c40 + 8000c3c: 2305 movs r3, #5 + 8000c3e: e00a b.n 8000c56 + 8000c40: 2306 movs r3, #6 + 8000c42: e008 b.n 8000c56 + 8000c44: 2304 movs r3, #4 + 8000c46: e006 b.n 8000c56 + 8000c48: 2303 movs r3, #3 + 8000c4a: e004 b.n 8000c56 + 8000c4c: 2302 movs r3, #2 + 8000c4e: e002 b.n 8000c56 + 8000c50: 2301 movs r3, #1 + 8000c52: e000 b.n 8000c56 + 8000c54: 2300 movs r3, #0 + 8000c56: 6a7a ldr r2, [r7, #36] ; 0x24 + 8000c58: f002 0203 and.w r2, r2, #3 + 8000c5c: 0092 lsls r2, r2, #2 + 8000c5e: 4093 lsls r3, r2 + 8000c60: 68fa ldr r2, [r7, #12] + 8000c62: 4313 orrs r3, r2 + 8000c64: 60fb str r3, [r7, #12] AFIO->EXTICR[position >> 2u] = temp; - 8000cd2: 492f ldr r1, [pc, #188] ; (8000d90 ) - 8000cd4: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000cd6: 089b lsrs r3, r3, #2 - 8000cd8: 3302 adds r3, #2 - 8000cda: 68fa ldr r2, [r7, #12] - 8000cdc: f841 2023 str.w r2, [r1, r3, lsl #2] + 8000c66: 492f ldr r1, [pc, #188] ; (8000d24 ) + 8000c68: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000c6a: 089b lsrs r3, r3, #2 + 8000c6c: 3302 adds r3, #2 + 8000c6e: 68fa ldr r2, [r7, #12] + 8000c70: f841 2023 str.w r2, [r1, r3, lsl #2] /* Configure the interrupt mask */ if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) - 8000ce0: 683b ldr r3, [r7, #0] - 8000ce2: 685b ldr r3, [r3, #4] - 8000ce4: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000ce8: 2b00 cmp r3, #0 - 8000cea: d006 beq.n 8000cfa + 8000c74: 683b ldr r3, [r7, #0] + 8000c76: 685b ldr r3, [r3, #4] + 8000c78: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000c7c: 2b00 cmp r3, #0 + 8000c7e: d006 beq.n 8000c8e { SET_BIT(EXTI->IMR, iocurrent); - 8000cec: 4b2f ldr r3, [pc, #188] ; (8000dac ) - 8000cee: 681a ldr r2, [r3, #0] - 8000cf0: 492e ldr r1, [pc, #184] ; (8000dac ) - 8000cf2: 69bb ldr r3, [r7, #24] - 8000cf4: 4313 orrs r3, r2 - 8000cf6: 600b str r3, [r1, #0] - 8000cf8: e006 b.n 8000d08 + 8000c80: 4b2f ldr r3, [pc, #188] ; (8000d40 ) + 8000c82: 681a ldr r2, [r3, #0] + 8000c84: 492e ldr r1, [pc, #184] ; (8000d40 ) + 8000c86: 69bb ldr r3, [r7, #24] + 8000c88: 4313 orrs r3, r2 + 8000c8a: 600b str r3, [r1, #0] + 8000c8c: e006 b.n 8000c9c } else { CLEAR_BIT(EXTI->IMR, iocurrent); - 8000cfa: 4b2c ldr r3, [pc, #176] ; (8000dac ) - 8000cfc: 681a ldr r2, [r3, #0] - 8000cfe: 69bb ldr r3, [r7, #24] - 8000d00: 43db mvns r3, r3 - 8000d02: 492a ldr r1, [pc, #168] ; (8000dac ) - 8000d04: 4013 ands r3, r2 - 8000d06: 600b str r3, [r1, #0] + 8000c8e: 4b2c ldr r3, [pc, #176] ; (8000d40 ) + 8000c90: 681a ldr r2, [r3, #0] + 8000c92: 69bb ldr r3, [r7, #24] + 8000c94: 43db mvns r3, r3 + 8000c96: 492a ldr r1, [pc, #168] ; (8000d40 ) + 8000c98: 4013 ands r3, r2 + 8000c9a: 600b str r3, [r1, #0] } /* Configure the event mask */ if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) - 8000d08: 683b ldr r3, [r7, #0] - 8000d0a: 685b ldr r3, [r3, #4] - 8000d0c: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000d10: 2b00 cmp r3, #0 - 8000d12: d006 beq.n 8000d22 + 8000c9c: 683b ldr r3, [r7, #0] + 8000c9e: 685b ldr r3, [r3, #4] + 8000ca0: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000ca4: 2b00 cmp r3, #0 + 8000ca6: d006 beq.n 8000cb6 { SET_BIT(EXTI->EMR, iocurrent); - 8000d14: 4b25 ldr r3, [pc, #148] ; (8000dac ) - 8000d16: 685a ldr r2, [r3, #4] - 8000d18: 4924 ldr r1, [pc, #144] ; (8000dac ) - 8000d1a: 69bb ldr r3, [r7, #24] - 8000d1c: 4313 orrs r3, r2 - 8000d1e: 604b str r3, [r1, #4] - 8000d20: e006 b.n 8000d30 + 8000ca8: 4b25 ldr r3, [pc, #148] ; (8000d40 ) + 8000caa: 685a ldr r2, [r3, #4] + 8000cac: 4924 ldr r1, [pc, #144] ; (8000d40 ) + 8000cae: 69bb ldr r3, [r7, #24] + 8000cb0: 4313 orrs r3, r2 + 8000cb2: 604b str r3, [r1, #4] + 8000cb4: e006 b.n 8000cc4 } else { CLEAR_BIT(EXTI->EMR, iocurrent); - 8000d22: 4b22 ldr r3, [pc, #136] ; (8000dac ) - 8000d24: 685a ldr r2, [r3, #4] - 8000d26: 69bb ldr r3, [r7, #24] - 8000d28: 43db mvns r3, r3 - 8000d2a: 4920 ldr r1, [pc, #128] ; (8000dac ) - 8000d2c: 4013 ands r3, r2 - 8000d2e: 604b str r3, [r1, #4] + 8000cb6: 4b22 ldr r3, [pc, #136] ; (8000d40 ) + 8000cb8: 685a ldr r2, [r3, #4] + 8000cba: 69bb ldr r3, [r7, #24] + 8000cbc: 43db mvns r3, r3 + 8000cbe: 4920 ldr r1, [pc, #128] ; (8000d40 ) + 8000cc0: 4013 ands r3, r2 + 8000cc2: 604b str r3, [r1, #4] } /* Enable or disable the rising trigger */ if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) - 8000d30: 683b ldr r3, [r7, #0] - 8000d32: 685b ldr r3, [r3, #4] - 8000d34: f403 1380 and.w r3, r3, #1048576 ; 0x100000 - 8000d38: 2b00 cmp r3, #0 - 8000d3a: d006 beq.n 8000d4a + 8000cc4: 683b ldr r3, [r7, #0] + 8000cc6: 685b ldr r3, [r3, #4] + 8000cc8: f403 1380 and.w r3, r3, #1048576 ; 0x100000 + 8000ccc: 2b00 cmp r3, #0 + 8000cce: d006 beq.n 8000cde { SET_BIT(EXTI->RTSR, iocurrent); - 8000d3c: 4b1b ldr r3, [pc, #108] ; (8000dac ) - 8000d3e: 689a ldr r2, [r3, #8] - 8000d40: 491a ldr r1, [pc, #104] ; (8000dac ) - 8000d42: 69bb ldr r3, [r7, #24] - 8000d44: 4313 orrs r3, r2 - 8000d46: 608b str r3, [r1, #8] - 8000d48: e006 b.n 8000d58 + 8000cd0: 4b1b ldr r3, [pc, #108] ; (8000d40 ) + 8000cd2: 689a ldr r2, [r3, #8] + 8000cd4: 491a ldr r1, [pc, #104] ; (8000d40 ) + 8000cd6: 69bb ldr r3, [r7, #24] + 8000cd8: 4313 orrs r3, r2 + 8000cda: 608b str r3, [r1, #8] + 8000cdc: e006 b.n 8000cec } else { CLEAR_BIT(EXTI->RTSR, iocurrent); - 8000d4a: 4b18 ldr r3, [pc, #96] ; (8000dac ) - 8000d4c: 689a ldr r2, [r3, #8] - 8000d4e: 69bb ldr r3, [r7, #24] - 8000d50: 43db mvns r3, r3 - 8000d52: 4916 ldr r1, [pc, #88] ; (8000dac ) - 8000d54: 4013 ands r3, r2 - 8000d56: 608b str r3, [r1, #8] + 8000cde: 4b18 ldr r3, [pc, #96] ; (8000d40 ) + 8000ce0: 689a ldr r2, [r3, #8] + 8000ce2: 69bb ldr r3, [r7, #24] + 8000ce4: 43db mvns r3, r3 + 8000ce6: 4916 ldr r1, [pc, #88] ; (8000d40 ) + 8000ce8: 4013 ands r3, r2 + 8000cea: 608b str r3, [r1, #8] } /* Enable or disable the falling trigger */ if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) - 8000d58: 683b ldr r3, [r7, #0] - 8000d5a: 685b ldr r3, [r3, #4] - 8000d5c: f403 1300 and.w r3, r3, #2097152 ; 0x200000 - 8000d60: 2b00 cmp r3, #0 - 8000d62: d025 beq.n 8000db0 + 8000cec: 683b ldr r3, [r7, #0] + 8000cee: 685b ldr r3, [r3, #4] + 8000cf0: f403 1300 and.w r3, r3, #2097152 ; 0x200000 + 8000cf4: 2b00 cmp r3, #0 + 8000cf6: d025 beq.n 8000d44 { SET_BIT(EXTI->FTSR, iocurrent); - 8000d64: 4b11 ldr r3, [pc, #68] ; (8000dac ) - 8000d66: 68da ldr r2, [r3, #12] - 8000d68: 4910 ldr r1, [pc, #64] ; (8000dac ) - 8000d6a: 69bb ldr r3, [r7, #24] - 8000d6c: 4313 orrs r3, r2 - 8000d6e: 60cb str r3, [r1, #12] - 8000d70: e025 b.n 8000dbe - 8000d72: bf00 nop - 8000d74: 10320000 .word 0x10320000 - 8000d78: 10310000 .word 0x10310000 - 8000d7c: 10220000 .word 0x10220000 - 8000d80: 10210000 .word 0x10210000 - 8000d84: 10120000 .word 0x10120000 - 8000d88: 10110000 .word 0x10110000 - 8000d8c: 40021000 .word 0x40021000 - 8000d90: 40010000 .word 0x40010000 - 8000d94: 40010800 .word 0x40010800 - 8000d98: 40010c00 .word 0x40010c00 - 8000d9c: 40011000 .word 0x40011000 - 8000da0: 40011400 .word 0x40011400 - 8000da4: 40011800 .word 0x40011800 - 8000da8: 40011c00 .word 0x40011c00 - 8000dac: 40010400 .word 0x40010400 + 8000cf8: 4b11 ldr r3, [pc, #68] ; (8000d40 ) + 8000cfa: 68da ldr r2, [r3, #12] + 8000cfc: 4910 ldr r1, [pc, #64] ; (8000d40 ) + 8000cfe: 69bb ldr r3, [r7, #24] + 8000d00: 4313 orrs r3, r2 + 8000d02: 60cb str r3, [r1, #12] + 8000d04: e025 b.n 8000d52 + 8000d06: bf00 nop + 8000d08: 10320000 .word 0x10320000 + 8000d0c: 10310000 .word 0x10310000 + 8000d10: 10220000 .word 0x10220000 + 8000d14: 10210000 .word 0x10210000 + 8000d18: 10120000 .word 0x10120000 + 8000d1c: 10110000 .word 0x10110000 + 8000d20: 40021000 .word 0x40021000 + 8000d24: 40010000 .word 0x40010000 + 8000d28: 40010800 .word 0x40010800 + 8000d2c: 40010c00 .word 0x40010c00 + 8000d30: 40011000 .word 0x40011000 + 8000d34: 40011400 .word 0x40011400 + 8000d38: 40011800 .word 0x40011800 + 8000d3c: 40011c00 .word 0x40011c00 + 8000d40: 40010400 .word 0x40010400 } else { CLEAR_BIT(EXTI->FTSR, iocurrent); - 8000db0: 4b0b ldr r3, [pc, #44] ; (8000de0 ) - 8000db2: 68da ldr r2, [r3, #12] - 8000db4: 69bb ldr r3, [r7, #24] - 8000db6: 43db mvns r3, r3 - 8000db8: 4909 ldr r1, [pc, #36] ; (8000de0 ) - 8000dba: 4013 ands r3, r2 - 8000dbc: 60cb str r3, [r1, #12] + 8000d44: 4b0b ldr r3, [pc, #44] ; (8000d74 ) + 8000d46: 68da ldr r2, [r3, #12] + 8000d48: 69bb ldr r3, [r7, #24] + 8000d4a: 43db mvns r3, r3 + 8000d4c: 4909 ldr r1, [pc, #36] ; (8000d74 ) + 8000d4e: 4013 ands r3, r2 + 8000d50: 60cb str r3, [r1, #12] } } } position++; - 8000dbe: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000dc0: 3301 adds r3, #1 - 8000dc2: 627b str r3, [r7, #36] ; 0x24 + 8000d52: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000d54: 3301 adds r3, #1 + 8000d56: 627b str r3, [r7, #36] ; 0x24 while (((GPIO_Init->Pin) >> position) != 0x00u) - 8000dc4: 683b ldr r3, [r7, #0] - 8000dc6: 681a ldr r2, [r3, #0] - 8000dc8: 6a7b ldr r3, [r7, #36] ; 0x24 - 8000dca: fa22 f303 lsr.w r3, r2, r3 - 8000dce: 2b00 cmp r3, #0 - 8000dd0: f47f ae7e bne.w 8000ad0 + 8000d58: 683b ldr r3, [r7, #0] + 8000d5a: 681a ldr r2, [r3, #0] + 8000d5c: 6a7b ldr r3, [r7, #36] ; 0x24 + 8000d5e: fa22 f303 lsr.w r3, r2, r3 + 8000d62: 2b00 cmp r3, #0 + 8000d64: f47f ae7e bne.w 8000a64 } } - 8000dd4: bf00 nop - 8000dd6: bf00 nop - 8000dd8: 372c adds r7, #44 ; 0x2c - 8000dda: 46bd mov sp, r7 - 8000ddc: bc80 pop {r7} - 8000dde: 4770 bx lr - 8000de0: 40010400 .word 0x40010400 + 8000d68: bf00 nop + 8000d6a: bf00 nop + 8000d6c: 372c adds r7, #44 ; 0x2c + 8000d6e: 46bd mov sp, r7 + 8000d70: bc80 pop {r7} + 8000d72: 4770 bx lr + 8000d74: 40010400 .word 0x40010400 -08000de4 : +08000d78 : * @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) { - 8000de4: b480 push {r7} - 8000de6: b083 sub sp, #12 - 8000de8: af00 add r7, sp, #0 - 8000dea: 6078 str r0, [r7, #4] - 8000dec: 460b mov r3, r1 - 8000dee: 807b strh r3, [r7, #2] - 8000df0: 4613 mov r3, r2 - 8000df2: 707b strb r3, [r7, #1] + 8000d78: b480 push {r7} + 8000d7a: b083 sub sp, #12 + 8000d7c: af00 add r7, sp, #0 + 8000d7e: 6078 str r0, [r7, #4] + 8000d80: 460b mov r3, r1 + 8000d82: 807b strh r3, [r7, #2] + 8000d84: 4613 mov r3, r2 + 8000d86: 707b strb r3, [r7, #1] /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); assert_param(IS_GPIO_PIN_ACTION(PinState)); if (PinState != GPIO_PIN_RESET) - 8000df4: 787b ldrb r3, [r7, #1] - 8000df6: 2b00 cmp r3, #0 - 8000df8: d003 beq.n 8000e02 + 8000d88: 787b ldrb r3, [r7, #1] + 8000d8a: 2b00 cmp r3, #0 + 8000d8c: d003 beq.n 8000d96 { GPIOx->BSRR = GPIO_Pin; - 8000dfa: 887a ldrh r2, [r7, #2] - 8000dfc: 687b ldr r3, [r7, #4] - 8000dfe: 611a str r2, [r3, #16] + 8000d8e: 887a ldrh r2, [r7, #2] + 8000d90: 687b ldr r3, [r7, #4] + 8000d92: 611a str r2, [r3, #16] } else { GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; } } - 8000e00: e003 b.n 8000e0a + 8000d94: e003 b.n 8000d9e GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u; - 8000e02: 887b ldrh r3, [r7, #2] - 8000e04: 041a lsls r2, r3, #16 - 8000e06: 687b ldr r3, [r7, #4] - 8000e08: 611a str r2, [r3, #16] + 8000d96: 887b ldrh r3, [r7, #2] + 8000d98: 041a lsls r2, r3, #16 + 8000d9a: 687b ldr r3, [r7, #4] + 8000d9c: 611a str r2, [r3, #16] } - 8000e0a: bf00 nop - 8000e0c: 370c adds r7, #12 - 8000e0e: 46bd mov sp, r7 - 8000e10: bc80 pop {r7} - 8000e12: 4770 bx lr + 8000d9e: bf00 nop + 8000da0: 370c adds r7, #12 + 8000da2: 46bd mov sp, r7 + 8000da4: bc80 pop {r7} + 8000da6: 4770 bx lr -08000e14 : +08000da8 : * 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) { - 8000e14: b580 push {r7, lr} - 8000e16: b086 sub sp, #24 - 8000e18: af00 add r7, sp, #0 - 8000e1a: 6078 str r0, [r7, #4] + 8000da8: b580 push {r7, lr} + 8000daa: b086 sub sp, #24 + 8000dac: af00 add r7, sp, #0 + 8000dae: 6078 str r0, [r7, #4] uint32_t tickstart; uint32_t pll_config; /* Check Null pointer */ if (RCC_OscInitStruct == NULL) - 8000e1c: 687b ldr r3, [r7, #4] - 8000e1e: 2b00 cmp r3, #0 - 8000e20: d101 bne.n 8000e26 + 8000db0: 687b ldr r3, [r7, #4] + 8000db2: 2b00 cmp r3, #0 + 8000db4: d101 bne.n 8000dba { return HAL_ERROR; - 8000e22: 2301 movs r3, #1 - 8000e24: e26c b.n 8001300 + 8000db6: 2301 movs r3, #1 + 8000db8: e26c b.n 8001294 /* Check the parameters */ assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType)); /*------------------------------- HSE Configuration ------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) - 8000e26: 687b ldr r3, [r7, #4] - 8000e28: 681b ldr r3, [r3, #0] - 8000e2a: f003 0301 and.w r3, r3, #1 - 8000e2e: 2b00 cmp r3, #0 - 8000e30: f000 8087 beq.w 8000f42 + 8000dba: 687b ldr r3, [r7, #4] + 8000dbc: 681b ldr r3, [r3, #0] + 8000dbe: f003 0301 and.w r3, r3, #1 + 8000dc2: 2b00 cmp r3, #0 + 8000dc4: f000 8087 beq.w 8000ed6 { /* 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) - 8000e34: 4b92 ldr r3, [pc, #584] ; (8001080 ) - 8000e36: 685b ldr r3, [r3, #4] - 8000e38: f003 030c and.w r3, r3, #12 - 8000e3c: 2b04 cmp r3, #4 - 8000e3e: d00c beq.n 8000e5a + 8000dc8: 4b92 ldr r3, [pc, #584] ; (8001014 ) + 8000dca: 685b ldr r3, [r3, #4] + 8000dcc: f003 030c and.w r3, r3, #12 + 8000dd0: 2b04 cmp r3, #4 + 8000dd2: d00c beq.n 8000dee || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) - 8000e40: 4b8f ldr r3, [pc, #572] ; (8001080 ) - 8000e42: 685b ldr r3, [r3, #4] - 8000e44: f003 030c and.w r3, r3, #12 - 8000e48: 2b08 cmp r3, #8 - 8000e4a: d112 bne.n 8000e72 - 8000e4c: 4b8c ldr r3, [pc, #560] ; (8001080 ) - 8000e4e: 685b ldr r3, [r3, #4] - 8000e50: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000e54: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8000e58: d10b bne.n 8000e72 + 8000dd4: 4b8f ldr r3, [pc, #572] ; (8001014 ) + 8000dd6: 685b ldr r3, [r3, #4] + 8000dd8: f003 030c and.w r3, r3, #12 + 8000ddc: 2b08 cmp r3, #8 + 8000dde: d112 bne.n 8000e06 + 8000de0: 4b8c ldr r3, [pc, #560] ; (8001014 ) + 8000de2: 685b ldr r3, [r3, #4] + 8000de4: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000de8: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8000dec: d10b bne.n 8000e06 { if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8000e5a: 4b89 ldr r3, [pc, #548] ; (8001080 ) - 8000e5c: 681b ldr r3, [r3, #0] - 8000e5e: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000e62: 2b00 cmp r3, #0 - 8000e64: d06c beq.n 8000f40 - 8000e66: 687b ldr r3, [r7, #4] - 8000e68: 685b ldr r3, [r3, #4] - 8000e6a: 2b00 cmp r3, #0 - 8000e6c: d168 bne.n 8000f40 + 8000dee: 4b89 ldr r3, [pc, #548] ; (8001014 ) + 8000df0: 681b ldr r3, [r3, #0] + 8000df2: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000df6: 2b00 cmp r3, #0 + 8000df8: d06c beq.n 8000ed4 + 8000dfa: 687b ldr r3, [r7, #4] + 8000dfc: 685b ldr r3, [r3, #4] + 8000dfe: 2b00 cmp r3, #0 + 8000e00: d168 bne.n 8000ed4 { return HAL_ERROR; - 8000e6e: 2301 movs r3, #1 - 8000e70: e246 b.n 8001300 + 8000e02: 2301 movs r3, #1 + 8000e04: e246 b.n 8001294 } } else { /* Set the new HSE configuration ---------------------------------------*/ __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState); - 8000e72: 687b ldr r3, [r7, #4] - 8000e74: 685b ldr r3, [r3, #4] - 8000e76: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8000e7a: d106 bne.n 8000e8a - 8000e7c: 4b80 ldr r3, [pc, #512] ; (8001080 ) - 8000e7e: 681b ldr r3, [r3, #0] - 8000e80: 4a7f ldr r2, [pc, #508] ; (8001080 ) - 8000e82: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 8000e86: 6013 str r3, [r2, #0] - 8000e88: e02e b.n 8000ee8 - 8000e8a: 687b ldr r3, [r7, #4] - 8000e8c: 685b ldr r3, [r3, #4] - 8000e8e: 2b00 cmp r3, #0 - 8000e90: d10c bne.n 8000eac - 8000e92: 4b7b ldr r3, [pc, #492] ; (8001080 ) - 8000e94: 681b ldr r3, [r3, #0] - 8000e96: 4a7a ldr r2, [pc, #488] ; (8001080 ) - 8000e98: f423 3380 bic.w r3, r3, #65536 ; 0x10000 - 8000e9c: 6013 str r3, [r2, #0] - 8000e9e: 4b78 ldr r3, [pc, #480] ; (8001080 ) - 8000ea0: 681b ldr r3, [r3, #0] - 8000ea2: 4a77 ldr r2, [pc, #476] ; (8001080 ) - 8000ea4: f423 2380 bic.w r3, r3, #262144 ; 0x40000 - 8000ea8: 6013 str r3, [r2, #0] - 8000eaa: e01d b.n 8000ee8 - 8000eac: 687b ldr r3, [r7, #4] - 8000eae: 685b ldr r3, [r3, #4] - 8000eb0: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 - 8000eb4: d10c bne.n 8000ed0 - 8000eb6: 4b72 ldr r3, [pc, #456] ; (8001080 ) - 8000eb8: 681b ldr r3, [r3, #0] - 8000eba: 4a71 ldr r2, [pc, #452] ; (8001080 ) - 8000ebc: f443 2380 orr.w r3, r3, #262144 ; 0x40000 - 8000ec0: 6013 str r3, [r2, #0] - 8000ec2: 4b6f ldr r3, [pc, #444] ; (8001080 ) - 8000ec4: 681b ldr r3, [r3, #0] - 8000ec6: 4a6e ldr r2, [pc, #440] ; (8001080 ) - 8000ec8: f443 3380 orr.w r3, r3, #65536 ; 0x10000 - 8000ecc: 6013 str r3, [r2, #0] - 8000ece: e00b b.n 8000ee8 - 8000ed0: 4b6b ldr r3, [pc, #428] ; (8001080 ) - 8000ed2: 681b ldr r3, [r3, #0] - 8000ed4: 4a6a ldr r2, [pc, #424] ; (8001080 ) - 8000ed6: f423 3380 bic.w r3, r3, #65536 ; 0x10000 - 8000eda: 6013 str r3, [r2, #0] - 8000edc: 4b68 ldr r3, [pc, #416] ; (8001080 ) - 8000ede: 681b ldr r3, [r3, #0] - 8000ee0: 4a67 ldr r2, [pc, #412] ; (8001080 ) - 8000ee2: f423 2380 bic.w r3, r3, #262144 ; 0x40000 - 8000ee6: 6013 str r3, [r2, #0] + 8000e06: 687b ldr r3, [r7, #4] + 8000e08: 685b ldr r3, [r3, #4] + 8000e0a: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 8000e0e: d106 bne.n 8000e1e + 8000e10: 4b80 ldr r3, [pc, #512] ; (8001014 ) + 8000e12: 681b ldr r3, [r3, #0] + 8000e14: 4a7f ldr r2, [pc, #508] ; (8001014 ) + 8000e16: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000e1a: 6013 str r3, [r2, #0] + 8000e1c: e02e b.n 8000e7c + 8000e1e: 687b ldr r3, [r7, #4] + 8000e20: 685b ldr r3, [r3, #4] + 8000e22: 2b00 cmp r3, #0 + 8000e24: d10c bne.n 8000e40 + 8000e26: 4b7b ldr r3, [pc, #492] ; (8001014 ) + 8000e28: 681b ldr r3, [r3, #0] + 8000e2a: 4a7a ldr r2, [pc, #488] ; (8001014 ) + 8000e2c: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8000e30: 6013 str r3, [r2, #0] + 8000e32: 4b78 ldr r3, [pc, #480] ; (8001014 ) + 8000e34: 681b ldr r3, [r3, #0] + 8000e36: 4a77 ldr r2, [pc, #476] ; (8001014 ) + 8000e38: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8000e3c: 6013 str r3, [r2, #0] + 8000e3e: e01d b.n 8000e7c + 8000e40: 687b ldr r3, [r7, #4] + 8000e42: 685b ldr r3, [r3, #4] + 8000e44: f5b3 2fa0 cmp.w r3, #327680 ; 0x50000 + 8000e48: d10c bne.n 8000e64 + 8000e4a: 4b72 ldr r3, [pc, #456] ; (8001014 ) + 8000e4c: 681b ldr r3, [r3, #0] + 8000e4e: 4a71 ldr r2, [pc, #452] ; (8001014 ) + 8000e50: f443 2380 orr.w r3, r3, #262144 ; 0x40000 + 8000e54: 6013 str r3, [r2, #0] + 8000e56: 4b6f ldr r3, [pc, #444] ; (8001014 ) + 8000e58: 681b ldr r3, [r3, #0] + 8000e5a: 4a6e ldr r2, [pc, #440] ; (8001014 ) + 8000e5c: f443 3380 orr.w r3, r3, #65536 ; 0x10000 + 8000e60: 6013 str r3, [r2, #0] + 8000e62: e00b b.n 8000e7c + 8000e64: 4b6b ldr r3, [pc, #428] ; (8001014 ) + 8000e66: 681b ldr r3, [r3, #0] + 8000e68: 4a6a ldr r2, [pc, #424] ; (8001014 ) + 8000e6a: f423 3380 bic.w r3, r3, #65536 ; 0x10000 + 8000e6e: 6013 str r3, [r2, #0] + 8000e70: 4b68 ldr r3, [pc, #416] ; (8001014 ) + 8000e72: 681b ldr r3, [r3, #0] + 8000e74: 4a67 ldr r2, [pc, #412] ; (8001014 ) + 8000e76: f423 2380 bic.w r3, r3, #262144 ; 0x40000 + 8000e7a: 6013 str r3, [r2, #0] /* Check the HSE State */ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF) - 8000ee8: 687b ldr r3, [r7, #4] - 8000eea: 685b ldr r3, [r3, #4] - 8000eec: 2b00 cmp r3, #0 - 8000eee: d013 beq.n 8000f18 + 8000e7c: 687b ldr r3, [r7, #4] + 8000e7e: 685b ldr r3, [r3, #4] + 8000e80: 2b00 cmp r3, #0 + 8000e82: d013 beq.n 8000eac { /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000ef0: f7ff fcd2 bl 8000898 - 8000ef4: 6138 str r0, [r7, #16] + 8000e84: f7ff fcd2 bl 800082c + 8000e88: 6138 str r0, [r7, #16] /* Wait till HSE is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8000ef6: e008 b.n 8000f0a + 8000e8a: e008 b.n 8000e9e { if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8000ef8: f7ff fcce bl 8000898 - 8000efc: 4602 mov r2, r0 - 8000efe: 693b ldr r3, [r7, #16] - 8000f00: 1ad3 subs r3, r2, r3 - 8000f02: 2b64 cmp r3, #100 ; 0x64 - 8000f04: d901 bls.n 8000f0a + 8000e8c: f7ff fcce bl 800082c + 8000e90: 4602 mov r2, r0 + 8000e92: 693b ldr r3, [r7, #16] + 8000e94: 1ad3 subs r3, r2, r3 + 8000e96: 2b64 cmp r3, #100 ; 0x64 + 8000e98: d901 bls.n 8000e9e { return HAL_TIMEOUT; - 8000f06: 2303 movs r3, #3 - 8000f08: e1fa b.n 8001300 + 8000e9a: 2303 movs r3, #3 + 8000e9c: e1fa b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 8000f0a: 4b5d ldr r3, [pc, #372] ; (8001080 ) - 8000f0c: 681b ldr r3, [r3, #0] - 8000f0e: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000f12: 2b00 cmp r3, #0 - 8000f14: d0f0 beq.n 8000ef8 - 8000f16: e014 b.n 8000f42 + 8000e9e: 4b5d ldr r3, [pc, #372] ; (8001014 ) + 8000ea0: 681b ldr r3, [r3, #0] + 8000ea2: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000ea6: 2b00 cmp r3, #0 + 8000ea8: d0f0 beq.n 8000e8c + 8000eaa: e014 b.n 8000ed6 } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000f18: f7ff fcbe bl 8000898 - 8000f1c: 6138 str r0, [r7, #16] + 8000eac: f7ff fcbe bl 800082c + 8000eb0: 6138 str r0, [r7, #16] /* Wait till HSE is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8000f1e: e008 b.n 8000f32 + 8000eb2: e008 b.n 8000ec6 { if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) - 8000f20: f7ff fcba bl 8000898 - 8000f24: 4602 mov r2, r0 - 8000f26: 693b ldr r3, [r7, #16] - 8000f28: 1ad3 subs r3, r2, r3 - 8000f2a: 2b64 cmp r3, #100 ; 0x64 - 8000f2c: d901 bls.n 8000f32 + 8000eb4: f7ff fcba bl 800082c + 8000eb8: 4602 mov r2, r0 + 8000eba: 693b ldr r3, [r7, #16] + 8000ebc: 1ad3 subs r3, r2, r3 + 8000ebe: 2b64 cmp r3, #100 ; 0x64 + 8000ec0: d901 bls.n 8000ec6 { return HAL_TIMEOUT; - 8000f2e: 2303 movs r3, #3 - 8000f30: e1e6 b.n 8001300 + 8000ec2: 2303 movs r3, #3 + 8000ec4: e1e6 b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) - 8000f32: 4b53 ldr r3, [pc, #332] ; (8001080 ) - 8000f34: 681b ldr r3, [r3, #0] - 8000f36: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 8000f3a: 2b00 cmp r3, #0 - 8000f3c: d1f0 bne.n 8000f20 - 8000f3e: e000 b.n 8000f42 + 8000ec6: 4b53 ldr r3, [pc, #332] ; (8001014 ) + 8000ec8: 681b ldr r3, [r3, #0] + 8000eca: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8000ece: 2b00 cmp r3, #0 + 8000ed0: d1f0 bne.n 8000eb4 + 8000ed2: e000 b.n 8000ed6 if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) - 8000f40: bf00 nop + 8000ed4: bf00 nop } } } } /*----------------------------- HSI Configuration --------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) - 8000f42: 687b ldr r3, [r7, #4] - 8000f44: 681b ldr r3, [r3, #0] - 8000f46: f003 0302 and.w r3, r3, #2 - 8000f4a: 2b00 cmp r3, #0 - 8000f4c: d063 beq.n 8001016 + 8000ed6: 687b ldr r3, [r7, #4] + 8000ed8: 681b ldr r3, [r3, #0] + 8000eda: f003 0302 and.w r3, r3, #2 + 8000ede: 2b00 cmp r3, #0 + 8000ee0: d063 beq.n 8000faa /* 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) - 8000f4e: 4b4c ldr r3, [pc, #304] ; (8001080 ) - 8000f50: 685b ldr r3, [r3, #4] - 8000f52: f003 030c and.w r3, r3, #12 - 8000f56: 2b00 cmp r3, #0 - 8000f58: d00b beq.n 8000f72 + 8000ee2: 4b4c ldr r3, [pc, #304] ; (8001014 ) + 8000ee4: 685b ldr r3, [r3, #4] + 8000ee6: f003 030c and.w r3, r3, #12 + 8000eea: 2b00 cmp r3, #0 + 8000eec: d00b beq.n 8000f06 || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) - 8000f5a: 4b49 ldr r3, [pc, #292] ; (8001080 ) - 8000f5c: 685b ldr r3, [r3, #4] - 8000f5e: f003 030c and.w r3, r3, #12 - 8000f62: 2b08 cmp r3, #8 - 8000f64: d11c bne.n 8000fa0 - 8000f66: 4b46 ldr r3, [pc, #280] ; (8001080 ) - 8000f68: 685b ldr r3, [r3, #4] - 8000f6a: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8000f6e: 2b00 cmp r3, #0 - 8000f70: d116 bne.n 8000fa0 + 8000eee: 4b49 ldr r3, [pc, #292] ; (8001014 ) + 8000ef0: 685b ldr r3, [r3, #4] + 8000ef2: f003 030c and.w r3, r3, #12 + 8000ef6: 2b08 cmp r3, #8 + 8000ef8: d11c bne.n 8000f34 + 8000efa: 4b46 ldr r3, [pc, #280] ; (8001014 ) + 8000efc: 685b ldr r3, [r3, #4] + 8000efe: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 8000f02: 2b00 cmp r3, #0 + 8000f04: d116 bne.n 8000f34 { /* 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)) - 8000f72: 4b43 ldr r3, [pc, #268] ; (8001080 ) - 8000f74: 681b ldr r3, [r3, #0] - 8000f76: f003 0302 and.w r3, r3, #2 - 8000f7a: 2b00 cmp r3, #0 - 8000f7c: d005 beq.n 8000f8a - 8000f7e: 687b ldr r3, [r7, #4] - 8000f80: 691b ldr r3, [r3, #16] - 8000f82: 2b01 cmp r3, #1 - 8000f84: d001 beq.n 8000f8a + 8000f06: 4b43 ldr r3, [pc, #268] ; (8001014 ) + 8000f08: 681b ldr r3, [r3, #0] + 8000f0a: f003 0302 and.w r3, r3, #2 + 8000f0e: 2b00 cmp r3, #0 + 8000f10: d005 beq.n 8000f1e + 8000f12: 687b ldr r3, [r7, #4] + 8000f14: 691b ldr r3, [r3, #16] + 8000f16: 2b01 cmp r3, #1 + 8000f18: d001 beq.n 8000f1e { return HAL_ERROR; - 8000f86: 2301 movs r3, #1 - 8000f88: e1ba b.n 8001300 + 8000f1a: 2301 movs r3, #1 + 8000f1c: e1ba b.n 8001294 } /* Otherwise, just the calibration is allowed */ else { /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8000f8a: 4b3d ldr r3, [pc, #244] ; (8001080 ) - 8000f8c: 681b ldr r3, [r3, #0] - 8000f8e: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 8000f92: 687b ldr r3, [r7, #4] - 8000f94: 695b ldr r3, [r3, #20] - 8000f96: 00db lsls r3, r3, #3 - 8000f98: 4939 ldr r1, [pc, #228] ; (8001080 ) - 8000f9a: 4313 orrs r3, r2 - 8000f9c: 600b str r3, [r1, #0] + 8000f1e: 4b3d ldr r3, [pc, #244] ; (8001014 ) + 8000f20: 681b ldr r3, [r3, #0] + 8000f22: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 8000f26: 687b ldr r3, [r7, #4] + 8000f28: 695b ldr r3, [r3, #20] + 8000f2a: 00db lsls r3, r3, #3 + 8000f2c: 4939 ldr r1, [pc, #228] ; (8001014 ) + 8000f2e: 4313 orrs r3, r2 + 8000f30: 600b str r3, [r1, #0] if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) - 8000f9e: e03a b.n 8001016 + 8000f32: e03a b.n 8000faa } } else { /* Check the HSI State */ if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) - 8000fa0: 687b ldr r3, [r7, #4] - 8000fa2: 691b ldr r3, [r3, #16] - 8000fa4: 2b00 cmp r3, #0 - 8000fa6: d020 beq.n 8000fea + 8000f34: 687b ldr r3, [r7, #4] + 8000f36: 691b ldr r3, [r3, #16] + 8000f38: 2b00 cmp r3, #0 + 8000f3a: d020 beq.n 8000f7e { /* Enable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_ENABLE(); - 8000fa8: 4b36 ldr r3, [pc, #216] ; (8001084 ) - 8000faa: 2201 movs r2, #1 - 8000fac: 601a str r2, [r3, #0] + 8000f3c: 4b36 ldr r3, [pc, #216] ; (8001018 ) + 8000f3e: 2201 movs r2, #1 + 8000f40: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000fae: f7ff fc73 bl 8000898 - 8000fb2: 6138 str r0, [r7, #16] + 8000f42: f7ff fc73 bl 800082c + 8000f46: 6138 str r0, [r7, #16] /* Wait till HSI is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8000fb4: e008 b.n 8000fc8 + 8000f48: e008 b.n 8000f5c { if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8000fb6: f7ff fc6f bl 8000898 - 8000fba: 4602 mov r2, r0 - 8000fbc: 693b ldr r3, [r7, #16] - 8000fbe: 1ad3 subs r3, r2, r3 - 8000fc0: 2b02 cmp r3, #2 - 8000fc2: d901 bls.n 8000fc8 + 8000f4a: f7ff fc6f bl 800082c + 8000f4e: 4602 mov r2, r0 + 8000f50: 693b ldr r3, [r7, #16] + 8000f52: 1ad3 subs r3, r2, r3 + 8000f54: 2b02 cmp r3, #2 + 8000f56: d901 bls.n 8000f5c { return HAL_TIMEOUT; - 8000fc4: 2303 movs r3, #3 - 8000fc6: e19b b.n 8001300 + 8000f58: 2303 movs r3, #3 + 8000f5a: e19b b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 8000fc8: 4b2d ldr r3, [pc, #180] ; (8001080 ) - 8000fca: 681b ldr r3, [r3, #0] - 8000fcc: f003 0302 and.w r3, r3, #2 - 8000fd0: 2b00 cmp r3, #0 - 8000fd2: d0f0 beq.n 8000fb6 + 8000f5c: 4b2d ldr r3, [pc, #180] ; (8001014 ) + 8000f5e: 681b ldr r3, [r3, #0] + 8000f60: f003 0302 and.w r3, r3, #2 + 8000f64: 2b00 cmp r3, #0 + 8000f66: d0f0 beq.n 8000f4a } } /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/ __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue); - 8000fd4: 4b2a ldr r3, [pc, #168] ; (8001080 ) - 8000fd6: 681b ldr r3, [r3, #0] - 8000fd8: f023 02f8 bic.w r2, r3, #248 ; 0xf8 - 8000fdc: 687b ldr r3, [r7, #4] - 8000fde: 695b ldr r3, [r3, #20] - 8000fe0: 00db lsls r3, r3, #3 - 8000fe2: 4927 ldr r1, [pc, #156] ; (8001080 ) - 8000fe4: 4313 orrs r3, r2 - 8000fe6: 600b str r3, [r1, #0] - 8000fe8: e015 b.n 8001016 + 8000f68: 4b2a ldr r3, [pc, #168] ; (8001014 ) + 8000f6a: 681b ldr r3, [r3, #0] + 8000f6c: f023 02f8 bic.w r2, r3, #248 ; 0xf8 + 8000f70: 687b ldr r3, [r7, #4] + 8000f72: 695b ldr r3, [r3, #20] + 8000f74: 00db lsls r3, r3, #3 + 8000f76: 4927 ldr r1, [pc, #156] ; (8001014 ) + 8000f78: 4313 orrs r3, r2 + 8000f7a: 600b str r3, [r1, #0] + 8000f7c: e015 b.n 8000faa } else { /* Disable the Internal High Speed oscillator (HSI). */ __HAL_RCC_HSI_DISABLE(); - 8000fea: 4b26 ldr r3, [pc, #152] ; (8001084 ) - 8000fec: 2200 movs r2, #0 - 8000fee: 601a str r2, [r3, #0] + 8000f7e: 4b26 ldr r3, [pc, #152] ; (8001018 ) + 8000f80: 2200 movs r2, #0 + 8000f82: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8000ff0: f7ff fc52 bl 8000898 - 8000ff4: 6138 str r0, [r7, #16] + 8000f84: f7ff fc52 bl 800082c + 8000f88: 6138 str r0, [r7, #16] /* Wait till HSI is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 8000ff6: e008 b.n 800100a + 8000f8a: e008 b.n 8000f9e { if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) - 8000ff8: f7ff fc4e bl 8000898 - 8000ffc: 4602 mov r2, r0 - 8000ffe: 693b ldr r3, [r7, #16] - 8001000: 1ad3 subs r3, r2, r3 - 8001002: 2b02 cmp r3, #2 - 8001004: d901 bls.n 800100a + 8000f8c: f7ff fc4e bl 800082c + 8000f90: 4602 mov r2, r0 + 8000f92: 693b ldr r3, [r7, #16] + 8000f94: 1ad3 subs r3, r2, r3 + 8000f96: 2b02 cmp r3, #2 + 8000f98: d901 bls.n 8000f9e { return HAL_TIMEOUT; - 8001006: 2303 movs r3, #3 - 8001008: e17a b.n 8001300 + 8000f9a: 2303 movs r3, #3 + 8000f9c: e17a b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) - 800100a: 4b1d ldr r3, [pc, #116] ; (8001080 ) - 800100c: 681b ldr r3, [r3, #0] - 800100e: f003 0302 and.w r3, r3, #2 - 8001012: 2b00 cmp r3, #0 - 8001014: d1f0 bne.n 8000ff8 + 8000f9e: 4b1d ldr r3, [pc, #116] ; (8001014 ) + 8000fa0: 681b ldr r3, [r3, #0] + 8000fa2: f003 0302 and.w r3, r3, #2 + 8000fa6: 2b00 cmp r3, #0 + 8000fa8: d1f0 bne.n 8000f8c } } } } /*------------------------------ LSI Configuration -------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) - 8001016: 687b ldr r3, [r7, #4] - 8001018: 681b ldr r3, [r3, #0] - 800101a: f003 0308 and.w r3, r3, #8 - 800101e: 2b00 cmp r3, #0 - 8001020: d03a beq.n 8001098 + 8000faa: 687b ldr r3, [r7, #4] + 8000fac: 681b ldr r3, [r3, #0] + 8000fae: f003 0308 and.w r3, r3, #8 + 8000fb2: 2b00 cmp r3, #0 + 8000fb4: d03a beq.n 800102c { /* Check the parameters */ assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState)); /* Check the LSI State */ if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF) - 8001022: 687b ldr r3, [r7, #4] - 8001024: 699b ldr r3, [r3, #24] - 8001026: 2b00 cmp r3, #0 - 8001028: d019 beq.n 800105e + 8000fb6: 687b ldr r3, [r7, #4] + 8000fb8: 699b ldr r3, [r3, #24] + 8000fba: 2b00 cmp r3, #0 + 8000fbc: d019 beq.n 8000ff2 { /* Enable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_ENABLE(); - 800102a: 4b17 ldr r3, [pc, #92] ; (8001088 ) - 800102c: 2201 movs r2, #1 - 800102e: 601a str r2, [r3, #0] + 8000fbe: 4b17 ldr r3, [pc, #92] ; (800101c ) + 8000fc0: 2201 movs r2, #1 + 8000fc2: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001030: f7ff fc32 bl 8000898 - 8001034: 6138 str r0, [r7, #16] + 8000fc4: f7ff fc32 bl 800082c + 8000fc8: 6138 str r0, [r7, #16] /* Wait till LSI is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 8001036: e008 b.n 800104a + 8000fca: e008 b.n 8000fde { if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 8001038: f7ff fc2e bl 8000898 - 800103c: 4602 mov r2, r0 - 800103e: 693b ldr r3, [r7, #16] - 8001040: 1ad3 subs r3, r2, r3 - 8001042: 2b02 cmp r3, #2 - 8001044: d901 bls.n 800104a + 8000fcc: f7ff fc2e bl 800082c + 8000fd0: 4602 mov r2, r0 + 8000fd2: 693b ldr r3, [r7, #16] + 8000fd4: 1ad3 subs r3, r2, r3 + 8000fd6: 2b02 cmp r3, #2 + 8000fd8: d901 bls.n 8000fde { return HAL_TIMEOUT; - 8001046: 2303 movs r3, #3 - 8001048: e15a b.n 8001300 + 8000fda: 2303 movs r3, #3 + 8000fdc: e15a b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) - 800104a: 4b0d ldr r3, [pc, #52] ; (8001080 ) - 800104c: 6a5b ldr r3, [r3, #36] ; 0x24 - 800104e: f003 0302 and.w r3, r3, #2 - 8001052: 2b00 cmp r3, #0 - 8001054: d0f0 beq.n 8001038 + 8000fde: 4b0d ldr r3, [pc, #52] ; (8001014 ) + 8000fe0: 6a5b ldr r3, [r3, #36] ; 0x24 + 8000fe2: f003 0302 and.w r3, r3, #2 + 8000fe6: 2b00 cmp r3, #0 + 8000fe8: d0f0 beq.n 8000fcc } } /* To have a fully stabilized clock in the specified range, a software delay of 1ms should be added.*/ RCC_Delay(1); - 8001056: 2001 movs r0, #1 - 8001058: f000 faa6 bl 80015a8 - 800105c: e01c b.n 8001098 + 8000fea: 2001 movs r0, #1 + 8000fec: f000 faa6 bl 800153c + 8000ff0: e01c b.n 800102c } else { /* Disable the Internal Low Speed oscillator (LSI). */ __HAL_RCC_LSI_DISABLE(); - 800105e: 4b0a ldr r3, [pc, #40] ; (8001088 ) - 8001060: 2200 movs r2, #0 - 8001062: 601a str r2, [r3, #0] + 8000ff2: 4b0a ldr r3, [pc, #40] ; (800101c ) + 8000ff4: 2200 movs r2, #0 + 8000ff6: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001064: f7ff fc18 bl 8000898 - 8001068: 6138 str r0, [r7, #16] + 8000ff8: f7ff fc18 bl 800082c + 8000ffc: 6138 str r0, [r7, #16] /* Wait till LSI is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 800106a: e00f b.n 800108c + 8000ffe: e00f b.n 8001020 { if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) - 800106c: f7ff fc14 bl 8000898 - 8001070: 4602 mov r2, r0 - 8001072: 693b ldr r3, [r7, #16] - 8001074: 1ad3 subs r3, r2, r3 - 8001076: 2b02 cmp r3, #2 - 8001078: d908 bls.n 800108c + 8001000: f7ff fc14 bl 800082c + 8001004: 4602 mov r2, r0 + 8001006: 693b ldr r3, [r7, #16] + 8001008: 1ad3 subs r3, r2, r3 + 800100a: 2b02 cmp r3, #2 + 800100c: d908 bls.n 8001020 { return HAL_TIMEOUT; - 800107a: 2303 movs r3, #3 - 800107c: e140 b.n 8001300 - 800107e: bf00 nop - 8001080: 40021000 .word 0x40021000 - 8001084: 42420000 .word 0x42420000 - 8001088: 42420480 .word 0x42420480 + 800100e: 2303 movs r3, #3 + 8001010: e140 b.n 8001294 + 8001012: bf00 nop + 8001014: 40021000 .word 0x40021000 + 8001018: 42420000 .word 0x42420000 + 800101c: 42420480 .word 0x42420480 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) - 800108c: 4b9e ldr r3, [pc, #632] ; (8001308 ) - 800108e: 6a5b ldr r3, [r3, #36] ; 0x24 - 8001090: f003 0302 and.w r3, r3, #2 - 8001094: 2b00 cmp r3, #0 - 8001096: d1e9 bne.n 800106c + 8001020: 4b9e ldr r3, [pc, #632] ; (800129c ) + 8001022: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001024: f003 0302 and.w r3, r3, #2 + 8001028: 2b00 cmp r3, #0 + 800102a: d1e9 bne.n 8001000 } } } } /*------------------------------ LSE Configuration -------------------------*/ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) - 8001098: 687b ldr r3, [r7, #4] - 800109a: 681b ldr r3, [r3, #0] - 800109c: f003 0304 and.w r3, r3, #4 - 80010a0: 2b00 cmp r3, #0 - 80010a2: f000 80a6 beq.w 80011f2 + 800102c: 687b ldr r3, [r7, #4] + 800102e: 681b ldr r3, [r3, #0] + 8001030: f003 0304 and.w r3, r3, #4 + 8001034: 2b00 cmp r3, #0 + 8001036: f000 80a6 beq.w 8001186 { FlagStatus pwrclkchanged = RESET; - 80010a6: 2300 movs r3, #0 - 80010a8: 75fb strb r3, [r7, #23] + 800103a: 2300 movs r3, #0 + 800103c: 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()) - 80010aa: 4b97 ldr r3, [pc, #604] ; (8001308 ) - 80010ac: 69db ldr r3, [r3, #28] - 80010ae: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 80010b2: 2b00 cmp r3, #0 - 80010b4: d10d bne.n 80010d2 + 800103e: 4b97 ldr r3, [pc, #604] ; (800129c ) + 8001040: 69db ldr r3, [r3, #28] + 8001042: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 8001046: 2b00 cmp r3, #0 + 8001048: d10d bne.n 8001066 { __HAL_RCC_PWR_CLK_ENABLE(); - 80010b6: 4b94 ldr r3, [pc, #592] ; (8001308 ) - 80010b8: 69db ldr r3, [r3, #28] - 80010ba: 4a93 ldr r2, [pc, #588] ; (8001308 ) - 80010bc: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 - 80010c0: 61d3 str r3, [r2, #28] - 80010c2: 4b91 ldr r3, [pc, #580] ; (8001308 ) - 80010c4: 69db ldr r3, [r3, #28] - 80010c6: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 - 80010ca: 60bb str r3, [r7, #8] - 80010cc: 68bb ldr r3, [r7, #8] + 800104a: 4b94 ldr r3, [pc, #592] ; (800129c ) + 800104c: 69db ldr r3, [r3, #28] + 800104e: 4a93 ldr r2, [pc, #588] ; (800129c ) + 8001050: f043 5380 orr.w r3, r3, #268435456 ; 0x10000000 + 8001054: 61d3 str r3, [r2, #28] + 8001056: 4b91 ldr r3, [pc, #580] ; (800129c ) + 8001058: 69db ldr r3, [r3, #28] + 800105a: f003 5380 and.w r3, r3, #268435456 ; 0x10000000 + 800105e: 60bb str r3, [r7, #8] + 8001060: 68bb ldr r3, [r7, #8] pwrclkchanged = SET; - 80010ce: 2301 movs r3, #1 - 80010d0: 75fb strb r3, [r7, #23] + 8001062: 2301 movs r3, #1 + 8001064: 75fb strb r3, [r7, #23] } if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 80010d2: 4b8e ldr r3, [pc, #568] ; (800130c ) - 80010d4: 681b ldr r3, [r3, #0] - 80010d6: f403 7380 and.w r3, r3, #256 ; 0x100 - 80010da: 2b00 cmp r3, #0 - 80010dc: d118 bne.n 8001110 + 8001066: 4b8e ldr r3, [pc, #568] ; (80012a0 ) + 8001068: 681b ldr r3, [r3, #0] + 800106a: f403 7380 and.w r3, r3, #256 ; 0x100 + 800106e: 2b00 cmp r3, #0 + 8001070: d118 bne.n 80010a4 { /* Enable write access to Backup domain */ SET_BIT(PWR->CR, PWR_CR_DBP); - 80010de: 4b8b ldr r3, [pc, #556] ; (800130c ) - 80010e0: 681b ldr r3, [r3, #0] - 80010e2: 4a8a ldr r2, [pc, #552] ; (800130c ) - 80010e4: f443 7380 orr.w r3, r3, #256 ; 0x100 - 80010e8: 6013 str r3, [r2, #0] + 8001072: 4b8b ldr r3, [pc, #556] ; (80012a0 ) + 8001074: 681b ldr r3, [r3, #0] + 8001076: 4a8a ldr r2, [pc, #552] ; (80012a0 ) + 8001078: f443 7380 orr.w r3, r3, #256 ; 0x100 + 800107c: 6013 str r3, [r2, #0] /* Wait for Backup domain Write protection disable */ tickstart = HAL_GetTick(); - 80010ea: f7ff fbd5 bl 8000898 - 80010ee: 6138 str r0, [r7, #16] + 800107e: f7ff fbd5 bl 800082c + 8001082: 6138 str r0, [r7, #16] while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 80010f0: e008 b.n 8001104 + 8001084: e008 b.n 8001098 { if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) - 80010f2: f7ff fbd1 bl 8000898 - 80010f6: 4602 mov r2, r0 - 80010f8: 693b ldr r3, [r7, #16] - 80010fa: 1ad3 subs r3, r2, r3 - 80010fc: 2b64 cmp r3, #100 ; 0x64 - 80010fe: d901 bls.n 8001104 + 8001086: f7ff fbd1 bl 800082c + 800108a: 4602 mov r2, r0 + 800108c: 693b ldr r3, [r7, #16] + 800108e: 1ad3 subs r3, r2, r3 + 8001090: 2b64 cmp r3, #100 ; 0x64 + 8001092: d901 bls.n 8001098 { return HAL_TIMEOUT; - 8001100: 2303 movs r3, #3 - 8001102: e0fd b.n 8001300 + 8001094: 2303 movs r3, #3 + 8001096: e0fd b.n 8001294 while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) - 8001104: 4b81 ldr r3, [pc, #516] ; (800130c ) - 8001106: 681b ldr r3, [r3, #0] - 8001108: f403 7380 and.w r3, r3, #256 ; 0x100 - 800110c: 2b00 cmp r3, #0 - 800110e: d0f0 beq.n 80010f2 + 8001098: 4b81 ldr r3, [pc, #516] ; (80012a0 ) + 800109a: 681b ldr r3, [r3, #0] + 800109c: f403 7380 and.w r3, r3, #256 ; 0x100 + 80010a0: 2b00 cmp r3, #0 + 80010a2: d0f0 beq.n 8001086 } } } /* Set the new LSE configuration -----------------------------------------*/ __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState); - 8001110: 687b ldr r3, [r7, #4] - 8001112: 68db ldr r3, [r3, #12] - 8001114: 2b01 cmp r3, #1 - 8001116: d106 bne.n 8001126 - 8001118: 4b7b ldr r3, [pc, #492] ; (8001308 ) - 800111a: 6a1b ldr r3, [r3, #32] - 800111c: 4a7a ldr r2, [pc, #488] ; (8001308 ) - 800111e: f043 0301 orr.w r3, r3, #1 - 8001122: 6213 str r3, [r2, #32] - 8001124: e02d b.n 8001182 - 8001126: 687b ldr r3, [r7, #4] - 8001128: 68db ldr r3, [r3, #12] - 800112a: 2b00 cmp r3, #0 - 800112c: d10c bne.n 8001148 - 800112e: 4b76 ldr r3, [pc, #472] ; (8001308 ) - 8001130: 6a1b ldr r3, [r3, #32] - 8001132: 4a75 ldr r2, [pc, #468] ; (8001308 ) - 8001134: f023 0301 bic.w r3, r3, #1 - 8001138: 6213 str r3, [r2, #32] - 800113a: 4b73 ldr r3, [pc, #460] ; (8001308 ) - 800113c: 6a1b ldr r3, [r3, #32] - 800113e: 4a72 ldr r2, [pc, #456] ; (8001308 ) - 8001140: f023 0304 bic.w r3, r3, #4 - 8001144: 6213 str r3, [r2, #32] - 8001146: e01c b.n 8001182 - 8001148: 687b ldr r3, [r7, #4] - 800114a: 68db ldr r3, [r3, #12] - 800114c: 2b05 cmp r3, #5 - 800114e: d10c bne.n 800116a - 8001150: 4b6d ldr r3, [pc, #436] ; (8001308 ) - 8001152: 6a1b ldr r3, [r3, #32] - 8001154: 4a6c ldr r2, [pc, #432] ; (8001308 ) - 8001156: f043 0304 orr.w r3, r3, #4 - 800115a: 6213 str r3, [r2, #32] - 800115c: 4b6a ldr r3, [pc, #424] ; (8001308 ) - 800115e: 6a1b ldr r3, [r3, #32] - 8001160: 4a69 ldr r2, [pc, #420] ; (8001308 ) - 8001162: f043 0301 orr.w r3, r3, #1 - 8001166: 6213 str r3, [r2, #32] - 8001168: e00b b.n 8001182 - 800116a: 4b67 ldr r3, [pc, #412] ; (8001308 ) - 800116c: 6a1b ldr r3, [r3, #32] - 800116e: 4a66 ldr r2, [pc, #408] ; (8001308 ) - 8001170: f023 0301 bic.w r3, r3, #1 - 8001174: 6213 str r3, [r2, #32] - 8001176: 4b64 ldr r3, [pc, #400] ; (8001308 ) - 8001178: 6a1b ldr r3, [r3, #32] - 800117a: 4a63 ldr r2, [pc, #396] ; (8001308 ) - 800117c: f023 0304 bic.w r3, r3, #4 - 8001180: 6213 str r3, [r2, #32] + 80010a4: 687b ldr r3, [r7, #4] + 80010a6: 68db ldr r3, [r3, #12] + 80010a8: 2b01 cmp r3, #1 + 80010aa: d106 bne.n 80010ba + 80010ac: 4b7b ldr r3, [pc, #492] ; (800129c ) + 80010ae: 6a1b ldr r3, [r3, #32] + 80010b0: 4a7a ldr r2, [pc, #488] ; (800129c ) + 80010b2: f043 0301 orr.w r3, r3, #1 + 80010b6: 6213 str r3, [r2, #32] + 80010b8: e02d b.n 8001116 + 80010ba: 687b ldr r3, [r7, #4] + 80010bc: 68db ldr r3, [r3, #12] + 80010be: 2b00 cmp r3, #0 + 80010c0: d10c bne.n 80010dc + 80010c2: 4b76 ldr r3, [pc, #472] ; (800129c ) + 80010c4: 6a1b ldr r3, [r3, #32] + 80010c6: 4a75 ldr r2, [pc, #468] ; (800129c ) + 80010c8: f023 0301 bic.w r3, r3, #1 + 80010cc: 6213 str r3, [r2, #32] + 80010ce: 4b73 ldr r3, [pc, #460] ; (800129c ) + 80010d0: 6a1b ldr r3, [r3, #32] + 80010d2: 4a72 ldr r2, [pc, #456] ; (800129c ) + 80010d4: f023 0304 bic.w r3, r3, #4 + 80010d8: 6213 str r3, [r2, #32] + 80010da: e01c b.n 8001116 + 80010dc: 687b ldr r3, [r7, #4] + 80010de: 68db ldr r3, [r3, #12] + 80010e0: 2b05 cmp r3, #5 + 80010e2: d10c bne.n 80010fe + 80010e4: 4b6d ldr r3, [pc, #436] ; (800129c ) + 80010e6: 6a1b ldr r3, [r3, #32] + 80010e8: 4a6c ldr r2, [pc, #432] ; (800129c ) + 80010ea: f043 0304 orr.w r3, r3, #4 + 80010ee: 6213 str r3, [r2, #32] + 80010f0: 4b6a ldr r3, [pc, #424] ; (800129c ) + 80010f2: 6a1b ldr r3, [r3, #32] + 80010f4: 4a69 ldr r2, [pc, #420] ; (800129c ) + 80010f6: f043 0301 orr.w r3, r3, #1 + 80010fa: 6213 str r3, [r2, #32] + 80010fc: e00b b.n 8001116 + 80010fe: 4b67 ldr r3, [pc, #412] ; (800129c ) + 8001100: 6a1b ldr r3, [r3, #32] + 8001102: 4a66 ldr r2, [pc, #408] ; (800129c ) + 8001104: f023 0301 bic.w r3, r3, #1 + 8001108: 6213 str r3, [r2, #32] + 800110a: 4b64 ldr r3, [pc, #400] ; (800129c ) + 800110c: 6a1b ldr r3, [r3, #32] + 800110e: 4a63 ldr r2, [pc, #396] ; (800129c ) + 8001110: f023 0304 bic.w r3, r3, #4 + 8001114: 6213 str r3, [r2, #32] /* Check the LSE State */ if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF) - 8001182: 687b ldr r3, [r7, #4] - 8001184: 68db ldr r3, [r3, #12] - 8001186: 2b00 cmp r3, #0 - 8001188: d015 beq.n 80011b6 + 8001116: 687b ldr r3, [r7, #4] + 8001118: 68db ldr r3, [r3, #12] + 800111a: 2b00 cmp r3, #0 + 800111c: d015 beq.n 800114a { /* Get Start Tick */ tickstart = HAL_GetTick(); - 800118a: f7ff fb85 bl 8000898 - 800118e: 6138 str r0, [r7, #16] + 800111e: f7ff fb85 bl 800082c + 8001122: 6138 str r0, [r7, #16] /* Wait till LSE is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 8001190: e00a b.n 80011a8 + 8001124: e00a b.n 800113c { if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 8001192: f7ff fb81 bl 8000898 - 8001196: 4602 mov r2, r0 - 8001198: 693b ldr r3, [r7, #16] - 800119a: 1ad3 subs r3, r2, r3 - 800119c: f241 3288 movw r2, #5000 ; 0x1388 - 80011a0: 4293 cmp r3, r2 - 80011a2: d901 bls.n 80011a8 + 8001126: f7ff fb81 bl 800082c + 800112a: 4602 mov r2, r0 + 800112c: 693b ldr r3, [r7, #16] + 800112e: 1ad3 subs r3, r2, r3 + 8001130: f241 3288 movw r2, #5000 ; 0x1388 + 8001134: 4293 cmp r3, r2 + 8001136: d901 bls.n 800113c { return HAL_TIMEOUT; - 80011a4: 2303 movs r3, #3 - 80011a6: e0ab b.n 8001300 + 8001138: 2303 movs r3, #3 + 800113a: e0ab b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) - 80011a8: 4b57 ldr r3, [pc, #348] ; (8001308 ) - 80011aa: 6a1b ldr r3, [r3, #32] - 80011ac: f003 0302 and.w r3, r3, #2 - 80011b0: 2b00 cmp r3, #0 - 80011b2: d0ee beq.n 8001192 - 80011b4: e014 b.n 80011e0 + 800113c: 4b57 ldr r3, [pc, #348] ; (800129c ) + 800113e: 6a1b ldr r3, [r3, #32] + 8001140: f003 0302 and.w r3, r3, #2 + 8001144: 2b00 cmp r3, #0 + 8001146: d0ee beq.n 8001126 + 8001148: e014 b.n 8001174 } } else { /* Get Start Tick */ tickstart = HAL_GetTick(); - 80011b6: f7ff fb6f bl 8000898 - 80011ba: 6138 str r0, [r7, #16] + 800114a: f7ff fb6f bl 800082c + 800114e: 6138 str r0, [r7, #16] /* Wait till LSE is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 80011bc: e00a b.n 80011d4 + 8001150: e00a b.n 8001168 { if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) - 80011be: f7ff fb6b bl 8000898 - 80011c2: 4602 mov r2, r0 - 80011c4: 693b ldr r3, [r7, #16] - 80011c6: 1ad3 subs r3, r2, r3 - 80011c8: f241 3288 movw r2, #5000 ; 0x1388 - 80011cc: 4293 cmp r3, r2 - 80011ce: d901 bls.n 80011d4 + 8001152: f7ff fb6b bl 800082c + 8001156: 4602 mov r2, r0 + 8001158: 693b ldr r3, [r7, #16] + 800115a: 1ad3 subs r3, r2, r3 + 800115c: f241 3288 movw r2, #5000 ; 0x1388 + 8001160: 4293 cmp r3, r2 + 8001162: d901 bls.n 8001168 { return HAL_TIMEOUT; - 80011d0: 2303 movs r3, #3 - 80011d2: e095 b.n 8001300 + 8001164: 2303 movs r3, #3 + 8001166: e095 b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) - 80011d4: 4b4c ldr r3, [pc, #304] ; (8001308 ) - 80011d6: 6a1b ldr r3, [r3, #32] - 80011d8: f003 0302 and.w r3, r3, #2 - 80011dc: 2b00 cmp r3, #0 - 80011de: d1ee bne.n 80011be + 8001168: 4b4c ldr r3, [pc, #304] ; (800129c ) + 800116a: 6a1b ldr r3, [r3, #32] + 800116c: f003 0302 and.w r3, r3, #2 + 8001170: 2b00 cmp r3, #0 + 8001172: d1ee bne.n 8001152 } } } /* Require to disable power clock if necessary */ if (pwrclkchanged == SET) - 80011e0: 7dfb ldrb r3, [r7, #23] - 80011e2: 2b01 cmp r3, #1 - 80011e4: d105 bne.n 80011f2 + 8001174: 7dfb ldrb r3, [r7, #23] + 8001176: 2b01 cmp r3, #1 + 8001178: d105 bne.n 8001186 { __HAL_RCC_PWR_CLK_DISABLE(); - 80011e6: 4b48 ldr r3, [pc, #288] ; (8001308 ) - 80011e8: 69db ldr r3, [r3, #28] - 80011ea: 4a47 ldr r2, [pc, #284] ; (8001308 ) - 80011ec: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 - 80011f0: 61d3 str r3, [r2, #28] + 800117a: 4b48 ldr r3, [pc, #288] ; (800129c ) + 800117c: 69db ldr r3, [r3, #28] + 800117e: 4a47 ldr r2, [pc, #284] ; (800129c ) + 8001180: f023 5380 bic.w r3, r3, #268435456 ; 0x10000000 + 8001184: 61d3 str r3, [r2, #28] #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) - 80011f2: 687b ldr r3, [r7, #4] - 80011f4: 69db ldr r3, [r3, #28] - 80011f6: 2b00 cmp r3, #0 - 80011f8: f000 8081 beq.w 80012fe + 8001186: 687b ldr r3, [r7, #4] + 8001188: 69db ldr r3, [r3, #28] + 800118a: 2b00 cmp r3, #0 + 800118c: f000 8081 beq.w 8001292 { /* Check if the PLL is used as system clock or not */ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) - 80011fc: 4b42 ldr r3, [pc, #264] ; (8001308 ) - 80011fe: 685b ldr r3, [r3, #4] - 8001200: f003 030c and.w r3, r3, #12 - 8001204: 2b08 cmp r3, #8 - 8001206: d061 beq.n 80012cc + 8001190: 4b42 ldr r3, [pc, #264] ; (800129c ) + 8001192: 685b ldr r3, [r3, #4] + 8001194: f003 030c and.w r3, r3, #12 + 8001198: 2b08 cmp r3, #8 + 800119a: d061 beq.n 8001260 { if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) - 8001208: 687b ldr r3, [r7, #4] - 800120a: 69db ldr r3, [r3, #28] - 800120c: 2b02 cmp r3, #2 - 800120e: d146 bne.n 800129e + 800119c: 687b ldr r3, [r7, #4] + 800119e: 69db ldr r3, [r3, #28] + 80011a0: 2b02 cmp r3, #2 + 80011a2: d146 bne.n 8001232 /* 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(); - 8001210: 4b3f ldr r3, [pc, #252] ; (8001310 ) - 8001212: 2200 movs r2, #0 - 8001214: 601a str r2, [r3, #0] + 80011a4: 4b3f ldr r3, [pc, #252] ; (80012a4 ) + 80011a6: 2200 movs r2, #0 + 80011a8: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001216: f7ff fb3f bl 8000898 - 800121a: 6138 str r0, [r7, #16] + 80011aa: f7ff fb3f bl 800082c + 80011ae: 6138 str r0, [r7, #16] /* Wait till PLL is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 800121c: e008 b.n 8001230 + 80011b0: e008 b.n 80011c4 { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 800121e: f7ff fb3b bl 8000898 - 8001222: 4602 mov r2, r0 - 8001224: 693b ldr r3, [r7, #16] - 8001226: 1ad3 subs r3, r2, r3 - 8001228: 2b02 cmp r3, #2 - 800122a: d901 bls.n 8001230 + 80011b2: f7ff fb3b bl 800082c + 80011b6: 4602 mov r2, r0 + 80011b8: 693b ldr r3, [r7, #16] + 80011ba: 1ad3 subs r3, r2, r3 + 80011bc: 2b02 cmp r3, #2 + 80011be: d901 bls.n 80011c4 { return HAL_TIMEOUT; - 800122c: 2303 movs r3, #3 - 800122e: e067 b.n 8001300 + 80011c0: 2303 movs r3, #3 + 80011c2: e067 b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 8001230: 4b35 ldr r3, [pc, #212] ; (8001308 ) - 8001232: 681b ldr r3, [r3, #0] - 8001234: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 8001238: 2b00 cmp r3, #0 - 800123a: d1f0 bne.n 800121e + 80011c4: 4b35 ldr r3, [pc, #212] ; (800129c ) + 80011c6: 681b ldr r3, [r3, #0] + 80011c8: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 80011cc: 2b00 cmp r3, #0 + 80011ce: d1f0 bne.n 80011b2 } } /* 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) - 800123c: 687b ldr r3, [r7, #4] - 800123e: 6a1b ldr r3, [r3, #32] - 8001240: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 - 8001244: d108 bne.n 8001258 + 80011d0: 687b ldr r3, [r7, #4] + 80011d2: 6a1b ldr r3, [r3, #32] + 80011d4: f5b3 3f80 cmp.w r3, #65536 ; 0x10000 + 80011d8: d108 bne.n 80011ec /* Set PREDIV1 source */ SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source); #endif /* RCC_CFGR2_PREDIV1SRC */ /* Set PREDIV1 Value */ __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue); - 8001246: 4b30 ldr r3, [pc, #192] ; (8001308 ) - 8001248: 685b ldr r3, [r3, #4] - 800124a: f423 3200 bic.w r2, r3, #131072 ; 0x20000 - 800124e: 687b ldr r3, [r7, #4] - 8001250: 689b ldr r3, [r3, #8] - 8001252: 492d ldr r1, [pc, #180] ; (8001308 ) - 8001254: 4313 orrs r3, r2 - 8001256: 604b str r3, [r1, #4] + 80011da: 4b30 ldr r3, [pc, #192] ; (800129c ) + 80011dc: 685b ldr r3, [r3, #4] + 80011de: f423 3200 bic.w r2, r3, #131072 ; 0x20000 + 80011e2: 687b ldr r3, [r7, #4] + 80011e4: 689b ldr r3, [r3, #8] + 80011e6: 492d ldr r1, [pc, #180] ; (800129c ) + 80011e8: 4313 orrs r3, r2 + 80011ea: 604b str r3, [r1, #4] } /* Configure the main PLL clock source and multiplication factors. */ __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, - 8001258: 4b2b ldr r3, [pc, #172] ; (8001308 ) - 800125a: 685b ldr r3, [r3, #4] - 800125c: f423 1274 bic.w r2, r3, #3997696 ; 0x3d0000 - 8001260: 687b ldr r3, [r7, #4] - 8001262: 6a19 ldr r1, [r3, #32] - 8001264: 687b ldr r3, [r7, #4] - 8001266: 6a5b ldr r3, [r3, #36] ; 0x24 - 8001268: 430b orrs r3, r1 - 800126a: 4927 ldr r1, [pc, #156] ; (8001308 ) - 800126c: 4313 orrs r3, r2 - 800126e: 604b str r3, [r1, #4] + 80011ec: 4b2b ldr r3, [pc, #172] ; (800129c ) + 80011ee: 685b ldr r3, [r3, #4] + 80011f0: f423 1274 bic.w r2, r3, #3997696 ; 0x3d0000 + 80011f4: 687b ldr r3, [r7, #4] + 80011f6: 6a19 ldr r1, [r3, #32] + 80011f8: 687b ldr r3, [r7, #4] + 80011fa: 6a5b ldr r3, [r3, #36] ; 0x24 + 80011fc: 430b orrs r3, r1 + 80011fe: 4927 ldr r1, [pc, #156] ; (800129c ) + 8001200: 4313 orrs r3, r2 + 8001202: 604b str r3, [r1, #4] RCC_OscInitStruct->PLL.PLLMUL); /* Enable the main PLL. */ __HAL_RCC_PLL_ENABLE(); - 8001270: 4b27 ldr r3, [pc, #156] ; (8001310 ) - 8001272: 2201 movs r2, #1 - 8001274: 601a str r2, [r3, #0] + 8001204: 4b27 ldr r3, [pc, #156] ; (80012a4 ) + 8001206: 2201 movs r2, #1 + 8001208: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001276: f7ff fb0f bl 8000898 - 800127a: 6138 str r0, [r7, #16] + 800120a: f7ff fb0f bl 800082c + 800120e: 6138 str r0, [r7, #16] /* Wait till PLL is ready */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 800127c: e008 b.n 8001290 + 8001210: e008 b.n 8001224 { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 800127e: f7ff fb0b bl 8000898 - 8001282: 4602 mov r2, r0 - 8001284: 693b ldr r3, [r7, #16] - 8001286: 1ad3 subs r3, r2, r3 - 8001288: 2b02 cmp r3, #2 - 800128a: d901 bls.n 8001290 + 8001212: f7ff fb0b bl 800082c + 8001216: 4602 mov r2, r0 + 8001218: 693b ldr r3, [r7, #16] + 800121a: 1ad3 subs r3, r2, r3 + 800121c: 2b02 cmp r3, #2 + 800121e: d901 bls.n 8001224 { return HAL_TIMEOUT; - 800128c: 2303 movs r3, #3 - 800128e: e037 b.n 8001300 + 8001220: 2303 movs r3, #3 + 8001222: e037 b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 8001290: 4b1d ldr r3, [pc, #116] ; (8001308 ) - 8001292: 681b ldr r3, [r3, #0] - 8001294: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 8001298: 2b00 cmp r3, #0 - 800129a: d0f0 beq.n 800127e - 800129c: e02f b.n 80012fe + 8001224: 4b1d ldr r3, [pc, #116] ; (800129c ) + 8001226: 681b ldr r3, [r3, #0] + 8001228: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 800122c: 2b00 cmp r3, #0 + 800122e: d0f0 beq.n 8001212 + 8001230: e02f b.n 8001292 } } else { /* Disable the main PLL. */ __HAL_RCC_PLL_DISABLE(); - 800129e: 4b1c ldr r3, [pc, #112] ; (8001310 ) - 80012a0: 2200 movs r2, #0 - 80012a2: 601a str r2, [r3, #0] + 8001232: 4b1c ldr r3, [pc, #112] ; (80012a4 ) + 8001234: 2200 movs r2, #0 + 8001236: 601a str r2, [r3, #0] /* Get Start Tick */ tickstart = HAL_GetTick(); - 80012a4: f7ff faf8 bl 8000898 - 80012a8: 6138 str r0, [r7, #16] + 8001238: f7ff faf8 bl 800082c + 800123c: 6138 str r0, [r7, #16] /* Wait till PLL is disabled */ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80012aa: e008 b.n 80012be + 800123e: e008 b.n 8001252 { if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) - 80012ac: f7ff faf4 bl 8000898 - 80012b0: 4602 mov r2, r0 - 80012b2: 693b ldr r3, [r7, #16] - 80012b4: 1ad3 subs r3, r2, r3 - 80012b6: 2b02 cmp r3, #2 - 80012b8: d901 bls.n 80012be + 8001240: f7ff faf4 bl 800082c + 8001244: 4602 mov r2, r0 + 8001246: 693b ldr r3, [r7, #16] + 8001248: 1ad3 subs r3, r2, r3 + 800124a: 2b02 cmp r3, #2 + 800124c: d901 bls.n 8001252 { return HAL_TIMEOUT; - 80012ba: 2303 movs r3, #3 - 80012bc: e020 b.n 8001300 + 800124e: 2303 movs r3, #3 + 8001250: e020 b.n 8001294 while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) - 80012be: 4b12 ldr r3, [pc, #72] ; (8001308 ) - 80012c0: 681b ldr r3, [r3, #0] - 80012c2: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 80012c6: 2b00 cmp r3, #0 - 80012c8: d1f0 bne.n 80012ac - 80012ca: e018 b.n 80012fe + 8001252: 4b12 ldr r3, [pc, #72] ; (800129c ) + 8001254: 681b ldr r3, [r3, #0] + 8001256: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 800125a: 2b00 cmp r3, #0 + 800125c: d1f0 bne.n 8001240 + 800125e: e018 b.n 8001292 } } else { /* Check if there is a request to disable the PLL used as System clock source */ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) - 80012cc: 687b ldr r3, [r7, #4] - 80012ce: 69db ldr r3, [r3, #28] - 80012d0: 2b01 cmp r3, #1 - 80012d2: d101 bne.n 80012d8 + 8001260: 687b ldr r3, [r7, #4] + 8001262: 69db ldr r3, [r3, #28] + 8001264: 2b01 cmp r3, #1 + 8001266: d101 bne.n 800126c { return HAL_ERROR; - 80012d4: 2301 movs r3, #1 - 80012d6: e013 b.n 8001300 + 8001268: 2301 movs r3, #1 + 800126a: e013 b.n 8001294 } else { /* Do not return HAL_ERROR if request repeats the current configuration */ pll_config = RCC->CFGR; - 80012d8: 4b0b ldr r3, [pc, #44] ; (8001308 ) - 80012da: 685b ldr r3, [r3, #4] - 80012dc: 60fb str r3, [r7, #12] + 800126c: 4b0b ldr r3, [pc, #44] ; (800129c ) + 800126e: 685b ldr r3, [r3, #4] + 8001270: 60fb str r3, [r7, #12] if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80012de: 68fb ldr r3, [r7, #12] - 80012e0: f403 3280 and.w r2, r3, #65536 ; 0x10000 - 80012e4: 687b ldr r3, [r7, #4] - 80012e6: 6a1b ldr r3, [r3, #32] - 80012e8: 429a cmp r2, r3 - 80012ea: d106 bne.n 80012fa + 8001272: 68fb ldr r3, [r7, #12] + 8001274: f403 3280 and.w r2, r3, #65536 ; 0x10000 + 8001278: 687b ldr r3, [r7, #4] + 800127a: 6a1b ldr r3, [r3, #32] + 800127c: 429a cmp r2, r3 + 800127e: d106 bne.n 800128e (READ_BIT(pll_config, RCC_CFGR_PLLMULL) != RCC_OscInitStruct->PLL.PLLMUL)) - 80012ec: 68fb ldr r3, [r7, #12] - 80012ee: f403 1270 and.w r2, r3, #3932160 ; 0x3c0000 - 80012f2: 687b ldr r3, [r7, #4] - 80012f4: 6a5b ldr r3, [r3, #36] ; 0x24 + 8001280: 68fb ldr r3, [r7, #12] + 8001282: f403 1270 and.w r2, r3, #3932160 ; 0x3c0000 + 8001286: 687b ldr r3, [r7, #4] + 8001288: 6a5b ldr r3, [r3, #36] ; 0x24 if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || - 80012f6: 429a cmp r2, r3 - 80012f8: d001 beq.n 80012fe + 800128a: 429a cmp r2, r3 + 800128c: d001 beq.n 8001292 { return HAL_ERROR; - 80012fa: 2301 movs r3, #1 - 80012fc: e000 b.n 8001300 + 800128e: 2301 movs r3, #1 + 8001290: e000 b.n 8001294 } } } } return HAL_OK; - 80012fe: 2300 movs r3, #0 + 8001292: 2300 movs r3, #0 } - 8001300: 4618 mov r0, r3 - 8001302: 3718 adds r7, #24 - 8001304: 46bd mov sp, r7 - 8001306: bd80 pop {r7, pc} - 8001308: 40021000 .word 0x40021000 - 800130c: 40007000 .word 0x40007000 - 8001310: 42420060 .word 0x42420060 + 8001294: 4618 mov r0, r3 + 8001296: 3718 adds r7, #24 + 8001298: 46bd mov sp, r7 + 800129a: bd80 pop {r7, pc} + 800129c: 40021000 .word 0x40021000 + 80012a0: 40007000 .word 0x40007000 + 80012a4: 42420060 .word 0x42420060 -08001314 : +080012a8 : * 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) { - 8001314: b580 push {r7, lr} - 8001316: b084 sub sp, #16 - 8001318: af00 add r7, sp, #0 - 800131a: 6078 str r0, [r7, #4] - 800131c: 6039 str r1, [r7, #0] + 80012a8: b580 push {r7, lr} + 80012aa: b084 sub sp, #16 + 80012ac: af00 add r7, sp, #0 + 80012ae: 6078 str r0, [r7, #4] + 80012b0: 6039 str r1, [r7, #0] uint32_t tickstart; /* Check Null pointer */ if (RCC_ClkInitStruct == NULL) - 800131e: 687b ldr r3, [r7, #4] - 8001320: 2b00 cmp r3, #0 - 8001322: d101 bne.n 8001328 + 80012b2: 687b ldr r3, [r7, #4] + 80012b4: 2b00 cmp r3, #0 + 80012b6: d101 bne.n 80012bc { return HAL_ERROR; - 8001324: 2301 movs r3, #1 - 8001326: e0d0 b.n 80014ca + 80012b8: 2301 movs r3, #1 + 80012ba: e0d0 b.n 800145e 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()) - 8001328: 4b6a ldr r3, [pc, #424] ; (80014d4 ) - 800132a: 681b ldr r3, [r3, #0] - 800132c: f003 0307 and.w r3, r3, #7 - 8001330: 683a ldr r2, [r7, #0] - 8001332: 429a cmp r2, r3 - 8001334: d910 bls.n 8001358 + 80012bc: 4b6a ldr r3, [pc, #424] ; (8001468 ) + 80012be: 681b ldr r3, [r3, #0] + 80012c0: f003 0307 and.w r3, r3, #7 + 80012c4: 683a ldr r2, [r7, #0] + 80012c6: 429a cmp r2, r3 + 80012c8: d910 bls.n 80012ec { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); - 8001336: 4b67 ldr r3, [pc, #412] ; (80014d4 ) - 8001338: 681b ldr r3, [r3, #0] - 800133a: f023 0207 bic.w r2, r3, #7 - 800133e: 4965 ldr r1, [pc, #404] ; (80014d4 ) - 8001340: 683b ldr r3, [r7, #0] - 8001342: 4313 orrs r3, r2 - 8001344: 600b str r3, [r1, #0] + 80012ca: 4b67 ldr r3, [pc, #412] ; (8001468 ) + 80012cc: 681b ldr r3, [r3, #0] + 80012ce: f023 0207 bic.w r2, r3, #7 + 80012d2: 4965 ldr r1, [pc, #404] ; (8001468 ) + 80012d4: 683b ldr r3, [r7, #0] + 80012d6: 4313 orrs r3, r2 + 80012d8: 600b str r3, [r1, #0] /* 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) - 8001346: 4b63 ldr r3, [pc, #396] ; (80014d4 ) - 8001348: 681b ldr r3, [r3, #0] - 800134a: f003 0307 and.w r3, r3, #7 - 800134e: 683a ldr r2, [r7, #0] - 8001350: 429a cmp r2, r3 - 8001352: d001 beq.n 8001358 + 80012da: 4b63 ldr r3, [pc, #396] ; (8001468 ) + 80012dc: 681b ldr r3, [r3, #0] + 80012de: f003 0307 and.w r3, r3, #7 + 80012e2: 683a ldr r2, [r7, #0] + 80012e4: 429a cmp r2, r3 + 80012e6: d001 beq.n 80012ec { return HAL_ERROR; - 8001354: 2301 movs r3, #1 - 8001356: e0b8 b.n 80014ca + 80012e8: 2301 movs r3, #1 + 80012ea: e0b8 b.n 800145e } } #endif /* FLASH_ACR_LATENCY */ /*-------------------------- HCLK Configuration --------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) - 8001358: 687b ldr r3, [r7, #4] - 800135a: 681b ldr r3, [r3, #0] - 800135c: f003 0302 and.w r3, r3, #2 - 8001360: 2b00 cmp r3, #0 - 8001362: d020 beq.n 80013a6 + 80012ec: 687b ldr r3, [r7, #4] + 80012ee: 681b ldr r3, [r3, #0] + 80012f0: f003 0302 and.w r3, r3, #2 + 80012f4: 2b00 cmp r3, #0 + 80012f6: d020 beq.n 800133a { /* 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) - 8001364: 687b ldr r3, [r7, #4] - 8001366: 681b ldr r3, [r3, #0] - 8001368: f003 0304 and.w r3, r3, #4 - 800136c: 2b00 cmp r3, #0 - 800136e: d005 beq.n 800137c + 80012f8: 687b ldr r3, [r7, #4] + 80012fa: 681b ldr r3, [r3, #0] + 80012fc: f003 0304 and.w r3, r3, #4 + 8001300: 2b00 cmp r3, #0 + 8001302: d005 beq.n 8001310 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16); - 8001370: 4b59 ldr r3, [pc, #356] ; (80014d8 ) - 8001372: 685b ldr r3, [r3, #4] - 8001374: 4a58 ldr r2, [pc, #352] ; (80014d8 ) - 8001376: f443 63e0 orr.w r3, r3, #1792 ; 0x700 - 800137a: 6053 str r3, [r2, #4] + 8001304: 4b59 ldr r3, [pc, #356] ; (800146c ) + 8001306: 685b ldr r3, [r3, #4] + 8001308: 4a58 ldr r2, [pc, #352] ; (800146c ) + 800130a: f443 63e0 orr.w r3, r3, #1792 ; 0x700 + 800130e: 6053 str r3, [r2, #4] } if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 800137c: 687b ldr r3, [r7, #4] - 800137e: 681b ldr r3, [r3, #0] - 8001380: f003 0308 and.w r3, r3, #8 - 8001384: 2b00 cmp r3, #0 - 8001386: d005 beq.n 8001394 + 8001310: 687b ldr r3, [r7, #4] + 8001312: 681b ldr r3, [r3, #0] + 8001314: f003 0308 and.w r3, r3, #8 + 8001318: 2b00 cmp r3, #0 + 800131a: d005 beq.n 8001328 { MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3)); - 8001388: 4b53 ldr r3, [pc, #332] ; (80014d8 ) - 800138a: 685b ldr r3, [r3, #4] - 800138c: 4a52 ldr r2, [pc, #328] ; (80014d8 ) - 800138e: f443 5360 orr.w r3, r3, #14336 ; 0x3800 - 8001392: 6053 str r3, [r2, #4] + 800131c: 4b53 ldr r3, [pc, #332] ; (800146c ) + 800131e: 685b ldr r3, [r3, #4] + 8001320: 4a52 ldr r2, [pc, #328] ; (800146c ) + 8001322: f443 5360 orr.w r3, r3, #14336 ; 0x3800 + 8001326: 6053 str r3, [r2, #4] } /* Set the new HCLK clock divider */ assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider); - 8001394: 4b50 ldr r3, [pc, #320] ; (80014d8 ) - 8001396: 685b ldr r3, [r3, #4] - 8001398: f023 02f0 bic.w r2, r3, #240 ; 0xf0 - 800139c: 687b ldr r3, [r7, #4] - 800139e: 689b ldr r3, [r3, #8] - 80013a0: 494d ldr r1, [pc, #308] ; (80014d8 ) - 80013a2: 4313 orrs r3, r2 - 80013a4: 604b str r3, [r1, #4] + 8001328: 4b50 ldr r3, [pc, #320] ; (800146c ) + 800132a: 685b ldr r3, [r3, #4] + 800132c: f023 02f0 bic.w r2, r3, #240 ; 0xf0 + 8001330: 687b ldr r3, [r7, #4] + 8001332: 689b ldr r3, [r3, #8] + 8001334: 494d ldr r1, [pc, #308] ; (800146c ) + 8001336: 4313 orrs r3, r2 + 8001338: 604b str r3, [r1, #4] } /*------------------------- SYSCLK Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) - 80013a6: 687b ldr r3, [r7, #4] - 80013a8: 681b ldr r3, [r3, #0] - 80013aa: f003 0301 and.w r3, r3, #1 - 80013ae: 2b00 cmp r3, #0 - 80013b0: d040 beq.n 8001434 + 800133a: 687b ldr r3, [r7, #4] + 800133c: 681b ldr r3, [r3, #0] + 800133e: f003 0301 and.w r3, r3, #1 + 8001342: 2b00 cmp r3, #0 + 8001344: d040 beq.n 80013c8 { assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource)); /* HSE is selected as System Clock Source */ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) - 80013b2: 687b ldr r3, [r7, #4] - 80013b4: 685b ldr r3, [r3, #4] - 80013b6: 2b01 cmp r3, #1 - 80013b8: d107 bne.n 80013ca + 8001346: 687b ldr r3, [r7, #4] + 8001348: 685b ldr r3, [r3, #4] + 800134a: 2b01 cmp r3, #1 + 800134c: d107 bne.n 800135e { /* Check the HSE ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) - 80013ba: 4b47 ldr r3, [pc, #284] ; (80014d8 ) - 80013bc: 681b ldr r3, [r3, #0] - 80013be: f403 3300 and.w r3, r3, #131072 ; 0x20000 - 80013c2: 2b00 cmp r3, #0 - 80013c4: d115 bne.n 80013f2 + 800134e: 4b47 ldr r3, [pc, #284] ; (800146c ) + 8001350: 681b ldr r3, [r3, #0] + 8001352: f403 3300 and.w r3, r3, #131072 ; 0x20000 + 8001356: 2b00 cmp r3, #0 + 8001358: d115 bne.n 8001386 { return HAL_ERROR; - 80013c6: 2301 movs r3, #1 - 80013c8: e07f b.n 80014ca + 800135a: 2301 movs r3, #1 + 800135c: e07f b.n 800145e } } /* PLL is selected as System Clock Source */ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) - 80013ca: 687b ldr r3, [r7, #4] - 80013cc: 685b ldr r3, [r3, #4] - 80013ce: 2b02 cmp r3, #2 - 80013d0: d107 bne.n 80013e2 + 800135e: 687b ldr r3, [r7, #4] + 8001360: 685b ldr r3, [r3, #4] + 8001362: 2b02 cmp r3, #2 + 8001364: d107 bne.n 8001376 { /* Check the PLL ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) - 80013d2: 4b41 ldr r3, [pc, #260] ; (80014d8 ) - 80013d4: 681b ldr r3, [r3, #0] - 80013d6: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 - 80013da: 2b00 cmp r3, #0 - 80013dc: d109 bne.n 80013f2 + 8001366: 4b41 ldr r3, [pc, #260] ; (800146c ) + 8001368: 681b ldr r3, [r3, #0] + 800136a: f003 7300 and.w r3, r3, #33554432 ; 0x2000000 + 800136e: 2b00 cmp r3, #0 + 8001370: d109 bne.n 8001386 { return HAL_ERROR; - 80013de: 2301 movs r3, #1 - 80013e0: e073 b.n 80014ca + 8001372: 2301 movs r3, #1 + 8001374: e073 b.n 800145e } /* HSI is selected as System Clock Source */ else { /* Check the HSI ready flag */ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) - 80013e2: 4b3d ldr r3, [pc, #244] ; (80014d8 ) - 80013e4: 681b ldr r3, [r3, #0] - 80013e6: f003 0302 and.w r3, r3, #2 - 80013ea: 2b00 cmp r3, #0 - 80013ec: d101 bne.n 80013f2 + 8001376: 4b3d ldr r3, [pc, #244] ; (800146c ) + 8001378: 681b ldr r3, [r3, #0] + 800137a: f003 0302 and.w r3, r3, #2 + 800137e: 2b00 cmp r3, #0 + 8001380: d101 bne.n 8001386 { return HAL_ERROR; - 80013ee: 2301 movs r3, #1 - 80013f0: e06b b.n 80014ca + 8001382: 2301 movs r3, #1 + 8001384: e06b b.n 800145e } } __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource); - 80013f2: 4b39 ldr r3, [pc, #228] ; (80014d8 ) - 80013f4: 685b ldr r3, [r3, #4] - 80013f6: f023 0203 bic.w r2, r3, #3 - 80013fa: 687b ldr r3, [r7, #4] - 80013fc: 685b ldr r3, [r3, #4] - 80013fe: 4936 ldr r1, [pc, #216] ; (80014d8 ) - 8001400: 4313 orrs r3, r2 - 8001402: 604b str r3, [r1, #4] + 8001386: 4b39 ldr r3, [pc, #228] ; (800146c ) + 8001388: 685b ldr r3, [r3, #4] + 800138a: f023 0203 bic.w r2, r3, #3 + 800138e: 687b ldr r3, [r7, #4] + 8001390: 685b ldr r3, [r3, #4] + 8001392: 4936 ldr r1, [pc, #216] ; (800146c ) + 8001394: 4313 orrs r3, r2 + 8001396: 604b str r3, [r1, #4] /* Get Start Tick */ tickstart = HAL_GetTick(); - 8001404: f7ff fa48 bl 8000898 - 8001408: 60f8 str r0, [r7, #12] + 8001398: f7ff fa48 bl 800082c + 800139c: 60f8 str r0, [r7, #12] while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 800140a: e00a b.n 8001422 + 800139e: e00a b.n 80013b6 { if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) - 800140c: f7ff fa44 bl 8000898 - 8001410: 4602 mov r2, r0 - 8001412: 68fb ldr r3, [r7, #12] - 8001414: 1ad3 subs r3, r2, r3 - 8001416: f241 3288 movw r2, #5000 ; 0x1388 - 800141a: 4293 cmp r3, r2 - 800141c: d901 bls.n 8001422 + 80013a0: f7ff fa44 bl 800082c + 80013a4: 4602 mov r2, r0 + 80013a6: 68fb ldr r3, [r7, #12] + 80013a8: 1ad3 subs r3, r2, r3 + 80013aa: f241 3288 movw r2, #5000 ; 0x1388 + 80013ae: 4293 cmp r3, r2 + 80013b0: d901 bls.n 80013b6 { return HAL_TIMEOUT; - 800141e: 2303 movs r3, #3 - 8001420: e053 b.n 80014ca + 80013b2: 2303 movs r3, #3 + 80013b4: e053 b.n 800145e while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) - 8001422: 4b2d ldr r3, [pc, #180] ; (80014d8 ) - 8001424: 685b ldr r3, [r3, #4] - 8001426: f003 020c and.w r2, r3, #12 - 800142a: 687b ldr r3, [r7, #4] - 800142c: 685b ldr r3, [r3, #4] - 800142e: 009b lsls r3, r3, #2 - 8001430: 429a cmp r2, r3 - 8001432: d1eb bne.n 800140c + 80013b6: 4b2d ldr r3, [pc, #180] ; (800146c ) + 80013b8: 685b ldr r3, [r3, #4] + 80013ba: f003 020c and.w r2, r3, #12 + 80013be: 687b ldr r3, [r7, #4] + 80013c0: 685b ldr r3, [r3, #4] + 80013c2: 009b lsls r3, r3, #2 + 80013c4: 429a cmp r2, r3 + 80013c6: d1eb bne.n 80013a0 } } #if defined(FLASH_ACR_LATENCY) /* Decreasing the number of wait states because of lower CPU frequency */ if (FLatency < __HAL_FLASH_GET_LATENCY()) - 8001434: 4b27 ldr r3, [pc, #156] ; (80014d4 ) - 8001436: 681b ldr r3, [r3, #0] - 8001438: f003 0307 and.w r3, r3, #7 - 800143c: 683a ldr r2, [r7, #0] - 800143e: 429a cmp r2, r3 - 8001440: d210 bcs.n 8001464 + 80013c8: 4b27 ldr r3, [pc, #156] ; (8001468 ) + 80013ca: 681b ldr r3, [r3, #0] + 80013cc: f003 0307 and.w r3, r3, #7 + 80013d0: 683a ldr r2, [r7, #0] + 80013d2: 429a cmp r2, r3 + 80013d4: d210 bcs.n 80013f8 { /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */ __HAL_FLASH_SET_LATENCY(FLatency); - 8001442: 4b24 ldr r3, [pc, #144] ; (80014d4 ) - 8001444: 681b ldr r3, [r3, #0] - 8001446: f023 0207 bic.w r2, r3, #7 - 800144a: 4922 ldr r1, [pc, #136] ; (80014d4 ) - 800144c: 683b ldr r3, [r7, #0] - 800144e: 4313 orrs r3, r2 - 8001450: 600b str r3, [r1, #0] + 80013d6: 4b24 ldr r3, [pc, #144] ; (8001468 ) + 80013d8: 681b ldr r3, [r3, #0] + 80013da: f023 0207 bic.w r2, r3, #7 + 80013de: 4922 ldr r1, [pc, #136] ; (8001468 ) + 80013e0: 683b ldr r3, [r7, #0] + 80013e2: 4313 orrs r3, r2 + 80013e4: 600b str r3, [r1, #0] /* 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) - 8001452: 4b20 ldr r3, [pc, #128] ; (80014d4 ) - 8001454: 681b ldr r3, [r3, #0] - 8001456: f003 0307 and.w r3, r3, #7 - 800145a: 683a ldr r2, [r7, #0] - 800145c: 429a cmp r2, r3 - 800145e: d001 beq.n 8001464 + 80013e6: 4b20 ldr r3, [pc, #128] ; (8001468 ) + 80013e8: 681b ldr r3, [r3, #0] + 80013ea: f003 0307 and.w r3, r3, #7 + 80013ee: 683a ldr r2, [r7, #0] + 80013f0: 429a cmp r2, r3 + 80013f2: d001 beq.n 80013f8 { return HAL_ERROR; - 8001460: 2301 movs r3, #1 - 8001462: e032 b.n 80014ca + 80013f4: 2301 movs r3, #1 + 80013f6: e032 b.n 800145e } } #endif /* FLASH_ACR_LATENCY */ /*-------------------------- PCLK1 Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) - 8001464: 687b ldr r3, [r7, #4] - 8001466: 681b ldr r3, [r3, #0] - 8001468: f003 0304 and.w r3, r3, #4 - 800146c: 2b00 cmp r3, #0 - 800146e: d008 beq.n 8001482 + 80013f8: 687b ldr r3, [r7, #4] + 80013fa: 681b ldr r3, [r3, #0] + 80013fc: f003 0304 and.w r3, r3, #4 + 8001400: 2b00 cmp r3, #0 + 8001402: d008 beq.n 8001416 { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider); - 8001470: 4b19 ldr r3, [pc, #100] ; (80014d8 ) - 8001472: 685b ldr r3, [r3, #4] - 8001474: f423 62e0 bic.w r2, r3, #1792 ; 0x700 - 8001478: 687b ldr r3, [r7, #4] - 800147a: 68db ldr r3, [r3, #12] - 800147c: 4916 ldr r1, [pc, #88] ; (80014d8 ) - 800147e: 4313 orrs r3, r2 - 8001480: 604b str r3, [r1, #4] + 8001404: 4b19 ldr r3, [pc, #100] ; (800146c ) + 8001406: 685b ldr r3, [r3, #4] + 8001408: f423 62e0 bic.w r2, r3, #1792 ; 0x700 + 800140c: 687b ldr r3, [r7, #4] + 800140e: 68db ldr r3, [r3, #12] + 8001410: 4916 ldr r1, [pc, #88] ; (800146c ) + 8001412: 4313 orrs r3, r2 + 8001414: 604b str r3, [r1, #4] } /*-------------------------- PCLK2 Configuration ---------------------------*/ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) - 8001482: 687b ldr r3, [r7, #4] - 8001484: 681b ldr r3, [r3, #0] - 8001486: f003 0308 and.w r3, r3, #8 - 800148a: 2b00 cmp r3, #0 - 800148c: d009 beq.n 80014a2 + 8001416: 687b ldr r3, [r7, #4] + 8001418: 681b ldr r3, [r3, #0] + 800141a: f003 0308 and.w r3, r3, #8 + 800141e: 2b00 cmp r3, #0 + 8001420: d009 beq.n 8001436 { assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider)); MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3)); - 800148e: 4b12 ldr r3, [pc, #72] ; (80014d8 ) - 8001490: 685b ldr r3, [r3, #4] - 8001492: f423 5260 bic.w r2, r3, #14336 ; 0x3800 - 8001496: 687b ldr r3, [r7, #4] - 8001498: 691b ldr r3, [r3, #16] - 800149a: 00db lsls r3, r3, #3 - 800149c: 490e ldr r1, [pc, #56] ; (80014d8 ) - 800149e: 4313 orrs r3, r2 - 80014a0: 604b str r3, [r1, #4] + 8001422: 4b12 ldr r3, [pc, #72] ; (800146c ) + 8001424: 685b ldr r3, [r3, #4] + 8001426: f423 5260 bic.w r2, r3, #14336 ; 0x3800 + 800142a: 687b ldr r3, [r7, #4] + 800142c: 691b ldr r3, [r3, #16] + 800142e: 00db lsls r3, r3, #3 + 8001430: 490e ldr r1, [pc, #56] ; (800146c ) + 8001432: 4313 orrs r3, r2 + 8001434: 604b str r3, [r1, #4] } /* Update the SystemCoreClock global variable */ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos]; - 80014a2: f000 f821 bl 80014e8 - 80014a6: 4602 mov r2, r0 - 80014a8: 4b0b ldr r3, [pc, #44] ; (80014d8 ) - 80014aa: 685b ldr r3, [r3, #4] - 80014ac: 091b lsrs r3, r3, #4 - 80014ae: f003 030f and.w r3, r3, #15 - 80014b2: 490a ldr r1, [pc, #40] ; (80014dc ) - 80014b4: 5ccb ldrb r3, [r1, r3] - 80014b6: fa22 f303 lsr.w r3, r2, r3 - 80014ba: 4a09 ldr r2, [pc, #36] ; (80014e0 ) - 80014bc: 6013 str r3, [r2, #0] + 8001436: f000 f821 bl 800147c + 800143a: 4602 mov r2, r0 + 800143c: 4b0b ldr r3, [pc, #44] ; (800146c ) + 800143e: 685b ldr r3, [r3, #4] + 8001440: 091b lsrs r3, r3, #4 + 8001442: f003 030f and.w r3, r3, #15 + 8001446: 490a ldr r1, [pc, #40] ; (8001470 ) + 8001448: 5ccb ldrb r3, [r1, r3] + 800144a: fa22 f303 lsr.w r3, r2, r3 + 800144e: 4a09 ldr r2, [pc, #36] ; (8001474 ) + 8001450: 6013 str r3, [r2, #0] /* Configure the source of time base considering new system clocks settings*/ HAL_InitTick(uwTickPrio); - 80014be: 4b09 ldr r3, [pc, #36] ; (80014e4 ) - 80014c0: 681b ldr r3, [r3, #0] - 80014c2: 4618 mov r0, r3 - 80014c4: f7ff f9a6 bl 8000814 + 8001452: 4b09 ldr r3, [pc, #36] ; (8001478 ) + 8001454: 681b ldr r3, [r3, #0] + 8001456: 4618 mov r0, r3 + 8001458: f7ff f9a6 bl 80007a8 return HAL_OK; - 80014c8: 2300 movs r3, #0 + 800145c: 2300 movs r3, #0 } - 80014ca: 4618 mov r0, r3 - 80014cc: 3710 adds r7, #16 - 80014ce: 46bd mov sp, r7 - 80014d0: bd80 pop {r7, pc} - 80014d2: bf00 nop - 80014d4: 40022000 .word 0x40022000 - 80014d8: 40021000 .word 0x40021000 - 80014dc: 080068bc .word 0x080068bc - 80014e0: 20000000 .word 0x20000000 - 80014e4: 20000004 .word 0x20000004 + 800145e: 4618 mov r0, r3 + 8001460: 3710 adds r7, #16 + 8001462: 46bd mov sp, r7 + 8001464: bd80 pop {r7, pc} + 8001466: bf00 nop + 8001468: 40022000 .word 0x40022000 + 800146c: 40021000 .word 0x40021000 + 8001470: 08005fb8 .word 0x08005fb8 + 8001474: 20000000 .word 0x20000000 + 8001478: 20000004 .word 0x20000004 -080014e8 : +0800147c : * right SYSCLK value. Otherwise, any configuration based on this function will be incorrect. * * @retval SYSCLK frequency */ uint32_t HAL_RCC_GetSysClockFreq(void) { - 80014e8: b490 push {r4, r7} - 80014ea: b08a sub sp, #40 ; 0x28 - 80014ec: af00 add r7, sp, #0 + 800147c: b490 push {r4, r7} + 800147e: b08a sub sp, #40 ; 0x28 + 8001480: af00 add r7, sp, #0 #if defined(RCC_CFGR2_PREDIV1SRC) const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13}; const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; #else const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16}; - 80014ee: 4b2a ldr r3, [pc, #168] ; (8001598 ) - 80014f0: 1d3c adds r4, r7, #4 - 80014f2: cb0f ldmia r3, {r0, r1, r2, r3} - 80014f4: e884 000f stmia.w r4, {r0, r1, r2, r3} + 8001482: 4b2a ldr r3, [pc, #168] ; (800152c ) + 8001484: 1d3c adds r4, r7, #4 + 8001486: cb0f ldmia r3, {r0, r1, r2, r3} + 8001488: e884 000f stmia.w r4, {r0, r1, r2, r3} #if defined(RCC_CFGR2_PREDIV1) const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; #else const uint8_t aPredivFactorTable[2] = {1, 2}; - 80014f8: f240 2301 movw r3, #513 ; 0x201 - 80014fc: 803b strh r3, [r7, #0] + 800148c: f240 2301 movw r3, #513 ; 0x201 + 8001490: 803b strh r3, [r7, #0] #endif /*RCC_CFGR2_PREDIV1*/ #endif uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U; - 80014fe: 2300 movs r3, #0 - 8001500: 61fb str r3, [r7, #28] - 8001502: 2300 movs r3, #0 - 8001504: 61bb str r3, [r7, #24] - 8001506: 2300 movs r3, #0 - 8001508: 627b str r3, [r7, #36] ; 0x24 - 800150a: 2300 movs r3, #0 - 800150c: 617b str r3, [r7, #20] + 8001492: 2300 movs r3, #0 + 8001494: 61fb str r3, [r7, #28] + 8001496: 2300 movs r3, #0 + 8001498: 61bb str r3, [r7, #24] + 800149a: 2300 movs r3, #0 + 800149c: 627b str r3, [r7, #36] ; 0x24 + 800149e: 2300 movs r3, #0 + 80014a0: 617b str r3, [r7, #20] uint32_t sysclockfreq = 0U; - 800150e: 2300 movs r3, #0 - 8001510: 623b str r3, [r7, #32] + 80014a2: 2300 movs r3, #0 + 80014a4: 623b str r3, [r7, #32] #if defined(RCC_CFGR2_PREDIV1SRC) uint32_t prediv2 = 0U, pll2mul = 0U; #endif /*RCC_CFGR2_PREDIV1SRC*/ tmpreg = RCC->CFGR; - 8001512: 4b22 ldr r3, [pc, #136] ; (800159c ) - 8001514: 685b ldr r3, [r3, #4] - 8001516: 61fb str r3, [r7, #28] + 80014a6: 4b22 ldr r3, [pc, #136] ; (8001530 ) + 80014a8: 685b ldr r3, [r3, #4] + 80014aa: 61fb str r3, [r7, #28] /* Get SYSCLK source -------------------------------------------------------*/ switch (tmpreg & RCC_CFGR_SWS) - 8001518: 69fb ldr r3, [r7, #28] - 800151a: f003 030c and.w r3, r3, #12 - 800151e: 2b04 cmp r3, #4 - 8001520: d002 beq.n 8001528 - 8001522: 2b08 cmp r3, #8 - 8001524: d003 beq.n 800152e - 8001526: e02d b.n 8001584 + 80014ac: 69fb ldr r3, [r7, #28] + 80014ae: f003 030c and.w r3, r3, #12 + 80014b2: 2b04 cmp r3, #4 + 80014b4: d002 beq.n 80014bc + 80014b6: 2b08 cmp r3, #8 + 80014b8: d003 beq.n 80014c2 + 80014ba: e02d b.n 8001518 { case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */ { sysclockfreq = HSE_VALUE; - 8001528: 4b1d ldr r3, [pc, #116] ; (80015a0 ) - 800152a: 623b str r3, [r7, #32] + 80014bc: 4b1d ldr r3, [pc, #116] ; (8001534 ) + 80014be: 623b str r3, [r7, #32] break; - 800152c: e02d b.n 800158a + 80014c0: e02d b.n 800151e } case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */ { pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos]; - 800152e: 69fb ldr r3, [r7, #28] - 8001530: 0c9b lsrs r3, r3, #18 - 8001532: f003 030f and.w r3, r3, #15 - 8001536: f107 0228 add.w r2, r7, #40 ; 0x28 - 800153a: 4413 add r3, r2 - 800153c: f813 3c24 ldrb.w r3, [r3, #-36] - 8001540: 617b str r3, [r7, #20] + 80014c2: 69fb ldr r3, [r7, #28] + 80014c4: 0c9b lsrs r3, r3, #18 + 80014c6: f003 030f and.w r3, r3, #15 + 80014ca: f107 0228 add.w r2, r7, #40 ; 0x28 + 80014ce: 4413 add r3, r2 + 80014d0: f813 3c24 ldrb.w r3, [r3, #-36] + 80014d4: 617b str r3, [r7, #20] if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) - 8001542: 69fb ldr r3, [r7, #28] - 8001544: f403 3380 and.w r3, r3, #65536 ; 0x10000 - 8001548: 2b00 cmp r3, #0 - 800154a: d013 beq.n 8001574 + 80014d6: 69fb ldr r3, [r7, #28] + 80014d8: f403 3380 and.w r3, r3, #65536 ; 0x10000 + 80014dc: 2b00 cmp r3, #0 + 80014de: d013 beq.n 8001508 { #if defined(RCC_CFGR2_PREDIV1) prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos]; #else prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos]; - 800154c: 4b13 ldr r3, [pc, #76] ; (800159c ) - 800154e: 685b ldr r3, [r3, #4] - 8001550: 0c5b lsrs r3, r3, #17 - 8001552: f003 0301 and.w r3, r3, #1 - 8001556: f107 0228 add.w r2, r7, #40 ; 0x28 - 800155a: 4413 add r3, r2 - 800155c: f813 3c28 ldrb.w r3, [r3, #-40] - 8001560: 61bb str r3, [r7, #24] + 80014e0: 4b13 ldr r3, [pc, #76] ; (8001530 ) + 80014e2: 685b ldr r3, [r3, #4] + 80014e4: 0c5b lsrs r3, r3, #17 + 80014e6: f003 0301 and.w r3, r3, #1 + 80014ea: f107 0228 add.w r2, r7, #40 ; 0x28 + 80014ee: 4413 add r3, r2 + 80014f0: f813 3c28 ldrb.w r3, [r3, #-40] + 80014f4: 61bb str r3, [r7, #24] { pllclk = pllclk / 2; } #else /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */ pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv); - 8001562: 697b ldr r3, [r7, #20] - 8001564: 4a0e ldr r2, [pc, #56] ; (80015a0 ) - 8001566: fb02 f203 mul.w r2, r2, r3 - 800156a: 69bb ldr r3, [r7, #24] - 800156c: fbb2 f3f3 udiv r3, r2, r3 - 8001570: 627b str r3, [r7, #36] ; 0x24 - 8001572: e004 b.n 800157e + 80014f6: 697b ldr r3, [r7, #20] + 80014f8: 4a0e ldr r2, [pc, #56] ; (8001534 ) + 80014fa: fb02 f203 mul.w r2, r2, r3 + 80014fe: 69bb ldr r3, [r7, #24] + 8001500: fbb2 f3f3 udiv r3, r2, r3 + 8001504: 627b str r3, [r7, #36] ; 0x24 + 8001506: e004 b.n 8001512 #endif /*RCC_CFGR2_PREDIV1SRC*/ } else { /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */ pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul); - 8001574: 697b ldr r3, [r7, #20] - 8001576: 4a0b ldr r2, [pc, #44] ; (80015a4 ) - 8001578: fb02 f303 mul.w r3, r2, r3 - 800157c: 627b str r3, [r7, #36] ; 0x24 + 8001508: 697b ldr r3, [r7, #20] + 800150a: 4a0b ldr r2, [pc, #44] ; (8001538 ) + 800150c: fb02 f303 mul.w r3, r2, r3 + 8001510: 627b str r3, [r7, #36] ; 0x24 } sysclockfreq = pllclk; - 800157e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001580: 623b str r3, [r7, #32] + 8001512: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001514: 623b str r3, [r7, #32] break; - 8001582: e002 b.n 800158a + 8001516: e002 b.n 800151e } case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */ default: /* HSI used as system clock */ { sysclockfreq = HSI_VALUE; - 8001584: 4b06 ldr r3, [pc, #24] ; (80015a0 ) - 8001586: 623b str r3, [r7, #32] + 8001518: 4b06 ldr r3, [pc, #24] ; (8001534 ) + 800151a: 623b str r3, [r7, #32] break; - 8001588: bf00 nop + 800151c: bf00 nop } } return sysclockfreq; - 800158a: 6a3b ldr r3, [r7, #32] + 800151e: 6a3b ldr r3, [r7, #32] } - 800158c: 4618 mov r0, r3 - 800158e: 3728 adds r7, #40 ; 0x28 - 8001590: 46bd mov sp, r7 - 8001592: bc90 pop {r4, r7} - 8001594: 4770 bx lr - 8001596: bf00 nop - 8001598: 08006848 .word 0x08006848 - 800159c: 40021000 .word 0x40021000 - 80015a0: 007a1200 .word 0x007a1200 - 80015a4: 003d0900 .word 0x003d0900 + 8001520: 4618 mov r0, r3 + 8001522: 3728 adds r7, #40 ; 0x28 + 8001524: 46bd mov sp, r7 + 8001526: bc90 pop {r4, r7} + 8001528: 4770 bx lr + 800152a: bf00 nop + 800152c: 08005f4c .word 0x08005f4c + 8001530: 40021000 .word 0x40021000 + 8001534: 007a1200 .word 0x007a1200 + 8001538: 003d0900 .word 0x003d0900 -080015a8 : +0800153c : * @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) { - 80015a8: b480 push {r7} - 80015aa: b085 sub sp, #20 - 80015ac: af00 add r7, sp, #0 - 80015ae: 6078 str r0, [r7, #4] + 800153c: b480 push {r7} + 800153e: b085 sub sp, #20 + 8001540: af00 add r7, sp, #0 + 8001542: 6078 str r0, [r7, #4] __IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U); - 80015b0: 4b0a ldr r3, [pc, #40] ; (80015dc ) - 80015b2: 681b ldr r3, [r3, #0] - 80015b4: 4a0a ldr r2, [pc, #40] ; (80015e0 ) - 80015b6: fba2 2303 umull r2, r3, r2, r3 - 80015ba: 0a5b lsrs r3, r3, #9 - 80015bc: 687a ldr r2, [r7, #4] - 80015be: fb02 f303 mul.w r3, r2, r3 - 80015c2: 60fb str r3, [r7, #12] + 8001544: 4b0a ldr r3, [pc, #40] ; (8001570 ) + 8001546: 681b ldr r3, [r3, #0] + 8001548: 4a0a ldr r2, [pc, #40] ; (8001574 ) + 800154a: fba2 2303 umull r2, r3, r2, r3 + 800154e: 0a5b lsrs r3, r3, #9 + 8001550: 687a ldr r2, [r7, #4] + 8001552: fb02 f303 mul.w r3, r2, r3 + 8001556: 60fb str r3, [r7, #12] do { __NOP(); - 80015c4: bf00 nop + 8001558: bf00 nop } while (Delay --); - 80015c6: 68fb ldr r3, [r7, #12] - 80015c8: 1e5a subs r2, r3, #1 - 80015ca: 60fa str r2, [r7, #12] - 80015cc: 2b00 cmp r3, #0 - 80015ce: d1f9 bne.n 80015c4 + 800155a: 68fb ldr r3, [r7, #12] + 800155c: 1e5a subs r2, r3, #1 + 800155e: 60fa str r2, [r7, #12] + 8001560: 2b00 cmp r3, #0 + 8001562: d1f9 bne.n 8001558 } - 80015d0: bf00 nop - 80015d2: bf00 nop - 80015d4: 3714 adds r7, #20 - 80015d6: 46bd mov sp, r7 - 80015d8: bc80 pop {r7} - 80015da: 4770 bx lr - 80015dc: 20000000 .word 0x20000000 - 80015e0: 10624dd3 .word 0x10624dd3 + 8001564: bf00 nop + 8001566: bf00 nop + 8001568: 3714 adds r7, #20 + 800156a: 46bd mov sp, r7 + 800156c: bc80 pop {r7} + 800156e: 4770 bx lr + 8001570: 20000000 .word 0x20000000 + 8001574: 10624dd3 .word 0x10624dd3 -080015e4 : +08001578 : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi) { - 80015e4: b580 push {r7, lr} - 80015e6: b082 sub sp, #8 - 80015e8: af00 add r7, sp, #0 - 80015ea: 6078 str r0, [r7, #4] + 8001578: b580 push {r7, lr} + 800157a: b082 sub sp, #8 + 800157c: af00 add r7, sp, #0 + 800157e: 6078 str r0, [r7, #4] /* Check the SPI handle allocation */ if (hspi == NULL) - 80015ec: 687b ldr r3, [r7, #4] - 80015ee: 2b00 cmp r3, #0 - 80015f0: d101 bne.n 80015f6 + 8001580: 687b ldr r3, [r7, #4] + 8001582: 2b00 cmp r3, #0 + 8001584: d101 bne.n 800158a { return HAL_ERROR; - 80015f2: 2301 movs r3, #1 - 80015f4: e076 b.n 80016e4 + 8001586: 2301 movs r3, #1 + 8001588: e076 b.n 8001678 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); assert_param(IS_SPI_FIRST_BIT(hspi->Init.FirstBit)); /* TI mode is not supported on this device. TIMode parameter is mandatory equal to SPI_TIMODE_DISABLE */ assert_param(IS_SPI_TIMODE(hspi->Init.TIMode)); if (hspi->Init.TIMode == SPI_TIMODE_DISABLE) - 80015f6: 687b ldr r3, [r7, #4] - 80015f8: 6a5b ldr r3, [r3, #36] ; 0x24 - 80015fa: 2b00 cmp r3, #0 - 80015fc: d108 bne.n 8001610 + 800158a: 687b ldr r3, [r7, #4] + 800158c: 6a5b ldr r3, [r3, #36] ; 0x24 + 800158e: 2b00 cmp r3, #0 + 8001590: d108 bne.n 80015a4 { assert_param(IS_SPI_CPOL(hspi->Init.CLKPolarity)); assert_param(IS_SPI_CPHA(hspi->Init.CLKPhase)); if (hspi->Init.Mode == SPI_MODE_MASTER) - 80015fe: 687b ldr r3, [r7, #4] - 8001600: 685b ldr r3, [r3, #4] - 8001602: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001606: d009 beq.n 800161c + 8001592: 687b ldr r3, [r7, #4] + 8001594: 685b ldr r3, [r3, #4] + 8001596: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 800159a: d009 beq.n 80015b0 assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); } else { /* Baudrate prescaler not use in Motoraola Slave mode. force to default value */ hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2; - 8001608: 687b ldr r3, [r7, #4] - 800160a: 2200 movs r2, #0 - 800160c: 61da str r2, [r3, #28] - 800160e: e005 b.n 800161c + 800159c: 687b ldr r3, [r7, #4] + 800159e: 2200 movs r2, #0 + 80015a0: 61da str r2, [r3, #28] + 80015a2: e005 b.n 80015b0 else { assert_param(IS_SPI_BAUDRATE_PRESCALER(hspi->Init.BaudRatePrescaler)); /* Force polarity and phase to TI protocaol requirements */ hspi->Init.CLKPolarity = SPI_POLARITY_LOW; - 8001610: 687b ldr r3, [r7, #4] - 8001612: 2200 movs r2, #0 - 8001614: 611a str r2, [r3, #16] + 80015a4: 687b ldr r3, [r7, #4] + 80015a6: 2200 movs r2, #0 + 80015a8: 611a str r2, [r3, #16] hspi->Init.CLKPhase = SPI_PHASE_1EDGE; - 8001616: 687b ldr r3, [r7, #4] - 8001618: 2200 movs r2, #0 - 800161a: 615a str r2, [r3, #20] + 80015aa: 687b ldr r3, [r7, #4] + 80015ac: 2200 movs r2, #0 + 80015ae: 615a str r2, [r3, #20] if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) { assert_param(IS_SPI_CRC_POLYNOMIAL(hspi->Init.CRCPolynomial)); } #else hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - 800161c: 687b ldr r3, [r7, #4] - 800161e: 2200 movs r2, #0 - 8001620: 629a str r2, [r3, #40] ; 0x28 + 80015b0: 687b ldr r3, [r7, #4] + 80015b2: 2200 movs r2, #0 + 80015b4: 629a str r2, [r3, #40] ; 0x28 #endif /* USE_SPI_CRC */ if (hspi->State == HAL_SPI_STATE_RESET) - 8001622: 687b ldr r3, [r7, #4] - 8001624: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001628: b2db uxtb r3, r3 - 800162a: 2b00 cmp r3, #0 - 800162c: d106 bne.n 800163c + 80015b6: 687b ldr r3, [r7, #4] + 80015b8: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 80015bc: b2db uxtb r3, r3 + 80015be: 2b00 cmp r3, #0 + 80015c0: d106 bne.n 80015d0 { /* Allocate lock resource and initialize it */ hspi->Lock = HAL_UNLOCKED; - 800162e: 687b ldr r3, [r7, #4] - 8001630: 2200 movs r2, #0 - 8001632: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 80015c2: 687b ldr r3, [r7, #4] + 80015c4: 2200 movs r2, #0 + 80015c6: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init the low level hardware : GPIO, CLOCK, NVIC... */ hspi->MspInitCallback(hspi); #else /* Init the low level hardware : GPIO, CLOCK, NVIC... */ HAL_SPI_MspInit(hspi); - 8001636: 6878 ldr r0, [r7, #4] - 8001638: f7fe ffa2 bl 8000580 + 80015ca: 6878 ldr r0, [r7, #4] + 80015cc: f7fe ffd8 bl 8000580 #endif /* USE_HAL_SPI_REGISTER_CALLBACKS */ } hspi->State = HAL_SPI_STATE_BUSY; - 800163c: 687b ldr r3, [r7, #4] - 800163e: 2202 movs r2, #2 - 8001640: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 80015d0: 687b ldr r3, [r7, #4] + 80015d2: 2202 movs r2, #2 + 80015d4: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Disable the selected SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 8001644: 687b ldr r3, [r7, #4] - 8001646: 681b ldr r3, [r3, #0] - 8001648: 681a ldr r2, [r3, #0] - 800164a: 687b ldr r3, [r7, #4] - 800164c: 681b ldr r3, [r3, #0] - 800164e: f022 0240 bic.w r2, r2, #64 ; 0x40 - 8001652: 601a str r2, [r3, #0] + 80015d8: 687b ldr r3, [r7, #4] + 80015da: 681b ldr r3, [r3, #0] + 80015dc: 681a ldr r2, [r3, #0] + 80015de: 687b ldr r3, [r7, #4] + 80015e0: 681b ldr r3, [r3, #0] + 80015e2: f022 0240 bic.w r2, r2, #64 ; 0x40 + 80015e6: 601a str r2, [r3, #0] /*----------------------- SPIx CR1 & CR2 Configuration ---------------------*/ /* Configure : SPI Mode, Communication Mode, Data size, Clock polarity and phase, NSS management, Communication speed, First bit and CRC calculation state */ WRITE_REG(hspi->Instance->CR1, ((hspi->Init.Mode & (SPI_CR1_MSTR | SPI_CR1_SSI)) | - 8001654: 687b ldr r3, [r7, #4] - 8001656: 685b ldr r3, [r3, #4] - 8001658: f403 7282 and.w r2, r3, #260 ; 0x104 - 800165c: 687b ldr r3, [r7, #4] - 800165e: 689b ldr r3, [r3, #8] - 8001660: f403 4304 and.w r3, r3, #33792 ; 0x8400 - 8001664: 431a orrs r2, r3 - 8001666: 687b ldr r3, [r7, #4] - 8001668: 68db ldr r3, [r3, #12] - 800166a: f403 6300 and.w r3, r3, #2048 ; 0x800 - 800166e: 431a orrs r2, r3 - 8001670: 687b ldr r3, [r7, #4] - 8001672: 691b ldr r3, [r3, #16] - 8001674: f003 0302 and.w r3, r3, #2 - 8001678: 431a orrs r2, r3 - 800167a: 687b ldr r3, [r7, #4] - 800167c: 695b ldr r3, [r3, #20] - 800167e: f003 0301 and.w r3, r3, #1 - 8001682: 431a orrs r2, r3 - 8001684: 687b ldr r3, [r7, #4] - 8001686: 699b ldr r3, [r3, #24] - 8001688: f403 7300 and.w r3, r3, #512 ; 0x200 - 800168c: 431a orrs r2, r3 - 800168e: 687b ldr r3, [r7, #4] - 8001690: 69db ldr r3, [r3, #28] - 8001692: f003 0338 and.w r3, r3, #56 ; 0x38 - 8001696: 431a orrs r2, r3 - 8001698: 687b ldr r3, [r7, #4] - 800169a: 6a1b ldr r3, [r3, #32] - 800169c: f003 0380 and.w r3, r3, #128 ; 0x80 - 80016a0: ea42 0103 orr.w r1, r2, r3 - 80016a4: 687b ldr r3, [r7, #4] - 80016a6: 6a9b ldr r3, [r3, #40] ; 0x28 - 80016a8: f403 5200 and.w r2, r3, #8192 ; 0x2000 - 80016ac: 687b ldr r3, [r7, #4] - 80016ae: 681b ldr r3, [r3, #0] - 80016b0: 430a orrs r2, r1 - 80016b2: 601a str r2, [r3, #0] + 80015e8: 687b ldr r3, [r7, #4] + 80015ea: 685b ldr r3, [r3, #4] + 80015ec: f403 7282 and.w r2, r3, #260 ; 0x104 + 80015f0: 687b ldr r3, [r7, #4] + 80015f2: 689b ldr r3, [r3, #8] + 80015f4: f403 4304 and.w r3, r3, #33792 ; 0x8400 + 80015f8: 431a orrs r2, r3 + 80015fa: 687b ldr r3, [r7, #4] + 80015fc: 68db ldr r3, [r3, #12] + 80015fe: f403 6300 and.w r3, r3, #2048 ; 0x800 + 8001602: 431a orrs r2, r3 + 8001604: 687b ldr r3, [r7, #4] + 8001606: 691b ldr r3, [r3, #16] + 8001608: f003 0302 and.w r3, r3, #2 + 800160c: 431a orrs r2, r3 + 800160e: 687b ldr r3, [r7, #4] + 8001610: 695b ldr r3, [r3, #20] + 8001612: f003 0301 and.w r3, r3, #1 + 8001616: 431a orrs r2, r3 + 8001618: 687b ldr r3, [r7, #4] + 800161a: 699b ldr r3, [r3, #24] + 800161c: f403 7300 and.w r3, r3, #512 ; 0x200 + 8001620: 431a orrs r2, r3 + 8001622: 687b ldr r3, [r7, #4] + 8001624: 69db ldr r3, [r3, #28] + 8001626: f003 0338 and.w r3, r3, #56 ; 0x38 + 800162a: 431a orrs r2, r3 + 800162c: 687b ldr r3, [r7, #4] + 800162e: 6a1b ldr r3, [r3, #32] + 8001630: f003 0380 and.w r3, r3, #128 ; 0x80 + 8001634: ea42 0103 orr.w r1, r2, r3 + 8001638: 687b ldr r3, [r7, #4] + 800163a: 6a9b ldr r3, [r3, #40] ; 0x28 + 800163c: f403 5200 and.w r2, r3, #8192 ; 0x2000 + 8001640: 687b ldr r3, [r7, #4] + 8001642: 681b ldr r3, [r3, #0] + 8001644: 430a orrs r2, r1 + 8001646: 601a str r2, [r3, #0] (hspi->Init.BaudRatePrescaler & SPI_CR1_BR_Msk) | (hspi->Init.FirstBit & SPI_CR1_LSBFIRST) | (hspi->Init.CRCCalculation & SPI_CR1_CRCEN))); /* Configure : NSS management */ WRITE_REG(hspi->Instance->CR2, ((hspi->Init.NSS >> 16U) & SPI_CR2_SSOE)); - 80016b4: 687b ldr r3, [r7, #4] - 80016b6: 699b ldr r3, [r3, #24] - 80016b8: 0c1a lsrs r2, r3, #16 - 80016ba: 687b ldr r3, [r7, #4] - 80016bc: 681b ldr r3, [r3, #0] - 80016be: f002 0204 and.w r2, r2, #4 - 80016c2: 605a str r2, [r3, #4] + 8001648: 687b ldr r3, [r7, #4] + 800164a: 699b ldr r3, [r3, #24] + 800164c: 0c1a lsrs r2, r3, #16 + 800164e: 687b ldr r3, [r7, #4] + 8001650: 681b ldr r3, [r3, #0] + 8001652: f002 0204 and.w r2, r2, #4 + 8001656: 605a str r2, [r3, #4] } #endif /* USE_SPI_CRC */ #if defined(SPI_I2SCFGR_I2SMOD) /* Activate the SPI mode (Make sure that I2SMOD bit in I2SCFGR register is reset) */ CLEAR_BIT(hspi->Instance->I2SCFGR, SPI_I2SCFGR_I2SMOD); - 80016c4: 687b ldr r3, [r7, #4] - 80016c6: 681b ldr r3, [r3, #0] - 80016c8: 69da ldr r2, [r3, #28] - 80016ca: 687b ldr r3, [r7, #4] - 80016cc: 681b ldr r3, [r3, #0] - 80016ce: f422 6200 bic.w r2, r2, #2048 ; 0x800 - 80016d2: 61da str r2, [r3, #28] + 8001658: 687b ldr r3, [r7, #4] + 800165a: 681b ldr r3, [r3, #0] + 800165c: 69da ldr r2, [r3, #28] + 800165e: 687b ldr r3, [r7, #4] + 8001660: 681b ldr r3, [r3, #0] + 8001662: f422 6200 bic.w r2, r2, #2048 ; 0x800 + 8001666: 61da str r2, [r3, #28] #endif /* SPI_I2SCFGR_I2SMOD */ hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 80016d4: 687b ldr r3, [r7, #4] - 80016d6: 2200 movs r2, #0 - 80016d8: 655a str r2, [r3, #84] ; 0x54 + 8001668: 687b ldr r3, [r7, #4] + 800166a: 2200 movs r2, #0 + 800166c: 655a str r2, [r3, #84] ; 0x54 hspi->State = HAL_SPI_STATE_READY; - 80016da: 687b ldr r3, [r7, #4] - 80016dc: 2201 movs r2, #1 - 80016de: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 800166e: 687b ldr r3, [r7, #4] + 8001670: 2201 movs r2, #1 + 8001672: f883 2051 strb.w r2, [r3, #81] ; 0x51 return HAL_OK; - 80016e2: 2300 movs r3, #0 + 8001676: 2300 movs r3, #0 } - 80016e4: 4618 mov r0, r3 - 80016e6: 3708 adds r7, #8 - 80016e8: 46bd mov sp, r7 - 80016ea: bd80 pop {r7, pc} + 8001678: 4618 mov r0, r3 + 800167a: 3708 adds r7, #8 + 800167c: 46bd mov sp, r7 + 800167e: bd80 pop {r7, pc} -080016ec : +08001680 : * @param Size amount of data to be sent * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) { - 80016ec: b580 push {r7, lr} - 80016ee: b088 sub sp, #32 - 80016f0: af00 add r7, sp, #0 - 80016f2: 60f8 str r0, [r7, #12] - 80016f4: 60b9 str r1, [r7, #8] - 80016f6: 603b str r3, [r7, #0] - 80016f8: 4613 mov r3, r2 - 80016fa: 80fb strh r3, [r7, #6] + 8001680: b580 push {r7, lr} + 8001682: b088 sub sp, #32 + 8001684: af00 add r7, sp, #0 + 8001686: 60f8 str r0, [r7, #12] + 8001688: 60b9 str r1, [r7, #8] + 800168a: 603b str r3, [r7, #0] + 800168c: 4613 mov r3, r2 + 800168e: 80fb strh r3, [r7, #6] uint32_t tickstart; HAL_StatusTypeDef errorcode = HAL_OK; - 80016fc: 2300 movs r3, #0 - 80016fe: 77fb strb r3, [r7, #31] + 8001690: 2300 movs r3, #0 + 8001692: 77fb strb r3, [r7, #31] /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES_OR_1LINE(hspi->Init.Direction)); /* Process Locked */ __HAL_LOCK(hspi); - 8001700: 68fb ldr r3, [r7, #12] - 8001702: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 8001706: 2b01 cmp r3, #1 - 8001708: d101 bne.n 800170e - 800170a: 2302 movs r3, #2 - 800170c: e126 b.n 800195c - 800170e: 68fb ldr r3, [r7, #12] - 8001710: 2201 movs r2, #1 - 8001712: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001694: 68fb ldr r3, [r7, #12] + 8001696: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 800169a: 2b01 cmp r3, #1 + 800169c: d101 bne.n 80016a2 + 800169e: 2302 movs r3, #2 + 80016a0: e126 b.n 80018f0 + 80016a2: 68fb ldr r3, [r7, #12] + 80016a4: 2201 movs r2, #1 + 80016a6: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 8001716: f7ff f8bf bl 8000898 - 800171a: 61b8 str r0, [r7, #24] + 80016aa: f7ff f8bf bl 800082c + 80016ae: 61b8 str r0, [r7, #24] initial_TxXferCount = Size; - 800171c: 88fb ldrh r3, [r7, #6] - 800171e: 82fb strh r3, [r7, #22] + 80016b0: 88fb ldrh r3, [r7, #6] + 80016b2: 82fb strh r3, [r7, #22] if (hspi->State != HAL_SPI_STATE_READY) - 8001720: 68fb ldr r3, [r7, #12] - 8001722: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001726: b2db uxtb r3, r3 - 8001728: 2b01 cmp r3, #1 - 800172a: d002 beq.n 8001732 + 80016b4: 68fb ldr r3, [r7, #12] + 80016b6: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 80016ba: b2db uxtb r3, r3 + 80016bc: 2b01 cmp r3, #1 + 80016be: d002 beq.n 80016c6 { errorcode = HAL_BUSY; - 800172c: 2302 movs r3, #2 - 800172e: 77fb strb r3, [r7, #31] + 80016c0: 2302 movs r3, #2 + 80016c2: 77fb strb r3, [r7, #31] goto error; - 8001730: e10b b.n 800194a + 80016c4: e10b b.n 80018de } if ((pData == NULL) || (Size == 0U)) - 8001732: 68bb ldr r3, [r7, #8] - 8001734: 2b00 cmp r3, #0 - 8001736: d002 beq.n 800173e - 8001738: 88fb ldrh r3, [r7, #6] - 800173a: 2b00 cmp r3, #0 - 800173c: d102 bne.n 8001744 + 80016c6: 68bb ldr r3, [r7, #8] + 80016c8: 2b00 cmp r3, #0 + 80016ca: d002 beq.n 80016d2 + 80016cc: 88fb ldrh r3, [r7, #6] + 80016ce: 2b00 cmp r3, #0 + 80016d0: d102 bne.n 80016d8 { errorcode = HAL_ERROR; - 800173e: 2301 movs r3, #1 - 8001740: 77fb strb r3, [r7, #31] + 80016d2: 2301 movs r3, #1 + 80016d4: 77fb strb r3, [r7, #31] goto error; - 8001742: e102 b.n 800194a + 80016d6: e102 b.n 80018de } /* Set the transaction information */ hspi->State = HAL_SPI_STATE_BUSY_TX; - 8001744: 68fb ldr r3, [r7, #12] - 8001746: 2203 movs r2, #3 - 8001748: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 80016d8: 68fb ldr r3, [r7, #12] + 80016da: 2203 movs r2, #3 + 80016dc: f883 2051 strb.w r2, [r3, #81] ; 0x51 hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 800174c: 68fb ldr r3, [r7, #12] - 800174e: 2200 movs r2, #0 - 8001750: 655a str r2, [r3, #84] ; 0x54 + 80016e0: 68fb ldr r3, [r7, #12] + 80016e2: 2200 movs r2, #0 + 80016e4: 655a str r2, [r3, #84] ; 0x54 hspi->pTxBuffPtr = (uint8_t *)pData; - 8001752: 68fb ldr r3, [r7, #12] - 8001754: 68ba ldr r2, [r7, #8] - 8001756: 631a str r2, [r3, #48] ; 0x30 + 80016e6: 68fb ldr r3, [r7, #12] + 80016e8: 68ba ldr r2, [r7, #8] + 80016ea: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferSize = Size; - 8001758: 68fb ldr r3, [r7, #12] - 800175a: 88fa ldrh r2, [r7, #6] - 800175c: 869a strh r2, [r3, #52] ; 0x34 + 80016ec: 68fb ldr r3, [r7, #12] + 80016ee: 88fa ldrh r2, [r7, #6] + 80016f0: 869a strh r2, [r3, #52] ; 0x34 hspi->TxXferCount = Size; - 800175e: 68fb ldr r3, [r7, #12] - 8001760: 88fa ldrh r2, [r7, #6] - 8001762: 86da strh r2, [r3, #54] ; 0x36 + 80016f2: 68fb ldr r3, [r7, #12] + 80016f4: 88fa ldrh r2, [r7, #6] + 80016f6: 86da strh r2, [r3, #54] ; 0x36 /*Init field not used in handle to zero */ hspi->pRxBuffPtr = (uint8_t *)NULL; - 8001764: 68fb ldr r3, [r7, #12] - 8001766: 2200 movs r2, #0 - 8001768: 639a str r2, [r3, #56] ; 0x38 + 80016f8: 68fb ldr r3, [r7, #12] + 80016fa: 2200 movs r2, #0 + 80016fc: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferSize = 0U; - 800176a: 68fb ldr r3, [r7, #12] - 800176c: 2200 movs r2, #0 - 800176e: 879a strh r2, [r3, #60] ; 0x3c + 80016fe: 68fb ldr r3, [r7, #12] + 8001700: 2200 movs r2, #0 + 8001702: 879a strh r2, [r3, #60] ; 0x3c hspi->RxXferCount = 0U; - 8001770: 68fb ldr r3, [r7, #12] - 8001772: 2200 movs r2, #0 - 8001774: 87da strh r2, [r3, #62] ; 0x3e + 8001704: 68fb ldr r3, [r7, #12] + 8001706: 2200 movs r2, #0 + 8001708: 87da strh r2, [r3, #62] ; 0x3e hspi->TxISR = NULL; - 8001776: 68fb ldr r3, [r7, #12] - 8001778: 2200 movs r2, #0 - 800177a: 645a str r2, [r3, #68] ; 0x44 + 800170a: 68fb ldr r3, [r7, #12] + 800170c: 2200 movs r2, #0 + 800170e: 645a str r2, [r3, #68] ; 0x44 hspi->RxISR = NULL; - 800177c: 68fb ldr r3, [r7, #12] - 800177e: 2200 movs r2, #0 - 8001780: 641a str r2, [r3, #64] ; 0x40 + 8001710: 68fb ldr r3, [r7, #12] + 8001712: 2200 movs r2, #0 + 8001714: 641a str r2, [r3, #64] ; 0x40 /* Configure communication direction : 1Line */ if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001782: 68fb ldr r3, [r7, #12] - 8001784: 689b ldr r3, [r3, #8] - 8001786: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 800178a: d10f bne.n 80017ac + 8001716: 68fb ldr r3, [r7, #12] + 8001718: 689b ldr r3, [r3, #8] + 800171a: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 800171e: d10f bne.n 8001740 { /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ __HAL_SPI_DISABLE(hspi); - 800178c: 68fb ldr r3, [r7, #12] - 800178e: 681b ldr r3, [r3, #0] - 8001790: 681a ldr r2, [r3, #0] - 8001792: 68fb ldr r3, [r7, #12] - 8001794: 681b ldr r3, [r3, #0] - 8001796: f022 0240 bic.w r2, r2, #64 ; 0x40 - 800179a: 601a str r2, [r3, #0] + 8001720: 68fb ldr r3, [r7, #12] + 8001722: 681b ldr r3, [r3, #0] + 8001724: 681a ldr r2, [r3, #0] + 8001726: 68fb ldr r3, [r7, #12] + 8001728: 681b ldr r3, [r3, #0] + 800172a: f022 0240 bic.w r2, r2, #64 ; 0x40 + 800172e: 601a str r2, [r3, #0] SPI_1LINE_TX(hspi); - 800179c: 68fb ldr r3, [r7, #12] - 800179e: 681b ldr r3, [r3, #0] - 80017a0: 681a ldr r2, [r3, #0] - 80017a2: 68fb ldr r3, [r7, #12] - 80017a4: 681b ldr r3, [r3, #0] - 80017a6: f442 4280 orr.w r2, r2, #16384 ; 0x4000 - 80017aa: 601a str r2, [r3, #0] + 8001730: 68fb ldr r3, [r7, #12] + 8001732: 681b ldr r3, [r3, #0] + 8001734: 681a ldr r2, [r3, #0] + 8001736: 68fb ldr r3, [r7, #12] + 8001738: 681b ldr r3, [r3, #0] + 800173a: f442 4280 orr.w r2, r2, #16384 ; 0x4000 + 800173e: 601a str r2, [r3, #0] SPI_RESET_CRC(hspi); } #endif /* USE_SPI_CRC */ /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 80017ac: 68fb ldr r3, [r7, #12] - 80017ae: 681b ldr r3, [r3, #0] - 80017b0: 681b ldr r3, [r3, #0] - 80017b2: f003 0340 and.w r3, r3, #64 ; 0x40 - 80017b6: 2b40 cmp r3, #64 ; 0x40 - 80017b8: d007 beq.n 80017ca + 8001740: 68fb ldr r3, [r7, #12] + 8001742: 681b ldr r3, [r3, #0] + 8001744: 681b ldr r3, [r3, #0] + 8001746: f003 0340 and.w r3, r3, #64 ; 0x40 + 800174a: 2b40 cmp r3, #64 ; 0x40 + 800174c: d007 beq.n 800175e { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 80017ba: 68fb ldr r3, [r7, #12] - 80017bc: 681b ldr r3, [r3, #0] - 80017be: 681a ldr r2, [r3, #0] - 80017c0: 68fb ldr r3, [r7, #12] - 80017c2: 681b ldr r3, [r3, #0] - 80017c4: f042 0240 orr.w r2, r2, #64 ; 0x40 - 80017c8: 601a str r2, [r3, #0] + 800174e: 68fb ldr r3, [r7, #12] + 8001750: 681b ldr r3, [r3, #0] + 8001752: 681a ldr r2, [r3, #0] + 8001754: 68fb ldr r3, [r7, #12] + 8001756: 681b ldr r3, [r3, #0] + 8001758: f042 0240 orr.w r2, r2, #64 ; 0x40 + 800175c: 601a str r2, [r3, #0] } /* Transmit data in 16 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - 80017ca: 68fb ldr r3, [r7, #12] - 80017cc: 68db ldr r3, [r3, #12] - 80017ce: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - 80017d2: d14b bne.n 800186c + 800175e: 68fb ldr r3, [r7, #12] + 8001760: 68db ldr r3, [r3, #12] + 8001762: f5b3 6f00 cmp.w r3, #2048 ; 0x800 + 8001766: d14b bne.n 8001800 { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 80017d4: 68fb ldr r3, [r7, #12] - 80017d6: 685b ldr r3, [r3, #4] - 80017d8: 2b00 cmp r3, #0 - 80017da: d002 beq.n 80017e2 - 80017dc: 8afb ldrh r3, [r7, #22] - 80017de: 2b01 cmp r3, #1 - 80017e0: d13e bne.n 8001860 + 8001768: 68fb ldr r3, [r7, #12] + 800176a: 685b ldr r3, [r3, #4] + 800176c: 2b00 cmp r3, #0 + 800176e: d002 beq.n 8001776 + 8001770: 8afb ldrh r3, [r7, #22] + 8001772: 2b01 cmp r3, #1 + 8001774: d13e bne.n 80017f4 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 80017e2: 68fb ldr r3, [r7, #12] - 80017e4: 6b1b ldr r3, [r3, #48] ; 0x30 - 80017e6: 881a ldrh r2, [r3, #0] - 80017e8: 68fb ldr r3, [r7, #12] - 80017ea: 681b ldr r3, [r3, #0] - 80017ec: 60da str r2, [r3, #12] + 8001776: 68fb ldr r3, [r7, #12] + 8001778: 6b1b ldr r3, [r3, #48] ; 0x30 + 800177a: 881a ldrh r2, [r3, #0] + 800177c: 68fb ldr r3, [r7, #12] + 800177e: 681b ldr r3, [r3, #0] + 8001780: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 80017ee: 68fb ldr r3, [r7, #12] - 80017f0: 6b1b ldr r3, [r3, #48] ; 0x30 - 80017f2: 1c9a adds r2, r3, #2 - 80017f4: 68fb ldr r3, [r7, #12] - 80017f6: 631a str r2, [r3, #48] ; 0x30 + 8001782: 68fb ldr r3, [r7, #12] + 8001784: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001786: 1c9a adds r2, r3, #2 + 8001788: 68fb ldr r3, [r7, #12] + 800178a: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 80017f8: 68fb ldr r3, [r7, #12] - 80017fa: 8edb ldrh r3, [r3, #54] ; 0x36 - 80017fc: b29b uxth r3, r3 - 80017fe: 3b01 subs r3, #1 - 8001800: b29a uxth r2, r3 - 8001802: 68fb ldr r3, [r7, #12] - 8001804: 86da strh r2, [r3, #54] ; 0x36 + 800178c: 68fb ldr r3, [r7, #12] + 800178e: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001790: b29b uxth r3, r3 + 8001792: 3b01 subs r3, #1 + 8001794: b29a uxth r2, r3 + 8001796: 68fb ldr r3, [r7, #12] + 8001798: 86da strh r2, [r3, #54] ; 0x36 } /* Transmit data in 16 Bit mode */ while (hspi->TxXferCount > 0U) - 8001806: e02b b.n 8001860 + 800179a: e02b b.n 80017f4 { /* Wait until TXE flag is set to send data */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - 8001808: 68fb ldr r3, [r7, #12] - 800180a: 681b ldr r3, [r3, #0] - 800180c: 689b ldr r3, [r3, #8] - 800180e: f003 0302 and.w r3, r3, #2 - 8001812: 2b02 cmp r3, #2 - 8001814: d112 bne.n 800183c + 800179c: 68fb ldr r3, [r7, #12] + 800179e: 681b ldr r3, [r3, #0] + 80017a0: 689b ldr r3, [r3, #8] + 80017a2: f003 0302 and.w r3, r3, #2 + 80017a6: 2b02 cmp r3, #2 + 80017a8: d112 bne.n 80017d0 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001816: 68fb ldr r3, [r7, #12] - 8001818: 6b1b ldr r3, [r3, #48] ; 0x30 - 800181a: 881a ldrh r2, [r3, #0] - 800181c: 68fb ldr r3, [r7, #12] - 800181e: 681b ldr r3, [r3, #0] - 8001820: 60da str r2, [r3, #12] + 80017aa: 68fb ldr r3, [r7, #12] + 80017ac: 6b1b ldr r3, [r3, #48] ; 0x30 + 80017ae: 881a ldrh r2, [r3, #0] + 80017b0: 68fb ldr r3, [r7, #12] + 80017b2: 681b ldr r3, [r3, #0] + 80017b4: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001822: 68fb ldr r3, [r7, #12] - 8001824: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001826: 1c9a adds r2, r3, #2 - 8001828: 68fb ldr r3, [r7, #12] - 800182a: 631a str r2, [r3, #48] ; 0x30 + 80017b6: 68fb ldr r3, [r7, #12] + 80017b8: 6b1b ldr r3, [r3, #48] ; 0x30 + 80017ba: 1c9a adds r2, r3, #2 + 80017bc: 68fb ldr r3, [r7, #12] + 80017be: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 800182c: 68fb ldr r3, [r7, #12] - 800182e: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001830: b29b uxth r3, r3 - 8001832: 3b01 subs r3, #1 - 8001834: b29a uxth r2, r3 - 8001836: 68fb ldr r3, [r7, #12] - 8001838: 86da strh r2, [r3, #54] ; 0x36 - 800183a: e011 b.n 8001860 + 80017c0: 68fb ldr r3, [r7, #12] + 80017c2: 8edb ldrh r3, [r3, #54] ; 0x36 + 80017c4: b29b uxth r3, r3 + 80017c6: 3b01 subs r3, #1 + 80017c8: b29a uxth r2, r3 + 80017ca: 68fb ldr r3, [r7, #12] + 80017cc: 86da strh r2, [r3, #54] ; 0x36 + 80017ce: e011 b.n 80017f4 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 800183c: f7ff f82c bl 8000898 - 8001840: 4602 mov r2, r0 - 8001842: 69bb ldr r3, [r7, #24] - 8001844: 1ad3 subs r3, r2, r3 - 8001846: 683a ldr r2, [r7, #0] - 8001848: 429a cmp r2, r3 - 800184a: d803 bhi.n 8001854 - 800184c: 683b ldr r3, [r7, #0] - 800184e: f1b3 3fff cmp.w r3, #4294967295 - 8001852: d102 bne.n 800185a - 8001854: 683b ldr r3, [r7, #0] - 8001856: 2b00 cmp r3, #0 - 8001858: d102 bne.n 8001860 + 80017d0: f7ff f82c bl 800082c + 80017d4: 4602 mov r2, r0 + 80017d6: 69bb ldr r3, [r7, #24] + 80017d8: 1ad3 subs r3, r2, r3 + 80017da: 683a ldr r2, [r7, #0] + 80017dc: 429a cmp r2, r3 + 80017de: d803 bhi.n 80017e8 + 80017e0: 683b ldr r3, [r7, #0] + 80017e2: f1b3 3fff cmp.w r3, #4294967295 + 80017e6: d102 bne.n 80017ee + 80017e8: 683b ldr r3, [r7, #0] + 80017ea: 2b00 cmp r3, #0 + 80017ec: d102 bne.n 80017f4 { errorcode = HAL_TIMEOUT; - 800185a: 2303 movs r3, #3 - 800185c: 77fb strb r3, [r7, #31] + 80017ee: 2303 movs r3, #3 + 80017f0: 77fb strb r3, [r7, #31] goto error; - 800185e: e074 b.n 800194a + 80017f2: e074 b.n 80018de while (hspi->TxXferCount > 0U) - 8001860: 68fb ldr r3, [r7, #12] - 8001862: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001864: b29b uxth r3, r3 - 8001866: 2b00 cmp r3, #0 - 8001868: d1ce bne.n 8001808 - 800186a: e04c b.n 8001906 + 80017f4: 68fb ldr r3, [r7, #12] + 80017f6: 8edb ldrh r3, [r3, #54] ; 0x36 + 80017f8: b29b uxth r3, r3 + 80017fa: 2b00 cmp r3, #0 + 80017fc: d1ce bne.n 800179c + 80017fe: e04c b.n 800189a } } /* Transmit data in 8 Bit mode */ else { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 800186c: 68fb ldr r3, [r7, #12] - 800186e: 685b ldr r3, [r3, #4] - 8001870: 2b00 cmp r3, #0 - 8001872: d002 beq.n 800187a - 8001874: 8afb ldrh r3, [r7, #22] - 8001876: 2b01 cmp r3, #1 - 8001878: d140 bne.n 80018fc + 8001800: 68fb ldr r3, [r7, #12] + 8001802: 685b ldr r3, [r3, #4] + 8001804: 2b00 cmp r3, #0 + 8001806: d002 beq.n 800180e + 8001808: 8afb ldrh r3, [r7, #22] + 800180a: 2b01 cmp r3, #1 + 800180c: d140 bne.n 8001890 { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 800187a: 68fb ldr r3, [r7, #12] - 800187c: 6b1a ldr r2, [r3, #48] ; 0x30 - 800187e: 68fb ldr r3, [r7, #12] - 8001880: 681b ldr r3, [r3, #0] - 8001882: 330c adds r3, #12 - 8001884: 7812 ldrb r2, [r2, #0] - 8001886: 701a strb r2, [r3, #0] + 800180e: 68fb ldr r3, [r7, #12] + 8001810: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001812: 68fb ldr r3, [r7, #12] + 8001814: 681b ldr r3, [r3, #0] + 8001816: 330c adds r3, #12 + 8001818: 7812 ldrb r2, [r2, #0] + 800181a: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 8001888: 68fb ldr r3, [r7, #12] - 800188a: 6b1b ldr r3, [r3, #48] ; 0x30 - 800188c: 1c5a adds r2, r3, #1 - 800188e: 68fb ldr r3, [r7, #12] - 8001890: 631a str r2, [r3, #48] ; 0x30 + 800181c: 68fb ldr r3, [r7, #12] + 800181e: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001820: 1c5a adds r2, r3, #1 + 8001822: 68fb ldr r3, [r7, #12] + 8001824: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001892: 68fb ldr r3, [r7, #12] - 8001894: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001896: b29b uxth r3, r3 - 8001898: 3b01 subs r3, #1 - 800189a: b29a uxth r2, r3 - 800189c: 68fb ldr r3, [r7, #12] - 800189e: 86da strh r2, [r3, #54] ; 0x36 + 8001826: 68fb ldr r3, [r7, #12] + 8001828: 8edb ldrh r3, [r3, #54] ; 0x36 + 800182a: b29b uxth r3, r3 + 800182c: 3b01 subs r3, #1 + 800182e: b29a uxth r2, r3 + 8001830: 68fb ldr r3, [r7, #12] + 8001832: 86da strh r2, [r3, #54] ; 0x36 } while (hspi->TxXferCount > 0U) - 80018a0: e02c b.n 80018fc + 8001834: e02c b.n 8001890 { /* Wait until TXE flag is set to send data */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) - 80018a2: 68fb ldr r3, [r7, #12] - 80018a4: 681b ldr r3, [r3, #0] - 80018a6: 689b ldr r3, [r3, #8] - 80018a8: f003 0302 and.w r3, r3, #2 - 80018ac: 2b02 cmp r3, #2 - 80018ae: d113 bne.n 80018d8 + 8001836: 68fb ldr r3, [r7, #12] + 8001838: 681b ldr r3, [r3, #0] + 800183a: 689b ldr r3, [r3, #8] + 800183c: f003 0302 and.w r3, r3, #2 + 8001840: 2b02 cmp r3, #2 + 8001842: d113 bne.n 800186c { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 80018b0: 68fb ldr r3, [r7, #12] - 80018b2: 6b1a ldr r2, [r3, #48] ; 0x30 - 80018b4: 68fb ldr r3, [r7, #12] - 80018b6: 681b ldr r3, [r3, #0] - 80018b8: 330c adds r3, #12 - 80018ba: 7812 ldrb r2, [r2, #0] - 80018bc: 701a strb r2, [r3, #0] + 8001844: 68fb ldr r3, [r7, #12] + 8001846: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001848: 68fb ldr r3, [r7, #12] + 800184a: 681b ldr r3, [r3, #0] + 800184c: 330c adds r3, #12 + 800184e: 7812 ldrb r2, [r2, #0] + 8001850: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 80018be: 68fb ldr r3, [r7, #12] - 80018c0: 6b1b ldr r3, [r3, #48] ; 0x30 - 80018c2: 1c5a adds r2, r3, #1 - 80018c4: 68fb ldr r3, [r7, #12] - 80018c6: 631a str r2, [r3, #48] ; 0x30 + 8001852: 68fb ldr r3, [r7, #12] + 8001854: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001856: 1c5a adds r2, r3, #1 + 8001858: 68fb ldr r3, [r7, #12] + 800185a: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 80018c8: 68fb ldr r3, [r7, #12] - 80018ca: 8edb ldrh r3, [r3, #54] ; 0x36 - 80018cc: b29b uxth r3, r3 - 80018ce: 3b01 subs r3, #1 - 80018d0: b29a uxth r2, r3 - 80018d2: 68fb ldr r3, [r7, #12] - 80018d4: 86da strh r2, [r3, #54] ; 0x36 - 80018d6: e011 b.n 80018fc + 800185c: 68fb ldr r3, [r7, #12] + 800185e: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001860: b29b uxth r3, r3 + 8001862: 3b01 subs r3, #1 + 8001864: b29a uxth r2, r3 + 8001866: 68fb ldr r3, [r7, #12] + 8001868: 86da strh r2, [r3, #54] ; 0x36 + 800186a: e011 b.n 8001890 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 80018d8: f7fe ffde bl 8000898 - 80018dc: 4602 mov r2, r0 - 80018de: 69bb ldr r3, [r7, #24] - 80018e0: 1ad3 subs r3, r2, r3 - 80018e2: 683a ldr r2, [r7, #0] - 80018e4: 429a cmp r2, r3 - 80018e6: d803 bhi.n 80018f0 - 80018e8: 683b ldr r3, [r7, #0] - 80018ea: f1b3 3fff cmp.w r3, #4294967295 - 80018ee: d102 bne.n 80018f6 - 80018f0: 683b ldr r3, [r7, #0] - 80018f2: 2b00 cmp r3, #0 - 80018f4: d102 bne.n 80018fc + 800186c: f7fe ffde bl 800082c + 8001870: 4602 mov r2, r0 + 8001872: 69bb ldr r3, [r7, #24] + 8001874: 1ad3 subs r3, r2, r3 + 8001876: 683a ldr r2, [r7, #0] + 8001878: 429a cmp r2, r3 + 800187a: d803 bhi.n 8001884 + 800187c: 683b ldr r3, [r7, #0] + 800187e: f1b3 3fff cmp.w r3, #4294967295 + 8001882: d102 bne.n 800188a + 8001884: 683b ldr r3, [r7, #0] + 8001886: 2b00 cmp r3, #0 + 8001888: d102 bne.n 8001890 { errorcode = HAL_TIMEOUT; - 80018f6: 2303 movs r3, #3 - 80018f8: 77fb strb r3, [r7, #31] + 800188a: 2303 movs r3, #3 + 800188c: 77fb strb r3, [r7, #31] goto error; - 80018fa: e026 b.n 800194a + 800188e: e026 b.n 80018de while (hspi->TxXferCount > 0U) - 80018fc: 68fb ldr r3, [r7, #12] - 80018fe: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001900: b29b uxth r3, r3 - 8001902: 2b00 cmp r3, #0 - 8001904: d1cd bne.n 80018a2 + 8001890: 68fb ldr r3, [r7, #12] + 8001892: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001894: b29b uxth r3, r3 + 8001896: 2b00 cmp r3, #0 + 8001898: d1cd bne.n 8001836 SET_BIT(hspi->Instance->CR1, SPI_CR1_CRCNEXT); } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 8001906: 69ba ldr r2, [r7, #24] - 8001908: 6839 ldr r1, [r7, #0] - 800190a: 68f8 ldr r0, [r7, #12] - 800190c: f000 fbc4 bl 8002098 - 8001910: 4603 mov r3, r0 - 8001912: 2b00 cmp r3, #0 - 8001914: d002 beq.n 800191c + 800189a: 69ba ldr r2, [r7, #24] + 800189c: 6839 ldr r1, [r7, #0] + 800189e: 68f8 ldr r0, [r7, #12] + 80018a0: f000 fbc4 bl 800202c + 80018a4: 4603 mov r3, r0 + 80018a6: 2b00 cmp r3, #0 + 80018a8: d002 beq.n 80018b0 { hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 8001916: 68fb ldr r3, [r7, #12] - 8001918: 2220 movs r2, #32 - 800191a: 655a str r2, [r3, #84] ; 0x54 + 80018aa: 68fb ldr r3, [r7, #12] + 80018ac: 2220 movs r2, #32 + 80018ae: 655a str r2, [r3, #84] ; 0x54 } /* Clear overrun flag in 2 Lines communication mode because received is not read */ if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - 800191c: 68fb ldr r3, [r7, #12] - 800191e: 689b ldr r3, [r3, #8] - 8001920: 2b00 cmp r3, #0 - 8001922: d10a bne.n 800193a + 80018b0: 68fb ldr r3, [r7, #12] + 80018b2: 689b ldr r3, [r3, #8] + 80018b4: 2b00 cmp r3, #0 + 80018b6: d10a bne.n 80018ce { __HAL_SPI_CLEAR_OVRFLAG(hspi); - 8001924: 2300 movs r3, #0 - 8001926: 613b str r3, [r7, #16] - 8001928: 68fb ldr r3, [r7, #12] - 800192a: 681b ldr r3, [r3, #0] - 800192c: 68db ldr r3, [r3, #12] - 800192e: 613b str r3, [r7, #16] - 8001930: 68fb ldr r3, [r7, #12] - 8001932: 681b ldr r3, [r3, #0] - 8001934: 689b ldr r3, [r3, #8] - 8001936: 613b str r3, [r7, #16] - 8001938: 693b ldr r3, [r7, #16] + 80018b8: 2300 movs r3, #0 + 80018ba: 613b str r3, [r7, #16] + 80018bc: 68fb ldr r3, [r7, #12] + 80018be: 681b ldr r3, [r3, #0] + 80018c0: 68db ldr r3, [r3, #12] + 80018c2: 613b str r3, [r7, #16] + 80018c4: 68fb ldr r3, [r7, #12] + 80018c6: 681b ldr r3, [r3, #0] + 80018c8: 689b ldr r3, [r3, #8] + 80018ca: 613b str r3, [r7, #16] + 80018cc: 693b ldr r3, [r7, #16] } if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - 800193a: 68fb ldr r3, [r7, #12] - 800193c: 6d5b ldr r3, [r3, #84] ; 0x54 - 800193e: 2b00 cmp r3, #0 - 8001940: d002 beq.n 8001948 + 80018ce: 68fb ldr r3, [r7, #12] + 80018d0: 6d5b ldr r3, [r3, #84] ; 0x54 + 80018d2: 2b00 cmp r3, #0 + 80018d4: d002 beq.n 80018dc { errorcode = HAL_ERROR; - 8001942: 2301 movs r3, #1 - 8001944: 77fb strb r3, [r7, #31] - 8001946: e000 b.n 800194a + 80018d6: 2301 movs r3, #1 + 80018d8: 77fb strb r3, [r7, #31] + 80018da: e000 b.n 80018de } error: - 8001948: bf00 nop + 80018dc: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 800194a: 68fb ldr r3, [r7, #12] - 800194c: 2201 movs r2, #1 - 800194e: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 80018de: 68fb ldr r3, [r7, #12] + 80018e0: 2201 movs r2, #1 + 80018e2: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Process Unlocked */ __HAL_UNLOCK(hspi); - 8001952: 68fb ldr r3, [r7, #12] - 8001954: 2200 movs r2, #0 - 8001956: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 80018e6: 68fb ldr r3, [r7, #12] + 80018e8: 2200 movs r2, #0 + 80018ea: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 800195a: 7ffb ldrb r3, [r7, #31] + 80018ee: 7ffb ldrb r3, [r7, #31] } - 800195c: 4618 mov r0, r3 - 800195e: 3720 adds r7, #32 - 8001960: 46bd mov sp, r7 - 8001962: bd80 pop {r7, pc} + 80018f0: 4618 mov r0, r3 + 80018f2: 3720 adds r7, #32 + 80018f4: 46bd mov sp, r7 + 80018f6: bd80 pop {r7, pc} -08001964 : +080018f8 : * @param Size amount of data to be received * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) { - 8001964: b580 push {r7, lr} - 8001966: b088 sub sp, #32 - 8001968: af02 add r7, sp, #8 - 800196a: 60f8 str r0, [r7, #12] - 800196c: 60b9 str r1, [r7, #8] - 800196e: 603b str r3, [r7, #0] - 8001970: 4613 mov r3, r2 - 8001972: 80fb strh r3, [r7, #6] + 80018f8: b580 push {r7, lr} + 80018fa: b088 sub sp, #32 + 80018fc: af02 add r7, sp, #8 + 80018fe: 60f8 str r0, [r7, #12] + 8001900: 60b9 str r1, [r7, #8] + 8001902: 603b str r3, [r7, #0] + 8001904: 4613 mov r3, r2 + 8001906: 80fb strh r3, [r7, #6] uint32_t tickstart; HAL_StatusTypeDef errorcode = HAL_OK; - 8001974: 2300 movs r3, #0 - 8001976: 75fb strb r3, [r7, #23] + 8001908: 2300 movs r3, #0 + 800190a: 75fb strb r3, [r7, #23] if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES)) - 8001978: 68fb ldr r3, [r7, #12] - 800197a: 685b ldr r3, [r3, #4] - 800197c: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001980: d112 bne.n 80019a8 - 8001982: 68fb ldr r3, [r7, #12] - 8001984: 689b ldr r3, [r3, #8] - 8001986: 2b00 cmp r3, #0 - 8001988: d10e bne.n 80019a8 + 800190c: 68fb ldr r3, [r7, #12] + 800190e: 685b ldr r3, [r3, #4] + 8001910: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001914: d112 bne.n 800193c + 8001916: 68fb ldr r3, [r7, #12] + 8001918: 689b ldr r3, [r3, #8] + 800191a: 2b00 cmp r3, #0 + 800191c: d10e bne.n 800193c { hspi->State = HAL_SPI_STATE_BUSY_RX; - 800198a: 68fb ldr r3, [r7, #12] - 800198c: 2204 movs r2, #4 - 800198e: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 800191e: 68fb ldr r3, [r7, #12] + 8001920: 2204 movs r2, #4 + 8001922: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */ return HAL_SPI_TransmitReceive(hspi, pData, pData, Size, Timeout); - 8001992: 88fa ldrh r2, [r7, #6] - 8001994: 683b ldr r3, [r7, #0] - 8001996: 9300 str r3, [sp, #0] - 8001998: 4613 mov r3, r2 - 800199a: 68ba ldr r2, [r7, #8] - 800199c: 68b9 ldr r1, [r7, #8] - 800199e: 68f8 ldr r0, [r7, #12] - 80019a0: f000 f8f1 bl 8001b86 - 80019a4: 4603 mov r3, r0 - 80019a6: e0ea b.n 8001b7e + 8001926: 88fa ldrh r2, [r7, #6] + 8001928: 683b ldr r3, [r7, #0] + 800192a: 9300 str r3, [sp, #0] + 800192c: 4613 mov r3, r2 + 800192e: 68ba ldr r2, [r7, #8] + 8001930: 68b9 ldr r1, [r7, #8] + 8001932: 68f8 ldr r0, [r7, #12] + 8001934: f000 f8f1 bl 8001b1a + 8001938: 4603 mov r3, r0 + 800193a: e0ea b.n 8001b12 } /* Process Locked */ __HAL_LOCK(hspi); - 80019a8: 68fb ldr r3, [r7, #12] - 80019aa: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 80019ae: 2b01 cmp r3, #1 - 80019b0: d101 bne.n 80019b6 - 80019b2: 2302 movs r3, #2 - 80019b4: e0e3 b.n 8001b7e - 80019b6: 68fb ldr r3, [r7, #12] - 80019b8: 2201 movs r2, #1 - 80019ba: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 800193c: 68fb ldr r3, [r7, #12] + 800193e: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 8001942: 2b01 cmp r3, #1 + 8001944: d101 bne.n 800194a + 8001946: 2302 movs r3, #2 + 8001948: e0e3 b.n 8001b12 + 800194a: 68fb ldr r3, [r7, #12] + 800194c: 2201 movs r2, #1 + 800194e: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 80019be: f7fe ff6b bl 8000898 - 80019c2: 6138 str r0, [r7, #16] + 8001952: f7fe ff6b bl 800082c + 8001956: 6138 str r0, [r7, #16] if (hspi->State != HAL_SPI_STATE_READY) - 80019c4: 68fb ldr r3, [r7, #12] - 80019c6: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 80019ca: b2db uxtb r3, r3 - 80019cc: 2b01 cmp r3, #1 - 80019ce: d002 beq.n 80019d6 + 8001958: 68fb ldr r3, [r7, #12] + 800195a: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 800195e: b2db uxtb r3, r3 + 8001960: 2b01 cmp r3, #1 + 8001962: d002 beq.n 800196a { errorcode = HAL_BUSY; - 80019d0: 2302 movs r3, #2 - 80019d2: 75fb strb r3, [r7, #23] + 8001964: 2302 movs r3, #2 + 8001966: 75fb strb r3, [r7, #23] goto error; - 80019d4: e0ca b.n 8001b6c + 8001968: e0ca b.n 8001b00 } if ((pData == NULL) || (Size == 0U)) - 80019d6: 68bb ldr r3, [r7, #8] - 80019d8: 2b00 cmp r3, #0 - 80019da: d002 beq.n 80019e2 - 80019dc: 88fb ldrh r3, [r7, #6] - 80019de: 2b00 cmp r3, #0 - 80019e0: d102 bne.n 80019e8 + 800196a: 68bb ldr r3, [r7, #8] + 800196c: 2b00 cmp r3, #0 + 800196e: d002 beq.n 8001976 + 8001970: 88fb ldrh r3, [r7, #6] + 8001972: 2b00 cmp r3, #0 + 8001974: d102 bne.n 800197c { errorcode = HAL_ERROR; - 80019e2: 2301 movs r3, #1 - 80019e4: 75fb strb r3, [r7, #23] + 8001976: 2301 movs r3, #1 + 8001978: 75fb strb r3, [r7, #23] goto error; - 80019e6: e0c1 b.n 8001b6c + 800197a: e0c1 b.n 8001b00 } /* Set the transaction information */ hspi->State = HAL_SPI_STATE_BUSY_RX; - 80019e8: 68fb ldr r3, [r7, #12] - 80019ea: 2204 movs r2, #4 - 80019ec: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 800197c: 68fb ldr r3, [r7, #12] + 800197e: 2204 movs r2, #4 + 8001980: f883 2051 strb.w r2, [r3, #81] ; 0x51 hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 80019f0: 68fb ldr r3, [r7, #12] - 80019f2: 2200 movs r2, #0 - 80019f4: 655a str r2, [r3, #84] ; 0x54 + 8001984: 68fb ldr r3, [r7, #12] + 8001986: 2200 movs r2, #0 + 8001988: 655a str r2, [r3, #84] ; 0x54 hspi->pRxBuffPtr = (uint8_t *)pData; - 80019f6: 68fb ldr r3, [r7, #12] - 80019f8: 68ba ldr r2, [r7, #8] - 80019fa: 639a str r2, [r3, #56] ; 0x38 + 800198a: 68fb ldr r3, [r7, #12] + 800198c: 68ba ldr r2, [r7, #8] + 800198e: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferSize = Size; - 80019fc: 68fb ldr r3, [r7, #12] - 80019fe: 88fa ldrh r2, [r7, #6] - 8001a00: 879a strh r2, [r3, #60] ; 0x3c + 8001990: 68fb ldr r3, [r7, #12] + 8001992: 88fa ldrh r2, [r7, #6] + 8001994: 879a strh r2, [r3, #60] ; 0x3c hspi->RxXferCount = Size; - 8001a02: 68fb ldr r3, [r7, #12] - 8001a04: 88fa ldrh r2, [r7, #6] - 8001a06: 87da strh r2, [r3, #62] ; 0x3e + 8001996: 68fb ldr r3, [r7, #12] + 8001998: 88fa ldrh r2, [r7, #6] + 800199a: 87da strh r2, [r3, #62] ; 0x3e /*Init field not used in handle to zero */ hspi->pTxBuffPtr = (uint8_t *)NULL; - 8001a08: 68fb ldr r3, [r7, #12] - 8001a0a: 2200 movs r2, #0 - 8001a0c: 631a str r2, [r3, #48] ; 0x30 + 800199c: 68fb ldr r3, [r7, #12] + 800199e: 2200 movs r2, #0 + 80019a0: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferSize = 0U; - 8001a0e: 68fb ldr r3, [r7, #12] - 8001a10: 2200 movs r2, #0 - 8001a12: 869a strh r2, [r3, #52] ; 0x34 + 80019a2: 68fb ldr r3, [r7, #12] + 80019a4: 2200 movs r2, #0 + 80019a6: 869a strh r2, [r3, #52] ; 0x34 hspi->TxXferCount = 0U; - 8001a14: 68fb ldr r3, [r7, #12] - 8001a16: 2200 movs r2, #0 - 8001a18: 86da strh r2, [r3, #54] ; 0x36 + 80019a8: 68fb ldr r3, [r7, #12] + 80019aa: 2200 movs r2, #0 + 80019ac: 86da strh r2, [r3, #54] ; 0x36 hspi->RxISR = NULL; - 8001a1a: 68fb ldr r3, [r7, #12] - 8001a1c: 2200 movs r2, #0 - 8001a1e: 641a str r2, [r3, #64] ; 0x40 + 80019ae: 68fb ldr r3, [r7, #12] + 80019b0: 2200 movs r2, #0 + 80019b2: 641a str r2, [r3, #64] ; 0x40 hspi->TxISR = NULL; - 8001a20: 68fb ldr r3, [r7, #12] - 8001a22: 2200 movs r2, #0 - 8001a24: 645a str r2, [r3, #68] ; 0x44 + 80019b4: 68fb ldr r3, [r7, #12] + 80019b6: 2200 movs r2, #0 + 80019b8: 645a str r2, [r3, #68] ; 0x44 hspi->RxXferCount--; } #endif /* USE_SPI_CRC */ /* Configure communication direction: 1Line */ if (hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001a26: 68fb ldr r3, [r7, #12] - 8001a28: 689b ldr r3, [r3, #8] - 8001a2a: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8001a2e: d10f bne.n 8001a50 + 80019ba: 68fb ldr r3, [r7, #12] + 80019bc: 689b ldr r3, [r3, #8] + 80019be: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 80019c2: d10f bne.n 80019e4 { /* Disable SPI Peripheral before set 1Line direction (BIDIOE bit) */ __HAL_SPI_DISABLE(hspi); - 8001a30: 68fb ldr r3, [r7, #12] - 8001a32: 681b ldr r3, [r3, #0] - 8001a34: 681a ldr r2, [r3, #0] - 8001a36: 68fb ldr r3, [r7, #12] - 8001a38: 681b ldr r3, [r3, #0] - 8001a3a: f022 0240 bic.w r2, r2, #64 ; 0x40 - 8001a3e: 601a str r2, [r3, #0] + 80019c4: 68fb ldr r3, [r7, #12] + 80019c6: 681b ldr r3, [r3, #0] + 80019c8: 681a ldr r2, [r3, #0] + 80019ca: 68fb ldr r3, [r7, #12] + 80019cc: 681b ldr r3, [r3, #0] + 80019ce: f022 0240 bic.w r2, r2, #64 ; 0x40 + 80019d2: 601a str r2, [r3, #0] SPI_1LINE_RX(hspi); - 8001a40: 68fb ldr r3, [r7, #12] - 8001a42: 681b ldr r3, [r3, #0] - 8001a44: 681a ldr r2, [r3, #0] - 8001a46: 68fb ldr r3, [r7, #12] - 8001a48: 681b ldr r3, [r3, #0] - 8001a4a: f422 4280 bic.w r2, r2, #16384 ; 0x4000 - 8001a4e: 601a str r2, [r3, #0] + 80019d4: 68fb ldr r3, [r7, #12] + 80019d6: 681b ldr r3, [r3, #0] + 80019d8: 681a ldr r2, [r3, #0] + 80019da: 68fb ldr r3, [r7, #12] + 80019dc: 681b ldr r3, [r3, #0] + 80019de: f422 4280 bic.w r2, r2, #16384 ; 0x4000 + 80019e2: 601a str r2, [r3, #0] } /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 8001a50: 68fb ldr r3, [r7, #12] - 8001a52: 681b ldr r3, [r3, #0] - 8001a54: 681b ldr r3, [r3, #0] - 8001a56: f003 0340 and.w r3, r3, #64 ; 0x40 - 8001a5a: 2b40 cmp r3, #64 ; 0x40 - 8001a5c: d007 beq.n 8001a6e + 80019e4: 68fb ldr r3, [r7, #12] + 80019e6: 681b ldr r3, [r3, #0] + 80019e8: 681b ldr r3, [r3, #0] + 80019ea: f003 0340 and.w r3, r3, #64 ; 0x40 + 80019ee: 2b40 cmp r3, #64 ; 0x40 + 80019f0: d007 beq.n 8001a02 { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 8001a5e: 68fb ldr r3, [r7, #12] - 8001a60: 681b ldr r3, [r3, #0] - 8001a62: 681a ldr r2, [r3, #0] - 8001a64: 68fb ldr r3, [r7, #12] - 8001a66: 681b ldr r3, [r3, #0] - 8001a68: f042 0240 orr.w r2, r2, #64 ; 0x40 - 8001a6c: 601a str r2, [r3, #0] + 80019f2: 68fb ldr r3, [r7, #12] + 80019f4: 681b ldr r3, [r3, #0] + 80019f6: 681a ldr r2, [r3, #0] + 80019f8: 68fb ldr r3, [r7, #12] + 80019fa: 681b ldr r3, [r3, #0] + 80019fc: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001a00: 601a str r2, [r3, #0] } /* Receive data in 8 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_8BIT) - 8001a6e: 68fb ldr r3, [r7, #12] - 8001a70: 68db ldr r3, [r3, #12] - 8001a72: 2b00 cmp r3, #0 - 8001a74: d162 bne.n 8001b3c + 8001a02: 68fb ldr r3, [r7, #12] + 8001a04: 68db ldr r3, [r3, #12] + 8001a06: 2b00 cmp r3, #0 + 8001a08: d162 bne.n 8001ad0 { /* Transfer loop */ while (hspi->RxXferCount > 0U) - 8001a76: e02e b.n 8001ad6 + 8001a0a: e02e b.n 8001a6a { /* Check the RXNE flag */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - 8001a78: 68fb ldr r3, [r7, #12] - 8001a7a: 681b ldr r3, [r3, #0] - 8001a7c: 689b ldr r3, [r3, #8] - 8001a7e: f003 0301 and.w r3, r3, #1 - 8001a82: 2b01 cmp r3, #1 - 8001a84: d115 bne.n 8001ab2 + 8001a0c: 68fb ldr r3, [r7, #12] + 8001a0e: 681b ldr r3, [r3, #0] + 8001a10: 689b ldr r3, [r3, #8] + 8001a12: f003 0301 and.w r3, r3, #1 + 8001a16: 2b01 cmp r3, #1 + 8001a18: d115 bne.n 8001a46 { /* read the received data */ (* (uint8_t *)hspi->pRxBuffPtr) = *(__IO uint8_t *)&hspi->Instance->DR; - 8001a86: 68fb ldr r3, [r7, #12] - 8001a88: 681b ldr r3, [r3, #0] - 8001a8a: f103 020c add.w r2, r3, #12 - 8001a8e: 68fb ldr r3, [r7, #12] - 8001a90: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a92: 7812 ldrb r2, [r2, #0] - 8001a94: b2d2 uxtb r2, r2 - 8001a96: 701a strb r2, [r3, #0] + 8001a1a: 68fb ldr r3, [r7, #12] + 8001a1c: 681b ldr r3, [r3, #0] + 8001a1e: f103 020c add.w r2, r3, #12 + 8001a22: 68fb ldr r3, [r7, #12] + 8001a24: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001a26: 7812 ldrb r2, [r2, #0] + 8001a28: b2d2 uxtb r2, r2 + 8001a2a: 701a strb r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint8_t); - 8001a98: 68fb ldr r3, [r7, #12] - 8001a9a: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001a9c: 1c5a adds r2, r3, #1 - 8001a9e: 68fb ldr r3, [r7, #12] - 8001aa0: 639a str r2, [r3, #56] ; 0x38 + 8001a2c: 68fb ldr r3, [r7, #12] + 8001a2e: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001a30: 1c5a adds r2, r3, #1 + 8001a32: 68fb ldr r3, [r7, #12] + 8001a34: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001aa2: 68fb ldr r3, [r7, #12] - 8001aa4: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001aa6: b29b uxth r3, r3 - 8001aa8: 3b01 subs r3, #1 - 8001aaa: b29a uxth r2, r3 - 8001aac: 68fb ldr r3, [r7, #12] - 8001aae: 87da strh r2, [r3, #62] ; 0x3e - 8001ab0: e011 b.n 8001ad6 + 8001a36: 68fb ldr r3, [r7, #12] + 8001a38: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001a3a: b29b uxth r3, r3 + 8001a3c: 3b01 subs r3, #1 + 8001a3e: b29a uxth r2, r3 + 8001a40: 68fb ldr r3, [r7, #12] + 8001a42: 87da strh r2, [r3, #62] ; 0x3e + 8001a44: e011 b.n 8001a6a } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 8001ab2: f7fe fef1 bl 8000898 - 8001ab6: 4602 mov r2, r0 - 8001ab8: 693b ldr r3, [r7, #16] - 8001aba: 1ad3 subs r3, r2, r3 - 8001abc: 683a ldr r2, [r7, #0] - 8001abe: 429a cmp r2, r3 - 8001ac0: d803 bhi.n 8001aca - 8001ac2: 683b ldr r3, [r7, #0] - 8001ac4: f1b3 3fff cmp.w r3, #4294967295 - 8001ac8: d102 bne.n 8001ad0 - 8001aca: 683b ldr r3, [r7, #0] - 8001acc: 2b00 cmp r3, #0 - 8001ace: d102 bne.n 8001ad6 + 8001a46: f7fe fef1 bl 800082c + 8001a4a: 4602 mov r2, r0 + 8001a4c: 693b ldr r3, [r7, #16] + 8001a4e: 1ad3 subs r3, r2, r3 + 8001a50: 683a ldr r2, [r7, #0] + 8001a52: 429a cmp r2, r3 + 8001a54: d803 bhi.n 8001a5e + 8001a56: 683b ldr r3, [r7, #0] + 8001a58: f1b3 3fff cmp.w r3, #4294967295 + 8001a5c: d102 bne.n 8001a64 + 8001a5e: 683b ldr r3, [r7, #0] + 8001a60: 2b00 cmp r3, #0 + 8001a62: d102 bne.n 8001a6a { errorcode = HAL_TIMEOUT; - 8001ad0: 2303 movs r3, #3 - 8001ad2: 75fb strb r3, [r7, #23] + 8001a64: 2303 movs r3, #3 + 8001a66: 75fb strb r3, [r7, #23] goto error; - 8001ad4: e04a b.n 8001b6c + 8001a68: e04a b.n 8001b00 while (hspi->RxXferCount > 0U) - 8001ad6: 68fb ldr r3, [r7, #12] - 8001ad8: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001ada: b29b uxth r3, r3 - 8001adc: 2b00 cmp r3, #0 - 8001ade: d1cb bne.n 8001a78 - 8001ae0: e031 b.n 8001b46 + 8001a6a: 68fb ldr r3, [r7, #12] + 8001a6c: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001a6e: b29b uxth r3, r3 + 8001a70: 2b00 cmp r3, #0 + 8001a72: d1cb bne.n 8001a0c + 8001a74: e031 b.n 8001ada { /* Transfer loop */ while (hspi->RxXferCount > 0U) { /* Check the RXNE flag */ if (__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) - 8001ae2: 68fb ldr r3, [r7, #12] - 8001ae4: 681b ldr r3, [r3, #0] - 8001ae6: 689b ldr r3, [r3, #8] - 8001ae8: f003 0301 and.w r3, r3, #1 - 8001aec: 2b01 cmp r3, #1 - 8001aee: d113 bne.n 8001b18 + 8001a76: 68fb ldr r3, [r7, #12] + 8001a78: 681b ldr r3, [r3, #0] + 8001a7a: 689b ldr r3, [r3, #8] + 8001a7c: f003 0301 and.w r3, r3, #1 + 8001a80: 2b01 cmp r3, #1 + 8001a82: d113 bne.n 8001aac { *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - 8001af0: 68fb ldr r3, [r7, #12] - 8001af2: 681b ldr r3, [r3, #0] - 8001af4: 68da ldr r2, [r3, #12] - 8001af6: 68fb ldr r3, [r7, #12] - 8001af8: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001afa: b292 uxth r2, r2 - 8001afc: 801a strh r2, [r3, #0] + 8001a84: 68fb ldr r3, [r7, #12] + 8001a86: 681b ldr r3, [r3, #0] + 8001a88: 68da ldr r2, [r3, #12] + 8001a8a: 68fb ldr r3, [r7, #12] + 8001a8c: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001a8e: b292 uxth r2, r2 + 8001a90: 801a strh r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint16_t); - 8001afe: 68fb ldr r3, [r7, #12] - 8001b00: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001b02: 1c9a adds r2, r3, #2 - 8001b04: 68fb ldr r3, [r7, #12] - 8001b06: 639a str r2, [r3, #56] ; 0x38 + 8001a92: 68fb ldr r3, [r7, #12] + 8001a94: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001a96: 1c9a adds r2, r3, #2 + 8001a98: 68fb ldr r3, [r7, #12] + 8001a9a: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001b08: 68fb ldr r3, [r7, #12] - 8001b0a: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001b0c: b29b uxth r3, r3 - 8001b0e: 3b01 subs r3, #1 - 8001b10: b29a uxth r2, r3 - 8001b12: 68fb ldr r3, [r7, #12] - 8001b14: 87da strh r2, [r3, #62] ; 0x3e - 8001b16: e011 b.n 8001b3c + 8001a9c: 68fb ldr r3, [r7, #12] + 8001a9e: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001aa0: b29b uxth r3, r3 + 8001aa2: 3b01 subs r3, #1 + 8001aa4: b29a uxth r2, r3 + 8001aa6: 68fb ldr r3, [r7, #12] + 8001aa8: 87da strh r2, [r3, #62] ; 0x3e + 8001aaa: e011 b.n 8001ad0 } else { /* Timeout management */ if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U)) - 8001b18: f7fe febe bl 8000898 - 8001b1c: 4602 mov r2, r0 - 8001b1e: 693b ldr r3, [r7, #16] - 8001b20: 1ad3 subs r3, r2, r3 - 8001b22: 683a ldr r2, [r7, #0] - 8001b24: 429a cmp r2, r3 - 8001b26: d803 bhi.n 8001b30 - 8001b28: 683b ldr r3, [r7, #0] - 8001b2a: f1b3 3fff cmp.w r3, #4294967295 - 8001b2e: d102 bne.n 8001b36 - 8001b30: 683b ldr r3, [r7, #0] - 8001b32: 2b00 cmp r3, #0 - 8001b34: d102 bne.n 8001b3c + 8001aac: f7fe febe bl 800082c + 8001ab0: 4602 mov r2, r0 + 8001ab2: 693b ldr r3, [r7, #16] + 8001ab4: 1ad3 subs r3, r2, r3 + 8001ab6: 683a ldr r2, [r7, #0] + 8001ab8: 429a cmp r2, r3 + 8001aba: d803 bhi.n 8001ac4 + 8001abc: 683b ldr r3, [r7, #0] + 8001abe: f1b3 3fff cmp.w r3, #4294967295 + 8001ac2: d102 bne.n 8001aca + 8001ac4: 683b ldr r3, [r7, #0] + 8001ac6: 2b00 cmp r3, #0 + 8001ac8: d102 bne.n 8001ad0 { errorcode = HAL_TIMEOUT; - 8001b36: 2303 movs r3, #3 - 8001b38: 75fb strb r3, [r7, #23] + 8001aca: 2303 movs r3, #3 + 8001acc: 75fb strb r3, [r7, #23] goto error; - 8001b3a: e017 b.n 8001b6c + 8001ace: e017 b.n 8001b00 while (hspi->RxXferCount > 0U) - 8001b3c: 68fb ldr r3, [r7, #12] - 8001b3e: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001b40: b29b uxth r3, r3 - 8001b42: 2b00 cmp r3, #0 - 8001b44: d1cd bne.n 8001ae2 + 8001ad0: 68fb ldr r3, [r7, #12] + 8001ad2: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001ad4: b29b uxth r3, r3 + 8001ad6: 2b00 cmp r3, #0 + 8001ad8: d1cd bne.n 8001a76 READ_REG(hspi->Instance->DR); } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 8001b46: 693a ldr r2, [r7, #16] - 8001b48: 6839 ldr r1, [r7, #0] - 8001b4a: 68f8 ldr r0, [r7, #12] - 8001b4c: f000 fa52 bl 8001ff4 - 8001b50: 4603 mov r3, r0 - 8001b52: 2b00 cmp r3, #0 - 8001b54: d002 beq.n 8001b5c + 8001ada: 693a ldr r2, [r7, #16] + 8001adc: 6839 ldr r1, [r7, #0] + 8001ade: 68f8 ldr r0, [r7, #12] + 8001ae0: f000 fa52 bl 8001f88 + 8001ae4: 4603 mov r3, r0 + 8001ae6: 2b00 cmp r3, #0 + 8001ae8: d002 beq.n 8001af0 { hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 8001b56: 68fb ldr r3, [r7, #12] - 8001b58: 2220 movs r2, #32 - 8001b5a: 655a str r2, [r3, #84] ; 0x54 + 8001aea: 68fb ldr r3, [r7, #12] + 8001aec: 2220 movs r2, #32 + 8001aee: 655a str r2, [r3, #84] ; 0x54 __HAL_SPI_CLEAR_CRCERRFLAG(hspi); } } #endif /* USE_SPI_CRC */ if (hspi->ErrorCode != HAL_SPI_ERROR_NONE) - 8001b5c: 68fb ldr r3, [r7, #12] - 8001b5e: 6d5b ldr r3, [r3, #84] ; 0x54 - 8001b60: 2b00 cmp r3, #0 - 8001b62: d002 beq.n 8001b6a + 8001af0: 68fb ldr r3, [r7, #12] + 8001af2: 6d5b ldr r3, [r3, #84] ; 0x54 + 8001af4: 2b00 cmp r3, #0 + 8001af6: d002 beq.n 8001afe { errorcode = HAL_ERROR; - 8001b64: 2301 movs r3, #1 - 8001b66: 75fb strb r3, [r7, #23] - 8001b68: e000 b.n 8001b6c + 8001af8: 2301 movs r3, #1 + 8001afa: 75fb strb r3, [r7, #23] + 8001afc: e000 b.n 8001b00 } error : - 8001b6a: bf00 nop + 8001afe: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 8001b6c: 68fb ldr r3, [r7, #12] - 8001b6e: 2201 movs r2, #1 - 8001b70: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001b00: 68fb ldr r3, [r7, #12] + 8001b02: 2201 movs r2, #1 + 8001b04: f883 2051 strb.w r2, [r3, #81] ; 0x51 __HAL_UNLOCK(hspi); - 8001b74: 68fb ldr r3, [r7, #12] - 8001b76: 2200 movs r2, #0 - 8001b78: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001b08: 68fb ldr r3, [r7, #12] + 8001b0a: 2200 movs r2, #0 + 8001b0c: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 8001b7c: 7dfb ldrb r3, [r7, #23] + 8001b10: 7dfb ldrb r3, [r7, #23] } - 8001b7e: 4618 mov r0, r3 - 8001b80: 3718 adds r7, #24 - 8001b82: 46bd mov sp, r7 - 8001b84: bd80 pop {r7, pc} + 8001b12: 4618 mov r0, r3 + 8001b14: 3718 adds r7, #24 + 8001b16: 46bd mov sp, r7 + 8001b18: bd80 pop {r7, pc} -08001b86 : +08001b1a : * @param Timeout Timeout duration * @retval HAL status */ HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout) { - 8001b86: b580 push {r7, lr} - 8001b88: b08c sub sp, #48 ; 0x30 - 8001b8a: af00 add r7, sp, #0 - 8001b8c: 60f8 str r0, [r7, #12] - 8001b8e: 60b9 str r1, [r7, #8] - 8001b90: 607a str r2, [r7, #4] - 8001b92: 807b strh r3, [r7, #2] + 8001b1a: b580 push {r7, lr} + 8001b1c: b08c sub sp, #48 ; 0x30 + 8001b1e: af00 add r7, sp, #0 + 8001b20: 60f8 str r0, [r7, #12] + 8001b22: 60b9 str r1, [r7, #8] + 8001b24: 607a str r2, [r7, #4] + 8001b26: 807b strh r3, [r7, #2] uint32_t tmp_mode; HAL_SPI_StateTypeDef tmp_state; uint32_t tickstart; /* Variable used to alternate Rx and Tx during transfer */ uint32_t txallowed = 1U; - 8001b94: 2301 movs r3, #1 - 8001b96: 62fb str r3, [r7, #44] ; 0x2c + 8001b28: 2301 movs r3, #1 + 8001b2a: 62fb str r3, [r7, #44] ; 0x2c HAL_StatusTypeDef errorcode = HAL_OK; - 8001b98: 2300 movs r3, #0 - 8001b9a: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001b2c: 2300 movs r3, #0 + 8001b2e: f887 302b strb.w r3, [r7, #43] ; 0x2b /* Check Direction parameter */ assert_param(IS_SPI_DIRECTION_2LINES(hspi->Init.Direction)); /* Process Locked */ __HAL_LOCK(hspi); - 8001b9e: 68fb ldr r3, [r7, #12] - 8001ba0: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 - 8001ba4: 2b01 cmp r3, #1 - 8001ba6: d101 bne.n 8001bac - 8001ba8: 2302 movs r3, #2 - 8001baa: e18a b.n 8001ec2 - 8001bac: 68fb ldr r3, [r7, #12] - 8001bae: 2201 movs r2, #1 - 8001bb0: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001b32: 68fb ldr r3, [r7, #12] + 8001b34: f893 3050 ldrb.w r3, [r3, #80] ; 0x50 + 8001b38: 2b01 cmp r3, #1 + 8001b3a: d101 bne.n 8001b40 + 8001b3c: 2302 movs r3, #2 + 8001b3e: e18a b.n 8001e56 + 8001b40: 68fb ldr r3, [r7, #12] + 8001b42: 2201 movs r2, #1 + 8001b44: f883 2050 strb.w r2, [r3, #80] ; 0x50 /* Init tickstart for timeout management*/ tickstart = HAL_GetTick(); - 8001bb4: f7fe fe70 bl 8000898 - 8001bb8: 6278 str r0, [r7, #36] ; 0x24 + 8001b48: f7fe fe70 bl 800082c + 8001b4c: 6278 str r0, [r7, #36] ; 0x24 /* Init temporary variables */ tmp_state = hspi->State; - 8001bba: 68fb ldr r3, [r7, #12] - 8001bbc: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001bc0: f887 3023 strb.w r3, [r7, #35] ; 0x23 + 8001b4e: 68fb ldr r3, [r7, #12] + 8001b50: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001b54: f887 3023 strb.w r3, [r7, #35] ; 0x23 tmp_mode = hspi->Init.Mode; - 8001bc4: 68fb ldr r3, [r7, #12] - 8001bc6: 685b ldr r3, [r3, #4] - 8001bc8: 61fb str r3, [r7, #28] + 8001b58: 68fb ldr r3, [r7, #12] + 8001b5a: 685b ldr r3, [r3, #4] + 8001b5c: 61fb str r3, [r7, #28] initial_TxXferCount = Size; - 8001bca: 887b ldrh r3, [r7, #2] - 8001bcc: 837b strh r3, [r7, #26] + 8001b5e: 887b ldrh r3, [r7, #2] + 8001b60: 837b strh r3, [r7, #26] if (!((tmp_state == HAL_SPI_STATE_READY) || \ - 8001bce: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 8001bd2: 2b01 cmp r3, #1 - 8001bd4: d00f beq.n 8001bf6 - 8001bd6: 69fb ldr r3, [r7, #28] - 8001bd8: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001bdc: d107 bne.n 8001bee + 8001b62: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 + 8001b66: 2b01 cmp r3, #1 + 8001b68: d00f beq.n 8001b8a + 8001b6a: 69fb ldr r3, [r7, #28] + 8001b6c: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001b70: d107 bne.n 8001b82 ((tmp_mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES) && (tmp_state == HAL_SPI_STATE_BUSY_RX)))) - 8001bde: 68fb ldr r3, [r7, #12] - 8001be0: 689b ldr r3, [r3, #8] - 8001be2: 2b00 cmp r3, #0 - 8001be4: d103 bne.n 8001bee - 8001be6: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 - 8001bea: 2b04 cmp r3, #4 - 8001bec: d003 beq.n 8001bf6 + 8001b72: 68fb ldr r3, [r7, #12] + 8001b74: 689b ldr r3, [r3, #8] + 8001b76: 2b00 cmp r3, #0 + 8001b78: d103 bne.n 8001b82 + 8001b7a: f897 3023 ldrb.w r3, [r7, #35] ; 0x23 + 8001b7e: 2b04 cmp r3, #4 + 8001b80: d003 beq.n 8001b8a { errorcode = HAL_BUSY; - 8001bee: 2302 movs r3, #2 - 8001bf0: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001b82: 2302 movs r3, #2 + 8001b84: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001bf4: e15b b.n 8001eae + 8001b88: e15b b.n 8001e42 } if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U)) - 8001bf6: 68bb ldr r3, [r7, #8] - 8001bf8: 2b00 cmp r3, #0 - 8001bfa: d005 beq.n 8001c08 - 8001bfc: 687b ldr r3, [r7, #4] - 8001bfe: 2b00 cmp r3, #0 - 8001c00: d002 beq.n 8001c08 - 8001c02: 887b ldrh r3, [r7, #2] - 8001c04: 2b00 cmp r3, #0 - 8001c06: d103 bne.n 8001c10 + 8001b8a: 68bb ldr r3, [r7, #8] + 8001b8c: 2b00 cmp r3, #0 + 8001b8e: d005 beq.n 8001b9c + 8001b90: 687b ldr r3, [r7, #4] + 8001b92: 2b00 cmp r3, #0 + 8001b94: d002 beq.n 8001b9c + 8001b96: 887b ldrh r3, [r7, #2] + 8001b98: 2b00 cmp r3, #0 + 8001b9a: d103 bne.n 8001ba4 { errorcode = HAL_ERROR; - 8001c08: 2301 movs r3, #1 - 8001c0a: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001b9c: 2301 movs r3, #1 + 8001b9e: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001c0e: e14e b.n 8001eae + 8001ba2: e14e b.n 8001e42 } /* Don't overwrite in case of HAL_SPI_STATE_BUSY_RX */ if (hspi->State != HAL_SPI_STATE_BUSY_RX) - 8001c10: 68fb ldr r3, [r7, #12] - 8001c12: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001c16: b2db uxtb r3, r3 - 8001c18: 2b04 cmp r3, #4 - 8001c1a: d003 beq.n 8001c24 + 8001ba4: 68fb ldr r3, [r7, #12] + 8001ba6: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001baa: b2db uxtb r3, r3 + 8001bac: 2b04 cmp r3, #4 + 8001bae: d003 beq.n 8001bb8 { hspi->State = HAL_SPI_STATE_BUSY_TX_RX; - 8001c1c: 68fb ldr r3, [r7, #12] - 8001c1e: 2205 movs r2, #5 - 8001c20: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001bb0: 68fb ldr r3, [r7, #12] + 8001bb2: 2205 movs r2, #5 + 8001bb4: f883 2051 strb.w r2, [r3, #81] ; 0x51 } /* Set the transaction information */ hspi->ErrorCode = HAL_SPI_ERROR_NONE; - 8001c24: 68fb ldr r3, [r7, #12] - 8001c26: 2200 movs r2, #0 - 8001c28: 655a str r2, [r3, #84] ; 0x54 + 8001bb8: 68fb ldr r3, [r7, #12] + 8001bba: 2200 movs r2, #0 + 8001bbc: 655a str r2, [r3, #84] ; 0x54 hspi->pRxBuffPtr = (uint8_t *)pRxData; - 8001c2a: 68fb ldr r3, [r7, #12] - 8001c2c: 687a ldr r2, [r7, #4] - 8001c2e: 639a str r2, [r3, #56] ; 0x38 + 8001bbe: 68fb ldr r3, [r7, #12] + 8001bc0: 687a ldr r2, [r7, #4] + 8001bc2: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount = Size; - 8001c30: 68fb ldr r3, [r7, #12] - 8001c32: 887a ldrh r2, [r7, #2] - 8001c34: 87da strh r2, [r3, #62] ; 0x3e + 8001bc4: 68fb ldr r3, [r7, #12] + 8001bc6: 887a ldrh r2, [r7, #2] + 8001bc8: 87da strh r2, [r3, #62] ; 0x3e hspi->RxXferSize = Size; - 8001c36: 68fb ldr r3, [r7, #12] - 8001c38: 887a ldrh r2, [r7, #2] - 8001c3a: 879a strh r2, [r3, #60] ; 0x3c + 8001bca: 68fb ldr r3, [r7, #12] + 8001bcc: 887a ldrh r2, [r7, #2] + 8001bce: 879a strh r2, [r3, #60] ; 0x3c hspi->pTxBuffPtr = (uint8_t *)pTxData; - 8001c3c: 68fb ldr r3, [r7, #12] - 8001c3e: 68ba ldr r2, [r7, #8] - 8001c40: 631a str r2, [r3, #48] ; 0x30 + 8001bd0: 68fb ldr r3, [r7, #12] + 8001bd2: 68ba ldr r2, [r7, #8] + 8001bd4: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount = Size; - 8001c42: 68fb ldr r3, [r7, #12] - 8001c44: 887a ldrh r2, [r7, #2] - 8001c46: 86da strh r2, [r3, #54] ; 0x36 + 8001bd6: 68fb ldr r3, [r7, #12] + 8001bd8: 887a ldrh r2, [r7, #2] + 8001bda: 86da strh r2, [r3, #54] ; 0x36 hspi->TxXferSize = Size; - 8001c48: 68fb ldr r3, [r7, #12] - 8001c4a: 887a ldrh r2, [r7, #2] - 8001c4c: 869a strh r2, [r3, #52] ; 0x34 + 8001bdc: 68fb ldr r3, [r7, #12] + 8001bde: 887a ldrh r2, [r7, #2] + 8001be0: 869a strh r2, [r3, #52] ; 0x34 /*Init field not used in handle to zero */ hspi->RxISR = NULL; - 8001c4e: 68fb ldr r3, [r7, #12] - 8001c50: 2200 movs r2, #0 - 8001c52: 641a str r2, [r3, #64] ; 0x40 + 8001be2: 68fb ldr r3, [r7, #12] + 8001be4: 2200 movs r2, #0 + 8001be6: 641a str r2, [r3, #64] ; 0x40 hspi->TxISR = NULL; - 8001c54: 68fb ldr r3, [r7, #12] - 8001c56: 2200 movs r2, #0 - 8001c58: 645a str r2, [r3, #68] ; 0x44 + 8001be8: 68fb ldr r3, [r7, #12] + 8001bea: 2200 movs r2, #0 + 8001bec: 645a str r2, [r3, #68] ; 0x44 SPI_RESET_CRC(hspi); } #endif /* USE_SPI_CRC */ /* Check if the SPI is already enabled */ if ((hspi->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE) - 8001c5a: 68fb ldr r3, [r7, #12] - 8001c5c: 681b ldr r3, [r3, #0] - 8001c5e: 681b ldr r3, [r3, #0] - 8001c60: f003 0340 and.w r3, r3, #64 ; 0x40 - 8001c64: 2b40 cmp r3, #64 ; 0x40 - 8001c66: d007 beq.n 8001c78 + 8001bee: 68fb ldr r3, [r7, #12] + 8001bf0: 681b ldr r3, [r3, #0] + 8001bf2: 681b ldr r3, [r3, #0] + 8001bf4: f003 0340 and.w r3, r3, #64 ; 0x40 + 8001bf8: 2b40 cmp r3, #64 ; 0x40 + 8001bfa: d007 beq.n 8001c0c { /* Enable SPI peripheral */ __HAL_SPI_ENABLE(hspi); - 8001c68: 68fb ldr r3, [r7, #12] - 8001c6a: 681b ldr r3, [r3, #0] - 8001c6c: 681a ldr r2, [r3, #0] - 8001c6e: 68fb ldr r3, [r7, #12] - 8001c70: 681b ldr r3, [r3, #0] - 8001c72: f042 0240 orr.w r2, r2, #64 ; 0x40 - 8001c76: 601a str r2, [r3, #0] + 8001bfc: 68fb ldr r3, [r7, #12] + 8001bfe: 681b ldr r3, [r3, #0] + 8001c00: 681a ldr r2, [r3, #0] + 8001c02: 68fb ldr r3, [r7, #12] + 8001c04: 681b ldr r3, [r3, #0] + 8001c06: f042 0240 orr.w r2, r2, #64 ; 0x40 + 8001c0a: 601a str r2, [r3, #0] } /* Transmit and Receive data in 16 Bit mode */ if (hspi->Init.DataSize == SPI_DATASIZE_16BIT) - 8001c78: 68fb ldr r3, [r7, #12] - 8001c7a: 68db ldr r3, [r3, #12] - 8001c7c: f5b3 6f00 cmp.w r3, #2048 ; 0x800 - 8001c80: d178 bne.n 8001d74 + 8001c0c: 68fb ldr r3, [r7, #12] + 8001c0e: 68db ldr r3, [r3, #12] + 8001c10: f5b3 6f00 cmp.w r3, #2048 ; 0x800 + 8001c14: d178 bne.n 8001d08 { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001c82: 68fb ldr r3, [r7, #12] - 8001c84: 685b ldr r3, [r3, #4] - 8001c86: 2b00 cmp r3, #0 - 8001c88: d002 beq.n 8001c90 - 8001c8a: 8b7b ldrh r3, [r7, #26] - 8001c8c: 2b01 cmp r3, #1 - 8001c8e: d166 bne.n 8001d5e + 8001c16: 68fb ldr r3, [r7, #12] + 8001c18: 685b ldr r3, [r3, #4] + 8001c1a: 2b00 cmp r3, #0 + 8001c1c: d002 beq.n 8001c24 + 8001c1e: 8b7b ldrh r3, [r7, #26] + 8001c20: 2b01 cmp r3, #1 + 8001c22: d166 bne.n 8001cf2 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001c90: 68fb ldr r3, [r7, #12] - 8001c92: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001c94: 881a ldrh r2, [r3, #0] - 8001c96: 68fb ldr r3, [r7, #12] - 8001c98: 681b ldr r3, [r3, #0] - 8001c9a: 60da str r2, [r3, #12] + 8001c24: 68fb ldr r3, [r7, #12] + 8001c26: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001c28: 881a ldrh r2, [r3, #0] + 8001c2a: 68fb ldr r3, [r7, #12] + 8001c2c: 681b ldr r3, [r3, #0] + 8001c2e: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001c9c: 68fb ldr r3, [r7, #12] - 8001c9e: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001ca0: 1c9a adds r2, r3, #2 - 8001ca2: 68fb ldr r3, [r7, #12] - 8001ca4: 631a str r2, [r3, #48] ; 0x30 + 8001c30: 68fb ldr r3, [r7, #12] + 8001c32: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001c34: 1c9a adds r2, r3, #2 + 8001c36: 68fb ldr r3, [r7, #12] + 8001c38: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001ca6: 68fb ldr r3, [r7, #12] - 8001ca8: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001caa: b29b uxth r3, r3 - 8001cac: 3b01 subs r3, #1 - 8001cae: b29a uxth r2, r3 - 8001cb0: 68fb ldr r3, [r7, #12] - 8001cb2: 86da strh r2, [r3, #54] ; 0x36 + 8001c3a: 68fb ldr r3, [r7, #12] + 8001c3c: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001c3e: b29b uxth r3, r3 + 8001c40: 3b01 subs r3, #1 + 8001c42: b29a uxth r2, r3 + 8001c44: 68fb ldr r3, [r7, #12] + 8001c46: 86da strh r2, [r3, #54] ; 0x36 } while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001cb4: e053 b.n 8001d5e + 8001c48: e053 b.n 8001cf2 { /* Check TXE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - 8001cb6: 68fb ldr r3, [r7, #12] - 8001cb8: 681b ldr r3, [r3, #0] - 8001cba: 689b ldr r3, [r3, #8] - 8001cbc: f003 0302 and.w r3, r3, #2 - 8001cc0: 2b02 cmp r3, #2 - 8001cc2: d11b bne.n 8001cfc - 8001cc4: 68fb ldr r3, [r7, #12] - 8001cc6: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001cc8: b29b uxth r3, r3 - 8001cca: 2b00 cmp r3, #0 - 8001ccc: d016 beq.n 8001cfc - 8001cce: 6afb ldr r3, [r7, #44] ; 0x2c - 8001cd0: 2b01 cmp r3, #1 - 8001cd2: d113 bne.n 8001cfc + 8001c4a: 68fb ldr r3, [r7, #12] + 8001c4c: 681b ldr r3, [r3, #0] + 8001c4e: 689b ldr r3, [r3, #8] + 8001c50: f003 0302 and.w r3, r3, #2 + 8001c54: 2b02 cmp r3, #2 + 8001c56: d11b bne.n 8001c90 + 8001c58: 68fb ldr r3, [r7, #12] + 8001c5a: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001c5c: b29b uxth r3, r3 + 8001c5e: 2b00 cmp r3, #0 + 8001c60: d016 beq.n 8001c90 + 8001c62: 6afb ldr r3, [r7, #44] ; 0x2c + 8001c64: 2b01 cmp r3, #1 + 8001c66: d113 bne.n 8001c90 { hspi->Instance->DR = *((uint16_t *)hspi->pTxBuffPtr); - 8001cd4: 68fb ldr r3, [r7, #12] - 8001cd6: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001cd8: 881a ldrh r2, [r3, #0] - 8001cda: 68fb ldr r3, [r7, #12] - 8001cdc: 681b ldr r3, [r3, #0] - 8001cde: 60da str r2, [r3, #12] + 8001c68: 68fb ldr r3, [r7, #12] + 8001c6a: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001c6c: 881a ldrh r2, [r3, #0] + 8001c6e: 68fb ldr r3, [r7, #12] + 8001c70: 681b ldr r3, [r3, #0] + 8001c72: 60da str r2, [r3, #12] hspi->pTxBuffPtr += sizeof(uint16_t); - 8001ce0: 68fb ldr r3, [r7, #12] - 8001ce2: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001ce4: 1c9a adds r2, r3, #2 - 8001ce6: 68fb ldr r3, [r7, #12] - 8001ce8: 631a str r2, [r3, #48] ; 0x30 + 8001c74: 68fb ldr r3, [r7, #12] + 8001c76: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001c78: 1c9a adds r2, r3, #2 + 8001c7a: 68fb ldr r3, [r7, #12] + 8001c7c: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001cea: 68fb ldr r3, [r7, #12] - 8001cec: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001cee: b29b uxth r3, r3 - 8001cf0: 3b01 subs r3, #1 - 8001cf2: b29a uxth r2, r3 - 8001cf4: 68fb ldr r3, [r7, #12] - 8001cf6: 86da strh r2, [r3, #54] ; 0x36 + 8001c7e: 68fb ldr r3, [r7, #12] + 8001c80: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001c82: b29b uxth r3, r3 + 8001c84: 3b01 subs r3, #1 + 8001c86: b29a uxth r2, r3 + 8001c88: 68fb ldr r3, [r7, #12] + 8001c8a: 86da strh r2, [r3, #54] ; 0x36 /* Next Data is a reception (Rx). Tx not allowed */ txallowed = 0U; - 8001cf8: 2300 movs r3, #0 - 8001cfa: 62fb str r3, [r7, #44] ; 0x2c + 8001c8c: 2300 movs r3, #0 + 8001c8e: 62fb str r3, [r7, #44] ; 0x2c } #endif /* USE_SPI_CRC */ } /* Check RXNE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - 8001cfc: 68fb ldr r3, [r7, #12] - 8001cfe: 681b ldr r3, [r3, #0] - 8001d00: 689b ldr r3, [r3, #8] - 8001d02: f003 0301 and.w r3, r3, #1 - 8001d06: 2b01 cmp r3, #1 - 8001d08: d119 bne.n 8001d3e - 8001d0a: 68fb ldr r3, [r7, #12] - 8001d0c: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001d0e: b29b uxth r3, r3 - 8001d10: 2b00 cmp r3, #0 - 8001d12: d014 beq.n 8001d3e + 8001c90: 68fb ldr r3, [r7, #12] + 8001c92: 681b ldr r3, [r3, #0] + 8001c94: 689b ldr r3, [r3, #8] + 8001c96: f003 0301 and.w r3, r3, #1 + 8001c9a: 2b01 cmp r3, #1 + 8001c9c: d119 bne.n 8001cd2 + 8001c9e: 68fb ldr r3, [r7, #12] + 8001ca0: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001ca2: b29b uxth r3, r3 + 8001ca4: 2b00 cmp r3, #0 + 8001ca6: d014 beq.n 8001cd2 { *((uint16_t *)hspi->pRxBuffPtr) = (uint16_t)hspi->Instance->DR; - 8001d14: 68fb ldr r3, [r7, #12] - 8001d16: 681b ldr r3, [r3, #0] - 8001d18: 68da ldr r2, [r3, #12] - 8001d1a: 68fb ldr r3, [r7, #12] - 8001d1c: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001d1e: b292 uxth r2, r2 - 8001d20: 801a strh r2, [r3, #0] + 8001ca8: 68fb ldr r3, [r7, #12] + 8001caa: 681b ldr r3, [r3, #0] + 8001cac: 68da ldr r2, [r3, #12] + 8001cae: 68fb ldr r3, [r7, #12] + 8001cb0: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001cb2: b292 uxth r2, r2 + 8001cb4: 801a strh r2, [r3, #0] hspi->pRxBuffPtr += sizeof(uint16_t); - 8001d22: 68fb ldr r3, [r7, #12] - 8001d24: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001d26: 1c9a adds r2, r3, #2 - 8001d28: 68fb ldr r3, [r7, #12] - 8001d2a: 639a str r2, [r3, #56] ; 0x38 + 8001cb6: 68fb ldr r3, [r7, #12] + 8001cb8: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001cba: 1c9a adds r2, r3, #2 + 8001cbc: 68fb ldr r3, [r7, #12] + 8001cbe: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001d2c: 68fb ldr r3, [r7, #12] - 8001d2e: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001d30: b29b uxth r3, r3 - 8001d32: 3b01 subs r3, #1 - 8001d34: b29a uxth r2, r3 - 8001d36: 68fb ldr r3, [r7, #12] - 8001d38: 87da strh r2, [r3, #62] ; 0x3e + 8001cc0: 68fb ldr r3, [r7, #12] + 8001cc2: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001cc4: b29b uxth r3, r3 + 8001cc6: 3b01 subs r3, #1 + 8001cc8: b29a uxth r2, r3 + 8001cca: 68fb ldr r3, [r7, #12] + 8001ccc: 87da strh r2, [r3, #62] ; 0x3e /* Next Data is a Transmission (Tx). Tx is allowed */ txallowed = 1U; - 8001d3a: 2301 movs r3, #1 - 8001d3c: 62fb str r3, [r7, #44] ; 0x2c + 8001cce: 2301 movs r3, #1 + 8001cd0: 62fb str r3, [r7, #44] ; 0x2c } if (((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) - 8001d3e: f7fe fdab bl 8000898 - 8001d42: 4602 mov r2, r0 - 8001d44: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001d46: 1ad3 subs r3, r2, r3 - 8001d48: 6bba ldr r2, [r7, #56] ; 0x38 - 8001d4a: 429a cmp r2, r3 - 8001d4c: d807 bhi.n 8001d5e - 8001d4e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001d50: f1b3 3fff cmp.w r3, #4294967295 - 8001d54: d003 beq.n 8001d5e + 8001cd2: f7fe fdab bl 800082c + 8001cd6: 4602 mov r2, r0 + 8001cd8: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001cda: 1ad3 subs r3, r2, r3 + 8001cdc: 6bba ldr r2, [r7, #56] ; 0x38 + 8001cde: 429a cmp r2, r3 + 8001ce0: d807 bhi.n 8001cf2 + 8001ce2: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001ce4: f1b3 3fff cmp.w r3, #4294967295 + 8001ce8: d003 beq.n 8001cf2 { errorcode = HAL_TIMEOUT; - 8001d56: 2303 movs r3, #3 - 8001d58: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001cea: 2303 movs r3, #3 + 8001cec: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001d5c: e0a7 b.n 8001eae + 8001cf0: e0a7 b.n 8001e42 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001d5e: 68fb ldr r3, [r7, #12] - 8001d60: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001d62: b29b uxth r3, r3 - 8001d64: 2b00 cmp r3, #0 - 8001d66: d1a6 bne.n 8001cb6 - 8001d68: 68fb ldr r3, [r7, #12] - 8001d6a: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001d6c: b29b uxth r3, r3 - 8001d6e: 2b00 cmp r3, #0 - 8001d70: d1a1 bne.n 8001cb6 - 8001d72: e07c b.n 8001e6e + 8001cf2: 68fb ldr r3, [r7, #12] + 8001cf4: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001cf6: b29b uxth r3, r3 + 8001cf8: 2b00 cmp r3, #0 + 8001cfa: d1a6 bne.n 8001c4a + 8001cfc: 68fb ldr r3, [r7, #12] + 8001cfe: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001d00: b29b uxth r3, r3 + 8001d02: 2b00 cmp r3, #0 + 8001d04: d1a1 bne.n 8001c4a + 8001d06: e07c b.n 8001e02 } } /* Transmit and Receive data in 8 Bit mode */ else { if ((hspi->Init.Mode == SPI_MODE_SLAVE) || (initial_TxXferCount == 0x01U)) - 8001d74: 68fb ldr r3, [r7, #12] - 8001d76: 685b ldr r3, [r3, #4] - 8001d78: 2b00 cmp r3, #0 - 8001d7a: d002 beq.n 8001d82 - 8001d7c: 8b7b ldrh r3, [r7, #26] - 8001d7e: 2b01 cmp r3, #1 - 8001d80: d16b bne.n 8001e5a + 8001d08: 68fb ldr r3, [r7, #12] + 8001d0a: 685b ldr r3, [r3, #4] + 8001d0c: 2b00 cmp r3, #0 + 8001d0e: d002 beq.n 8001d16 + 8001d10: 8b7b ldrh r3, [r7, #26] + 8001d12: 2b01 cmp r3, #1 + 8001d14: d16b bne.n 8001dee { *((__IO uint8_t *)&hspi->Instance->DR) = (*hspi->pTxBuffPtr); - 8001d82: 68fb ldr r3, [r7, #12] - 8001d84: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001d86: 68fb ldr r3, [r7, #12] - 8001d88: 681b ldr r3, [r3, #0] - 8001d8a: 330c adds r3, #12 - 8001d8c: 7812 ldrb r2, [r2, #0] - 8001d8e: 701a strb r2, [r3, #0] + 8001d16: 68fb ldr r3, [r7, #12] + 8001d18: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001d1a: 68fb ldr r3, [r7, #12] + 8001d1c: 681b ldr r3, [r3, #0] + 8001d1e: 330c adds r3, #12 + 8001d20: 7812 ldrb r2, [r2, #0] + 8001d22: 701a strb r2, [r3, #0] hspi->pTxBuffPtr += sizeof(uint8_t); - 8001d90: 68fb ldr r3, [r7, #12] - 8001d92: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001d94: 1c5a adds r2, r3, #1 - 8001d96: 68fb ldr r3, [r7, #12] - 8001d98: 631a str r2, [r3, #48] ; 0x30 + 8001d24: 68fb ldr r3, [r7, #12] + 8001d26: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001d28: 1c5a adds r2, r3, #1 + 8001d2a: 68fb ldr r3, [r7, #12] + 8001d2c: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001d9a: 68fb ldr r3, [r7, #12] - 8001d9c: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001d9e: b29b uxth r3, r3 - 8001da0: 3b01 subs r3, #1 - 8001da2: b29a uxth r2, r3 - 8001da4: 68fb ldr r3, [r7, #12] - 8001da6: 86da strh r2, [r3, #54] ; 0x36 + 8001d2e: 68fb ldr r3, [r7, #12] + 8001d30: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001d32: b29b uxth r3, r3 + 8001d34: 3b01 subs r3, #1 + 8001d36: b29a uxth r2, r3 + 8001d38: 68fb ldr r3, [r7, #12] + 8001d3a: 86da strh r2, [r3, #54] ; 0x36 } while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001da8: e057 b.n 8001e5a + 8001d3c: e057 b.n 8001dee { /* Check TXE flag */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_TXE)) && (hspi->TxXferCount > 0U) && (txallowed == 1U)) - 8001daa: 68fb ldr r3, [r7, #12] - 8001dac: 681b ldr r3, [r3, #0] - 8001dae: 689b ldr r3, [r3, #8] - 8001db0: f003 0302 and.w r3, r3, #2 - 8001db4: 2b02 cmp r3, #2 - 8001db6: d11c bne.n 8001df2 - 8001db8: 68fb ldr r3, [r7, #12] - 8001dba: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001dbc: b29b uxth r3, r3 - 8001dbe: 2b00 cmp r3, #0 - 8001dc0: d017 beq.n 8001df2 - 8001dc2: 6afb ldr r3, [r7, #44] ; 0x2c - 8001dc4: 2b01 cmp r3, #1 - 8001dc6: d114 bne.n 8001df2 + 8001d3e: 68fb ldr r3, [r7, #12] + 8001d40: 681b ldr r3, [r3, #0] + 8001d42: 689b ldr r3, [r3, #8] + 8001d44: f003 0302 and.w r3, r3, #2 + 8001d48: 2b02 cmp r3, #2 + 8001d4a: d11c bne.n 8001d86 + 8001d4c: 68fb ldr r3, [r7, #12] + 8001d4e: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001d50: b29b uxth r3, r3 + 8001d52: 2b00 cmp r3, #0 + 8001d54: d017 beq.n 8001d86 + 8001d56: 6afb ldr r3, [r7, #44] ; 0x2c + 8001d58: 2b01 cmp r3, #1 + 8001d5a: d114 bne.n 8001d86 { *(__IO uint8_t *)&hspi->Instance->DR = (*hspi->pTxBuffPtr); - 8001dc8: 68fb ldr r3, [r7, #12] - 8001dca: 6b1a ldr r2, [r3, #48] ; 0x30 - 8001dcc: 68fb ldr r3, [r7, #12] - 8001dce: 681b ldr r3, [r3, #0] - 8001dd0: 330c adds r3, #12 - 8001dd2: 7812 ldrb r2, [r2, #0] - 8001dd4: 701a strb r2, [r3, #0] + 8001d5c: 68fb ldr r3, [r7, #12] + 8001d5e: 6b1a ldr r2, [r3, #48] ; 0x30 + 8001d60: 68fb ldr r3, [r7, #12] + 8001d62: 681b ldr r3, [r3, #0] + 8001d64: 330c adds r3, #12 + 8001d66: 7812 ldrb r2, [r2, #0] + 8001d68: 701a strb r2, [r3, #0] hspi->pTxBuffPtr++; - 8001dd6: 68fb ldr r3, [r7, #12] - 8001dd8: 6b1b ldr r3, [r3, #48] ; 0x30 - 8001dda: 1c5a adds r2, r3, #1 - 8001ddc: 68fb ldr r3, [r7, #12] - 8001dde: 631a str r2, [r3, #48] ; 0x30 + 8001d6a: 68fb ldr r3, [r7, #12] + 8001d6c: 6b1b ldr r3, [r3, #48] ; 0x30 + 8001d6e: 1c5a adds r2, r3, #1 + 8001d70: 68fb ldr r3, [r7, #12] + 8001d72: 631a str r2, [r3, #48] ; 0x30 hspi->TxXferCount--; - 8001de0: 68fb ldr r3, [r7, #12] - 8001de2: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001de4: b29b uxth r3, r3 - 8001de6: 3b01 subs r3, #1 - 8001de8: b29a uxth r2, r3 - 8001dea: 68fb ldr r3, [r7, #12] - 8001dec: 86da strh r2, [r3, #54] ; 0x36 + 8001d74: 68fb ldr r3, [r7, #12] + 8001d76: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001d78: b29b uxth r3, r3 + 8001d7a: 3b01 subs r3, #1 + 8001d7c: b29a uxth r2, r3 + 8001d7e: 68fb ldr r3, [r7, #12] + 8001d80: 86da strh r2, [r3, #54] ; 0x36 /* Next Data is a reception (Rx). Tx not allowed */ txallowed = 0U; - 8001dee: 2300 movs r3, #0 - 8001df0: 62fb str r3, [r7, #44] ; 0x2c + 8001d82: 2300 movs r3, #0 + 8001d84: 62fb str r3, [r7, #44] ; 0x2c } #endif /* USE_SPI_CRC */ } /* Wait until RXNE flag is reset */ if ((__HAL_SPI_GET_FLAG(hspi, SPI_FLAG_RXNE)) && (hspi->RxXferCount > 0U)) - 8001df2: 68fb ldr r3, [r7, #12] - 8001df4: 681b ldr r3, [r3, #0] - 8001df6: 689b ldr r3, [r3, #8] - 8001df8: f003 0301 and.w r3, r3, #1 - 8001dfc: 2b01 cmp r3, #1 - 8001dfe: d119 bne.n 8001e34 - 8001e00: 68fb ldr r3, [r7, #12] - 8001e02: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001e04: b29b uxth r3, r3 - 8001e06: 2b00 cmp r3, #0 - 8001e08: d014 beq.n 8001e34 + 8001d86: 68fb ldr r3, [r7, #12] + 8001d88: 681b ldr r3, [r3, #0] + 8001d8a: 689b ldr r3, [r3, #8] + 8001d8c: f003 0301 and.w r3, r3, #1 + 8001d90: 2b01 cmp r3, #1 + 8001d92: d119 bne.n 8001dc8 + 8001d94: 68fb ldr r3, [r7, #12] + 8001d96: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001d98: b29b uxth r3, r3 + 8001d9a: 2b00 cmp r3, #0 + 8001d9c: d014 beq.n 8001dc8 { (*(uint8_t *)hspi->pRxBuffPtr) = hspi->Instance->DR; - 8001e0a: 68fb ldr r3, [r7, #12] - 8001e0c: 681b ldr r3, [r3, #0] - 8001e0e: 68da ldr r2, [r3, #12] - 8001e10: 68fb ldr r3, [r7, #12] - 8001e12: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001e14: b2d2 uxtb r2, r2 - 8001e16: 701a strb r2, [r3, #0] + 8001d9e: 68fb ldr r3, [r7, #12] + 8001da0: 681b ldr r3, [r3, #0] + 8001da2: 68da ldr r2, [r3, #12] + 8001da4: 68fb ldr r3, [r7, #12] + 8001da6: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001da8: b2d2 uxtb r2, r2 + 8001daa: 701a strb r2, [r3, #0] hspi->pRxBuffPtr++; - 8001e18: 68fb ldr r3, [r7, #12] - 8001e1a: 6b9b ldr r3, [r3, #56] ; 0x38 - 8001e1c: 1c5a adds r2, r3, #1 - 8001e1e: 68fb ldr r3, [r7, #12] - 8001e20: 639a str r2, [r3, #56] ; 0x38 + 8001dac: 68fb ldr r3, [r7, #12] + 8001dae: 6b9b ldr r3, [r3, #56] ; 0x38 + 8001db0: 1c5a adds r2, r3, #1 + 8001db2: 68fb ldr r3, [r7, #12] + 8001db4: 639a str r2, [r3, #56] ; 0x38 hspi->RxXferCount--; - 8001e22: 68fb ldr r3, [r7, #12] - 8001e24: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001e26: b29b uxth r3, r3 - 8001e28: 3b01 subs r3, #1 - 8001e2a: b29a uxth r2, r3 - 8001e2c: 68fb ldr r3, [r7, #12] - 8001e2e: 87da strh r2, [r3, #62] ; 0x3e + 8001db6: 68fb ldr r3, [r7, #12] + 8001db8: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001dba: b29b uxth r3, r3 + 8001dbc: 3b01 subs r3, #1 + 8001dbe: b29a uxth r2, r3 + 8001dc0: 68fb ldr r3, [r7, #12] + 8001dc2: 87da strh r2, [r3, #62] ; 0x3e /* Next Data is a Transmission (Tx). Tx is allowed */ txallowed = 1U; - 8001e30: 2301 movs r3, #1 - 8001e32: 62fb str r3, [r7, #44] ; 0x2c + 8001dc4: 2301 movs r3, #1 + 8001dc6: 62fb str r3, [r7, #44] ; 0x2c } if ((((HAL_GetTick() - tickstart) >= Timeout) && ((Timeout != HAL_MAX_DELAY))) || (Timeout == 0U)) - 8001e34: f7fe fd30 bl 8000898 - 8001e38: 4602 mov r2, r0 - 8001e3a: 6a7b ldr r3, [r7, #36] ; 0x24 - 8001e3c: 1ad3 subs r3, r2, r3 - 8001e3e: 6bba ldr r2, [r7, #56] ; 0x38 - 8001e40: 429a cmp r2, r3 - 8001e42: d803 bhi.n 8001e4c - 8001e44: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001e46: f1b3 3fff cmp.w r3, #4294967295 - 8001e4a: d102 bne.n 8001e52 - 8001e4c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8001e4e: 2b00 cmp r3, #0 - 8001e50: d103 bne.n 8001e5a + 8001dc8: f7fe fd30 bl 800082c + 8001dcc: 4602 mov r2, r0 + 8001dce: 6a7b ldr r3, [r7, #36] ; 0x24 + 8001dd0: 1ad3 subs r3, r2, r3 + 8001dd2: 6bba ldr r2, [r7, #56] ; 0x38 + 8001dd4: 429a cmp r2, r3 + 8001dd6: d803 bhi.n 8001de0 + 8001dd8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001dda: f1b3 3fff cmp.w r3, #4294967295 + 8001dde: d102 bne.n 8001de6 + 8001de0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8001de2: 2b00 cmp r3, #0 + 8001de4: d103 bne.n 8001dee { errorcode = HAL_TIMEOUT; - 8001e52: 2303 movs r3, #3 - 8001e54: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001de6: 2303 movs r3, #3 + 8001de8: f887 302b strb.w r3, [r7, #43] ; 0x2b goto error; - 8001e58: e029 b.n 8001eae + 8001dec: e029 b.n 8001e42 while ((hspi->TxXferCount > 0U) || (hspi->RxXferCount > 0U)) - 8001e5a: 68fb ldr r3, [r7, #12] - 8001e5c: 8edb ldrh r3, [r3, #54] ; 0x36 - 8001e5e: b29b uxth r3, r3 - 8001e60: 2b00 cmp r3, #0 - 8001e62: d1a2 bne.n 8001daa - 8001e64: 68fb ldr r3, [r7, #12] - 8001e66: 8fdb ldrh r3, [r3, #62] ; 0x3e - 8001e68: b29b uxth r3, r3 - 8001e6a: 2b00 cmp r3, #0 - 8001e6c: d19d bne.n 8001daa + 8001dee: 68fb ldr r3, [r7, #12] + 8001df0: 8edb ldrh r3, [r3, #54] ; 0x36 + 8001df2: b29b uxth r3, r3 + 8001df4: 2b00 cmp r3, #0 + 8001df6: d1a2 bne.n 8001d3e + 8001df8: 68fb ldr r3, [r7, #12] + 8001dfa: 8fdb ldrh r3, [r3, #62] ; 0x3e + 8001dfc: b29b uxth r3, r3 + 8001dfe: 2b00 cmp r3, #0 + 8001e00: d19d bne.n 8001d3e } } #endif /* USE_SPI_CRC */ /* Check the end of the transaction */ if (SPI_EndRxTxTransaction(hspi, Timeout, tickstart) != HAL_OK) - 8001e6e: 6a7a ldr r2, [r7, #36] ; 0x24 - 8001e70: 6bb9 ldr r1, [r7, #56] ; 0x38 - 8001e72: 68f8 ldr r0, [r7, #12] - 8001e74: f000 f910 bl 8002098 - 8001e78: 4603 mov r3, r0 - 8001e7a: 2b00 cmp r3, #0 - 8001e7c: d006 beq.n 8001e8c + 8001e02: 6a7a ldr r2, [r7, #36] ; 0x24 + 8001e04: 6bb9 ldr r1, [r7, #56] ; 0x38 + 8001e06: 68f8 ldr r0, [r7, #12] + 8001e08: f000 f910 bl 800202c + 8001e0c: 4603 mov r3, r0 + 8001e0e: 2b00 cmp r3, #0 + 8001e10: d006 beq.n 8001e20 { errorcode = HAL_ERROR; - 8001e7e: 2301 movs r3, #1 - 8001e80: f887 302b strb.w r3, [r7, #43] ; 0x2b + 8001e12: 2301 movs r3, #1 + 8001e14: f887 302b strb.w r3, [r7, #43] ; 0x2b hspi->ErrorCode = HAL_SPI_ERROR_FLAG; - 8001e84: 68fb ldr r3, [r7, #12] - 8001e86: 2220 movs r2, #32 - 8001e88: 655a str r2, [r3, #84] ; 0x54 + 8001e18: 68fb ldr r3, [r7, #12] + 8001e1a: 2220 movs r2, #32 + 8001e1c: 655a str r2, [r3, #84] ; 0x54 goto error; - 8001e8a: e010 b.n 8001eae + 8001e1e: e010 b.n 8001e42 } /* Clear overrun flag in 2 Lines communication mode because received is not read */ if (hspi->Init.Direction == SPI_DIRECTION_2LINES) - 8001e8c: 68fb ldr r3, [r7, #12] - 8001e8e: 689b ldr r3, [r3, #8] - 8001e90: 2b00 cmp r3, #0 - 8001e92: d10b bne.n 8001eac + 8001e20: 68fb ldr r3, [r7, #12] + 8001e22: 689b ldr r3, [r3, #8] + 8001e24: 2b00 cmp r3, #0 + 8001e26: d10b bne.n 8001e40 { __HAL_SPI_CLEAR_OVRFLAG(hspi); - 8001e94: 2300 movs r3, #0 - 8001e96: 617b str r3, [r7, #20] - 8001e98: 68fb ldr r3, [r7, #12] - 8001e9a: 681b ldr r3, [r3, #0] - 8001e9c: 68db ldr r3, [r3, #12] - 8001e9e: 617b str r3, [r7, #20] - 8001ea0: 68fb ldr r3, [r7, #12] - 8001ea2: 681b ldr r3, [r3, #0] - 8001ea4: 689b ldr r3, [r3, #8] - 8001ea6: 617b str r3, [r7, #20] - 8001ea8: 697b ldr r3, [r7, #20] - 8001eaa: e000 b.n 8001eae + 8001e28: 2300 movs r3, #0 + 8001e2a: 617b str r3, [r7, #20] + 8001e2c: 68fb ldr r3, [r7, #12] + 8001e2e: 681b ldr r3, [r3, #0] + 8001e30: 68db ldr r3, [r3, #12] + 8001e32: 617b str r3, [r7, #20] + 8001e34: 68fb ldr r3, [r7, #12] + 8001e36: 681b ldr r3, [r3, #0] + 8001e38: 689b ldr r3, [r3, #8] + 8001e3a: 617b str r3, [r7, #20] + 8001e3c: 697b ldr r3, [r7, #20] + 8001e3e: e000 b.n 8001e42 } error : - 8001eac: bf00 nop + 8001e40: bf00 nop hspi->State = HAL_SPI_STATE_READY; - 8001eae: 68fb ldr r3, [r7, #12] - 8001eb0: 2201 movs r2, #1 - 8001eb2: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001e42: 68fb ldr r3, [r7, #12] + 8001e44: 2201 movs r2, #1 + 8001e46: f883 2051 strb.w r2, [r3, #81] ; 0x51 __HAL_UNLOCK(hspi); - 8001eb6: 68fb ldr r3, [r7, #12] - 8001eb8: 2200 movs r2, #0 - 8001eba: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001e4a: 68fb ldr r3, [r7, #12] + 8001e4c: 2200 movs r2, #0 + 8001e4e: f883 2050 strb.w r2, [r3, #80] ; 0x50 return errorcode; - 8001ebe: f897 302b ldrb.w r3, [r7, #43] ; 0x2b + 8001e52: f897 302b ldrb.w r3, [r7, #43] ; 0x2b } - 8001ec2: 4618 mov r0, r3 - 8001ec4: 3730 adds r7, #48 ; 0x30 - 8001ec6: 46bd mov sp, r7 - 8001ec8: bd80 pop {r7, pc} + 8001e56: 4618 mov r0, r3 + 8001e58: 3730 adds r7, #48 ; 0x30 + 8001e5a: 46bd mov sp, r7 + 8001e5c: bd80 pop {r7, pc} -08001eca : +08001e5e : * @param hspi pointer to a SPI_HandleTypeDef structure that contains * the configuration information for SPI module. * @retval SPI state */ HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi) { - 8001eca: b480 push {r7} - 8001ecc: b083 sub sp, #12 - 8001ece: af00 add r7, sp, #0 - 8001ed0: 6078 str r0, [r7, #4] + 8001e5e: b480 push {r7} + 8001e60: b083 sub sp, #12 + 8001e62: af00 add r7, sp, #0 + 8001e64: 6078 str r0, [r7, #4] /* Return SPI handle state */ return hspi->State; - 8001ed2: 687b ldr r3, [r7, #4] - 8001ed4: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 - 8001ed8: b2db uxtb r3, r3 + 8001e66: 687b ldr r3, [r7, #4] + 8001e68: f893 3051 ldrb.w r3, [r3, #81] ; 0x51 + 8001e6c: b2db uxtb r3, r3 } - 8001eda: 4618 mov r0, r3 - 8001edc: 370c adds r7, #12 - 8001ede: 46bd mov sp, r7 - 8001ee0: bc80 pop {r7} - 8001ee2: 4770 bx lr + 8001e6e: 4618 mov r0, r3 + 8001e70: 370c adds r7, #12 + 8001e72: 46bd mov sp, r7 + 8001e74: bc80 pop {r7} + 8001e76: 4770 bx lr -08001ee4 : +08001e78 : * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_WaitFlagStateUntilTimeout(SPI_HandleTypeDef *hspi, uint32_t Flag, FlagStatus State, uint32_t Timeout, uint32_t Tickstart) { - 8001ee4: b580 push {r7, lr} - 8001ee6: b088 sub sp, #32 - 8001ee8: af00 add r7, sp, #0 - 8001eea: 60f8 str r0, [r7, #12] - 8001eec: 60b9 str r1, [r7, #8] - 8001eee: 603b str r3, [r7, #0] - 8001ef0: 4613 mov r3, r2 - 8001ef2: 71fb strb r3, [r7, #7] + 8001e78: b580 push {r7, lr} + 8001e7a: b088 sub sp, #32 + 8001e7c: af00 add r7, sp, #0 + 8001e7e: 60f8 str r0, [r7, #12] + 8001e80: 60b9 str r1, [r7, #8] + 8001e82: 603b str r3, [r7, #0] + 8001e84: 4613 mov r3, r2 + 8001e86: 71fb strb r3, [r7, #7] __IO uint32_t count; uint32_t tmp_timeout; uint32_t tmp_tickstart; /* Adjust Timeout value in case of end of transfer */ tmp_timeout = Timeout - (HAL_GetTick() - Tickstart); - 8001ef4: f7fe fcd0 bl 8000898 - 8001ef8: 4602 mov r2, r0 - 8001efa: 6abb ldr r3, [r7, #40] ; 0x28 - 8001efc: 1a9b subs r3, r3, r2 - 8001efe: 683a ldr r2, [r7, #0] - 8001f00: 4413 add r3, r2 - 8001f02: 61fb str r3, [r7, #28] + 8001e88: f7fe fcd0 bl 800082c + 8001e8c: 4602 mov r2, r0 + 8001e8e: 6abb ldr r3, [r7, #40] ; 0x28 + 8001e90: 1a9b subs r3, r3, r2 + 8001e92: 683a ldr r2, [r7, #0] + 8001e94: 4413 add r3, r2 + 8001e96: 61fb str r3, [r7, #28] tmp_tickstart = HAL_GetTick(); - 8001f04: f7fe fcc8 bl 8000898 - 8001f08: 61b8 str r0, [r7, #24] + 8001e98: f7fe fcc8 bl 800082c + 8001e9c: 61b8 str r0, [r7, #24] /* Calculate Timeout based on a software loop to avoid blocking issue if Systick is disabled */ count = tmp_timeout * ((SystemCoreClock * 32U) >> 20U); - 8001f0a: 4b39 ldr r3, [pc, #228] ; (8001ff0 ) - 8001f0c: 681b ldr r3, [r3, #0] - 8001f0e: 015b lsls r3, r3, #5 - 8001f10: 0d1b lsrs r3, r3, #20 - 8001f12: 69fa ldr r2, [r7, #28] - 8001f14: fb02 f303 mul.w r3, r2, r3 - 8001f18: 617b str r3, [r7, #20] + 8001e9e: 4b39 ldr r3, [pc, #228] ; (8001f84 ) + 8001ea0: 681b ldr r3, [r3, #0] + 8001ea2: 015b lsls r3, r3, #5 + 8001ea4: 0d1b lsrs r3, r3, #20 + 8001ea6: 69fa ldr r2, [r7, #28] + 8001ea8: fb02 f303 mul.w r3, r2, r3 + 8001eac: 617b str r3, [r7, #20] while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) - 8001f1a: e054 b.n 8001fc6 + 8001eae: e054 b.n 8001f5a { if (Timeout != HAL_MAX_DELAY) - 8001f1c: 683b ldr r3, [r7, #0] - 8001f1e: f1b3 3fff cmp.w r3, #4294967295 - 8001f22: d050 beq.n 8001fc6 + 8001eb0: 683b ldr r3, [r7, #0] + 8001eb2: f1b3 3fff cmp.w r3, #4294967295 + 8001eb6: d050 beq.n 8001f5a { if (((HAL_GetTick() - tmp_tickstart) >= tmp_timeout) || (tmp_timeout == 0U)) - 8001f24: f7fe fcb8 bl 8000898 - 8001f28: 4602 mov r2, r0 - 8001f2a: 69bb ldr r3, [r7, #24] - 8001f2c: 1ad3 subs r3, r2, r3 - 8001f2e: 69fa ldr r2, [r7, #28] - 8001f30: 429a cmp r2, r3 - 8001f32: d902 bls.n 8001f3a - 8001f34: 69fb ldr r3, [r7, #28] - 8001f36: 2b00 cmp r3, #0 - 8001f38: d13d bne.n 8001fb6 + 8001eb8: f7fe fcb8 bl 800082c + 8001ebc: 4602 mov r2, r0 + 8001ebe: 69bb ldr r3, [r7, #24] + 8001ec0: 1ad3 subs r3, r2, r3 + 8001ec2: 69fa ldr r2, [r7, #28] + 8001ec4: 429a cmp r2, r3 + 8001ec6: d902 bls.n 8001ece + 8001ec8: 69fb ldr r3, [r7, #28] + 8001eca: 2b00 cmp r3, #0 + 8001ecc: d13d bne.n 8001f4a /* Disable the SPI and reset the CRC: the CRC value should be cleared on both master and slave sides in order to resynchronize the master and slave for their respective CRC calculation */ /* Disable TXE, RXNE and ERR interrupts for the interrupt process */ __HAL_SPI_DISABLE_IT(hspi, (SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR)); - 8001f3a: 68fb ldr r3, [r7, #12] - 8001f3c: 681b ldr r3, [r3, #0] - 8001f3e: 685a ldr r2, [r3, #4] - 8001f40: 68fb ldr r3, [r7, #12] - 8001f42: 681b ldr r3, [r3, #0] - 8001f44: f022 02e0 bic.w r2, r2, #224 ; 0xe0 - 8001f48: 605a str r2, [r3, #4] + 8001ece: 68fb ldr r3, [r7, #12] + 8001ed0: 681b ldr r3, [r3, #0] + 8001ed2: 685a ldr r2, [r3, #4] + 8001ed4: 68fb ldr r3, [r7, #12] + 8001ed6: 681b ldr r3, [r3, #0] + 8001ed8: f022 02e0 bic.w r2, r2, #224 ; 0xe0 + 8001edc: 605a str r2, [r3, #4] if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8001f4a: 68fb ldr r3, [r7, #12] - 8001f4c: 685b ldr r3, [r3, #4] - 8001f4e: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8001f52: d111 bne.n 8001f78 - 8001f54: 68fb ldr r3, [r7, #12] - 8001f56: 689b ldr r3, [r3, #8] - 8001f58: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8001f5c: d004 beq.n 8001f68 + 8001ede: 68fb ldr r3, [r7, #12] + 8001ee0: 685b ldr r3, [r3, #4] + 8001ee2: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001ee6: d111 bne.n 8001f0c + 8001ee8: 68fb ldr r3, [r7, #12] + 8001eea: 689b ldr r3, [r3, #8] + 8001eec: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 8001ef0: d004 beq.n 8001efc || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - 8001f5e: 68fb ldr r3, [r7, #12] - 8001f60: 689b ldr r3, [r3, #8] - 8001f62: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8001f66: d107 bne.n 8001f78 + 8001ef2: 68fb ldr r3, [r7, #12] + 8001ef4: 689b ldr r3, [r3, #8] + 8001ef6: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8001efa: d107 bne.n 8001f0c { /* Disable SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 8001f68: 68fb ldr r3, [r7, #12] - 8001f6a: 681b ldr r3, [r3, #0] - 8001f6c: 681a ldr r2, [r3, #0] - 8001f6e: 68fb ldr r3, [r7, #12] - 8001f70: 681b ldr r3, [r3, #0] - 8001f72: f022 0240 bic.w r2, r2, #64 ; 0x40 - 8001f76: 601a str r2, [r3, #0] + 8001efc: 68fb ldr r3, [r7, #12] + 8001efe: 681b ldr r3, [r3, #0] + 8001f00: 681a ldr r2, [r3, #0] + 8001f02: 68fb ldr r3, [r7, #12] + 8001f04: 681b ldr r3, [r3, #0] + 8001f06: f022 0240 bic.w r2, r2, #64 ; 0x40 + 8001f0a: 601a str r2, [r3, #0] } /* Reset CRC Calculation */ if (hspi->Init.CRCCalculation == SPI_CRCCALCULATION_ENABLE) - 8001f78: 68fb ldr r3, [r7, #12] - 8001f7a: 6a9b ldr r3, [r3, #40] ; 0x28 - 8001f7c: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 - 8001f80: d10f bne.n 8001fa2 + 8001f0c: 68fb ldr r3, [r7, #12] + 8001f0e: 6a9b ldr r3, [r3, #40] ; 0x28 + 8001f10: f5b3 5f00 cmp.w r3, #8192 ; 0x2000 + 8001f14: d10f bne.n 8001f36 { SPI_RESET_CRC(hspi); - 8001f82: 68fb ldr r3, [r7, #12] - 8001f84: 681b ldr r3, [r3, #0] - 8001f86: 681a ldr r2, [r3, #0] - 8001f88: 68fb ldr r3, [r7, #12] - 8001f8a: 681b ldr r3, [r3, #0] - 8001f8c: f422 5200 bic.w r2, r2, #8192 ; 0x2000 - 8001f90: 601a str r2, [r3, #0] - 8001f92: 68fb ldr r3, [r7, #12] - 8001f94: 681b ldr r3, [r3, #0] - 8001f96: 681a ldr r2, [r3, #0] - 8001f98: 68fb ldr r3, [r7, #12] - 8001f9a: 681b ldr r3, [r3, #0] - 8001f9c: f442 5200 orr.w r2, r2, #8192 ; 0x2000 - 8001fa0: 601a str r2, [r3, #0] + 8001f16: 68fb ldr r3, [r7, #12] + 8001f18: 681b ldr r3, [r3, #0] + 8001f1a: 681a ldr r2, [r3, #0] + 8001f1c: 68fb ldr r3, [r7, #12] + 8001f1e: 681b ldr r3, [r3, #0] + 8001f20: f422 5200 bic.w r2, r2, #8192 ; 0x2000 + 8001f24: 601a str r2, [r3, #0] + 8001f26: 68fb ldr r3, [r7, #12] + 8001f28: 681b ldr r3, [r3, #0] + 8001f2a: 681a ldr r2, [r3, #0] + 8001f2c: 68fb ldr r3, [r7, #12] + 8001f2e: 681b ldr r3, [r3, #0] + 8001f30: f442 5200 orr.w r2, r2, #8192 ; 0x2000 + 8001f34: 601a str r2, [r3, #0] } hspi->State = HAL_SPI_STATE_READY; - 8001fa2: 68fb ldr r3, [r7, #12] - 8001fa4: 2201 movs r2, #1 - 8001fa6: f883 2051 strb.w r2, [r3, #81] ; 0x51 + 8001f36: 68fb ldr r3, [r7, #12] + 8001f38: 2201 movs r2, #1 + 8001f3a: f883 2051 strb.w r2, [r3, #81] ; 0x51 /* Process Unlocked */ __HAL_UNLOCK(hspi); - 8001faa: 68fb ldr r3, [r7, #12] - 8001fac: 2200 movs r2, #0 - 8001fae: f883 2050 strb.w r2, [r3, #80] ; 0x50 + 8001f3e: 68fb ldr r3, [r7, #12] + 8001f40: 2200 movs r2, #0 + 8001f42: f883 2050 strb.w r2, [r3, #80] ; 0x50 return HAL_TIMEOUT; - 8001fb2: 2303 movs r3, #3 - 8001fb4: e017 b.n 8001fe6 + 8001f46: 2303 movs r3, #3 + 8001f48: e017 b.n 8001f7a } /* If Systick is disabled or not incremented, deactivate timeout to go in disable loop procedure */ if(count == 0U) - 8001fb6: 697b ldr r3, [r7, #20] - 8001fb8: 2b00 cmp r3, #0 - 8001fba: d101 bne.n 8001fc0 + 8001f4a: 697b ldr r3, [r7, #20] + 8001f4c: 2b00 cmp r3, #0 + 8001f4e: d101 bne.n 8001f54 { tmp_timeout = 0U; - 8001fbc: 2300 movs r3, #0 - 8001fbe: 61fb str r3, [r7, #28] + 8001f50: 2300 movs r3, #0 + 8001f52: 61fb str r3, [r7, #28] } count--; - 8001fc0: 697b ldr r3, [r7, #20] - 8001fc2: 3b01 subs r3, #1 - 8001fc4: 617b str r3, [r7, #20] + 8001f54: 697b ldr r3, [r7, #20] + 8001f56: 3b01 subs r3, #1 + 8001f58: 617b str r3, [r7, #20] while ((__HAL_SPI_GET_FLAG(hspi, Flag) ? SET : RESET) != State) - 8001fc6: 68fb ldr r3, [r7, #12] - 8001fc8: 681b ldr r3, [r3, #0] - 8001fca: 689a ldr r2, [r3, #8] - 8001fcc: 68bb ldr r3, [r7, #8] - 8001fce: 4013 ands r3, r2 - 8001fd0: 68ba ldr r2, [r7, #8] - 8001fd2: 429a cmp r2, r3 - 8001fd4: bf0c ite eq - 8001fd6: 2301 moveq r3, #1 - 8001fd8: 2300 movne r3, #0 - 8001fda: b2db uxtb r3, r3 - 8001fdc: 461a mov r2, r3 - 8001fde: 79fb ldrb r3, [r7, #7] - 8001fe0: 429a cmp r2, r3 - 8001fe2: d19b bne.n 8001f1c + 8001f5a: 68fb ldr r3, [r7, #12] + 8001f5c: 681b ldr r3, [r3, #0] + 8001f5e: 689a ldr r2, [r3, #8] + 8001f60: 68bb ldr r3, [r7, #8] + 8001f62: 4013 ands r3, r2 + 8001f64: 68ba ldr r2, [r7, #8] + 8001f66: 429a cmp r2, r3 + 8001f68: bf0c ite eq + 8001f6a: 2301 moveq r3, #1 + 8001f6c: 2300 movne r3, #0 + 8001f6e: b2db uxtb r3, r3 + 8001f70: 461a mov r2, r3 + 8001f72: 79fb ldrb r3, [r7, #7] + 8001f74: 429a cmp r2, r3 + 8001f76: d19b bne.n 8001eb0 } } return HAL_OK; - 8001fe4: 2300 movs r3, #0 + 8001f78: 2300 movs r3, #0 } - 8001fe6: 4618 mov r0, r3 - 8001fe8: 3720 adds r7, #32 - 8001fea: 46bd mov sp, r7 - 8001fec: bd80 pop {r7, pc} - 8001fee: bf00 nop - 8001ff0: 20000000 .word 0x20000000 + 8001f7a: 4618 mov r0, r3 + 8001f7c: 3720 adds r7, #32 + 8001f7e: 46bd mov sp, r7 + 8001f80: bd80 pop {r7, pc} + 8001f82: bf00 nop + 8001f84: 20000000 .word 0x20000000 -08001ff4 : +08001f88 : * @param Timeout Timeout duration * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) { - 8001ff4: b580 push {r7, lr} - 8001ff6: b086 sub sp, #24 - 8001ff8: af02 add r7, sp, #8 - 8001ffa: 60f8 str r0, [r7, #12] - 8001ffc: 60b9 str r1, [r7, #8] - 8001ffe: 607a str r2, [r7, #4] + 8001f88: b580 push {r7, lr} + 8001f8a: b086 sub sp, #24 + 8001f8c: af02 add r7, sp, #8 + 8001f8e: 60f8 str r0, [r7, #12] + 8001f90: 60b9 str r1, [r7, #8] + 8001f92: 607a str r2, [r7, #4] if ((hspi->Init.Mode == SPI_MODE_MASTER) && ((hspi->Init.Direction == SPI_DIRECTION_1LINE) - 8002000: 68fb ldr r3, [r7, #12] - 8002002: 685b ldr r3, [r3, #4] - 8002004: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8002008: d111 bne.n 800202e - 800200a: 68fb ldr r3, [r7, #12] - 800200c: 689b ldr r3, [r3, #8] - 800200e: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 - 8002012: d004 beq.n 800201e + 8001f94: 68fb ldr r3, [r7, #12] + 8001f96: 685b ldr r3, [r3, #4] + 8001f98: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001f9c: d111 bne.n 8001fc2 + 8001f9e: 68fb ldr r3, [r7, #12] + 8001fa0: 689b ldr r3, [r3, #8] + 8001fa2: f5b3 4f00 cmp.w r3, #32768 ; 0x8000 + 8001fa6: d004 beq.n 8001fb2 || (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY))) - 8002014: 68fb ldr r3, [r7, #12] - 8002016: 689b ldr r3, [r3, #8] - 8002018: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 800201c: d107 bne.n 800202e + 8001fa8: 68fb ldr r3, [r7, #12] + 8001faa: 689b ldr r3, [r3, #8] + 8001fac: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8001fb0: d107 bne.n 8001fc2 { /* Disable SPI peripheral */ __HAL_SPI_DISABLE(hspi); - 800201e: 68fb ldr r3, [r7, #12] - 8002020: 681b ldr r3, [r3, #0] - 8002022: 681a ldr r2, [r3, #0] - 8002024: 68fb ldr r3, [r7, #12] - 8002026: 681b ldr r3, [r3, #0] - 8002028: f022 0240 bic.w r2, r2, #64 ; 0x40 - 800202c: 601a str r2, [r3, #0] + 8001fb2: 68fb ldr r3, [r7, #12] + 8001fb4: 681b ldr r3, [r3, #0] + 8001fb6: 681a ldr r2, [r3, #0] + 8001fb8: 68fb ldr r3, [r7, #12] + 8001fba: 681b ldr r3, [r3, #0] + 8001fbc: f022 0240 bic.w r2, r2, #64 ; 0x40 + 8001fc0: 601a str r2, [r3, #0] } if ((hspi->Init.Mode == SPI_MODE_MASTER) && (hspi->Init.Direction == SPI_DIRECTION_2LINES_RXONLY)) - 800202e: 68fb ldr r3, [r7, #12] - 8002030: 685b ldr r3, [r3, #4] - 8002032: f5b3 7f82 cmp.w r3, #260 ; 0x104 - 8002036: d117 bne.n 8002068 - 8002038: 68fb ldr r3, [r7, #12] - 800203a: 689b ldr r3, [r3, #8] - 800203c: f5b3 6f80 cmp.w r3, #1024 ; 0x400 - 8002040: d112 bne.n 8002068 + 8001fc2: 68fb ldr r3, [r7, #12] + 8001fc4: 685b ldr r3, [r3, #4] + 8001fc6: f5b3 7f82 cmp.w r3, #260 ; 0x104 + 8001fca: d117 bne.n 8001ffc + 8001fcc: 68fb ldr r3, [r7, #12] + 8001fce: 689b ldr r3, [r3, #8] + 8001fd0: f5b3 6f80 cmp.w r3, #1024 ; 0x400 + 8001fd4: d112 bne.n 8001ffc { /* Wait the RXNE reset */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout, Tickstart) != HAL_OK) - 8002042: 687b ldr r3, [r7, #4] - 8002044: 9300 str r3, [sp, #0] - 8002046: 68bb ldr r3, [r7, #8] - 8002048: 2200 movs r2, #0 - 800204a: 2101 movs r1, #1 - 800204c: 68f8 ldr r0, [r7, #12] - 800204e: f7ff ff49 bl 8001ee4 - 8002052: 4603 mov r3, r0 - 8002054: 2b00 cmp r3, #0 - 8002056: d01a beq.n 800208e + 8001fd6: 687b ldr r3, [r7, #4] + 8001fd8: 9300 str r3, [sp, #0] + 8001fda: 68bb ldr r3, [r7, #8] + 8001fdc: 2200 movs r2, #0 + 8001fde: 2101 movs r1, #1 + 8001fe0: 68f8 ldr r0, [r7, #12] + 8001fe2: f7ff ff49 bl 8001e78 + 8001fe6: 4603 mov r3, r0 + 8001fe8: 2b00 cmp r3, #0 + 8001fea: d01a beq.n 8002022 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 8002058: 68fb ldr r3, [r7, #12] - 800205a: 6d5b ldr r3, [r3, #84] ; 0x54 - 800205c: f043 0220 orr.w r2, r3, #32 - 8002060: 68fb ldr r3, [r7, #12] - 8002062: 655a str r2, [r3, #84] ; 0x54 + 8001fec: 68fb ldr r3, [r7, #12] + 8001fee: 6d5b ldr r3, [r3, #84] ; 0x54 + 8001ff0: f043 0220 orr.w r2, r3, #32 + 8001ff4: 68fb ldr r3, [r7, #12] + 8001ff6: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 8002064: 2303 movs r3, #3 - 8002066: e013 b.n 8002090 + 8001ff8: 2303 movs r3, #3 + 8001ffa: e013 b.n 8002024 } } else { /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - 8002068: 687b ldr r3, [r7, #4] - 800206a: 9300 str r3, [sp, #0] - 800206c: 68bb ldr r3, [r7, #8] - 800206e: 2200 movs r2, #0 - 8002070: 2180 movs r1, #128 ; 0x80 - 8002072: 68f8 ldr r0, [r7, #12] - 8002074: f7ff ff36 bl 8001ee4 - 8002078: 4603 mov r3, r0 - 800207a: 2b00 cmp r3, #0 - 800207c: d007 beq.n 800208e + 8001ffc: 687b ldr r3, [r7, #4] + 8001ffe: 9300 str r3, [sp, #0] + 8002000: 68bb ldr r3, [r7, #8] + 8002002: 2200 movs r2, #0 + 8002004: 2180 movs r1, #128 ; 0x80 + 8002006: 68f8 ldr r0, [r7, #12] + 8002008: f7ff ff36 bl 8001e78 + 800200c: 4603 mov r3, r0 + 800200e: 2b00 cmp r3, #0 + 8002010: d007 beq.n 8002022 { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 800207e: 68fb ldr r3, [r7, #12] - 8002080: 6d5b ldr r3, [r3, #84] ; 0x54 - 8002082: f043 0220 orr.w r2, r3, #32 - 8002086: 68fb ldr r3, [r7, #12] - 8002088: 655a str r2, [r3, #84] ; 0x54 + 8002012: 68fb ldr r3, [r7, #12] + 8002014: 6d5b ldr r3, [r3, #84] ; 0x54 + 8002016: f043 0220 orr.w r2, r3, #32 + 800201a: 68fb ldr r3, [r7, #12] + 800201c: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 800208a: 2303 movs r3, #3 - 800208c: e000 b.n 8002090 + 800201e: 2303 movs r3, #3 + 8002020: e000 b.n 8002024 } } return HAL_OK; - 800208e: 2300 movs r3, #0 + 8002022: 2300 movs r3, #0 } - 8002090: 4618 mov r0, r3 - 8002092: 3710 adds r7, #16 - 8002094: 46bd mov sp, r7 - 8002096: bd80 pop {r7, pc} + 8002024: 4618 mov r0, r3 + 8002026: 3710 adds r7, #16 + 8002028: 46bd mov sp, r7 + 800202a: bd80 pop {r7, pc} -08002098 : +0800202c : * @param Timeout Timeout duration * @param Tickstart tick start value * @retval HAL status */ static HAL_StatusTypeDef SPI_EndRxTxTransaction(SPI_HandleTypeDef *hspi, uint32_t Timeout, uint32_t Tickstart) { - 8002098: b580 push {r7, lr} - 800209a: b086 sub sp, #24 - 800209c: af02 add r7, sp, #8 - 800209e: 60f8 str r0, [r7, #12] - 80020a0: 60b9 str r1, [r7, #8] - 80020a2: 607a str r2, [r7, #4] + 800202c: b580 push {r7, lr} + 800202e: b086 sub sp, #24 + 8002030: af02 add r7, sp, #8 + 8002032: 60f8 str r0, [r7, #12] + 8002034: 60b9 str r1, [r7, #8] + 8002036: 607a str r2, [r7, #4] /* Control the BSY flag */ if (SPI_WaitFlagStateUntilTimeout(hspi, SPI_FLAG_BSY, RESET, Timeout, Tickstart) != HAL_OK) - 80020a4: 687b ldr r3, [r7, #4] - 80020a6: 9300 str r3, [sp, #0] - 80020a8: 68bb ldr r3, [r7, #8] - 80020aa: 2200 movs r2, #0 - 80020ac: 2180 movs r1, #128 ; 0x80 - 80020ae: 68f8 ldr r0, [r7, #12] - 80020b0: f7ff ff18 bl 8001ee4 - 80020b4: 4603 mov r3, r0 - 80020b6: 2b00 cmp r3, #0 - 80020b8: d007 beq.n 80020ca + 8002038: 687b ldr r3, [r7, #4] + 800203a: 9300 str r3, [sp, #0] + 800203c: 68bb ldr r3, [r7, #8] + 800203e: 2200 movs r2, #0 + 8002040: 2180 movs r1, #128 ; 0x80 + 8002042: 68f8 ldr r0, [r7, #12] + 8002044: f7ff ff18 bl 8001e78 + 8002048: 4603 mov r3, r0 + 800204a: 2b00 cmp r3, #0 + 800204c: d007 beq.n 800205e { SET_BIT(hspi->ErrorCode, HAL_SPI_ERROR_FLAG); - 80020ba: 68fb ldr r3, [r7, #12] - 80020bc: 6d5b ldr r3, [r3, #84] ; 0x54 - 80020be: f043 0220 orr.w r2, r3, #32 - 80020c2: 68fb ldr r3, [r7, #12] - 80020c4: 655a str r2, [r3, #84] ; 0x54 + 800204e: 68fb ldr r3, [r7, #12] + 8002050: 6d5b ldr r3, [r3, #84] ; 0x54 + 8002052: f043 0220 orr.w r2, r3, #32 + 8002056: 68fb ldr r3, [r7, #12] + 8002058: 655a str r2, [r3, #84] ; 0x54 return HAL_TIMEOUT; - 80020c6: 2303 movs r3, #3 - 80020c8: e000 b.n 80020cc + 800205a: 2303 movs r3, #3 + 800205c: e000 b.n 8002060 } return HAL_OK; - 80020ca: 2300 movs r3, #0 + 800205e: 2300 movs r3, #0 } - 80020cc: 4618 mov r0, r3 - 80020ce: 3710 adds r7, #16 - 80020d0: 46bd mov sp, r7 - 80020d2: bd80 pop {r7, pc} + 8002060: 4618 mov r0, r3 + 8002062: 3710 adds r7, #16 + 8002064: 46bd mov sp, r7 + 8002066: bd80 pop {r7, pc} -080020d4 : +08002068 : * @param ExtTiming Pointer to SRAM extended mode timing structure * @retval HAL status */ HAL_StatusTypeDef HAL_SRAM_Init(SRAM_HandleTypeDef *hsram, FSMC_NORSRAM_TimingTypeDef *Timing, FSMC_NORSRAM_TimingTypeDef *ExtTiming) { - 80020d4: b580 push {r7, lr} - 80020d6: b084 sub sp, #16 - 80020d8: af00 add r7, sp, #0 - 80020da: 60f8 str r0, [r7, #12] - 80020dc: 60b9 str r1, [r7, #8] - 80020de: 607a str r2, [r7, #4] + 8002068: b580 push {r7, lr} + 800206a: b084 sub sp, #16 + 800206c: af00 add r7, sp, #0 + 800206e: 60f8 str r0, [r7, #12] + 8002070: 60b9 str r1, [r7, #8] + 8002072: 607a str r2, [r7, #4] /* Check the SRAM handle parameter */ if ((hsram == NULL) || (hsram->Init.BurstAccessMode == FSMC_BURST_ACCESS_MODE_ENABLE)) - 80020e0: 68fb ldr r3, [r7, #12] - 80020e2: 2b00 cmp r3, #0 - 80020e4: d004 beq.n 80020f0 - 80020e6: 68fb ldr r3, [r7, #12] - 80020e8: 699b ldr r3, [r3, #24] - 80020ea: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 80020ee: d101 bne.n 80020f4 + 8002074: 68fb ldr r3, [r7, #12] + 8002076: 2b00 cmp r3, #0 + 8002078: d004 beq.n 8002084 + 800207a: 68fb ldr r3, [r7, #12] + 800207c: 699b ldr r3, [r3, #24] + 800207e: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8002082: d101 bne.n 8002088 { return HAL_ERROR; - 80020f0: 2301 movs r3, #1 - 80020f2: e038 b.n 8002166 + 8002084: 2301 movs r3, #1 + 8002086: e038 b.n 80020fa } if (hsram->State == HAL_SRAM_STATE_RESET) - 80020f4: 68fb ldr r3, [r7, #12] - 80020f6: f893 3041 ldrb.w r3, [r3, #65] ; 0x41 - 80020fa: b2db uxtb r3, r3 - 80020fc: 2b00 cmp r3, #0 - 80020fe: d106 bne.n 800210e + 8002088: 68fb ldr r3, [r7, #12] + 800208a: f893 3041 ldrb.w r3, [r3, #65] ; 0x41 + 800208e: b2db uxtb r3, r3 + 8002090: 2b00 cmp r3, #0 + 8002092: d106 bne.n 80020a2 { /* Allocate lock resource and initialize it */ hsram->Lock = HAL_UNLOCKED; - 8002100: 68fb ldr r3, [r7, #12] - 8002102: 2200 movs r2, #0 - 8002104: f883 2040 strb.w r2, [r3, #64] ; 0x40 + 8002094: 68fb ldr r3, [r7, #12] + 8002096: 2200 movs r2, #0 + 8002098: f883 2040 strb.w r2, [r3, #64] ; 0x40 /* Init the low level hardware */ hsram->MspInitCallback(hsram); #else /* Initialize the low level hardware (MSP) */ HAL_SRAM_MspInit(hsram); - 8002108: 68f8 ldr r0, [r7, #12] - 800210a: f7fe fad9 bl 80006c0 + 800209c: 68f8 ldr r0, [r7, #12] + 800209e: f7fe fb0f bl 80006c0 #endif } /* Initialize SRAM control Interface */ (void)FSMC_NORSRAM_Init(hsram->Instance, &(hsram->Init)); - 800210e: 68fb ldr r3, [r7, #12] - 8002110: 681a ldr r2, [r3, #0] - 8002112: 68fb ldr r3, [r7, #12] - 8002114: 3308 adds r3, #8 - 8002116: 4619 mov r1, r3 - 8002118: 4610 mov r0, r2 - 800211a: f000 f829 bl 8002170 + 80020a2: 68fb ldr r3, [r7, #12] + 80020a4: 681a ldr r2, [r3, #0] + 80020a6: 68fb ldr r3, [r7, #12] + 80020a8: 3308 adds r3, #8 + 80020aa: 4619 mov r1, r3 + 80020ac: 4610 mov r0, r2 + 80020ae: f000 f829 bl 8002104 /* Initialize SRAM timing Interface */ (void)FSMC_NORSRAM_Timing_Init(hsram->Instance, Timing, hsram->Init.NSBank); - 800211e: 68fb ldr r3, [r7, #12] - 8002120: 6818 ldr r0, [r3, #0] - 8002122: 68fb ldr r3, [r7, #12] - 8002124: 689b ldr r3, [r3, #8] - 8002126: 461a mov r2, r3 - 8002128: 68b9 ldr r1, [r7, #8] - 800212a: f000 f88b bl 8002244 + 80020b2: 68fb ldr r3, [r7, #12] + 80020b4: 6818 ldr r0, [r3, #0] + 80020b6: 68fb ldr r3, [r7, #12] + 80020b8: 689b ldr r3, [r3, #8] + 80020ba: 461a mov r2, r3 + 80020bc: 68b9 ldr r1, [r7, #8] + 80020be: f000 f88b bl 80021d8 /* Initialize SRAM extended mode timing Interface */ (void)FSMC_NORSRAM_Extended_Timing_Init(hsram->Extended, ExtTiming, hsram->Init.NSBank, - 800212e: 68fb ldr r3, [r7, #12] - 8002130: 6858 ldr r0, [r3, #4] - 8002132: 68fb ldr r3, [r7, #12] - 8002134: 689a ldr r2, [r3, #8] - 8002136: 68fb ldr r3, [r7, #12] - 8002138: 6b1b ldr r3, [r3, #48] ; 0x30 - 800213a: 6879 ldr r1, [r7, #4] - 800213c: f000 f8b6 bl 80022ac + 80020c2: 68fb ldr r3, [r7, #12] + 80020c4: 6858 ldr r0, [r3, #4] + 80020c6: 68fb ldr r3, [r7, #12] + 80020c8: 689a ldr r2, [r3, #8] + 80020ca: 68fb ldr r3, [r7, #12] + 80020cc: 6b1b ldr r3, [r3, #48] ; 0x30 + 80020ce: 6879 ldr r1, [r7, #4] + 80020d0: f000 f8b6 bl 8002240 hsram->Init.ExtendedMode); /* Enable the NORSRAM device */ __FSMC_NORSRAM_ENABLE(hsram->Instance, hsram->Init.NSBank); - 8002140: 68fb ldr r3, [r7, #12] - 8002142: 681b ldr r3, [r3, #0] - 8002144: 68fa ldr r2, [r7, #12] - 8002146: 6892 ldr r2, [r2, #8] - 8002148: f853 1022 ldr.w r1, [r3, r2, lsl #2] - 800214c: 68fb ldr r3, [r7, #12] - 800214e: 681b ldr r3, [r3, #0] - 8002150: 68fa ldr r2, [r7, #12] - 8002152: 6892 ldr r2, [r2, #8] - 8002154: f041 0101 orr.w r1, r1, #1 - 8002158: f843 1022 str.w r1, [r3, r2, lsl #2] + 80020d4: 68fb ldr r3, [r7, #12] + 80020d6: 681b ldr r3, [r3, #0] + 80020d8: 68fa ldr r2, [r7, #12] + 80020da: 6892 ldr r2, [r2, #8] + 80020dc: f853 1022 ldr.w r1, [r3, r2, lsl #2] + 80020e0: 68fb ldr r3, [r7, #12] + 80020e2: 681b ldr r3, [r3, #0] + 80020e4: 68fa ldr r2, [r7, #12] + 80020e6: 6892 ldr r2, [r2, #8] + 80020e8: f041 0101 orr.w r1, r1, #1 + 80020ec: f843 1022 str.w r1, [r3, r2, lsl #2] /* Initialize the SRAM controller state */ hsram->State = HAL_SRAM_STATE_READY; - 800215c: 68fb ldr r3, [r7, #12] - 800215e: 2201 movs r2, #1 - 8002160: f883 2041 strb.w r2, [r3, #65] ; 0x41 + 80020f0: 68fb ldr r3, [r7, #12] + 80020f2: 2201 movs r2, #1 + 80020f4: f883 2041 strb.w r2, [r3, #65] ; 0x41 return HAL_OK; - 8002164: 2300 movs r3, #0 + 80020f8: 2300 movs r3, #0 } - 8002166: 4618 mov r0, r3 - 8002168: 3710 adds r7, #16 - 800216a: 46bd mov sp, r7 - 800216c: bd80 pop {r7, pc} + 80020fa: 4618 mov r0, r3 + 80020fc: 3710 adds r7, #16 + 80020fe: 46bd mov sp, r7 + 8002100: bd80 pop {r7, pc} ... -08002170 : +08002104 : * @param Init Pointer to NORSRAM Initialization structure * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_InitTypeDef *Init) { - 8002170: b480 push {r7} - 8002172: b087 sub sp, #28 - 8002174: af00 add r7, sp, #0 - 8002176: 6078 str r0, [r7, #4] - 8002178: 6039 str r1, [r7, #0] + 8002104: b480 push {r7} + 8002106: b087 sub sp, #28 + 8002108: af00 add r7, sp, #0 + 800210a: 6078 str r0, [r7, #4] + 800210c: 6039 str r1, [r7, #0] assert_param(IS_FSMC_ASYNWAIT(Init->AsynchronousWait)); assert_param(IS_FSMC_WRITE_BURST(Init->WriteBurst)); assert_param(IS_FSMC_PAGESIZE(Init->PageSize)); /* Disable NORSRAM Device */ __FSMC_NORSRAM_DISABLE(Device, Init->NSBank); - 800217a: 683b ldr r3, [r7, #0] - 800217c: 681a ldr r2, [r3, #0] - 800217e: 687b ldr r3, [r7, #4] - 8002180: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 8002184: 683a ldr r2, [r7, #0] - 8002186: 6812 ldr r2, [r2, #0] - 8002188: f023 0101 bic.w r1, r3, #1 - 800218c: 687b ldr r3, [r7, #4] - 800218e: f843 1022 str.w r1, [r3, r2, lsl #2] + 800210e: 683b ldr r3, [r7, #0] + 8002110: 681a ldr r2, [r3, #0] + 8002112: 687b ldr r3, [r7, #4] + 8002114: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 8002118: 683a ldr r2, [r7, #0] + 800211a: 6812 ldr r2, [r2, #0] + 800211c: f023 0101 bic.w r1, r3, #1 + 8002120: 687b ldr r3, [r7, #4] + 8002122: f843 1022 str.w r1, [r3, r2, lsl #2] /* Set NORSRAM device control parameters */ if (Init->MemoryType == FSMC_MEMORY_TYPE_NOR) - 8002192: 683b ldr r3, [r7, #0] - 8002194: 689b ldr r3, [r3, #8] - 8002196: 2b08 cmp r3, #8 - 8002198: d102 bne.n 80021a0 + 8002126: 683b ldr r3, [r7, #0] + 8002128: 689b ldr r3, [r3, #8] + 800212a: 2b08 cmp r3, #8 + 800212c: d102 bne.n 8002134 { flashaccess = FSMC_NORSRAM_FLASH_ACCESS_ENABLE; - 800219a: 2340 movs r3, #64 ; 0x40 - 800219c: 617b str r3, [r7, #20] - 800219e: e001 b.n 80021a4 + 800212e: 2340 movs r3, #64 ; 0x40 + 8002130: 617b str r3, [r7, #20] + 8002132: e001 b.n 8002138 } else { flashaccess = FSMC_NORSRAM_FLASH_ACCESS_DISABLE; - 80021a0: 2300 movs r3, #0 - 80021a2: 617b str r3, [r7, #20] + 8002134: 2300 movs r3, #0 + 8002136: 617b str r3, [r7, #20] } btcr_reg = (flashaccess | \ Init->DataAddressMux | \ - 80021a4: 683b ldr r3, [r7, #0] - 80021a6: 685a ldr r2, [r3, #4] + 8002138: 683b ldr r3, [r7, #0] + 800213a: 685a ldr r2, [r3, #4] btcr_reg = (flashaccess | \ - 80021a8: 697b ldr r3, [r7, #20] - 80021aa: 431a orrs r2, r3 + 800213c: 697b ldr r3, [r7, #20] + 800213e: 431a orrs r2, r3 Init->MemoryType | \ - 80021ac: 683b ldr r3, [r7, #0] - 80021ae: 689b ldr r3, [r3, #8] + 8002140: 683b ldr r3, [r7, #0] + 8002142: 689b ldr r3, [r3, #8] Init->DataAddressMux | \ - 80021b0: 431a orrs r2, r3 + 8002144: 431a orrs r2, r3 Init->MemoryDataWidth | \ - 80021b2: 683b ldr r3, [r7, #0] - 80021b4: 68db ldr r3, [r3, #12] + 8002146: 683b ldr r3, [r7, #0] + 8002148: 68db ldr r3, [r3, #12] Init->MemoryType | \ - 80021b6: 431a orrs r2, r3 + 800214a: 431a orrs r2, r3 Init->BurstAccessMode | \ - 80021b8: 683b ldr r3, [r7, #0] - 80021ba: 691b ldr r3, [r3, #16] + 800214c: 683b ldr r3, [r7, #0] + 800214e: 691b ldr r3, [r3, #16] Init->MemoryDataWidth | \ - 80021bc: 431a orrs r2, r3 + 8002150: 431a orrs r2, r3 Init->WaitSignalPolarity | \ - 80021be: 683b ldr r3, [r7, #0] - 80021c0: 695b ldr r3, [r3, #20] + 8002152: 683b ldr r3, [r7, #0] + 8002154: 695b ldr r3, [r3, #20] Init->BurstAccessMode | \ - 80021c2: 431a orrs r2, r3 + 8002156: 431a orrs r2, r3 Init->WaitSignalActive | \ - 80021c4: 683b ldr r3, [r7, #0] - 80021c6: 69db ldr r3, [r3, #28] + 8002158: 683b ldr r3, [r7, #0] + 800215a: 69db ldr r3, [r3, #28] Init->WaitSignalPolarity | \ - 80021c8: 431a orrs r2, r3 + 800215c: 431a orrs r2, r3 Init->WriteOperation | \ - 80021ca: 683b ldr r3, [r7, #0] - 80021cc: 6a1b ldr r3, [r3, #32] + 800215e: 683b ldr r3, [r7, #0] + 8002160: 6a1b ldr r3, [r3, #32] Init->WaitSignalActive | \ - 80021ce: 431a orrs r2, r3 + 8002162: 431a orrs r2, r3 Init->WaitSignal | \ - 80021d0: 683b ldr r3, [r7, #0] - 80021d2: 6a5b ldr r3, [r3, #36] ; 0x24 + 8002164: 683b ldr r3, [r7, #0] + 8002166: 6a5b ldr r3, [r3, #36] ; 0x24 Init->WriteOperation | \ - 80021d4: 431a orrs r2, r3 + 8002168: 431a orrs r2, r3 Init->ExtendedMode | \ - 80021d6: 683b ldr r3, [r7, #0] - 80021d8: 6a9b ldr r3, [r3, #40] ; 0x28 + 800216a: 683b ldr r3, [r7, #0] + 800216c: 6a9b ldr r3, [r3, #40] ; 0x28 Init->WaitSignal | \ - 80021da: 431a orrs r2, r3 + 800216e: 431a orrs r2, r3 Init->AsynchronousWait | \ - 80021dc: 683b ldr r3, [r7, #0] - 80021de: 6adb ldr r3, [r3, #44] ; 0x2c + 8002170: 683b ldr r3, [r7, #0] + 8002172: 6adb ldr r3, [r3, #44] ; 0x2c Init->ExtendedMode | \ - 80021e0: 431a orrs r2, r3 + 8002174: 431a orrs r2, r3 Init->WriteBurst); - 80021e2: 683b ldr r3, [r7, #0] - 80021e4: 6b1b ldr r3, [r3, #48] ; 0x30 + 8002176: 683b ldr r3, [r7, #0] + 8002178: 6b1b ldr r3, [r3, #48] ; 0x30 btcr_reg = (flashaccess | \ - 80021e6: 4313 orrs r3, r2 - 80021e8: 613b str r3, [r7, #16] + 800217a: 4313 orrs r3, r2 + 800217c: 613b str r3, [r7, #16] btcr_reg |= Init->WrapMode; - 80021ea: 683b ldr r3, [r7, #0] - 80021ec: 699b ldr r3, [r3, #24] - 80021ee: 693a ldr r2, [r7, #16] - 80021f0: 4313 orrs r3, r2 - 80021f2: 613b str r3, [r7, #16] + 800217e: 683b ldr r3, [r7, #0] + 8002180: 699b ldr r3, [r3, #24] + 8002182: 693a ldr r2, [r7, #16] + 8002184: 4313 orrs r3, r2 + 8002186: 613b str r3, [r7, #16] btcr_reg |= Init->PageSize; - 80021f4: 683b ldr r3, [r7, #0] - 80021f6: 6b5b ldr r3, [r3, #52] ; 0x34 - 80021f8: 693a ldr r2, [r7, #16] - 80021fa: 4313 orrs r3, r2 - 80021fc: 613b str r3, [r7, #16] + 8002188: 683b ldr r3, [r7, #0] + 800218a: 6b5b ldr r3, [r3, #52] ; 0x34 + 800218c: 693a ldr r2, [r7, #16] + 800218e: 4313 orrs r3, r2 + 8002190: 613b str r3, [r7, #16] mask = (FSMC_BCRx_MBKEN | - 80021fe: 4b10 ldr r3, [pc, #64] ; (8002240 ) - 8002200: 60fb str r3, [r7, #12] + 8002192: 4b10 ldr r3, [pc, #64] ; (80021d4 ) + 8002194: 60fb str r3, [r7, #12] FSMC_BCRx_WAITEN | FSMC_BCRx_EXTMOD | FSMC_BCRx_ASYNCWAIT | FSMC_BCRx_CBURSTRW); mask |= FSMC_BCRx_WRAPMOD; - 8002202: 68fb ldr r3, [r7, #12] - 8002204: f443 6380 orr.w r3, r3, #1024 ; 0x400 - 8002208: 60fb str r3, [r7, #12] + 8002196: 68fb ldr r3, [r7, #12] + 8002198: f443 6380 orr.w r3, r3, #1024 ; 0x400 + 800219c: 60fb str r3, [r7, #12] mask |= 0x00070000U; /* CPSIZE to be defined in CMSIS file */ - 800220a: 68fb ldr r3, [r7, #12] - 800220c: f443 23e0 orr.w r3, r3, #458752 ; 0x70000 - 8002210: 60fb str r3, [r7, #12] + 800219e: 68fb ldr r3, [r7, #12] + 80021a0: f443 23e0 orr.w r3, r3, #458752 ; 0x70000 + 80021a4: 60fb str r3, [r7, #12] MODIFY_REG(Device->BTCR[Init->NSBank], mask, btcr_reg); - 8002212: 683b ldr r3, [r7, #0] - 8002214: 681a ldr r2, [r3, #0] - 8002216: 687b ldr r3, [r7, #4] - 8002218: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 800221c: 68fb ldr r3, [r7, #12] - 800221e: 43db mvns r3, r3 - 8002220: ea02 0103 and.w r1, r2, r3 - 8002224: 683b ldr r3, [r7, #0] - 8002226: 681a ldr r2, [r3, #0] - 8002228: 693b ldr r3, [r7, #16] - 800222a: 4319 orrs r1, r3 - 800222c: 687b ldr r3, [r7, #4] - 800222e: f843 1022 str.w r1, [r3, r2, lsl #2] + 80021a6: 683b ldr r3, [r7, #0] + 80021a8: 681a ldr r2, [r3, #0] + 80021aa: 687b ldr r3, [r7, #4] + 80021ac: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 80021b0: 68fb ldr r3, [r7, #12] + 80021b2: 43db mvns r3, r3 + 80021b4: ea02 0103 and.w r1, r2, r3 + 80021b8: 683b ldr r3, [r7, #0] + 80021ba: 681a ldr r2, [r3, #0] + 80021bc: 693b ldr r3, [r7, #16] + 80021be: 4319 orrs r1, r3 + 80021c0: 687b ldr r3, [r7, #4] + 80021c2: f843 1022 str.w r1, [r3, r2, lsl #2] return HAL_OK; - 8002232: 2300 movs r3, #0 + 80021c6: 2300 movs r3, #0 } - 8002234: 4618 mov r0, r3 - 8002236: 371c adds r7, #28 - 8002238: 46bd mov sp, r7 - 800223a: bc80 pop {r7} - 800223c: 4770 bx lr - 800223e: bf00 nop - 8002240: 0008fb7f .word 0x0008fb7f + 80021c8: 4618 mov r0, r3 + 80021ca: 371c adds r7, #28 + 80021cc: 46bd mov sp, r7 + 80021ce: bc80 pop {r7} + 80021d0: 4770 bx lr + 80021d2: bf00 nop + 80021d4: 0008fb7f .word 0x0008fb7f -08002244 : +080021d8 : * @param Bank NORSRAM bank number * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Timing_Init(FSMC_NORSRAM_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank) { - 8002244: b480 push {r7} - 8002246: b085 sub sp, #20 - 8002248: af00 add r7, sp, #0 - 800224a: 60f8 str r0, [r7, #12] - 800224c: 60b9 str r1, [r7, #8] - 800224e: 607a str r2, [r7, #4] + 80021d8: b480 push {r7} + 80021da: b085 sub sp, #20 + 80021dc: af00 add r7, sp, #0 + 80021de: 60f8 str r0, [r7, #12] + 80021e0: 60b9 str r1, [r7, #8] + 80021e2: 607a str r2, [r7, #4] assert_param(IS_FSMC_DATA_LATENCY(Timing->DataLatency)); assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode)); assert_param(IS_FSMC_NORSRAM_BANK(Bank)); /* Set FSMC_NORSRAM device timing parameters */ MODIFY_REG(Device->BTCR[Bank + 1U], BTR_CLEAR_MASK, (Timing->AddressSetupTime | - 8002250: 687b ldr r3, [r7, #4] - 8002252: 1c5a adds r2, r3, #1 - 8002254: 68fb ldr r3, [r7, #12] - 8002256: f853 3022 ldr.w r3, [r3, r2, lsl #2] - 800225a: f003 4140 and.w r1, r3, #3221225472 ; 0xc0000000 - 800225e: 68bb ldr r3, [r7, #8] - 8002260: 681a ldr r2, [r3, #0] - 8002262: 68bb ldr r3, [r7, #8] - 8002264: 685b ldr r3, [r3, #4] - 8002266: 011b lsls r3, r3, #4 - 8002268: 431a orrs r2, r3 - 800226a: 68bb ldr r3, [r7, #8] - 800226c: 689b ldr r3, [r3, #8] - 800226e: 021b lsls r3, r3, #8 - 8002270: 431a orrs r2, r3 - 8002272: 68bb ldr r3, [r7, #8] - 8002274: 68db ldr r3, [r3, #12] - 8002276: 041b lsls r3, r3, #16 - 8002278: 431a orrs r2, r3 - 800227a: 68bb ldr r3, [r7, #8] - 800227c: 691b ldr r3, [r3, #16] - 800227e: 3b01 subs r3, #1 - 8002280: 051b lsls r3, r3, #20 - 8002282: 431a orrs r2, r3 - 8002284: 68bb ldr r3, [r7, #8] - 8002286: 695b ldr r3, [r3, #20] - 8002288: 3b02 subs r3, #2 - 800228a: 061b lsls r3, r3, #24 - 800228c: 431a orrs r2, r3 - 800228e: 68bb ldr r3, [r7, #8] - 8002290: 699b ldr r3, [r3, #24] - 8002292: 4313 orrs r3, r2 - 8002294: 687a ldr r2, [r7, #4] - 8002296: 3201 adds r2, #1 - 8002298: 4319 orrs r1, r3 - 800229a: 68fb ldr r3, [r7, #12] - 800229c: f843 1022 str.w r1, [r3, r2, lsl #2] + 80021e4: 687b ldr r3, [r7, #4] + 80021e6: 1c5a adds r2, r3, #1 + 80021e8: 68fb ldr r3, [r7, #12] + 80021ea: f853 3022 ldr.w r3, [r3, r2, lsl #2] + 80021ee: f003 4140 and.w r1, r3, #3221225472 ; 0xc0000000 + 80021f2: 68bb ldr r3, [r7, #8] + 80021f4: 681a ldr r2, [r3, #0] + 80021f6: 68bb ldr r3, [r7, #8] + 80021f8: 685b ldr r3, [r3, #4] + 80021fa: 011b lsls r3, r3, #4 + 80021fc: 431a orrs r2, r3 + 80021fe: 68bb ldr r3, [r7, #8] + 8002200: 689b ldr r3, [r3, #8] + 8002202: 021b lsls r3, r3, #8 + 8002204: 431a orrs r2, r3 + 8002206: 68bb ldr r3, [r7, #8] + 8002208: 68db ldr r3, [r3, #12] + 800220a: 041b lsls r3, r3, #16 + 800220c: 431a orrs r2, r3 + 800220e: 68bb ldr r3, [r7, #8] + 8002210: 691b ldr r3, [r3, #16] + 8002212: 3b01 subs r3, #1 + 8002214: 051b lsls r3, r3, #20 + 8002216: 431a orrs r2, r3 + 8002218: 68bb ldr r3, [r7, #8] + 800221a: 695b ldr r3, [r3, #20] + 800221c: 3b02 subs r3, #2 + 800221e: 061b lsls r3, r3, #24 + 8002220: 431a orrs r2, r3 + 8002222: 68bb ldr r3, [r7, #8] + 8002224: 699b ldr r3, [r3, #24] + 8002226: 4313 orrs r3, r2 + 8002228: 687a ldr r2, [r7, #4] + 800222a: 3201 adds r2, #1 + 800222c: 4319 orrs r1, r3 + 800222e: 68fb ldr r3, [r7, #12] + 8002230: f843 1022 str.w r1, [r3, r2, lsl #2] ((Timing->BusTurnAroundDuration) << FSMC_BTRx_BUSTURN_Pos) | (((Timing->CLKDivision) - 1U) << FSMC_BTRx_CLKDIV_Pos) | (((Timing->DataLatency) - 2U) << FSMC_BTRx_DATLAT_Pos) | (Timing->AccessMode))); return HAL_OK; - 80022a0: 2300 movs r3, #0 + 8002234: 2300 movs r3, #0 } - 80022a2: 4618 mov r0, r3 - 80022a4: 3714 adds r7, #20 - 80022a6: 46bd mov sp, r7 - 80022a8: bc80 pop {r7} - 80022aa: 4770 bx lr + 8002236: 4618 mov r0, r3 + 8002238: 3714 adds r7, #20 + 800223a: 46bd mov sp, r7 + 800223c: bc80 pop {r7} + 800223e: 4770 bx lr -080022ac : +08002240 : * @arg FSMC_EXTENDED_MODE_ENABLE * @retval HAL status */ HAL_StatusTypeDef FSMC_NORSRAM_Extended_Timing_Init(FSMC_NORSRAM_EXTENDED_TypeDef *Device, FSMC_NORSRAM_TimingTypeDef *Timing, uint32_t Bank, uint32_t ExtendedMode) { - 80022ac: b480 push {r7} - 80022ae: b085 sub sp, #20 - 80022b0: af00 add r7, sp, #0 - 80022b2: 60f8 str r0, [r7, #12] - 80022b4: 60b9 str r1, [r7, #8] - 80022b6: 607a str r2, [r7, #4] - 80022b8: 603b str r3, [r7, #0] + 8002240: b480 push {r7} + 8002242: b085 sub sp, #20 + 8002244: af00 add r7, sp, #0 + 8002246: 60f8 str r0, [r7, #12] + 8002248: 60b9 str r1, [r7, #8] + 800224a: 607a str r2, [r7, #4] + 800224c: 603b str r3, [r7, #0] /* Check the parameters */ assert_param(IS_FSMC_EXTENDED_MODE(ExtendedMode)); /* Set NORSRAM device timing register for write configuration, if extended mode is used */ if (ExtendedMode == FSMC_EXTENDED_MODE_ENABLE) - 80022ba: 683b ldr r3, [r7, #0] - 80022bc: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 - 80022c0: d11d bne.n 80022fe + 800224e: 683b ldr r3, [r7, #0] + 8002250: f5b3 4f80 cmp.w r3, #16384 ; 0x4000 + 8002254: d11d bne.n 8002292 assert_param(IS_FSMC_ACCESS_MODE(Timing->AccessMode)); assert_param(IS_FSMC_NORSRAM_BANK(Bank)); /* Set NORSRAM device timing register for write configuration, if extended mode is used */ #if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) MODIFY_REG(Device->BWTR[Bank], BWTR_CLEAR_MASK, (Timing->AddressSetupTime | - 80022c2: 68fb ldr r3, [r7, #12] - 80022c4: 687a ldr r2, [r7, #4] - 80022c6: f853 2022 ldr.w r2, [r3, r2, lsl #2] - 80022ca: 4b13 ldr r3, [pc, #76] ; (8002318 ) - 80022cc: 4013 ands r3, r2 - 80022ce: 68ba ldr r2, [r7, #8] - 80022d0: 6811 ldr r1, [r2, #0] - 80022d2: 68ba ldr r2, [r7, #8] - 80022d4: 6852 ldr r2, [r2, #4] - 80022d6: 0112 lsls r2, r2, #4 - 80022d8: 4311 orrs r1, r2 - 80022da: 68ba ldr r2, [r7, #8] - 80022dc: 6892 ldr r2, [r2, #8] - 80022de: 0212 lsls r2, r2, #8 - 80022e0: 4311 orrs r1, r2 - 80022e2: 68ba ldr r2, [r7, #8] - 80022e4: 6992 ldr r2, [r2, #24] - 80022e6: 4311 orrs r1, r2 - 80022e8: 68ba ldr r2, [r7, #8] - 80022ea: 68d2 ldr r2, [r2, #12] - 80022ec: 0412 lsls r2, r2, #16 - 80022ee: 430a orrs r2, r1 - 80022f0: ea43 0102 orr.w r1, r3, r2 - 80022f4: 68fb ldr r3, [r7, #12] - 80022f6: 687a ldr r2, [r7, #4] - 80022f8: f843 1022 str.w r1, [r3, r2, lsl #2] - 80022fc: e005 b.n 800230a + 8002256: 68fb ldr r3, [r7, #12] + 8002258: 687a ldr r2, [r7, #4] + 800225a: f853 2022 ldr.w r2, [r3, r2, lsl #2] + 800225e: 4b13 ldr r3, [pc, #76] ; (80022ac ) + 8002260: 4013 ands r3, r2 + 8002262: 68ba ldr r2, [r7, #8] + 8002264: 6811 ldr r1, [r2, #0] + 8002266: 68ba ldr r2, [r7, #8] + 8002268: 6852 ldr r2, [r2, #4] + 800226a: 0112 lsls r2, r2, #4 + 800226c: 4311 orrs r1, r2 + 800226e: 68ba ldr r2, [r7, #8] + 8002270: 6892 ldr r2, [r2, #8] + 8002272: 0212 lsls r2, r2, #8 + 8002274: 4311 orrs r1, r2 + 8002276: 68ba ldr r2, [r7, #8] + 8002278: 6992 ldr r2, [r2, #24] + 800227a: 4311 orrs r1, r2 + 800227c: 68ba ldr r2, [r7, #8] + 800227e: 68d2 ldr r2, [r2, #12] + 8002280: 0412 lsls r2, r2, #16 + 8002282: 430a orrs r2, r1 + 8002284: ea43 0102 orr.w r1, r3, r2 + 8002288: 68fb ldr r3, [r7, #12] + 800228a: 687a ldr r2, [r7, #4] + 800228c: f843 1022 str.w r1, [r3, r2, lsl #2] + 8002290: e005 b.n 800229e (((Timing->DataLatency) - 2U) << FSMC_BWTRx_DATLAT_Pos))); #endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG */ } else { Device->BWTR[Bank] = 0x0FFFFFFFU; - 80022fe: 68fb ldr r3, [r7, #12] - 8002300: 687a ldr r2, [r7, #4] - 8002302: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 - 8002306: f843 1022 str.w r1, [r3, r2, lsl #2] + 8002292: 68fb ldr r3, [r7, #12] + 8002294: 687a ldr r2, [r7, #4] + 8002296: f06f 4170 mvn.w r1, #4026531840 ; 0xf0000000 + 800229a: f843 1022 str.w r1, [r3, r2, lsl #2] } return HAL_OK; - 800230a: 2300 movs r3, #0 + 800229e: 2300 movs r3, #0 } - 800230c: 4618 mov r0, r3 - 800230e: 3714 adds r7, #20 - 8002310: 46bd mov sp, r7 - 8002312: bc80 pop {r7} - 8002314: 4770 bx lr - 8002316: bf00 nop - 8002318: cff00000 .word 0xcff00000 + 80022a0: 4618 mov r0, r3 + 80022a2: 3714 adds r7, #20 + 80022a4: 46bd mov sp, r7 + 80022a6: bc80 pop {r7} + 80022a8: 4770 bx lr + 80022aa: bf00 nop + 80022ac: cff00000 .word 0xcff00000 -0800231c : +080022b0 : /* USER CODE BEGIN Variables */ /* USER CODE END Variables */ void MX_FATFS_Init(void) { - 800231c: b580 push {r7, lr} - 800231e: af00 add r7, sp, #0 + 80022b0: b580 push {r7, lr} + 80022b2: af00 add r7, sp, #0 /*## FatFS: Link the USER driver ###########################*/ retUSER = FATFS_LinkDriver(&USER_Driver, USERPath); - 8002320: 4904 ldr r1, [pc, #16] ; (8002334 ) - 8002322: 4805 ldr r0, [pc, #20] ; (8002338 ) - 8002324: f002 fa02 bl 800472c - 8002328: 4603 mov r3, r0 - 800232a: 461a mov r2, r3 - 800232c: 4b03 ldr r3, [pc, #12] ; (800233c ) - 800232e: 701a strb r2, [r3, #0] + 80022b4: 4904 ldr r1, [pc, #16] ; (80022c8 ) + 80022b6: 4805 ldr r0, [pc, #20] ; (80022cc ) + 80022b8: f002 fa02 bl 80046c0 + 80022bc: 4603 mov r3, r0 + 80022be: 461a mov r2, r3 + 80022c0: 4b03 ldr r3, [pc, #12] ; (80022d0 ) + 80022c2: 701a strb r2, [r3, #0] /* USER CODE BEGIN Init */ /* additional user code for init */ /* USER CODE END Init */ } - 8002330: bf00 nop - 8002332: bd80 pop {r7, pc} - 8002334: 20000188 .word 0x20000188 - 8002338: 2000000c .word 0x2000000c - 800233c: 2000018c .word 0x2000018c + 80022c4: bf00 nop + 80022c6: bd80 pop {r7, pc} + 80022c8: 20000118 .word 0x20000118 + 80022cc: 2000000c .word 0x2000000c + 80022d0: 2000011c .word 0x2000011c -08002340 : +080022d4 : * @brief Gets Time from RTC * @param None * @retval Time in DWORD */ DWORD get_fattime(void) { - 8002340: b480 push {r7} - 8002342: af00 add r7, sp, #0 + 80022d4: b480 push {r7} + 80022d6: af00 add r7, sp, #0 /* USER CODE BEGIN get_fattime */ return 0; - 8002344: 2300 movs r3, #0 + 80022d8: 2300 movs r3, #0 /* USER CODE END get_fattime */ } - 8002346: 4618 mov r0, r3 - 8002348: 46bd mov sp, r7 - 800234a: bc80 pop {r7} - 800234c: 4770 bx lr + 80022da: 4618 mov r0, r3 + 80022dc: 46bd mov sp, r7 + 80022de: bc80 pop {r7} + 80022e0: 4770 bx lr ... -08002350 : +080022e4 : * @retval DSTATUS: Operation status */ DSTATUS USER_initialize ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 8002350: b580 push {r7, lr} - 8002352: b082 sub sp, #8 - 8002354: af00 add r7, sp, #0 - 8002356: 4603 mov r3, r0 - 8002358: 71fb strb r3, [r7, #7] + 80022e4: b580 push {r7, lr} + 80022e6: b082 sub sp, #8 + 80022e8: af00 add r7, sp, #0 + 80022ea: 4603 mov r3, r0 + 80022ec: 71fb strb r3, [r7, #7] /* USER CODE BEGIN INIT */ Stat = SD_disk_initialize(pdrv); - 800235a: 79fb ldrb r3, [r7, #7] - 800235c: 4618 mov r0, r3 - 800235e: f002 fc45 bl 8004bec - 8002362: 4603 mov r3, r0 - 8002364: 461a mov r2, r3 - 8002366: 4b04 ldr r3, [pc, #16] ; (8002378 ) - 8002368: 701a strb r2, [r3, #0] + 80022ee: 79fb ldrb r3, [r7, #7] + 80022f0: 4618 mov r0, r3 + 80022f2: f002 fc3d bl 8004b70 + 80022f6: 4603 mov r3, r0 + 80022f8: 461a mov r2, r3 + 80022fa: 4b04 ldr r3, [pc, #16] ; (800230c ) + 80022fc: 701a strb r2, [r3, #0] return Stat; - 800236a: 4b03 ldr r3, [pc, #12] ; (8002378 ) - 800236c: 781b ldrb r3, [r3, #0] - 800236e: b2db uxtb r3, r3 + 80022fe: 4b03 ldr r3, [pc, #12] ; (800230c ) + 8002300: 781b ldrb r3, [r3, #0] + 8002302: b2db uxtb r3, r3 /* USER CODE END INIT */ } - 8002370: 4618 mov r0, r3 - 8002372: 3708 adds r7, #8 - 8002374: 46bd mov sp, r7 - 8002376: bd80 pop {r7, pc} - 8002378: 20000009 .word 0x20000009 + 8002304: 4618 mov r0, r3 + 8002306: 3708 adds r7, #8 + 8002308: 46bd mov sp, r7 + 800230a: bd80 pop {r7, pc} + 800230c: 20000009 .word 0x20000009 -0800237c : +08002310 : * @retval DSTATUS: Operation status */ DSTATUS USER_status ( BYTE pdrv /* Physical drive number to identify the drive */ ) { - 800237c: b580 push {r7, lr} - 800237e: b082 sub sp, #8 - 8002380: af00 add r7, sp, #0 - 8002382: 4603 mov r3, r0 - 8002384: 71fb strb r3, [r7, #7] + 8002310: b580 push {r7, lr} + 8002312: b082 sub sp, #8 + 8002314: af00 add r7, sp, #0 + 8002316: 4603 mov r3, r0 + 8002318: 71fb strb r3, [r7, #7] /* USER CODE BEGIN STATUS */ Stat = SD_disk_status (pdrv); - 8002386: 79fb ldrb r3, [r7, #7] - 8002388: 4618 mov r0, r3 - 800238a: f002 fd19 bl 8004dc0 - 800238e: 4603 mov r3, r0 - 8002390: 461a mov r2, r3 - 8002392: 4b04 ldr r3, [pc, #16] ; (80023a4 ) - 8002394: 701a strb r2, [r3, #0] + 800231a: 79fb ldrb r3, [r7, #7] + 800231c: 4618 mov r0, r3 + 800231e: f002 fd11 bl 8004d44 + 8002322: 4603 mov r3, r0 + 8002324: 461a mov r2, r3 + 8002326: 4b04 ldr r3, [pc, #16] ; (8002338 ) + 8002328: 701a strb r2, [r3, #0] return Stat; - 8002396: 4b03 ldr r3, [pc, #12] ; (80023a4 ) - 8002398: 781b ldrb r3, [r3, #0] - 800239a: b2db uxtb r3, r3 + 800232a: 4b03 ldr r3, [pc, #12] ; (8002338 ) + 800232c: 781b ldrb r3, [r3, #0] + 800232e: b2db uxtb r3, r3 /* USER CODE END STATUS */ } - 800239c: 4618 mov r0, r3 - 800239e: 3708 adds r7, #8 - 80023a0: 46bd mov sp, r7 - 80023a2: bd80 pop {r7, pc} - 80023a4: 20000009 .word 0x20000009 + 8002330: 4618 mov r0, r3 + 8002332: 3708 adds r7, #8 + 8002334: 46bd mov sp, r7 + 8002336: bd80 pop {r7, pc} + 8002338: 20000009 .word 0x20000009 -080023a8 : +0800233c : BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { - 80023a8: b580 push {r7, lr} - 80023aa: b084 sub sp, #16 - 80023ac: af00 add r7, sp, #0 - 80023ae: 60b9 str r1, [r7, #8] - 80023b0: 607a str r2, [r7, #4] - 80023b2: 603b str r3, [r7, #0] - 80023b4: 4603 mov r3, r0 - 80023b6: 73fb strb r3, [r7, #15] + 800233c: b580 push {r7, lr} + 800233e: b084 sub sp, #16 + 8002340: af00 add r7, sp, #0 + 8002342: 60b9 str r1, [r7, #8] + 8002344: 607a str r2, [r7, #4] + 8002346: 603b str r3, [r7, #0] + 8002348: 4603 mov r3, r0 + 800234a: 73fb strb r3, [r7, #15] /* USER CODE BEGIN READ */ return SD_disk_read (pdrv, buff, sector, count); - 80023b8: 7bf8 ldrb r0, [r7, #15] - 80023ba: 683b ldr r3, [r7, #0] - 80023bc: 687a ldr r2, [r7, #4] - 80023be: 68b9 ldr r1, [r7, #8] - 80023c0: f002 fd12 bl 8004de8 - 80023c4: 4603 mov r3, r0 + 800234c: 7bf8 ldrb r0, [r7, #15] + 800234e: 683b ldr r3, [r7, #0] + 8002350: 687a ldr r2, [r7, #4] + 8002352: 68b9 ldr r1, [r7, #8] + 8002354: f002 fd0a bl 8004d6c + 8002358: 4603 mov r3, r0 /* USER CODE END READ */ } - 80023c6: 4618 mov r0, r3 - 80023c8: 3710 adds r7, #16 - 80023ca: 46bd mov sp, r7 - 80023cc: bd80 pop {r7, pc} + 800235a: 4618 mov r0, r3 + 800235c: 3710 adds r7, #16 + 800235e: 46bd mov sp, r7 + 8002360: bd80 pop {r7, pc} -080023ce : +08002362 : BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { - 80023ce: b580 push {r7, lr} - 80023d0: b084 sub sp, #16 - 80023d2: af00 add r7, sp, #0 - 80023d4: 60b9 str r1, [r7, #8] - 80023d6: 607a str r2, [r7, #4] - 80023d8: 603b str r3, [r7, #0] - 80023da: 4603 mov r3, r0 - 80023dc: 73fb strb r3, [r7, #15] + 8002362: b580 push {r7, lr} + 8002364: b084 sub sp, #16 + 8002366: af00 add r7, sp, #0 + 8002368: 60b9 str r1, [r7, #8] + 800236a: 607a str r2, [r7, #4] + 800236c: 603b str r3, [r7, #0] + 800236e: 4603 mov r3, r0 + 8002370: 73fb strb r3, [r7, #15] /* USER CODE BEGIN WRITE */ /* USER CODE HERE */ return SD_disk_write (pdrv, buff, sector, count); - 80023de: 7bf8 ldrb r0, [r7, #15] - 80023e0: 683b ldr r3, [r7, #0] - 80023e2: 687a ldr r2, [r7, #4] - 80023e4: 68b9 ldr r1, [r7, #8] - 80023e6: f002 fd69 bl 8004ebc - 80023ea: 4603 mov r3, r0 + 8002372: 7bf8 ldrb r0, [r7, #15] + 8002374: 683b ldr r3, [r7, #0] + 8002376: 687a ldr r2, [r7, #4] + 8002378: 68b9 ldr r1, [r7, #8] + 800237a: f002 fd61 bl 8004e40 + 800237e: 4603 mov r3, r0 /* USER CODE END WRITE */ } - 80023ec: 4618 mov r0, r3 - 80023ee: 3710 adds r7, #16 - 80023f0: 46bd mov sp, r7 - 80023f2: bd80 pop {r7, pc} + 8002380: 4618 mov r0, r3 + 8002382: 3710 adds r7, #16 + 8002384: 46bd mov sp, r7 + 8002386: bd80 pop {r7, pc} -080023f4 : +08002388 : DRESULT USER_ioctl ( BYTE pdrv, /* Physical drive nmuber (0..) */ BYTE cmd, /* Control code */ void *buff /* Buffer to send/receive control data */ ) { - 80023f4: b580 push {r7, lr} - 80023f6: b084 sub sp, #16 - 80023f8: af00 add r7, sp, #0 - 80023fa: 4603 mov r3, r0 - 80023fc: 603a str r2, [r7, #0] - 80023fe: 71fb strb r3, [r7, #7] - 8002400: 460b mov r3, r1 - 8002402: 71bb strb r3, [r7, #6] + 8002388: b580 push {r7, lr} + 800238a: b084 sub sp, #16 + 800238c: af00 add r7, sp, #0 + 800238e: 4603 mov r3, r0 + 8002390: 603a str r2, [r7, #0] + 8002392: 71fb strb r3, [r7, #7] + 8002394: 460b mov r3, r1 + 8002396: 71bb strb r3, [r7, #6] /* USER CODE BEGIN IOCTL */ DRESULT res = SD_disk_ioctl (pdrv, cmd, buff); - 8002404: 79b9 ldrb r1, [r7, #6] - 8002406: 79fb ldrb r3, [r7, #7] - 8002408: 683a ldr r2, [r7, #0] - 800240a: 4618 mov r0, r3 - 800240c: f002 fdda bl 8004fc4 - 8002410: 4603 mov r3, r0 - 8002412: 73fb strb r3, [r7, #15] + 8002398: 79b9 ldrb r1, [r7, #6] + 800239a: 79fb ldrb r3, [r7, #7] + 800239c: 683a ldr r2, [r7, #0] + 800239e: 4618 mov r0, r3 + 80023a0: f002 fdd2 bl 8004f48 + 80023a4: 4603 mov r3, r0 + 80023a6: 73fb strb r3, [r7, #15] return res; - 8002414: 7bfb ldrb r3, [r7, #15] + 80023a8: 7bfb ldrb r3, [r7, #15] /* USER CODE END IOCTL */ } - 8002416: 4618 mov r0, r3 - 8002418: 3710 adds r7, #16 - 800241a: 46bd mov sp, r7 - 800241c: bd80 pop {r7, pc} + 80023aa: 4618 mov r0, r3 + 80023ac: 3710 adds r7, #16 + 80023ae: 46bd mov sp, r7 + 80023b0: bd80 pop {r7, pc} ... -08002420 : +080023b4 : * @retval DSTATUS: Operation status */ DSTATUS disk_status ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 8002420: b580 push {r7, lr} - 8002422: b084 sub sp, #16 - 8002424: af00 add r7, sp, #0 - 8002426: 4603 mov r3, r0 - 8002428: 71fb strb r3, [r7, #7] + 80023b4: b580 push {r7, lr} + 80023b6: b084 sub sp, #16 + 80023b8: af00 add r7, sp, #0 + 80023ba: 4603 mov r3, r0 + 80023bc: 71fb strb r3, [r7, #7] DSTATUS stat; stat = disk.drv[pdrv]->disk_status(disk.lun[pdrv]); - 800242a: 79fb ldrb r3, [r7, #7] - 800242c: 4a08 ldr r2, [pc, #32] ; (8002450 ) - 800242e: 009b lsls r3, r3, #2 - 8002430: 4413 add r3, r2 - 8002432: 685b ldr r3, [r3, #4] - 8002434: 685b ldr r3, [r3, #4] - 8002436: 79fa ldrb r2, [r7, #7] - 8002438: 4905 ldr r1, [pc, #20] ; (8002450 ) - 800243a: 440a add r2, r1 - 800243c: 7a12 ldrb r2, [r2, #8] - 800243e: 4610 mov r0, r2 - 8002440: 4798 blx r3 - 8002442: 4603 mov r3, r0 - 8002444: 73fb strb r3, [r7, #15] + 80023be: 79fb ldrb r3, [r7, #7] + 80023c0: 4a08 ldr r2, [pc, #32] ; (80023e4 ) + 80023c2: 009b lsls r3, r3, #2 + 80023c4: 4413 add r3, r2 + 80023c6: 685b ldr r3, [r3, #4] + 80023c8: 685b ldr r3, [r3, #4] + 80023ca: 79fa ldrb r2, [r7, #7] + 80023cc: 4905 ldr r1, [pc, #20] ; (80023e4 ) + 80023ce: 440a add r2, r1 + 80023d0: 7a12 ldrb r2, [r2, #8] + 80023d2: 4610 mov r0, r2 + 80023d4: 4798 blx r3 + 80023d6: 4603 mov r3, r0 + 80023d8: 73fb strb r3, [r7, #15] return stat; - 8002446: 7bfb ldrb r3, [r7, #15] + 80023da: 7bfb ldrb r3, [r7, #15] } - 8002448: 4618 mov r0, r3 - 800244a: 3710 adds r7, #16 - 800244c: 46bd mov sp, r7 - 800244e: bd80 pop {r7, pc} - 8002450: 200000cc .word 0x200000cc + 80023dc: 4618 mov r0, r3 + 80023de: 3710 adds r7, #16 + 80023e0: 46bd mov sp, r7 + 80023e2: bd80 pop {r7, pc} + 80023e4: 20000064 .word 0x20000064 -08002454 : +080023e8 : * @retval DSTATUS: Operation status */ DSTATUS disk_initialize ( BYTE pdrv /* Physical drive nmuber to identify the drive */ ) { - 8002454: b580 push {r7, lr} - 8002456: b084 sub sp, #16 - 8002458: af00 add r7, sp, #0 - 800245a: 4603 mov r3, r0 - 800245c: 71fb strb r3, [r7, #7] + 80023e8: b580 push {r7, lr} + 80023ea: b084 sub sp, #16 + 80023ec: af00 add r7, sp, #0 + 80023ee: 4603 mov r3, r0 + 80023f0: 71fb strb r3, [r7, #7] DSTATUS stat = RES_OK; - 800245e: 2300 movs r3, #0 - 8002460: 73fb strb r3, [r7, #15] + 80023f2: 2300 movs r3, #0 + 80023f4: 73fb strb r3, [r7, #15] if(disk.is_initialized[pdrv] == 0) - 8002462: 79fb ldrb r3, [r7, #7] - 8002464: 4a0d ldr r2, [pc, #52] ; (800249c ) - 8002466: 5cd3 ldrb r3, [r2, r3] - 8002468: 2b00 cmp r3, #0 - 800246a: d111 bne.n 8002490 + 80023f6: 79fb ldrb r3, [r7, #7] + 80023f8: 4a0d ldr r2, [pc, #52] ; (8002430 ) + 80023fa: 5cd3 ldrb r3, [r2, r3] + 80023fc: 2b00 cmp r3, #0 + 80023fe: d111 bne.n 8002424 { disk.is_initialized[pdrv] = 1; - 800246c: 79fb ldrb r3, [r7, #7] - 800246e: 4a0b ldr r2, [pc, #44] ; (800249c ) - 8002470: 2101 movs r1, #1 - 8002472: 54d1 strb r1, [r2, r3] + 8002400: 79fb ldrb r3, [r7, #7] + 8002402: 4a0b ldr r2, [pc, #44] ; (8002430 ) + 8002404: 2101 movs r1, #1 + 8002406: 54d1 strb r1, [r2, r3] stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]); - 8002474: 79fb ldrb r3, [r7, #7] - 8002476: 4a09 ldr r2, [pc, #36] ; (800249c ) - 8002478: 009b lsls r3, r3, #2 - 800247a: 4413 add r3, r2 - 800247c: 685b ldr r3, [r3, #4] - 800247e: 681b ldr r3, [r3, #0] - 8002480: 79fa ldrb r2, [r7, #7] - 8002482: 4906 ldr r1, [pc, #24] ; (800249c ) - 8002484: 440a add r2, r1 - 8002486: 7a12 ldrb r2, [r2, #8] - 8002488: 4610 mov r0, r2 - 800248a: 4798 blx r3 - 800248c: 4603 mov r3, r0 - 800248e: 73fb strb r3, [r7, #15] + 8002408: 79fb ldrb r3, [r7, #7] + 800240a: 4a09 ldr r2, [pc, #36] ; (8002430 ) + 800240c: 009b lsls r3, r3, #2 + 800240e: 4413 add r3, r2 + 8002410: 685b ldr r3, [r3, #4] + 8002412: 681b ldr r3, [r3, #0] + 8002414: 79fa ldrb r2, [r7, #7] + 8002416: 4906 ldr r1, [pc, #24] ; (8002430 ) + 8002418: 440a add r2, r1 + 800241a: 7a12 ldrb r2, [r2, #8] + 800241c: 4610 mov r0, r2 + 800241e: 4798 blx r3 + 8002420: 4603 mov r3, r0 + 8002422: 73fb strb r3, [r7, #15] } return stat; - 8002490: 7bfb ldrb r3, [r7, #15] + 8002424: 7bfb ldrb r3, [r7, #15] } - 8002492: 4618 mov r0, r3 - 8002494: 3710 adds r7, #16 - 8002496: 46bd mov sp, r7 - 8002498: bd80 pop {r7, pc} - 800249a: bf00 nop - 800249c: 200000cc .word 0x200000cc + 8002426: 4618 mov r0, r3 + 8002428: 3710 adds r7, #16 + 800242a: 46bd mov sp, r7 + 800242c: bd80 pop {r7, pc} + 800242e: bf00 nop + 8002430: 20000064 .word 0x20000064 -080024a0 : +08002434 : BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { - 80024a0: b590 push {r4, r7, lr} - 80024a2: b087 sub sp, #28 - 80024a4: af00 add r7, sp, #0 - 80024a6: 60b9 str r1, [r7, #8] - 80024a8: 607a str r2, [r7, #4] - 80024aa: 603b str r3, [r7, #0] - 80024ac: 4603 mov r3, r0 - 80024ae: 73fb strb r3, [r7, #15] + 8002434: b590 push {r4, r7, lr} + 8002436: b087 sub sp, #28 + 8002438: af00 add r7, sp, #0 + 800243a: 60b9 str r1, [r7, #8] + 800243c: 607a str r2, [r7, #4] + 800243e: 603b str r3, [r7, #0] + 8002440: 4603 mov r3, r0 + 8002442: 73fb strb r3, [r7, #15] DRESULT res; res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); - 80024b0: 7bfb ldrb r3, [r7, #15] - 80024b2: 4a0a ldr r2, [pc, #40] ; (80024dc ) - 80024b4: 009b lsls r3, r3, #2 - 80024b6: 4413 add r3, r2 - 80024b8: 685b ldr r3, [r3, #4] - 80024ba: 689c ldr r4, [r3, #8] - 80024bc: 7bfb ldrb r3, [r7, #15] - 80024be: 4a07 ldr r2, [pc, #28] ; (80024dc ) - 80024c0: 4413 add r3, r2 - 80024c2: 7a18 ldrb r0, [r3, #8] - 80024c4: 683b ldr r3, [r7, #0] - 80024c6: 687a ldr r2, [r7, #4] - 80024c8: 68b9 ldr r1, [r7, #8] - 80024ca: 47a0 blx r4 - 80024cc: 4603 mov r3, r0 - 80024ce: 75fb strb r3, [r7, #23] + 8002444: 7bfb ldrb r3, [r7, #15] + 8002446: 4a0a ldr r2, [pc, #40] ; (8002470 ) + 8002448: 009b lsls r3, r3, #2 + 800244a: 4413 add r3, r2 + 800244c: 685b ldr r3, [r3, #4] + 800244e: 689c ldr r4, [r3, #8] + 8002450: 7bfb ldrb r3, [r7, #15] + 8002452: 4a07 ldr r2, [pc, #28] ; (8002470 ) + 8002454: 4413 add r3, r2 + 8002456: 7a18 ldrb r0, [r3, #8] + 8002458: 683b ldr r3, [r7, #0] + 800245a: 687a ldr r2, [r7, #4] + 800245c: 68b9 ldr r1, [r7, #8] + 800245e: 47a0 blx r4 + 8002460: 4603 mov r3, r0 + 8002462: 75fb strb r3, [r7, #23] return res; - 80024d0: 7dfb ldrb r3, [r7, #23] + 8002464: 7dfb ldrb r3, [r7, #23] } - 80024d2: 4618 mov r0, r3 - 80024d4: 371c adds r7, #28 - 80024d6: 46bd mov sp, r7 - 80024d8: bd90 pop {r4, r7, pc} - 80024da: bf00 nop - 80024dc: 200000cc .word 0x200000cc + 8002466: 4618 mov r0, r3 + 8002468: 371c adds r7, #28 + 800246a: 46bd mov sp, r7 + 800246c: bd90 pop {r4, r7, pc} + 800246e: bf00 nop + 8002470: 20000064 .word 0x20000064 -080024e0 : +08002474 : BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { - 80024e0: b590 push {r4, r7, lr} - 80024e2: b087 sub sp, #28 - 80024e4: af00 add r7, sp, #0 - 80024e6: 60b9 str r1, [r7, #8] - 80024e8: 607a str r2, [r7, #4] - 80024ea: 603b str r3, [r7, #0] - 80024ec: 4603 mov r3, r0 - 80024ee: 73fb strb r3, [r7, #15] + 8002474: b590 push {r4, r7, lr} + 8002476: b087 sub sp, #28 + 8002478: af00 add r7, sp, #0 + 800247a: 60b9 str r1, [r7, #8] + 800247c: 607a str r2, [r7, #4] + 800247e: 603b str r3, [r7, #0] + 8002480: 4603 mov r3, r0 + 8002482: 73fb strb r3, [r7, #15] DRESULT res; res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); - 80024f0: 7bfb ldrb r3, [r7, #15] - 80024f2: 4a0a ldr r2, [pc, #40] ; (800251c ) - 80024f4: 009b lsls r3, r3, #2 - 80024f6: 4413 add r3, r2 - 80024f8: 685b ldr r3, [r3, #4] - 80024fa: 68dc ldr r4, [r3, #12] - 80024fc: 7bfb ldrb r3, [r7, #15] - 80024fe: 4a07 ldr r2, [pc, #28] ; (800251c ) - 8002500: 4413 add r3, r2 - 8002502: 7a18 ldrb r0, [r3, #8] - 8002504: 683b ldr r3, [r7, #0] - 8002506: 687a ldr r2, [r7, #4] - 8002508: 68b9 ldr r1, [r7, #8] - 800250a: 47a0 blx r4 - 800250c: 4603 mov r3, r0 - 800250e: 75fb strb r3, [r7, #23] + 8002484: 7bfb ldrb r3, [r7, #15] + 8002486: 4a0a ldr r2, [pc, #40] ; (80024b0 ) + 8002488: 009b lsls r3, r3, #2 + 800248a: 4413 add r3, r2 + 800248c: 685b ldr r3, [r3, #4] + 800248e: 68dc ldr r4, [r3, #12] + 8002490: 7bfb ldrb r3, [r7, #15] + 8002492: 4a07 ldr r2, [pc, #28] ; (80024b0 ) + 8002494: 4413 add r3, r2 + 8002496: 7a18 ldrb r0, [r3, #8] + 8002498: 683b ldr r3, [r7, #0] + 800249a: 687a ldr r2, [r7, #4] + 800249c: 68b9 ldr r1, [r7, #8] + 800249e: 47a0 blx r4 + 80024a0: 4603 mov r3, r0 + 80024a2: 75fb strb r3, [r7, #23] return res; - 8002510: 7dfb ldrb r3, [r7, #23] + 80024a4: 7dfb ldrb r3, [r7, #23] } - 8002512: 4618 mov r0, r3 - 8002514: 371c adds r7, #28 - 8002516: 46bd mov sp, r7 - 8002518: bd90 pop {r4, r7, pc} - 800251a: bf00 nop - 800251c: 200000cc .word 0x200000cc + 80024a6: 4618 mov r0, r3 + 80024a8: 371c adds r7, #28 + 80024aa: 46bd mov sp, r7 + 80024ac: bd90 pop {r4, r7, pc} + 80024ae: bf00 nop + 80024b0: 20000064 .word 0x20000064 -08002520 : +080024b4 : /* String functions */ /*-----------------------------------------------------------------------*/ /* Copy memory to memory */ static void mem_cpy (void* dst, const void* src, UINT cnt) { - 8002520: b480 push {r7} - 8002522: b087 sub sp, #28 - 8002524: af00 add r7, sp, #0 - 8002526: 60f8 str r0, [r7, #12] - 8002528: 60b9 str r1, [r7, #8] - 800252a: 607a str r2, [r7, #4] + 80024b4: b480 push {r7} + 80024b6: b087 sub sp, #28 + 80024b8: af00 add r7, sp, #0 + 80024ba: 60f8 str r0, [r7, #12] + 80024bc: 60b9 str r1, [r7, #8] + 80024be: 607a str r2, [r7, #4] BYTE *d = (BYTE*)dst; - 800252c: 68fb ldr r3, [r7, #12] - 800252e: 617b str r3, [r7, #20] + 80024c0: 68fb ldr r3, [r7, #12] + 80024c2: 617b str r3, [r7, #20] const BYTE *s = (const BYTE*)src; - 8002530: 68bb ldr r3, [r7, #8] - 8002532: 613b str r3, [r7, #16] + 80024c4: 68bb ldr r3, [r7, #8] + 80024c6: 613b str r3, [r7, #16] *(int*)d = *(int*)s; d += sizeof (int); s += sizeof (int); cnt -= sizeof (int); } #endif while (cnt--) - 8002534: e007 b.n 8002546 + 80024c8: e007 b.n 80024da *d++ = *s++; - 8002536: 693a ldr r2, [r7, #16] - 8002538: 1c53 adds r3, r2, #1 - 800253a: 613b str r3, [r7, #16] - 800253c: 697b ldr r3, [r7, #20] - 800253e: 1c59 adds r1, r3, #1 - 8002540: 6179 str r1, [r7, #20] - 8002542: 7812 ldrb r2, [r2, #0] - 8002544: 701a strb r2, [r3, #0] + 80024ca: 693a ldr r2, [r7, #16] + 80024cc: 1c53 adds r3, r2, #1 + 80024ce: 613b str r3, [r7, #16] + 80024d0: 697b ldr r3, [r7, #20] + 80024d2: 1c59 adds r1, r3, #1 + 80024d4: 6179 str r1, [r7, #20] + 80024d6: 7812 ldrb r2, [r2, #0] + 80024d8: 701a strb r2, [r3, #0] while (cnt--) - 8002546: 687b ldr r3, [r7, #4] - 8002548: 1e5a subs r2, r3, #1 - 800254a: 607a str r2, [r7, #4] - 800254c: 2b00 cmp r3, #0 - 800254e: d1f2 bne.n 8002536 + 80024da: 687b ldr r3, [r7, #4] + 80024dc: 1e5a subs r2, r3, #1 + 80024de: 607a str r2, [r7, #4] + 80024e0: 2b00 cmp r3, #0 + 80024e2: d1f2 bne.n 80024ca } - 8002550: bf00 nop - 8002552: bf00 nop - 8002554: 371c adds r7, #28 - 8002556: 46bd mov sp, r7 - 8002558: bc80 pop {r7} - 800255a: 4770 bx lr + 80024e4: bf00 nop + 80024e6: bf00 nop + 80024e8: 371c adds r7, #28 + 80024ea: 46bd mov sp, r7 + 80024ec: bc80 pop {r7} + 80024ee: 4770 bx lr -0800255c : +080024f0 : /* Fill memory */ static void mem_set (void* dst, int val, UINT cnt) { - 800255c: b480 push {r7} - 800255e: b087 sub sp, #28 - 8002560: af00 add r7, sp, #0 - 8002562: 60f8 str r0, [r7, #12] - 8002564: 60b9 str r1, [r7, #8] - 8002566: 607a str r2, [r7, #4] + 80024f0: b480 push {r7} + 80024f2: b087 sub sp, #28 + 80024f4: af00 add r7, sp, #0 + 80024f6: 60f8 str r0, [r7, #12] + 80024f8: 60b9 str r1, [r7, #8] + 80024fa: 607a str r2, [r7, #4] BYTE *d = (BYTE*)dst; - 8002568: 68fb ldr r3, [r7, #12] - 800256a: 617b str r3, [r7, #20] + 80024fc: 68fb ldr r3, [r7, #12] + 80024fe: 617b str r3, [r7, #20] while (cnt--) - 800256c: e005 b.n 800257a + 8002500: e005 b.n 800250e *d++ = (BYTE)val; - 800256e: 697b ldr r3, [r7, #20] - 8002570: 1c5a adds r2, r3, #1 - 8002572: 617a str r2, [r7, #20] - 8002574: 68ba ldr r2, [r7, #8] - 8002576: b2d2 uxtb r2, r2 - 8002578: 701a strb r2, [r3, #0] + 8002502: 697b ldr r3, [r7, #20] + 8002504: 1c5a adds r2, r3, #1 + 8002506: 617a str r2, [r7, #20] + 8002508: 68ba ldr r2, [r7, #8] + 800250a: b2d2 uxtb r2, r2 + 800250c: 701a strb r2, [r3, #0] while (cnt--) - 800257a: 687b ldr r3, [r7, #4] - 800257c: 1e5a subs r2, r3, #1 - 800257e: 607a str r2, [r7, #4] - 8002580: 2b00 cmp r3, #0 - 8002582: d1f4 bne.n 800256e + 800250e: 687b ldr r3, [r7, #4] + 8002510: 1e5a subs r2, r3, #1 + 8002512: 607a str r2, [r7, #4] + 8002514: 2b00 cmp r3, #0 + 8002516: d1f4 bne.n 8002502 } - 8002584: bf00 nop - 8002586: bf00 nop - 8002588: 371c adds r7, #28 - 800258a: 46bd mov sp, r7 - 800258c: bc80 pop {r7} - 800258e: 4770 bx lr + 8002518: bf00 nop + 800251a: bf00 nop + 800251c: 371c adds r7, #28 + 800251e: 46bd mov sp, r7 + 8002520: bc80 pop {r7} + 8002522: 4770 bx lr -08002590 : +08002524 : /* Compare memory to memory */ static int mem_cmp (const void* dst, const void* src, UINT cnt) { - 8002590: b480 push {r7} - 8002592: b089 sub sp, #36 ; 0x24 - 8002594: af00 add r7, sp, #0 - 8002596: 60f8 str r0, [r7, #12] - 8002598: 60b9 str r1, [r7, #8] - 800259a: 607a str r2, [r7, #4] + 8002524: b480 push {r7} + 8002526: b089 sub sp, #36 ; 0x24 + 8002528: af00 add r7, sp, #0 + 800252a: 60f8 str r0, [r7, #12] + 800252c: 60b9 str r1, [r7, #8] + 800252e: 607a str r2, [r7, #4] const BYTE *d = (const BYTE *)dst, *s = (const BYTE *)src; - 800259c: 68fb ldr r3, [r7, #12] - 800259e: 61fb str r3, [r7, #28] - 80025a0: 68bb ldr r3, [r7, #8] - 80025a2: 61bb str r3, [r7, #24] + 8002530: 68fb ldr r3, [r7, #12] + 8002532: 61fb str r3, [r7, #28] + 8002534: 68bb ldr r3, [r7, #8] + 8002536: 61bb str r3, [r7, #24] int r = 0; - 80025a4: 2300 movs r3, #0 - 80025a6: 617b str r3, [r7, #20] + 8002538: 2300 movs r3, #0 + 800253a: 617b str r3, [r7, #20] while (cnt-- && (r = *d++ - *s++) == 0) ; - 80025a8: bf00 nop - 80025aa: 687b ldr r3, [r7, #4] - 80025ac: 1e5a subs r2, r3, #1 - 80025ae: 607a str r2, [r7, #4] - 80025b0: 2b00 cmp r3, #0 - 80025b2: d00d beq.n 80025d0 - 80025b4: 69fb ldr r3, [r7, #28] - 80025b6: 1c5a adds r2, r3, #1 - 80025b8: 61fa str r2, [r7, #28] - 80025ba: 781b ldrb r3, [r3, #0] - 80025bc: 4619 mov r1, r3 - 80025be: 69bb ldr r3, [r7, #24] - 80025c0: 1c5a adds r2, r3, #1 - 80025c2: 61ba str r2, [r7, #24] - 80025c4: 781b ldrb r3, [r3, #0] - 80025c6: 1acb subs r3, r1, r3 - 80025c8: 617b str r3, [r7, #20] - 80025ca: 697b ldr r3, [r7, #20] - 80025cc: 2b00 cmp r3, #0 - 80025ce: d0ec beq.n 80025aa + 800253c: bf00 nop + 800253e: 687b ldr r3, [r7, #4] + 8002540: 1e5a subs r2, r3, #1 + 8002542: 607a str r2, [r7, #4] + 8002544: 2b00 cmp r3, #0 + 8002546: d00d beq.n 8002564 + 8002548: 69fb ldr r3, [r7, #28] + 800254a: 1c5a adds r2, r3, #1 + 800254c: 61fa str r2, [r7, #28] + 800254e: 781b ldrb r3, [r3, #0] + 8002550: 4619 mov r1, r3 + 8002552: 69bb ldr r3, [r7, #24] + 8002554: 1c5a adds r2, r3, #1 + 8002556: 61ba str r2, [r7, #24] + 8002558: 781b ldrb r3, [r3, #0] + 800255a: 1acb subs r3, r1, r3 + 800255c: 617b str r3, [r7, #20] + 800255e: 697b ldr r3, [r7, #20] + 8002560: 2b00 cmp r3, #0 + 8002562: d0ec beq.n 800253e return r; - 80025d0: 697b ldr r3, [r7, #20] + 8002564: 697b ldr r3, [r7, #20] } - 80025d2: 4618 mov r0, r3 - 80025d4: 3724 adds r7, #36 ; 0x24 - 80025d6: 46bd mov sp, r7 - 80025d8: bc80 pop {r7} - 80025da: 4770 bx lr + 8002566: 4618 mov r0, r3 + 8002568: 3724 adds r7, #36 ; 0x24 + 800256a: 46bd mov sp, r7 + 800256c: bc80 pop {r7} + 800256e: 4770 bx lr -080025dc : +08002570 : /* Check if chr is contained in the string */ static int chk_chr (const char* str, int chr) { - 80025dc: b480 push {r7} - 80025de: b083 sub sp, #12 - 80025e0: af00 add r7, sp, #0 - 80025e2: 6078 str r0, [r7, #4] - 80025e4: 6039 str r1, [r7, #0] + 8002570: b480 push {r7} + 8002572: b083 sub sp, #12 + 8002574: af00 add r7, sp, #0 + 8002576: 6078 str r0, [r7, #4] + 8002578: 6039 str r1, [r7, #0] while (*str && *str != chr) str++; - 80025e6: e002 b.n 80025ee - 80025e8: 687b ldr r3, [r7, #4] - 80025ea: 3301 adds r3, #1 - 80025ec: 607b str r3, [r7, #4] - 80025ee: 687b ldr r3, [r7, #4] - 80025f0: 781b ldrb r3, [r3, #0] - 80025f2: 2b00 cmp r3, #0 - 80025f4: d005 beq.n 8002602 - 80025f6: 687b ldr r3, [r7, #4] - 80025f8: 781b ldrb r3, [r3, #0] - 80025fa: 461a mov r2, r3 - 80025fc: 683b ldr r3, [r7, #0] - 80025fe: 4293 cmp r3, r2 - 8002600: d1f2 bne.n 80025e8 + 800257a: e002 b.n 8002582 + 800257c: 687b ldr r3, [r7, #4] + 800257e: 3301 adds r3, #1 + 8002580: 607b str r3, [r7, #4] + 8002582: 687b ldr r3, [r7, #4] + 8002584: 781b ldrb r3, [r3, #0] + 8002586: 2b00 cmp r3, #0 + 8002588: d005 beq.n 8002596 + 800258a: 687b ldr r3, [r7, #4] + 800258c: 781b ldrb r3, [r3, #0] + 800258e: 461a mov r2, r3 + 8002590: 683b ldr r3, [r7, #0] + 8002592: 4293 cmp r3, r2 + 8002594: d1f2 bne.n 800257c return *str; - 8002602: 687b ldr r3, [r7, #4] - 8002604: 781b ldrb r3, [r3, #0] + 8002596: 687b ldr r3, [r7, #4] + 8002598: 781b ldrb r3, [r3, #0] } - 8002606: 4618 mov r0, r3 - 8002608: 370c adds r7, #12 - 800260a: 46bd mov sp, r7 - 800260c: bc80 pop {r7} - 800260e: 4770 bx lr + 800259a: 4618 mov r0, r3 + 800259c: 370c adds r7, #12 + 800259e: 46bd mov sp, r7 + 80025a0: bc80 pop {r7} + 80025a2: 4770 bx lr -08002610 : +080025a4 : static FRESULT chk_lock ( /* Check if the file can be accessed */ DIR* dp, /* Directory object pointing the file to be checked */ int acc /* Desired access type (0:Read, 1:Write, 2:Delete/Rename) */ ) { - 8002610: b480 push {r7} - 8002612: b085 sub sp, #20 - 8002614: af00 add r7, sp, #0 - 8002616: 6078 str r0, [r7, #4] - 8002618: 6039 str r1, [r7, #0] + 80025a4: b480 push {r7} + 80025a6: b085 sub sp, #20 + 80025a8: af00 add r7, sp, #0 + 80025aa: 6078 str r0, [r7, #4] + 80025ac: 6039 str r1, [r7, #0] UINT i, be; /* Search file semaphore table */ for (i = be = 0; i < _FS_LOCK; i++) { - 800261a: 2300 movs r3, #0 - 800261c: 60bb str r3, [r7, #8] - 800261e: 68bb ldr r3, [r7, #8] - 8002620: 60fb str r3, [r7, #12] - 8002622: e038 b.n 8002696 + 80025ae: 2300 movs r3, #0 + 80025b0: 60bb str r3, [r7, #8] + 80025b2: 68bb ldr r3, [r7, #8] + 80025b4: 60fb str r3, [r7, #12] + 80025b6: e038 b.n 800262a if (Files[i].fs) { /* Existing entry */ - 8002624: 492f ldr r1, [pc, #188] ; (80026e4 ) - 8002626: 68fa ldr r2, [r7, #12] - 8002628: 4613 mov r3, r2 - 800262a: 005b lsls r3, r3, #1 - 800262c: 4413 add r3, r2 - 800262e: 009b lsls r3, r3, #2 - 8002630: 440b add r3, r1 - 8002632: 681b ldr r3, [r3, #0] - 8002634: 2b00 cmp r3, #0 - 8002636: d029 beq.n 800268c + 80025b8: 492f ldr r1, [pc, #188] ; (8002678 ) + 80025ba: 68fa ldr r2, [r7, #12] + 80025bc: 4613 mov r3, r2 + 80025be: 005b lsls r3, r3, #1 + 80025c0: 4413 add r3, r2 + 80025c2: 009b lsls r3, r3, #2 + 80025c4: 440b add r3, r1 + 80025c6: 681b ldr r3, [r3, #0] + 80025c8: 2b00 cmp r3, #0 + 80025ca: d029 beq.n 8002620 if (Files[i].fs == dp->fs && /* Check if the object matched with an open object */ - 8002638: 492a ldr r1, [pc, #168] ; (80026e4 ) - 800263a: 68fa ldr r2, [r7, #12] - 800263c: 4613 mov r3, r2 - 800263e: 005b lsls r3, r3, #1 - 8002640: 4413 add r3, r2 - 8002642: 009b lsls r3, r3, #2 - 8002644: 440b add r3, r1 - 8002646: 681a ldr r2, [r3, #0] - 8002648: 687b ldr r3, [r7, #4] - 800264a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800264e: 429a cmp r2, r3 - 8002650: d11e bne.n 8002690 + 80025cc: 492a ldr r1, [pc, #168] ; (8002678 ) + 80025ce: 68fa ldr r2, [r7, #12] + 80025d0: 4613 mov r3, r2 + 80025d2: 005b lsls r3, r3, #1 + 80025d4: 4413 add r3, r2 + 80025d6: 009b lsls r3, r3, #2 + 80025d8: 440b add r3, r1 + 80025da: 681a ldr r2, [r3, #0] + 80025dc: 687b ldr r3, [r7, #4] + 80025de: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80025e2: 429a cmp r2, r3 + 80025e4: d11e bne.n 8002624 Files[i].clu == dp->sclust && - 8002652: 4924 ldr r1, [pc, #144] ; (80026e4 ) - 8002654: 68fa ldr r2, [r7, #12] - 8002656: 4613 mov r3, r2 - 8002658: 005b lsls r3, r3, #1 - 800265a: 4413 add r3, r2 - 800265c: 009b lsls r3, r3, #2 - 800265e: 440b add r3, r1 - 8002660: 3304 adds r3, #4 - 8002662: 681a ldr r2, [r3, #0] - 8002664: 687b ldr r3, [r7, #4] - 8002666: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80025e6: 4924 ldr r1, [pc, #144] ; (8002678 ) + 80025e8: 68fa ldr r2, [r7, #12] + 80025ea: 4613 mov r3, r2 + 80025ec: 005b lsls r3, r3, #1 + 80025ee: 4413 add r3, r2 + 80025f0: 009b lsls r3, r3, #2 + 80025f2: 440b add r3, r1 + 80025f4: 3304 adds r3, #4 + 80025f6: 681a ldr r2, [r3, #0] + 80025f8: 687b ldr r3, [r7, #4] + 80025fa: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 if (Files[i].fs == dp->fs && /* Check if the object matched with an open object */ - 800266a: 429a cmp r2, r3 - 800266c: d110 bne.n 8002690 + 80025fe: 429a cmp r2, r3 + 8002600: d110 bne.n 8002624 Files[i].idx == dp->index) break; - 800266e: 491d ldr r1, [pc, #116] ; (80026e4 ) - 8002670: 68fa ldr r2, [r7, #12] - 8002672: 4613 mov r3, r2 - 8002674: 005b lsls r3, r3, #1 - 8002676: 4413 add r3, r2 - 8002678: 009b lsls r3, r3, #2 - 800267a: 440b add r3, r1 - 800267c: 3308 adds r3, #8 - 800267e: 881a ldrh r2, [r3, #0] - 8002680: 687b ldr r3, [r7, #4] - 8002682: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 8002602: 491d ldr r1, [pc, #116] ; (8002678 ) + 8002604: 68fa ldr r2, [r7, #12] + 8002606: 4613 mov r3, r2 + 8002608: 005b lsls r3, r3, #1 + 800260a: 4413 add r3, r2 + 800260c: 009b lsls r3, r3, #2 + 800260e: 440b add r3, r1 + 8002610: 3308 adds r3, #8 + 8002612: 881a ldrh r2, [r3, #0] + 8002614: 687b ldr r3, [r7, #4] + 8002616: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 Files[i].clu == dp->sclust && - 8002686: 429a cmp r2, r3 - 8002688: d102 bne.n 8002690 + 800261a: 429a cmp r2, r3 + 800261c: d102 bne.n 8002624 Files[i].idx == dp->index) break; - 800268a: e007 b.n 800269c + 800261e: e007 b.n 8002630 } else { /* Blank entry */ be = 1; - 800268c: 2301 movs r3, #1 - 800268e: 60bb str r3, [r7, #8] + 8002620: 2301 movs r3, #1 + 8002622: 60bb str r3, [r7, #8] for (i = be = 0; i < _FS_LOCK; i++) { - 8002690: 68fb ldr r3, [r7, #12] - 8002692: 3301 adds r3, #1 - 8002694: 60fb str r3, [r7, #12] - 8002696: 68fb ldr r3, [r7, #12] - 8002698: 2b01 cmp r3, #1 - 800269a: d9c3 bls.n 8002624 + 8002624: 68fb ldr r3, [r7, #12] + 8002626: 3301 adds r3, #1 + 8002628: 60fb str r3, [r7, #12] + 800262a: 68fb ldr r3, [r7, #12] + 800262c: 2b01 cmp r3, #1 + 800262e: d9c3 bls.n 80025b8 } } if (i == _FS_LOCK) /* The object is not opened */ - 800269c: 68fb ldr r3, [r7, #12] - 800269e: 2b02 cmp r3, #2 - 80026a0: d109 bne.n 80026b6 + 8002630: 68fb ldr r3, [r7, #12] + 8002632: 2b02 cmp r3, #2 + 8002634: d109 bne.n 800264a return (be || acc == 2) ? FR_OK : FR_TOO_MANY_OPEN_FILES; /* Is there a blank entry for new object? */ - 80026a2: 68bb ldr r3, [r7, #8] - 80026a4: 2b00 cmp r3, #0 - 80026a6: d102 bne.n 80026ae - 80026a8: 683b ldr r3, [r7, #0] - 80026aa: 2b02 cmp r3, #2 - 80026ac: d101 bne.n 80026b2 - 80026ae: 2300 movs r3, #0 - 80026b0: e013 b.n 80026da - 80026b2: 2312 movs r3, #18 - 80026b4: e011 b.n 80026da + 8002636: 68bb ldr r3, [r7, #8] + 8002638: 2b00 cmp r3, #0 + 800263a: d102 bne.n 8002642 + 800263c: 683b ldr r3, [r7, #0] + 800263e: 2b02 cmp r3, #2 + 8002640: d101 bne.n 8002646 + 8002642: 2300 movs r3, #0 + 8002644: e013 b.n 800266e + 8002646: 2312 movs r3, #18 + 8002648: e011 b.n 800266e /* The object has been opened. Reject any open against writing file and all write mode open */ return (acc || Files[i].ctr == 0x100) ? FR_LOCKED : FR_OK; - 80026b6: 683b ldr r3, [r7, #0] - 80026b8: 2b00 cmp r3, #0 - 80026ba: d10b bne.n 80026d4 - 80026bc: 4909 ldr r1, [pc, #36] ; (80026e4 ) - 80026be: 68fa ldr r2, [r7, #12] - 80026c0: 4613 mov r3, r2 - 80026c2: 005b lsls r3, r3, #1 - 80026c4: 4413 add r3, r2 - 80026c6: 009b lsls r3, r3, #2 - 80026c8: 440b add r3, r1 - 80026ca: 330a adds r3, #10 - 80026cc: 881b ldrh r3, [r3, #0] - 80026ce: f5b3 7f80 cmp.w r3, #256 ; 0x100 - 80026d2: d101 bne.n 80026d8 - 80026d4: 2310 movs r3, #16 - 80026d6: e000 b.n 80026da - 80026d8: 2300 movs r3, #0 + 800264a: 683b ldr r3, [r7, #0] + 800264c: 2b00 cmp r3, #0 + 800264e: d10b bne.n 8002668 + 8002650: 4909 ldr r1, [pc, #36] ; (8002678 ) + 8002652: 68fa ldr r2, [r7, #12] + 8002654: 4613 mov r3, r2 + 8002656: 005b lsls r3, r3, #1 + 8002658: 4413 add r3, r2 + 800265a: 009b lsls r3, r3, #2 + 800265c: 440b add r3, r1 + 800265e: 330a adds r3, #10 + 8002660: 881b ldrh r3, [r3, #0] + 8002662: f5b3 7f80 cmp.w r3, #256 ; 0x100 + 8002666: d101 bne.n 800266c + 8002668: 2310 movs r3, #16 + 800266a: e000 b.n 800266e + 800266c: 2300 movs r3, #0 } - 80026da: 4618 mov r0, r3 - 80026dc: 3714 adds r7, #20 - 80026de: 46bd mov sp, r7 - 80026e0: bc80 pop {r7} - 80026e2: 4770 bx lr - 80026e4: 200000b4 .word 0x200000b4 + 800266e: 4618 mov r0, r3 + 8002670: 3714 adds r7, #20 + 8002672: 46bd mov sp, r7 + 8002674: bc80 pop {r7} + 8002676: 4770 bx lr + 8002678: 2000004c .word 0x2000004c -080026e8 : +0800267c : static int enq_lock (void) /* Check if an entry is available for a new object */ { - 80026e8: b480 push {r7} - 80026ea: b083 sub sp, #12 - 80026ec: af00 add r7, sp, #0 + 800267c: b480 push {r7} + 800267e: b083 sub sp, #12 + 8002680: af00 add r7, sp, #0 UINT i; for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - 80026ee: 2300 movs r3, #0 - 80026f0: 607b str r3, [r7, #4] - 80026f2: e002 b.n 80026fa - 80026f4: 687b ldr r3, [r7, #4] - 80026f6: 3301 adds r3, #1 - 80026f8: 607b str r3, [r7, #4] - 80026fa: 687b ldr r3, [r7, #4] - 80026fc: 2b01 cmp r3, #1 - 80026fe: d809 bhi.n 8002714 - 8002700: 490a ldr r1, [pc, #40] ; (800272c ) - 8002702: 687a ldr r2, [r7, #4] - 8002704: 4613 mov r3, r2 - 8002706: 005b lsls r3, r3, #1 - 8002708: 4413 add r3, r2 - 800270a: 009b lsls r3, r3, #2 - 800270c: 440b add r3, r1 - 800270e: 681b ldr r3, [r3, #0] - 8002710: 2b00 cmp r3, #0 - 8002712: d1ef bne.n 80026f4 + 8002682: 2300 movs r3, #0 + 8002684: 607b str r3, [r7, #4] + 8002686: e002 b.n 800268e + 8002688: 687b ldr r3, [r7, #4] + 800268a: 3301 adds r3, #1 + 800268c: 607b str r3, [r7, #4] + 800268e: 687b ldr r3, [r7, #4] + 8002690: 2b01 cmp r3, #1 + 8002692: d809 bhi.n 80026a8 + 8002694: 490a ldr r1, [pc, #40] ; (80026c0 ) + 8002696: 687a ldr r2, [r7, #4] + 8002698: 4613 mov r3, r2 + 800269a: 005b lsls r3, r3, #1 + 800269c: 4413 add r3, r2 + 800269e: 009b lsls r3, r3, #2 + 80026a0: 440b add r3, r1 + 80026a2: 681b ldr r3, [r3, #0] + 80026a4: 2b00 cmp r3, #0 + 80026a6: d1ef bne.n 8002688 return (i == _FS_LOCK) ? 0 : 1; - 8002714: 687b ldr r3, [r7, #4] - 8002716: 2b02 cmp r3, #2 - 8002718: bf14 ite ne - 800271a: 2301 movne r3, #1 - 800271c: 2300 moveq r3, #0 - 800271e: b2db uxtb r3, r3 + 80026a8: 687b ldr r3, [r7, #4] + 80026aa: 2b02 cmp r3, #2 + 80026ac: bf14 ite ne + 80026ae: 2301 movne r3, #1 + 80026b0: 2300 moveq r3, #0 + 80026b2: b2db uxtb r3, r3 } - 8002720: 4618 mov r0, r3 - 8002722: 370c adds r7, #12 - 8002724: 46bd mov sp, r7 - 8002726: bc80 pop {r7} - 8002728: 4770 bx lr - 800272a: bf00 nop - 800272c: 200000b4 .word 0x200000b4 + 80026b4: 4618 mov r0, r3 + 80026b6: 370c adds r7, #12 + 80026b8: 46bd mov sp, r7 + 80026ba: bc80 pop {r7} + 80026bc: 4770 bx lr + 80026be: bf00 nop + 80026c0: 2000004c .word 0x2000004c -08002730 : +080026c4 : static UINT inc_lock ( /* Increment object open counter and returns its index (0:Internal error) */ DIR* dp, /* Directory object pointing the file to register or increment */ int acc /* Desired access (0:Read, 1:Write, 2:Delete/Rename) */ ) { - 8002730: b480 push {r7} - 8002732: b085 sub sp, #20 - 8002734: af00 add r7, sp, #0 - 8002736: 6078 str r0, [r7, #4] - 8002738: 6039 str r1, [r7, #0] + 80026c4: b480 push {r7} + 80026c6: b085 sub sp, #20 + 80026c8: af00 add r7, sp, #0 + 80026ca: 6078 str r0, [r7, #4] + 80026cc: 6039 str r1, [r7, #0] UINT i; for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - 800273a: 2300 movs r3, #0 - 800273c: 60fb str r3, [r7, #12] - 800273e: e02b b.n 8002798 + 80026ce: 2300 movs r3, #0 + 80026d0: 60fb str r3, [r7, #12] + 80026d2: e02b b.n 800272c if (Files[i].fs == dp->fs && - 8002740: 4955 ldr r1, [pc, #340] ; (8002898 ) - 8002742: 68fa ldr r2, [r7, #12] - 8002744: 4613 mov r3, r2 - 8002746: 005b lsls r3, r3, #1 - 8002748: 4413 add r3, r2 - 800274a: 009b lsls r3, r3, #2 - 800274c: 440b add r3, r1 - 800274e: 681a ldr r2, [r3, #0] - 8002750: 687b ldr r3, [r7, #4] - 8002752: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8002756: 429a cmp r2, r3 - 8002758: d11b bne.n 8002792 + 80026d4: 4955 ldr r1, [pc, #340] ; (800282c ) + 80026d6: 68fa ldr r2, [r7, #12] + 80026d8: 4613 mov r3, r2 + 80026da: 005b lsls r3, r3, #1 + 80026dc: 4413 add r3, r2 + 80026de: 009b lsls r3, r3, #2 + 80026e0: 440b add r3, r1 + 80026e2: 681a ldr r2, [r3, #0] + 80026e4: 687b ldr r3, [r7, #4] + 80026e6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80026ea: 429a cmp r2, r3 + 80026ec: d11b bne.n 8002726 Files[i].clu == dp->sclust && - 800275a: 494f ldr r1, [pc, #316] ; (8002898 ) - 800275c: 68fa ldr r2, [r7, #12] - 800275e: 4613 mov r3, r2 - 8002760: 005b lsls r3, r3, #1 - 8002762: 4413 add r3, r2 - 8002764: 009b lsls r3, r3, #2 - 8002766: 440b add r3, r1 - 8002768: 3304 adds r3, #4 - 800276a: 681a ldr r2, [r3, #0] - 800276c: 687b ldr r3, [r7, #4] - 800276e: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80026ee: 494f ldr r1, [pc, #316] ; (800282c ) + 80026f0: 68fa ldr r2, [r7, #12] + 80026f2: 4613 mov r3, r2 + 80026f4: 005b lsls r3, r3, #1 + 80026f6: 4413 add r3, r2 + 80026f8: 009b lsls r3, r3, #2 + 80026fa: 440b add r3, r1 + 80026fc: 3304 adds r3, #4 + 80026fe: 681a ldr r2, [r3, #0] + 8002700: 687b ldr r3, [r7, #4] + 8002702: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 if (Files[i].fs == dp->fs && - 8002772: 429a cmp r2, r3 - 8002774: d10d bne.n 8002792 + 8002706: 429a cmp r2, r3 + 8002708: d10d bne.n 8002726 Files[i].idx == dp->index) break; - 8002776: 4948 ldr r1, [pc, #288] ; (8002898 ) - 8002778: 68fa ldr r2, [r7, #12] - 800277a: 4613 mov r3, r2 - 800277c: 005b lsls r3, r3, #1 - 800277e: 4413 add r3, r2 - 8002780: 009b lsls r3, r3, #2 - 8002782: 440b add r3, r1 - 8002784: 3308 adds r3, #8 - 8002786: 881a ldrh r2, [r3, #0] - 8002788: 687b ldr r3, [r7, #4] - 800278a: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 800270a: 4948 ldr r1, [pc, #288] ; (800282c ) + 800270c: 68fa ldr r2, [r7, #12] + 800270e: 4613 mov r3, r2 + 8002710: 005b lsls r3, r3, #1 + 8002712: 4413 add r3, r2 + 8002714: 009b lsls r3, r3, #2 + 8002716: 440b add r3, r1 + 8002718: 3308 adds r3, #8 + 800271a: 881a ldrh r2, [r3, #0] + 800271c: 687b ldr r3, [r7, #4] + 800271e: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 Files[i].clu == dp->sclust && - 800278e: 429a cmp r2, r3 - 8002790: d006 beq.n 80027a0 + 8002722: 429a cmp r2, r3 + 8002724: d006 beq.n 8002734 for (i = 0; i < _FS_LOCK; i++) { /* Find the object */ - 8002792: 68fb ldr r3, [r7, #12] - 8002794: 3301 adds r3, #1 - 8002796: 60fb str r3, [r7, #12] - 8002798: 68fb ldr r3, [r7, #12] - 800279a: 2b01 cmp r3, #1 - 800279c: d9d0 bls.n 8002740 - 800279e: e000 b.n 80027a2 + 8002726: 68fb ldr r3, [r7, #12] + 8002728: 3301 adds r3, #1 + 800272a: 60fb str r3, [r7, #12] + 800272c: 68fb ldr r3, [r7, #12] + 800272e: 2b01 cmp r3, #1 + 8002730: d9d0 bls.n 80026d4 + 8002732: e000 b.n 8002736 Files[i].idx == dp->index) break; - 80027a0: bf00 nop + 8002734: bf00 nop } if (i == _FS_LOCK) { /* Not opened. Register it as new. */ - 80027a2: 68fb ldr r3, [r7, #12] - 80027a4: 2b02 cmp r3, #2 - 80027a6: d145 bne.n 8002834 + 8002736: 68fb ldr r3, [r7, #12] + 8002738: 2b02 cmp r3, #2 + 800273a: d145 bne.n 80027c8 for (i = 0; i < _FS_LOCK && Files[i].fs; i++) ; - 80027a8: 2300 movs r3, #0 - 80027aa: 60fb str r3, [r7, #12] - 80027ac: e002 b.n 80027b4 - 80027ae: 68fb ldr r3, [r7, #12] - 80027b0: 3301 adds r3, #1 - 80027b2: 60fb str r3, [r7, #12] - 80027b4: 68fb ldr r3, [r7, #12] - 80027b6: 2b01 cmp r3, #1 - 80027b8: d809 bhi.n 80027ce - 80027ba: 4937 ldr r1, [pc, #220] ; (8002898 ) - 80027bc: 68fa ldr r2, [r7, #12] - 80027be: 4613 mov r3, r2 - 80027c0: 005b lsls r3, r3, #1 - 80027c2: 4413 add r3, r2 - 80027c4: 009b lsls r3, r3, #2 - 80027c6: 440b add r3, r1 - 80027c8: 681b ldr r3, [r3, #0] - 80027ca: 2b00 cmp r3, #0 - 80027cc: d1ef bne.n 80027ae + 800273c: 2300 movs r3, #0 + 800273e: 60fb str r3, [r7, #12] + 8002740: e002 b.n 8002748 + 8002742: 68fb ldr r3, [r7, #12] + 8002744: 3301 adds r3, #1 + 8002746: 60fb str r3, [r7, #12] + 8002748: 68fb ldr r3, [r7, #12] + 800274a: 2b01 cmp r3, #1 + 800274c: d809 bhi.n 8002762 + 800274e: 4937 ldr r1, [pc, #220] ; (800282c ) + 8002750: 68fa ldr r2, [r7, #12] + 8002752: 4613 mov r3, r2 + 8002754: 005b lsls r3, r3, #1 + 8002756: 4413 add r3, r2 + 8002758: 009b lsls r3, r3, #2 + 800275a: 440b add r3, r1 + 800275c: 681b ldr r3, [r3, #0] + 800275e: 2b00 cmp r3, #0 + 8002760: d1ef bne.n 8002742 if (i == _FS_LOCK) return 0; /* No free entry to register (int err) */ - 80027ce: 68fb ldr r3, [r7, #12] - 80027d0: 2b02 cmp r3, #2 - 80027d2: d101 bne.n 80027d8 - 80027d4: 2300 movs r3, #0 - 80027d6: e05a b.n 800288e + 8002762: 68fb ldr r3, [r7, #12] + 8002764: 2b02 cmp r3, #2 + 8002766: d101 bne.n 800276c + 8002768: 2300 movs r3, #0 + 800276a: e05a b.n 8002822 Files[i].fs = dp->fs; - 80027d8: 687b ldr r3, [r7, #4] - 80027da: f8d3 1200 ldr.w r1, [r3, #512] ; 0x200 - 80027de: 482e ldr r0, [pc, #184] ; (8002898 ) - 80027e0: 68fa ldr r2, [r7, #12] - 80027e2: 4613 mov r3, r2 - 80027e4: 005b lsls r3, r3, #1 - 80027e6: 4413 add r3, r2 - 80027e8: 009b lsls r3, r3, #2 - 80027ea: 4403 add r3, r0 - 80027ec: 6019 str r1, [r3, #0] + 800276c: 687b ldr r3, [r7, #4] + 800276e: f8d3 1200 ldr.w r1, [r3, #512] ; 0x200 + 8002772: 482e ldr r0, [pc, #184] ; (800282c ) + 8002774: 68fa ldr r2, [r7, #12] + 8002776: 4613 mov r3, r2 + 8002778: 005b lsls r3, r3, #1 + 800277a: 4413 add r3, r2 + 800277c: 009b lsls r3, r3, #2 + 800277e: 4403 add r3, r0 + 8002780: 6019 str r1, [r3, #0] Files[i].clu = dp->sclust; - 80027ee: 687b ldr r3, [r7, #4] - 80027f0: f8d3 1208 ldr.w r1, [r3, #520] ; 0x208 - 80027f4: 4828 ldr r0, [pc, #160] ; (8002898 ) - 80027f6: 68fa ldr r2, [r7, #12] - 80027f8: 4613 mov r3, r2 - 80027fa: 005b lsls r3, r3, #1 - 80027fc: 4413 add r3, r2 - 80027fe: 009b lsls r3, r3, #2 - 8002800: 4403 add r3, r0 - 8002802: 3304 adds r3, #4 - 8002804: 6019 str r1, [r3, #0] + 8002782: 687b ldr r3, [r7, #4] + 8002784: f8d3 1208 ldr.w r1, [r3, #520] ; 0x208 + 8002788: 4828 ldr r0, [pc, #160] ; (800282c ) + 800278a: 68fa ldr r2, [r7, #12] + 800278c: 4613 mov r3, r2 + 800278e: 005b lsls r3, r3, #1 + 8002790: 4413 add r3, r2 + 8002792: 009b lsls r3, r3, #2 + 8002794: 4403 add r3, r0 + 8002796: 3304 adds r3, #4 + 8002798: 6019 str r1, [r3, #0] Files[i].idx = dp->index; - 8002806: 687b ldr r3, [r7, #4] - 8002808: f8b3 0206 ldrh.w r0, [r3, #518] ; 0x206 - 800280c: 4922 ldr r1, [pc, #136] ; (8002898 ) - 800280e: 68fa ldr r2, [r7, #12] - 8002810: 4613 mov r3, r2 - 8002812: 005b lsls r3, r3, #1 - 8002814: 4413 add r3, r2 - 8002816: 009b lsls r3, r3, #2 - 8002818: 440b add r3, r1 - 800281a: 3308 adds r3, #8 - 800281c: 4602 mov r2, r0 - 800281e: 801a strh r2, [r3, #0] + 800279a: 687b ldr r3, [r7, #4] + 800279c: f8b3 0206 ldrh.w r0, [r3, #518] ; 0x206 + 80027a0: 4922 ldr r1, [pc, #136] ; (800282c ) + 80027a2: 68fa ldr r2, [r7, #12] + 80027a4: 4613 mov r3, r2 + 80027a6: 005b lsls r3, r3, #1 + 80027a8: 4413 add r3, r2 + 80027aa: 009b lsls r3, r3, #2 + 80027ac: 440b add r3, r1 + 80027ae: 3308 adds r3, #8 + 80027b0: 4602 mov r2, r0 + 80027b2: 801a strh r2, [r3, #0] Files[i].ctr = 0; - 8002820: 491d ldr r1, [pc, #116] ; (8002898 ) - 8002822: 68fa ldr r2, [r7, #12] - 8002824: 4613 mov r3, r2 - 8002826: 005b lsls r3, r3, #1 - 8002828: 4413 add r3, r2 - 800282a: 009b lsls r3, r3, #2 - 800282c: 440b add r3, r1 - 800282e: 330a adds r3, #10 - 8002830: 2200 movs r2, #0 - 8002832: 801a strh r2, [r3, #0] + 80027b4: 491d ldr r1, [pc, #116] ; (800282c ) + 80027b6: 68fa ldr r2, [r7, #12] + 80027b8: 4613 mov r3, r2 + 80027ba: 005b lsls r3, r3, #1 + 80027bc: 4413 add r3, r2 + 80027be: 009b lsls r3, r3, #2 + 80027c0: 440b add r3, r1 + 80027c2: 330a adds r3, #10 + 80027c4: 2200 movs r2, #0 + 80027c6: 801a strh r2, [r3, #0] } if (acc && Files[i].ctr) return 0; /* Access violation (int err) */ - 8002834: 683b ldr r3, [r7, #0] - 8002836: 2b00 cmp r3, #0 - 8002838: d00c beq.n 8002854 - 800283a: 4917 ldr r1, [pc, #92] ; (8002898 ) - 800283c: 68fa ldr r2, [r7, #12] - 800283e: 4613 mov r3, r2 - 8002840: 005b lsls r3, r3, #1 - 8002842: 4413 add r3, r2 - 8002844: 009b lsls r3, r3, #2 - 8002846: 440b add r3, r1 - 8002848: 330a adds r3, #10 - 800284a: 881b ldrh r3, [r3, #0] - 800284c: 2b00 cmp r3, #0 - 800284e: d001 beq.n 8002854 - 8002850: 2300 movs r3, #0 - 8002852: e01c b.n 800288e + 80027c8: 683b ldr r3, [r7, #0] + 80027ca: 2b00 cmp r3, #0 + 80027cc: d00c beq.n 80027e8 + 80027ce: 4917 ldr r1, [pc, #92] ; (800282c ) + 80027d0: 68fa ldr r2, [r7, #12] + 80027d2: 4613 mov r3, r2 + 80027d4: 005b lsls r3, r3, #1 + 80027d6: 4413 add r3, r2 + 80027d8: 009b lsls r3, r3, #2 + 80027da: 440b add r3, r1 + 80027dc: 330a adds r3, #10 + 80027de: 881b ldrh r3, [r3, #0] + 80027e0: 2b00 cmp r3, #0 + 80027e2: d001 beq.n 80027e8 + 80027e4: 2300 movs r3, #0 + 80027e6: e01c b.n 8002822 Files[i].ctr = acc ? 0x100 : Files[i].ctr + 1; /* Set semaphore value */ - 8002854: 683b ldr r3, [r7, #0] - 8002856: 2b00 cmp r3, #0 - 8002858: d10b bne.n 8002872 - 800285a: 490f ldr r1, [pc, #60] ; (8002898 ) - 800285c: 68fa ldr r2, [r7, #12] - 800285e: 4613 mov r3, r2 - 8002860: 005b lsls r3, r3, #1 - 8002862: 4413 add r3, r2 - 8002864: 009b lsls r3, r3, #2 - 8002866: 440b add r3, r1 - 8002868: 330a adds r3, #10 - 800286a: 881b ldrh r3, [r3, #0] - 800286c: 3301 adds r3, #1 - 800286e: b299 uxth r1, r3 - 8002870: e001 b.n 8002876 - 8002872: f44f 7180 mov.w r1, #256 ; 0x100 - 8002876: 4808 ldr r0, [pc, #32] ; (8002898 ) - 8002878: 68fa ldr r2, [r7, #12] - 800287a: 4613 mov r3, r2 - 800287c: 005b lsls r3, r3, #1 - 800287e: 4413 add r3, r2 - 8002880: 009b lsls r3, r3, #2 - 8002882: 4403 add r3, r0 - 8002884: 330a adds r3, #10 - 8002886: 460a mov r2, r1 - 8002888: 801a strh r2, [r3, #0] + 80027e8: 683b ldr r3, [r7, #0] + 80027ea: 2b00 cmp r3, #0 + 80027ec: d10b bne.n 8002806 + 80027ee: 490f ldr r1, [pc, #60] ; (800282c ) + 80027f0: 68fa ldr r2, [r7, #12] + 80027f2: 4613 mov r3, r2 + 80027f4: 005b lsls r3, r3, #1 + 80027f6: 4413 add r3, r2 + 80027f8: 009b lsls r3, r3, #2 + 80027fa: 440b add r3, r1 + 80027fc: 330a adds r3, #10 + 80027fe: 881b ldrh r3, [r3, #0] + 8002800: 3301 adds r3, #1 + 8002802: b299 uxth r1, r3 + 8002804: e001 b.n 800280a + 8002806: f44f 7180 mov.w r1, #256 ; 0x100 + 800280a: 4808 ldr r0, [pc, #32] ; (800282c ) + 800280c: 68fa ldr r2, [r7, #12] + 800280e: 4613 mov r3, r2 + 8002810: 005b lsls r3, r3, #1 + 8002812: 4413 add r3, r2 + 8002814: 009b lsls r3, r3, #2 + 8002816: 4403 add r3, r0 + 8002818: 330a adds r3, #10 + 800281a: 460a mov r2, r1 + 800281c: 801a strh r2, [r3, #0] return i + 1; - 800288a: 68fb ldr r3, [r7, #12] - 800288c: 3301 adds r3, #1 + 800281e: 68fb ldr r3, [r7, #12] + 8002820: 3301 adds r3, #1 } - 800288e: 4618 mov r0, r3 - 8002890: 3714 adds r7, #20 - 8002892: 46bd mov sp, r7 - 8002894: bc80 pop {r7} - 8002896: 4770 bx lr - 8002898: 200000b4 .word 0x200000b4 + 8002822: 4618 mov r0, r3 + 8002824: 3714 adds r7, #20 + 8002826: 46bd mov sp, r7 + 8002828: bc80 pop {r7} + 800282a: 4770 bx lr + 800282c: 2000004c .word 0x2000004c -0800289c : +08002830 : static void clear_lock ( /* Clear lock entries of the volume */ FATFS *fs ) { - 800289c: b480 push {r7} - 800289e: b085 sub sp, #20 - 80028a0: af00 add r7, sp, #0 - 80028a2: 6078 str r0, [r7, #4] + 8002830: b480 push {r7} + 8002832: b085 sub sp, #20 + 8002834: af00 add r7, sp, #0 + 8002836: 6078 str r0, [r7, #4] UINT i; for (i = 0; i < _FS_LOCK; i++) { - 80028a4: 2300 movs r3, #0 - 80028a6: 60fb str r3, [r7, #12] - 80028a8: e016 b.n 80028d8 + 8002838: 2300 movs r3, #0 + 800283a: 60fb str r3, [r7, #12] + 800283c: e016 b.n 800286c if (Files[i].fs == fs) Files[i].fs = 0; - 80028aa: 4910 ldr r1, [pc, #64] ; (80028ec ) - 80028ac: 68fa ldr r2, [r7, #12] - 80028ae: 4613 mov r3, r2 - 80028b0: 005b lsls r3, r3, #1 - 80028b2: 4413 add r3, r2 - 80028b4: 009b lsls r3, r3, #2 - 80028b6: 440b add r3, r1 - 80028b8: 681b ldr r3, [r3, #0] - 80028ba: 687a ldr r2, [r7, #4] - 80028bc: 429a cmp r2, r3 - 80028be: d108 bne.n 80028d2 - 80028c0: 490a ldr r1, [pc, #40] ; (80028ec ) - 80028c2: 68fa ldr r2, [r7, #12] - 80028c4: 4613 mov r3, r2 - 80028c6: 005b lsls r3, r3, #1 - 80028c8: 4413 add r3, r2 - 80028ca: 009b lsls r3, r3, #2 - 80028cc: 440b add r3, r1 - 80028ce: 2200 movs r2, #0 - 80028d0: 601a str r2, [r3, #0] + 800283e: 4910 ldr r1, [pc, #64] ; (8002880 ) + 8002840: 68fa ldr r2, [r7, #12] + 8002842: 4613 mov r3, r2 + 8002844: 005b lsls r3, r3, #1 + 8002846: 4413 add r3, r2 + 8002848: 009b lsls r3, r3, #2 + 800284a: 440b add r3, r1 + 800284c: 681b ldr r3, [r3, #0] + 800284e: 687a ldr r2, [r7, #4] + 8002850: 429a cmp r2, r3 + 8002852: d108 bne.n 8002866 + 8002854: 490a ldr r1, [pc, #40] ; (8002880 ) + 8002856: 68fa ldr r2, [r7, #12] + 8002858: 4613 mov r3, r2 + 800285a: 005b lsls r3, r3, #1 + 800285c: 4413 add r3, r2 + 800285e: 009b lsls r3, r3, #2 + 8002860: 440b add r3, r1 + 8002862: 2200 movs r2, #0 + 8002864: 601a str r2, [r3, #0] for (i = 0; i < _FS_LOCK; i++) { - 80028d2: 68fb ldr r3, [r7, #12] - 80028d4: 3301 adds r3, #1 - 80028d6: 60fb str r3, [r7, #12] - 80028d8: 68fb ldr r3, [r7, #12] - 80028da: 2b01 cmp r3, #1 - 80028dc: d9e5 bls.n 80028aa + 8002866: 68fb ldr r3, [r7, #12] + 8002868: 3301 adds r3, #1 + 800286a: 60fb str r3, [r7, #12] + 800286c: 68fb ldr r3, [r7, #12] + 800286e: 2b01 cmp r3, #1 + 8002870: d9e5 bls.n 800283e } } - 80028de: bf00 nop - 80028e0: bf00 nop - 80028e2: 3714 adds r7, #20 - 80028e4: 46bd mov sp, r7 - 80028e6: bc80 pop {r7} - 80028e8: 4770 bx lr - 80028ea: bf00 nop - 80028ec: 200000b4 .word 0x200000b4 + 8002872: bf00 nop + 8002874: bf00 nop + 8002876: 3714 adds r7, #20 + 8002878: 46bd mov sp, r7 + 800287a: bc80 pop {r7} + 800287c: 4770 bx lr + 800287e: bf00 nop + 8002880: 2000004c .word 0x2000004c -080028f0 : +08002884 : #if !_FS_READONLY static FRESULT sync_window ( FATFS* fs /* File system object */ ) { - 80028f0: b580 push {r7, lr} - 80028f2: b086 sub sp, #24 - 80028f4: af00 add r7, sp, #0 - 80028f6: 6078 str r0, [r7, #4] + 8002884: b580 push {r7, lr} + 8002886: b086 sub sp, #24 + 8002888: af00 add r7, sp, #0 + 800288a: 6078 str r0, [r7, #4] DWORD wsect; UINT nf; FRESULT res = FR_OK; - 80028f8: 2300 movs r3, #0 - 80028fa: 73fb strb r3, [r7, #15] + 800288c: 2300 movs r3, #0 + 800288e: 73fb strb r3, [r7, #15] if (fs->wflag) { /* Write back the sector if it is dirty */ - 80028fc: 687b ldr r3, [r7, #4] - 80028fe: f893 3204 ldrb.w r3, [r3, #516] ; 0x204 - 8002902: 2b00 cmp r3, #0 - 8002904: d038 beq.n 8002978 + 8002890: 687b ldr r3, [r7, #4] + 8002892: f893 3204 ldrb.w r3, [r3, #516] ; 0x204 + 8002896: 2b00 cmp r3, #0 + 8002898: d038 beq.n 800290c wsect = fs->winsect; /* Current sector number */ - 8002906: 687b ldr r3, [r7, #4] - 8002908: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 800290c: 617b str r3, [r7, #20] + 800289a: 687b ldr r3, [r7, #4] + 800289c: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 80028a0: 617b str r3, [r7, #20] if (disk_write(fs->drv, fs->win.d8, wsect, 1) != RES_OK) { - 800290e: 687b ldr r3, [r7, #4] - 8002910: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8002914: 6879 ldr r1, [r7, #4] - 8002916: 2301 movs r3, #1 - 8002918: 697a ldr r2, [r7, #20] - 800291a: f7ff fde1 bl 80024e0 - 800291e: 4603 mov r3, r0 - 8002920: 2b00 cmp r3, #0 - 8002922: d002 beq.n 800292a + 80028a2: 687b ldr r3, [r7, #4] + 80028a4: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 80028a8: 6879 ldr r1, [r7, #4] + 80028aa: 2301 movs r3, #1 + 80028ac: 697a ldr r2, [r7, #20] + 80028ae: f7ff fde1 bl 8002474 + 80028b2: 4603 mov r3, r0 + 80028b4: 2b00 cmp r3, #0 + 80028b6: d002 beq.n 80028be res = FR_DISK_ERR; - 8002924: 2301 movs r3, #1 - 8002926: 73fb strb r3, [r7, #15] - 8002928: e026 b.n 8002978 + 80028b8: 2301 movs r3, #1 + 80028ba: 73fb strb r3, [r7, #15] + 80028bc: e026 b.n 800290c } else { fs->wflag = 0; - 800292a: 687b ldr r3, [r7, #4] - 800292c: 2200 movs r2, #0 - 800292e: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 80028be: 687b ldr r3, [r7, #4] + 80028c0: 2200 movs r2, #0 + 80028c2: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (wsect - fs->fatbase < fs->fsize) { /* Is it in the FAT area? */ - 8002932: 687b ldr r3, [r7, #4] - 8002934: f8d3 3220 ldr.w r3, [r3, #544] ; 0x220 - 8002938: 697a ldr r2, [r7, #20] - 800293a: 1ad2 subs r2, r2, r3 - 800293c: 687b ldr r3, [r7, #4] - 800293e: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8002942: 429a cmp r2, r3 - 8002944: d218 bcs.n 8002978 + 80028c6: 687b ldr r3, [r7, #4] + 80028c8: f8d3 3220 ldr.w r3, [r3, #544] ; 0x220 + 80028cc: 697a ldr r2, [r7, #20] + 80028ce: 1ad2 subs r2, r2, r3 + 80028d0: 687b ldr r3, [r7, #4] + 80028d2: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80028d6: 429a cmp r2, r3 + 80028d8: d218 bcs.n 800290c for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ - 8002946: 687b ldr r3, [r7, #4] - 8002948: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 800294c: 613b str r3, [r7, #16] - 800294e: e010 b.n 8002972 + 80028da: 687b ldr r3, [r7, #4] + 80028dc: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 80028e0: 613b str r3, [r7, #16] + 80028e2: e010 b.n 8002906 wsect += fs->fsize; - 8002950: 687b ldr r3, [r7, #4] - 8002952: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8002956: 697a ldr r2, [r7, #20] - 8002958: 4413 add r3, r2 - 800295a: 617b str r3, [r7, #20] + 80028e4: 687b ldr r3, [r7, #4] + 80028e6: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80028ea: 697a ldr r2, [r7, #20] + 80028ec: 4413 add r3, r2 + 80028ee: 617b str r3, [r7, #20] disk_write(fs->drv, fs->win.d8, wsect, 1); - 800295c: 687b ldr r3, [r7, #4] - 800295e: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8002962: 6879 ldr r1, [r7, #4] - 8002964: 2301 movs r3, #1 - 8002966: 697a ldr r2, [r7, #20] - 8002968: f7ff fdba bl 80024e0 + 80028f0: 687b ldr r3, [r7, #4] + 80028f2: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 80028f6: 6879 ldr r1, [r7, #4] + 80028f8: 2301 movs r3, #1 + 80028fa: 697a ldr r2, [r7, #20] + 80028fc: f7ff fdba bl 8002474 for (nf = fs->n_fats; nf >= 2; nf--) { /* Reflect the change to all FAT copies */ - 800296c: 693b ldr r3, [r7, #16] - 800296e: 3b01 subs r3, #1 - 8002970: 613b str r3, [r7, #16] - 8002972: 693b ldr r3, [r7, #16] - 8002974: 2b01 cmp r3, #1 - 8002976: d8eb bhi.n 8002950 + 8002900: 693b ldr r3, [r7, #16] + 8002902: 3b01 subs r3, #1 + 8002904: 613b str r3, [r7, #16] + 8002906: 693b ldr r3, [r7, #16] + 8002908: 2b01 cmp r3, #1 + 800290a: d8eb bhi.n 80028e4 } } } } return res; - 8002978: 7bfb ldrb r3, [r7, #15] + 800290c: 7bfb ldrb r3, [r7, #15] } - 800297a: 4618 mov r0, r3 - 800297c: 3718 adds r7, #24 - 800297e: 46bd mov sp, r7 - 8002980: bd80 pop {r7, pc} + 800290e: 4618 mov r0, r3 + 8002910: 3718 adds r7, #24 + 8002912: 46bd mov sp, r7 + 8002914: bd80 pop {r7, pc} -08002982 : +08002916 : static FRESULT move_window ( FATFS* fs, /* File system object */ DWORD sector /* Sector number to make appearance in the fs->win[].d8 */ ) { - 8002982: b580 push {r7, lr} - 8002984: b084 sub sp, #16 - 8002986: af00 add r7, sp, #0 - 8002988: 6078 str r0, [r7, #4] - 800298a: 6039 str r1, [r7, #0] + 8002916: b580 push {r7, lr} + 8002918: b084 sub sp, #16 + 800291a: af00 add r7, sp, #0 + 800291c: 6078 str r0, [r7, #4] + 800291e: 6039 str r1, [r7, #0] FRESULT res = FR_OK; - 800298c: 2300 movs r3, #0 - 800298e: 73fb strb r3, [r7, #15] + 8002920: 2300 movs r3, #0 + 8002922: 73fb strb r3, [r7, #15] if (sector != fs->winsect) { /* Window offset changed? */ - 8002990: 687b ldr r3, [r7, #4] - 8002992: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 8002996: 683a ldr r2, [r7, #0] - 8002998: 429a cmp r2, r3 - 800299a: d01b beq.n 80029d4 + 8002924: 687b ldr r3, [r7, #4] + 8002926: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 800292a: 683a ldr r2, [r7, #0] + 800292c: 429a cmp r2, r3 + 800292e: d01b beq.n 8002968 #if !_FS_READONLY res = sync_window(fs); /* Write-back changes */ - 800299c: 6878 ldr r0, [r7, #4] - 800299e: f7ff ffa7 bl 80028f0 - 80029a2: 4603 mov r3, r0 - 80029a4: 73fb strb r3, [r7, #15] + 8002930: 6878 ldr r0, [r7, #4] + 8002932: f7ff ffa7 bl 8002884 + 8002936: 4603 mov r3, r0 + 8002938: 73fb strb r3, [r7, #15] #endif if (res == FR_OK) { /* Fill sector window with new data */ - 80029a6: 7bfb ldrb r3, [r7, #15] - 80029a8: 2b00 cmp r3, #0 - 80029aa: d113 bne.n 80029d4 + 800293a: 7bfb ldrb r3, [r7, #15] + 800293c: 2b00 cmp r3, #0 + 800293e: d113 bne.n 8002968 if (disk_read(fs->drv, fs->win.d8, sector, 1) != RES_OK) { - 80029ac: 687b ldr r3, [r7, #4] - 80029ae: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 80029b2: 6879 ldr r1, [r7, #4] - 80029b4: 2301 movs r3, #1 - 80029b6: 683a ldr r2, [r7, #0] - 80029b8: f7ff fd72 bl 80024a0 - 80029bc: 4603 mov r3, r0 - 80029be: 2b00 cmp r3, #0 - 80029c0: d004 beq.n 80029cc + 8002940: 687b ldr r3, [r7, #4] + 8002942: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 8002946: 6879 ldr r1, [r7, #4] + 8002948: 2301 movs r3, #1 + 800294a: 683a ldr r2, [r7, #0] + 800294c: f7ff fd72 bl 8002434 + 8002950: 4603 mov r3, r0 + 8002952: 2b00 cmp r3, #0 + 8002954: d004 beq.n 8002960 sector = 0xFFFFFFFF; /* Invalidate window if data is not reliable */ - 80029c2: f04f 33ff mov.w r3, #4294967295 - 80029c6: 603b str r3, [r7, #0] + 8002956: f04f 33ff mov.w r3, #4294967295 + 800295a: 603b str r3, [r7, #0] res = FR_DISK_ERR; - 80029c8: 2301 movs r3, #1 - 80029ca: 73fb strb r3, [r7, #15] + 800295c: 2301 movs r3, #1 + 800295e: 73fb strb r3, [r7, #15] } fs->winsect = sector; - 80029cc: 687b ldr r3, [r7, #4] - 80029ce: 683a ldr r2, [r7, #0] - 80029d0: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 8002960: 687b ldr r3, [r7, #4] + 8002962: 683a ldr r2, [r7, #0] + 8002964: f8c3 222c str.w r2, [r3, #556] ; 0x22c } } return res; - 80029d4: 7bfb ldrb r3, [r7, #15] + 8002968: 7bfb ldrb r3, [r7, #15] } - 80029d6: 4618 mov r0, r3 - 80029d8: 3710 adds r7, #16 - 80029da: 46bd mov sp, r7 - 80029dc: bd80 pop {r7, pc} + 800296a: 4618 mov r0, r3 + 800296c: 3710 adds r7, #16 + 800296e: 46bd mov sp, r7 + 8002970: bd80 pop {r7, pc} -080029de : +08002972 : DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */ FATFS* fs, /* File system object */ DWORD clst /* Cluster# to be converted */ ) { - 80029de: b480 push {r7} - 80029e0: b083 sub sp, #12 - 80029e2: af00 add r7, sp, #0 - 80029e4: 6078 str r0, [r7, #4] - 80029e6: 6039 str r1, [r7, #0] + 8002972: b480 push {r7} + 8002974: b083 sub sp, #12 + 8002976: af00 add r7, sp, #0 + 8002978: 6078 str r0, [r7, #4] + 800297a: 6039 str r1, [r7, #0] clst -= 2; - 80029e8: 683b ldr r3, [r7, #0] - 80029ea: 3b02 subs r3, #2 - 80029ec: 603b str r3, [r7, #0] + 800297c: 683b ldr r3, [r7, #0] + 800297e: 3b02 subs r3, #2 + 8002980: 603b str r3, [r7, #0] if (clst >= fs->n_fatent - 2) return 0; /* Invalid cluster# */ - 80029ee: 687b ldr r3, [r7, #4] - 80029f0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80029f4: 3b02 subs r3, #2 - 80029f6: 683a ldr r2, [r7, #0] - 80029f8: 429a cmp r2, r3 - 80029fa: d301 bcc.n 8002a00 - 80029fc: 2300 movs r3, #0 - 80029fe: e00a b.n 8002a16 + 8002982: 687b ldr r3, [r7, #4] + 8002984: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002988: 3b02 subs r3, #2 + 800298a: 683a ldr r2, [r7, #0] + 800298c: 429a cmp r2, r3 + 800298e: d301 bcc.n 8002994 + 8002990: 2300 movs r3, #0 + 8002992: e00a b.n 80029aa return clst * fs->csize + fs->database; - 8002a00: 687b ldr r3, [r7, #4] - 8002a02: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8002a06: 461a mov r2, r3 - 8002a08: 683b ldr r3, [r7, #0] - 8002a0a: fb03 f202 mul.w r2, r3, r2 - 8002a0e: 687b ldr r3, [r7, #4] - 8002a10: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 - 8002a14: 4413 add r3, r2 + 8002994: 687b ldr r3, [r7, #4] + 8002996: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 800299a: 461a mov r2, r3 + 800299c: 683b ldr r3, [r7, #0] + 800299e: fb03 f202 mul.w r2, r3, r2 + 80029a2: 687b ldr r3, [r7, #4] + 80029a4: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 + 80029a8: 4413 add r3, r2 } - 8002a16: 4618 mov r0, r3 - 8002a18: 370c adds r7, #12 - 8002a1a: 46bd mov sp, r7 - 8002a1c: bc80 pop {r7} - 8002a1e: 4770 bx lr + 80029aa: 4618 mov r0, r3 + 80029ac: 370c adds r7, #12 + 80029ae: 46bd mov sp, r7 + 80029b0: bc80 pop {r7} + 80029b2: 4770 bx lr -08002a20 : +080029b4 : DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */ FATFS* fs, /* File system object */ DWORD clst /* FAT index number (cluster number) to get the value */ ) { - 8002a20: b580 push {r7, lr} - 8002a22: b086 sub sp, #24 - 8002a24: af00 add r7, sp, #0 - 8002a26: 6078 str r0, [r7, #4] - 8002a28: 6039 str r1, [r7, #0] + 80029b4: b580 push {r7, lr} + 80029b6: b086 sub sp, #24 + 80029b8: af00 add r7, sp, #0 + 80029ba: 6078 str r0, [r7, #4] + 80029bc: 6039 str r1, [r7, #0] UINT wc, bc; BYTE *p; DWORD val; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 8002a2a: 683b ldr r3, [r7, #0] - 8002a2c: 2b01 cmp r3, #1 - 8002a2e: d905 bls.n 8002a3c - 8002a30: 687b ldr r3, [r7, #4] - 8002a32: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002a36: 683a ldr r2, [r7, #0] - 8002a38: 429a cmp r2, r3 - 8002a3a: d302 bcc.n 8002a42 + 80029be: 683b ldr r3, [r7, #0] + 80029c0: 2b01 cmp r3, #1 + 80029c2: d905 bls.n 80029d0 + 80029c4: 687b ldr r3, [r7, #4] + 80029c6: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80029ca: 683a ldr r2, [r7, #0] + 80029cc: 429a cmp r2, r3 + 80029ce: d302 bcc.n 80029d6 val = 1; /* Internal error */ - 8002a3c: 2301 movs r3, #1 - 8002a3e: 617b str r3, [r7, #20] - 8002a40: e0a3 b.n 8002b8a + 80029d0: 2301 movs r3, #1 + 80029d2: 617b str r3, [r7, #20] + 80029d4: e0a3 b.n 8002b1e } else { val = 0xFFFFFFFF; /* Default value falls on disk error */ - 8002a42: f04f 33ff mov.w r3, #4294967295 - 8002a46: 617b str r3, [r7, #20] + 80029d6: f04f 33ff mov.w r3, #4294967295 + 80029da: 617b str r3, [r7, #20] switch (fs->fs_type) { - 8002a48: 687b ldr r3, [r7, #4] - 8002a4a: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8002a4e: 2b03 cmp r3, #3 - 8002a50: d068 beq.n 8002b24 - 8002a52: 2b03 cmp r3, #3 - 8002a54: f300 808f bgt.w 8002b76 - 8002a58: 2b01 cmp r3, #1 - 8002a5a: d002 beq.n 8002a62 - 8002a5c: 2b02 cmp r3, #2 - 8002a5e: d040 beq.n 8002ae2 - 8002a60: e089 b.n 8002b76 + 80029dc: 687b ldr r3, [r7, #4] + 80029de: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 80029e2: 2b03 cmp r3, #3 + 80029e4: d068 beq.n 8002ab8 + 80029e6: 2b03 cmp r3, #3 + 80029e8: f300 808f bgt.w 8002b0a + 80029ec: 2b01 cmp r3, #1 + 80029ee: d002 beq.n 80029f6 + 80029f0: 2b02 cmp r3, #2 + 80029f2: d040 beq.n 8002a76 + 80029f4: e089 b.n 8002b0a case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - 8002a62: 683b ldr r3, [r7, #0] - 8002a64: 60fb str r3, [r7, #12] - 8002a66: 68fb ldr r3, [r7, #12] - 8002a68: 085b lsrs r3, r3, #1 - 8002a6a: 68fa ldr r2, [r7, #12] - 8002a6c: 4413 add r3, r2 - 8002a6e: 60fb str r3, [r7, #12] + 80029f6: 683b ldr r3, [r7, #0] + 80029f8: 60fb str r3, [r7, #12] + 80029fa: 68fb ldr r3, [r7, #12] + 80029fc: 085b lsrs r3, r3, #1 + 80029fe: 68fa ldr r2, [r7, #12] + 8002a00: 4413 add r3, r2 + 8002a02: 60fb str r3, [r7, #12] if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002a70: 687b ldr r3, [r7, #4] - 8002a72: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002a76: 68fb ldr r3, [r7, #12] - 8002a78: 0a5b lsrs r3, r3, #9 - 8002a7a: 4413 add r3, r2 - 8002a7c: 4619 mov r1, r3 - 8002a7e: 6878 ldr r0, [r7, #4] - 8002a80: f7ff ff7f bl 8002982 - 8002a84: 4603 mov r3, r0 - 8002a86: 2b00 cmp r3, #0 - 8002a88: d178 bne.n 8002b7c + 8002a04: 687b ldr r3, [r7, #4] + 8002a06: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002a0a: 68fb ldr r3, [r7, #12] + 8002a0c: 0a5b lsrs r3, r3, #9 + 8002a0e: 4413 add r3, r2 + 8002a10: 4619 mov r1, r3 + 8002a12: 6878 ldr r0, [r7, #4] + 8002a14: f7ff ff7f bl 8002916 + 8002a18: 4603 mov r3, r0 + 8002a1a: 2b00 cmp r3, #0 + 8002a1c: d178 bne.n 8002b10 wc = fs->win.d8[bc++ % SS(fs)]; - 8002a8a: 68fb ldr r3, [r7, #12] - 8002a8c: 1c5a adds r2, r3, #1 - 8002a8e: 60fa str r2, [r7, #12] - 8002a90: f3c3 0308 ubfx r3, r3, #0, #9 - 8002a94: 687a ldr r2, [r7, #4] - 8002a96: 5cd3 ldrb r3, [r2, r3] - 8002a98: 60bb str r3, [r7, #8] + 8002a1e: 68fb ldr r3, [r7, #12] + 8002a20: 1c5a adds r2, r3, #1 + 8002a22: 60fa str r2, [r7, #12] + 8002a24: f3c3 0308 ubfx r3, r3, #0, #9 + 8002a28: 687a ldr r2, [r7, #4] + 8002a2a: 5cd3 ldrb r3, [r2, r3] + 8002a2c: 60bb str r3, [r7, #8] if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002a9a: 687b ldr r3, [r7, #4] - 8002a9c: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002aa0: 68fb ldr r3, [r7, #12] - 8002aa2: 0a5b lsrs r3, r3, #9 - 8002aa4: 4413 add r3, r2 - 8002aa6: 4619 mov r1, r3 - 8002aa8: 6878 ldr r0, [r7, #4] - 8002aaa: f7ff ff6a bl 8002982 - 8002aae: 4603 mov r3, r0 - 8002ab0: 2b00 cmp r3, #0 - 8002ab2: d165 bne.n 8002b80 + 8002a2e: 687b ldr r3, [r7, #4] + 8002a30: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002a34: 68fb ldr r3, [r7, #12] + 8002a36: 0a5b lsrs r3, r3, #9 + 8002a38: 4413 add r3, r2 + 8002a3a: 4619 mov r1, r3 + 8002a3c: 6878 ldr r0, [r7, #4] + 8002a3e: f7ff ff6a bl 8002916 + 8002a42: 4603 mov r3, r0 + 8002a44: 2b00 cmp r3, #0 + 8002a46: d165 bne.n 8002b14 wc |= fs->win.d8[bc % SS(fs)] << 8; - 8002ab4: 68fb ldr r3, [r7, #12] - 8002ab6: f3c3 0308 ubfx r3, r3, #0, #9 - 8002aba: 687a ldr r2, [r7, #4] - 8002abc: 5cd3 ldrb r3, [r2, r3] - 8002abe: 021b lsls r3, r3, #8 - 8002ac0: 461a mov r2, r3 - 8002ac2: 68bb ldr r3, [r7, #8] - 8002ac4: 4313 orrs r3, r2 - 8002ac6: 60bb str r3, [r7, #8] + 8002a48: 68fb ldr r3, [r7, #12] + 8002a4a: f3c3 0308 ubfx r3, r3, #0, #9 + 8002a4e: 687a ldr r2, [r7, #4] + 8002a50: 5cd3 ldrb r3, [r2, r3] + 8002a52: 021b lsls r3, r3, #8 + 8002a54: 461a mov r2, r3 + 8002a56: 68bb ldr r3, [r7, #8] + 8002a58: 4313 orrs r3, r2 + 8002a5a: 60bb str r3, [r7, #8] val = clst & 1 ? wc >> 4 : (wc & 0xFFF); - 8002ac8: 683b ldr r3, [r7, #0] - 8002aca: f003 0301 and.w r3, r3, #1 - 8002ace: 2b00 cmp r3, #0 - 8002ad0: d002 beq.n 8002ad8 - 8002ad2: 68bb ldr r3, [r7, #8] - 8002ad4: 091b lsrs r3, r3, #4 - 8002ad6: e002 b.n 8002ade - 8002ad8: 68bb ldr r3, [r7, #8] - 8002ada: f3c3 030b ubfx r3, r3, #0, #12 - 8002ade: 617b str r3, [r7, #20] + 8002a5c: 683b ldr r3, [r7, #0] + 8002a5e: f003 0301 and.w r3, r3, #1 + 8002a62: 2b00 cmp r3, #0 + 8002a64: d002 beq.n 8002a6c + 8002a66: 68bb ldr r3, [r7, #8] + 8002a68: 091b lsrs r3, r3, #4 + 8002a6a: e002 b.n 8002a72 + 8002a6c: 68bb ldr r3, [r7, #8] + 8002a6e: f3c3 030b ubfx r3, r3, #0, #12 + 8002a72: 617b str r3, [r7, #20] break; - 8002ae0: e053 b.n 8002b8a + 8002a74: e053 b.n 8002b1e case FS_FAT16 : if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; - 8002ae2: 687b ldr r3, [r7, #4] - 8002ae4: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002ae8: 683b ldr r3, [r7, #0] - 8002aea: 0a1b lsrs r3, r3, #8 - 8002aec: 4413 add r3, r2 - 8002aee: 4619 mov r1, r3 - 8002af0: 6878 ldr r0, [r7, #4] - 8002af2: f7ff ff46 bl 8002982 - 8002af6: 4603 mov r3, r0 - 8002af8: 2b00 cmp r3, #0 - 8002afa: d143 bne.n 8002b84 + 8002a76: 687b ldr r3, [r7, #4] + 8002a78: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002a7c: 683b ldr r3, [r7, #0] + 8002a7e: 0a1b lsrs r3, r3, #8 + 8002a80: 4413 add r3, r2 + 8002a82: 4619 mov r1, r3 + 8002a84: 6878 ldr r0, [r7, #4] + 8002a86: f7ff ff46 bl 8002916 + 8002a8a: 4603 mov r3, r0 + 8002a8c: 2b00 cmp r3, #0 + 8002a8e: d143 bne.n 8002b18 p = &fs->win.d8[clst * 2 % SS(fs)]; - 8002afc: 683b ldr r3, [r7, #0] - 8002afe: 005b lsls r3, r3, #1 - 8002b00: f403 73ff and.w r3, r3, #510 ; 0x1fe - 8002b04: 687a ldr r2, [r7, #4] - 8002b06: 4413 add r3, r2 - 8002b08: 613b str r3, [r7, #16] + 8002a90: 683b ldr r3, [r7, #0] + 8002a92: 005b lsls r3, r3, #1 + 8002a94: f403 73ff and.w r3, r3, #510 ; 0x1fe + 8002a98: 687a ldr r2, [r7, #4] + 8002a9a: 4413 add r3, r2 + 8002a9c: 613b str r3, [r7, #16] val = LD_WORD(p); - 8002b0a: 693b ldr r3, [r7, #16] - 8002b0c: 3301 adds r3, #1 - 8002b0e: 781b ldrb r3, [r3, #0] - 8002b10: 021b lsls r3, r3, #8 - 8002b12: b21a sxth r2, r3 - 8002b14: 693b ldr r3, [r7, #16] - 8002b16: 781b ldrb r3, [r3, #0] - 8002b18: b21b sxth r3, r3 - 8002b1a: 4313 orrs r3, r2 - 8002b1c: b21b sxth r3, r3 - 8002b1e: b29b uxth r3, r3 - 8002b20: 617b str r3, [r7, #20] + 8002a9e: 693b ldr r3, [r7, #16] + 8002aa0: 3301 adds r3, #1 + 8002aa2: 781b ldrb r3, [r3, #0] + 8002aa4: 021b lsls r3, r3, #8 + 8002aa6: b21a sxth r2, r3 + 8002aa8: 693b ldr r3, [r7, #16] + 8002aaa: 781b ldrb r3, [r3, #0] + 8002aac: b21b sxth r3, r3 + 8002aae: 4313 orrs r3, r2 + 8002ab0: b21b sxth r3, r3 + 8002ab2: b29b uxth r3, r3 + 8002ab4: 617b str r3, [r7, #20] break; - 8002b22: e032 b.n 8002b8a + 8002ab6: e032 b.n 8002b1e case FS_FAT32 : if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; - 8002b24: 687b ldr r3, [r7, #4] - 8002b26: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002b2a: 683b ldr r3, [r7, #0] - 8002b2c: 09db lsrs r3, r3, #7 - 8002b2e: 4413 add r3, r2 - 8002b30: 4619 mov r1, r3 - 8002b32: 6878 ldr r0, [r7, #4] - 8002b34: f7ff ff25 bl 8002982 - 8002b38: 4603 mov r3, r0 - 8002b3a: 2b00 cmp r3, #0 - 8002b3c: d124 bne.n 8002b88 + 8002ab8: 687b ldr r3, [r7, #4] + 8002aba: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002abe: 683b ldr r3, [r7, #0] + 8002ac0: 09db lsrs r3, r3, #7 + 8002ac2: 4413 add r3, r2 + 8002ac4: 4619 mov r1, r3 + 8002ac6: 6878 ldr r0, [r7, #4] + 8002ac8: f7ff ff25 bl 8002916 + 8002acc: 4603 mov r3, r0 + 8002ace: 2b00 cmp r3, #0 + 8002ad0: d124 bne.n 8002b1c p = &fs->win.d8[clst * 4 % SS(fs)]; - 8002b3e: 683b ldr r3, [r7, #0] - 8002b40: 009b lsls r3, r3, #2 - 8002b42: f403 73fe and.w r3, r3, #508 ; 0x1fc - 8002b46: 687a ldr r2, [r7, #4] - 8002b48: 4413 add r3, r2 - 8002b4a: 613b str r3, [r7, #16] + 8002ad2: 683b ldr r3, [r7, #0] + 8002ad4: 009b lsls r3, r3, #2 + 8002ad6: f403 73fe and.w r3, r3, #508 ; 0x1fc + 8002ada: 687a ldr r2, [r7, #4] + 8002adc: 4413 add r3, r2 + 8002ade: 613b str r3, [r7, #16] val = LD_DWORD(p) & 0x0FFFFFFF; - 8002b4c: 693b ldr r3, [r7, #16] - 8002b4e: 3303 adds r3, #3 - 8002b50: 781b ldrb r3, [r3, #0] - 8002b52: 061a lsls r2, r3, #24 - 8002b54: 693b ldr r3, [r7, #16] - 8002b56: 3302 adds r3, #2 - 8002b58: 781b ldrb r3, [r3, #0] - 8002b5a: 041b lsls r3, r3, #16 - 8002b5c: 4313 orrs r3, r2 - 8002b5e: 693a ldr r2, [r7, #16] - 8002b60: 3201 adds r2, #1 - 8002b62: 7812 ldrb r2, [r2, #0] - 8002b64: 0212 lsls r2, r2, #8 - 8002b66: 4313 orrs r3, r2 - 8002b68: 693a ldr r2, [r7, #16] - 8002b6a: 7812 ldrb r2, [r2, #0] - 8002b6c: 4313 orrs r3, r2 - 8002b6e: f023 4370 bic.w r3, r3, #4026531840 ; 0xf0000000 - 8002b72: 617b str r3, [r7, #20] + 8002ae0: 693b ldr r3, [r7, #16] + 8002ae2: 3303 adds r3, #3 + 8002ae4: 781b ldrb r3, [r3, #0] + 8002ae6: 061a lsls r2, r3, #24 + 8002ae8: 693b ldr r3, [r7, #16] + 8002aea: 3302 adds r3, #2 + 8002aec: 781b ldrb r3, [r3, #0] + 8002aee: 041b lsls r3, r3, #16 + 8002af0: 4313 orrs r3, r2 + 8002af2: 693a ldr r2, [r7, #16] + 8002af4: 3201 adds r2, #1 + 8002af6: 7812 ldrb r2, [r2, #0] + 8002af8: 0212 lsls r2, r2, #8 + 8002afa: 4313 orrs r3, r2 + 8002afc: 693a ldr r2, [r7, #16] + 8002afe: 7812 ldrb r2, [r2, #0] + 8002b00: 4313 orrs r3, r2 + 8002b02: f023 4370 bic.w r3, r3, #4026531840 ; 0xf0000000 + 8002b06: 617b str r3, [r7, #20] break; - 8002b74: e009 b.n 8002b8a + 8002b08: e009 b.n 8002b1e default: val = 1; /* Internal error */ - 8002b76: 2301 movs r3, #1 - 8002b78: 617b str r3, [r7, #20] - 8002b7a: e006 b.n 8002b8a + 8002b0a: 2301 movs r3, #1 + 8002b0c: 617b str r3, [r7, #20] + 8002b0e: e006 b.n 8002b1e if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002b7c: bf00 nop - 8002b7e: e004 b.n 8002b8a + 8002b10: bf00 nop + 8002b12: e004 b.n 8002b1e if (move_window(fs, fs->fatbase + (bc / SS(fs))) != FR_OK) break; - 8002b80: bf00 nop - 8002b82: e002 b.n 8002b8a + 8002b14: bf00 nop + 8002b16: e002 b.n 8002b1e if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))) != FR_OK) break; - 8002b84: bf00 nop - 8002b86: e000 b.n 8002b8a + 8002b18: bf00 nop + 8002b1a: e000 b.n 8002b1e if (move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))) != FR_OK) break; - 8002b88: bf00 nop + 8002b1c: bf00 nop } } return val; - 8002b8a: 697b ldr r3, [r7, #20] + 8002b1e: 697b ldr r3, [r7, #20] } - 8002b8c: 4618 mov r0, r3 - 8002b8e: 3718 adds r7, #24 - 8002b90: 46bd mov sp, r7 - 8002b92: bd80 pop {r7, pc} + 8002b20: 4618 mov r0, r3 + 8002b22: 3718 adds r7, #24 + 8002b24: 46bd mov sp, r7 + 8002b26: bd80 pop {r7, pc} -08002b94 : +08002b28 : FRESULT put_fat ( FATFS* fs, /* File system object */ DWORD clst, /* FAT index number (cluster number) to be changed */ DWORD val /* New value to be set to the entry */ ) { - 8002b94: b580 push {r7, lr} - 8002b96: b088 sub sp, #32 - 8002b98: af00 add r7, sp, #0 - 8002b9a: 60f8 str r0, [r7, #12] - 8002b9c: 60b9 str r1, [r7, #8] - 8002b9e: 607a str r2, [r7, #4] + 8002b28: b580 push {r7, lr} + 8002b2a: b088 sub sp, #32 + 8002b2c: af00 add r7, sp, #0 + 8002b2e: 60f8 str r0, [r7, #12] + 8002b30: 60b9 str r1, [r7, #8] + 8002b32: 607a str r2, [r7, #4] UINT bc; BYTE *p; FRESULT res; if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 8002ba0: 68bb ldr r3, [r7, #8] - 8002ba2: 2b01 cmp r3, #1 - 8002ba4: d905 bls.n 8002bb2 - 8002ba6: 68fb ldr r3, [r7, #12] - 8002ba8: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002bac: 68ba ldr r2, [r7, #8] - 8002bae: 429a cmp r2, r3 - 8002bb0: d302 bcc.n 8002bb8 + 8002b34: 68bb ldr r3, [r7, #8] + 8002b36: 2b01 cmp r3, #1 + 8002b38: d905 bls.n 8002b46 + 8002b3a: 68fb ldr r3, [r7, #12] + 8002b3c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002b40: 68ba ldr r2, [r7, #8] + 8002b42: 429a cmp r2, r3 + 8002b44: d302 bcc.n 8002b4c res = FR_INT_ERR; - 8002bb2: 2302 movs r3, #2 - 8002bb4: 77fb strb r3, [r7, #31] - 8002bb6: e0f6 b.n 8002da6 + 8002b46: 2302 movs r3, #2 + 8002b48: 77fb strb r3, [r7, #31] + 8002b4a: e0f6 b.n 8002d3a } else { switch (fs->fs_type) { - 8002bb8: 68fb ldr r3, [r7, #12] - 8002bba: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8002bbe: 2b03 cmp r3, #3 - 8002bc0: f000 809e beq.w 8002d00 - 8002bc4: 2b03 cmp r3, #3 - 8002bc6: f300 80e4 bgt.w 8002d92 - 8002bca: 2b01 cmp r3, #1 - 8002bcc: d002 beq.n 8002bd4 - 8002bce: 2b02 cmp r3, #2 - 8002bd0: d06f beq.n 8002cb2 - 8002bd2: e0de b.n 8002d92 + 8002b4c: 68fb ldr r3, [r7, #12] + 8002b4e: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8002b52: 2b03 cmp r3, #3 + 8002b54: f000 809e beq.w 8002c94 + 8002b58: 2b03 cmp r3, #3 + 8002b5a: f300 80e4 bgt.w 8002d26 + 8002b5e: 2b01 cmp r3, #1 + 8002b60: d002 beq.n 8002b68 + 8002b62: 2b02 cmp r3, #2 + 8002b64: d06f beq.n 8002c46 + 8002b66: e0de b.n 8002d26 case FS_FAT12 : bc = (UINT)clst; bc += bc / 2; - 8002bd4: 68bb ldr r3, [r7, #8] - 8002bd6: 617b str r3, [r7, #20] - 8002bd8: 697b ldr r3, [r7, #20] - 8002bda: 085b lsrs r3, r3, #1 - 8002bdc: 697a ldr r2, [r7, #20] - 8002bde: 4413 add r3, r2 - 8002be0: 617b str r3, [r7, #20] + 8002b68: 68bb ldr r3, [r7, #8] + 8002b6a: 617b str r3, [r7, #20] + 8002b6c: 697b ldr r3, [r7, #20] + 8002b6e: 085b lsrs r3, r3, #1 + 8002b70: 697a ldr r2, [r7, #20] + 8002b72: 4413 add r3, r2 + 8002b74: 617b str r3, [r7, #20] res = move_window(fs, fs->fatbase + (bc / SS(fs))); - 8002be2: 68fb ldr r3, [r7, #12] - 8002be4: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002be8: 697b ldr r3, [r7, #20] - 8002bea: 0a5b lsrs r3, r3, #9 - 8002bec: 4413 add r3, r2 - 8002bee: 4619 mov r1, r3 - 8002bf0: 68f8 ldr r0, [r7, #12] - 8002bf2: f7ff fec6 bl 8002982 - 8002bf6: 4603 mov r3, r0 - 8002bf8: 77fb strb r3, [r7, #31] + 8002b76: 68fb ldr r3, [r7, #12] + 8002b78: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002b7c: 697b ldr r3, [r7, #20] + 8002b7e: 0a5b lsrs r3, r3, #9 + 8002b80: 4413 add r3, r2 + 8002b82: 4619 mov r1, r3 + 8002b84: 68f8 ldr r0, [r7, #12] + 8002b86: f7ff fec6 bl 8002916 + 8002b8a: 4603 mov r3, r0 + 8002b8c: 77fb strb r3, [r7, #31] if (res != FR_OK) break; - 8002bfa: 7ffb ldrb r3, [r7, #31] - 8002bfc: 2b00 cmp r3, #0 - 8002bfe: f040 80cb bne.w 8002d98 + 8002b8e: 7ffb ldrb r3, [r7, #31] + 8002b90: 2b00 cmp r3, #0 + 8002b92: f040 80cb bne.w 8002d2c p = &fs->win.d8[bc++ % SS(fs)]; - 8002c02: 697b ldr r3, [r7, #20] - 8002c04: 1c5a adds r2, r3, #1 - 8002c06: 617a str r2, [r7, #20] - 8002c08: f3c3 0308 ubfx r3, r3, #0, #9 - 8002c0c: 68fa ldr r2, [r7, #12] - 8002c0e: 4413 add r3, r2 - 8002c10: 61bb str r3, [r7, #24] + 8002b96: 697b ldr r3, [r7, #20] + 8002b98: 1c5a adds r2, r3, #1 + 8002b9a: 617a str r2, [r7, #20] + 8002b9c: f3c3 0308 ubfx r3, r3, #0, #9 + 8002ba0: 68fa ldr r2, [r7, #12] + 8002ba2: 4413 add r3, r2 + 8002ba4: 61bb str r3, [r7, #24] *p = (clst & 1) ? ((*p & 0x0F) | ((BYTE)val << 4)) : (BYTE)val; - 8002c12: 68bb ldr r3, [r7, #8] - 8002c14: f003 0301 and.w r3, r3, #1 - 8002c18: 2b00 cmp r3, #0 - 8002c1a: d00d beq.n 8002c38 - 8002c1c: 69bb ldr r3, [r7, #24] - 8002c1e: 781b ldrb r3, [r3, #0] - 8002c20: b25b sxtb r3, r3 - 8002c22: f003 030f and.w r3, r3, #15 - 8002c26: b25a sxtb r2, r3 - 8002c28: 687b ldr r3, [r7, #4] - 8002c2a: b2db uxtb r3, r3 - 8002c2c: 011b lsls r3, r3, #4 - 8002c2e: b25b sxtb r3, r3 - 8002c30: 4313 orrs r3, r2 - 8002c32: b25b sxtb r3, r3 - 8002c34: b2db uxtb r3, r3 - 8002c36: e001 b.n 8002c3c - 8002c38: 687b ldr r3, [r7, #4] - 8002c3a: b2db uxtb r3, r3 - 8002c3c: 69ba ldr r2, [r7, #24] - 8002c3e: 7013 strb r3, [r2, #0] + 8002ba6: 68bb ldr r3, [r7, #8] + 8002ba8: f003 0301 and.w r3, r3, #1 + 8002bac: 2b00 cmp r3, #0 + 8002bae: d00d beq.n 8002bcc + 8002bb0: 69bb ldr r3, [r7, #24] + 8002bb2: 781b ldrb r3, [r3, #0] + 8002bb4: b25b sxtb r3, r3 + 8002bb6: f003 030f and.w r3, r3, #15 + 8002bba: b25a sxtb r2, r3 + 8002bbc: 687b ldr r3, [r7, #4] + 8002bbe: b2db uxtb r3, r3 + 8002bc0: 011b lsls r3, r3, #4 + 8002bc2: b25b sxtb r3, r3 + 8002bc4: 4313 orrs r3, r2 + 8002bc6: b25b sxtb r3, r3 + 8002bc8: b2db uxtb r3, r3 + 8002bca: e001 b.n 8002bd0 + 8002bcc: 687b ldr r3, [r7, #4] + 8002bce: b2db uxtb r3, r3 + 8002bd0: 69ba ldr r2, [r7, #24] + 8002bd2: 7013 strb r3, [r2, #0] fs->wflag = 1; - 8002c40: 68fb ldr r3, [r7, #12] - 8002c42: 2201 movs r2, #1 - 8002c44: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002bd4: 68fb ldr r3, [r7, #12] + 8002bd6: 2201 movs r2, #1 + 8002bd8: f883 2204 strb.w r2, [r3, #516] ; 0x204 res = move_window(fs, fs->fatbase + (bc / SS(fs))); - 8002c48: 68fb ldr r3, [r7, #12] - 8002c4a: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002c4e: 697b ldr r3, [r7, #20] - 8002c50: 0a5b lsrs r3, r3, #9 - 8002c52: 4413 add r3, r2 - 8002c54: 4619 mov r1, r3 - 8002c56: 68f8 ldr r0, [r7, #12] - 8002c58: f7ff fe93 bl 8002982 - 8002c5c: 4603 mov r3, r0 - 8002c5e: 77fb strb r3, [r7, #31] + 8002bdc: 68fb ldr r3, [r7, #12] + 8002bde: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002be2: 697b ldr r3, [r7, #20] + 8002be4: 0a5b lsrs r3, r3, #9 + 8002be6: 4413 add r3, r2 + 8002be8: 4619 mov r1, r3 + 8002bea: 68f8 ldr r0, [r7, #12] + 8002bec: f7ff fe93 bl 8002916 + 8002bf0: 4603 mov r3, r0 + 8002bf2: 77fb strb r3, [r7, #31] if (res != FR_OK) break; - 8002c60: 7ffb ldrb r3, [r7, #31] - 8002c62: 2b00 cmp r3, #0 - 8002c64: f040 809a bne.w 8002d9c + 8002bf4: 7ffb ldrb r3, [r7, #31] + 8002bf6: 2b00 cmp r3, #0 + 8002bf8: f040 809a bne.w 8002d30 p = &fs->win.d8[bc % SS(fs)]; - 8002c68: 697b ldr r3, [r7, #20] - 8002c6a: f3c3 0308 ubfx r3, r3, #0, #9 - 8002c6e: 68fa ldr r2, [r7, #12] - 8002c70: 4413 add r3, r2 - 8002c72: 61bb str r3, [r7, #24] + 8002bfc: 697b ldr r3, [r7, #20] + 8002bfe: f3c3 0308 ubfx r3, r3, #0, #9 + 8002c02: 68fa ldr r2, [r7, #12] + 8002c04: 4413 add r3, r2 + 8002c06: 61bb str r3, [r7, #24] *p = (clst & 1) ? (BYTE)(val >> 4) : ((*p & 0xF0) | ((BYTE)(val >> 8) & 0x0F)); - 8002c74: 68bb ldr r3, [r7, #8] - 8002c76: f003 0301 and.w r3, r3, #1 - 8002c7a: 2b00 cmp r3, #0 - 8002c7c: d003 beq.n 8002c86 - 8002c7e: 687b ldr r3, [r7, #4] - 8002c80: 091b lsrs r3, r3, #4 - 8002c82: b2db uxtb r3, r3 - 8002c84: e00e b.n 8002ca4 - 8002c86: 69bb ldr r3, [r7, #24] - 8002c88: 781b ldrb r3, [r3, #0] - 8002c8a: b25b sxtb r3, r3 - 8002c8c: f023 030f bic.w r3, r3, #15 - 8002c90: b25a sxtb r2, r3 - 8002c92: 687b ldr r3, [r7, #4] - 8002c94: 0a1b lsrs r3, r3, #8 - 8002c96: b25b sxtb r3, r3 - 8002c98: f003 030f and.w r3, r3, #15 - 8002c9c: b25b sxtb r3, r3 - 8002c9e: 4313 orrs r3, r2 - 8002ca0: b25b sxtb r3, r3 - 8002ca2: b2db uxtb r3, r3 - 8002ca4: 69ba ldr r2, [r7, #24] - 8002ca6: 7013 strb r3, [r2, #0] + 8002c08: 68bb ldr r3, [r7, #8] + 8002c0a: f003 0301 and.w r3, r3, #1 + 8002c0e: 2b00 cmp r3, #0 + 8002c10: d003 beq.n 8002c1a + 8002c12: 687b ldr r3, [r7, #4] + 8002c14: 091b lsrs r3, r3, #4 + 8002c16: b2db uxtb r3, r3 + 8002c18: e00e b.n 8002c38 + 8002c1a: 69bb ldr r3, [r7, #24] + 8002c1c: 781b ldrb r3, [r3, #0] + 8002c1e: b25b sxtb r3, r3 + 8002c20: f023 030f bic.w r3, r3, #15 + 8002c24: b25a sxtb r2, r3 + 8002c26: 687b ldr r3, [r7, #4] + 8002c28: 0a1b lsrs r3, r3, #8 + 8002c2a: b25b sxtb r3, r3 + 8002c2c: f003 030f and.w r3, r3, #15 + 8002c30: b25b sxtb r3, r3 + 8002c32: 4313 orrs r3, r2 + 8002c34: b25b sxtb r3, r3 + 8002c36: b2db uxtb r3, r3 + 8002c38: 69ba ldr r2, [r7, #24] + 8002c3a: 7013 strb r3, [r2, #0] fs->wflag = 1; - 8002ca8: 68fb ldr r3, [r7, #12] - 8002caa: 2201 movs r2, #1 - 8002cac: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002c3c: 68fb ldr r3, [r7, #12] + 8002c3e: 2201 movs r2, #1 + 8002c40: f883 2204 strb.w r2, [r3, #516] ; 0x204 break; - 8002cb0: e079 b.n 8002da6 + 8002c44: e079 b.n 8002d3a case FS_FAT16 : res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 2))); - 8002cb2: 68fb ldr r3, [r7, #12] - 8002cb4: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002cb8: 68bb ldr r3, [r7, #8] - 8002cba: 0a1b lsrs r3, r3, #8 - 8002cbc: 4413 add r3, r2 - 8002cbe: 4619 mov r1, r3 - 8002cc0: 68f8 ldr r0, [r7, #12] - 8002cc2: f7ff fe5e bl 8002982 - 8002cc6: 4603 mov r3, r0 - 8002cc8: 77fb strb r3, [r7, #31] + 8002c46: 68fb ldr r3, [r7, #12] + 8002c48: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002c4c: 68bb ldr r3, [r7, #8] + 8002c4e: 0a1b lsrs r3, r3, #8 + 8002c50: 4413 add r3, r2 + 8002c52: 4619 mov r1, r3 + 8002c54: 68f8 ldr r0, [r7, #12] + 8002c56: f7ff fe5e bl 8002916 + 8002c5a: 4603 mov r3, r0 + 8002c5c: 77fb strb r3, [r7, #31] if (res != FR_OK) break; - 8002cca: 7ffb ldrb r3, [r7, #31] - 8002ccc: 2b00 cmp r3, #0 - 8002cce: d167 bne.n 8002da0 + 8002c5e: 7ffb ldrb r3, [r7, #31] + 8002c60: 2b00 cmp r3, #0 + 8002c62: d167 bne.n 8002d34 p = &fs->win.d8[clst * 2 % SS(fs)]; - 8002cd0: 68bb ldr r3, [r7, #8] - 8002cd2: 005b lsls r3, r3, #1 - 8002cd4: f403 73ff and.w r3, r3, #510 ; 0x1fe - 8002cd8: 68fa ldr r2, [r7, #12] - 8002cda: 4413 add r3, r2 - 8002cdc: 61bb str r3, [r7, #24] + 8002c64: 68bb ldr r3, [r7, #8] + 8002c66: 005b lsls r3, r3, #1 + 8002c68: f403 73ff and.w r3, r3, #510 ; 0x1fe + 8002c6c: 68fa ldr r2, [r7, #12] + 8002c6e: 4413 add r3, r2 + 8002c70: 61bb str r3, [r7, #24] ST_WORD(p, (WORD)val); - 8002cde: 687b ldr r3, [r7, #4] - 8002ce0: b2da uxtb r2, r3 - 8002ce2: 69bb ldr r3, [r7, #24] - 8002ce4: 701a strb r2, [r3, #0] - 8002ce6: 687b ldr r3, [r7, #4] - 8002ce8: b29b uxth r3, r3 - 8002cea: 0a1b lsrs r3, r3, #8 - 8002cec: b29a uxth r2, r3 - 8002cee: 69bb ldr r3, [r7, #24] - 8002cf0: 3301 adds r3, #1 - 8002cf2: b2d2 uxtb r2, r2 - 8002cf4: 701a strb r2, [r3, #0] + 8002c72: 687b ldr r3, [r7, #4] + 8002c74: b2da uxtb r2, r3 + 8002c76: 69bb ldr r3, [r7, #24] + 8002c78: 701a strb r2, [r3, #0] + 8002c7a: 687b ldr r3, [r7, #4] + 8002c7c: b29b uxth r3, r3 + 8002c7e: 0a1b lsrs r3, r3, #8 + 8002c80: b29a uxth r2, r3 + 8002c82: 69bb ldr r3, [r7, #24] + 8002c84: 3301 adds r3, #1 + 8002c86: b2d2 uxtb r2, r2 + 8002c88: 701a strb r2, [r3, #0] fs->wflag = 1; - 8002cf6: 68fb ldr r3, [r7, #12] - 8002cf8: 2201 movs r2, #1 - 8002cfa: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002c8a: 68fb ldr r3, [r7, #12] + 8002c8c: 2201 movs r2, #1 + 8002c8e: f883 2204 strb.w r2, [r3, #516] ; 0x204 break; - 8002cfe: e052 b.n 8002da6 + 8002c92: e052 b.n 8002d3a case FS_FAT32 : res = move_window(fs, fs->fatbase + (clst / (SS(fs) / 4))); - 8002d00: 68fb ldr r3, [r7, #12] - 8002d02: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8002d06: 68bb ldr r3, [r7, #8] - 8002d08: 09db lsrs r3, r3, #7 - 8002d0a: 4413 add r3, r2 - 8002d0c: 4619 mov r1, r3 - 8002d0e: 68f8 ldr r0, [r7, #12] - 8002d10: f7ff fe37 bl 8002982 - 8002d14: 4603 mov r3, r0 - 8002d16: 77fb strb r3, [r7, #31] + 8002c94: 68fb ldr r3, [r7, #12] + 8002c96: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8002c9a: 68bb ldr r3, [r7, #8] + 8002c9c: 09db lsrs r3, r3, #7 + 8002c9e: 4413 add r3, r2 + 8002ca0: 4619 mov r1, r3 + 8002ca2: 68f8 ldr r0, [r7, #12] + 8002ca4: f7ff fe37 bl 8002916 + 8002ca8: 4603 mov r3, r0 + 8002caa: 77fb strb r3, [r7, #31] if (res != FR_OK) break; - 8002d18: 7ffb ldrb r3, [r7, #31] - 8002d1a: 2b00 cmp r3, #0 - 8002d1c: d142 bne.n 8002da4 + 8002cac: 7ffb ldrb r3, [r7, #31] + 8002cae: 2b00 cmp r3, #0 + 8002cb0: d142 bne.n 8002d38 p = &fs->win.d8[clst * 4 % SS(fs)]; - 8002d1e: 68bb ldr r3, [r7, #8] - 8002d20: 009b lsls r3, r3, #2 - 8002d22: f403 73fe and.w r3, r3, #508 ; 0x1fc - 8002d26: 68fa ldr r2, [r7, #12] - 8002d28: 4413 add r3, r2 - 8002d2a: 61bb str r3, [r7, #24] + 8002cb2: 68bb ldr r3, [r7, #8] + 8002cb4: 009b lsls r3, r3, #2 + 8002cb6: f403 73fe and.w r3, r3, #508 ; 0x1fc + 8002cba: 68fa ldr r2, [r7, #12] + 8002cbc: 4413 add r3, r2 + 8002cbe: 61bb str r3, [r7, #24] val |= LD_DWORD(p) & 0xF0000000; - 8002d2c: 69bb ldr r3, [r7, #24] - 8002d2e: 3303 adds r3, #3 - 8002d30: 781b ldrb r3, [r3, #0] - 8002d32: 061a lsls r2, r3, #24 - 8002d34: 69bb ldr r3, [r7, #24] - 8002d36: 3302 adds r3, #2 - 8002d38: 781b ldrb r3, [r3, #0] - 8002d3a: 041b lsls r3, r3, #16 - 8002d3c: 4313 orrs r3, r2 - 8002d3e: 69ba ldr r2, [r7, #24] - 8002d40: 3201 adds r2, #1 - 8002d42: 7812 ldrb r2, [r2, #0] - 8002d44: 0212 lsls r2, r2, #8 - 8002d46: 4313 orrs r3, r2 - 8002d48: 69ba ldr r2, [r7, #24] - 8002d4a: 7812 ldrb r2, [r2, #0] - 8002d4c: 4313 orrs r3, r2 - 8002d4e: f003 4370 and.w r3, r3, #4026531840 ; 0xf0000000 - 8002d52: 687a ldr r2, [r7, #4] - 8002d54: 4313 orrs r3, r2 - 8002d56: 607b str r3, [r7, #4] + 8002cc0: 69bb ldr r3, [r7, #24] + 8002cc2: 3303 adds r3, #3 + 8002cc4: 781b ldrb r3, [r3, #0] + 8002cc6: 061a lsls r2, r3, #24 + 8002cc8: 69bb ldr r3, [r7, #24] + 8002cca: 3302 adds r3, #2 + 8002ccc: 781b ldrb r3, [r3, #0] + 8002cce: 041b lsls r3, r3, #16 + 8002cd0: 4313 orrs r3, r2 + 8002cd2: 69ba ldr r2, [r7, #24] + 8002cd4: 3201 adds r2, #1 + 8002cd6: 7812 ldrb r2, [r2, #0] + 8002cd8: 0212 lsls r2, r2, #8 + 8002cda: 4313 orrs r3, r2 + 8002cdc: 69ba ldr r2, [r7, #24] + 8002cde: 7812 ldrb r2, [r2, #0] + 8002ce0: 4313 orrs r3, r2 + 8002ce2: f003 4370 and.w r3, r3, #4026531840 ; 0xf0000000 + 8002ce6: 687a ldr r2, [r7, #4] + 8002ce8: 4313 orrs r3, r2 + 8002cea: 607b str r3, [r7, #4] ST_DWORD(p, val); - 8002d58: 687b ldr r3, [r7, #4] - 8002d5a: b2da uxtb r2, r3 - 8002d5c: 69bb ldr r3, [r7, #24] - 8002d5e: 701a strb r2, [r3, #0] - 8002d60: 687b ldr r3, [r7, #4] - 8002d62: b29b uxth r3, r3 - 8002d64: 0a1b lsrs r3, r3, #8 - 8002d66: b29a uxth r2, r3 - 8002d68: 69bb ldr r3, [r7, #24] - 8002d6a: 3301 adds r3, #1 - 8002d6c: b2d2 uxtb r2, r2 - 8002d6e: 701a strb r2, [r3, #0] - 8002d70: 687b ldr r3, [r7, #4] - 8002d72: 0c1a lsrs r2, r3, #16 - 8002d74: 69bb ldr r3, [r7, #24] - 8002d76: 3302 adds r3, #2 - 8002d78: b2d2 uxtb r2, r2 - 8002d7a: 701a strb r2, [r3, #0] - 8002d7c: 687b ldr r3, [r7, #4] - 8002d7e: 0e1a lsrs r2, r3, #24 - 8002d80: 69bb ldr r3, [r7, #24] - 8002d82: 3303 adds r3, #3 - 8002d84: b2d2 uxtb r2, r2 - 8002d86: 701a strb r2, [r3, #0] + 8002cec: 687b ldr r3, [r7, #4] + 8002cee: b2da uxtb r2, r3 + 8002cf0: 69bb ldr r3, [r7, #24] + 8002cf2: 701a strb r2, [r3, #0] + 8002cf4: 687b ldr r3, [r7, #4] + 8002cf6: b29b uxth r3, r3 + 8002cf8: 0a1b lsrs r3, r3, #8 + 8002cfa: b29a uxth r2, r3 + 8002cfc: 69bb ldr r3, [r7, #24] + 8002cfe: 3301 adds r3, #1 + 8002d00: b2d2 uxtb r2, r2 + 8002d02: 701a strb r2, [r3, #0] + 8002d04: 687b ldr r3, [r7, #4] + 8002d06: 0c1a lsrs r2, r3, #16 + 8002d08: 69bb ldr r3, [r7, #24] + 8002d0a: 3302 adds r3, #2 + 8002d0c: b2d2 uxtb r2, r2 + 8002d0e: 701a strb r2, [r3, #0] + 8002d10: 687b ldr r3, [r7, #4] + 8002d12: 0e1a lsrs r2, r3, #24 + 8002d14: 69bb ldr r3, [r7, #24] + 8002d16: 3303 adds r3, #3 + 8002d18: b2d2 uxtb r2, r2 + 8002d1a: 701a strb r2, [r3, #0] fs->wflag = 1; - 8002d88: 68fb ldr r3, [r7, #12] - 8002d8a: 2201 movs r2, #1 - 8002d8c: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8002d1c: 68fb ldr r3, [r7, #12] + 8002d1e: 2201 movs r2, #1 + 8002d20: f883 2204 strb.w r2, [r3, #516] ; 0x204 break; - 8002d90: e009 b.n 8002da6 + 8002d24: e009 b.n 8002d3a default : res = FR_INT_ERR; - 8002d92: 2302 movs r3, #2 - 8002d94: 77fb strb r3, [r7, #31] - 8002d96: e006 b.n 8002da6 + 8002d26: 2302 movs r3, #2 + 8002d28: 77fb strb r3, [r7, #31] + 8002d2a: e006 b.n 8002d3a if (res != FR_OK) break; - 8002d98: bf00 nop - 8002d9a: e004 b.n 8002da6 + 8002d2c: bf00 nop + 8002d2e: e004 b.n 8002d3a if (res != FR_OK) break; - 8002d9c: bf00 nop - 8002d9e: e002 b.n 8002da6 + 8002d30: bf00 nop + 8002d32: e002 b.n 8002d3a if (res != FR_OK) break; - 8002da0: bf00 nop - 8002da2: e000 b.n 8002da6 + 8002d34: bf00 nop + 8002d36: e000 b.n 8002d3a if (res != FR_OK) break; - 8002da4: bf00 nop + 8002d38: bf00 nop } } return res; - 8002da6: 7ffb ldrb r3, [r7, #31] + 8002d3a: 7ffb ldrb r3, [r7, #31] } - 8002da8: 4618 mov r0, r3 - 8002daa: 3720 adds r7, #32 - 8002dac: 46bd mov sp, r7 - 8002dae: bd80 pop {r7, pc} + 8002d3c: 4618 mov r0, r3 + 8002d3e: 3720 adds r7, #32 + 8002d40: 46bd mov sp, r7 + 8002d42: bd80 pop {r7, pc} -08002db0 : +08002d44 : static FRESULT remove_chain ( FATFS* fs, /* File system object */ DWORD clst /* Cluster# to remove a chain from */ ) { - 8002db0: b580 push {r7, lr} - 8002db2: b084 sub sp, #16 - 8002db4: af00 add r7, sp, #0 - 8002db6: 6078 str r0, [r7, #4] - 8002db8: 6039 str r1, [r7, #0] + 8002d44: b580 push {r7, lr} + 8002d46: b084 sub sp, #16 + 8002d48: af00 add r7, sp, #0 + 8002d4a: 6078 str r0, [r7, #4] + 8002d4c: 6039 str r1, [r7, #0] DWORD nxt; #if _USE_TRIM DWORD scl = clst, ecl = clst, rt[2]; #endif if (clst < 2 || clst >= fs->n_fatent) { /* Check range */ - 8002dba: 683b ldr r3, [r7, #0] - 8002dbc: 2b01 cmp r3, #1 - 8002dbe: d905 bls.n 8002dcc - 8002dc0: 687b ldr r3, [r7, #4] - 8002dc2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002dc6: 683a ldr r2, [r7, #0] - 8002dc8: 429a cmp r2, r3 - 8002dca: d302 bcc.n 8002dd2 + 8002d4e: 683b ldr r3, [r7, #0] + 8002d50: 2b01 cmp r3, #1 + 8002d52: d905 bls.n 8002d60 + 8002d54: 687b ldr r3, [r7, #4] + 8002d56: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002d5a: 683a ldr r2, [r7, #0] + 8002d5c: 429a cmp r2, r3 + 8002d5e: d302 bcc.n 8002d66 res = FR_INT_ERR; - 8002dcc: 2302 movs r3, #2 - 8002dce: 73fb strb r3, [r7, #15] - 8002dd0: e043 b.n 8002e5a + 8002d60: 2302 movs r3, #2 + 8002d62: 73fb strb r3, [r7, #15] + 8002d64: e043 b.n 8002dee } else { res = FR_OK; - 8002dd2: 2300 movs r3, #0 - 8002dd4: 73fb strb r3, [r7, #15] + 8002d66: 2300 movs r3, #0 + 8002d68: 73fb strb r3, [r7, #15] while (clst < fs->n_fatent) { /* Not a last link? */ - 8002dd6: e036 b.n 8002e46 + 8002d6a: e036 b.n 8002dda nxt = get_fat(fs, clst); /* Get cluster status */ - 8002dd8: 6839 ldr r1, [r7, #0] - 8002dda: 6878 ldr r0, [r7, #4] - 8002ddc: f7ff fe20 bl 8002a20 - 8002de0: 60b8 str r0, [r7, #8] + 8002d6c: 6839 ldr r1, [r7, #0] + 8002d6e: 6878 ldr r0, [r7, #4] + 8002d70: f7ff fe20 bl 80029b4 + 8002d74: 60b8 str r0, [r7, #8] if (nxt == 0) break; /* Empty cluster? */ - 8002de2: 68bb ldr r3, [r7, #8] - 8002de4: 2b00 cmp r3, #0 - 8002de6: d035 beq.n 8002e54 + 8002d76: 68bb ldr r3, [r7, #8] + 8002d78: 2b00 cmp r3, #0 + 8002d7a: d035 beq.n 8002de8 if (nxt == 1) { res = FR_INT_ERR; break; } /* Internal error? */ - 8002de8: 68bb ldr r3, [r7, #8] - 8002dea: 2b01 cmp r3, #1 - 8002dec: d102 bne.n 8002df4 - 8002dee: 2302 movs r3, #2 - 8002df0: 73fb strb r3, [r7, #15] - 8002df2: e032 b.n 8002e5a + 8002d7c: 68bb ldr r3, [r7, #8] + 8002d7e: 2b01 cmp r3, #1 + 8002d80: d102 bne.n 8002d88 + 8002d82: 2302 movs r3, #2 + 8002d84: 73fb strb r3, [r7, #15] + 8002d86: e032 b.n 8002dee if (nxt == 0xFFFFFFFF) { res = FR_DISK_ERR; break; } /* Disk error? */ - 8002df4: 68bb ldr r3, [r7, #8] - 8002df6: f1b3 3fff cmp.w r3, #4294967295 - 8002dfa: d102 bne.n 8002e02 - 8002dfc: 2301 movs r3, #1 - 8002dfe: 73fb strb r3, [r7, #15] - 8002e00: e02b b.n 8002e5a + 8002d88: 68bb ldr r3, [r7, #8] + 8002d8a: f1b3 3fff cmp.w r3, #4294967295 + 8002d8e: d102 bne.n 8002d96 + 8002d90: 2301 movs r3, #1 + 8002d92: 73fb strb r3, [r7, #15] + 8002d94: e02b b.n 8002dee res = put_fat(fs, clst, 0); /* Mark the cluster "empty" */ - 8002e02: 2200 movs r2, #0 - 8002e04: 6839 ldr r1, [r7, #0] - 8002e06: 6878 ldr r0, [r7, #4] - 8002e08: f7ff fec4 bl 8002b94 - 8002e0c: 4603 mov r3, r0 - 8002e0e: 73fb strb r3, [r7, #15] + 8002d96: 2200 movs r2, #0 + 8002d98: 6839 ldr r1, [r7, #0] + 8002d9a: 6878 ldr r0, [r7, #4] + 8002d9c: f7ff fec4 bl 8002b28 + 8002da0: 4603 mov r3, r0 + 8002da2: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 8002e10: 7bfb ldrb r3, [r7, #15] - 8002e12: 2b00 cmp r3, #0 - 8002e14: d120 bne.n 8002e58 + 8002da4: 7bfb ldrb r3, [r7, #15] + 8002da6: 2b00 cmp r3, #0 + 8002da8: d120 bne.n 8002dec if (fs->free_clust != 0xFFFFFFFF) { /* Update FSINFO */ - 8002e16: 687b ldr r3, [r7, #4] - 8002e18: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002e1c: f1b3 3fff cmp.w r3, #4294967295 - 8002e20: d00f beq.n 8002e42 + 8002daa: 687b ldr r3, [r7, #4] + 8002dac: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002db0: f1b3 3fff cmp.w r3, #4294967295 + 8002db4: d00f beq.n 8002dd6 fs->free_clust++; - 8002e22: 687b ldr r3, [r7, #4] - 8002e24: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002e28: 1c5a adds r2, r3, #1 - 8002e2a: 687b ldr r3, [r7, #4] - 8002e2c: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8002db6: 687b ldr r3, [r7, #4] + 8002db8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002dbc: 1c5a adds r2, r3, #1 + 8002dbe: 687b ldr r3, [r7, #4] + 8002dc0: f8c3 2210 str.w r2, [r3, #528] ; 0x210 fs->fsi_flag |= 1; - 8002e30: 687b ldr r3, [r7, #4] - 8002e32: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 - 8002e36: f043 0301 orr.w r3, r3, #1 - 8002e3a: b2da uxtb r2, r3 - 8002e3c: 687b ldr r3, [r7, #4] - 8002e3e: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8002dc4: 687b ldr r3, [r7, #4] + 8002dc6: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 + 8002dca: f043 0301 orr.w r3, r3, #1 + 8002dce: b2da uxtb r2, r3 + 8002dd0: 687b ldr r3, [r7, #4] + 8002dd2: f883 2205 strb.w r2, [r3, #517] ; 0x205 rt[1] = clust2sect(fs, ecl) + fs->csize - 1; /* End sector */ disk_ioctl(fs->drv, CTRL_TRIM, rt); /* Erase the block */ scl = ecl = nxt; } #endif clst = nxt; /* Next cluster */ - 8002e42: 68bb ldr r3, [r7, #8] - 8002e44: 603b str r3, [r7, #0] + 8002dd6: 68bb ldr r3, [r7, #8] + 8002dd8: 603b str r3, [r7, #0] while (clst < fs->n_fatent) { /* Not a last link? */ - 8002e46: 687b ldr r3, [r7, #4] - 8002e48: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002e4c: 683a ldr r2, [r7, #0] - 8002e4e: 429a cmp r2, r3 - 8002e50: d3c2 bcc.n 8002dd8 - 8002e52: e002 b.n 8002e5a + 8002dda: 687b ldr r3, [r7, #4] + 8002ddc: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002de0: 683a ldr r2, [r7, #0] + 8002de2: 429a cmp r2, r3 + 8002de4: d3c2 bcc.n 8002d6c + 8002de6: e002 b.n 8002dee if (nxt == 0) break; /* Empty cluster? */ - 8002e54: bf00 nop - 8002e56: e000 b.n 8002e5a + 8002de8: bf00 nop + 8002dea: e000 b.n 8002dee if (res != FR_OK) break; - 8002e58: bf00 nop + 8002dec: bf00 nop } } return res; - 8002e5a: 7bfb ldrb r3, [r7, #15] + 8002dee: 7bfb ldrb r3, [r7, #15] } - 8002e5c: 4618 mov r0, r3 - 8002e5e: 3710 adds r7, #16 - 8002e60: 46bd mov sp, r7 - 8002e62: bd80 pop {r7, pc} + 8002df0: 4618 mov r0, r3 + 8002df2: 3710 adds r7, #16 + 8002df4: 46bd mov sp, r7 + 8002df6: bd80 pop {r7, pc} -08002e64 : +08002df8 : static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFFFFFFFF:Disk error, >=2:New cluster# */ FATFS* fs, /* File system object */ DWORD clst /* Cluster# to stretch. 0 means create a new chain. */ ) { - 8002e64: b580 push {r7, lr} - 8002e66: b086 sub sp, #24 - 8002e68: af00 add r7, sp, #0 - 8002e6a: 6078 str r0, [r7, #4] - 8002e6c: 6039 str r1, [r7, #0] + 8002df8: b580 push {r7, lr} + 8002dfa: b086 sub sp, #24 + 8002dfc: af00 add r7, sp, #0 + 8002dfe: 6078 str r0, [r7, #4] + 8002e00: 6039 str r1, [r7, #0] DWORD cs, ncl, scl; FRESULT res; if (clst == 0) { /* Create a new chain */ - 8002e6e: 683b ldr r3, [r7, #0] - 8002e70: 2b00 cmp r3, #0 - 8002e72: d10f bne.n 8002e94 + 8002e02: 683b ldr r3, [r7, #0] + 8002e04: 2b00 cmp r3, #0 + 8002e06: d10f bne.n 8002e28 scl = fs->last_clust; /* Get suggested start point */ - 8002e74: 687b ldr r3, [r7, #4] - 8002e76: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 8002e7a: 613b str r3, [r7, #16] + 8002e08: 687b ldr r3, [r7, #4] + 8002e0a: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 8002e0e: 613b str r3, [r7, #16] if (!scl || scl >= fs->n_fatent) scl = 1; - 8002e7c: 693b ldr r3, [r7, #16] - 8002e7e: 2b00 cmp r3, #0 - 8002e80: d005 beq.n 8002e8e - 8002e82: 687b ldr r3, [r7, #4] - 8002e84: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002e88: 693a ldr r2, [r7, #16] - 8002e8a: 429a cmp r2, r3 - 8002e8c: d31c bcc.n 8002ec8 - 8002e8e: 2301 movs r3, #1 - 8002e90: 613b str r3, [r7, #16] - 8002e92: e019 b.n 8002ec8 + 8002e10: 693b ldr r3, [r7, #16] + 8002e12: 2b00 cmp r3, #0 + 8002e14: d005 beq.n 8002e22 + 8002e16: 687b ldr r3, [r7, #4] + 8002e18: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002e1c: 693a ldr r2, [r7, #16] + 8002e1e: 429a cmp r2, r3 + 8002e20: d31c bcc.n 8002e5c + 8002e22: 2301 movs r3, #1 + 8002e24: 613b str r3, [r7, #16] + 8002e26: e019 b.n 8002e5c } else { /* Stretch the current chain */ cs = get_fat(fs, clst); /* Check the cluster status */ - 8002e94: 6839 ldr r1, [r7, #0] - 8002e96: 6878 ldr r0, [r7, #4] - 8002e98: f7ff fdc2 bl 8002a20 - 8002e9c: 60b8 str r0, [r7, #8] + 8002e28: 6839 ldr r1, [r7, #0] + 8002e2a: 6878 ldr r0, [r7, #4] + 8002e2c: f7ff fdc2 bl 80029b4 + 8002e30: 60b8 str r0, [r7, #8] if (cs < 2) return 1; /* Invalid value */ - 8002e9e: 68bb ldr r3, [r7, #8] - 8002ea0: 2b01 cmp r3, #1 - 8002ea2: d801 bhi.n 8002ea8 - 8002ea4: 2301 movs r3, #1 - 8002ea6: e076 b.n 8002f96 + 8002e32: 68bb ldr r3, [r7, #8] + 8002e34: 2b01 cmp r3, #1 + 8002e36: d801 bhi.n 8002e3c + 8002e38: 2301 movs r3, #1 + 8002e3a: e076 b.n 8002f2a if (cs == 0xFFFFFFFF) return cs; /* A disk error occurred */ - 8002ea8: 68bb ldr r3, [r7, #8] - 8002eaa: f1b3 3fff cmp.w r3, #4294967295 - 8002eae: d101 bne.n 8002eb4 - 8002eb0: 68bb ldr r3, [r7, #8] - 8002eb2: e070 b.n 8002f96 + 8002e3c: 68bb ldr r3, [r7, #8] + 8002e3e: f1b3 3fff cmp.w r3, #4294967295 + 8002e42: d101 bne.n 8002e48 + 8002e44: 68bb ldr r3, [r7, #8] + 8002e46: e070 b.n 8002f2a if (cs < fs->n_fatent) return cs; /* It is already followed by next cluster */ - 8002eb4: 687b ldr r3, [r7, #4] - 8002eb6: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002eba: 68ba ldr r2, [r7, #8] - 8002ebc: 429a cmp r2, r3 - 8002ebe: d201 bcs.n 8002ec4 - 8002ec0: 68bb ldr r3, [r7, #8] - 8002ec2: e068 b.n 8002f96 + 8002e48: 687b ldr r3, [r7, #4] + 8002e4a: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002e4e: 68ba ldr r2, [r7, #8] + 8002e50: 429a cmp r2, r3 + 8002e52: d201 bcs.n 8002e58 + 8002e54: 68bb ldr r3, [r7, #8] + 8002e56: e068 b.n 8002f2a scl = clst; - 8002ec4: 683b ldr r3, [r7, #0] - 8002ec6: 613b str r3, [r7, #16] + 8002e58: 683b ldr r3, [r7, #0] + 8002e5a: 613b str r3, [r7, #16] } ncl = scl; /* Start cluster */ - 8002ec8: 693b ldr r3, [r7, #16] - 8002eca: 617b str r3, [r7, #20] + 8002e5c: 693b ldr r3, [r7, #16] + 8002e5e: 617b str r3, [r7, #20] for (;;) { ncl++; /* Next cluster */ - 8002ecc: 697b ldr r3, [r7, #20] - 8002ece: 3301 adds r3, #1 - 8002ed0: 617b str r3, [r7, #20] + 8002e60: 697b ldr r3, [r7, #20] + 8002e62: 3301 adds r3, #1 + 8002e64: 617b str r3, [r7, #20] if (ncl >= fs->n_fatent) { /* Check wrap around */ - 8002ed2: 687b ldr r3, [r7, #4] - 8002ed4: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8002ed8: 697a ldr r2, [r7, #20] - 8002eda: 429a cmp r2, r3 - 8002edc: d307 bcc.n 8002eee + 8002e66: 687b ldr r3, [r7, #4] + 8002e68: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002e6c: 697a ldr r2, [r7, #20] + 8002e6e: 429a cmp r2, r3 + 8002e70: d307 bcc.n 8002e82 ncl = 2; - 8002ede: 2302 movs r3, #2 - 8002ee0: 617b str r3, [r7, #20] + 8002e72: 2302 movs r3, #2 + 8002e74: 617b str r3, [r7, #20] if (ncl > scl) return 0; /* No free cluster */ - 8002ee2: 697a ldr r2, [r7, #20] - 8002ee4: 693b ldr r3, [r7, #16] - 8002ee6: 429a cmp r2, r3 - 8002ee8: d901 bls.n 8002eee - 8002eea: 2300 movs r3, #0 - 8002eec: e053 b.n 8002f96 + 8002e76: 697a ldr r2, [r7, #20] + 8002e78: 693b ldr r3, [r7, #16] + 8002e7a: 429a cmp r2, r3 + 8002e7c: d901 bls.n 8002e82 + 8002e7e: 2300 movs r3, #0 + 8002e80: e053 b.n 8002f2a } cs = get_fat(fs, ncl); /* Get the cluster status */ - 8002eee: 6979 ldr r1, [r7, #20] - 8002ef0: 6878 ldr r0, [r7, #4] - 8002ef2: f7ff fd95 bl 8002a20 - 8002ef6: 60b8 str r0, [r7, #8] + 8002e82: 6979 ldr r1, [r7, #20] + 8002e84: 6878 ldr r0, [r7, #4] + 8002e86: f7ff fd95 bl 80029b4 + 8002e8a: 60b8 str r0, [r7, #8] if (cs == 0) break; /* Found a free cluster */ - 8002ef8: 68bb ldr r3, [r7, #8] - 8002efa: 2b00 cmp r3, #0 - 8002efc: d00e beq.n 8002f1c + 8002e8c: 68bb ldr r3, [r7, #8] + 8002e8e: 2b00 cmp r3, #0 + 8002e90: d00e beq.n 8002eb0 if (cs == 0xFFFFFFFF || cs == 1)/* An error occurred */ - 8002efe: 68bb ldr r3, [r7, #8] - 8002f00: f1b3 3fff cmp.w r3, #4294967295 - 8002f04: d002 beq.n 8002f0c - 8002f06: 68bb ldr r3, [r7, #8] - 8002f08: 2b01 cmp r3, #1 - 8002f0a: d101 bne.n 8002f10 + 8002e92: 68bb ldr r3, [r7, #8] + 8002e94: f1b3 3fff cmp.w r3, #4294967295 + 8002e98: d002 beq.n 8002ea0 + 8002e9a: 68bb ldr r3, [r7, #8] + 8002e9c: 2b01 cmp r3, #1 + 8002e9e: d101 bne.n 8002ea4 return cs; - 8002f0c: 68bb ldr r3, [r7, #8] - 8002f0e: e042 b.n 8002f96 + 8002ea0: 68bb ldr r3, [r7, #8] + 8002ea2: e042 b.n 8002f2a if (ncl == scl) return 0; /* No free cluster */ - 8002f10: 697a ldr r2, [r7, #20] - 8002f12: 693b ldr r3, [r7, #16] - 8002f14: 429a cmp r2, r3 - 8002f16: d1d9 bne.n 8002ecc - 8002f18: 2300 movs r3, #0 - 8002f1a: e03c b.n 8002f96 + 8002ea4: 697a ldr r2, [r7, #20] + 8002ea6: 693b ldr r3, [r7, #16] + 8002ea8: 429a cmp r2, r3 + 8002eaa: d1d9 bne.n 8002e60 + 8002eac: 2300 movs r3, #0 + 8002eae: e03c b.n 8002f2a if (cs == 0) break; /* Found a free cluster */ - 8002f1c: bf00 nop + 8002eb0: bf00 nop } res = put_fat(fs, ncl, 0x0FFFFFFF); /* Mark the new cluster "last link" */ - 8002f1e: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 - 8002f22: 6979 ldr r1, [r7, #20] - 8002f24: 6878 ldr r0, [r7, #4] - 8002f26: f7ff fe35 bl 8002b94 - 8002f2a: 4603 mov r3, r0 - 8002f2c: 73fb strb r3, [r7, #15] + 8002eb2: f06f 4270 mvn.w r2, #4026531840 ; 0xf0000000 + 8002eb6: 6979 ldr r1, [r7, #20] + 8002eb8: 6878 ldr r0, [r7, #4] + 8002eba: f7ff fe35 bl 8002b28 + 8002ebe: 4603 mov r3, r0 + 8002ec0: 73fb strb r3, [r7, #15] if (res == FR_OK && clst != 0) { - 8002f2e: 7bfb ldrb r3, [r7, #15] - 8002f30: 2b00 cmp r3, #0 - 8002f32: d109 bne.n 8002f48 - 8002f34: 683b ldr r3, [r7, #0] - 8002f36: 2b00 cmp r3, #0 - 8002f38: d006 beq.n 8002f48 + 8002ec2: 7bfb ldrb r3, [r7, #15] + 8002ec4: 2b00 cmp r3, #0 + 8002ec6: d109 bne.n 8002edc + 8002ec8: 683b ldr r3, [r7, #0] + 8002eca: 2b00 cmp r3, #0 + 8002ecc: d006 beq.n 8002edc res = put_fat(fs, clst, ncl); /* Link it to the previous one if needed */ - 8002f3a: 697a ldr r2, [r7, #20] - 8002f3c: 6839 ldr r1, [r7, #0] - 8002f3e: 6878 ldr r0, [r7, #4] - 8002f40: f7ff fe28 bl 8002b94 - 8002f44: 4603 mov r3, r0 - 8002f46: 73fb strb r3, [r7, #15] + 8002ece: 697a ldr r2, [r7, #20] + 8002ed0: 6839 ldr r1, [r7, #0] + 8002ed2: 6878 ldr r0, [r7, #4] + 8002ed4: f7ff fe28 bl 8002b28 + 8002ed8: 4603 mov r3, r0 + 8002eda: 73fb strb r3, [r7, #15] } if (res == FR_OK) { - 8002f48: 7bfb ldrb r3, [r7, #15] - 8002f4a: 2b00 cmp r3, #0 - 8002f4c: d11a bne.n 8002f84 + 8002edc: 7bfb ldrb r3, [r7, #15] + 8002ede: 2b00 cmp r3, #0 + 8002ee0: d11a bne.n 8002f18 fs->last_clust = ncl; /* Update FSINFO */ - 8002f4e: 687b ldr r3, [r7, #4] - 8002f50: 697a ldr r2, [r7, #20] - 8002f52: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8002ee2: 687b ldr r3, [r7, #4] + 8002ee4: 697a ldr r2, [r7, #20] + 8002ee6: f8c3 220c str.w r2, [r3, #524] ; 0x20c if (fs->free_clust != 0xFFFFFFFF) { - 8002f56: 687b ldr r3, [r7, #4] - 8002f58: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002f5c: f1b3 3fff cmp.w r3, #4294967295 - 8002f60: d018 beq.n 8002f94 + 8002eea: 687b ldr r3, [r7, #4] + 8002eec: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002ef0: f1b3 3fff cmp.w r3, #4294967295 + 8002ef4: d018 beq.n 8002f28 fs->free_clust--; - 8002f62: 687b ldr r3, [r7, #4] - 8002f64: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8002f68: 1e5a subs r2, r3, #1 - 8002f6a: 687b ldr r3, [r7, #4] - 8002f6c: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8002ef6: 687b ldr r3, [r7, #4] + 8002ef8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8002efc: 1e5a subs r2, r3, #1 + 8002efe: 687b ldr r3, [r7, #4] + 8002f00: f8c3 2210 str.w r2, [r3, #528] ; 0x210 fs->fsi_flag |= 1; - 8002f70: 687b ldr r3, [r7, #4] - 8002f72: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 - 8002f76: f043 0301 orr.w r3, r3, #1 - 8002f7a: b2da uxtb r2, r3 - 8002f7c: 687b ldr r3, [r7, #4] - 8002f7e: f883 2205 strb.w r2, [r3, #517] ; 0x205 - 8002f82: e007 b.n 8002f94 + 8002f04: 687b ldr r3, [r7, #4] + 8002f06: f893 3205 ldrb.w r3, [r3, #517] ; 0x205 + 8002f0a: f043 0301 orr.w r3, r3, #1 + 8002f0e: b2da uxtb r2, r3 + 8002f10: 687b ldr r3, [r7, #4] + 8002f12: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8002f16: e007 b.n 8002f28 } } else { ncl = (res == FR_DISK_ERR) ? 0xFFFFFFFF : 1; - 8002f84: 7bfb ldrb r3, [r7, #15] - 8002f86: 2b01 cmp r3, #1 - 8002f88: d102 bne.n 8002f90 - 8002f8a: f04f 33ff mov.w r3, #4294967295 - 8002f8e: e000 b.n 8002f92 - 8002f90: 2301 movs r3, #1 - 8002f92: 617b str r3, [r7, #20] + 8002f18: 7bfb ldrb r3, [r7, #15] + 8002f1a: 2b01 cmp r3, #1 + 8002f1c: d102 bne.n 8002f24 + 8002f1e: f04f 33ff mov.w r3, #4294967295 + 8002f22: e000 b.n 8002f26 + 8002f24: 2301 movs r3, #1 + 8002f26: 617b str r3, [r7, #20] } return ncl; /* Return new cluster number or error code */ - 8002f94: 697b ldr r3, [r7, #20] + 8002f28: 697b ldr r3, [r7, #20] } - 8002f96: 4618 mov r0, r3 - 8002f98: 3718 adds r7, #24 - 8002f9a: 46bd mov sp, r7 - 8002f9c: bd80 pop {r7, pc} + 8002f2a: 4618 mov r0, r3 + 8002f2c: 3718 adds r7, #24 + 8002f2e: 46bd mov sp, r7 + 8002f30: bd80 pop {r7, pc} -08002f9e : +08002f32 : static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */ FIL* fp, /* Pointer to the file object */ DWORD ofs /* File offset to be converted to cluster# */ ) { - 8002f9e: b480 push {r7} - 8002fa0: b087 sub sp, #28 - 8002fa2: af00 add r7, sp, #0 - 8002fa4: 6078 str r0, [r7, #4] - 8002fa6: 6039 str r1, [r7, #0] + 8002f32: b480 push {r7} + 8002f34: b087 sub sp, #28 + 8002f36: af00 add r7, sp, #0 + 8002f38: 6078 str r0, [r7, #4] + 8002f3a: 6039 str r1, [r7, #0] DWORD cl, ncl, *tbl; tbl = fp->cltbl + 1; /* Top of CLMT */ - 8002fa8: 687b ldr r3, [r7, #4] - 8002faa: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8002fae: 3304 adds r3, #4 - 8002fb0: 613b str r3, [r7, #16] + 8002f3c: 687b ldr r3, [r7, #4] + 8002f3e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 8002f42: 3304 adds r3, #4 + 8002f44: 613b str r3, [r7, #16] cl = ofs / SS(fp->fs) / fp->fs->csize; /* Cluster order from top of the file */ - 8002fb2: 683b ldr r3, [r7, #0] - 8002fb4: 0a5b lsrs r3, r3, #9 - 8002fb6: 687a ldr r2, [r7, #4] - 8002fb8: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 8002fbc: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8002fc0: fbb3 f3f2 udiv r3, r3, r2 - 8002fc4: 617b str r3, [r7, #20] + 8002f46: 683b ldr r3, [r7, #0] + 8002f48: 0a5b lsrs r3, r3, #9 + 8002f4a: 687a ldr r2, [r7, #4] + 8002f4c: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 8002f50: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 8002f54: fbb3 f3f2 udiv r3, r3, r2 + 8002f58: 617b str r3, [r7, #20] for (;;) { ncl = *tbl++; /* Number of cluters in the fragment */ - 8002fc6: 693b ldr r3, [r7, #16] - 8002fc8: 1d1a adds r2, r3, #4 - 8002fca: 613a str r2, [r7, #16] - 8002fcc: 681b ldr r3, [r3, #0] - 8002fce: 60fb str r3, [r7, #12] + 8002f5a: 693b ldr r3, [r7, #16] + 8002f5c: 1d1a adds r2, r3, #4 + 8002f5e: 613a str r2, [r7, #16] + 8002f60: 681b ldr r3, [r3, #0] + 8002f62: 60fb str r3, [r7, #12] if (!ncl) return 0; /* End of table? (error) */ - 8002fd0: 68fb ldr r3, [r7, #12] - 8002fd2: 2b00 cmp r3, #0 - 8002fd4: d101 bne.n 8002fda - 8002fd6: 2300 movs r3, #0 - 8002fd8: e010 b.n 8002ffc + 8002f64: 68fb ldr r3, [r7, #12] + 8002f66: 2b00 cmp r3, #0 + 8002f68: d101 bne.n 8002f6e + 8002f6a: 2300 movs r3, #0 + 8002f6c: e010 b.n 8002f90 if (cl < ncl) break; /* In this fragment? */ - 8002fda: 697a ldr r2, [r7, #20] - 8002fdc: 68fb ldr r3, [r7, #12] - 8002fde: 429a cmp r2, r3 - 8002fe0: d307 bcc.n 8002ff2 + 8002f6e: 697a ldr r2, [r7, #20] + 8002f70: 68fb ldr r3, [r7, #12] + 8002f72: 429a cmp r2, r3 + 8002f74: d307 bcc.n 8002f86 cl -= ncl; tbl++; /* Next fragment */ - 8002fe2: 697a ldr r2, [r7, #20] - 8002fe4: 68fb ldr r3, [r7, #12] - 8002fe6: 1ad3 subs r3, r2, r3 - 8002fe8: 617b str r3, [r7, #20] - 8002fea: 693b ldr r3, [r7, #16] - 8002fec: 3304 adds r3, #4 - 8002fee: 613b str r3, [r7, #16] + 8002f76: 697a ldr r2, [r7, #20] + 8002f78: 68fb ldr r3, [r7, #12] + 8002f7a: 1ad3 subs r3, r2, r3 + 8002f7c: 617b str r3, [r7, #20] + 8002f7e: 693b ldr r3, [r7, #16] + 8002f80: 3304 adds r3, #4 + 8002f82: 613b str r3, [r7, #16] ncl = *tbl++; /* Number of cluters in the fragment */ - 8002ff0: e7e9 b.n 8002fc6 + 8002f84: e7e9 b.n 8002f5a if (cl < ncl) break; /* In this fragment? */ - 8002ff2: bf00 nop + 8002f86: bf00 nop } return cl + *tbl; /* Return the cluster number */ - 8002ff4: 693b ldr r3, [r7, #16] - 8002ff6: 681a ldr r2, [r3, #0] - 8002ff8: 697b ldr r3, [r7, #20] - 8002ffa: 4413 add r3, r2 + 8002f88: 693b ldr r3, [r7, #16] + 8002f8a: 681a ldr r2, [r3, #0] + 8002f8c: 697b ldr r3, [r7, #20] + 8002f8e: 4413 add r3, r2 } - 8002ffc: 4618 mov r0, r3 - 8002ffe: 371c adds r7, #28 - 8003000: 46bd mov sp, r7 - 8003002: bc80 pop {r7} - 8003004: 4770 bx lr + 8002f90: 4618 mov r0, r3 + 8002f92: 371c adds r7, #28 + 8002f94: 46bd mov sp, r7 + 8002f96: bc80 pop {r7} + 8002f98: 4770 bx lr -08003006 : +08002f9a : static FRESULT dir_sdi ( DIR* dp, /* Pointer to directory object */ UINT idx /* Index of directory table */ ) { - 8003006: b580 push {r7, lr} - 8003008: b086 sub sp, #24 - 800300a: af00 add r7, sp, #0 - 800300c: 6078 str r0, [r7, #4] - 800300e: 6039 str r1, [r7, #0] + 8002f9a: b580 push {r7, lr} + 8002f9c: b086 sub sp, #24 + 8002f9e: af00 add r7, sp, #0 + 8002fa0: 6078 str r0, [r7, #4] + 8002fa2: 6039 str r1, [r7, #0] DWORD clst, sect; UINT ic; dp->index = (WORD)idx; /* Current index */ - 8003010: 683b ldr r3, [r7, #0] - 8003012: b29a uxth r2, r3 - 8003014: 687b ldr r3, [r7, #4] - 8003016: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 8002fa4: 683b ldr r3, [r7, #0] + 8002fa6: b29a uxth r2, r3 + 8002fa8: 687b ldr r3, [r7, #4] + 8002faa: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 clst = dp->sclust; /* Table start cluster (0:root) */ - 800301a: 687b ldr r3, [r7, #4] - 800301c: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8003020: 617b str r3, [r7, #20] + 8002fae: 687b ldr r3, [r7, #4] + 8002fb0: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 8002fb4: 617b str r3, [r7, #20] if (clst == 1 || clst >= dp->fs->n_fatent) /* Check start cluster range */ - 8003022: 697b ldr r3, [r7, #20] - 8003024: 2b01 cmp r3, #1 - 8003026: d007 beq.n 8003038 - 8003028: 687b ldr r3, [r7, #4] - 800302a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800302e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003032: 697a ldr r2, [r7, #20] - 8003034: 429a cmp r2, r3 - 8003036: d301 bcc.n 800303c + 8002fb6: 697b ldr r3, [r7, #20] + 8002fb8: 2b01 cmp r3, #1 + 8002fba: d007 beq.n 8002fcc + 8002fbc: 687b ldr r3, [r7, #4] + 8002fbe: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8002fc2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8002fc6: 697a ldr r2, [r7, #20] + 8002fc8: 429a cmp r2, r3 + 8002fca: d301 bcc.n 8002fd0 return FR_INT_ERR; - 8003038: 2302 movs r3, #2 - 800303a: e074 b.n 8003126 + 8002fcc: 2302 movs r3, #2 + 8002fce: e074 b.n 80030ba if (!clst && dp->fs->fs_type == FS_FAT32) /* Replace cluster# 0 with root cluster# if in FAT32 */ - 800303c: 697b ldr r3, [r7, #20] - 800303e: 2b00 cmp r3, #0 - 8003040: d10c bne.n 800305c - 8003042: 687b ldr r3, [r7, #4] - 8003044: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003048: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 800304c: 2b03 cmp r3, #3 - 800304e: d105 bne.n 800305c + 8002fd0: 697b ldr r3, [r7, #20] + 8002fd2: 2b00 cmp r3, #0 + 8002fd4: d10c bne.n 8002ff0 + 8002fd6: 687b ldr r3, [r7, #4] + 8002fd8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8002fdc: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8002fe0: 2b03 cmp r3, #3 + 8002fe2: d105 bne.n 8002ff0 clst = dp->fs->dirbase; - 8003050: 687b ldr r3, [r7, #4] - 8003052: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003056: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 800305a: 617b str r3, [r7, #20] + 8002fe4: 687b ldr r3, [r7, #4] + 8002fe6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8002fea: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 8002fee: 617b str r3, [r7, #20] if (clst == 0) { /* Static table (root-directory in FAT12/16) */ - 800305c: 697b ldr r3, [r7, #20] - 800305e: 2b00 cmp r3, #0 - 8003060: d111 bne.n 8003086 + 8002ff0: 697b ldr r3, [r7, #20] + 8002ff2: 2b00 cmp r3, #0 + 8002ff4: d111 bne.n 800301a if (idx >= dp->fs->n_rootdir) /* Is index out of range? */ - 8003062: 687b ldr r3, [r7, #4] - 8003064: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003068: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 800306c: 461a mov r2, r3 - 800306e: 683b ldr r3, [r7, #0] - 8003070: 4293 cmp r3, r2 - 8003072: d301 bcc.n 8003078 + 8002ff6: 687b ldr r3, [r7, #4] + 8002ff8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8002ffc: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003000: 461a mov r2, r3 + 8003002: 683b ldr r3, [r7, #0] + 8003004: 4293 cmp r3, r2 + 8003006: d301 bcc.n 800300c return FR_INT_ERR; - 8003074: 2302 movs r3, #2 - 8003076: e056 b.n 8003126 + 8003008: 2302 movs r3, #2 + 800300a: e056 b.n 80030ba sect = dp->fs->dirbase; - 8003078: 687b ldr r3, [r7, #4] - 800307a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800307e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 8003082: 613b str r3, [r7, #16] - 8003084: e032 b.n 80030ec + 800300c: 687b ldr r3, [r7, #4] + 800300e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003012: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 8003016: 613b str r3, [r7, #16] + 8003018: e032 b.n 8003080 } else { /* Dynamic table (root-directory in FAT32 or sub-directory) */ ic = SS(dp->fs) / SZ_DIRE * dp->fs->csize; /* Entries per cluster */ - 8003086: 687b ldr r3, [r7, #4] - 8003088: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800308c: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003090: 011b lsls r3, r3, #4 - 8003092: 60fb str r3, [r7, #12] + 800301a: 687b ldr r3, [r7, #4] + 800301c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003020: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003024: 011b lsls r3, r3, #4 + 8003026: 60fb str r3, [r7, #12] while (idx >= ic) { /* Follow cluster chain */ - 8003094: e01e b.n 80030d4 + 8003028: e01e b.n 8003068 clst = get_fat(dp->fs, clst); /* Get next cluster */ - 8003096: 687b ldr r3, [r7, #4] - 8003098: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800309c: 6979 ldr r1, [r7, #20] - 800309e: 4618 mov r0, r3 - 80030a0: f7ff fcbe bl 8002a20 - 80030a4: 6178 str r0, [r7, #20] + 800302a: 687b ldr r3, [r7, #4] + 800302c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003030: 6979 ldr r1, [r7, #20] + 8003032: 4618 mov r0, r3 + 8003034: f7ff fcbe bl 80029b4 + 8003038: 6178 str r0, [r7, #20] if (clst == 0xFFFFFFFF) return FR_DISK_ERR; /* Disk error */ - 80030a6: 697b ldr r3, [r7, #20] - 80030a8: f1b3 3fff cmp.w r3, #4294967295 - 80030ac: d101 bne.n 80030b2 - 80030ae: 2301 movs r3, #1 - 80030b0: e039 b.n 8003126 + 800303a: 697b ldr r3, [r7, #20] + 800303c: f1b3 3fff cmp.w r3, #4294967295 + 8003040: d101 bne.n 8003046 + 8003042: 2301 movs r3, #1 + 8003044: e039 b.n 80030ba if (clst < 2 || clst >= dp->fs->n_fatent) /* Reached to end of table or internal error */ - 80030b2: 697b ldr r3, [r7, #20] - 80030b4: 2b01 cmp r3, #1 - 80030b6: d907 bls.n 80030c8 - 80030b8: 687b ldr r3, [r7, #4] - 80030ba: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80030be: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80030c2: 697a ldr r2, [r7, #20] - 80030c4: 429a cmp r2, r3 - 80030c6: d301 bcc.n 80030cc + 8003046: 697b ldr r3, [r7, #20] + 8003048: 2b01 cmp r3, #1 + 800304a: d907 bls.n 800305c + 800304c: 687b ldr r3, [r7, #4] + 800304e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003052: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003056: 697a ldr r2, [r7, #20] + 8003058: 429a cmp r2, r3 + 800305a: d301 bcc.n 8003060 return FR_INT_ERR; - 80030c8: 2302 movs r3, #2 - 80030ca: e02c b.n 8003126 + 800305c: 2302 movs r3, #2 + 800305e: e02c b.n 80030ba idx -= ic; - 80030cc: 683a ldr r2, [r7, #0] - 80030ce: 68fb ldr r3, [r7, #12] - 80030d0: 1ad3 subs r3, r2, r3 - 80030d2: 603b str r3, [r7, #0] + 8003060: 683a ldr r2, [r7, #0] + 8003062: 68fb ldr r3, [r7, #12] + 8003064: 1ad3 subs r3, r2, r3 + 8003066: 603b str r3, [r7, #0] while (idx >= ic) { /* Follow cluster chain */ - 80030d4: 683a ldr r2, [r7, #0] - 80030d6: 68fb ldr r3, [r7, #12] - 80030d8: 429a cmp r2, r3 - 80030da: d2dc bcs.n 8003096 + 8003068: 683a ldr r2, [r7, #0] + 800306a: 68fb ldr r3, [r7, #12] + 800306c: 429a cmp r2, r3 + 800306e: d2dc bcs.n 800302a } sect = clust2sect(dp->fs, clst); - 80030dc: 687b ldr r3, [r7, #4] - 80030de: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80030e2: 6979 ldr r1, [r7, #20] - 80030e4: 4618 mov r0, r3 - 80030e6: f7ff fc7a bl 80029de - 80030ea: 6138 str r0, [r7, #16] + 8003070: 687b ldr r3, [r7, #4] + 8003072: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003076: 6979 ldr r1, [r7, #20] + 8003078: 4618 mov r0, r3 + 800307a: f7ff fc7a bl 8002972 + 800307e: 6138 str r0, [r7, #16] } dp->clust = clst; /* Current cluster# */ - 80030ec: 687b ldr r3, [r7, #4] - 80030ee: 697a ldr r2, [r7, #20] - 80030f0: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003080: 687b ldr r3, [r7, #4] + 8003082: 697a ldr r2, [r7, #20] + 8003084: f8c3 220c str.w r2, [r3, #524] ; 0x20c if (!sect) return FR_INT_ERR; - 80030f4: 693b ldr r3, [r7, #16] - 80030f6: 2b00 cmp r3, #0 - 80030f8: d101 bne.n 80030fe - 80030fa: 2302 movs r3, #2 - 80030fc: e013 b.n 8003126 + 8003088: 693b ldr r3, [r7, #16] + 800308a: 2b00 cmp r3, #0 + 800308c: d101 bne.n 8003092 + 800308e: 2302 movs r3, #2 + 8003090: e013 b.n 80030ba dp->sect = sect + idx / (SS(dp->fs) / SZ_DIRE); /* Sector# of the directory entry */ - 80030fe: 683b ldr r3, [r7, #0] - 8003100: 091a lsrs r2, r3, #4 - 8003102: 693b ldr r3, [r7, #16] - 8003104: 441a add r2, r3 - 8003106: 687b ldr r3, [r7, #4] - 8003108: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003092: 683b ldr r3, [r7, #0] + 8003094: 091a lsrs r2, r3, #4 + 8003096: 693b ldr r3, [r7, #16] + 8003098: 441a add r2, r3 + 800309a: 687b ldr r3, [r7, #4] + 800309c: f8c3 2210 str.w r2, [r3, #528] ; 0x210 dp->dir = dp->fs->win.d8 + (idx % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Ptr to the entry in the sector */ - 800310c: 687b ldr r3, [r7, #4] - 800310e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003112: 461a mov r2, r3 - 8003114: 683b ldr r3, [r7, #0] - 8003116: f003 030f and.w r3, r3, #15 - 800311a: 015b lsls r3, r3, #5 - 800311c: 441a add r2, r3 - 800311e: 687b ldr r3, [r7, #4] - 8003120: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 80030a0: 687b ldr r3, [r7, #4] + 80030a2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80030a6: 461a mov r2, r3 + 80030a8: 683b ldr r3, [r7, #0] + 80030aa: f003 030f and.w r3, r3, #15 + 80030ae: 015b lsls r3, r3, #5 + 80030b0: 441a add r2, r3 + 80030b2: 687b ldr r3, [r7, #4] + 80030b4: f8c3 2214 str.w r2, [r3, #532] ; 0x214 return FR_OK; - 8003124: 2300 movs r3, #0 + 80030b8: 2300 movs r3, #0 } - 8003126: 4618 mov r0, r3 - 8003128: 3718 adds r7, #24 - 800312a: 46bd mov sp, r7 - 800312c: bd80 pop {r7, pc} + 80030ba: 4618 mov r0, r3 + 80030bc: 3718 adds r7, #24 + 80030be: 46bd mov sp, r7 + 80030c0: bd80 pop {r7, pc} -0800312e : +080030c2 : static FRESULT dir_next ( /* FR_OK:Succeeded, FR_NO_FILE:End of table, FR_DENIED:Could not stretch */ DIR* dp, /* Pointer to the directory object */ int stretch /* 0: Do not stretch table, 1: Stretch table if needed */ ) { - 800312e: b590 push {r4, r7, lr} - 8003130: b087 sub sp, #28 - 8003132: af00 add r7, sp, #0 - 8003134: 6078 str r0, [r7, #4] - 8003136: 6039 str r1, [r7, #0] + 80030c2: b590 push {r4, r7, lr} + 80030c4: b087 sub sp, #28 + 80030c6: af00 add r7, sp, #0 + 80030c8: 6078 str r0, [r7, #4] + 80030ca: 6039 str r1, [r7, #0] #if !_FS_READONLY UINT c; #endif i = dp->index + 1; - 8003138: 687b ldr r3, [r7, #4] - 800313a: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 - 800313e: 3301 adds r3, #1 - 8003140: 60fb str r3, [r7, #12] + 80030cc: 687b ldr r3, [r7, #4] + 80030ce: f8b3 3206 ldrh.w r3, [r3, #518] ; 0x206 + 80030d2: 3301 adds r3, #1 + 80030d4: 60fb str r3, [r7, #12] if (!(i & 0xFFFF) || !dp->sect) /* Report EOT when index has reached 65535 */ - 8003142: 68fb ldr r3, [r7, #12] - 8003144: b29b uxth r3, r3 - 8003146: 2b00 cmp r3, #0 - 8003148: d004 beq.n 8003154 - 800314a: 687b ldr r3, [r7, #4] - 800314c: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8003150: 2b00 cmp r3, #0 - 8003152: d101 bne.n 8003158 + 80030d6: 68fb ldr r3, [r7, #12] + 80030d8: b29b uxth r3, r3 + 80030da: 2b00 cmp r3, #0 + 80030dc: d004 beq.n 80030e8 + 80030de: 687b ldr r3, [r7, #4] + 80030e0: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80030e4: 2b00 cmp r3, #0 + 80030e6: d101 bne.n 80030ec return FR_NO_FILE; - 8003154: 2304 movs r3, #4 - 8003156: e0dd b.n 8003314 + 80030e8: 2304 movs r3, #4 + 80030ea: e0dd b.n 80032a8 if (!(i % (SS(dp->fs) / SZ_DIRE))) { /* Sector changed? */ - 8003158: 68fb ldr r3, [r7, #12] - 800315a: f003 030f and.w r3, r3, #15 - 800315e: 2b00 cmp r3, #0 - 8003160: f040 80c6 bne.w 80032f0 + 80030ec: 68fb ldr r3, [r7, #12] + 80030ee: f003 030f and.w r3, r3, #15 + 80030f2: 2b00 cmp r3, #0 + 80030f4: f040 80c6 bne.w 8003284 dp->sect++; /* Next sector */ - 8003164: 687b ldr r3, [r7, #4] - 8003166: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 800316a: 1c5a adds r2, r3, #1 - 800316c: 687b ldr r3, [r7, #4] - 800316e: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 80030f8: 687b ldr r3, [r7, #4] + 80030fa: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80030fe: 1c5a adds r2, r3, #1 + 8003100: 687b ldr r3, [r7, #4] + 8003102: f8c3 2210 str.w r2, [r3, #528] ; 0x210 if (!dp->clust) { /* Static table */ - 8003172: 687b ldr r3, [r7, #4] - 8003174: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 8003178: 2b00 cmp r3, #0 - 800317a: d10b bne.n 8003194 + 8003106: 687b ldr r3, [r7, #4] + 8003108: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 800310c: 2b00 cmp r3, #0 + 800310e: d10b bne.n 8003128 if (i >= dp->fs->n_rootdir) /* Report EOT if it reached end of static table */ - 800317c: 687b ldr r3, [r7, #4] - 800317e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003182: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003186: 461a mov r2, r3 - 8003188: 68fb ldr r3, [r7, #12] - 800318a: 4293 cmp r3, r2 - 800318c: f0c0 80b0 bcc.w 80032f0 + 8003110: 687b ldr r3, [r7, #4] + 8003112: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003116: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 800311a: 461a mov r2, r3 + 800311c: 68fb ldr r3, [r7, #12] + 800311e: 4293 cmp r3, r2 + 8003120: f0c0 80b0 bcc.w 8003284 return FR_NO_FILE; - 8003190: 2304 movs r3, #4 - 8003192: e0bf b.n 8003314 + 8003124: 2304 movs r3, #4 + 8003126: e0bf b.n 80032a8 } else { /* Dynamic table */ if (((i / (SS(dp->fs) / SZ_DIRE)) & (dp->fs->csize - 1)) == 0) { /* Cluster changed? */ - 8003194: 68fb ldr r3, [r7, #12] - 8003196: 091b lsrs r3, r3, #4 - 8003198: 687a ldr r2, [r7, #4] - 800319a: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 800319e: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 80031a2: 3a01 subs r2, #1 - 80031a4: 4013 ands r3, r2 - 80031a6: 2b00 cmp r3, #0 - 80031a8: f040 80a2 bne.w 80032f0 + 8003128: 68fb ldr r3, [r7, #12] + 800312a: 091b lsrs r3, r3, #4 + 800312c: 687a ldr r2, [r7, #4] + 800312e: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 8003132: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 8003136: 3a01 subs r2, #1 + 8003138: 4013 ands r3, r2 + 800313a: 2b00 cmp r3, #0 + 800313c: f040 80a2 bne.w 8003284 clst = get_fat(dp->fs, dp->clust); /* Get next cluster */ - 80031ac: 687b ldr r3, [r7, #4] - 80031ae: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80031b2: 687b ldr r3, [r7, #4] - 80031b4: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 80031b8: 4619 mov r1, r3 - 80031ba: 4610 mov r0, r2 - 80031bc: f7ff fc30 bl 8002a20 - 80031c0: 6178 str r0, [r7, #20] + 8003140: 687b ldr r3, [r7, #4] + 8003142: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 8003146: 687b ldr r3, [r7, #4] + 8003148: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 800314c: 4619 mov r1, r3 + 800314e: 4610 mov r0, r2 + 8003150: f7ff fc30 bl 80029b4 + 8003154: 6178 str r0, [r7, #20] if (clst <= 1) return FR_INT_ERR; - 80031c2: 697b ldr r3, [r7, #20] - 80031c4: 2b01 cmp r3, #1 - 80031c6: d801 bhi.n 80031cc - 80031c8: 2302 movs r3, #2 - 80031ca: e0a3 b.n 8003314 + 8003156: 697b ldr r3, [r7, #20] + 8003158: 2b01 cmp r3, #1 + 800315a: d801 bhi.n 8003160 + 800315c: 2302 movs r3, #2 + 800315e: e0a3 b.n 80032a8 if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - 80031cc: 697b ldr r3, [r7, #20] - 80031ce: f1b3 3fff cmp.w r3, #4294967295 - 80031d2: d101 bne.n 80031d8 - 80031d4: 2301 movs r3, #1 - 80031d6: e09d b.n 8003314 + 8003160: 697b ldr r3, [r7, #20] + 8003162: f1b3 3fff cmp.w r3, #4294967295 + 8003166: d101 bne.n 800316c + 8003168: 2301 movs r3, #1 + 800316a: e09d b.n 80032a8 if (clst >= dp->fs->n_fatent) { /* If it reached end of dynamic table, */ - 80031d8: 687b ldr r3, [r7, #4] - 80031da: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80031de: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80031e2: 697a ldr r2, [r7, #20] - 80031e4: 429a cmp r2, r3 - 80031e6: d374 bcc.n 80032d2 + 800316c: 687b ldr r3, [r7, #4] + 800316e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003172: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003176: 697a ldr r2, [r7, #20] + 8003178: 429a cmp r2, r3 + 800317a: d374 bcc.n 8003266 #if !_FS_READONLY if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT */ - 80031e8: 683b ldr r3, [r7, #0] - 80031ea: 2b00 cmp r3, #0 - 80031ec: d101 bne.n 80031f2 - 80031ee: 2304 movs r3, #4 - 80031f0: e090 b.n 8003314 + 800317c: 683b ldr r3, [r7, #0] + 800317e: 2b00 cmp r3, #0 + 8003180: d101 bne.n 8003186 + 8003182: 2304 movs r3, #4 + 8003184: e090 b.n 80032a8 clst = create_chain(dp->fs, dp->clust); /* Stretch cluster chain */ - 80031f2: 687b ldr r3, [r7, #4] - 80031f4: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80031f8: 687b ldr r3, [r7, #4] - 80031fa: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c - 80031fe: 4619 mov r1, r3 - 8003200: 4610 mov r0, r2 - 8003202: f7ff fe2f bl 8002e64 - 8003206: 6178 str r0, [r7, #20] + 8003186: 687b ldr r3, [r7, #4] + 8003188: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 800318c: 687b ldr r3, [r7, #4] + 800318e: f8d3 320c ldr.w r3, [r3, #524] ; 0x20c + 8003192: 4619 mov r1, r3 + 8003194: 4610 mov r0, r2 + 8003196: f7ff fe2f bl 8002df8 + 800319a: 6178 str r0, [r7, #20] if (clst == 0) return FR_DENIED; /* No free cluster */ - 8003208: 697b ldr r3, [r7, #20] - 800320a: 2b00 cmp r3, #0 - 800320c: d101 bne.n 8003212 - 800320e: 2307 movs r3, #7 - 8003210: e080 b.n 8003314 + 800319c: 697b ldr r3, [r7, #20] + 800319e: 2b00 cmp r3, #0 + 80031a0: d101 bne.n 80031a6 + 80031a2: 2307 movs r3, #7 + 80031a4: e080 b.n 80032a8 if (clst == 1) return FR_INT_ERR; - 8003212: 697b ldr r3, [r7, #20] - 8003214: 2b01 cmp r3, #1 - 8003216: d101 bne.n 800321c - 8003218: 2302 movs r3, #2 - 800321a: e07b b.n 8003314 + 80031a6: 697b ldr r3, [r7, #20] + 80031a8: 2b01 cmp r3, #1 + 80031aa: d101 bne.n 80031b0 + 80031ac: 2302 movs r3, #2 + 80031ae: e07b b.n 80032a8 if (clst == 0xFFFFFFFF) return FR_DISK_ERR; - 800321c: 697b ldr r3, [r7, #20] - 800321e: f1b3 3fff cmp.w r3, #4294967295 - 8003222: d101 bne.n 8003228 - 8003224: 2301 movs r3, #1 - 8003226: e075 b.n 8003314 + 80031b0: 697b ldr r3, [r7, #20] + 80031b2: f1b3 3fff cmp.w r3, #4294967295 + 80031b6: d101 bne.n 80031bc + 80031b8: 2301 movs r3, #1 + 80031ba: e075 b.n 80032a8 /* Clean-up stretched table */ if (sync_window(dp->fs)) return FR_DISK_ERR;/* Flush disk access window */ - 8003228: 687b ldr r3, [r7, #4] - 800322a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800322e: 4618 mov r0, r3 - 8003230: f7ff fb5e bl 80028f0 - 8003234: 4603 mov r3, r0 - 8003236: 2b00 cmp r3, #0 - 8003238: d001 beq.n 800323e - 800323a: 2301 movs r3, #1 - 800323c: e06a b.n 8003314 + 80031bc: 687b ldr r3, [r7, #4] + 80031be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80031c2: 4618 mov r0, r3 + 80031c4: f7ff fb5e bl 8002884 + 80031c8: 4603 mov r3, r0 + 80031ca: 2b00 cmp r3, #0 + 80031cc: d001 beq.n 80031d2 + 80031ce: 2301 movs r3, #1 + 80031d0: e06a b.n 80032a8 mem_set(dp->fs->win.d8, 0, SS(dp->fs)); /* Clear window buffer */ - 800323e: 687b ldr r3, [r7, #4] - 8003240: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003244: f44f 7200 mov.w r2, #512 ; 0x200 - 8003248: 2100 movs r1, #0 - 800324a: 4618 mov r0, r3 - 800324c: f7ff f986 bl 800255c + 80031d2: 687b ldr r3, [r7, #4] + 80031d4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80031d8: f44f 7200 mov.w r2, #512 ; 0x200 + 80031dc: 2100 movs r1, #0 + 80031de: 4618 mov r0, r3 + 80031e0: f7ff f986 bl 80024f0 dp->fs->winsect = clust2sect(dp->fs, clst); /* Cluster start sector */ - 8003250: 687b ldr r3, [r7, #4] - 8003252: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8003256: 687b ldr r3, [r7, #4] - 8003258: f8d3 4200 ldr.w r4, [r3, #512] ; 0x200 - 800325c: 6979 ldr r1, [r7, #20] - 800325e: 4610 mov r0, r2 - 8003260: f7ff fbbd bl 80029de - 8003264: 4603 mov r3, r0 - 8003266: f8c4 322c str.w r3, [r4, #556] ; 0x22c + 80031e4: 687b ldr r3, [r7, #4] + 80031e6: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80031ea: 687b ldr r3, [r7, #4] + 80031ec: f8d3 4200 ldr.w r4, [r3, #512] ; 0x200 + 80031f0: 6979 ldr r1, [r7, #20] + 80031f2: 4610 mov r0, r2 + 80031f4: f7ff fbbd bl 8002972 + 80031f8: 4603 mov r3, r0 + 80031fa: f8c4 322c str.w r3, [r4, #556] ; 0x22c for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - 800326a: 2300 movs r3, #0 - 800326c: 613b str r3, [r7, #16] - 800326e: e01b b.n 80032a8 + 80031fe: 2300 movs r3, #0 + 8003200: 613b str r3, [r7, #16] + 8003202: e01b b.n 800323c dp->fs->wflag = 1; - 8003270: 687b ldr r3, [r7, #4] - 8003272: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003276: 2201 movs r2, #1 - 8003278: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 8003204: 687b ldr r3, [r7, #4] + 8003206: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800320a: 2201 movs r2, #1 + 800320c: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (sync_window(dp->fs)) return FR_DISK_ERR; - 800327c: 687b ldr r3, [r7, #4] - 800327e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003282: 4618 mov r0, r3 - 8003284: f7ff fb34 bl 80028f0 - 8003288: 4603 mov r3, r0 - 800328a: 2b00 cmp r3, #0 - 800328c: d001 beq.n 8003292 - 800328e: 2301 movs r3, #1 - 8003290: e040 b.n 8003314 + 8003210: 687b ldr r3, [r7, #4] + 8003212: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003216: 4618 mov r0, r3 + 8003218: f7ff fb34 bl 8002884 + 800321c: 4603 mov r3, r0 + 800321e: 2b00 cmp r3, #0 + 8003220: d001 beq.n 8003226 + 8003222: 2301 movs r3, #1 + 8003224: e040 b.n 80032a8 dp->fs->winsect++; - 8003292: 687b ldr r3, [r7, #4] - 8003294: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003298: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c - 800329c: 3201 adds r2, #1 - 800329e: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 8003226: 687b ldr r3, [r7, #4] + 8003228: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800322c: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c + 8003230: 3201 adds r2, #1 + 8003232: f8c3 222c str.w r2, [r3, #556] ; 0x22c for (c = 0; c < dp->fs->csize; c++) { /* Fill the new cluster with 0 */ - 80032a2: 693b ldr r3, [r7, #16] - 80032a4: 3301 adds r3, #1 - 80032a6: 613b str r3, [r7, #16] - 80032a8: 687b ldr r3, [r7, #4] - 80032aa: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80032ae: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 80032b2: 461a mov r2, r3 - 80032b4: 693b ldr r3, [r7, #16] - 80032b6: 4293 cmp r3, r2 - 80032b8: d3da bcc.n 8003270 + 8003236: 693b ldr r3, [r7, #16] + 8003238: 3301 adds r3, #1 + 800323a: 613b str r3, [r7, #16] + 800323c: 687b ldr r3, [r7, #4] + 800323e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003242: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003246: 461a mov r2, r3 + 8003248: 693b ldr r3, [r7, #16] + 800324a: 4293 cmp r3, r2 + 800324c: d3da bcc.n 8003204 } dp->fs->winsect -= c; /* Rewind window offset */ - 80032ba: 687b ldr r3, [r7, #4] - 80032bc: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80032c0: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c - 80032c4: 687b ldr r3, [r7, #4] - 80032c6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80032ca: 693a ldr r2, [r7, #16] - 80032cc: 1a8a subs r2, r1, r2 - 80032ce: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 800324e: 687b ldr r3, [r7, #4] + 8003250: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003254: f8d3 122c ldr.w r1, [r3, #556] ; 0x22c + 8003258: 687b ldr r3, [r7, #4] + 800325a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800325e: 693a ldr r2, [r7, #16] + 8003260: 1a8a subs r2, r1, r2 + 8003262: f8c3 222c str.w r2, [r3, #556] ; 0x22c #else if (!stretch) return FR_NO_FILE; /* If do not stretch, report EOT (this is to suppress warning) */ return FR_NO_FILE; /* Report EOT */ #endif } dp->clust = clst; /* Initialize data for new cluster */ - 80032d2: 687b ldr r3, [r7, #4] - 80032d4: 697a ldr r2, [r7, #20] - 80032d6: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003266: 687b ldr r3, [r7, #4] + 8003268: 697a ldr r2, [r7, #20] + 800326a: f8c3 220c str.w r2, [r3, #524] ; 0x20c dp->sect = clust2sect(dp->fs, clst); - 80032da: 687b ldr r3, [r7, #4] - 80032dc: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80032e0: 6979 ldr r1, [r7, #20] - 80032e2: 4618 mov r0, r3 - 80032e4: f7ff fb7b bl 80029de - 80032e8: 4602 mov r2, r0 - 80032ea: 687b ldr r3, [r7, #4] - 80032ec: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 800326e: 687b ldr r3, [r7, #4] + 8003270: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003274: 6979 ldr r1, [r7, #20] + 8003276: 4618 mov r0, r3 + 8003278: f7ff fb7b bl 8002972 + 800327c: 4602 mov r2, r0 + 800327e: 687b ldr r3, [r7, #4] + 8003280: f8c3 2210 str.w r2, [r3, #528] ; 0x210 } } } dp->index = (WORD)i; /* Current index */ - 80032f0: 68fb ldr r3, [r7, #12] - 80032f2: b29a uxth r2, r3 - 80032f4: 687b ldr r3, [r7, #4] - 80032f6: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 8003284: 68fb ldr r3, [r7, #12] + 8003286: b29a uxth r2, r3 + 8003288: 687b ldr r3, [r7, #4] + 800328a: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 dp->dir = dp->fs->win.d8 + (i % (SS(dp->fs) / SZ_DIRE)) * SZ_DIRE; /* Current entry in the window */ - 80032fa: 687b ldr r3, [r7, #4] - 80032fc: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003300: 461a mov r2, r3 - 8003302: 68fb ldr r3, [r7, #12] - 8003304: f003 030f and.w r3, r3, #15 - 8003308: 015b lsls r3, r3, #5 - 800330a: 441a add r2, r3 - 800330c: 687b ldr r3, [r7, #4] - 800330e: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 800328e: 687b ldr r3, [r7, #4] + 8003290: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003294: 461a mov r2, r3 + 8003296: 68fb ldr r3, [r7, #12] + 8003298: f003 030f and.w r3, r3, #15 + 800329c: 015b lsls r3, r3, #5 + 800329e: 441a add r2, r3 + 80032a0: 687b ldr r3, [r7, #4] + 80032a2: f8c3 2214 str.w r2, [r3, #532] ; 0x214 return FR_OK; - 8003312: 2300 movs r3, #0 + 80032a6: 2300 movs r3, #0 } - 8003314: 4618 mov r0, r3 - 8003316: 371c adds r7, #28 - 8003318: 46bd mov sp, r7 - 800331a: bd90 pop {r4, r7, pc} + 80032a8: 4618 mov r0, r3 + 80032aa: 371c adds r7, #28 + 80032ac: 46bd mov sp, r7 + 80032ae: bd90 pop {r4, r7, pc} -0800331c : +080032b0 : static FRESULT dir_alloc ( DIR* dp, /* Pointer to the directory object */ UINT nent /* Number of contiguous entries to allocate (1-21) */ ) { - 800331c: b580 push {r7, lr} - 800331e: b084 sub sp, #16 - 8003320: af00 add r7, sp, #0 - 8003322: 6078 str r0, [r7, #4] - 8003324: 6039 str r1, [r7, #0] + 80032b0: b580 push {r7, lr} + 80032b2: b084 sub sp, #16 + 80032b4: af00 add r7, sp, #0 + 80032b6: 6078 str r0, [r7, #4] + 80032b8: 6039 str r1, [r7, #0] FRESULT res; UINT n; res = dir_sdi(dp, 0); - 8003326: 2100 movs r1, #0 - 8003328: 6878 ldr r0, [r7, #4] - 800332a: f7ff fe6c bl 8003006 - 800332e: 4603 mov r3, r0 - 8003330: 73fb strb r3, [r7, #15] + 80032ba: 2100 movs r1, #0 + 80032bc: 6878 ldr r0, [r7, #4] + 80032be: f7ff fe6c bl 8002f9a + 80032c2: 4603 mov r3, r0 + 80032c4: 73fb strb r3, [r7, #15] if (res == FR_OK) { - 8003332: 7bfb ldrb r3, [r7, #15] - 8003334: 2b00 cmp r3, #0 - 8003336: d131 bne.n 800339c + 80032c6: 7bfb ldrb r3, [r7, #15] + 80032c8: 2b00 cmp r3, #0 + 80032ca: d131 bne.n 8003330 n = 0; - 8003338: 2300 movs r3, #0 - 800333a: 60bb str r3, [r7, #8] + 80032cc: 2300 movs r3, #0 + 80032ce: 60bb str r3, [r7, #8] do { res = move_window(dp->fs, dp->sect); - 800333c: 687b ldr r3, [r7, #4] - 800333e: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8003342: 687b ldr r3, [r7, #4] - 8003344: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8003348: 4619 mov r1, r3 - 800334a: 4610 mov r0, r2 - 800334c: f7ff fb19 bl 8002982 - 8003350: 4603 mov r3, r0 - 8003352: 73fb strb r3, [r7, #15] + 80032d0: 687b ldr r3, [r7, #4] + 80032d2: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80032d6: 687b ldr r3, [r7, #4] + 80032d8: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80032dc: 4619 mov r1, r3 + 80032de: 4610 mov r0, r2 + 80032e0: f7ff fb19 bl 8002916 + 80032e4: 4603 mov r3, r0 + 80032e6: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 8003354: 7bfb ldrb r3, [r7, #15] - 8003356: 2b00 cmp r3, #0 - 8003358: d11f bne.n 800339a + 80032e8: 7bfb ldrb r3, [r7, #15] + 80032ea: 2b00 cmp r3, #0 + 80032ec: d11f bne.n 800332e if (dp->dir[0] == DDEM || dp->dir[0] == 0) { /* Is it a free entry? */ - 800335a: 687b ldr r3, [r7, #4] - 800335c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003360: 781b ldrb r3, [r3, #0] - 8003362: 2be5 cmp r3, #229 ; 0xe5 - 8003364: d005 beq.n 8003372 - 8003366: 687b ldr r3, [r7, #4] - 8003368: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 800336c: 781b ldrb r3, [r3, #0] - 800336e: 2b00 cmp r3, #0 - 8003370: d107 bne.n 8003382 + 80032ee: 687b ldr r3, [r7, #4] + 80032f0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80032f4: 781b ldrb r3, [r3, #0] + 80032f6: 2be5 cmp r3, #229 ; 0xe5 + 80032f8: d005 beq.n 8003306 + 80032fa: 687b ldr r3, [r7, #4] + 80032fc: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003300: 781b ldrb r3, [r3, #0] + 8003302: 2b00 cmp r3, #0 + 8003304: d107 bne.n 8003316 if (++n == nent) break; /* A block of contiguous free entries is found */ - 8003372: 68bb ldr r3, [r7, #8] - 8003374: 3301 adds r3, #1 - 8003376: 60bb str r3, [r7, #8] - 8003378: 68ba ldr r2, [r7, #8] - 800337a: 683b ldr r3, [r7, #0] - 800337c: 429a cmp r2, r3 - 800337e: d102 bne.n 8003386 - 8003380: e00c b.n 800339c + 8003306: 68bb ldr r3, [r7, #8] + 8003308: 3301 adds r3, #1 + 800330a: 60bb str r3, [r7, #8] + 800330c: 68ba ldr r2, [r7, #8] + 800330e: 683b ldr r3, [r7, #0] + 8003310: 429a cmp r2, r3 + 8003312: d102 bne.n 800331a + 8003314: e00c b.n 8003330 } else { n = 0; /* Not a blank entry. Restart to search */ - 8003382: 2300 movs r3, #0 - 8003384: 60bb str r3, [r7, #8] + 8003316: 2300 movs r3, #0 + 8003318: 60bb str r3, [r7, #8] } res = dir_next(dp, 1); /* Next entry with table stretch enabled */ - 8003386: 2101 movs r1, #1 - 8003388: 6878 ldr r0, [r7, #4] - 800338a: f7ff fed0 bl 800312e - 800338e: 4603 mov r3, r0 - 8003390: 73fb strb r3, [r7, #15] + 800331a: 2101 movs r1, #1 + 800331c: 6878 ldr r0, [r7, #4] + 800331e: f7ff fed0 bl 80030c2 + 8003322: 4603 mov r3, r0 + 8003324: 73fb strb r3, [r7, #15] } while (res == FR_OK); - 8003392: 7bfb ldrb r3, [r7, #15] - 8003394: 2b00 cmp r3, #0 - 8003396: d0d1 beq.n 800333c - 8003398: e000 b.n 800339c + 8003326: 7bfb ldrb r3, [r7, #15] + 8003328: 2b00 cmp r3, #0 + 800332a: d0d1 beq.n 80032d0 + 800332c: e000 b.n 8003330 if (res != FR_OK) break; - 800339a: bf00 nop + 800332e: bf00 nop } if (res == FR_NO_FILE) res = FR_DENIED; /* No directory entry to allocate */ - 800339c: 7bfb ldrb r3, [r7, #15] - 800339e: 2b04 cmp r3, #4 - 80033a0: d101 bne.n 80033a6 - 80033a2: 2307 movs r3, #7 - 80033a4: 73fb strb r3, [r7, #15] + 8003330: 7bfb ldrb r3, [r7, #15] + 8003332: 2b04 cmp r3, #4 + 8003334: d101 bne.n 800333a + 8003336: 2307 movs r3, #7 + 8003338: 73fb strb r3, [r7, #15] return res; - 80033a6: 7bfb ldrb r3, [r7, #15] + 800333a: 7bfb ldrb r3, [r7, #15] } - 80033a8: 4618 mov r0, r3 - 80033aa: 3710 adds r7, #16 - 80033ac: 46bd mov sp, r7 - 80033ae: bd80 pop {r7, pc} + 800333c: 4618 mov r0, r3 + 800333e: 3710 adds r7, #16 + 8003340: 46bd mov sp, r7 + 8003342: bd80 pop {r7, pc} -080033b0 : +08003344 : static DWORD ld_clust ( FATFS* fs, /* Pointer to the fs object */ BYTE* dir /* Pointer to the directory entry */ ) { - 80033b0: b480 push {r7} - 80033b2: b085 sub sp, #20 - 80033b4: af00 add r7, sp, #0 - 80033b6: 6078 str r0, [r7, #4] - 80033b8: 6039 str r1, [r7, #0] + 8003344: b480 push {r7} + 8003346: b085 sub sp, #20 + 8003348: af00 add r7, sp, #0 + 800334a: 6078 str r0, [r7, #4] + 800334c: 6039 str r1, [r7, #0] DWORD cl; cl = LD_WORD(dir + DIR_FstClusLO); - 80033ba: 683b ldr r3, [r7, #0] - 80033bc: 331b adds r3, #27 - 80033be: 781b ldrb r3, [r3, #0] - 80033c0: 021b lsls r3, r3, #8 - 80033c2: b21a sxth r2, r3 - 80033c4: 683b ldr r3, [r7, #0] - 80033c6: 331a adds r3, #26 - 80033c8: 781b ldrb r3, [r3, #0] - 80033ca: b21b sxth r3, r3 - 80033cc: 4313 orrs r3, r2 - 80033ce: b21b sxth r3, r3 - 80033d0: b29b uxth r3, r3 - 80033d2: 60fb str r3, [r7, #12] + 800334e: 683b ldr r3, [r7, #0] + 8003350: 331b adds r3, #27 + 8003352: 781b ldrb r3, [r3, #0] + 8003354: 021b lsls r3, r3, #8 + 8003356: b21a sxth r2, r3 + 8003358: 683b ldr r3, [r7, #0] + 800335a: 331a adds r3, #26 + 800335c: 781b ldrb r3, [r3, #0] + 800335e: b21b sxth r3, r3 + 8003360: 4313 orrs r3, r2 + 8003362: b21b sxth r3, r3 + 8003364: b29b uxth r3, r3 + 8003366: 60fb str r3, [r7, #12] if (fs->fs_type == FS_FAT32) - 80033d4: 687b ldr r3, [r7, #4] - 80033d6: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 80033da: 2b03 cmp r3, #3 - 80033dc: d10f bne.n 80033fe + 8003368: 687b ldr r3, [r7, #4] + 800336a: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 800336e: 2b03 cmp r3, #3 + 8003370: d10f bne.n 8003392 cl |= (DWORD)LD_WORD(dir + DIR_FstClusHI) << 16; - 80033de: 683b ldr r3, [r7, #0] - 80033e0: 3315 adds r3, #21 - 80033e2: 781b ldrb r3, [r3, #0] - 80033e4: 021b lsls r3, r3, #8 - 80033e6: b21a sxth r2, r3 - 80033e8: 683b ldr r3, [r7, #0] - 80033ea: 3314 adds r3, #20 - 80033ec: 781b ldrb r3, [r3, #0] - 80033ee: b21b sxth r3, r3 - 80033f0: 4313 orrs r3, r2 - 80033f2: b21b sxth r3, r3 - 80033f4: b29b uxth r3, r3 - 80033f6: 041b lsls r3, r3, #16 - 80033f8: 68fa ldr r2, [r7, #12] - 80033fa: 4313 orrs r3, r2 - 80033fc: 60fb str r3, [r7, #12] + 8003372: 683b ldr r3, [r7, #0] + 8003374: 3315 adds r3, #21 + 8003376: 781b ldrb r3, [r3, #0] + 8003378: 021b lsls r3, r3, #8 + 800337a: b21a sxth r2, r3 + 800337c: 683b ldr r3, [r7, #0] + 800337e: 3314 adds r3, #20 + 8003380: 781b ldrb r3, [r3, #0] + 8003382: b21b sxth r3, r3 + 8003384: 4313 orrs r3, r2 + 8003386: b21b sxth r3, r3 + 8003388: b29b uxth r3, r3 + 800338a: 041b lsls r3, r3, #16 + 800338c: 68fa ldr r2, [r7, #12] + 800338e: 4313 orrs r3, r2 + 8003390: 60fb str r3, [r7, #12] return cl; - 80033fe: 68fb ldr r3, [r7, #12] + 8003392: 68fb ldr r3, [r7, #12] } - 8003400: 4618 mov r0, r3 - 8003402: 3714 adds r7, #20 - 8003404: 46bd mov sp, r7 - 8003406: bc80 pop {r7} - 8003408: 4770 bx lr + 8003394: 4618 mov r0, r3 + 8003396: 3714 adds r7, #20 + 8003398: 46bd mov sp, r7 + 800339a: bc80 pop {r7} + 800339c: 4770 bx lr -0800340a : +0800339e : static void st_clust ( BYTE* dir, /* Pointer to the directory entry */ DWORD cl /* Value to be set */ ) { - 800340a: b480 push {r7} - 800340c: b083 sub sp, #12 - 800340e: af00 add r7, sp, #0 - 8003410: 6078 str r0, [r7, #4] - 8003412: 6039 str r1, [r7, #0] + 800339e: b480 push {r7} + 80033a0: b083 sub sp, #12 + 80033a2: af00 add r7, sp, #0 + 80033a4: 6078 str r0, [r7, #4] + 80033a6: 6039 str r1, [r7, #0] ST_WORD(dir + DIR_FstClusLO, cl); - 8003414: 687b ldr r3, [r7, #4] - 8003416: 331a adds r3, #26 - 8003418: 683a ldr r2, [r7, #0] - 800341a: b2d2 uxtb r2, r2 - 800341c: 701a strb r2, [r3, #0] - 800341e: 683b ldr r3, [r7, #0] - 8003420: b29b uxth r3, r3 - 8003422: 0a1b lsrs r3, r3, #8 - 8003424: b29a uxth r2, r3 - 8003426: 687b ldr r3, [r7, #4] - 8003428: 331b adds r3, #27 - 800342a: b2d2 uxtb r2, r2 - 800342c: 701a strb r2, [r3, #0] + 80033a8: 687b ldr r3, [r7, #4] + 80033aa: 331a adds r3, #26 + 80033ac: 683a ldr r2, [r7, #0] + 80033ae: b2d2 uxtb r2, r2 + 80033b0: 701a strb r2, [r3, #0] + 80033b2: 683b ldr r3, [r7, #0] + 80033b4: b29b uxth r3, r3 + 80033b6: 0a1b lsrs r3, r3, #8 + 80033b8: b29a uxth r2, r3 + 80033ba: 687b ldr r3, [r7, #4] + 80033bc: 331b adds r3, #27 + 80033be: b2d2 uxtb r2, r2 + 80033c0: 701a strb r2, [r3, #0] ST_WORD(dir + DIR_FstClusHI, cl >> 16); - 800342e: 683b ldr r3, [r7, #0] - 8003430: 0c1a lsrs r2, r3, #16 - 8003432: 687b ldr r3, [r7, #4] - 8003434: 3314 adds r3, #20 - 8003436: b2d2 uxtb r2, r2 - 8003438: 701a strb r2, [r3, #0] - 800343a: 683b ldr r3, [r7, #0] - 800343c: 0c1b lsrs r3, r3, #16 - 800343e: b29b uxth r3, r3 - 8003440: 0a1b lsrs r3, r3, #8 - 8003442: b29a uxth r2, r3 - 8003444: 687b ldr r3, [r7, #4] - 8003446: 3315 adds r3, #21 - 8003448: b2d2 uxtb r2, r2 - 800344a: 701a strb r2, [r3, #0] + 80033c2: 683b ldr r3, [r7, #0] + 80033c4: 0c1a lsrs r2, r3, #16 + 80033c6: 687b ldr r3, [r7, #4] + 80033c8: 3314 adds r3, #20 + 80033ca: b2d2 uxtb r2, r2 + 80033cc: 701a strb r2, [r3, #0] + 80033ce: 683b ldr r3, [r7, #0] + 80033d0: 0c1b lsrs r3, r3, #16 + 80033d2: b29b uxth r3, r3 + 80033d4: 0a1b lsrs r3, r3, #8 + 80033d6: b29a uxth r2, r3 + 80033d8: 687b ldr r3, [r7, #4] + 80033da: 3315 adds r3, #21 + 80033dc: b2d2 uxtb r2, r2 + 80033de: 701a strb r2, [r3, #0] } - 800344c: bf00 nop - 800344e: 370c adds r7, #12 - 8003450: 46bd mov sp, r7 - 8003452: bc80 pop {r7} - 8003454: 4770 bx lr + 80033e0: bf00 nop + 80033e2: 370c adds r7, #12 + 80033e4: 46bd mov sp, r7 + 80033e6: bc80 pop {r7} + 80033e8: 4770 bx lr -08003456 : +080033ea : static FRESULT dir_find ( DIR* dp /* Pointer to the directory object linked to the file name */ ) { - 8003456: b580 push {r7, lr} - 8003458: b086 sub sp, #24 - 800345a: af00 add r7, sp, #0 - 800345c: 6078 str r0, [r7, #4] + 80033ea: b580 push {r7, lr} + 80033ec: b086 sub sp, #24 + 80033ee: af00 add r7, sp, #0 + 80033f0: 6078 str r0, [r7, #4] BYTE c, *dir; #if _USE_LFN BYTE a, ord, sum; #endif res = dir_sdi(dp, 0); /* Rewind directory object */ - 800345e: 2100 movs r1, #0 - 8003460: 6878 ldr r0, [r7, #4] - 8003462: f7ff fdd0 bl 8003006 - 8003466: 4603 mov r3, r0 - 8003468: 75fb strb r3, [r7, #23] + 80033f2: 2100 movs r1, #0 + 80033f4: 6878 ldr r0, [r7, #4] + 80033f6: f7ff fdd0 bl 8002f9a + 80033fa: 4603 mov r3, r0 + 80033fc: 75fb strb r3, [r7, #23] if (res != FR_OK) return res; - 800346a: 7dfb ldrb r3, [r7, #23] - 800346c: 2b00 cmp r3, #0 - 800346e: d001 beq.n 8003474 - 8003470: 7dfb ldrb r3, [r7, #23] - 8003472: e03b b.n 80034ec + 80033fe: 7dfb ldrb r3, [r7, #23] + 8003400: 2b00 cmp r3, #0 + 8003402: d001 beq.n 8003408 + 8003404: 7dfb ldrb r3, [r7, #23] + 8003406: e03b b.n 8003480 #if _USE_LFN ord = sum = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ #endif do { res = move_window(dp->fs, dp->sect); - 8003474: 687b ldr r3, [r7, #4] - 8003476: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 800347a: 687b ldr r3, [r7, #4] - 800347c: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8003480: 4619 mov r1, r3 - 8003482: 4610 mov r0, r2 - 8003484: f7ff fa7d bl 8002982 - 8003488: 4603 mov r3, r0 - 800348a: 75fb strb r3, [r7, #23] + 8003408: 687b ldr r3, [r7, #4] + 800340a: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 800340e: 687b ldr r3, [r7, #4] + 8003410: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8003414: 4619 mov r1, r3 + 8003416: 4610 mov r0, r2 + 8003418: f7ff fa7d bl 8002916 + 800341c: 4603 mov r3, r0 + 800341e: 75fb strb r3, [r7, #23] if (res != FR_OK) break; - 800348c: 7dfb ldrb r3, [r7, #23] - 800348e: 2b00 cmp r3, #0 - 8003490: d128 bne.n 80034e4 + 8003420: 7dfb ldrb r3, [r7, #23] + 8003422: 2b00 cmp r3, #0 + 8003424: d128 bne.n 8003478 dir = dp->dir; /* Ptr to the directory entry of current index */ - 8003492: 687b ldr r3, [r7, #4] - 8003494: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003498: 613b str r3, [r7, #16] + 8003426: 687b ldr r3, [r7, #4] + 8003428: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 800342c: 613b str r3, [r7, #16] c = dir[DIR_Name]; - 800349a: 693b ldr r3, [r7, #16] - 800349c: 781b ldrb r3, [r3, #0] - 800349e: 73fb strb r3, [r7, #15] + 800342e: 693b ldr r3, [r7, #16] + 8003430: 781b ldrb r3, [r3, #0] + 8003432: 73fb strb r3, [r7, #15] if (c == 0) { res = FR_NO_FILE; break; } /* Reached to end of table */ - 80034a0: 7bfb ldrb r3, [r7, #15] - 80034a2: 2b00 cmp r3, #0 - 80034a4: d102 bne.n 80034ac - 80034a6: 2304 movs r3, #4 - 80034a8: 75fb strb r3, [r7, #23] - 80034aa: e01e b.n 80034ea + 8003434: 7bfb ldrb r3, [r7, #15] + 8003436: 2b00 cmp r3, #0 + 8003438: d102 bne.n 8003440 + 800343a: 2304 movs r3, #4 + 800343c: 75fb strb r3, [r7, #23] + 800343e: e01e b.n 800347e if (!(dp->fn[NSFLAG] & NS_LOSS) && !mem_cmp(dir, dp->fn, 11)) break; /* SFN matched? */ ord = 0xFF; dp->lfn_idx = 0xFFFF; /* Reset LFN sequence */ } } #else /* Non LFN configuration */ if (!(dir[DIR_Attr] & AM_VOL) && !mem_cmp(dir, dp->fn, 11)) /* Is it a valid entry? */ - 80034ac: 693b ldr r3, [r7, #16] - 80034ae: 330b adds r3, #11 - 80034b0: 781b ldrb r3, [r3, #0] - 80034b2: f003 0308 and.w r3, r3, #8 - 80034b6: 2b00 cmp r3, #0 - 80034b8: d10a bne.n 80034d0 - 80034ba: 687b ldr r3, [r7, #4] - 80034bc: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80034c0: 220b movs r2, #11 - 80034c2: 4619 mov r1, r3 - 80034c4: 6938 ldr r0, [r7, #16] - 80034c6: f7ff f863 bl 8002590 - 80034ca: 4603 mov r3, r0 - 80034cc: 2b00 cmp r3, #0 - 80034ce: d00b beq.n 80034e8 + 8003440: 693b ldr r3, [r7, #16] + 8003442: 330b adds r3, #11 + 8003444: 781b ldrb r3, [r3, #0] + 8003446: f003 0308 and.w r3, r3, #8 + 800344a: 2b00 cmp r3, #0 + 800344c: d10a bne.n 8003464 + 800344e: 687b ldr r3, [r7, #4] + 8003450: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 8003454: 220b movs r2, #11 + 8003456: 4619 mov r1, r3 + 8003458: 6938 ldr r0, [r7, #16] + 800345a: f7ff f863 bl 8002524 + 800345e: 4603 mov r3, r0 + 8003460: 2b00 cmp r3, #0 + 8003462: d00b beq.n 800347c break; #endif res = dir_next(dp, 0); /* Next entry */ - 80034d0: 2100 movs r1, #0 - 80034d2: 6878 ldr r0, [r7, #4] - 80034d4: f7ff fe2b bl 800312e - 80034d8: 4603 mov r3, r0 - 80034da: 75fb strb r3, [r7, #23] + 8003464: 2100 movs r1, #0 + 8003466: 6878 ldr r0, [r7, #4] + 8003468: f7ff fe2b bl 80030c2 + 800346c: 4603 mov r3, r0 + 800346e: 75fb strb r3, [r7, #23] } while (res == FR_OK); - 80034dc: 7dfb ldrb r3, [r7, #23] - 80034de: 2b00 cmp r3, #0 - 80034e0: d0c8 beq.n 8003474 - 80034e2: e002 b.n 80034ea + 8003470: 7dfb ldrb r3, [r7, #23] + 8003472: 2b00 cmp r3, #0 + 8003474: d0c8 beq.n 8003408 + 8003476: e002 b.n 800347e if (res != FR_OK) break; - 80034e4: bf00 nop - 80034e6: e000 b.n 80034ea + 8003478: bf00 nop + 800347a: e000 b.n 800347e break; - 80034e8: bf00 nop + 800347c: bf00 nop return res; - 80034ea: 7dfb ldrb r3, [r7, #23] + 800347e: 7dfb ldrb r3, [r7, #23] } - 80034ec: 4618 mov r0, r3 - 80034ee: 3718 adds r7, #24 - 80034f0: 46bd mov sp, r7 - 80034f2: bd80 pop {r7, pc} + 8003480: 4618 mov r0, r3 + 8003482: 3718 adds r7, #24 + 8003484: 46bd mov sp, r7 + 8003486: bd80 pop {r7, pc} -080034f4 : +08003488 : #if !_FS_READONLY static FRESULT dir_register ( /* FR_OK:Successful, FR_DENIED:No free entry or too many SFN collision, FR_DISK_ERR:Disk error */ DIR* dp /* Target directory with object name to be created */ ) { - 80034f4: b580 push {r7, lr} - 80034f6: b084 sub sp, #16 - 80034f8: af00 add r7, sp, #0 - 80034fa: 6078 str r0, [r7, #4] + 8003488: b580 push {r7, lr} + 800348a: b084 sub sp, #16 + 800348c: af00 add r7, sp, #0 + 800348e: 6078 str r0, [r7, #4] res = dir_next(dp, 0); /* Next entry */ } while (res == FR_OK && --nent); } } #else /* Non LFN configuration */ res = dir_alloc(dp, 1); /* Allocate an entry for SFN */ - 80034fc: 2101 movs r1, #1 - 80034fe: 6878 ldr r0, [r7, #4] - 8003500: f7ff ff0c bl 800331c - 8003504: 4603 mov r3, r0 - 8003506: 73fb strb r3, [r7, #15] + 8003490: 2101 movs r1, #1 + 8003492: 6878 ldr r0, [r7, #4] + 8003494: f7ff ff0c bl 80032b0 + 8003498: 4603 mov r3, r0 + 800349a: 73fb strb r3, [r7, #15] #endif if (res == FR_OK) { /* Set SFN entry */ - 8003508: 7bfb ldrb r3, [r7, #15] - 800350a: 2b00 cmp r3, #0 - 800350c: d126 bne.n 800355c + 800349c: 7bfb ldrb r3, [r7, #15] + 800349e: 2b00 cmp r3, #0 + 80034a0: d126 bne.n 80034f0 res = move_window(dp->fs, dp->sect); - 800350e: 687b ldr r3, [r7, #4] - 8003510: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8003514: 687b ldr r3, [r7, #4] - 8003516: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 800351a: 4619 mov r1, r3 - 800351c: 4610 mov r0, r2 - 800351e: f7ff fa30 bl 8002982 - 8003522: 4603 mov r3, r0 - 8003524: 73fb strb r3, [r7, #15] + 80034a2: 687b ldr r3, [r7, #4] + 80034a4: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 80034a8: 687b ldr r3, [r7, #4] + 80034aa: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 80034ae: 4619 mov r1, r3 + 80034b0: 4610 mov r0, r2 + 80034b2: f7ff fa30 bl 8002916 + 80034b6: 4603 mov r3, r0 + 80034b8: 73fb strb r3, [r7, #15] if (res == FR_OK) { - 8003526: 7bfb ldrb r3, [r7, #15] - 8003528: 2b00 cmp r3, #0 - 800352a: d117 bne.n 800355c + 80034ba: 7bfb ldrb r3, [r7, #15] + 80034bc: 2b00 cmp r3, #0 + 80034be: d117 bne.n 80034f0 mem_set(dp->dir, 0, SZ_DIRE); /* Clean the entry */ - 800352c: 687b ldr r3, [r7, #4] - 800352e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003532: 2220 movs r2, #32 - 8003534: 2100 movs r1, #0 - 8003536: 4618 mov r0, r3 - 8003538: f7ff f810 bl 800255c + 80034c0: 687b ldr r3, [r7, #4] + 80034c2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 80034c6: 2220 movs r2, #32 + 80034c8: 2100 movs r1, #0 + 80034ca: 4618 mov r0, r3 + 80034cc: f7ff f810 bl 80024f0 mem_cpy(dp->dir, dp->fn, 11); /* Put SFN */ - 800353c: 687b ldr r3, [r7, #4] - 800353e: f8d3 0214 ldr.w r0, [r3, #532] ; 0x214 - 8003542: 687b ldr r3, [r7, #4] - 8003544: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8003548: 220b movs r2, #11 - 800354a: 4619 mov r1, r3 - 800354c: f7fe ffe8 bl 8002520 + 80034d0: 687b ldr r3, [r7, #4] + 80034d2: f8d3 0214 ldr.w r0, [r3, #532] ; 0x214 + 80034d6: 687b ldr r3, [r7, #4] + 80034d8: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80034dc: 220b movs r2, #11 + 80034de: 4619 mov r1, r3 + 80034e0: f7fe ffe8 bl 80024b4 #if _USE_LFN dp->dir[DIR_NTres] = dp->fn[NSFLAG] & (NS_BODY | NS_EXT); /* Put NT flag */ #endif dp->fs->wflag = 1; - 8003550: 687b ldr r3, [r7, #4] - 8003552: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003556: 2201 movs r2, #1 - 8003558: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 80034e4: 687b ldr r3, [r7, #4] + 80034e6: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80034ea: 2201 movs r2, #1 + 80034ec: f883 2204 strb.w r2, [r3, #516] ; 0x204 } } return res; - 800355c: 7bfb ldrb r3, [r7, #15] + 80034f0: 7bfb ldrb r3, [r7, #15] } - 800355e: 4618 mov r0, r3 - 8003560: 3710 adds r7, #16 - 8003562: 46bd mov sp, r7 - 8003564: bd80 pop {r7, pc} + 80034f2: 4618 mov r0, r3 + 80034f4: 3710 adds r7, #16 + 80034f6: 46bd mov sp, r7 + 80034f8: bd80 pop {r7, pc} ... -08003568 : +080034fc : static FRESULT create_name ( DIR* dp, /* Pointer to the directory object */ const TCHAR** path /* Pointer to pointer to the segment in the path string */ ) { - 8003568: b580 push {r7, lr} - 800356a: b088 sub sp, #32 - 800356c: af00 add r7, sp, #0 - 800356e: 6078 str r0, [r7, #4] - 8003570: 6039 str r1, [r7, #0] + 80034fc: b580 push {r7, lr} + 80034fe: b088 sub sp, #32 + 8003500: af00 add r7, sp, #0 + 8003502: 6078 str r0, [r7, #4] + 8003504: 6039 str r1, [r7, #0] BYTE b, c, d, *sfn; UINT ni, si, i; const char *p; /* Create file name in directory form */ for (p = *path; *p == '/' || *p == '\\'; p++) ; /* Strip duplicated separator */ - 8003572: 683b ldr r3, [r7, #0] - 8003574: 681b ldr r3, [r3, #0] - 8003576: 60fb str r3, [r7, #12] - 8003578: e002 b.n 8003580 - 800357a: 68fb ldr r3, [r7, #12] - 800357c: 3301 adds r3, #1 - 800357e: 60fb str r3, [r7, #12] - 8003580: 68fb ldr r3, [r7, #12] - 8003582: 781b ldrb r3, [r3, #0] - 8003584: 2b2f cmp r3, #47 ; 0x2f - 8003586: d0f8 beq.n 800357a - 8003588: 68fb ldr r3, [r7, #12] - 800358a: 781b ldrb r3, [r3, #0] - 800358c: 2b5c cmp r3, #92 ; 0x5c - 800358e: d0f4 beq.n 800357a + 8003506: 683b ldr r3, [r7, #0] + 8003508: 681b ldr r3, [r3, #0] + 800350a: 60fb str r3, [r7, #12] + 800350c: e002 b.n 8003514 + 800350e: 68fb ldr r3, [r7, #12] + 8003510: 3301 adds r3, #1 + 8003512: 60fb str r3, [r7, #12] + 8003514: 68fb ldr r3, [r7, #12] + 8003516: 781b ldrb r3, [r3, #0] + 8003518: 2b2f cmp r3, #47 ; 0x2f + 800351a: d0f8 beq.n 800350e + 800351c: 68fb ldr r3, [r7, #12] + 800351e: 781b ldrb r3, [r3, #0] + 8003520: 2b5c cmp r3, #92 ; 0x5c + 8003522: d0f4 beq.n 800350e sfn = dp->fn; - 8003590: 687b ldr r3, [r7, #4] - 8003592: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8003596: 60bb str r3, [r7, #8] + 8003524: 687b ldr r3, [r7, #4] + 8003526: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 800352a: 60bb str r3, [r7, #8] mem_set(sfn, ' ', 11); - 8003598: 220b movs r2, #11 - 800359a: 2120 movs r1, #32 - 800359c: 68b8 ldr r0, [r7, #8] - 800359e: f7fe ffdd bl 800255c + 800352c: 220b movs r2, #11 + 800352e: 2120 movs r1, #32 + 8003530: 68b8 ldr r0, [r7, #8] + 8003532: f7fe ffdd bl 80024f0 si = i = b = 0; ni = 8; - 80035a2: 2300 movs r3, #0 - 80035a4: 77fb strb r3, [r7, #31] - 80035a6: 2300 movs r3, #0 - 80035a8: 613b str r3, [r7, #16] - 80035aa: 693b ldr r3, [r7, #16] - 80035ac: 617b str r3, [r7, #20] - 80035ae: 2308 movs r3, #8 - 80035b0: 61bb str r3, [r7, #24] + 8003536: 2300 movs r3, #0 + 8003538: 77fb strb r3, [r7, #31] + 800353a: 2300 movs r3, #0 + 800353c: 613b str r3, [r7, #16] + 800353e: 693b ldr r3, [r7, #16] + 8003540: 617b str r3, [r7, #20] + 8003542: 2308 movs r3, #8 + 8003544: 61bb str r3, [r7, #24] sfn[NSFLAG] = (c <= ' ') ? NS_LAST | NS_DOT : NS_DOT; /* Set last segment flag if end of path */ return FR_OK; } #endif for (;;) { c = (BYTE)p[si++]; - 80035b2: 697b ldr r3, [r7, #20] - 80035b4: 1c5a adds r2, r3, #1 - 80035b6: 617a str r2, [r7, #20] - 80035b8: 68fa ldr r2, [r7, #12] - 80035ba: 4413 add r3, r2 - 80035bc: 781b ldrb r3, [r3, #0] - 80035be: 77bb strb r3, [r7, #30] + 8003546: 697b ldr r3, [r7, #20] + 8003548: 1c5a adds r2, r3, #1 + 800354a: 617a str r2, [r7, #20] + 800354c: 68fa ldr r2, [r7, #12] + 800354e: 4413 add r3, r2 + 8003550: 781b ldrb r3, [r3, #0] + 8003552: 77bb strb r3, [r7, #30] if (c <= ' ' || c == '/' || c == '\\') break; /* Break on end of segment */ - 80035c0: 7fbb ldrb r3, [r7, #30] - 80035c2: 2b20 cmp r3, #32 - 80035c4: d953 bls.n 800366e - 80035c6: 7fbb ldrb r3, [r7, #30] - 80035c8: 2b2f cmp r3, #47 ; 0x2f - 80035ca: d050 beq.n 800366e - 80035cc: 7fbb ldrb r3, [r7, #30] - 80035ce: 2b5c cmp r3, #92 ; 0x5c - 80035d0: d04d beq.n 800366e + 8003554: 7fbb ldrb r3, [r7, #30] + 8003556: 2b20 cmp r3, #32 + 8003558: d953 bls.n 8003602 + 800355a: 7fbb ldrb r3, [r7, #30] + 800355c: 2b2f cmp r3, #47 ; 0x2f + 800355e: d050 beq.n 8003602 + 8003560: 7fbb ldrb r3, [r7, #30] + 8003562: 2b5c cmp r3, #92 ; 0x5c + 8003564: d04d beq.n 8003602 if (c == '.' || i >= ni) { - 80035d2: 7fbb ldrb r3, [r7, #30] - 80035d4: 2b2e cmp r3, #46 ; 0x2e - 80035d6: d003 beq.n 80035e0 - 80035d8: 693a ldr r2, [r7, #16] - 80035da: 69bb ldr r3, [r7, #24] - 80035dc: 429a cmp r2, r3 - 80035de: d30f bcc.n 8003600 + 8003566: 7fbb ldrb r3, [r7, #30] + 8003568: 2b2e cmp r3, #46 ; 0x2e + 800356a: d003 beq.n 8003574 + 800356c: 693a ldr r2, [r7, #16] + 800356e: 69bb ldr r3, [r7, #24] + 8003570: 429a cmp r2, r3 + 8003572: d30f bcc.n 8003594 if (ni != 8 || c != '.') return FR_INVALID_NAME; - 80035e0: 69bb ldr r3, [r7, #24] - 80035e2: 2b08 cmp r3, #8 - 80035e4: d102 bne.n 80035ec - 80035e6: 7fbb ldrb r3, [r7, #30] - 80035e8: 2b2e cmp r3, #46 ; 0x2e - 80035ea: d001 beq.n 80035f0 - 80035ec: 2306 movs r3, #6 - 80035ee: e073 b.n 80036d8 + 8003574: 69bb ldr r3, [r7, #24] + 8003576: 2b08 cmp r3, #8 + 8003578: d102 bne.n 8003580 + 800357a: 7fbb ldrb r3, [r7, #30] + 800357c: 2b2e cmp r3, #46 ; 0x2e + 800357e: d001 beq.n 8003584 + 8003580: 2306 movs r3, #6 + 8003582: e073 b.n 800366c i = 8; ni = 11; - 80035f0: 2308 movs r3, #8 - 80035f2: 613b str r3, [r7, #16] - 80035f4: 230b movs r3, #11 - 80035f6: 61bb str r3, [r7, #24] + 8003584: 2308 movs r3, #8 + 8003586: 613b str r3, [r7, #16] + 8003588: 230b movs r3, #11 + 800358a: 61bb str r3, [r7, #24] b <<= 2; continue; - 80035f8: 7ffb ldrb r3, [r7, #31] - 80035fa: 009b lsls r3, r3, #2 - 80035fc: 77fb strb r3, [r7, #31] - 80035fe: e035 b.n 800366c + 800358c: 7ffb ldrb r3, [r7, #31] + 800358e: 009b lsls r3, r3, #2 + 8003590: 77fb strb r3, [r7, #31] + 8003592: e035 b.n 8003600 } if (c >= 0x80) { /* Extended character? */ - 8003600: f997 301e ldrsb.w r3, [r7, #30] - 8003604: 2b00 cmp r3, #0 - 8003606: da08 bge.n 800361a + 8003594: f997 301e ldrsb.w r3, [r7, #30] + 8003598: 2b00 cmp r3, #0 + 800359a: da08 bge.n 80035ae b |= 3; /* Eliminate NT flag */ - 8003608: 7ffb ldrb r3, [r7, #31] - 800360a: f043 0303 orr.w r3, r3, #3 - 800360e: 77fb strb r3, [r7, #31] + 800359c: 7ffb ldrb r3, [r7, #31] + 800359e: f043 0303 orr.w r3, r3, #3 + 80035a2: 77fb strb r3, [r7, #31] #ifdef _EXCVT c = ExCvt[c - 0x80]; /* To upper extended characters (SBCS cfg) */ - 8003610: 7fbb ldrb r3, [r7, #30] - 8003612: 3b80 subs r3, #128 ; 0x80 - 8003614: 4a32 ldr r2, [pc, #200] ; (80036e0 ) - 8003616: 5cd3 ldrb r3, [r2, r3] - 8003618: 77bb strb r3, [r7, #30] + 80035a4: 7fbb ldrb r3, [r7, #30] + 80035a6: 3b80 subs r3, #128 ; 0x80 + 80035a8: 4a32 ldr r2, [pc, #200] ; (8003674 ) + 80035aa: 5cd3 ldrb r3, [r2, r3] + 80035ac: 77bb strb r3, [r7, #30] if (!IsDBCS2(d) || i >= ni - 1) /* Reject invalid DBC */ return FR_INVALID_NAME; sfn[i++] = c; sfn[i++] = d; } else { /* SBC */ if (chk_chr("\"*+,:;<=>\?[]|\x7F", c)) /* Reject illegal chrs for SFN */ - 800361a: 7fbb ldrb r3, [r7, #30] - 800361c: 4619 mov r1, r3 - 800361e: 4831 ldr r0, [pc, #196] ; (80036e4 ) - 8003620: f7fe ffdc bl 80025dc - 8003624: 4603 mov r3, r0 - 8003626: 2b00 cmp r3, #0 - 8003628: d001 beq.n 800362e + 80035ae: 7fbb ldrb r3, [r7, #30] + 80035b0: 4619 mov r1, r3 + 80035b2: 4831 ldr r0, [pc, #196] ; (8003678 ) + 80035b4: f7fe ffdc bl 8002570 + 80035b8: 4603 mov r3, r0 + 80035ba: 2b00 cmp r3, #0 + 80035bc: d001 beq.n 80035c2 return FR_INVALID_NAME; - 800362a: 2306 movs r3, #6 - 800362c: e054 b.n 80036d8 + 80035be: 2306 movs r3, #6 + 80035c0: e054 b.n 800366c if (IsUpper(c)) { /* ASCII large capital? */ - 800362e: 7fbb ldrb r3, [r7, #30] - 8003630: 2b40 cmp r3, #64 ; 0x40 - 8003632: d907 bls.n 8003644 - 8003634: 7fbb ldrb r3, [r7, #30] - 8003636: 2b5a cmp r3, #90 ; 0x5a - 8003638: d804 bhi.n 8003644 + 80035c2: 7fbb ldrb r3, [r7, #30] + 80035c4: 2b40 cmp r3, #64 ; 0x40 + 80035c6: d907 bls.n 80035d8 + 80035c8: 7fbb ldrb r3, [r7, #30] + 80035ca: 2b5a cmp r3, #90 ; 0x5a + 80035cc: d804 bhi.n 80035d8 b |= 2; - 800363a: 7ffb ldrb r3, [r7, #31] - 800363c: f043 0302 orr.w r3, r3, #2 - 8003640: 77fb strb r3, [r7, #31] - 8003642: e00c b.n 800365e + 80035ce: 7ffb ldrb r3, [r7, #31] + 80035d0: f043 0302 orr.w r3, r3, #2 + 80035d4: 77fb strb r3, [r7, #31] + 80035d6: e00c b.n 80035f2 } else { if (IsLower(c)) { /* ASCII small capital? */ - 8003644: 7fbb ldrb r3, [r7, #30] - 8003646: 2b60 cmp r3, #96 ; 0x60 - 8003648: d909 bls.n 800365e - 800364a: 7fbb ldrb r3, [r7, #30] - 800364c: 2b7a cmp r3, #122 ; 0x7a - 800364e: d806 bhi.n 800365e + 80035d8: 7fbb ldrb r3, [r7, #30] + 80035da: 2b60 cmp r3, #96 ; 0x60 + 80035dc: d909 bls.n 80035f2 + 80035de: 7fbb ldrb r3, [r7, #30] + 80035e0: 2b7a cmp r3, #122 ; 0x7a + 80035e2: d806 bhi.n 80035f2 b |= 1; c -= 0x20; - 8003650: 7ffb ldrb r3, [r7, #31] - 8003652: f043 0301 orr.w r3, r3, #1 - 8003656: 77fb strb r3, [r7, #31] - 8003658: 7fbb ldrb r3, [r7, #30] - 800365a: 3b20 subs r3, #32 - 800365c: 77bb strb r3, [r7, #30] + 80035e4: 7ffb ldrb r3, [r7, #31] + 80035e6: f043 0301 orr.w r3, r3, #1 + 80035ea: 77fb strb r3, [r7, #31] + 80035ec: 7fbb ldrb r3, [r7, #30] + 80035ee: 3b20 subs r3, #32 + 80035f0: 77bb strb r3, [r7, #30] } } sfn[i++] = c; - 800365e: 693b ldr r3, [r7, #16] - 8003660: 1c5a adds r2, r3, #1 - 8003662: 613a str r2, [r7, #16] - 8003664: 68ba ldr r2, [r7, #8] - 8003666: 4413 add r3, r2 - 8003668: 7fba ldrb r2, [r7, #30] - 800366a: 701a strb r2, [r3, #0] + 80035f2: 693b ldr r3, [r7, #16] + 80035f4: 1c5a adds r2, r3, #1 + 80035f6: 613a str r2, [r7, #16] + 80035f8: 68ba ldr r2, [r7, #8] + 80035fa: 4413 add r3, r2 + 80035fc: 7fba ldrb r2, [r7, #30] + 80035fe: 701a strb r2, [r3, #0] c = (BYTE)p[si++]; - 800366c: e7a1 b.n 80035b2 + 8003600: e7a1 b.n 8003546 } } *path = &p[si]; /* Return pointer to the next segment */ - 800366e: 68fa ldr r2, [r7, #12] - 8003670: 697b ldr r3, [r7, #20] - 8003672: 441a add r2, r3 - 8003674: 683b ldr r3, [r7, #0] - 8003676: 601a str r2, [r3, #0] + 8003602: 68fa ldr r2, [r7, #12] + 8003604: 697b ldr r3, [r7, #20] + 8003606: 441a add r2, r3 + 8003608: 683b ldr r3, [r7, #0] + 800360a: 601a str r2, [r3, #0] c = (c <= ' ') ? NS_LAST : 0; /* Set last segment flag if end of path */ - 8003678: 7fbb ldrb r3, [r7, #30] - 800367a: 2b20 cmp r3, #32 - 800367c: d801 bhi.n 8003682 - 800367e: 2304 movs r3, #4 - 8003680: e000 b.n 8003684 - 8003682: 2300 movs r3, #0 - 8003684: 77bb strb r3, [r7, #30] + 800360c: 7fbb ldrb r3, [r7, #30] + 800360e: 2b20 cmp r3, #32 + 8003610: d801 bhi.n 8003616 + 8003612: 2304 movs r3, #4 + 8003614: e000 b.n 8003618 + 8003616: 2300 movs r3, #0 + 8003618: 77bb strb r3, [r7, #30] if (!i) return FR_INVALID_NAME; /* Reject nul string */ - 8003686: 693b ldr r3, [r7, #16] - 8003688: 2b00 cmp r3, #0 - 800368a: d101 bne.n 8003690 - 800368c: 2306 movs r3, #6 - 800368e: e023 b.n 80036d8 + 800361a: 693b ldr r3, [r7, #16] + 800361c: 2b00 cmp r3, #0 + 800361e: d101 bne.n 8003624 + 8003620: 2306 movs r3, #6 + 8003622: e023 b.n 800366c if (sfn[0] == DDEM) sfn[0] = RDDEM; /* When first character collides with DDEM, replace it with RDDEM */ - 8003690: 68bb ldr r3, [r7, #8] - 8003692: 781b ldrb r3, [r3, #0] - 8003694: 2be5 cmp r3, #229 ; 0xe5 - 8003696: d102 bne.n 800369e - 8003698: 68bb ldr r3, [r7, #8] - 800369a: 2205 movs r2, #5 - 800369c: 701a strb r2, [r3, #0] + 8003624: 68bb ldr r3, [r7, #8] + 8003626: 781b ldrb r3, [r3, #0] + 8003628: 2be5 cmp r3, #229 ; 0xe5 + 800362a: d102 bne.n 8003632 + 800362c: 68bb ldr r3, [r7, #8] + 800362e: 2205 movs r2, #5 + 8003630: 701a strb r2, [r3, #0] if (ni == 8) b <<= 2; - 800369e: 69bb ldr r3, [r7, #24] - 80036a0: 2b08 cmp r3, #8 - 80036a2: d102 bne.n 80036aa - 80036a4: 7ffb ldrb r3, [r7, #31] - 80036a6: 009b lsls r3, r3, #2 - 80036a8: 77fb strb r3, [r7, #31] + 8003632: 69bb ldr r3, [r7, #24] + 8003634: 2b08 cmp r3, #8 + 8003636: d102 bne.n 800363e + 8003638: 7ffb ldrb r3, [r7, #31] + 800363a: 009b lsls r3, r3, #2 + 800363c: 77fb strb r3, [r7, #31] if ((b & 0x03) == 0x01) c |= NS_EXT; /* NT flag (Name extension has only small capital) */ - 80036aa: 7ffb ldrb r3, [r7, #31] - 80036ac: f003 0303 and.w r3, r3, #3 - 80036b0: 2b01 cmp r3, #1 - 80036b2: d103 bne.n 80036bc - 80036b4: 7fbb ldrb r3, [r7, #30] - 80036b6: f043 0310 orr.w r3, r3, #16 - 80036ba: 77bb strb r3, [r7, #30] + 800363e: 7ffb ldrb r3, [r7, #31] + 8003640: f003 0303 and.w r3, r3, #3 + 8003644: 2b01 cmp r3, #1 + 8003646: d103 bne.n 8003650 + 8003648: 7fbb ldrb r3, [r7, #30] + 800364a: f043 0310 orr.w r3, r3, #16 + 800364e: 77bb strb r3, [r7, #30] if ((b & 0x0C) == 0x04) c |= NS_BODY; /* NT flag (Name body has only small capital) */ - 80036bc: 7ffb ldrb r3, [r7, #31] - 80036be: f003 030c and.w r3, r3, #12 - 80036c2: 2b04 cmp r3, #4 - 80036c4: d103 bne.n 80036ce - 80036c6: 7fbb ldrb r3, [r7, #30] - 80036c8: f043 0308 orr.w r3, r3, #8 - 80036cc: 77bb strb r3, [r7, #30] + 8003650: 7ffb ldrb r3, [r7, #31] + 8003652: f003 030c and.w r3, r3, #12 + 8003656: 2b04 cmp r3, #4 + 8003658: d103 bne.n 8003662 + 800365a: 7fbb ldrb r3, [r7, #30] + 800365c: f043 0308 orr.w r3, r3, #8 + 8003660: 77bb strb r3, [r7, #30] sfn[NSFLAG] = c; /* Store NT flag, File name is created */ - 80036ce: 68bb ldr r3, [r7, #8] - 80036d0: 330b adds r3, #11 - 80036d2: 7fba ldrb r2, [r7, #30] - 80036d4: 701a strb r2, [r3, #0] + 8003662: 68bb ldr r3, [r7, #8] + 8003664: 330b adds r3, #11 + 8003666: 7fba ldrb r2, [r7, #30] + 8003668: 701a strb r2, [r3, #0] return FR_OK; - 80036d6: 2300 movs r3, #0 + 800366a: 2300 movs r3, #0 #endif } - 80036d8: 4618 mov r0, r3 - 80036da: 3720 adds r7, #32 - 80036dc: 46bd mov sp, r7 - 80036de: bd80 pop {r7, pc} - 80036e0: 080068cc .word 0x080068cc - 80036e4: 08006858 .word 0x08006858 + 800366c: 4618 mov r0, r3 + 800366e: 3720 adds r7, #32 + 8003670: 46bd mov sp, r7 + 8003672: bd80 pop {r7, pc} + 8003674: 08005fc8 .word 0x08005fc8 + 8003678: 08005f5c .word 0x08005f5c -080036e8 : +0800367c : static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */ DIR* dp, /* Directory object to return last directory and found object */ const TCHAR* path /* Full-path string to find a file or directory */ ) { - 80036e8: b580 push {r7, lr} - 80036ea: b084 sub sp, #16 - 80036ec: af00 add r7, sp, #0 - 80036ee: 6078 str r0, [r7, #4] - 80036f0: 6039 str r1, [r7, #0] + 800367c: b580 push {r7, lr} + 800367e: b084 sub sp, #16 + 8003680: af00 add r7, sp, #0 + 8003682: 6078 str r0, [r7, #4] + 8003684: 6039 str r1, [r7, #0] path++; dp->sclust = 0; /* Strip it and start from the root directory */ } else { /* No heading separator */ dp->sclust = dp->fs->cdir; /* Start from the current directory */ } #else if (*path == '/' || *path == '\\') /* Strip heading separator if exist */ - 80036f2: 683b ldr r3, [r7, #0] - 80036f4: 781b ldrb r3, [r3, #0] - 80036f6: 2b2f cmp r3, #47 ; 0x2f - 80036f8: d003 beq.n 8003702 - 80036fa: 683b ldr r3, [r7, #0] - 80036fc: 781b ldrb r3, [r3, #0] - 80036fe: 2b5c cmp r3, #92 ; 0x5c - 8003700: d102 bne.n 8003708 + 8003686: 683b ldr r3, [r7, #0] + 8003688: 781b ldrb r3, [r3, #0] + 800368a: 2b2f cmp r3, #47 ; 0x2f + 800368c: d003 beq.n 8003696 + 800368e: 683b ldr r3, [r7, #0] + 8003690: 781b ldrb r3, [r3, #0] + 8003692: 2b5c cmp r3, #92 ; 0x5c + 8003694: d102 bne.n 800369c path++; - 8003702: 683b ldr r3, [r7, #0] - 8003704: 3301 adds r3, #1 - 8003706: 603b str r3, [r7, #0] + 8003696: 683b ldr r3, [r7, #0] + 8003698: 3301 adds r3, #1 + 800369a: 603b str r3, [r7, #0] dp->sclust = 0; /* Always start from the root directory */ - 8003708: 687b ldr r3, [r7, #4] - 800370a: 2200 movs r2, #0 - 800370c: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 800369c: 687b ldr r3, [r7, #4] + 800369e: 2200 movs r2, #0 + 80036a0: f8c3 2208 str.w r2, [r3, #520] ; 0x208 #endif if ((UINT)*path < ' ') { /* Null path name is the origin directory itself */ - 8003710: 683b ldr r3, [r7, #0] - 8003712: 781b ldrb r3, [r3, #0] - 8003714: 2b1f cmp r3, #31 - 8003716: d80a bhi.n 800372e + 80036a4: 683b ldr r3, [r7, #0] + 80036a6: 781b ldrb r3, [r3, #0] + 80036a8: 2b1f cmp r3, #31 + 80036aa: d80a bhi.n 80036c2 res = dir_sdi(dp, 0); - 8003718: 2100 movs r1, #0 - 800371a: 6878 ldr r0, [r7, #4] - 800371c: f7ff fc73 bl 8003006 - 8003720: 4603 mov r3, r0 - 8003722: 73fb strb r3, [r7, #15] + 80036ac: 2100 movs r1, #0 + 80036ae: 6878 ldr r0, [r7, #4] + 80036b0: f7ff fc73 bl 8002f9a + 80036b4: 4603 mov r3, r0 + 80036b6: 73fb strb r3, [r7, #15] dp->dir = 0; - 8003724: 687b ldr r3, [r7, #4] - 8003726: 2200 movs r2, #0 - 8003728: f8c3 2214 str.w r2, [r3, #532] ; 0x214 - 800372c: e045 b.n 80037ba + 80036b8: 687b ldr r3, [r7, #4] + 80036ba: 2200 movs r2, #0 + 80036bc: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 80036c0: e045 b.n 800374e } else { /* Follow path */ for (;;) { res = create_name(dp, &path); /* Get a segment name of the path */ - 800372e: 463b mov r3, r7 - 8003730: 4619 mov r1, r3 - 8003732: 6878 ldr r0, [r7, #4] - 8003734: f7ff ff18 bl 8003568 - 8003738: 4603 mov r3, r0 - 800373a: 73fb strb r3, [r7, #15] + 80036c2: 463b mov r3, r7 + 80036c4: 4619 mov r1, r3 + 80036c6: 6878 ldr r0, [r7, #4] + 80036c8: f7ff ff18 bl 80034fc + 80036cc: 4603 mov r3, r0 + 80036ce: 73fb strb r3, [r7, #15] if (res != FR_OK) break; - 800373c: 7bfb ldrb r3, [r7, #15] - 800373e: 2b00 cmp r3, #0 - 8003740: d136 bne.n 80037b0 + 80036d0: 7bfb ldrb r3, [r7, #15] + 80036d2: 2b00 cmp r3, #0 + 80036d4: d136 bne.n 8003744 res = dir_find(dp); /* Find an object with the sagment name */ - 8003742: 6878 ldr r0, [r7, #4] - 8003744: f7ff fe87 bl 8003456 - 8003748: 4603 mov r3, r0 - 800374a: 73fb strb r3, [r7, #15] + 80036d6: 6878 ldr r0, [r7, #4] + 80036d8: f7ff fe87 bl 80033ea + 80036dc: 4603 mov r3, r0 + 80036de: 73fb strb r3, [r7, #15] ns = dp->fn[NSFLAG]; - 800374c: 687b ldr r3, [r7, #4] - 800374e: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 8003752: 7adb ldrb r3, [r3, #11] - 8003754: 73bb strb r3, [r7, #14] + 80036e0: 687b ldr r3, [r7, #4] + 80036e2: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 80036e6: 7adb ldrb r3, [r3, #11] + 80036e8: 73bb strb r3, [r7, #14] if (res != FR_OK) { /* Failed to find the object */ - 8003756: 7bfb ldrb r3, [r7, #15] - 8003758: 2b00 cmp r3, #0 - 800375a: d00a beq.n 8003772 + 80036ea: 7bfb ldrb r3, [r7, #15] + 80036ec: 2b00 cmp r3, #0 + 80036ee: d00a beq.n 8003706 if (res == FR_NO_FILE) { /* Object is not found */ - 800375c: 7bfb ldrb r3, [r7, #15] - 800375e: 2b04 cmp r3, #4 - 8003760: d128 bne.n 80037b4 + 80036f0: 7bfb ldrb r3, [r7, #15] + 80036f2: 2b04 cmp r3, #4 + 80036f4: d128 bne.n 8003748 if (_FS_RPATH && (ns & NS_DOT)) { /* If dot entry is not exist, */ dp->sclust = 0; dp->dir = 0; /* it is the root directory and stay there */ if (!(ns & NS_LAST)) continue; /* Continue to follow if not last segment */ res = FR_OK; /* Ended at the root directroy. Function completed. */ } else { /* Could not find the object */ if (!(ns & NS_LAST)) res = FR_NO_PATH; /* Adjust error code if not last segment */ - 8003762: 7bbb ldrb r3, [r7, #14] - 8003764: f003 0304 and.w r3, r3, #4 - 8003768: 2b00 cmp r3, #0 - 800376a: d123 bne.n 80037b4 - 800376c: 2305 movs r3, #5 - 800376e: 73fb strb r3, [r7, #15] + 80036f6: 7bbb ldrb r3, [r7, #14] + 80036f8: f003 0304 and.w r3, r3, #4 + 80036fc: 2b00 cmp r3, #0 + 80036fe: d123 bne.n 8003748 + 8003700: 2305 movs r3, #5 + 8003702: 73fb strb r3, [r7, #15] } } break; - 8003770: e020 b.n 80037b4 + 8003704: e020 b.n 8003748 } if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - 8003772: 7bbb ldrb r3, [r7, #14] - 8003774: f003 0304 and.w r3, r3, #4 - 8003778: 2b00 cmp r3, #0 - 800377a: d11d bne.n 80037b8 + 8003706: 7bbb ldrb r3, [r7, #14] + 8003708: f003 0304 and.w r3, r3, #4 + 800370c: 2b00 cmp r3, #0 + 800370e: d11d bne.n 800374c dir = dp->dir; /* Follow the sub-directory */ - 800377c: 687b ldr r3, [r7, #4] - 800377e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003782: 60bb str r3, [r7, #8] + 8003710: 687b ldr r3, [r7, #4] + 8003712: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003716: 60bb str r3, [r7, #8] if (!(dir[DIR_Attr] & AM_DIR)) { /* It is not a sub-directory and cannot follow */ - 8003784: 68bb ldr r3, [r7, #8] - 8003786: 330b adds r3, #11 - 8003788: 781b ldrb r3, [r3, #0] - 800378a: f003 0310 and.w r3, r3, #16 - 800378e: 2b00 cmp r3, #0 - 8003790: d102 bne.n 8003798 + 8003718: 68bb ldr r3, [r7, #8] + 800371a: 330b adds r3, #11 + 800371c: 781b ldrb r3, [r3, #0] + 800371e: f003 0310 and.w r3, r3, #16 + 8003722: 2b00 cmp r3, #0 + 8003724: d102 bne.n 800372c res = FR_NO_PATH; break; - 8003792: 2305 movs r3, #5 - 8003794: 73fb strb r3, [r7, #15] - 8003796: e010 b.n 80037ba + 8003726: 2305 movs r3, #5 + 8003728: 73fb strb r3, [r7, #15] + 800372a: e010 b.n 800374e } dp->sclust = ld_clust(dp->fs, dir); - 8003798: 687b ldr r3, [r7, #4] - 800379a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800379e: 68b9 ldr r1, [r7, #8] - 80037a0: 4618 mov r0, r3 - 80037a2: f7ff fe05 bl 80033b0 - 80037a6: 4602 mov r2, r0 - 80037a8: 687b ldr r3, [r7, #4] - 80037aa: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 800372c: 687b ldr r3, [r7, #4] + 800372e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003732: 68b9 ldr r1, [r7, #8] + 8003734: 4618 mov r0, r3 + 8003736: f7ff fe05 bl 8003344 + 800373a: 4602 mov r2, r0 + 800373c: 687b ldr r3, [r7, #4] + 800373e: f8c3 2208 str.w r2, [r3, #520] ; 0x208 res = create_name(dp, &path); /* Get a segment name of the path */ - 80037ae: e7be b.n 800372e + 8003742: e7be b.n 80036c2 if (res != FR_OK) break; - 80037b0: bf00 nop - 80037b2: e002 b.n 80037ba + 8003744: bf00 nop + 8003746: e002 b.n 800374e break; - 80037b4: bf00 nop - 80037b6: e000 b.n 80037ba + 8003748: bf00 nop + 800374a: e000 b.n 800374e if (ns & NS_LAST) break; /* Last segment matched. Function completed. */ - 80037b8: bf00 nop + 800374c: bf00 nop } } return res; - 80037ba: 7bfb ldrb r3, [r7, #15] + 800374e: 7bfb ldrb r3, [r7, #15] } - 80037bc: 4618 mov r0, r3 - 80037be: 3710 adds r7, #16 - 80037c0: 46bd mov sp, r7 - 80037c2: bd80 pop {r7, pc} + 8003750: 4618 mov r0, r3 + 8003752: 3710 adds r7, #16 + 8003754: 46bd mov sp, r7 + 8003756: bd80 pop {r7, pc} -080037c4 : +08003758 : static int get_ldnumber ( /* Returns logical drive number (-1:invalid drive) */ const TCHAR** path /* Pointer to pointer to the path name */ ) { - 80037c4: b480 push {r7} - 80037c6: b087 sub sp, #28 - 80037c8: af00 add r7, sp, #0 - 80037ca: 6078 str r0, [r7, #4] + 8003758: b480 push {r7} + 800375a: b087 sub sp, #28 + 800375c: af00 add r7, sp, #0 + 800375e: 6078 str r0, [r7, #4] const TCHAR *tp, *tt; UINT i; int vol = -1; - 80037cc: f04f 33ff mov.w r3, #4294967295 - 80037d0: 613b str r3, [r7, #16] + 8003760: f04f 33ff mov.w r3, #4294967295 + 8003764: 613b str r3, [r7, #16] char c; TCHAR tc; #endif if (*path) { /* If the pointer is not a null */ - 80037d2: 687b ldr r3, [r7, #4] - 80037d4: 681b ldr r3, [r3, #0] - 80037d6: 2b00 cmp r3, #0 - 80037d8: d031 beq.n 800383e + 8003766: 687b ldr r3, [r7, #4] + 8003768: 681b ldr r3, [r3, #0] + 800376a: 2b00 cmp r3, #0 + 800376c: d031 beq.n 80037d2 for (tt = *path; (UINT)*tt >= (_USE_LFN ? ' ' : '!') && *tt != ':'; tt++) ; /* Find ':' in the path */ - 80037da: 687b ldr r3, [r7, #4] - 80037dc: 681b ldr r3, [r3, #0] - 80037de: 617b str r3, [r7, #20] - 80037e0: e002 b.n 80037e8 - 80037e2: 697b ldr r3, [r7, #20] - 80037e4: 3301 adds r3, #1 - 80037e6: 617b str r3, [r7, #20] - 80037e8: 697b ldr r3, [r7, #20] - 80037ea: 781b ldrb r3, [r3, #0] - 80037ec: 2b20 cmp r3, #32 - 80037ee: d903 bls.n 80037f8 - 80037f0: 697b ldr r3, [r7, #20] - 80037f2: 781b ldrb r3, [r3, #0] - 80037f4: 2b3a cmp r3, #58 ; 0x3a - 80037f6: d1f4 bne.n 80037e2 + 800376e: 687b ldr r3, [r7, #4] + 8003770: 681b ldr r3, [r3, #0] + 8003772: 617b str r3, [r7, #20] + 8003774: e002 b.n 800377c + 8003776: 697b ldr r3, [r7, #20] + 8003778: 3301 adds r3, #1 + 800377a: 617b str r3, [r7, #20] + 800377c: 697b ldr r3, [r7, #20] + 800377e: 781b ldrb r3, [r3, #0] + 8003780: 2b20 cmp r3, #32 + 8003782: d903 bls.n 800378c + 8003784: 697b ldr r3, [r7, #20] + 8003786: 781b ldrb r3, [r3, #0] + 8003788: 2b3a cmp r3, #58 ; 0x3a + 800378a: d1f4 bne.n 8003776 if (*tt == ':') { /* If a ':' is exist in the path name */ - 80037f8: 697b ldr r3, [r7, #20] - 80037fa: 781b ldrb r3, [r3, #0] - 80037fc: 2b3a cmp r3, #58 ; 0x3a - 80037fe: d11c bne.n 800383a + 800378c: 697b ldr r3, [r7, #20] + 800378e: 781b ldrb r3, [r3, #0] + 8003790: 2b3a cmp r3, #58 ; 0x3a + 8003792: d11c bne.n 80037ce tp = *path; - 8003800: 687b ldr r3, [r7, #4] - 8003802: 681b ldr r3, [r3, #0] - 8003804: 60fb str r3, [r7, #12] + 8003794: 687b ldr r3, [r7, #4] + 8003796: 681b ldr r3, [r3, #0] + 8003798: 60fb str r3, [r7, #12] i = *tp++ - '0'; - 8003806: 68fb ldr r3, [r7, #12] - 8003808: 1c5a adds r2, r3, #1 - 800380a: 60fa str r2, [r7, #12] - 800380c: 781b ldrb r3, [r3, #0] - 800380e: 3b30 subs r3, #48 ; 0x30 - 8003810: 60bb str r3, [r7, #8] + 800379a: 68fb ldr r3, [r7, #12] + 800379c: 1c5a adds r2, r3, #1 + 800379e: 60fa str r2, [r7, #12] + 80037a0: 781b ldrb r3, [r3, #0] + 80037a2: 3b30 subs r3, #48 ; 0x30 + 80037a4: 60bb str r3, [r7, #8] if (i < 10 && tp == tt) { /* Is there a numeric drive id? */ - 8003812: 68bb ldr r3, [r7, #8] - 8003814: 2b09 cmp r3, #9 - 8003816: d80e bhi.n 8003836 - 8003818: 68fa ldr r2, [r7, #12] - 800381a: 697b ldr r3, [r7, #20] - 800381c: 429a cmp r2, r3 - 800381e: d10a bne.n 8003836 + 80037a6: 68bb ldr r3, [r7, #8] + 80037a8: 2b09 cmp r3, #9 + 80037aa: d80e bhi.n 80037ca + 80037ac: 68fa ldr r2, [r7, #12] + 80037ae: 697b ldr r3, [r7, #20] + 80037b0: 429a cmp r2, r3 + 80037b2: d10a bne.n 80037ca if (i < _VOLUMES) { /* If a drive id is found, get the value and strip it */ - 8003820: 68bb ldr r3, [r7, #8] - 8003822: 2b00 cmp r3, #0 - 8003824: d107 bne.n 8003836 + 80037b4: 68bb ldr r3, [r7, #8] + 80037b6: 2b00 cmp r3, #0 + 80037b8: d107 bne.n 80037ca vol = (int)i; - 8003826: 68bb ldr r3, [r7, #8] - 8003828: 613b str r3, [r7, #16] + 80037ba: 68bb ldr r3, [r7, #8] + 80037bc: 613b str r3, [r7, #16] *path = ++tt; - 800382a: 697b ldr r3, [r7, #20] - 800382c: 3301 adds r3, #1 - 800382e: 617b str r3, [r7, #20] - 8003830: 687b ldr r3, [r7, #4] - 8003832: 697a ldr r2, [r7, #20] - 8003834: 601a str r2, [r3, #0] + 80037be: 697b ldr r3, [r7, #20] + 80037c0: 3301 adds r3, #1 + 80037c2: 617b str r3, [r7, #20] + 80037c4: 687b ldr r3, [r7, #4] + 80037c6: 697a ldr r2, [r7, #20] + 80037c8: 601a str r2, [r3, #0] vol = (int)i; *path = tt; } } #endif return vol; - 8003836: 693b ldr r3, [r7, #16] - 8003838: e002 b.n 8003840 + 80037ca: 693b ldr r3, [r7, #16] + 80037cc: e002 b.n 80037d4 } #if _FS_RPATH && _VOLUMES >= 2 vol = CurrVol; /* Current drive */ #else vol = 0; /* Drive 0 */ - 800383a: 2300 movs r3, #0 - 800383c: 613b str r3, [r7, #16] + 80037ce: 2300 movs r3, #0 + 80037d0: 613b str r3, [r7, #16] #endif } return vol; - 800383e: 693b ldr r3, [r7, #16] + 80037d2: 693b ldr r3, [r7, #16] } - 8003840: 4618 mov r0, r3 - 8003842: 371c adds r7, #28 - 8003844: 46bd mov sp, r7 - 8003846: bc80 pop {r7} - 8003848: 4770 bx lr + 80037d4: 4618 mov r0, r3 + 80037d6: 371c adds r7, #28 + 80037d8: 46bd mov sp, r7 + 80037da: bc80 pop {r7} + 80037dc: 4770 bx lr ... -0800384c : +080037e0 : static BYTE check_fs ( /* 0:FAT boor sector, 1:Valid boor sector but not FAT, 2:Not a boot sector, 3:Disk error */ FATFS* fs, /* File system object */ DWORD sect /* Sector# (lba) to check if it is an FAT boot record or not */ ) { - 800384c: b580 push {r7, lr} - 800384e: b082 sub sp, #8 - 8003850: af00 add r7, sp, #0 - 8003852: 6078 str r0, [r7, #4] - 8003854: 6039 str r1, [r7, #0] + 80037e0: b580 push {r7, lr} + 80037e2: b082 sub sp, #8 + 80037e4: af00 add r7, sp, #0 + 80037e6: 6078 str r0, [r7, #4] + 80037e8: 6039 str r1, [r7, #0] fs->wflag = 0; fs->winsect = 0xFFFFFFFF; /* Invaidate window */ - 8003856: 687b ldr r3, [r7, #4] - 8003858: 2200 movs r2, #0 - 800385a: f883 2204 strb.w r2, [r3, #516] ; 0x204 - 800385e: 687b ldr r3, [r7, #4] - 8003860: f04f 32ff mov.w r2, #4294967295 - 8003864: f8c3 222c str.w r2, [r3, #556] ; 0x22c + 80037ea: 687b ldr r3, [r7, #4] + 80037ec: 2200 movs r2, #0 + 80037ee: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 80037f2: 687b ldr r3, [r7, #4] + 80037f4: f04f 32ff mov.w r2, #4294967295 + 80037f8: f8c3 222c str.w r2, [r3, #556] ; 0x22c if (move_window(fs, sect) != FR_OK) /* Load boot record */ - 8003868: 6839 ldr r1, [r7, #0] - 800386a: 6878 ldr r0, [r7, #4] - 800386c: f7ff f889 bl 8002982 - 8003870: 4603 mov r3, r0 - 8003872: 2b00 cmp r3, #0 - 8003874: d001 beq.n 800387a + 80037fc: 6839 ldr r1, [r7, #0] + 80037fe: 6878 ldr r0, [r7, #4] + 8003800: f7ff f889 bl 8002916 + 8003804: 4603 mov r3, r0 + 8003806: 2b00 cmp r3, #0 + 8003808: d001 beq.n 800380e return 3; - 8003876: 2303 movs r3, #3 - 8003878: e04a b.n 8003910 + 800380a: 2303 movs r3, #3 + 800380c: e04a b.n 80038a4 if (LD_WORD(&fs->win.d8[BS_55AA]) != 0xAA55) /* Check boot record signature (always placed at offset 510 even if the sector size is >512) */ - 800387a: 687b ldr r3, [r7, #4] - 800387c: f503 73ff add.w r3, r3, #510 ; 0x1fe - 8003880: 3301 adds r3, #1 - 8003882: 781b ldrb r3, [r3, #0] - 8003884: 021b lsls r3, r3, #8 - 8003886: b21a sxth r2, r3 - 8003888: 687b ldr r3, [r7, #4] - 800388a: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe - 800388e: b21b sxth r3, r3 - 8003890: 4313 orrs r3, r2 - 8003892: b21b sxth r3, r3 - 8003894: 4a20 ldr r2, [pc, #128] ; (8003918 ) - 8003896: 4293 cmp r3, r2 - 8003898: d001 beq.n 800389e + 800380e: 687b ldr r3, [r7, #4] + 8003810: f503 73ff add.w r3, r3, #510 ; 0x1fe + 8003814: 3301 adds r3, #1 + 8003816: 781b ldrb r3, [r3, #0] + 8003818: 021b lsls r3, r3, #8 + 800381a: b21a sxth r2, r3 + 800381c: 687b ldr r3, [r7, #4] + 800381e: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe + 8003822: b21b sxth r3, r3 + 8003824: 4313 orrs r3, r2 + 8003826: b21b sxth r3, r3 + 8003828: 4a20 ldr r2, [pc, #128] ; (80038ac ) + 800382a: 4293 cmp r3, r2 + 800382c: d001 beq.n 8003832 return 2; - 800389a: 2302 movs r3, #2 - 800389c: e038 b.n 8003910 + 800382e: 2302 movs r3, #2 + 8003830: e038 b.n 80038a4 if ((LD_DWORD(&fs->win.d8[BS_FilSysType]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - 800389e: 687b ldr r3, [r7, #4] - 80038a0: 3336 adds r3, #54 ; 0x36 - 80038a2: 3303 adds r3, #3 - 80038a4: 781b ldrb r3, [r3, #0] - 80038a6: 061a lsls r2, r3, #24 - 80038a8: 687b ldr r3, [r7, #4] - 80038aa: 3336 adds r3, #54 ; 0x36 - 80038ac: 3302 adds r3, #2 - 80038ae: 781b ldrb r3, [r3, #0] - 80038b0: 041b lsls r3, r3, #16 - 80038b2: 4313 orrs r3, r2 - 80038b4: 687a ldr r2, [r7, #4] - 80038b6: 3236 adds r2, #54 ; 0x36 - 80038b8: 3201 adds r2, #1 - 80038ba: 7812 ldrb r2, [r2, #0] - 80038bc: 0212 lsls r2, r2, #8 - 80038be: 4313 orrs r3, r2 - 80038c0: 687a ldr r2, [r7, #4] - 80038c2: f892 2036 ldrb.w r2, [r2, #54] ; 0x36 - 80038c6: 4313 orrs r3, r2 - 80038c8: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 - 80038cc: 4a13 ldr r2, [pc, #76] ; (800391c ) - 80038ce: 4293 cmp r3, r2 - 80038d0: d101 bne.n 80038d6 + 8003832: 687b ldr r3, [r7, #4] + 8003834: 3336 adds r3, #54 ; 0x36 + 8003836: 3303 adds r3, #3 + 8003838: 781b ldrb r3, [r3, #0] + 800383a: 061a lsls r2, r3, #24 + 800383c: 687b ldr r3, [r7, #4] + 800383e: 3336 adds r3, #54 ; 0x36 + 8003840: 3302 adds r3, #2 + 8003842: 781b ldrb r3, [r3, #0] + 8003844: 041b lsls r3, r3, #16 + 8003846: 4313 orrs r3, r2 + 8003848: 687a ldr r2, [r7, #4] + 800384a: 3236 adds r2, #54 ; 0x36 + 800384c: 3201 adds r2, #1 + 800384e: 7812 ldrb r2, [r2, #0] + 8003850: 0212 lsls r2, r2, #8 + 8003852: 4313 orrs r3, r2 + 8003854: 687a ldr r2, [r7, #4] + 8003856: f892 2036 ldrb.w r2, [r2, #54] ; 0x36 + 800385a: 4313 orrs r3, r2 + 800385c: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 + 8003860: 4a13 ldr r2, [pc, #76] ; (80038b0 ) + 8003862: 4293 cmp r3, r2 + 8003864: d101 bne.n 800386a return 0; - 80038d2: 2300 movs r3, #0 - 80038d4: e01c b.n 8003910 + 8003866: 2300 movs r3, #0 + 8003868: e01c b.n 80038a4 if ((LD_DWORD(&fs->win.d8[BS_FilSysType32]) & 0xFFFFFF) == 0x544146) /* Check "FAT" string */ - 80038d6: 687b ldr r3, [r7, #4] - 80038d8: 3352 adds r3, #82 ; 0x52 - 80038da: 3303 adds r3, #3 - 80038dc: 781b ldrb r3, [r3, #0] - 80038de: 061a lsls r2, r3, #24 - 80038e0: 687b ldr r3, [r7, #4] - 80038e2: 3352 adds r3, #82 ; 0x52 - 80038e4: 3302 adds r3, #2 - 80038e6: 781b ldrb r3, [r3, #0] - 80038e8: 041b lsls r3, r3, #16 - 80038ea: 4313 orrs r3, r2 - 80038ec: 687a ldr r2, [r7, #4] - 80038ee: 3252 adds r2, #82 ; 0x52 - 80038f0: 3201 adds r2, #1 - 80038f2: 7812 ldrb r2, [r2, #0] - 80038f4: 0212 lsls r2, r2, #8 - 80038f6: 4313 orrs r3, r2 - 80038f8: 687a ldr r2, [r7, #4] - 80038fa: f892 2052 ldrb.w r2, [r2, #82] ; 0x52 - 80038fe: 4313 orrs r3, r2 - 8003900: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 - 8003904: 4a05 ldr r2, [pc, #20] ; (800391c ) - 8003906: 4293 cmp r3, r2 - 8003908: d101 bne.n 800390e + 800386a: 687b ldr r3, [r7, #4] + 800386c: 3352 adds r3, #82 ; 0x52 + 800386e: 3303 adds r3, #3 + 8003870: 781b ldrb r3, [r3, #0] + 8003872: 061a lsls r2, r3, #24 + 8003874: 687b ldr r3, [r7, #4] + 8003876: 3352 adds r3, #82 ; 0x52 + 8003878: 3302 adds r3, #2 + 800387a: 781b ldrb r3, [r3, #0] + 800387c: 041b lsls r3, r3, #16 + 800387e: 4313 orrs r3, r2 + 8003880: 687a ldr r2, [r7, #4] + 8003882: 3252 adds r2, #82 ; 0x52 + 8003884: 3201 adds r2, #1 + 8003886: 7812 ldrb r2, [r2, #0] + 8003888: 0212 lsls r2, r2, #8 + 800388a: 4313 orrs r3, r2 + 800388c: 687a ldr r2, [r7, #4] + 800388e: f892 2052 ldrb.w r2, [r2, #82] ; 0x52 + 8003892: 4313 orrs r3, r2 + 8003894: f023 437f bic.w r3, r3, #4278190080 ; 0xff000000 + 8003898: 4a05 ldr r2, [pc, #20] ; (80038b0 ) + 800389a: 4293 cmp r3, r2 + 800389c: d101 bne.n 80038a2 return 0; - 800390a: 2300 movs r3, #0 - 800390c: e000 b.n 8003910 + 800389e: 2300 movs r3, #0 + 80038a0: e000 b.n 80038a4 return 1; - 800390e: 2301 movs r3, #1 + 80038a2: 2301 movs r3, #1 } - 8003910: 4618 mov r0, r3 - 8003912: 3708 adds r7, #8 - 8003914: 46bd mov sp, r7 - 8003916: bd80 pop {r7, pc} - 8003918: ffffaa55 .word 0xffffaa55 - 800391c: 00544146 .word 0x00544146 + 80038a4: 4618 mov r0, r3 + 80038a6: 3708 adds r7, #8 + 80038a8: 46bd mov sp, r7 + 80038aa: bd80 pop {r7, pc} + 80038ac: ffffaa55 .word 0xffffaa55 + 80038b0: 00544146 .word 0x00544146 -08003920 : +080038b4 : FRESULT find_volume ( /* FR_OK(0): successful, !=0: any error occurred */ FATFS** rfs, /* Pointer to pointer to the found file system object */ const TCHAR** path, /* Pointer to pointer to the path name (drive number) */ BYTE wmode /* !=0: Check write protection for write access */ ) { - 8003920: b580 push {r7, lr} - 8003922: b096 sub sp, #88 ; 0x58 - 8003924: af00 add r7, sp, #0 - 8003926: 60f8 str r0, [r7, #12] - 8003928: 60b9 str r1, [r7, #8] - 800392a: 4613 mov r3, r2 - 800392c: 71fb strb r3, [r7, #7] + 80038b4: b580 push {r7, lr} + 80038b6: b096 sub sp, #88 ; 0x58 + 80038b8: af00 add r7, sp, #0 + 80038ba: 60f8 str r0, [r7, #12] + 80038bc: 60b9 str r1, [r7, #8] + 80038be: 4613 mov r3, r2 + 80038c0: 71fb strb r3, [r7, #7] FATFS *fs; UINT i; /* Get logical drive number from the path name */ *rfs = 0; - 800392e: 68fb ldr r3, [r7, #12] - 8003930: 2200 movs r2, #0 - 8003932: 601a str r2, [r3, #0] + 80038c2: 68fb ldr r3, [r7, #12] + 80038c4: 2200 movs r2, #0 + 80038c6: 601a str r2, [r3, #0] vol = get_ldnumber(path); - 8003934: 68b8 ldr r0, [r7, #8] - 8003936: f7ff ff45 bl 80037c4 - 800393a: 63f8 str r0, [r7, #60] ; 0x3c + 80038c8: 68b8 ldr r0, [r7, #8] + 80038ca: f7ff ff45 bl 8003758 + 80038ce: 63f8 str r0, [r7, #60] ; 0x3c if (vol < 0) return FR_INVALID_DRIVE; - 800393c: 6bfb ldr r3, [r7, #60] ; 0x3c - 800393e: 2b00 cmp r3, #0 - 8003940: da01 bge.n 8003946 - 8003942: 230b movs r3, #11 - 8003944: e2aa b.n 8003e9c + 80038d0: 6bfb ldr r3, [r7, #60] ; 0x3c + 80038d2: 2b00 cmp r3, #0 + 80038d4: da01 bge.n 80038da + 80038d6: 230b movs r3, #11 + 80038d8: e2aa b.n 8003e30 /* Check if the file system object is valid or not */ fs = FatFs[vol]; /* Get pointer to the file system object */ - 8003946: 4a9e ldr r2, [pc, #632] ; (8003bc0 ) - 8003948: 6bfb ldr r3, [r7, #60] ; 0x3c - 800394a: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 800394e: 63bb str r3, [r7, #56] ; 0x38 + 80038da: 4a9e ldr r2, [pc, #632] ; (8003b54 ) + 80038dc: 6bfb ldr r3, [r7, #60] ; 0x3c + 80038de: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 80038e2: 63bb str r3, [r7, #56] ; 0x38 if (!fs) return FR_NOT_ENABLED; /* Is the file system object available? */ - 8003950: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003952: 2b00 cmp r3, #0 - 8003954: d101 bne.n 800395a - 8003956: 230c movs r3, #12 - 8003958: e2a0 b.n 8003e9c + 80038e4: 6bbb ldr r3, [r7, #56] ; 0x38 + 80038e6: 2b00 cmp r3, #0 + 80038e8: d101 bne.n 80038ee + 80038ea: 230c movs r3, #12 + 80038ec: e2a0 b.n 8003e30 ENTER_FF(fs); /* Lock the volume */ *rfs = fs; /* Return pointer to the file system object */ - 800395a: 68fb ldr r3, [r7, #12] - 800395c: 6bba ldr r2, [r7, #56] ; 0x38 - 800395e: 601a str r2, [r3, #0] + 80038ee: 68fb ldr r3, [r7, #12] + 80038f0: 6bba ldr r2, [r7, #56] ; 0x38 + 80038f2: 601a str r2, [r3, #0] if (fs->fs_type) { /* If the volume has been mounted */ - 8003960: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003962: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8003966: 2b00 cmp r3, #0 - 8003968: d01b beq.n 80039a2 + 80038f4: 6bbb ldr r3, [r7, #56] ; 0x38 + 80038f6: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 80038fa: 2b00 cmp r3, #0 + 80038fc: d01b beq.n 8003936 stat = disk_status(fs->drv); - 800396a: 6bbb ldr r3, [r7, #56] ; 0x38 - 800396c: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 8003970: 4618 mov r0, r3 - 8003972: f7fe fd55 bl 8002420 - 8003976: 4603 mov r3, r0 - 8003978: f887 3037 strb.w r3, [r7, #55] ; 0x37 + 80038fe: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003900: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 8003904: 4618 mov r0, r3 + 8003906: f7fe fd55 bl 80023b4 + 800390a: 4603 mov r3, r0 + 800390c: f887 3037 strb.w r3, [r7, #55] ; 0x37 if (!(stat & STA_NOINIT)) { /* and the physical drive is kept initialized */ - 800397c: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 8003980: f003 0301 and.w r3, r3, #1 - 8003984: 2b00 cmp r3, #0 - 8003986: d10c bne.n 80039a2 + 8003910: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 8003914: f003 0301 and.w r3, r3, #1 + 8003918: 2b00 cmp r3, #0 + 800391a: d10c bne.n 8003936 if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check write protection if needed */ - 8003988: 79fb ldrb r3, [r7, #7] - 800398a: 2b00 cmp r3, #0 - 800398c: d007 beq.n 800399e - 800398e: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 8003992: f003 0304 and.w r3, r3, #4 - 8003996: 2b00 cmp r3, #0 - 8003998: d001 beq.n 800399e + 800391c: 79fb ldrb r3, [r7, #7] + 800391e: 2b00 cmp r3, #0 + 8003920: d007 beq.n 8003932 + 8003922: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 8003926: f003 0304 and.w r3, r3, #4 + 800392a: 2b00 cmp r3, #0 + 800392c: d001 beq.n 8003932 return FR_WRITE_PROTECTED; - 800399a: 230a movs r3, #10 - 800399c: e27e b.n 8003e9c + 800392e: 230a movs r3, #10 + 8003930: e27e b.n 8003e30 return FR_OK; /* The file system object is valid */ - 800399e: 2300 movs r3, #0 - 80039a0: e27c b.n 8003e9c + 8003932: 2300 movs r3, #0 + 8003934: e27c b.n 8003e30 } /* The file system object is not valid. */ /* Following code attempts to mount the volume. (analyze BPB and initialize the fs object) */ fs->fs_type = 0; /* Clear the file system object */ - 80039a2: 6bbb ldr r3, [r7, #56] ; 0x38 - 80039a4: 2200 movs r2, #0 - 80039a6: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003936: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003938: 2200 movs r2, #0 + 800393a: f883 2200 strb.w r2, [r3, #512] ; 0x200 fs->drv = LD2PD(vol); /* Bind the logical drive and a physical drive */ - 80039aa: 6bfb ldr r3, [r7, #60] ; 0x3c - 80039ac: b2da uxtb r2, r3 - 80039ae: 6bbb ldr r3, [r7, #56] ; 0x38 - 80039b0: f883 2201 strb.w r2, [r3, #513] ; 0x201 + 800393e: 6bfb ldr r3, [r7, #60] ; 0x3c + 8003940: b2da uxtb r2, r3 + 8003942: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003944: f883 2201 strb.w r2, [r3, #513] ; 0x201 stat = disk_initialize(fs->drv); /* Initialize the physical drive */ - 80039b4: 6bbb ldr r3, [r7, #56] ; 0x38 - 80039b6: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 80039ba: 4618 mov r0, r3 - 80039bc: f7fe fd4a bl 8002454 - 80039c0: 4603 mov r3, r0 - 80039c2: f887 3037 strb.w r3, [r7, #55] ; 0x37 + 8003948: 6bbb ldr r3, [r7, #56] ; 0x38 + 800394a: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 800394e: 4618 mov r0, r3 + 8003950: f7fe fd4a bl 80023e8 + 8003954: 4603 mov r3, r0 + 8003956: f887 3037 strb.w r3, [r7, #55] ; 0x37 if (stat & STA_NOINIT) /* Check if the initialization succeeded */ - 80039c6: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 80039ca: f003 0301 and.w r3, r3, #1 - 80039ce: 2b00 cmp r3, #0 - 80039d0: d001 beq.n 80039d6 + 800395a: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 800395e: f003 0301 and.w r3, r3, #1 + 8003962: 2b00 cmp r3, #0 + 8003964: d001 beq.n 800396a return FR_NOT_READY; /* Failed to initialize due to no medium or hard error */ - 80039d2: 2303 movs r3, #3 - 80039d4: e262 b.n 8003e9c + 8003966: 2303 movs r3, #3 + 8003968: e262 b.n 8003e30 if (!_FS_READONLY && wmode && (stat & STA_PROTECT)) /* Check disk write protection if needed */ - 80039d6: 79fb ldrb r3, [r7, #7] - 80039d8: 2b00 cmp r3, #0 - 80039da: d007 beq.n 80039ec - 80039dc: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 - 80039e0: f003 0304 and.w r3, r3, #4 - 80039e4: 2b00 cmp r3, #0 - 80039e6: d001 beq.n 80039ec + 800396a: 79fb ldrb r3, [r7, #7] + 800396c: 2b00 cmp r3, #0 + 800396e: d007 beq.n 8003980 + 8003970: f897 3037 ldrb.w r3, [r7, #55] ; 0x37 + 8003974: f003 0304 and.w r3, r3, #4 + 8003978: 2b00 cmp r3, #0 + 800397a: d001 beq.n 8003980 return FR_WRITE_PROTECTED; - 80039e8: 230a movs r3, #10 - 80039ea: e257 b.n 8003e9c + 800397c: 230a movs r3, #10 + 800397e: e257 b.n 8003e30 #if _MAX_SS != _MIN_SS /* Get sector size (multiple sector size cfg only) */ if (disk_ioctl(fs->drv, GET_SECTOR_SIZE, &SS(fs)) != RES_OK || SS(fs) < _MIN_SS || SS(fs) > _MAX_SS) return FR_DISK_ERR; #endif /* Find an FAT partition on the drive. Supports only generic partitioning, FDISK and SFD. */ bsect = 0; - 80039ec: 2300 movs r3, #0 - 80039ee: 653b str r3, [r7, #80] ; 0x50 + 8003980: 2300 movs r3, #0 + 8003982: 653b str r3, [r7, #80] ; 0x50 fmt = check_fs(fs, bsect); /* Load sector 0 and check if it is an FAT boot sector as SFD */ - 80039f0: 6d39 ldr r1, [r7, #80] ; 0x50 - 80039f2: 6bb8 ldr r0, [r7, #56] ; 0x38 - 80039f4: f7ff ff2a bl 800384c - 80039f8: 4603 mov r3, r0 - 80039fa: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003984: 6d39 ldr r1, [r7, #80] ; 0x50 + 8003986: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003988: f7ff ff2a bl 80037e0 + 800398c: 4603 mov r3, r0 + 800398e: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (fmt == 1 || (!fmt && (LD2PT(vol)))) { /* Not an FAT boot sector or forced partition number */ - 80039fe: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003a02: 2b01 cmp r3, #1 - 8003a04: d155 bne.n 8003ab2 + 8003992: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003996: 2b01 cmp r3, #1 + 8003998: d155 bne.n 8003a46 for (i = 0; i < 4; i++) { /* Get partition offset */ - 8003a06: 2300 movs r3, #0 - 8003a08: 643b str r3, [r7, #64] ; 0x40 - 8003a0a: e029 b.n 8003a60 + 800399a: 2300 movs r3, #0 + 800399c: 643b str r3, [r7, #64] ; 0x40 + 800399e: e029 b.n 80039f4 pt = fs->win.d8 + MBR_Table + i * SZ_PTE; - 8003a0c: 6bba ldr r2, [r7, #56] ; 0x38 - 8003a0e: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a10: 011b lsls r3, r3, #4 - 8003a12: f503 73df add.w r3, r3, #446 ; 0x1be - 8003a16: 4413 add r3, r2 - 8003a18: 633b str r3, [r7, #48] ; 0x30 + 80039a0: 6bba ldr r2, [r7, #56] ; 0x38 + 80039a2: 6c3b ldr r3, [r7, #64] ; 0x40 + 80039a4: 011b lsls r3, r3, #4 + 80039a6: f503 73df add.w r3, r3, #446 ; 0x1be + 80039aa: 4413 add r3, r2 + 80039ac: 633b str r3, [r7, #48] ; 0x30 br[i] = pt[4] ? LD_DWORD(&pt[8]) : 0; - 8003a1a: 6b3b ldr r3, [r7, #48] ; 0x30 - 8003a1c: 3304 adds r3, #4 - 8003a1e: 781b ldrb r3, [r3, #0] - 8003a20: 2b00 cmp r3, #0 - 8003a22: d012 beq.n 8003a4a - 8003a24: 6b3b ldr r3, [r7, #48] ; 0x30 - 8003a26: 330b adds r3, #11 - 8003a28: 781b ldrb r3, [r3, #0] - 8003a2a: 061a lsls r2, r3, #24 - 8003a2c: 6b3b ldr r3, [r7, #48] ; 0x30 - 8003a2e: 330a adds r3, #10 - 8003a30: 781b ldrb r3, [r3, #0] - 8003a32: 041b lsls r3, r3, #16 - 8003a34: 4313 orrs r3, r2 - 8003a36: 6b3a ldr r2, [r7, #48] ; 0x30 - 8003a38: 3209 adds r2, #9 - 8003a3a: 7812 ldrb r2, [r2, #0] - 8003a3c: 0212 lsls r2, r2, #8 - 8003a3e: 4313 orrs r3, r2 - 8003a40: 6b3a ldr r2, [r7, #48] ; 0x30 - 8003a42: 3208 adds r2, #8 - 8003a44: 7812 ldrb r2, [r2, #0] - 8003a46: 431a orrs r2, r3 - 8003a48: e000 b.n 8003a4c - 8003a4a: 2200 movs r2, #0 - 8003a4c: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a4e: 009b lsls r3, r3, #2 - 8003a50: f107 0158 add.w r1, r7, #88 ; 0x58 - 8003a54: 440b add r3, r1 - 8003a56: f843 2c44 str.w r2, [r3, #-68] + 80039ae: 6b3b ldr r3, [r7, #48] ; 0x30 + 80039b0: 3304 adds r3, #4 + 80039b2: 781b ldrb r3, [r3, #0] + 80039b4: 2b00 cmp r3, #0 + 80039b6: d012 beq.n 80039de + 80039b8: 6b3b ldr r3, [r7, #48] ; 0x30 + 80039ba: 330b adds r3, #11 + 80039bc: 781b ldrb r3, [r3, #0] + 80039be: 061a lsls r2, r3, #24 + 80039c0: 6b3b ldr r3, [r7, #48] ; 0x30 + 80039c2: 330a adds r3, #10 + 80039c4: 781b ldrb r3, [r3, #0] + 80039c6: 041b lsls r3, r3, #16 + 80039c8: 4313 orrs r3, r2 + 80039ca: 6b3a ldr r2, [r7, #48] ; 0x30 + 80039cc: 3209 adds r2, #9 + 80039ce: 7812 ldrb r2, [r2, #0] + 80039d0: 0212 lsls r2, r2, #8 + 80039d2: 4313 orrs r3, r2 + 80039d4: 6b3a ldr r2, [r7, #48] ; 0x30 + 80039d6: 3208 adds r2, #8 + 80039d8: 7812 ldrb r2, [r2, #0] + 80039da: 431a orrs r2, r3 + 80039dc: e000 b.n 80039e0 + 80039de: 2200 movs r2, #0 + 80039e0: 6c3b ldr r3, [r7, #64] ; 0x40 + 80039e2: 009b lsls r3, r3, #2 + 80039e4: f107 0158 add.w r1, r7, #88 ; 0x58 + 80039e8: 440b add r3, r1 + 80039ea: f843 2c44 str.w r2, [r3, #-68] for (i = 0; i < 4; i++) { /* Get partition offset */ - 8003a5a: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a5c: 3301 adds r3, #1 - 8003a5e: 643b str r3, [r7, #64] ; 0x40 - 8003a60: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a62: 2b03 cmp r3, #3 - 8003a64: d9d2 bls.n 8003a0c + 80039ee: 6c3b ldr r3, [r7, #64] ; 0x40 + 80039f0: 3301 adds r3, #1 + 80039f2: 643b str r3, [r7, #64] ; 0x40 + 80039f4: 6c3b ldr r3, [r7, #64] ; 0x40 + 80039f6: 2b03 cmp r3, #3 + 80039f8: d9d2 bls.n 80039a0 } i = LD2PT(vol); /* Partition number: 0:auto, 1-4:forced */ - 8003a66: 2300 movs r3, #0 - 8003a68: 643b str r3, [r7, #64] ; 0x40 + 80039fa: 2300 movs r3, #0 + 80039fc: 643b str r3, [r7, #64] ; 0x40 if (i) i--; - 8003a6a: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a6c: 2b00 cmp r3, #0 - 8003a6e: d002 beq.n 8003a76 - 8003a70: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a72: 3b01 subs r3, #1 - 8003a74: 643b str r3, [r7, #64] ; 0x40 + 80039fe: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a00: 2b00 cmp r3, #0 + 8003a02: d002 beq.n 8003a0a + 8003a04: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a06: 3b01 subs r3, #1 + 8003a08: 643b str r3, [r7, #64] ; 0x40 do { /* Find an FAT volume */ bsect = br[i]; - 8003a76: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003a78: 009b lsls r3, r3, #2 - 8003a7a: f107 0258 add.w r2, r7, #88 ; 0x58 - 8003a7e: 4413 add r3, r2 - 8003a80: f853 3c44 ldr.w r3, [r3, #-68] - 8003a84: 653b str r3, [r7, #80] ; 0x50 + 8003a0a: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a0c: 009b lsls r3, r3, #2 + 8003a0e: f107 0258 add.w r2, r7, #88 ; 0x58 + 8003a12: 4413 add r3, r2 + 8003a14: f853 3c44 ldr.w r3, [r3, #-68] + 8003a18: 653b str r3, [r7, #80] ; 0x50 fmt = bsect ? check_fs(fs, bsect) : 2; /* Check the partition */ - 8003a86: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003a88: 2b00 cmp r3, #0 - 8003a8a: d005 beq.n 8003a98 - 8003a8c: 6d39 ldr r1, [r7, #80] ; 0x50 - 8003a8e: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003a90: f7ff fedc bl 800384c - 8003a94: 4603 mov r3, r0 - 8003a96: e000 b.n 8003a9a - 8003a98: 2302 movs r3, #2 - 8003a9a: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003a1a: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003a1c: 2b00 cmp r3, #0 + 8003a1e: d005 beq.n 8003a2c + 8003a20: 6d39 ldr r1, [r7, #80] ; 0x50 + 8003a22: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003a24: f7ff fedc bl 80037e0 + 8003a28: 4603 mov r3, r0 + 8003a2a: e000 b.n 8003a2e + 8003a2c: 2302 movs r3, #2 + 8003a2e: f887 3057 strb.w r3, [r7, #87] ; 0x57 } while (!LD2PT(vol) && fmt && ++i < 4); - 8003a9e: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003aa2: 2b00 cmp r3, #0 - 8003aa4: d005 beq.n 8003ab2 - 8003aa6: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003aa8: 3301 adds r3, #1 - 8003aaa: 643b str r3, [r7, #64] ; 0x40 - 8003aac: 6c3b ldr r3, [r7, #64] ; 0x40 - 8003aae: 2b03 cmp r3, #3 - 8003ab0: d9e1 bls.n 8003a76 + 8003a32: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003a36: 2b00 cmp r3, #0 + 8003a38: d005 beq.n 8003a46 + 8003a3a: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a3c: 3301 adds r3, #1 + 8003a3e: 643b str r3, [r7, #64] ; 0x40 + 8003a40: 6c3b ldr r3, [r7, #64] ; 0x40 + 8003a42: 2b03 cmp r3, #3 + 8003a44: d9e1 bls.n 8003a0a } if (fmt == 3) return FR_DISK_ERR; /* An error occured in the disk I/O layer */ - 8003ab2: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003ab6: 2b03 cmp r3, #3 - 8003ab8: d101 bne.n 8003abe - 8003aba: 2301 movs r3, #1 - 8003abc: e1ee b.n 8003e9c + 8003a46: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003a4a: 2b03 cmp r3, #3 + 8003a4c: d101 bne.n 8003a52 + 8003a4e: 2301 movs r3, #1 + 8003a50: e1ee b.n 8003e30 if (fmt) return FR_NO_FILESYSTEM; /* No FAT volume is found */ - 8003abe: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003ac2: 2b00 cmp r3, #0 - 8003ac4: d001 beq.n 8003aca - 8003ac6: 230d movs r3, #13 - 8003ac8: e1e8 b.n 8003e9c + 8003a52: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003a56: 2b00 cmp r3, #0 + 8003a58: d001 beq.n 8003a5e + 8003a5a: 230d movs r3, #13 + 8003a5c: e1e8 b.n 8003e30 /* An FAT volume is found. Following code initializes the file system object */ if (LD_WORD(fs->win.d8 + BPB_BytsPerSec) != SS(fs)) /* (BPB_BytsPerSec must be equal to the physical sector size) */ - 8003aca: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003acc: 7b1b ldrb r3, [r3, #12] - 8003ace: 021b lsls r3, r3, #8 - 8003ad0: b21a sxth r2, r3 - 8003ad2: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ad4: 7adb ldrb r3, [r3, #11] - 8003ad6: b21b sxth r3, r3 - 8003ad8: 4313 orrs r3, r2 - 8003ada: b21b sxth r3, r3 - 8003adc: f5b3 7f00 cmp.w r3, #512 ; 0x200 - 8003ae0: d001 beq.n 8003ae6 + 8003a5e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a60: 7b1b ldrb r3, [r3, #12] + 8003a62: 021b lsls r3, r3, #8 + 8003a64: b21a sxth r2, r3 + 8003a66: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a68: 7adb ldrb r3, [r3, #11] + 8003a6a: b21b sxth r3, r3 + 8003a6c: 4313 orrs r3, r2 + 8003a6e: b21b sxth r3, r3 + 8003a70: f5b3 7f00 cmp.w r3, #512 ; 0x200 + 8003a74: d001 beq.n 8003a7a return FR_NO_FILESYSTEM; - 8003ae2: 230d movs r3, #13 - 8003ae4: e1da b.n 8003e9c + 8003a76: 230d movs r3, #13 + 8003a78: e1da b.n 8003e30 fasize = LD_WORD(fs->win.d8 + BPB_FATSz16); /* Number of sectors per FAT */ - 8003ae6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ae8: 7ddb ldrb r3, [r3, #23] - 8003aea: 021b lsls r3, r3, #8 - 8003aec: b21a sxth r2, r3 - 8003aee: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003af0: 7d9b ldrb r3, [r3, #22] - 8003af2: b21b sxth r3, r3 - 8003af4: 4313 orrs r3, r2 - 8003af6: b21b sxth r3, r3 - 8003af8: b29b uxth r3, r3 - 8003afa: 64fb str r3, [r7, #76] ; 0x4c + 8003a7a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a7c: 7ddb ldrb r3, [r3, #23] + 8003a7e: 021b lsls r3, r3, #8 + 8003a80: b21a sxth r2, r3 + 8003a82: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a84: 7d9b ldrb r3, [r3, #22] + 8003a86: b21b sxth r3, r3 + 8003a88: 4313 orrs r3, r2 + 8003a8a: b21b sxth r3, r3 + 8003a8c: b29b uxth r3, r3 + 8003a8e: 64fb str r3, [r7, #76] ; 0x4c if (!fasize) fasize = LD_DWORD(fs->win.d8 + BPB_FATSz32); - 8003afc: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003afe: 2b00 cmp r3, #0 - 8003b00: d112 bne.n 8003b28 - 8003b02: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b04: f893 3027 ldrb.w r3, [r3, #39] ; 0x27 - 8003b08: 061a lsls r2, r3, #24 - 8003b0a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b0c: f893 3026 ldrb.w r3, [r3, #38] ; 0x26 - 8003b10: 041b lsls r3, r3, #16 - 8003b12: 4313 orrs r3, r2 - 8003b14: 6bba ldr r2, [r7, #56] ; 0x38 - 8003b16: f892 2025 ldrb.w r2, [r2, #37] ; 0x25 - 8003b1a: 0212 lsls r2, r2, #8 - 8003b1c: 4313 orrs r3, r2 - 8003b1e: 6bba ldr r2, [r7, #56] ; 0x38 - 8003b20: f892 2024 ldrb.w r2, [r2, #36] ; 0x24 - 8003b24: 4313 orrs r3, r2 - 8003b26: 64fb str r3, [r7, #76] ; 0x4c + 8003a90: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003a92: 2b00 cmp r3, #0 + 8003a94: d112 bne.n 8003abc + 8003a96: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003a98: f893 3027 ldrb.w r3, [r3, #39] ; 0x27 + 8003a9c: 061a lsls r2, r3, #24 + 8003a9e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003aa0: f893 3026 ldrb.w r3, [r3, #38] ; 0x26 + 8003aa4: 041b lsls r3, r3, #16 + 8003aa6: 4313 orrs r3, r2 + 8003aa8: 6bba ldr r2, [r7, #56] ; 0x38 + 8003aaa: f892 2025 ldrb.w r2, [r2, #37] ; 0x25 + 8003aae: 0212 lsls r2, r2, #8 + 8003ab0: 4313 orrs r3, r2 + 8003ab2: 6bba ldr r2, [r7, #56] ; 0x38 + 8003ab4: f892 2024 ldrb.w r2, [r2, #36] ; 0x24 + 8003ab8: 4313 orrs r3, r2 + 8003aba: 64fb str r3, [r7, #76] ; 0x4c fs->fsize = fasize; - 8003b28: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b2a: 6cfa ldr r2, [r7, #76] ; 0x4c - 8003b2c: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 8003abc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003abe: 6cfa ldr r2, [r7, #76] ; 0x4c + 8003ac0: f8c3 2218 str.w r2, [r3, #536] ; 0x218 fs->n_fats = fs->win.d8[BPB_NumFATs]; /* Number of FAT copies */ - 8003b30: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b32: 7c1a ldrb r2, [r3, #16] - 8003b34: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b36: f883 2203 strb.w r2, [r3, #515] ; 0x203 + 8003ac4: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ac6: 7c1a ldrb r2, [r3, #16] + 8003ac8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003aca: f883 2203 strb.w r2, [r3, #515] ; 0x203 if (fs->n_fats != 1 && fs->n_fats != 2) /* (Must be 1 or 2) */ - 8003b3a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b3c: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003b40: 2b01 cmp r3, #1 - 8003b42: d006 beq.n 8003b52 - 8003b44: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b46: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003b4a: 2b02 cmp r3, #2 - 8003b4c: d001 beq.n 8003b52 + 8003ace: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ad0: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003ad4: 2b01 cmp r3, #1 + 8003ad6: d006 beq.n 8003ae6 + 8003ad8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ada: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003ade: 2b02 cmp r3, #2 + 8003ae0: d001 beq.n 8003ae6 return FR_NO_FILESYSTEM; - 8003b4e: 230d movs r3, #13 - 8003b50: e1a4 b.n 8003e9c + 8003ae2: 230d movs r3, #13 + 8003ae4: e1a4 b.n 8003e30 fasize *= fs->n_fats; /* Number of sectors for FAT area */ - 8003b52: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b54: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 - 8003b58: 461a mov r2, r3 - 8003b5a: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003b5c: fb02 f303 mul.w r3, r2, r3 - 8003b60: 64fb str r3, [r7, #76] ; 0x4c + 8003ae6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ae8: f893 3203 ldrb.w r3, [r3, #515] ; 0x203 + 8003aec: 461a mov r2, r3 + 8003aee: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003af0: fb02 f303 mul.w r3, r2, r3 + 8003af4: 64fb str r3, [r7, #76] ; 0x4c fs->csize = fs->win.d8[BPB_SecPerClus]; /* Number of sectors per cluster */ - 8003b62: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b64: 7b5a ldrb r2, [r3, #13] - 8003b66: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b68: f883 2202 strb.w r2, [r3, #514] ; 0x202 + 8003af6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003af8: 7b5a ldrb r2, [r3, #13] + 8003afa: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003afc: f883 2202 strb.w r2, [r3, #514] ; 0x202 if (!fs->csize || (fs->csize & (fs->csize - 1))) /* (Must be power of 2) */ - 8003b6c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b6e: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b72: 2b00 cmp r3, #0 - 8003b74: d00a beq.n 8003b8c - 8003b76: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b78: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b7c: 461a mov r2, r3 - 8003b7e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b80: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8003b84: 3b01 subs r3, #1 - 8003b86: 4013 ands r3, r2 - 8003b88: 2b00 cmp r3, #0 - 8003b8a: d001 beq.n 8003b90 + 8003b00: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b02: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003b06: 2b00 cmp r3, #0 + 8003b08: d00a beq.n 8003b20 + 8003b0a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b0c: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003b10: 461a mov r2, r3 + 8003b12: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b14: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 8003b18: 3b01 subs r3, #1 + 8003b1a: 4013 ands r3, r2 + 8003b1c: 2b00 cmp r3, #0 + 8003b1e: d001 beq.n 8003b24 return FR_NO_FILESYSTEM; - 8003b8c: 230d movs r3, #13 - 8003b8e: e185 b.n 8003e9c + 8003b20: 230d movs r3, #13 + 8003b22: e185 b.n 8003e30 fs->n_rootdir = LD_WORD(fs->win.d8 + BPB_RootEntCnt); /* Number of root directory entries */ - 8003b90: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b92: 7c9b ldrb r3, [r3, #18] - 8003b94: 021b lsls r3, r3, #8 - 8003b96: b21a sxth r2, r3 - 8003b98: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003b9a: 7c5b ldrb r3, [r3, #17] - 8003b9c: b21b sxth r3, r3 - 8003b9e: 4313 orrs r3, r2 - 8003ba0: b21b sxth r3, r3 - 8003ba2: b29a uxth r2, r3 - 8003ba4: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ba6: f8a3 2208 strh.w r2, [r3, #520] ; 0x208 + 8003b24: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b26: 7c9b ldrb r3, [r3, #18] + 8003b28: 021b lsls r3, r3, #8 + 8003b2a: b21a sxth r2, r3 + 8003b2c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b2e: 7c5b ldrb r3, [r3, #17] + 8003b30: b21b sxth r3, r3 + 8003b32: 4313 orrs r3, r2 + 8003b34: b21b sxth r3, r3 + 8003b36: b29a uxth r2, r3 + 8003b38: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b3a: f8a3 2208 strh.w r2, [r3, #520] ; 0x208 if (fs->n_rootdir % (SS(fs) / SZ_DIRE)) /* (Must be sector aligned) */ - 8003baa: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003bac: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003bb0: f003 030f and.w r3, r3, #15 - 8003bb4: b29b uxth r3, r3 - 8003bb6: 2b00 cmp r3, #0 - 8003bb8: d004 beq.n 8003bc4 + 8003b3e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b40: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003b44: f003 030f and.w r3, r3, #15 + 8003b48: b29b uxth r3, r3 + 8003b4a: 2b00 cmp r3, #0 + 8003b4c: d004 beq.n 8003b58 return FR_NO_FILESYSTEM; - 8003bba: 230d movs r3, #13 - 8003bbc: e16e b.n 8003e9c - 8003bbe: bf00 nop - 8003bc0: 200000ac .word 0x200000ac + 8003b4e: 230d movs r3, #13 + 8003b50: e16e b.n 8003e30 + 8003b52: bf00 nop + 8003b54: 20000044 .word 0x20000044 tsect = LD_WORD(fs->win.d8 + BPB_TotSec16); /* Number of sectors on the volume */ - 8003bc4: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003bc6: 7d1b ldrb r3, [r3, #20] - 8003bc8: 021b lsls r3, r3, #8 - 8003bca: b21a sxth r2, r3 - 8003bcc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003bce: 7cdb ldrb r3, [r3, #19] - 8003bd0: b21b sxth r3, r3 - 8003bd2: 4313 orrs r3, r2 - 8003bd4: b21b sxth r3, r3 - 8003bd6: b29b uxth r3, r3 - 8003bd8: 64bb str r3, [r7, #72] ; 0x48 + 8003b58: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b5a: 7d1b ldrb r3, [r3, #20] + 8003b5c: 021b lsls r3, r3, #8 + 8003b5e: b21a sxth r2, r3 + 8003b60: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b62: 7cdb ldrb r3, [r3, #19] + 8003b64: b21b sxth r3, r3 + 8003b66: 4313 orrs r3, r2 + 8003b68: b21b sxth r3, r3 + 8003b6a: b29b uxth r3, r3 + 8003b6c: 64bb str r3, [r7, #72] ; 0x48 if (!tsect) tsect = LD_DWORD(fs->win.d8 + BPB_TotSec32); - 8003bda: 6cbb ldr r3, [r7, #72] ; 0x48 - 8003bdc: 2b00 cmp r3, #0 - 8003bde: d112 bne.n 8003c06 - 8003be0: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003be2: f893 3023 ldrb.w r3, [r3, #35] ; 0x23 - 8003be6: 061a lsls r2, r3, #24 - 8003be8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003bea: f893 3022 ldrb.w r3, [r3, #34] ; 0x22 - 8003bee: 041b lsls r3, r3, #16 - 8003bf0: 4313 orrs r3, r2 - 8003bf2: 6bba ldr r2, [r7, #56] ; 0x38 - 8003bf4: f892 2021 ldrb.w r2, [r2, #33] ; 0x21 - 8003bf8: 0212 lsls r2, r2, #8 - 8003bfa: 4313 orrs r3, r2 - 8003bfc: 6bba ldr r2, [r7, #56] ; 0x38 - 8003bfe: f892 2020 ldrb.w r2, [r2, #32] - 8003c02: 4313 orrs r3, r2 - 8003c04: 64bb str r3, [r7, #72] ; 0x48 + 8003b6e: 6cbb ldr r3, [r7, #72] ; 0x48 + 8003b70: 2b00 cmp r3, #0 + 8003b72: d112 bne.n 8003b9a + 8003b74: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b76: f893 3023 ldrb.w r3, [r3, #35] ; 0x23 + 8003b7a: 061a lsls r2, r3, #24 + 8003b7c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b7e: f893 3022 ldrb.w r3, [r3, #34] ; 0x22 + 8003b82: 041b lsls r3, r3, #16 + 8003b84: 4313 orrs r3, r2 + 8003b86: 6bba ldr r2, [r7, #56] ; 0x38 + 8003b88: f892 2021 ldrb.w r2, [r2, #33] ; 0x21 + 8003b8c: 0212 lsls r2, r2, #8 + 8003b8e: 4313 orrs r3, r2 + 8003b90: 6bba ldr r2, [r7, #56] ; 0x38 + 8003b92: f892 2020 ldrb.w r2, [r2, #32] + 8003b96: 4313 orrs r3, r2 + 8003b98: 64bb str r3, [r7, #72] ; 0x48 nrsv = LD_WORD(fs->win.d8 + BPB_RsvdSecCnt); /* Number of reserved sectors */ - 8003c06: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c08: 7bdb ldrb r3, [r3, #15] - 8003c0a: 021b lsls r3, r3, #8 - 8003c0c: b21a sxth r2, r3 - 8003c0e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c10: 7b9b ldrb r3, [r3, #14] - 8003c12: b21b sxth r3, r3 - 8003c14: 4313 orrs r3, r2 - 8003c16: b21b sxth r3, r3 - 8003c18: 85fb strh r3, [r7, #46] ; 0x2e + 8003b9a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003b9c: 7bdb ldrb r3, [r3, #15] + 8003b9e: 021b lsls r3, r3, #8 + 8003ba0: b21a sxth r2, r3 + 8003ba2: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ba4: 7b9b ldrb r3, [r3, #14] + 8003ba6: b21b sxth r3, r3 + 8003ba8: 4313 orrs r3, r2 + 8003baa: b21b sxth r3, r3 + 8003bac: 85fb strh r3, [r7, #46] ; 0x2e if (!nrsv) return FR_NO_FILESYSTEM; /* (Must not be 0) */ - 8003c1a: 8dfb ldrh r3, [r7, #46] ; 0x2e - 8003c1c: 2b00 cmp r3, #0 - 8003c1e: d101 bne.n 8003c24 - 8003c20: 230d movs r3, #13 - 8003c22: e13b b.n 8003e9c + 8003bae: 8dfb ldrh r3, [r7, #46] ; 0x2e + 8003bb0: 2b00 cmp r3, #0 + 8003bb2: d101 bne.n 8003bb8 + 8003bb4: 230d movs r3, #13 + 8003bb6: e13b b.n 8003e30 /* Determine the FAT sub type */ sysect = nrsv + fasize + fs->n_rootdir / (SS(fs) / SZ_DIRE); /* RSV + FAT + DIR */ - 8003c24: 8dfa ldrh r2, [r7, #46] ; 0x2e - 8003c26: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003c28: 4413 add r3, r2 - 8003c2a: 6bba ldr r2, [r7, #56] ; 0x38 - 8003c2c: f8b2 2208 ldrh.w r2, [r2, #520] ; 0x208 - 8003c30: 0912 lsrs r2, r2, #4 - 8003c32: b292 uxth r2, r2 - 8003c34: 4413 add r3, r2 - 8003c36: 62bb str r3, [r7, #40] ; 0x28 + 8003bb8: 8dfa ldrh r2, [r7, #46] ; 0x2e + 8003bba: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003bbc: 4413 add r3, r2 + 8003bbe: 6bba ldr r2, [r7, #56] ; 0x38 + 8003bc0: f8b2 2208 ldrh.w r2, [r2, #520] ; 0x208 + 8003bc4: 0912 lsrs r2, r2, #4 + 8003bc6: b292 uxth r2, r2 + 8003bc8: 4413 add r3, r2 + 8003bca: 62bb str r3, [r7, #40] ; 0x28 if (tsect < sysect) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - 8003c38: 6cba ldr r2, [r7, #72] ; 0x48 - 8003c3a: 6abb ldr r3, [r7, #40] ; 0x28 - 8003c3c: 429a cmp r2, r3 - 8003c3e: d201 bcs.n 8003c44 - 8003c40: 230d movs r3, #13 - 8003c42: e12b b.n 8003e9c + 8003bcc: 6cba ldr r2, [r7, #72] ; 0x48 + 8003bce: 6abb ldr r3, [r7, #40] ; 0x28 + 8003bd0: 429a cmp r2, r3 + 8003bd2: d201 bcs.n 8003bd8 + 8003bd4: 230d movs r3, #13 + 8003bd6: e12b b.n 8003e30 nclst = (tsect - sysect) / fs->csize; /* Number of clusters */ - 8003c44: 6cba ldr r2, [r7, #72] ; 0x48 - 8003c46: 6abb ldr r3, [r7, #40] ; 0x28 - 8003c48: 1ad3 subs r3, r2, r3 - 8003c4a: 6bba ldr r2, [r7, #56] ; 0x38 - 8003c4c: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8003c50: fbb3 f3f2 udiv r3, r3, r2 - 8003c54: 627b str r3, [r7, #36] ; 0x24 + 8003bd8: 6cba ldr r2, [r7, #72] ; 0x48 + 8003bda: 6abb ldr r3, [r7, #40] ; 0x28 + 8003bdc: 1ad3 subs r3, r2, r3 + 8003bde: 6bba ldr r2, [r7, #56] ; 0x38 + 8003be0: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 8003be4: fbb3 f3f2 udiv r3, r3, r2 + 8003be8: 627b str r3, [r7, #36] ; 0x24 if (!nclst) return FR_NO_FILESYSTEM; /* (Invalid volume size) */ - 8003c56: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c58: 2b00 cmp r3, #0 - 8003c5a: d101 bne.n 8003c60 - 8003c5c: 230d movs r3, #13 - 8003c5e: e11d b.n 8003e9c + 8003bea: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003bec: 2b00 cmp r3, #0 + 8003bee: d101 bne.n 8003bf4 + 8003bf0: 230d movs r3, #13 + 8003bf2: e11d b.n 8003e30 fmt = FS_FAT12; - 8003c60: 2301 movs r3, #1 - 8003c62: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003bf4: 2301 movs r3, #1 + 8003bf6: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (nclst >= MIN_FAT16) fmt = FS_FAT16; - 8003c66: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c68: f640 72f5 movw r2, #4085 ; 0xff5 - 8003c6c: 4293 cmp r3, r2 - 8003c6e: d902 bls.n 8003c76 - 8003c70: 2302 movs r3, #2 - 8003c72: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003bfa: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003bfc: f640 72f5 movw r2, #4085 ; 0xff5 + 8003c00: 4293 cmp r3, r2 + 8003c02: d902 bls.n 8003c0a + 8003c04: 2302 movs r3, #2 + 8003c06: f887 3057 strb.w r3, [r7, #87] ; 0x57 if (nclst >= MIN_FAT32) fmt = FS_FAT32; - 8003c76: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c78: f64f 72f5 movw r2, #65525 ; 0xfff5 - 8003c7c: 4293 cmp r3, r2 - 8003c7e: d902 bls.n 8003c86 - 8003c80: 2303 movs r3, #3 - 8003c82: f887 3057 strb.w r3, [r7, #87] ; 0x57 + 8003c0a: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003c0c: f64f 72f5 movw r2, #65525 ; 0xfff5 + 8003c10: 4293 cmp r3, r2 + 8003c12: d902 bls.n 8003c1a + 8003c14: 2303 movs r3, #3 + 8003c16: f887 3057 strb.w r3, [r7, #87] ; 0x57 /* Boundaries and Limits */ fs->n_fatent = nclst + 2; /* Number of FAT entries */ - 8003c86: 6a7b ldr r3, [r7, #36] ; 0x24 - 8003c88: 1c9a adds r2, r3, #2 - 8003c8a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c8c: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8003c1a: 6a7b ldr r3, [r7, #36] ; 0x24 + 8003c1c: 1c9a adds r2, r3, #2 + 8003c1e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c20: f8c3 2214 str.w r2, [r3, #532] ; 0x214 fs->volbase = bsect; /* Volume start sector */ - 8003c90: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003c92: 6d3a ldr r2, [r7, #80] ; 0x50 - 8003c94: f8c3 221c str.w r2, [r3, #540] ; 0x21c + 8003c24: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c26: 6d3a ldr r2, [r7, #80] ; 0x50 + 8003c28: f8c3 221c str.w r2, [r3, #540] ; 0x21c fs->fatbase = bsect + nrsv; /* FAT start sector */ - 8003c98: 8dfa ldrh r2, [r7, #46] ; 0x2e - 8003c9a: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003c9c: 441a add r2, r3 - 8003c9e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ca0: f8c3 2220 str.w r2, [r3, #544] ; 0x220 + 8003c2c: 8dfa ldrh r2, [r7, #46] ; 0x2e + 8003c2e: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003c30: 441a add r2, r3 + 8003c32: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c34: f8c3 2220 str.w r2, [r3, #544] ; 0x220 fs->database = bsect + sysect; /* Data start sector */ - 8003ca4: 6d3a ldr r2, [r7, #80] ; 0x50 - 8003ca6: 6abb ldr r3, [r7, #40] ; 0x28 - 8003ca8: 441a add r2, r3 - 8003caa: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cac: f8c3 2228 str.w r2, [r3, #552] ; 0x228 + 8003c38: 6d3a ldr r2, [r7, #80] ; 0x50 + 8003c3a: 6abb ldr r3, [r7, #40] ; 0x28 + 8003c3c: 441a add r2, r3 + 8003c3e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c40: f8c3 2228 str.w r2, [r3, #552] ; 0x228 if (fmt == FS_FAT32) { - 8003cb0: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003cb4: 2b03 cmp r3, #3 - 8003cb6: d121 bne.n 8003cfc + 8003c44: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003c48: 2b03 cmp r3, #3 + 8003c4a: d121 bne.n 8003c90 if (fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must be 0) */ - 8003cb8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cba: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003cbe: 2b00 cmp r3, #0 - 8003cc0: d001 beq.n 8003cc6 - 8003cc2: 230d movs r3, #13 - 8003cc4: e0ea b.n 8003e9c + 8003c4c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c4e: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003c52: 2b00 cmp r3, #0 + 8003c54: d001 beq.n 8003c5a + 8003c56: 230d movs r3, #13 + 8003c58: e0ea b.n 8003e30 fs->dirbase = LD_DWORD(fs->win.d8 + BPB_RootClus); /* Root directory start cluster */ - 8003cc6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cc8: f893 302f ldrb.w r3, [r3, #47] ; 0x2f - 8003ccc: 061a lsls r2, r3, #24 - 8003cce: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cd0: f893 302e ldrb.w r3, [r3, #46] ; 0x2e - 8003cd4: 041b lsls r3, r3, #16 - 8003cd6: 4313 orrs r3, r2 - 8003cd8: 6bba ldr r2, [r7, #56] ; 0x38 - 8003cda: f892 202d ldrb.w r2, [r2, #45] ; 0x2d - 8003cde: 0212 lsls r2, r2, #8 - 8003ce0: 4313 orrs r3, r2 - 8003ce2: 6bba ldr r2, [r7, #56] ; 0x38 - 8003ce4: f892 202c ldrb.w r2, [r2, #44] ; 0x2c - 8003ce8: 431a orrs r2, r3 - 8003cea: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cec: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 8003c5a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c5c: f893 302f ldrb.w r3, [r3, #47] ; 0x2f + 8003c60: 061a lsls r2, r3, #24 + 8003c62: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c64: f893 302e ldrb.w r3, [r3, #46] ; 0x2e + 8003c68: 041b lsls r3, r3, #16 + 8003c6a: 4313 orrs r3, r2 + 8003c6c: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c6e: f892 202d ldrb.w r2, [r2, #45] ; 0x2d + 8003c72: 0212 lsls r2, r2, #8 + 8003c74: 4313 orrs r3, r2 + 8003c76: 6bba ldr r2, [r7, #56] ; 0x38 + 8003c78: f892 202c ldrb.w r2, [r2, #44] ; 0x2c + 8003c7c: 431a orrs r2, r3 + 8003c7e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c80: f8c3 2224 str.w r2, [r3, #548] ; 0x224 szbfat = fs->n_fatent * 4; /* (Needed FAT size) */ - 8003cf0: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cf2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003cf6: 009b lsls r3, r3, #2 - 8003cf8: 647b str r3, [r7, #68] ; 0x44 - 8003cfa: e025 b.n 8003d48 + 8003c84: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c86: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003c8a: 009b lsls r3, r3, #2 + 8003c8c: 647b str r3, [r7, #68] ; 0x44 + 8003c8e: e025 b.n 8003cdc } else { if (!fs->n_rootdir) return FR_NO_FILESYSTEM; /* (BPB_RootEntCnt must not be 0) */ - 8003cfc: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003cfe: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 - 8003d02: 2b00 cmp r3, #0 - 8003d04: d101 bne.n 8003d0a - 8003d06: 230d movs r3, #13 - 8003d08: e0c8 b.n 8003e9c + 8003c90: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003c92: f8b3 3208 ldrh.w r3, [r3, #520] ; 0x208 + 8003c96: 2b00 cmp r3, #0 + 8003c98: d101 bne.n 8003c9e + 8003c9a: 230d movs r3, #13 + 8003c9c: e0c8 b.n 8003e30 fs->dirbase = fs->fatbase + fasize; /* Root directory start sector */ - 8003d0a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d0c: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 - 8003d10: 6cfb ldr r3, [r7, #76] ; 0x4c - 8003d12: 441a add r2, r3 - 8003d14: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d16: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 8003c9e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003ca0: f8d3 2220 ldr.w r2, [r3, #544] ; 0x220 + 8003ca4: 6cfb ldr r3, [r7, #76] ; 0x4c + 8003ca6: 441a add r2, r3 + 8003ca8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003caa: f8c3 2224 str.w r2, [r3, #548] ; 0x224 szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ fs->n_fatent * 2 : fs->n_fatent * 3 / 2 + (fs->n_fatent & 1); - 8003d1a: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003d1e: 2b02 cmp r3, #2 - 8003d20: d104 bne.n 8003d2c - 8003d22: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d24: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003d28: 005b lsls r3, r3, #1 - 8003d2a: e00c b.n 8003d46 - 8003d2c: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d2e: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 - 8003d32: 4613 mov r3, r2 - 8003d34: 005b lsls r3, r3, #1 - 8003d36: 4413 add r3, r2 - 8003d38: 085a lsrs r2, r3, #1 - 8003d3a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d3c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8003d40: f003 0301 and.w r3, r3, #1 - 8003d44: 4413 add r3, r2 + 8003cae: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003cb2: 2b02 cmp r3, #2 + 8003cb4: d104 bne.n 8003cc0 + 8003cb6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cb8: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003cbc: 005b lsls r3, r3, #1 + 8003cbe: e00c b.n 8003cda + 8003cc0: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cc2: f8d3 2214 ldr.w r2, [r3, #532] ; 0x214 + 8003cc6: 4613 mov r3, r2 + 8003cc8: 005b lsls r3, r3, #1 + 8003cca: 4413 add r3, r2 + 8003ccc: 085a lsrs r2, r3, #1 + 8003cce: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cd0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003cd4: f003 0301 and.w r3, r3, #1 + 8003cd8: 4413 add r3, r2 szbfat = (fmt == FS_FAT16) ? /* (Needed FAT size) */ - 8003d46: 647b str r3, [r7, #68] ; 0x44 + 8003cda: 647b str r3, [r7, #68] ; 0x44 } if (fs->fsize < (szbfat + (SS(fs) - 1)) / SS(fs)) /* (BPB_FATSz must not be less than the size needed) */ - 8003d48: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d4a: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8003d4e: 6c7b ldr r3, [r7, #68] ; 0x44 - 8003d50: f203 13ff addw r3, r3, #511 ; 0x1ff - 8003d54: 0a5b lsrs r3, r3, #9 - 8003d56: 429a cmp r2, r3 - 8003d58: d201 bcs.n 8003d5e + 8003cdc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cde: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 8003ce2: 6c7b ldr r3, [r7, #68] ; 0x44 + 8003ce4: f203 13ff addw r3, r3, #511 ; 0x1ff + 8003ce8: 0a5b lsrs r3, r3, #9 + 8003cea: 429a cmp r2, r3 + 8003cec: d201 bcs.n 8003cf2 return FR_NO_FILESYSTEM; - 8003d5a: 230d movs r3, #13 - 8003d5c: e09e b.n 8003e9c + 8003cee: 230d movs r3, #13 + 8003cf0: e09e b.n 8003e30 #if !_FS_READONLY /* Initialize cluster allocation information */ fs->last_clust = fs->free_clust = 0xFFFFFFFF; - 8003d5e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d60: f04f 32ff mov.w r2, #4294967295 - 8003d64: f8c3 2210 str.w r2, [r3, #528] ; 0x210 - 8003d68: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d6a: f8d3 2210 ldr.w r2, [r3, #528] ; 0x210 - 8003d6e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d70: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003cf2: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cf4: f04f 32ff mov.w r2, #4294967295 + 8003cf8: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003cfc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003cfe: f8d3 2210 ldr.w r2, [r3, #528] ; 0x210 + 8003d02: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d04: f8c3 220c str.w r2, [r3, #524] ; 0x20c /* Get fsinfo if available */ fs->fsi_flag = 0x80; - 8003d74: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d76: 2280 movs r2, #128 ; 0x80 - 8003d78: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8003d08: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d0a: 2280 movs r2, #128 ; 0x80 + 8003d0c: f883 2205 strb.w r2, [r3, #517] ; 0x205 #if (_FS_NOFSINFO & 3) != 3 if (fmt == FS_FAT32 /* Enable FSINFO only if FAT32 and BPB_FSInfo is 1 */ - 8003d7c: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 - 8003d80: 2b03 cmp r3, #3 - 8003d82: d177 bne.n 8003e74 + 8003d10: f897 3057 ldrb.w r3, [r7, #87] ; 0x57 + 8003d14: 2b03 cmp r3, #3 + 8003d16: d177 bne.n 8003e08 && LD_WORD(fs->win.d8 + BPB_FSInfo) == 1 - 8003d84: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d86: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 - 8003d8a: 021b lsls r3, r3, #8 - 8003d8c: b21a sxth r2, r3 - 8003d8e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003d90: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 - 8003d94: b21b sxth r3, r3 - 8003d96: 4313 orrs r3, r2 - 8003d98: b21b sxth r3, r3 - 8003d9a: 2b01 cmp r3, #1 - 8003d9c: d16a bne.n 8003e74 + 8003d18: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d1a: f893 3031 ldrb.w r3, [r3, #49] ; 0x31 + 8003d1e: 021b lsls r3, r3, #8 + 8003d20: b21a sxth r2, r3 + 8003d22: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d24: f893 3030 ldrb.w r3, [r3, #48] ; 0x30 + 8003d28: b21b sxth r3, r3 + 8003d2a: 4313 orrs r3, r2 + 8003d2c: b21b sxth r3, r3 + 8003d2e: 2b01 cmp r3, #1 + 8003d30: d16a bne.n 8003e08 && move_window(fs, bsect + 1) == FR_OK) - 8003d9e: 6d3b ldr r3, [r7, #80] ; 0x50 - 8003da0: 3301 adds r3, #1 - 8003da2: 4619 mov r1, r3 - 8003da4: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003da6: f7fe fdec bl 8002982 - 8003daa: 4603 mov r3, r0 - 8003dac: 2b00 cmp r3, #0 - 8003dae: d161 bne.n 8003e74 + 8003d32: 6d3b ldr r3, [r7, #80] ; 0x50 + 8003d34: 3301 adds r3, #1 + 8003d36: 4619 mov r1, r3 + 8003d38: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003d3a: f7fe fdec bl 8002916 + 8003d3e: 4603 mov r3, r0 + 8003d40: 2b00 cmp r3, #0 + 8003d42: d161 bne.n 8003e08 { fs->fsi_flag = 0; - 8003db0: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003db2: 2200 movs r2, #0 - 8003db4: f883 2205 strb.w r2, [r3, #517] ; 0x205 + 8003d44: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d46: 2200 movs r2, #0 + 8003d48: f883 2205 strb.w r2, [r3, #517] ; 0x205 if (LD_WORD(fs->win.d8 + BS_55AA) == 0xAA55 /* Load FSINFO data if available */ - 8003db8: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003dba: f893 31ff ldrb.w r3, [r3, #511] ; 0x1ff - 8003dbe: 021b lsls r3, r3, #8 - 8003dc0: b21a sxth r2, r3 - 8003dc2: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003dc4: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe - 8003dc8: b21b sxth r3, r3 - 8003dca: 4313 orrs r3, r2 - 8003dcc: b21b sxth r3, r3 - 8003dce: 4a35 ldr r2, [pc, #212] ; (8003ea4 ) - 8003dd0: 4293 cmp r3, r2 - 8003dd2: d14f bne.n 8003e74 + 8003d4c: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d4e: f893 31ff ldrb.w r3, [r3, #511] ; 0x1ff + 8003d52: 021b lsls r3, r3, #8 + 8003d54: b21a sxth r2, r3 + 8003d56: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d58: f893 31fe ldrb.w r3, [r3, #510] ; 0x1fe + 8003d5c: b21b sxth r3, r3 + 8003d5e: 4313 orrs r3, r2 + 8003d60: b21b sxth r3, r3 + 8003d62: 4a35 ldr r2, [pc, #212] ; (8003e38 ) + 8003d64: 4293 cmp r3, r2 + 8003d66: d14f bne.n 8003e08 && LD_DWORD(fs->win.d8 + FSI_LeadSig) == 0x41615252 - 8003dd4: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003dd6: 78db ldrb r3, [r3, #3] - 8003dd8: 061a lsls r2, r3, #24 - 8003dda: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003ddc: 789b ldrb r3, [r3, #2] - 8003dde: 041b lsls r3, r3, #16 - 8003de0: 4313 orrs r3, r2 - 8003de2: 6bba ldr r2, [r7, #56] ; 0x38 - 8003de4: 7852 ldrb r2, [r2, #1] - 8003de6: 0212 lsls r2, r2, #8 - 8003de8: 4313 orrs r3, r2 - 8003dea: 6bba ldr r2, [r7, #56] ; 0x38 - 8003dec: 7812 ldrb r2, [r2, #0] - 8003dee: 4313 orrs r3, r2 - 8003df0: 4a2d ldr r2, [pc, #180] ; (8003ea8 ) - 8003df2: 4293 cmp r3, r2 - 8003df4: d13e bne.n 8003e74 + 8003d68: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d6a: 78db ldrb r3, [r3, #3] + 8003d6c: 061a lsls r2, r3, #24 + 8003d6e: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d70: 789b ldrb r3, [r3, #2] + 8003d72: 041b lsls r3, r3, #16 + 8003d74: 4313 orrs r3, r2 + 8003d76: 6bba ldr r2, [r7, #56] ; 0x38 + 8003d78: 7852 ldrb r2, [r2, #1] + 8003d7a: 0212 lsls r2, r2, #8 + 8003d7c: 4313 orrs r3, r2 + 8003d7e: 6bba ldr r2, [r7, #56] ; 0x38 + 8003d80: 7812 ldrb r2, [r2, #0] + 8003d82: 4313 orrs r3, r2 + 8003d84: 4a2d ldr r2, [pc, #180] ; (8003e3c ) + 8003d86: 4293 cmp r3, r2 + 8003d88: d13e bne.n 8003e08 && LD_DWORD(fs->win.d8 + FSI_StrucSig) == 0x61417272) - 8003df6: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003df8: f893 31e7 ldrb.w r3, [r3, #487] ; 0x1e7 - 8003dfc: 061a lsls r2, r3, #24 - 8003dfe: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e00: f893 31e6 ldrb.w r3, [r3, #486] ; 0x1e6 - 8003e04: 041b lsls r3, r3, #16 - 8003e06: 4313 orrs r3, r2 - 8003e08: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e0a: f892 21e5 ldrb.w r2, [r2, #485] ; 0x1e5 - 8003e0e: 0212 lsls r2, r2, #8 - 8003e10: 4313 orrs r3, r2 - 8003e12: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e14: f892 21e4 ldrb.w r2, [r2, #484] ; 0x1e4 - 8003e18: 4313 orrs r3, r2 - 8003e1a: 4a24 ldr r2, [pc, #144] ; (8003eac ) - 8003e1c: 4293 cmp r3, r2 - 8003e1e: d129 bne.n 8003e74 + 8003d8a: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d8c: f893 31e7 ldrb.w r3, [r3, #487] ; 0x1e7 + 8003d90: 061a lsls r2, r3, #24 + 8003d92: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003d94: f893 31e6 ldrb.w r3, [r3, #486] ; 0x1e6 + 8003d98: 041b lsls r3, r3, #16 + 8003d9a: 4313 orrs r3, r2 + 8003d9c: 6bba ldr r2, [r7, #56] ; 0x38 + 8003d9e: f892 21e5 ldrb.w r2, [r2, #485] ; 0x1e5 + 8003da2: 0212 lsls r2, r2, #8 + 8003da4: 4313 orrs r3, r2 + 8003da6: 6bba ldr r2, [r7, #56] ; 0x38 + 8003da8: f892 21e4 ldrb.w r2, [r2, #484] ; 0x1e4 + 8003dac: 4313 orrs r3, r2 + 8003dae: 4a24 ldr r2, [pc, #144] ; (8003e40 ) + 8003db0: 4293 cmp r3, r2 + 8003db2: d129 bne.n 8003e08 { #if (_FS_NOFSINFO & 1) == 0 fs->free_clust = LD_DWORD(fs->win.d8 + FSI_Free_Count); - 8003e20: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e22: f893 31eb ldrb.w r3, [r3, #491] ; 0x1eb - 8003e26: 061a lsls r2, r3, #24 - 8003e28: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e2a: f893 31ea ldrb.w r3, [r3, #490] ; 0x1ea - 8003e2e: 041b lsls r3, r3, #16 - 8003e30: 4313 orrs r3, r2 - 8003e32: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e34: f892 21e9 ldrb.w r2, [r2, #489] ; 0x1e9 - 8003e38: 0212 lsls r2, r2, #8 - 8003e3a: 4313 orrs r3, r2 - 8003e3c: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e3e: f892 21e8 ldrb.w r2, [r2, #488] ; 0x1e8 - 8003e42: 431a orrs r2, r3 - 8003e44: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e46: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + 8003db4: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003db6: f893 31eb ldrb.w r3, [r3, #491] ; 0x1eb + 8003dba: 061a lsls r2, r3, #24 + 8003dbc: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dbe: f893 31ea ldrb.w r3, [r3, #490] ; 0x1ea + 8003dc2: 041b lsls r3, r3, #16 + 8003dc4: 4313 orrs r3, r2 + 8003dc6: 6bba ldr r2, [r7, #56] ; 0x38 + 8003dc8: f892 21e9 ldrb.w r2, [r2, #489] ; 0x1e9 + 8003dcc: 0212 lsls r2, r2, #8 + 8003dce: 4313 orrs r3, r2 + 8003dd0: 6bba ldr r2, [r7, #56] ; 0x38 + 8003dd2: f892 21e8 ldrb.w r2, [r2, #488] ; 0x1e8 + 8003dd6: 431a orrs r2, r3 + 8003dd8: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003dda: f8c3 2210 str.w r2, [r3, #528] ; 0x210 #endif #if (_FS_NOFSINFO & 2) == 0 fs->last_clust = LD_DWORD(fs->win.d8 + FSI_Nxt_Free); - 8003e4a: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e4c: f893 31ef ldrb.w r3, [r3, #495] ; 0x1ef - 8003e50: 061a lsls r2, r3, #24 - 8003e52: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e54: f893 31ee ldrb.w r3, [r3, #494] ; 0x1ee - 8003e58: 041b lsls r3, r3, #16 - 8003e5a: 4313 orrs r3, r2 - 8003e5c: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e5e: f892 21ed ldrb.w r2, [r2, #493] ; 0x1ed - 8003e62: 0212 lsls r2, r2, #8 - 8003e64: 4313 orrs r3, r2 - 8003e66: 6bba ldr r2, [r7, #56] ; 0x38 - 8003e68: f892 21ec ldrb.w r2, [r2, #492] ; 0x1ec - 8003e6c: 431a orrs r2, r3 - 8003e6e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e70: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8003dde: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003de0: f893 31ef ldrb.w r3, [r3, #495] ; 0x1ef + 8003de4: 061a lsls r2, r3, #24 + 8003de6: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003de8: f893 31ee ldrb.w r3, [r3, #494] ; 0x1ee + 8003dec: 041b lsls r3, r3, #16 + 8003dee: 4313 orrs r3, r2 + 8003df0: 6bba ldr r2, [r7, #56] ; 0x38 + 8003df2: f892 21ed ldrb.w r2, [r2, #493] ; 0x1ed + 8003df6: 0212 lsls r2, r2, #8 + 8003df8: 4313 orrs r3, r2 + 8003dfa: 6bba ldr r2, [r7, #56] ; 0x38 + 8003dfc: f892 21ec ldrb.w r2, [r2, #492] ; 0x1ec + 8003e00: 431a orrs r2, r3 + 8003e02: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e04: f8c3 220c str.w r2, [r3, #524] ; 0x20c #endif } } #endif #endif fs->fs_type = fmt; /* FAT sub-type */ - 8003e74: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e76: f897 2057 ldrb.w r2, [r7, #87] ; 0x57 - 8003e7a: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003e08: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e0a: f897 2057 ldrb.w r2, [r7, #87] ; 0x57 + 8003e0e: f883 2200 strb.w r2, [r3, #512] ; 0x200 fs->id = ++Fsid; /* File system mount ID */ - 8003e7e: 4b0c ldr r3, [pc, #48] ; (8003eb0 ) - 8003e80: 881b ldrh r3, [r3, #0] - 8003e82: 3301 adds r3, #1 - 8003e84: b29a uxth r2, r3 - 8003e86: 4b0a ldr r3, [pc, #40] ; (8003eb0 ) - 8003e88: 801a strh r2, [r3, #0] - 8003e8a: 4b09 ldr r3, [pc, #36] ; (8003eb0 ) - 8003e8c: 881a ldrh r2, [r3, #0] - 8003e8e: 6bbb ldr r3, [r7, #56] ; 0x38 - 8003e90: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 + 8003e12: 4b0c ldr r3, [pc, #48] ; (8003e44 ) + 8003e14: 881b ldrh r3, [r3, #0] + 8003e16: 3301 adds r3, #1 + 8003e18: b29a uxth r2, r3 + 8003e1a: 4b0a ldr r3, [pc, #40] ; (8003e44 ) + 8003e1c: 801a strh r2, [r3, #0] + 8003e1e: 4b09 ldr r3, [pc, #36] ; (8003e44 ) + 8003e20: 881a ldrh r2, [r3, #0] + 8003e22: 6bbb ldr r3, [r7, #56] ; 0x38 + 8003e24: f8a3 2206 strh.w r2, [r3, #518] ; 0x206 #if _FS_RPATH fs->cdir = 0; /* Set current directory to root */ #endif #if _FS_LOCK /* Clear file lock semaphores */ clear_lock(fs); - 8003e94: 6bb8 ldr r0, [r7, #56] ; 0x38 - 8003e96: f7fe fd01 bl 800289c + 8003e28: 6bb8 ldr r0, [r7, #56] ; 0x38 + 8003e2a: f7fe fd01 bl 8002830 #endif return FR_OK; - 8003e9a: 2300 movs r3, #0 + 8003e2e: 2300 movs r3, #0 } - 8003e9c: 4618 mov r0, r3 - 8003e9e: 3758 adds r7, #88 ; 0x58 - 8003ea0: 46bd mov sp, r7 - 8003ea2: bd80 pop {r7, pc} - 8003ea4: ffffaa55 .word 0xffffaa55 - 8003ea8: 41615252 .word 0x41615252 - 8003eac: 61417272 .word 0x61417272 - 8003eb0: 200000b0 .word 0x200000b0 + 8003e30: 4618 mov r0, r3 + 8003e32: 3758 adds r7, #88 ; 0x58 + 8003e34: 46bd mov sp, r7 + 8003e36: bd80 pop {r7, pc} + 8003e38: ffffaa55 .word 0xffffaa55 + 8003e3c: 41615252 .word 0x41615252 + 8003e40: 61417272 .word 0x61417272 + 8003e44: 20000048 .word 0x20000048 -08003eb4 : +08003e48 : static FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */ void* obj /* Pointer to the object FIL/DIR to check validity */ ) { - 8003eb4: b580 push {r7, lr} - 8003eb6: b084 sub sp, #16 - 8003eb8: af00 add r7, sp, #0 - 8003eba: 6078 str r0, [r7, #4] + 8003e48: b580 push {r7, lr} + 8003e4a: b084 sub sp, #16 + 8003e4c: af00 add r7, sp, #0 + 8003e4e: 6078 str r0, [r7, #4] FIL *fil = (FIL*)obj; /* Assuming offset of .fs and .id in the FIL/DIR structure is identical */ - 8003ebc: 687b ldr r3, [r7, #4] - 8003ebe: 60fb str r3, [r7, #12] + 8003e50: 687b ldr r3, [r7, #4] + 8003e52: 60fb str r3, [r7, #12] if (!fil || !fil->fs || !fil->fs->fs_type || fil->fs->id != fil->id || (disk_status(fil->fs->drv) & STA_NOINIT)) - 8003ec0: 68fb ldr r3, [r7, #12] - 8003ec2: 2b00 cmp r3, #0 - 8003ec4: d022 beq.n 8003f0c - 8003ec6: 68fb ldr r3, [r7, #12] - 8003ec8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003ecc: 2b00 cmp r3, #0 - 8003ece: d01d beq.n 8003f0c - 8003ed0: 68fb ldr r3, [r7, #12] - 8003ed2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003ed6: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 - 8003eda: 2b00 cmp r3, #0 - 8003edc: d016 beq.n 8003f0c - 8003ede: 68fb ldr r3, [r7, #12] - 8003ee0: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003ee4: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 - 8003ee8: 68fb ldr r3, [r7, #12] - 8003eea: f8b3 3204 ldrh.w r3, [r3, #516] ; 0x204 - 8003eee: 429a cmp r2, r3 - 8003ef0: d10c bne.n 8003f0c - 8003ef2: 68fb ldr r3, [r7, #12] - 8003ef4: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8003ef8: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 - 8003efc: 4618 mov r0, r3 - 8003efe: f7fe fa8f bl 8002420 - 8003f02: 4603 mov r3, r0 - 8003f04: f003 0301 and.w r3, r3, #1 - 8003f08: 2b00 cmp r3, #0 - 8003f0a: d001 beq.n 8003f10 + 8003e54: 68fb ldr r3, [r7, #12] + 8003e56: 2b00 cmp r3, #0 + 8003e58: d022 beq.n 8003ea0 + 8003e5a: 68fb ldr r3, [r7, #12] + 8003e5c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003e60: 2b00 cmp r3, #0 + 8003e62: d01d beq.n 8003ea0 + 8003e64: 68fb ldr r3, [r7, #12] + 8003e66: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003e6a: f893 3200 ldrb.w r3, [r3, #512] ; 0x200 + 8003e6e: 2b00 cmp r3, #0 + 8003e70: d016 beq.n 8003ea0 + 8003e72: 68fb ldr r3, [r7, #12] + 8003e74: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003e78: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 + 8003e7c: 68fb ldr r3, [r7, #12] + 8003e7e: f8b3 3204 ldrh.w r3, [r3, #516] ; 0x204 + 8003e82: 429a cmp r2, r3 + 8003e84: d10c bne.n 8003ea0 + 8003e86: 68fb ldr r3, [r7, #12] + 8003e88: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8003e8c: f893 3201 ldrb.w r3, [r3, #513] ; 0x201 + 8003e90: 4618 mov r0, r3 + 8003e92: f7fe fa8f bl 80023b4 + 8003e96: 4603 mov r3, r0 + 8003e98: f003 0301 and.w r3, r3, #1 + 8003e9c: 2b00 cmp r3, #0 + 8003e9e: d001 beq.n 8003ea4 return FR_INVALID_OBJECT; - 8003f0c: 2309 movs r3, #9 - 8003f0e: e000 b.n 8003f12 + 8003ea0: 2309 movs r3, #9 + 8003ea2: e000 b.n 8003ea6 ENTER_FF(fil->fs); /* Lock file system */ return FR_OK; - 8003f10: 2300 movs r3, #0 + 8003ea4: 2300 movs r3, #0 } - 8003f12: 4618 mov r0, r3 - 8003f14: 3710 adds r7, #16 - 8003f16: 46bd mov sp, r7 - 8003f18: bd80 pop {r7, pc} + 8003ea6: 4618 mov r0, r3 + 8003ea8: 3710 adds r7, #16 + 8003eaa: 46bd mov sp, r7 + 8003eac: bd80 pop {r7, pc} ... -08003f1c : +08003eb0 : FRESULT f_mount ( FATFS* fs, /* Pointer to the file system object (NULL:unmount)*/ const TCHAR* path, /* Logical drive number to be mounted/unmounted */ BYTE opt /* 0:Do not mount (delayed mount), 1:Mount immediately */ ) { - 8003f1c: b580 push {r7, lr} - 8003f1e: b088 sub sp, #32 - 8003f20: af00 add r7, sp, #0 - 8003f22: 60f8 str r0, [r7, #12] - 8003f24: 60b9 str r1, [r7, #8] - 8003f26: 4613 mov r3, r2 - 8003f28: 71fb strb r3, [r7, #7] + 8003eb0: b580 push {r7, lr} + 8003eb2: b088 sub sp, #32 + 8003eb4: af00 add r7, sp, #0 + 8003eb6: 60f8 str r0, [r7, #12] + 8003eb8: 60b9 str r1, [r7, #8] + 8003eba: 4613 mov r3, r2 + 8003ebc: 71fb strb r3, [r7, #7] FATFS *cfs; int vol; FRESULT res; const TCHAR *rp = path; - 8003f2a: 68bb ldr r3, [r7, #8] - 8003f2c: 613b str r3, [r7, #16] + 8003ebe: 68bb ldr r3, [r7, #8] + 8003ec0: 613b str r3, [r7, #16] vol = get_ldnumber(&rp); - 8003f2e: f107 0310 add.w r3, r7, #16 - 8003f32: 4618 mov r0, r3 - 8003f34: f7ff fc46 bl 80037c4 - 8003f38: 61f8 str r0, [r7, #28] + 8003ec2: f107 0310 add.w r3, r7, #16 + 8003ec6: 4618 mov r0, r3 + 8003ec8: f7ff fc46 bl 8003758 + 8003ecc: 61f8 str r0, [r7, #28] if (vol < 0) return FR_INVALID_DRIVE; - 8003f3a: 69fb ldr r3, [r7, #28] - 8003f3c: 2b00 cmp r3, #0 - 8003f3e: da01 bge.n 8003f44 - 8003f40: 230b movs r3, #11 - 8003f42: e02d b.n 8003fa0 + 8003ece: 69fb ldr r3, [r7, #28] + 8003ed0: 2b00 cmp r3, #0 + 8003ed2: da01 bge.n 8003ed8 + 8003ed4: 230b movs r3, #11 + 8003ed6: e02d b.n 8003f34 cfs = FatFs[vol]; /* Pointer to fs object */ - 8003f44: 4a18 ldr r2, [pc, #96] ; (8003fa8 ) - 8003f46: 69fb ldr r3, [r7, #28] - 8003f48: f852 3023 ldr.w r3, [r2, r3, lsl #2] - 8003f4c: 61bb str r3, [r7, #24] + 8003ed8: 4a18 ldr r2, [pc, #96] ; (8003f3c ) + 8003eda: 69fb ldr r3, [r7, #28] + 8003edc: f852 3023 ldr.w r3, [r2, r3, lsl #2] + 8003ee0: 61bb str r3, [r7, #24] if (cfs) { - 8003f4e: 69bb ldr r3, [r7, #24] - 8003f50: 2b00 cmp r3, #0 - 8003f52: d006 beq.n 8003f62 + 8003ee2: 69bb ldr r3, [r7, #24] + 8003ee4: 2b00 cmp r3, #0 + 8003ee6: d006 beq.n 8003ef6 #if _FS_LOCK clear_lock(cfs); - 8003f54: 69b8 ldr r0, [r7, #24] - 8003f56: f7fe fca1 bl 800289c + 8003ee8: 69b8 ldr r0, [r7, #24] + 8003eea: f7fe fca1 bl 8002830 #endif #if _FS_REENTRANT /* Discard sync object of the current volume */ if (!ff_del_syncobj(cfs->sobj)) return FR_INT_ERR; #endif cfs->fs_type = 0; /* Clear old fs object */ - 8003f5a: 69bb ldr r3, [r7, #24] - 8003f5c: 2200 movs r2, #0 - 8003f5e: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003eee: 69bb ldr r3, [r7, #24] + 8003ef0: 2200 movs r2, #0 + 8003ef2: f883 2200 strb.w r2, [r3, #512] ; 0x200 } if (fs) { - 8003f62: 68fb ldr r3, [r7, #12] - 8003f64: 2b00 cmp r3, #0 - 8003f66: d003 beq.n 8003f70 + 8003ef6: 68fb ldr r3, [r7, #12] + 8003ef8: 2b00 cmp r3, #0 + 8003efa: d003 beq.n 8003f04 fs->fs_type = 0; /* Clear new fs object */ - 8003f68: 68fb ldr r3, [r7, #12] - 8003f6a: 2200 movs r2, #0 - 8003f6c: f883 2200 strb.w r2, [r3, #512] ; 0x200 + 8003efc: 68fb ldr r3, [r7, #12] + 8003efe: 2200 movs r2, #0 + 8003f00: f883 2200 strb.w r2, [r3, #512] ; 0x200 #if _FS_REENTRANT /* Create sync object for the new volume */ if (!ff_cre_syncobj((BYTE)vol, &fs->sobj)) return FR_INT_ERR; #endif } FatFs[vol] = fs; /* Register new fs object */ - 8003f70: 68fa ldr r2, [r7, #12] - 8003f72: 490d ldr r1, [pc, #52] ; (8003fa8 ) - 8003f74: 69fb ldr r3, [r7, #28] - 8003f76: f841 2023 str.w r2, [r1, r3, lsl #2] + 8003f04: 68fa ldr r2, [r7, #12] + 8003f06: 490d ldr r1, [pc, #52] ; (8003f3c ) + 8003f08: 69fb ldr r3, [r7, #28] + 8003f0a: f841 2023 str.w r2, [r1, r3, lsl #2] if (!fs || opt != 1) return FR_OK; /* Do not mount now, it will be mounted later */ - 8003f7a: 68fb ldr r3, [r7, #12] - 8003f7c: 2b00 cmp r3, #0 - 8003f7e: d002 beq.n 8003f86 - 8003f80: 79fb ldrb r3, [r7, #7] - 8003f82: 2b01 cmp r3, #1 - 8003f84: d001 beq.n 8003f8a - 8003f86: 2300 movs r3, #0 - 8003f88: e00a b.n 8003fa0 + 8003f0e: 68fb ldr r3, [r7, #12] + 8003f10: 2b00 cmp r3, #0 + 8003f12: d002 beq.n 8003f1a + 8003f14: 79fb ldrb r3, [r7, #7] + 8003f16: 2b01 cmp r3, #1 + 8003f18: d001 beq.n 8003f1e + 8003f1a: 2300 movs r3, #0 + 8003f1c: e00a b.n 8003f34 res = find_volume(&fs, &path, 0); /* Force mounted the volume */ - 8003f8a: f107 0108 add.w r1, r7, #8 - 8003f8e: f107 030c add.w r3, r7, #12 - 8003f92: 2200 movs r2, #0 - 8003f94: 4618 mov r0, r3 - 8003f96: f7ff fcc3 bl 8003920 - 8003f9a: 4603 mov r3, r0 - 8003f9c: 75fb strb r3, [r7, #23] + 8003f1e: f107 0108 add.w r1, r7, #8 + 8003f22: f107 030c add.w r3, r7, #12 + 8003f26: 2200 movs r2, #0 + 8003f28: 4618 mov r0, r3 + 8003f2a: f7ff fcc3 bl 80038b4 + 8003f2e: 4603 mov r3, r0 + 8003f30: 75fb strb r3, [r7, #23] LEAVE_FF(fs, res); - 8003f9e: 7dfb ldrb r3, [r7, #23] + 8003f32: 7dfb ldrb r3, [r7, #23] } - 8003fa0: 4618 mov r0, r3 - 8003fa2: 3720 adds r7, #32 - 8003fa4: 46bd mov sp, r7 - 8003fa6: bd80 pop {r7, pc} - 8003fa8: 200000ac .word 0x200000ac + 8003f34: 4618 mov r0, r3 + 8003f36: 3720 adds r7, #32 + 8003f38: 46bd mov sp, r7 + 8003f3a: bd80 pop {r7, pc} + 8003f3c: 20000044 .word 0x20000044 -08003fac : +08003f40 : FRESULT f_open ( FIL* fp, /* Pointer to the blank file object */ const TCHAR* path, /* Pointer to the file name */ BYTE mode /* Access mode and file open mode flags */ ) { - 8003fac: b580 push {r7, lr} - 8003fae: f5ad 7d14 sub.w sp, sp, #592 ; 0x250 - 8003fb2: af00 add r7, sp, #0 - 8003fb4: f107 030c add.w r3, r7, #12 - 8003fb8: 6018 str r0, [r3, #0] - 8003fba: f107 0308 add.w r3, r7, #8 - 8003fbe: 6019 str r1, [r3, #0] - 8003fc0: 1dfb adds r3, r7, #7 - 8003fc2: 701a strb r2, [r3, #0] + 8003f40: b580 push {r7, lr} + 8003f42: f5ad 7d14 sub.w sp, sp, #592 ; 0x250 + 8003f46: af00 add r7, sp, #0 + 8003f48: f107 030c add.w r3, r7, #12 + 8003f4c: 6018 str r0, [r3, #0] + 8003f4e: f107 0308 add.w r3, r7, #8 + 8003f52: 6019 str r1, [r3, #0] + 8003f54: 1dfb adds r3, r7, #7 + 8003f56: 701a strb r2, [r3, #0] #if !_FS_READONLY DWORD dw, cl; #endif if (!fp) return FR_INVALID_OBJECT; - 8003fc4: f107 030c add.w r3, r7, #12 - 8003fc8: 681b ldr r3, [r3, #0] - 8003fca: 2b00 cmp r3, #0 - 8003fcc: d101 bne.n 8003fd2 - 8003fce: 2309 movs r3, #9 - 8003fd0: e1f2 b.n 80043b8 + 8003f58: f107 030c add.w r3, r7, #12 + 8003f5c: 681b ldr r3, [r3, #0] + 8003f5e: 2b00 cmp r3, #0 + 8003f60: d101 bne.n 8003f66 + 8003f62: 2309 movs r3, #9 + 8003f64: e1f2 b.n 800434c fp->fs = 0; /* Clear file object */ - 8003fd2: f107 030c add.w r3, r7, #12 - 8003fd6: 681b ldr r3, [r3, #0] - 8003fd8: 2200 movs r2, #0 - 8003fda: f8c3 2200 str.w r2, [r3, #512] ; 0x200 + 8003f66: f107 030c add.w r3, r7, #12 + 8003f6a: 681b ldr r3, [r3, #0] + 8003f6c: 2200 movs r2, #0 + 8003f6e: f8c3 2200 str.w r2, [r3, #512] ; 0x200 /* Get logical drive number */ #if !_FS_READONLY mode &= FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW; - 8003fde: 1dfb adds r3, r7, #7 - 8003fe0: 1dfa adds r2, r7, #7 - 8003fe2: 7812 ldrb r2, [r2, #0] - 8003fe4: f002 021f and.w r2, r2, #31 - 8003fe8: 701a strb r2, [r3, #0] + 8003f72: 1dfb adds r3, r7, #7 + 8003f74: 1dfa adds r2, r7, #7 + 8003f76: 7812 ldrb r2, [r2, #0] + 8003f78: f002 021f and.w r2, r2, #31 + 8003f7c: 701a strb r2, [r3, #0] res = find_volume(&dj.fs, &path, (BYTE)(mode & ~FA_READ)); - 8003fea: 1dfb adds r3, r7, #7 - 8003fec: 781b ldrb r3, [r3, #0] - 8003fee: f023 0301 bic.w r3, r3, #1 - 8003ff2: b2da uxtb r2, r3 - 8003ff4: f107 0108 add.w r1, r7, #8 - 8003ff8: f107 0320 add.w r3, r7, #32 - 8003ffc: f503 7300 add.w r3, r3, #512 ; 0x200 - 8004000: 4618 mov r0, r3 - 8004002: f7ff fc8d bl 8003920 - 8004006: 4603 mov r3, r0 - 8004008: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8003f7e: 1dfb adds r3, r7, #7 + 8003f80: 781b ldrb r3, [r3, #0] + 8003f82: f023 0301 bic.w r3, r3, #1 + 8003f86: b2da uxtb r2, r3 + 8003f88: f107 0108 add.w r1, r7, #8 + 8003f8c: f107 0320 add.w r3, r7, #32 + 8003f90: f503 7300 add.w r3, r3, #512 ; 0x200 + 8003f94: 4618 mov r0, r3 + 8003f96: f7ff fc8d bl 80038b4 + 8003f9a: 4603 mov r3, r0 + 8003f9c: f887 324f strb.w r3, [r7, #591] ; 0x24f #else mode &= FA_READ; res = find_volume(&dj.fs, &path, 0); #endif if (res == FR_OK) { - 800400c: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004010: 2b00 cmp r3, #0 - 8004012: f040 81cf bne.w 80043b4 + 8003fa0: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8003fa4: 2b00 cmp r3, #0 + 8003fa6: f040 81cf bne.w 8004348 INIT_BUF(dj); - 8004016: f107 0320 add.w r3, r7, #32 - 800401a: f107 0214 add.w r2, r7, #20 - 800401e: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 8003faa: f107 0320 add.w r3, r7, #32 + 8003fae: f107 0214 add.w r2, r7, #20 + 8003fb2: f8c3 2218 str.w r2, [r3, #536] ; 0x218 res = follow_path(&dj, path); /* Follow the file path */ - 8004022: f107 0308 add.w r3, r7, #8 - 8004026: 681a ldr r2, [r3, #0] - 8004028: f107 0320 add.w r3, r7, #32 - 800402c: 4611 mov r1, r2 - 800402e: 4618 mov r0, r3 - 8004030: f7ff fb5a bl 80036e8 - 8004034: 4603 mov r3, r0 - 8004036: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8003fb6: f107 0308 add.w r3, r7, #8 + 8003fba: 681a ldr r2, [r3, #0] + 8003fbc: f107 0320 add.w r3, r7, #32 + 8003fc0: 4611 mov r1, r2 + 8003fc2: 4618 mov r0, r3 + 8003fc4: f7ff fb5a bl 800367c + 8003fc8: 4603 mov r3, r0 + 8003fca: f887 324f strb.w r3, [r7, #591] ; 0x24f dir = dj.dir; - 800403a: f107 0320 add.w r3, r7, #32 - 800403e: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 8004042: f8c7 3248 str.w r3, [r7, #584] ; 0x248 + 8003fce: f107 0320 add.w r3, r7, #32 + 8003fd2: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8003fd6: f8c7 3248 str.w r3, [r7, #584] ; 0x248 #if !_FS_READONLY /* R/W configuration */ if (res == FR_OK) { - 8004046: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800404a: 2b00 cmp r3, #0 - 800404c: d11a bne.n 8004084 + 8003fda: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8003fde: 2b00 cmp r3, #0 + 8003fe0: d11a bne.n 8004018 if (!dir) /* Default directory itself */ - 800404e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004052: 2b00 cmp r3, #0 - 8004054: d103 bne.n 800405e + 8003fe2: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8003fe6: 2b00 cmp r3, #0 + 8003fe8: d103 bne.n 8003ff2 res = FR_INVALID_NAME; - 8004056: 2306 movs r3, #6 - 8004058: f887 324f strb.w r3, [r7, #591] ; 0x24f - 800405c: e012 b.n 8004084 + 8003fea: 2306 movs r3, #6 + 8003fec: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8003ff0: e012 b.n 8004018 #if _FS_LOCK else res = chk_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - 800405e: 1dfb adds r3, r7, #7 - 8004060: 781b ldrb r3, [r3, #0] - 8004062: f023 0301 bic.w r3, r3, #1 - 8004066: 2b00 cmp r3, #0 - 8004068: bf14 ite ne - 800406a: 2301 movne r3, #1 - 800406c: 2300 moveq r3, #0 - 800406e: b2db uxtb r3, r3 - 8004070: 461a mov r2, r3 - 8004072: f107 0320 add.w r3, r7, #32 - 8004076: 4611 mov r1, r2 - 8004078: 4618 mov r0, r3 - 800407a: f7fe fac9 bl 8002610 - 800407e: 4603 mov r3, r0 - 8004080: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8003ff2: 1dfb adds r3, r7, #7 + 8003ff4: 781b ldrb r3, [r3, #0] + 8003ff6: f023 0301 bic.w r3, r3, #1 + 8003ffa: 2b00 cmp r3, #0 + 8003ffc: bf14 ite ne + 8003ffe: 2301 movne r3, #1 + 8004000: 2300 moveq r3, #0 + 8004002: b2db uxtb r3, r3 + 8004004: 461a mov r2, r3 + 8004006: f107 0320 add.w r3, r7, #32 + 800400a: 4611 mov r1, r2 + 800400c: 4618 mov r0, r3 + 800400e: f7fe fac9 bl 80025a4 + 8004012: 4603 mov r3, r0 + 8004014: f887 324f strb.w r3, [r7, #591] ; 0x24f #endif } /* Create or Open a file */ if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) { - 8004084: 1dfb adds r3, r7, #7 - 8004086: 781b ldrb r3, [r3, #0] - 8004088: f003 031c and.w r3, r3, #28 - 800408c: 2b00 cmp r3, #0 - 800408e: f000 80cc beq.w 800422a + 8004018: 1dfb adds r3, r7, #7 + 800401a: 781b ldrb r3, [r3, #0] + 800401c: f003 031c and.w r3, r3, #28 + 8004020: 2b00 cmp r3, #0 + 8004022: f000 80cc beq.w 80041be if (res != FR_OK) { /* No file, create new */ - 8004092: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004096: 2b00 cmp r3, #0 - 8004098: d01f beq.n 80040da + 8004026: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 800402a: 2b00 cmp r3, #0 + 800402c: d01f beq.n 800406e if (res == FR_NO_FILE) /* There is no file to open, create a new entry */ - 800409a: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800409e: 2b04 cmp r3, #4 - 80040a0: d10e bne.n 80040c0 + 800402e: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004032: 2b04 cmp r3, #4 + 8004034: d10e bne.n 8004054 #if _FS_LOCK res = enq_lock() ? dir_register(&dj) : FR_TOO_MANY_OPEN_FILES; - 80040a2: f7fe fb21 bl 80026e8 - 80040a6: 4603 mov r3, r0 - 80040a8: 2b00 cmp r3, #0 - 80040aa: d006 beq.n 80040ba - 80040ac: f107 0320 add.w r3, r7, #32 - 80040b0: 4618 mov r0, r3 - 80040b2: f7ff fa1f bl 80034f4 - 80040b6: 4603 mov r3, r0 - 80040b8: e000 b.n 80040bc - 80040ba: 2312 movs r3, #18 - 80040bc: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004036: f7fe fb21 bl 800267c + 800403a: 4603 mov r3, r0 + 800403c: 2b00 cmp r3, #0 + 800403e: d006 beq.n 800404e + 8004040: f107 0320 add.w r3, r7, #32 + 8004044: 4618 mov r0, r3 + 8004046: f7ff fa1f bl 8003488 + 800404a: 4603 mov r3, r0 + 800404c: e000 b.n 8004050 + 800404e: 2312 movs r3, #18 + 8004050: f887 324f strb.w r3, [r7, #591] ; 0x24f #else res = dir_register(&dj); #endif mode |= FA_CREATE_ALWAYS; /* File is created */ - 80040c0: 1dfb adds r3, r7, #7 - 80040c2: 1dfa adds r2, r7, #7 - 80040c4: 7812 ldrb r2, [r2, #0] - 80040c6: f042 0208 orr.w r2, r2, #8 - 80040ca: 701a strb r2, [r3, #0] + 8004054: 1dfb adds r3, r7, #7 + 8004056: 1dfa adds r2, r7, #7 + 8004058: 7812 ldrb r2, [r2, #0] + 800405a: f042 0208 orr.w r2, r2, #8 + 800405e: 701a strb r2, [r3, #0] dir = dj.dir; /* New entry */ - 80040cc: f107 0320 add.w r3, r7, #32 - 80040d0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80040d4: f8c7 3248 str.w r3, [r7, #584] ; 0x248 - 80040d8: e014 b.n 8004104 + 8004060: f107 0320 add.w r3, r7, #32 + 8004064: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8004068: f8c7 3248 str.w r3, [r7, #584] ; 0x248 + 800406c: e014 b.n 8004098 } else { /* Any object is already existing */ if (dir[DIR_Attr] & (AM_RDO | AM_DIR)) { /* Cannot overwrite it (R/O or DIR) */ - 80040da: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 80040de: 330b adds r3, #11 - 80040e0: 781b ldrb r3, [r3, #0] - 80040e2: f003 0311 and.w r3, r3, #17 - 80040e6: 2b00 cmp r3, #0 - 80040e8: d003 beq.n 80040f2 + 800406e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004072: 330b adds r3, #11 + 8004074: 781b ldrb r3, [r3, #0] + 8004076: f003 0311 and.w r3, r3, #17 + 800407a: 2b00 cmp r3, #0 + 800407c: d003 beq.n 8004086 res = FR_DENIED; - 80040ea: 2307 movs r3, #7 - 80040ec: f887 324f strb.w r3, [r7, #591] ; 0x24f - 80040f0: e008 b.n 8004104 + 800407e: 2307 movs r3, #7 + 8004080: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004084: e008 b.n 8004098 } else { if (mode & FA_CREATE_NEW) /* Cannot create as new file */ - 80040f2: 1dfb adds r3, r7, #7 - 80040f4: 781b ldrb r3, [r3, #0] - 80040f6: f003 0304 and.w r3, r3, #4 - 80040fa: 2b00 cmp r3, #0 - 80040fc: d002 beq.n 8004104 + 8004086: 1dfb adds r3, r7, #7 + 8004088: 781b ldrb r3, [r3, #0] + 800408a: f003 0304 and.w r3, r3, #4 + 800408e: 2b00 cmp r3, #0 + 8004090: d002 beq.n 8004098 res = FR_EXIST; - 80040fe: 2308 movs r3, #8 - 8004100: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004092: 2308 movs r3, #8 + 8004094: f887 324f strb.w r3, [r7, #591] ; 0x24f } } if (res == FR_OK && (mode & FA_CREATE_ALWAYS)) { /* Truncate it if overwrite mode */ - 8004104: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004108: 2b00 cmp r3, #0 - 800410a: f040 80af bne.w 800426c - 800410e: 1dfb adds r3, r7, #7 - 8004110: 781b ldrb r3, [r3, #0] - 8004112: f003 0308 and.w r3, r3, #8 - 8004116: 2b00 cmp r3, #0 - 8004118: f000 80a8 beq.w 800426c + 8004098: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 800409c: 2b00 cmp r3, #0 + 800409e: f040 80af bne.w 8004200 + 80040a2: 1dfb adds r3, r7, #7 + 80040a4: 781b ldrb r3, [r3, #0] + 80040a6: f003 0308 and.w r3, r3, #8 + 80040aa: 2b00 cmp r3, #0 + 80040ac: f000 80a8 beq.w 8004200 dw = GET_FATTIME(); /* Created time */ - 800411c: f7fe f910 bl 8002340 - 8004120: f8c7 0244 str.w r0, [r7, #580] ; 0x244 + 80040b0: f7fe f910 bl 80022d4 + 80040b4: f8c7 0244 str.w r0, [r7, #580] ; 0x244 ST_DWORD(dir + DIR_CrtTime, dw); - 8004124: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004128: 330e adds r3, #14 - 800412a: f8d7 2244 ldr.w r2, [r7, #580] ; 0x244 - 800412e: b2d2 uxtb r2, r2 - 8004130: 701a strb r2, [r3, #0] - 8004132: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 8004136: b29b uxth r3, r3 - 8004138: 0a1b lsrs r3, r3, #8 - 800413a: b29a uxth r2, r3 - 800413c: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004140: 330f adds r3, #15 - 8004142: b2d2 uxtb r2, r2 - 8004144: 701a strb r2, [r3, #0] - 8004146: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 800414a: 0c1a lsrs r2, r3, #16 - 800414c: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004150: 3310 adds r3, #16 - 8004152: b2d2 uxtb r2, r2 - 8004154: 701a strb r2, [r3, #0] - 8004156: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 - 800415a: 0e1a lsrs r2, r3, #24 - 800415c: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004160: 3311 adds r3, #17 - 8004162: b2d2 uxtb r2, r2 - 8004164: 701a strb r2, [r3, #0] + 80040b8: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80040bc: 330e adds r3, #14 + 80040be: f8d7 2244 ldr.w r2, [r7, #580] ; 0x244 + 80040c2: b2d2 uxtb r2, r2 + 80040c4: 701a strb r2, [r3, #0] + 80040c6: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 80040ca: b29b uxth r3, r3 + 80040cc: 0a1b lsrs r3, r3, #8 + 80040ce: b29a uxth r2, r3 + 80040d0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80040d4: 330f adds r3, #15 + 80040d6: b2d2 uxtb r2, r2 + 80040d8: 701a strb r2, [r3, #0] + 80040da: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 80040de: 0c1a lsrs r2, r3, #16 + 80040e0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80040e4: 3310 adds r3, #16 + 80040e6: b2d2 uxtb r2, r2 + 80040e8: 701a strb r2, [r3, #0] + 80040ea: f8d7 3244 ldr.w r3, [r7, #580] ; 0x244 + 80040ee: 0e1a lsrs r2, r3, #24 + 80040f0: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80040f4: 3311 adds r3, #17 + 80040f6: b2d2 uxtb r2, r2 + 80040f8: 701a strb r2, [r3, #0] dir[DIR_Attr] = 0; /* Reset attribute */ - 8004166: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 800416a: 330b adds r3, #11 - 800416c: 2200 movs r2, #0 - 800416e: 701a strb r2, [r3, #0] + 80040fa: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80040fe: 330b adds r3, #11 + 8004100: 2200 movs r2, #0 + 8004102: 701a strb r2, [r3, #0] ST_DWORD(dir + DIR_FileSize, 0);/* size = 0 */ - 8004170: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004174: 331c adds r3, #28 - 8004176: 2200 movs r2, #0 - 8004178: 701a strb r2, [r3, #0] - 800417a: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 800417e: 331d adds r3, #29 - 8004180: 2200 movs r2, #0 - 8004182: 701a strb r2, [r3, #0] - 8004184: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004188: 331e adds r3, #30 - 800418a: 2200 movs r2, #0 - 800418c: 701a strb r2, [r3, #0] - 800418e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004192: 331f adds r3, #31 - 8004194: 2200 movs r2, #0 - 8004196: 701a strb r2, [r3, #0] + 8004104: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004108: 331c adds r3, #28 + 800410a: 2200 movs r2, #0 + 800410c: 701a strb r2, [r3, #0] + 800410e: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004112: 331d adds r3, #29 + 8004114: 2200 movs r2, #0 + 8004116: 701a strb r2, [r3, #0] + 8004118: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 800411c: 331e adds r3, #30 + 800411e: 2200 movs r2, #0 + 8004120: 701a strb r2, [r3, #0] + 8004122: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 8004126: 331f adds r3, #31 + 8004128: 2200 movs r2, #0 + 800412a: 701a strb r2, [r3, #0] cl = ld_clust(dj.fs, dir); /* Get start cluster */ - 8004198: f107 0320 add.w r3, r7, #32 - 800419c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80041a0: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 - 80041a4: 4618 mov r0, r3 - 80041a6: f7ff f903 bl 80033b0 - 80041aa: f8c7 0240 str.w r0, [r7, #576] ; 0x240 + 800412c: f107 0320 add.w r3, r7, #32 + 8004130: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004134: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 + 8004138: 4618 mov r0, r3 + 800413a: f7ff f903 bl 8003344 + 800413e: f8c7 0240 str.w r0, [r7, #576] ; 0x240 st_clust(dir, 0); /* cluster = 0 */ - 80041ae: 2100 movs r1, #0 - 80041b0: f8d7 0248 ldr.w r0, [r7, #584] ; 0x248 - 80041b4: f7ff f929 bl 800340a + 8004142: 2100 movs r1, #0 + 8004144: f8d7 0248 ldr.w r0, [r7, #584] ; 0x248 + 8004148: f7ff f929 bl 800339e dj.fs->wflag = 1; - 80041b8: f107 0320 add.w r3, r7, #32 - 80041bc: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80041c0: 2201 movs r2, #1 - 80041c2: f883 2204 strb.w r2, [r3, #516] ; 0x204 + 800414c: f107 0320 add.w r3, r7, #32 + 8004150: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004154: 2201 movs r2, #1 + 8004156: f883 2204 strb.w r2, [r3, #516] ; 0x204 if (cl) { /* Remove the cluster chain if exist */ - 80041c6: f8d7 3240 ldr.w r3, [r7, #576] ; 0x240 - 80041ca: 2b00 cmp r3, #0 - 80041cc: d04e beq.n 800426c + 800415a: f8d7 3240 ldr.w r3, [r7, #576] ; 0x240 + 800415e: 2b00 cmp r3, #0 + 8004160: d04e beq.n 8004200 dw = dj.fs->winsect; - 80041ce: f107 0320 add.w r3, r7, #32 - 80041d2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80041d6: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c - 80041da: f8c7 3244 str.w r3, [r7, #580] ; 0x244 + 8004162: f107 0320 add.w r3, r7, #32 + 8004166: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800416a: f8d3 322c ldr.w r3, [r3, #556] ; 0x22c + 800416e: f8c7 3244 str.w r3, [r7, #580] ; 0x244 res = remove_chain(dj.fs, cl); - 80041de: f107 0320 add.w r3, r7, #32 - 80041e2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80041e6: f8d7 1240 ldr.w r1, [r7, #576] ; 0x240 - 80041ea: 4618 mov r0, r3 - 80041ec: f7fe fde0 bl 8002db0 - 80041f0: 4603 mov r3, r0 - 80041f2: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004172: f107 0320 add.w r3, r7, #32 + 8004176: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800417a: f8d7 1240 ldr.w r1, [r7, #576] ; 0x240 + 800417e: 4618 mov r0, r3 + 8004180: f7fe fde0 bl 8002d44 + 8004184: 4603 mov r3, r0 + 8004186: f887 324f strb.w r3, [r7, #591] ; 0x24f if (res == FR_OK) { - 80041f6: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 80041fa: 2b00 cmp r3, #0 - 80041fc: d136 bne.n 800426c + 800418a: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 800418e: 2b00 cmp r3, #0 + 8004190: d136 bne.n 8004200 dj.fs->last_clust = cl - 1; /* Reuse the cluster hole */ - 80041fe: f107 0320 add.w r3, r7, #32 - 8004202: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004206: f8d7 2240 ldr.w r2, [r7, #576] ; 0x240 - 800420a: 3a01 subs r2, #1 - 800420c: f8c3 220c str.w r2, [r3, #524] ; 0x20c + 8004192: f107 0320 add.w r3, r7, #32 + 8004196: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800419a: f8d7 2240 ldr.w r2, [r7, #576] ; 0x240 + 800419e: 3a01 subs r2, #1 + 80041a0: f8c3 220c str.w r2, [r3, #524] ; 0x20c res = move_window(dj.fs, dw); - 8004210: f107 0320 add.w r3, r7, #32 - 8004214: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004218: f8d7 1244 ldr.w r1, [r7, #580] ; 0x244 - 800421c: 4618 mov r0, r3 - 800421e: f7fe fbb0 bl 8002982 - 8004222: 4603 mov r3, r0 - 8004224: f887 324f strb.w r3, [r7, #591] ; 0x24f - 8004228: e020 b.n 800426c + 80041a4: f107 0320 add.w r3, r7, #32 + 80041a8: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80041ac: f8d7 1244 ldr.w r1, [r7, #580] ; 0x244 + 80041b0: 4618 mov r0, r3 + 80041b2: f7fe fbb0 bl 8002916 + 80041b6: 4603 mov r3, r0 + 80041b8: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80041bc: e020 b.n 8004200 } } } } else { /* Open an existing file */ if (res == FR_OK) { /* Follow succeeded */ - 800422a: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 800422e: 2b00 cmp r3, #0 - 8004230: d11c bne.n 800426c + 80041be: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 80041c2: 2b00 cmp r3, #0 + 80041c4: d11c bne.n 8004200 if (dir[DIR_Attr] & AM_DIR) { /* It is a directory */ - 8004232: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004236: 330b adds r3, #11 - 8004238: 781b ldrb r3, [r3, #0] - 800423a: f003 0310 and.w r3, r3, #16 - 800423e: 2b00 cmp r3, #0 - 8004240: d003 beq.n 800424a + 80041c6: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041ca: 330b adds r3, #11 + 80041cc: 781b ldrb r3, [r3, #0] + 80041ce: f003 0310 and.w r3, r3, #16 + 80041d2: 2b00 cmp r3, #0 + 80041d4: d003 beq.n 80041de res = FR_NO_FILE; - 8004242: 2304 movs r3, #4 - 8004244: f887 324f strb.w r3, [r7, #591] ; 0x24f - 8004248: e010 b.n 800426c + 80041d6: 2304 movs r3, #4 + 80041d8: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80041dc: e010 b.n 8004200 } else { if ((mode & FA_WRITE) && (dir[DIR_Attr] & AM_RDO)) /* R/O violation */ - 800424a: 1dfb adds r3, r7, #7 - 800424c: 781b ldrb r3, [r3, #0] - 800424e: f003 0302 and.w r3, r3, #2 - 8004252: 2b00 cmp r3, #0 - 8004254: d00a beq.n 800426c - 8004256: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 800425a: 330b adds r3, #11 - 800425c: 781b ldrb r3, [r3, #0] - 800425e: f003 0301 and.w r3, r3, #1 - 8004262: 2b00 cmp r3, #0 - 8004264: d002 beq.n 800426c + 80041de: 1dfb adds r3, r7, #7 + 80041e0: 781b ldrb r3, [r3, #0] + 80041e2: f003 0302 and.w r3, r3, #2 + 80041e6: 2b00 cmp r3, #0 + 80041e8: d00a beq.n 8004200 + 80041ea: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80041ee: 330b adds r3, #11 + 80041f0: 781b ldrb r3, [r3, #0] + 80041f2: f003 0301 and.w r3, r3, #1 + 80041f6: 2b00 cmp r3, #0 + 80041f8: d002 beq.n 8004200 res = FR_DENIED; - 8004266: 2307 movs r3, #7 - 8004268: f887 324f strb.w r3, [r7, #591] ; 0x24f + 80041fa: 2307 movs r3, #7 + 80041fc: f887 324f strb.w r3, [r7, #591] ; 0x24f } } } if (res == FR_OK) { - 800426c: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 8004270: 2b00 cmp r3, #0 - 8004272: d13d bne.n 80042f0 + 8004200: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004204: 2b00 cmp r3, #0 + 8004206: d13d bne.n 8004284 if (mode & FA_CREATE_ALWAYS) /* Set file change flag if created or overwritten */ - 8004274: 1dfb adds r3, r7, #7 - 8004276: 781b ldrb r3, [r3, #0] - 8004278: f003 0308 and.w r3, r3, #8 - 800427c: 2b00 cmp r3, #0 - 800427e: d005 beq.n 800428c + 8004208: 1dfb adds r3, r7, #7 + 800420a: 781b ldrb r3, [r3, #0] + 800420c: f003 0308 and.w r3, r3, #8 + 8004210: 2b00 cmp r3, #0 + 8004212: d005 beq.n 8004220 mode |= FA__WRITTEN; - 8004280: 1dfb adds r3, r7, #7 - 8004282: 1dfa adds r2, r7, #7 - 8004284: 7812 ldrb r2, [r2, #0] - 8004286: f042 0220 orr.w r2, r2, #32 - 800428a: 701a strb r2, [r3, #0] + 8004214: 1dfb adds r3, r7, #7 + 8004216: 1dfa adds r2, r7, #7 + 8004218: 7812 ldrb r2, [r2, #0] + 800421a: f042 0220 orr.w r2, r2, #32 + 800421e: 701a strb r2, [r3, #0] fp->dir_sect = dj.fs->winsect; /* Pointer to the directory entry */ - 800428c: f107 0320 add.w r3, r7, #32 - 8004290: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004294: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c - 8004298: f107 030c add.w r3, r7, #12 - 800429c: 681b ldr r3, [r3, #0] - 800429e: f8c3 221c str.w r2, [r3, #540] ; 0x21c + 8004220: f107 0320 add.w r3, r7, #32 + 8004224: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004228: f8d3 222c ldr.w r2, [r3, #556] ; 0x22c + 800422c: f107 030c add.w r3, r7, #12 + 8004230: 681b ldr r3, [r3, #0] + 8004232: f8c3 221c str.w r2, [r3, #540] ; 0x21c fp->dir_ptr = dir; - 80042a2: f107 030c add.w r3, r7, #12 - 80042a6: 681b ldr r3, [r3, #0] - 80042a8: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 80042ac: f8c3 2220 str.w r2, [r3, #544] ; 0x220 + 8004236: f107 030c add.w r3, r7, #12 + 800423a: 681b ldr r3, [r3, #0] + 800423c: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 8004240: f8c3 2220 str.w r2, [r3, #544] ; 0x220 #if _FS_LOCK fp->lockid = inc_lock(&dj, (mode & ~FA_READ) ? 1 : 0); - 80042b0: 1dfb adds r3, r7, #7 - 80042b2: 781b ldrb r3, [r3, #0] - 80042b4: f023 0301 bic.w r3, r3, #1 - 80042b8: 2b00 cmp r3, #0 - 80042ba: bf14 ite ne - 80042bc: 2301 movne r3, #1 - 80042be: 2300 moveq r3, #0 - 80042c0: b2db uxtb r3, r3 - 80042c2: 461a mov r2, r3 - 80042c4: f107 0320 add.w r3, r7, #32 - 80042c8: 4611 mov r1, r2 - 80042ca: 4618 mov r0, r3 - 80042cc: f7fe fa30 bl 8002730 - 80042d0: 4602 mov r2, r0 - 80042d2: f107 030c add.w r3, r7, #12 - 80042d6: 681b ldr r3, [r3, #0] - 80042d8: f8c3 2228 str.w r2, [r3, #552] ; 0x228 + 8004244: 1dfb adds r3, r7, #7 + 8004246: 781b ldrb r3, [r3, #0] + 8004248: f023 0301 bic.w r3, r3, #1 + 800424c: 2b00 cmp r3, #0 + 800424e: bf14 ite ne + 8004250: 2301 movne r3, #1 + 8004252: 2300 moveq r3, #0 + 8004254: b2db uxtb r3, r3 + 8004256: 461a mov r2, r3 + 8004258: f107 0320 add.w r3, r7, #32 + 800425c: 4611 mov r1, r2 + 800425e: 4618 mov r0, r3 + 8004260: f7fe fa30 bl 80026c4 + 8004264: 4602 mov r2, r0 + 8004266: f107 030c add.w r3, r7, #12 + 800426a: 681b ldr r3, [r3, #0] + 800426c: f8c3 2228 str.w r2, [r3, #552] ; 0x228 if (!fp->lockid) res = FR_INT_ERR; - 80042dc: f107 030c add.w r3, r7, #12 - 80042e0: 681b ldr r3, [r3, #0] - 80042e2: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 - 80042e6: 2b00 cmp r3, #0 - 80042e8: d102 bne.n 80042f0 - 80042ea: 2302 movs r3, #2 - 80042ec: f887 324f strb.w r3, [r7, #591] ; 0x24f + 8004270: f107 030c add.w r3, r7, #12 + 8004274: 681b ldr r3, [r3, #0] + 8004276: f8d3 3228 ldr.w r3, [r3, #552] ; 0x228 + 800427a: 2b00 cmp r3, #0 + 800427c: d102 bne.n 8004284 + 800427e: 2302 movs r3, #2 + 8004280: f887 324f strb.w r3, [r7, #591] ; 0x24f } } #endif FREE_BUF(); if (res == FR_OK) { - 80042f0: f897 324f ldrb.w r3, [r7, #591] ; 0x24f - 80042f4: 2b00 cmp r3, #0 - 80042f6: d15d bne.n 80043b4 + 8004284: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004288: 2b00 cmp r3, #0 + 800428a: d15d bne.n 8004348 fp->flag = mode; /* File access mode */ - 80042f8: f107 030c add.w r3, r7, #12 - 80042fc: 681b ldr r3, [r3, #0] - 80042fe: 1dfa adds r2, r7, #7 - 8004300: 7812 ldrb r2, [r2, #0] - 8004302: f883 2206 strb.w r2, [r3, #518] ; 0x206 + 800428c: f107 030c add.w r3, r7, #12 + 8004290: 681b ldr r3, [r3, #0] + 8004292: 1dfa adds r2, r7, #7 + 8004294: 7812 ldrb r2, [r2, #0] + 8004296: f883 2206 strb.w r2, [r3, #518] ; 0x206 fp->err = 0; /* Clear error flag */ + 800429a: f107 030c add.w r3, r7, #12 + 800429e: 681b ldr r3, [r3, #0] + 80042a0: 2200 movs r2, #0 + 80042a2: f883 2207 strb.w r2, [r3, #519] ; 0x207 + fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ + 80042a6: f107 0320 add.w r3, r7, #32 + 80042aa: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80042ae: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 + 80042b2: 4618 mov r0, r3 + 80042b4: f7ff f846 bl 8003344 + 80042b8: 4602 mov r2, r0 + 80042ba: f107 030c add.w r3, r7, #12 + 80042be: 681b ldr r3, [r3, #0] + 80042c0: f8c3 2210 str.w r2, [r3, #528] ; 0x210 + fp->fsize = LD_DWORD(dir + DIR_FileSize); /* File size */ + 80042c4: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80042c8: 331f adds r3, #31 + 80042ca: 781b ldrb r3, [r3, #0] + 80042cc: 061a lsls r2, r3, #24 + 80042ce: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 + 80042d2: 331e adds r3, #30 + 80042d4: 781b ldrb r3, [r3, #0] + 80042d6: 041b lsls r3, r3, #16 + 80042d8: 4313 orrs r3, r2 + 80042da: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 80042de: 321d adds r2, #29 + 80042e0: 7812 ldrb r2, [r2, #0] + 80042e2: 0212 lsls r2, r2, #8 + 80042e4: 4313 orrs r3, r2 + 80042e6: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 + 80042ea: 321c adds r2, #28 + 80042ec: 7812 ldrb r2, [r2, #0] + 80042ee: 431a orrs r2, r3 + 80042f0: f107 030c add.w r3, r7, #12 + 80042f4: 681b ldr r3, [r3, #0] + 80042f6: f8c3 220c str.w r2, [r3, #524] ; 0x20c + fp->fptr = 0; /* File pointer */ + 80042fa: f107 030c add.w r3, r7, #12 + 80042fe: 681b ldr r3, [r3, #0] + 8004300: 2200 movs r2, #0 + 8004302: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + fp->dsect = 0; 8004306: f107 030c add.w r3, r7, #12 800430a: 681b ldr r3, [r3, #0] 800430c: 2200 movs r2, #0 - 800430e: f883 2207 strb.w r2, [r3, #519] ; 0x207 - fp->sclust = ld_clust(dj.fs, dir); /* File start cluster */ - 8004312: f107 0320 add.w r3, r7, #32 - 8004316: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800431a: f8d7 1248 ldr.w r1, [r7, #584] ; 0x248 - 800431e: 4618 mov r0, r3 - 8004320: f7ff f846 bl 80033b0 - 8004324: 4602 mov r2, r0 - 8004326: f107 030c add.w r3, r7, #12 - 800432a: 681b ldr r3, [r3, #0] - 800432c: f8c3 2210 str.w r2, [r3, #528] ; 0x210 - fp->fsize = LD_DWORD(dir + DIR_FileSize); /* File size */ - 8004330: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 8004334: 331f adds r3, #31 - 8004336: 781b ldrb r3, [r3, #0] - 8004338: 061a lsls r2, r3, #24 - 800433a: f8d7 3248 ldr.w r3, [r7, #584] ; 0x248 - 800433e: 331e adds r3, #30 - 8004340: 781b ldrb r3, [r3, #0] - 8004342: 041b lsls r3, r3, #16 - 8004344: 4313 orrs r3, r2 - 8004346: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 800434a: 321d adds r2, #29 - 800434c: 7812 ldrb r2, [r2, #0] - 800434e: 0212 lsls r2, r2, #8 - 8004350: 4313 orrs r3, r2 - 8004352: f8d7 2248 ldr.w r2, [r7, #584] ; 0x248 - 8004356: 321c adds r2, #28 - 8004358: 7812 ldrb r2, [r2, #0] - 800435a: 431a orrs r2, r3 - 800435c: f107 030c add.w r3, r7, #12 - 8004360: 681b ldr r3, [r3, #0] - 8004362: f8c3 220c str.w r2, [r3, #524] ; 0x20c - fp->fptr = 0; /* File pointer */ - 8004366: f107 030c add.w r3, r7, #12 - 800436a: 681b ldr r3, [r3, #0] - 800436c: 2200 movs r2, #0 - 800436e: f8c3 2208 str.w r2, [r3, #520] ; 0x208 - fp->dsect = 0; - 8004372: f107 030c add.w r3, r7, #12 - 8004376: 681b ldr r3, [r3, #0] - 8004378: 2200 movs r2, #0 - 800437a: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 800430e: f8c3 2218 str.w r2, [r3, #536] ; 0x218 #if _USE_FASTSEEK fp->cltbl = 0; /* Normal seek mode */ - 800437e: f107 030c add.w r3, r7, #12 - 8004382: 681b ldr r3, [r3, #0] - 8004384: 2200 movs r2, #0 - 8004386: f8c3 2224 str.w r2, [r3, #548] ; 0x224 + 8004312: f107 030c add.w r3, r7, #12 + 8004316: 681b ldr r3, [r3, #0] + 8004318: 2200 movs r2, #0 + 800431a: f8c3 2224 str.w r2, [r3, #548] ; 0x224 #endif fp->fs = dj.fs; /* Validate file object */ - 800438a: f107 0320 add.w r3, r7, #32 - 800438e: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 8004392: f107 030c add.w r3, r7, #12 - 8004396: 681b ldr r3, [r3, #0] - 8004398: f8c3 2200 str.w r2, [r3, #512] ; 0x200 + 800431e: f107 0320 add.w r3, r7, #32 + 8004322: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 8004326: f107 030c add.w r3, r7, #12 + 800432a: 681b ldr r3, [r3, #0] + 800432c: f8c3 2200 str.w r2, [r3, #512] ; 0x200 fp->id = fp->fs->id; - 800439c: f107 030c add.w r3, r7, #12 - 80043a0: 681b ldr r3, [r3, #0] - 80043a2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80043a6: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 - 80043aa: f107 030c add.w r3, r7, #12 - 80043ae: 681b ldr r3, [r3, #0] - 80043b0: f8a3 2204 strh.w r2, [r3, #516] ; 0x204 + 8004330: f107 030c add.w r3, r7, #12 + 8004334: 681b ldr r3, [r3, #0] + 8004336: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 800433a: f8b3 2206 ldrh.w r2, [r3, #518] ; 0x206 + 800433e: f107 030c add.w r3, r7, #12 + 8004342: 681b ldr r3, [r3, #0] + 8004344: f8a3 2204 strh.w r2, [r3, #516] ; 0x204 } } LEAVE_FF(dj.fs, res); - 80043b4: f897 324f ldrb.w r3, [r7, #591] ; 0x24f + 8004348: f897 324f ldrb.w r3, [r7, #591] ; 0x24f } - 80043b8: 4618 mov r0, r3 - 80043ba: f507 7714 add.w r7, r7, #592 ; 0x250 - 80043be: 46bd mov sp, r7 - 80043c0: bd80 pop {r7, pc} + 800434c: 4618 mov r0, r3 + 800434e: f507 7714 add.w r7, r7, #592 ; 0x250 + 8004352: 46bd mov sp, r7 + 8004354: bd80 pop {r7, pc} -080043c2 : +08004356 : FIL* fp, /* Pointer to the file object */ void* buff, /* Pointer to data buffer */ UINT btr, /* Number of bytes to read */ UINT* br /* Pointer to number of bytes read */ ) { - 80043c2: b580 push {r7, lr} - 80043c4: b08c sub sp, #48 ; 0x30 - 80043c6: af00 add r7, sp, #0 - 80043c8: 60f8 str r0, [r7, #12] - 80043ca: 60b9 str r1, [r7, #8] - 80043cc: 607a str r2, [r7, #4] - 80043ce: 603b str r3, [r7, #0] + 8004356: b580 push {r7, lr} + 8004358: b08c sub sp, #48 ; 0x30 + 800435a: af00 add r7, sp, #0 + 800435c: 60f8 str r0, [r7, #12] + 800435e: 60b9 str r1, [r7, #8] + 8004360: 607a str r2, [r7, #4] + 8004362: 603b str r3, [r7, #0] FRESULT res; DWORD clst, sect, remain; UINT rcnt, cc; BYTE csect, *rbuff = (BYTE*)buff; - 80043d0: 68bb ldr r3, [r7, #8] - 80043d2: 623b str r3, [r7, #32] + 8004364: 68bb ldr r3, [r7, #8] + 8004366: 623b str r3, [r7, #32] *br = 0; /* Clear read byte counter */ - 80043d4: 683b ldr r3, [r7, #0] - 80043d6: 2200 movs r2, #0 - 80043d8: 601a str r2, [r3, #0] + 8004368: 683b ldr r3, [r7, #0] + 800436a: 2200 movs r2, #0 + 800436c: 601a str r2, [r3, #0] res = validate(fp); /* Check validity */ - 80043da: 68f8 ldr r0, [r7, #12] - 80043dc: f7ff fd6a bl 8003eb4 - 80043e0: 4603 mov r3, r0 - 80043e2: 77fb strb r3, [r7, #31] + 800436e: 68f8 ldr r0, [r7, #12] + 8004370: f7ff fd6a bl 8003e48 + 8004374: 4603 mov r3, r0 + 8004376: 77fb strb r3, [r7, #31] if (res != FR_OK) LEAVE_FF(fp->fs, res); - 80043e4: 7ffb ldrb r3, [r7, #31] - 80043e6: 2b00 cmp r3, #0 - 80043e8: d001 beq.n 80043ee - 80043ea: 7ffb ldrb r3, [r7, #31] - 80043ec: e150 b.n 8004690 + 8004378: 7ffb ldrb r3, [r7, #31] + 800437a: 2b00 cmp r3, #0 + 800437c: d001 beq.n 8004382 + 800437e: 7ffb ldrb r3, [r7, #31] + 8004380: e150 b.n 8004624 if (fp->err) /* Check error */ - 80043ee: 68fb ldr r3, [r7, #12] - 80043f0: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 - 80043f4: 2b00 cmp r3, #0 - 80043f6: d003 beq.n 8004400 + 8004382: 68fb ldr r3, [r7, #12] + 8004384: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 + 8004388: 2b00 cmp r3, #0 + 800438a: d003 beq.n 8004394 LEAVE_FF(fp->fs, (FRESULT)fp->err); - 80043f8: 68fb ldr r3, [r7, #12] - 80043fa: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 - 80043fe: e147 b.n 8004690 + 800438c: 68fb ldr r3, [r7, #12] + 800438e: f893 3207 ldrb.w r3, [r3, #519] ; 0x207 + 8004392: e147 b.n 8004624 if (!(fp->flag & FA_READ)) /* Check access mode */ - 8004400: 68fb ldr r3, [r7, #12] - 8004402: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 8004406: f003 0301 and.w r3, r3, #1 - 800440a: 2b00 cmp r3, #0 - 800440c: d101 bne.n 8004412 + 8004394: 68fb ldr r3, [r7, #12] + 8004396: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 800439a: f003 0301 and.w r3, r3, #1 + 800439e: 2b00 cmp r3, #0 + 80043a0: d101 bne.n 80043a6 LEAVE_FF(fp->fs, FR_DENIED); - 800440e: 2307 movs r3, #7 - 8004410: e13e b.n 8004690 + 80043a2: 2307 movs r3, #7 + 80043a4: e13e b.n 8004624 remain = fp->fsize - fp->fptr; - 8004412: 68fb ldr r3, [r7, #12] - 8004414: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c - 8004418: 68fb ldr r3, [r7, #12] - 800441a: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 800441e: 1ad3 subs r3, r2, r3 - 8004420: 61bb str r3, [r7, #24] + 80043a6: 68fb ldr r3, [r7, #12] + 80043a8: f8d3 220c ldr.w r2, [r3, #524] ; 0x20c + 80043ac: 68fb ldr r3, [r7, #12] + 80043ae: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80043b2: 1ad3 subs r3, r2, r3 + 80043b4: 61bb str r3, [r7, #24] if (btr > remain) btr = (UINT)remain; /* Truncate btr by remaining bytes */ - 8004422: 687a ldr r2, [r7, #4] - 8004424: 69bb ldr r3, [r7, #24] - 8004426: 429a cmp r2, r3 - 8004428: f240 812d bls.w 8004686 - 800442c: 69bb ldr r3, [r7, #24] - 800442e: 607b str r3, [r7, #4] + 80043b6: 687a ldr r2, [r7, #4] + 80043b8: 69bb ldr r3, [r7, #24] + 80043ba: 429a cmp r2, r3 + 80043bc: f240 812d bls.w 800461a + 80043c0: 69bb ldr r3, [r7, #24] + 80043c2: 607b str r3, [r7, #4] for ( ; btr; /* Repeat until all data read */ - 8004430: e129 b.n 8004686 + 80043c4: e129 b.n 800461a rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { if ((fp->fptr % SS(fp->fs)) == 0) { /* On the sector boundary? */ - 8004432: 68fb ldr r3, [r7, #12] - 8004434: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8004438: f3c3 0308 ubfx r3, r3, #0, #9 - 800443c: 2b00 cmp r3, #0 - 800443e: f040 80f2 bne.w 8004626 + 80043c6: 68fb ldr r3, [r7, #12] + 80043c8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80043cc: f3c3 0308 ubfx r3, r3, #0, #9 + 80043d0: 2b00 cmp r3, #0 + 80043d2: f040 80f2 bne.w 80045ba csect = (BYTE)(fp->fptr / SS(fp->fs) & (fp->fs->csize - 1)); /* Sector offset in the cluster */ - 8004442: 68fb ldr r3, [r7, #12] - 8004444: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8004448: 0a5b lsrs r3, r3, #9 - 800444a: b2da uxtb r2, r3 - 800444c: 68fb ldr r3, [r7, #12] - 800444e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004452: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8004456: 3b01 subs r3, #1 - 8004458: b2db uxtb r3, r3 - 800445a: 4013 ands r3, r2 - 800445c: 75fb strb r3, [r7, #23] + 80043d6: 68fb ldr r3, [r7, #12] + 80043d8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80043dc: 0a5b lsrs r3, r3, #9 + 80043de: b2da uxtb r2, r3 + 80043e0: 68fb ldr r3, [r7, #12] + 80043e2: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80043e6: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 80043ea: 3b01 subs r3, #1 + 80043ec: b2db uxtb r3, r3 + 80043ee: 4013 ands r3, r2 + 80043f0: 75fb strb r3, [r7, #23] if (!csect) { /* On the cluster boundary? */ - 800445e: 7dfb ldrb r3, [r7, #23] - 8004460: 2b00 cmp r3, #0 - 8004462: d139 bne.n 80044d8 + 80043f2: 7dfb ldrb r3, [r7, #23] + 80043f4: 2b00 cmp r3, #0 + 80043f6: d139 bne.n 800446c if (fp->fptr == 0) { /* On the top of the file? */ - 8004464: 68fb ldr r3, [r7, #12] - 8004466: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 800446a: 2b00 cmp r3, #0 - 800446c: d104 bne.n 8004478 + 80043f8: 68fb ldr r3, [r7, #12] + 80043fa: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80043fe: 2b00 cmp r3, #0 + 8004400: d104 bne.n 800440c clst = fp->sclust; /* Follow from the origin */ - 800446e: 68fb ldr r3, [r7, #12] - 8004470: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 - 8004474: 62fb str r3, [r7, #44] ; 0x2c - 8004476: e018 b.n 80044aa + 8004402: 68fb ldr r3, [r7, #12] + 8004404: f8d3 3210 ldr.w r3, [r3, #528] ; 0x210 + 8004408: 62fb str r3, [r7, #44] ; 0x2c + 800440a: e018 b.n 800443e } else { /* Middle or end of the file */ #if _USE_FASTSEEK if (fp->cltbl) - 8004478: 68fb ldr r3, [r7, #12] - 800447a: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 - 800447e: 2b00 cmp r3, #0 - 8004480: d008 beq.n 8004494 + 800440c: 68fb ldr r3, [r7, #12] + 800440e: f8d3 3224 ldr.w r3, [r3, #548] ; 0x224 + 8004412: 2b00 cmp r3, #0 + 8004414: d008 beq.n 8004428 clst = clmt_clust(fp, fp->fptr); /* Get cluster# from the CLMT */ - 8004482: 68fb ldr r3, [r7, #12] - 8004484: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8004488: 4619 mov r1, r3 - 800448a: 68f8 ldr r0, [r7, #12] - 800448c: f7fe fd87 bl 8002f9e - 8004490: 62f8 str r0, [r7, #44] ; 0x2c - 8004492: e00a b.n 80044aa + 8004416: 68fb ldr r3, [r7, #12] + 8004418: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 800441c: 4619 mov r1, r3 + 800441e: 68f8 ldr r0, [r7, #12] + 8004420: f7fe fd87 bl 8002f32 + 8004424: 62f8 str r0, [r7, #44] ; 0x2c + 8004426: e00a b.n 800443e else #endif clst = get_fat(fp->fs, fp->clust); /* Follow cluster chain on the FAT */ - 8004494: 68fb ldr r3, [r7, #12] - 8004496: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 800449a: 68fb ldr r3, [r7, #12] - 800449c: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80044a0: 4619 mov r1, r3 - 80044a2: 4610 mov r0, r2 - 80044a4: f7fe fabc bl 8002a20 - 80044a8: 62f8 str r0, [r7, #44] ; 0x2c + 8004428: 68fb ldr r3, [r7, #12] + 800442a: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 800442e: 68fb ldr r3, [r7, #12] + 8004430: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8004434: 4619 mov r1, r3 + 8004436: 4610 mov r0, r2 + 8004438: f7fe fabc bl 80029b4 + 800443c: 62f8 str r0, [r7, #44] ; 0x2c } if (clst < 2) ABORT(fp->fs, FR_INT_ERR); - 80044aa: 6afb ldr r3, [r7, #44] ; 0x2c - 80044ac: 2b01 cmp r3, #1 - 80044ae: d805 bhi.n 80044bc - 80044b0: 68fb ldr r3, [r7, #12] - 80044b2: 2202 movs r2, #2 - 80044b4: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80044b8: 2302 movs r3, #2 - 80044ba: e0e9 b.n 8004690 + 800443e: 6afb ldr r3, [r7, #44] ; 0x2c + 8004440: 2b01 cmp r3, #1 + 8004442: d805 bhi.n 8004450 + 8004444: 68fb ldr r3, [r7, #12] + 8004446: 2202 movs r2, #2 + 8004448: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 800444c: 2302 movs r3, #2 + 800444e: e0e9 b.n 8004624 if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR); - 80044bc: 6afb ldr r3, [r7, #44] ; 0x2c - 80044be: f1b3 3fff cmp.w r3, #4294967295 - 80044c2: d105 bne.n 80044d0 - 80044c4: 68fb ldr r3, [r7, #12] - 80044c6: 2201 movs r2, #1 - 80044c8: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80044cc: 2301 movs r3, #1 - 80044ce: e0df b.n 8004690 + 8004450: 6afb ldr r3, [r7, #44] ; 0x2c + 8004452: f1b3 3fff cmp.w r3, #4294967295 + 8004456: d105 bne.n 8004464 + 8004458: 68fb ldr r3, [r7, #12] + 800445a: 2201 movs r2, #1 + 800445c: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004460: 2301 movs r3, #1 + 8004462: e0df b.n 8004624 fp->clust = clst; /* Update current cluster */ - 80044d0: 68fb ldr r3, [r7, #12] - 80044d2: 6afa ldr r2, [r7, #44] ; 0x2c - 80044d4: f8c3 2214 str.w r2, [r3, #532] ; 0x214 + 8004464: 68fb ldr r3, [r7, #12] + 8004466: 6afa ldr r2, [r7, #44] ; 0x2c + 8004468: f8c3 2214 str.w r2, [r3, #532] ; 0x214 } sect = clust2sect(fp->fs, fp->clust); /* Get current sector */ - 80044d8: 68fb ldr r3, [r7, #12] - 80044da: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 - 80044de: 68fb ldr r3, [r7, #12] - 80044e0: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 - 80044e4: 4619 mov r1, r3 - 80044e6: 4610 mov r0, r2 - 80044e8: f7fe fa79 bl 80029de - 80044ec: 6138 str r0, [r7, #16] + 800446c: 68fb ldr r3, [r7, #12] + 800446e: f8d3 2200 ldr.w r2, [r3, #512] ; 0x200 + 8004472: 68fb ldr r3, [r7, #12] + 8004474: f8d3 3214 ldr.w r3, [r3, #532] ; 0x214 + 8004478: 4619 mov r1, r3 + 800447a: 4610 mov r0, r2 + 800447c: f7fe fa79 bl 8002972 + 8004480: 6138 str r0, [r7, #16] if (!sect) ABORT(fp->fs, FR_INT_ERR); - 80044ee: 693b ldr r3, [r7, #16] - 80044f0: 2b00 cmp r3, #0 - 80044f2: d105 bne.n 8004500 - 80044f4: 68fb ldr r3, [r7, #12] - 80044f6: 2202 movs r2, #2 - 80044f8: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80044fc: 2302 movs r3, #2 - 80044fe: e0c7 b.n 8004690 + 8004482: 693b ldr r3, [r7, #16] + 8004484: 2b00 cmp r3, #0 + 8004486: d105 bne.n 8004494 + 8004488: 68fb ldr r3, [r7, #12] + 800448a: 2202 movs r2, #2 + 800448c: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004490: 2302 movs r3, #2 + 8004492: e0c7 b.n 8004624 sect += csect; - 8004500: 7dfb ldrb r3, [r7, #23] - 8004502: 693a ldr r2, [r7, #16] - 8004504: 4413 add r3, r2 - 8004506: 613b str r3, [r7, #16] + 8004494: 7dfb ldrb r3, [r7, #23] + 8004496: 693a ldr r2, [r7, #16] + 8004498: 4413 add r3, r2 + 800449a: 613b str r3, [r7, #16] cc = btr / SS(fp->fs); /* When remaining bytes >= sector size, */ - 8004508: 687b ldr r3, [r7, #4] - 800450a: 0a5b lsrs r3, r3, #9 - 800450c: 627b str r3, [r7, #36] ; 0x24 + 800449c: 687b ldr r3, [r7, #4] + 800449e: 0a5b lsrs r3, r3, #9 + 80044a0: 627b str r3, [r7, #36] ; 0x24 if (cc) { /* Read maximum contiguous sectors directly */ - 800450e: 6a7b ldr r3, [r7, #36] ; 0x24 - 8004510: 2b00 cmp r3, #0 - 8004512: d046 beq.n 80045a2 + 80044a2: 6a7b ldr r3, [r7, #36] ; 0x24 + 80044a4: 2b00 cmp r3, #0 + 80044a6: d046 beq.n 8004536 if (csect + cc > fp->fs->csize) /* Clip at cluster boundary */ - 8004514: 7dfa ldrb r2, [r7, #23] - 8004516: 6a7b ldr r3, [r7, #36] ; 0x24 - 8004518: 4413 add r3, r2 - 800451a: 68fa ldr r2, [r7, #12] - 800451c: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 - 8004520: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 - 8004524: 4293 cmp r3, r2 - 8004526: d908 bls.n 800453a + 80044a8: 7dfa ldrb r2, [r7, #23] + 80044aa: 6a7b ldr r3, [r7, #36] ; 0x24 + 80044ac: 4413 add r3, r2 + 80044ae: 68fa ldr r2, [r7, #12] + 80044b0: f8d2 2200 ldr.w r2, [r2, #512] ; 0x200 + 80044b4: f892 2202 ldrb.w r2, [r2, #514] ; 0x202 + 80044b8: 4293 cmp r3, r2 + 80044ba: d908 bls.n 80044ce cc = fp->fs->csize - csect; - 8004528: 68fb ldr r3, [r7, #12] - 800452a: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 800452e: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 - 8004532: 461a mov r2, r3 - 8004534: 7dfb ldrb r3, [r7, #23] - 8004536: 1ad3 subs r3, r2, r3 - 8004538: 627b str r3, [r7, #36] ; 0x24 + 80044bc: 68fb ldr r3, [r7, #12] + 80044be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80044c2: f893 3202 ldrb.w r3, [r3, #514] ; 0x202 + 80044c6: 461a mov r2, r3 + 80044c8: 7dfb ldrb r3, [r7, #23] + 80044ca: 1ad3 subs r3, r2, r3 + 80044cc: 627b str r3, [r7, #36] ; 0x24 if (disk_read(fp->fs->drv, rbuff, sect, cc) != RES_OK) - 800453a: 68fb ldr r3, [r7, #12] - 800453c: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 8004540: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8004544: 6a7b ldr r3, [r7, #36] ; 0x24 - 8004546: 693a ldr r2, [r7, #16] - 8004548: 6a39 ldr r1, [r7, #32] - 800454a: f7fd ffa9 bl 80024a0 - 800454e: 4603 mov r3, r0 - 8004550: 2b00 cmp r3, #0 - 8004552: d005 beq.n 8004560 + 80044ce: 68fb ldr r3, [r7, #12] + 80044d0: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 80044d4: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 80044d8: 6a7b ldr r3, [r7, #36] ; 0x24 + 80044da: 693a ldr r2, [r7, #16] + 80044dc: 6a39 ldr r1, [r7, #32] + 80044de: f7fd ffa9 bl 8002434 + 80044e2: 4603 mov r3, r0 + 80044e4: 2b00 cmp r3, #0 + 80044e6: d005 beq.n 80044f4 ABORT(fp->fs, FR_DISK_ERR); - 8004554: 68fb ldr r3, [r7, #12] - 8004556: 2201 movs r2, #1 - 8004558: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 800455c: 2301 movs r3, #1 - 800455e: e097 b.n 8004690 + 80044e8: 68fb ldr r3, [r7, #12] + 80044ea: 2201 movs r2, #1 + 80044ec: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 80044f0: 2301 movs r3, #1 + 80044f2: e097 b.n 8004624 #if !_FS_READONLY && _FS_MINIMIZE <= 2 /* Replace one of the read sectors with cached data if it contains a dirty sector */ #if _FS_TINY if (fp->fs->wflag && fp->fs->winsect - sect < cc) mem_cpy(rbuff + ((fp->fs->winsect - sect) * SS(fp->fs)), fp->fs->win.d8, SS(fp->fs)); #else if ((fp->flag & FA__DIRTY) && fp->dsect - sect < cc) - 8004560: 68fb ldr r3, [r7, #12] - 8004562: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 8004566: f003 0340 and.w r3, r3, #64 ; 0x40 - 800456a: 2b00 cmp r3, #0 - 800456c: d015 beq.n 800459a - 800456e: 68fb ldr r3, [r7, #12] - 8004570: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8004574: 693b ldr r3, [r7, #16] - 8004576: 1ad3 subs r3, r2, r3 - 8004578: 6a7a ldr r2, [r7, #36] ; 0x24 - 800457a: 429a cmp r2, r3 - 800457c: d90d bls.n 800459a + 80044f4: 68fb ldr r3, [r7, #12] + 80044f6: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 80044fa: f003 0340 and.w r3, r3, #64 ; 0x40 + 80044fe: 2b00 cmp r3, #0 + 8004500: d015 beq.n 800452e + 8004502: 68fb ldr r3, [r7, #12] + 8004504: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 8004508: 693b ldr r3, [r7, #16] + 800450a: 1ad3 subs r3, r2, r3 + 800450c: 6a7a ldr r2, [r7, #36] ; 0x24 + 800450e: 429a cmp r2, r3 + 8004510: d90d bls.n 800452e mem_cpy(rbuff + ((fp->dsect - sect) * SS(fp->fs)), fp->buf.d8, SS(fp->fs)); - 800457e: 68fb ldr r3, [r7, #12] - 8004580: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 8004584: 693b ldr r3, [r7, #16] - 8004586: 1ad3 subs r3, r2, r3 - 8004588: 025b lsls r3, r3, #9 - 800458a: 6a3a ldr r2, [r7, #32] - 800458c: 4413 add r3, r2 - 800458e: 68f9 ldr r1, [r7, #12] - 8004590: f44f 7200 mov.w r2, #512 ; 0x200 - 8004594: 4618 mov r0, r3 - 8004596: f7fd ffc3 bl 8002520 + 8004512: 68fb ldr r3, [r7, #12] + 8004514: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 8004518: 693b ldr r3, [r7, #16] + 800451a: 1ad3 subs r3, r2, r3 + 800451c: 025b lsls r3, r3, #9 + 800451e: 6a3a ldr r2, [r7, #32] + 8004520: 4413 add r3, r2 + 8004522: 68f9 ldr r1, [r7, #12] + 8004524: f44f 7200 mov.w r2, #512 ; 0x200 + 8004528: 4618 mov r0, r3 + 800452a: f7fd ffc3 bl 80024b4 #endif #endif rcnt = SS(fp->fs) * cc; /* Number of bytes transferred */ - 800459a: 6a7b ldr r3, [r7, #36] ; 0x24 - 800459c: 025b lsls r3, r3, #9 - 800459e: 62bb str r3, [r7, #40] ; 0x28 + 800452e: 6a7b ldr r3, [r7, #36] ; 0x24 + 8004530: 025b lsls r3, r3, #9 + 8004532: 62bb str r3, [r7, #40] ; 0x28 continue; - 80045a0: e05b b.n 800465a + 8004534: e05b b.n 80045ee } #if !_FS_TINY if (fp->dsect != sect) { /* Load data sector if not in cache */ - 80045a2: 68fb ldr r3, [r7, #12] - 80045a4: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 - 80045a8: 693a ldr r2, [r7, #16] - 80045aa: 429a cmp r2, r3 - 80045ac: d037 beq.n 800461e + 8004536: 68fb ldr r3, [r7, #12] + 8004538: f8d3 3218 ldr.w r3, [r3, #536] ; 0x218 + 800453c: 693a ldr r2, [r7, #16] + 800453e: 429a cmp r2, r3 + 8004540: d037 beq.n 80045b2 #if !_FS_READONLY if (fp->flag & FA__DIRTY) { /* Write-back dirty sector cache */ - 80045ae: 68fb ldr r3, [r7, #12] - 80045b0: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 80045b4: f003 0340 and.w r3, r3, #64 ; 0x40 - 80045b8: 2b00 cmp r3, #0 - 80045ba: d01d beq.n 80045f8 + 8004542: 68fb ldr r3, [r7, #12] + 8004544: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 8004548: f003 0340 and.w r3, r3, #64 ; 0x40 + 800454c: 2b00 cmp r3, #0 + 800454e: d01d beq.n 800458c if (disk_write(fp->fs->drv, fp->buf.d8, fp->dsect, 1) != RES_OK) - 80045bc: 68fb ldr r3, [r7, #12] - 80045be: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80045c2: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 80045c6: 68f9 ldr r1, [r7, #12] - 80045c8: 68fb ldr r3, [r7, #12] - 80045ca: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 - 80045ce: 2301 movs r3, #1 - 80045d0: f7fd ff86 bl 80024e0 - 80045d4: 4603 mov r3, r0 - 80045d6: 2b00 cmp r3, #0 - 80045d8: d005 beq.n 80045e6 + 8004550: 68fb ldr r3, [r7, #12] + 8004552: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004556: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 800455a: 68f9 ldr r1, [r7, #12] + 800455c: 68fb ldr r3, [r7, #12] + 800455e: f8d3 2218 ldr.w r2, [r3, #536] ; 0x218 + 8004562: 2301 movs r3, #1 + 8004564: f7fd ff86 bl 8002474 + 8004568: 4603 mov r3, r0 + 800456a: 2b00 cmp r3, #0 + 800456c: d005 beq.n 800457a ABORT(fp->fs, FR_DISK_ERR); - 80045da: 68fb ldr r3, [r7, #12] - 80045dc: 2201 movs r2, #1 - 80045de: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 80045e2: 2301 movs r3, #1 - 80045e4: e054 b.n 8004690 + 800456e: 68fb ldr r3, [r7, #12] + 8004570: 2201 movs r2, #1 + 8004572: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 8004576: 2301 movs r3, #1 + 8004578: e054 b.n 8004624 fp->flag &= ~FA__DIRTY; - 80045e6: 68fb ldr r3, [r7, #12] - 80045e8: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 - 80045ec: f023 0340 bic.w r3, r3, #64 ; 0x40 - 80045f0: b2da uxtb r2, r3 - 80045f2: 68fb ldr r3, [r7, #12] - 80045f4: f883 2206 strb.w r2, [r3, #518] ; 0x206 + 800457a: 68fb ldr r3, [r7, #12] + 800457c: f893 3206 ldrb.w r3, [r3, #518] ; 0x206 + 8004580: f023 0340 bic.w r3, r3, #64 ; 0x40 + 8004584: b2da uxtb r2, r3 + 8004586: 68fb ldr r3, [r7, #12] + 8004588: f883 2206 strb.w r2, [r3, #518] ; 0x206 } #endif if (disk_read(fp->fs->drv, fp->buf.d8, sect, 1) != RES_OK) /* Fill sector cache */ - 80045f8: 68fb ldr r3, [r7, #12] - 80045fa: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 - 80045fe: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 - 8004602: 68f9 ldr r1, [r7, #12] - 8004604: 2301 movs r3, #1 - 8004606: 693a ldr r2, [r7, #16] - 8004608: f7fd ff4a bl 80024a0 - 800460c: 4603 mov r3, r0 - 800460e: 2b00 cmp r3, #0 - 8004610: d005 beq.n 800461e + 800458c: 68fb ldr r3, [r7, #12] + 800458e: f8d3 3200 ldr.w r3, [r3, #512] ; 0x200 + 8004592: f893 0201 ldrb.w r0, [r3, #513] ; 0x201 + 8004596: 68f9 ldr r1, [r7, #12] + 8004598: 2301 movs r3, #1 + 800459a: 693a ldr r2, [r7, #16] + 800459c: f7fd ff4a bl 8002434 + 80045a0: 4603 mov r3, r0 + 80045a2: 2b00 cmp r3, #0 + 80045a4: d005 beq.n 80045b2 ABORT(fp->fs, FR_DISK_ERR); - 8004612: 68fb ldr r3, [r7, #12] - 8004614: 2201 movs r2, #1 - 8004616: f883 2207 strb.w r2, [r3, #519] ; 0x207 - 800461a: 2301 movs r3, #1 - 800461c: e038 b.n 8004690 + 80045a6: 68fb ldr r3, [r7, #12] + 80045a8: 2201 movs r2, #1 + 80045aa: f883 2207 strb.w r2, [r3, #519] ; 0x207 + 80045ae: 2301 movs r3, #1 + 80045b0: e038 b.n 8004624 } #endif fp->dsect = sect; - 800461e: 68fb ldr r3, [r7, #12] - 8004620: 693a ldr r2, [r7, #16] - 8004622: f8c3 2218 str.w r2, [r3, #536] ; 0x218 + 80045b2: 68fb ldr r3, [r7, #12] + 80045b4: 693a ldr r2, [r7, #16] + 80045b6: f8c3 2218 str.w r2, [r3, #536] ; 0x218 } rcnt = SS(fp->fs) - ((UINT)fp->fptr % SS(fp->fs)); /* Get partial sector data from sector buffer */ - 8004626: 68fb ldr r3, [r7, #12] - 8004628: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 800462c: f3c3 0308 ubfx r3, r3, #0, #9 - 8004630: f5c3 7300 rsb r3, r3, #512 ; 0x200 - 8004634: 62bb str r3, [r7, #40] ; 0x28 + 80045ba: 68fb ldr r3, [r7, #12] + 80045bc: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80045c0: f3c3 0308 ubfx r3, r3, #0, #9 + 80045c4: f5c3 7300 rsb r3, r3, #512 ; 0x200 + 80045c8: 62bb str r3, [r7, #40] ; 0x28 if (rcnt > btr) rcnt = btr; - 8004636: 6aba ldr r2, [r7, #40] ; 0x28 - 8004638: 687b ldr r3, [r7, #4] - 800463a: 429a cmp r2, r3 - 800463c: d901 bls.n 8004642 - 800463e: 687b ldr r3, [r7, #4] - 8004640: 62bb str r3, [r7, #40] ; 0x28 + 80045ca: 6aba ldr r2, [r7, #40] ; 0x28 + 80045cc: 687b ldr r3, [r7, #4] + 80045ce: 429a cmp r2, r3 + 80045d0: d901 bls.n 80045d6 + 80045d2: 687b ldr r3, [r7, #4] + 80045d4: 62bb str r3, [r7, #40] ; 0x28 #if _FS_TINY if (move_window(fp->fs, fp->dsect) != FR_OK) /* Move sector window */ ABORT(fp->fs, FR_DISK_ERR); mem_cpy(rbuff, &fp->fs->win.d8[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ #else mem_cpy(rbuff, &fp->buf.d8[fp->fptr % SS(fp->fs)], rcnt); /* Pick partial sector */ - 8004642: 68fb ldr r3, [r7, #12] - 8004644: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 - 8004648: f3c3 0308 ubfx r3, r3, #0, #9 - 800464c: 68fa ldr r2, [r7, #12] - 800464e: 4413 add r3, r2 - 8004650: 6aba ldr r2, [r7, #40] ; 0x28 - 8004652: 4619 mov r1, r3 - 8004654: 6a38 ldr r0, [r7, #32] - 8004656: f7fd ff63 bl 8002520 + 80045d6: 68fb ldr r3, [r7, #12] + 80045d8: f8d3 3208 ldr.w r3, [r3, #520] ; 0x208 + 80045dc: f3c3 0308 ubfx r3, r3, #0, #9 + 80045e0: 68fa ldr r2, [r7, #12] + 80045e2: 4413 add r3, r2 + 80045e4: 6aba ldr r2, [r7, #40] ; 0x28 + 80045e6: 4619 mov r1, r3 + 80045e8: 6a38 ldr r0, [r7, #32] + 80045ea: f7fd ff63 bl 80024b4 rbuff += rcnt, fp->fptr += rcnt, *br += rcnt, btr -= rcnt) { - 800465a: 6a3a ldr r2, [r7, #32] - 800465c: 6abb ldr r3, [r7, #40] ; 0x28 - 800465e: 4413 add r3, r2 - 8004660: 623b str r3, [r7, #32] - 8004662: 68fb ldr r3, [r7, #12] - 8004664: f8d3 2208 ldr.w r2, [r3, #520] ; 0x208 - 8004668: 6abb ldr r3, [r7, #40] ; 0x28 - 800466a: 441a add r2, r3 - 800466c: 68fb ldr r3, [r7, #12] - 800466e: f8c3 2208 str.w r2, [r3, #520] ; 0x208 - 8004672: 683b ldr r3, [r7, #0] - 8004674: 681a ldr r2, [r3, #0] - 8004676: 6abb ldr r3, [r7, #40] ; 0x28 - 8004678: 441a add r2, r3 - 800467a: 683b ldr r3, [r7, #0] - 800467c: 601a str r2, [r3, #0] - 800467e: 687a ldr r2, [r7, #4] - 8004680: 6abb ldr r3, [r7, #40] ; 0x28 - 8004682: 1ad3 subs r3, r2, r3 - 8004684: 607b str r3, [r7, #4] + 80045ee: 6a3a ldr r2, [r7, #32] + 80045f0: 6abb ldr r3, [r7, #40] ; 0x28 + 80045f2: 4413 add r3, r2 + 80045f4: 623b str r3, [r7, #32] + 80045f6: 68fb ldr r3, [r7, #12] + 80045f8: f8d3 2208 ldr.w r2, [r3, #520] ; 0x208 + 80045fc: 6abb ldr r3, [r7, #40] ; 0x28 + 80045fe: 441a add r2, r3 + 8004600: 68fb ldr r3, [r7, #12] + 8004602: f8c3 2208 str.w r2, [r3, #520] ; 0x208 + 8004606: 683b ldr r3, [r7, #0] + 8004608: 681a ldr r2, [r3, #0] + 800460a: 6abb ldr r3, [r7, #40] ; 0x28 + 800460c: 441a add r2, r3 + 800460e: 683b ldr r3, [r7, #0] + 8004610: 601a str r2, [r3, #0] + 8004612: 687a ldr r2, [r7, #4] + 8004614: 6abb ldr r3, [r7, #40] ; 0x28 + 8004616: 1ad3 subs r3, r2, r3 + 8004618: 607b str r3, [r7, #4] for ( ; btr; /* Repeat until all data read */ - 8004686: 687b ldr r3, [r7, #4] - 8004688: 2b00 cmp r3, #0 - 800468a: f47f aed2 bne.w 8004432 + 800461a: 687b ldr r3, [r7, #4] + 800461c: 2b00 cmp r3, #0 + 800461e: f47f aed2 bne.w 80043c6 #endif } LEAVE_FF(fp->fs, FR_OK); - 800468e: 2300 movs r3, #0 + 8004622: 2300 movs r3, #0 } - 8004690: 4618 mov r0, r3 - 8004692: 3730 adds r7, #48 ; 0x30 - 8004694: 46bd mov sp, r7 - 8004696: bd80 pop {r7, pc} + 8004624: 4618 mov r0, r3 + 8004626: 3730 adds r7, #48 ; 0x30 + 8004628: 46bd mov sp, r7 + 800462a: bd80 pop {r7, pc} -08004698 : +0800462c : * @param lun : only used for USB Key Disk to add multi-lun management else the paramter must be equal to 0 * @retval Returns 0 in case of success, otherwise 1. */ uint8_t FATFS_LinkDriverEx(Diskio_drvTypeDef *drv, char *path, uint8_t lun) { - 8004698: b480 push {r7} - 800469a: b087 sub sp, #28 - 800469c: af00 add r7, sp, #0 - 800469e: 60f8 str r0, [r7, #12] - 80046a0: 60b9 str r1, [r7, #8] - 80046a2: 4613 mov r3, r2 - 80046a4: 71fb strb r3, [r7, #7] + 800462c: b480 push {r7} + 800462e: b087 sub sp, #28 + 8004630: af00 add r7, sp, #0 + 8004632: 60f8 str r0, [r7, #12] + 8004634: 60b9 str r1, [r7, #8] + 8004636: 4613 mov r3, r2 + 8004638: 71fb strb r3, [r7, #7] uint8_t ret = 1; - 80046a6: 2301 movs r3, #1 - 80046a8: 75fb strb r3, [r7, #23] + 800463a: 2301 movs r3, #1 + 800463c: 75fb strb r3, [r7, #23] uint8_t DiskNum = 0; - 80046aa: 2300 movs r3, #0 - 80046ac: 75bb strb r3, [r7, #22] + 800463e: 2300 movs r3, #0 + 8004640: 75bb strb r3, [r7, #22] if(disk.nbr <= _VOLUMES) - 80046ae: 4b1e ldr r3, [pc, #120] ; (8004728 ) - 80046b0: 7a5b ldrb r3, [r3, #9] - 80046b2: b2db uxtb r3, r3 - 80046b4: 2b01 cmp r3, #1 - 80046b6: d831 bhi.n 800471c + 8004642: 4b1e ldr r3, [pc, #120] ; (80046bc ) + 8004644: 7a5b ldrb r3, [r3, #9] + 8004646: b2db uxtb r3, r3 + 8004648: 2b01 cmp r3, #1 + 800464a: d831 bhi.n 80046b0 { disk.is_initialized[disk.nbr] = 0; - 80046b8: 4b1b ldr r3, [pc, #108] ; (8004728 ) - 80046ba: 7a5b ldrb r3, [r3, #9] - 80046bc: b2db uxtb r3, r3 - 80046be: 461a mov r2, r3 - 80046c0: 4b19 ldr r3, [pc, #100] ; (8004728 ) - 80046c2: 2100 movs r1, #0 - 80046c4: 5499 strb r1, [r3, r2] + 800464c: 4b1b ldr r3, [pc, #108] ; (80046bc ) + 800464e: 7a5b ldrb r3, [r3, #9] + 8004650: b2db uxtb r3, r3 + 8004652: 461a mov r2, r3 + 8004654: 4b19 ldr r3, [pc, #100] ; (80046bc ) + 8004656: 2100 movs r1, #0 + 8004658: 5499 strb r1, [r3, r2] disk.drv[disk.nbr] = drv; - 80046c6: 4b18 ldr r3, [pc, #96] ; (8004728 ) - 80046c8: 7a5b ldrb r3, [r3, #9] - 80046ca: b2db uxtb r3, r3 - 80046cc: 4a16 ldr r2, [pc, #88] ; (8004728 ) - 80046ce: 009b lsls r3, r3, #2 - 80046d0: 4413 add r3, r2 - 80046d2: 68fa ldr r2, [r7, #12] - 80046d4: 605a str r2, [r3, #4] + 800465a: 4b18 ldr r3, [pc, #96] ; (80046bc ) + 800465c: 7a5b ldrb r3, [r3, #9] + 800465e: b2db uxtb r3, r3 + 8004660: 4a16 ldr r2, [pc, #88] ; (80046bc ) + 8004662: 009b lsls r3, r3, #2 + 8004664: 4413 add r3, r2 + 8004666: 68fa ldr r2, [r7, #12] + 8004668: 605a str r2, [r3, #4] disk.lun[disk.nbr] = lun; - 80046d6: 4b14 ldr r3, [pc, #80] ; (8004728 ) - 80046d8: 7a5b ldrb r3, [r3, #9] - 80046da: b2db uxtb r3, r3 - 80046dc: 461a mov r2, r3 - 80046de: 4b12 ldr r3, [pc, #72] ; (8004728 ) - 80046e0: 4413 add r3, r2 - 80046e2: 79fa ldrb r2, [r7, #7] - 80046e4: 721a strb r2, [r3, #8] + 800466a: 4b14 ldr r3, [pc, #80] ; (80046bc ) + 800466c: 7a5b ldrb r3, [r3, #9] + 800466e: b2db uxtb r3, r3 + 8004670: 461a mov r2, r3 + 8004672: 4b12 ldr r3, [pc, #72] ; (80046bc ) + 8004674: 4413 add r3, r2 + 8004676: 79fa ldrb r2, [r7, #7] + 8004678: 721a strb r2, [r3, #8] DiskNum = disk.nbr++; - 80046e6: 4b10 ldr r3, [pc, #64] ; (8004728 ) - 80046e8: 7a5b ldrb r3, [r3, #9] - 80046ea: b2db uxtb r3, r3 - 80046ec: 1c5a adds r2, r3, #1 - 80046ee: b2d1 uxtb r1, r2 - 80046f0: 4a0d ldr r2, [pc, #52] ; (8004728 ) - 80046f2: 7251 strb r1, [r2, #9] - 80046f4: 75bb strb r3, [r7, #22] + 800467a: 4b10 ldr r3, [pc, #64] ; (80046bc ) + 800467c: 7a5b ldrb r3, [r3, #9] + 800467e: b2db uxtb r3, r3 + 8004680: 1c5a adds r2, r3, #1 + 8004682: b2d1 uxtb r1, r2 + 8004684: 4a0d ldr r2, [pc, #52] ; (80046bc ) + 8004686: 7251 strb r1, [r2, #9] + 8004688: 75bb strb r3, [r7, #22] path[0] = DiskNum + '0'; - 80046f6: 7dbb ldrb r3, [r7, #22] - 80046f8: 3330 adds r3, #48 ; 0x30 - 80046fa: b2da uxtb r2, r3 - 80046fc: 68bb ldr r3, [r7, #8] - 80046fe: 701a strb r2, [r3, #0] + 800468a: 7dbb ldrb r3, [r7, #22] + 800468c: 3330 adds r3, #48 ; 0x30 + 800468e: b2da uxtb r2, r3 + 8004690: 68bb ldr r3, [r7, #8] + 8004692: 701a strb r2, [r3, #0] path[1] = ':'; - 8004700: 68bb ldr r3, [r7, #8] - 8004702: 3301 adds r3, #1 - 8004704: 223a movs r2, #58 ; 0x3a - 8004706: 701a strb r2, [r3, #0] + 8004694: 68bb ldr r3, [r7, #8] + 8004696: 3301 adds r3, #1 + 8004698: 223a movs r2, #58 ; 0x3a + 800469a: 701a strb r2, [r3, #0] path[2] = '/'; - 8004708: 68bb ldr r3, [r7, #8] - 800470a: 3302 adds r3, #2 - 800470c: 222f movs r2, #47 ; 0x2f - 800470e: 701a strb r2, [r3, #0] + 800469c: 68bb ldr r3, [r7, #8] + 800469e: 3302 adds r3, #2 + 80046a0: 222f movs r2, #47 ; 0x2f + 80046a2: 701a strb r2, [r3, #0] path[3] = 0; - 8004710: 68bb ldr r3, [r7, #8] - 8004712: 3303 adds r3, #3 - 8004714: 2200 movs r2, #0 - 8004716: 701a strb r2, [r3, #0] + 80046a4: 68bb ldr r3, [r7, #8] + 80046a6: 3303 adds r3, #3 + 80046a8: 2200 movs r2, #0 + 80046aa: 701a strb r2, [r3, #0] ret = 0; - 8004718: 2300 movs r3, #0 - 800471a: 75fb strb r3, [r7, #23] + 80046ac: 2300 movs r3, #0 + 80046ae: 75fb strb r3, [r7, #23] } return ret; - 800471c: 7dfb ldrb r3, [r7, #23] + 80046b0: 7dfb ldrb r3, [r7, #23] } - 800471e: 4618 mov r0, r3 - 8004720: 371c adds r7, #28 - 8004722: 46bd mov sp, r7 - 8004724: bc80 pop {r7} - 8004726: 4770 bx lr - 8004728: 200000cc .word 0x200000cc + 80046b2: 4618 mov r0, r3 + 80046b4: 371c adds r7, #28 + 80046b6: 46bd mov sp, r7 + 80046b8: bc80 pop {r7} + 80046ba: 4770 bx lr + 80046bc: 20000064 .word 0x20000064 -0800472c : +080046c0 : * @param drv: pointer to the disk IO Driver structure * @param path: pointer to the logical drive path * @retval Returns 0 in case of success, otherwise 1. */ uint8_t FATFS_LinkDriver(Diskio_drvTypeDef *drv, char *path) { - 800472c: b580 push {r7, lr} - 800472e: b082 sub sp, #8 - 8004730: af00 add r7, sp, #0 - 8004732: 6078 str r0, [r7, #4] - 8004734: 6039 str r1, [r7, #0] + 80046c0: b580 push {r7, lr} + 80046c2: b082 sub sp, #8 + 80046c4: af00 add r7, sp, #0 + 80046c6: 6078 str r0, [r7, #4] + 80046c8: 6039 str r1, [r7, #0] return FATFS_LinkDriverEx(drv, path, 0); - 8004736: 2200 movs r2, #0 - 8004738: 6839 ldr r1, [r7, #0] - 800473a: 6878 ldr r0, [r7, #4] - 800473c: f7ff ffac bl 8004698 - 8004740: 4603 mov r3, r0 + 80046ca: 2200 movs r2, #0 + 80046cc: 6839 ldr r1, [r7, #0] + 80046ce: 6878 ldr r0, [r7, #4] + 80046d0: f7ff ffac bl 800462c + 80046d4: 4603 mov r3, r0 } - 8004742: 4618 mov r0, r3 - 8004744: 3708 adds r7, #8 - 8004746: 46bd mov sp, r7 - 8004748: bd80 pop {r7, pc} + 80046d6: 4618 mov r0, r3 + 80046d8: 3708 adds r7, #8 + 80046da: 46bd mov sp, r7 + 80046dc: bd80 pop {r7, pc} ... -0800474c : +080046e0 : #include "fatfs.h" #include "fatfs_sd.h" FATFS SD; int my_main() { - 800474c: b580 push {r7, lr} - 800474e: f5ad 7d26 sub.w sp, sp, #664 ; 0x298 - 8004752: af04 add r7, sp, #16 + 80046e0: b580 push {r7, lr} + 80046e2: f5ad 7d36 sub.w sp, sp, #728 ; 0x2d8 + 80046e6: af04 add r7, sp, #16 uint8_t res; FIL fil; - char fil_buff[64]; - uint16_t br=0; - 8004754: f107 0316 add.w r3, r7, #22 - 8004758: 2200 movs r2, #0 - 800475a: 801a strh r2, [r3, #0] + char fil_buff[128]; + uint16_t br=128; + 80046e8: f107 0316 add.w r3, r7, #22 + 80046ec: 2280 movs r2, #128 ; 0x80 + 80046ee: 801a strh r2, [r3, #0] char str[16]; LCD_BL(0); - 800475c: 2200 movs r2, #0 - 800475e: 2101 movs r1, #1 - 8004760: 4825 ldr r0, [pc, #148] ; (80047f8 ) - 8004762: f7fc fb3f bl 8000de4 + 80046f0: 2200 movs r2, #0 + 80046f2: 2101 movs r1, #1 + 80046f4: 4822 ldr r0, [pc, #136] ; (8004780 ) + 80046f6: f7fc fb3f bl 8000d78 LCDx_Init(); - 8004766: f000 ffdb bl 8005720 + 80046fa: f000 ffd3 bl 80056a4 LCD_Clear(GRAY); - 800476a: f248 4030 movw r0, #33840 ; 0x8430 - 800476e: f001 f97d bl 8005a6c + 80046fe: f248 4030 movw r0, #33840 ; 0x8430 + 8004702: f001 f975 bl 80059f0 if(font_init()) - 8004772: f001 f9cd bl 8005b10 - 8004776: 4603 mov r3, r0 - 8004778: 2b00 cmp r3, #0 - 800477a: d00c beq.n 8004796 + 8004706: f001 f9c5 bl 8005a94 + 800470a: 4603 mov r3, r0 + 800470c: 2b00 cmp r3, #0 + 800470e: d00c beq.n 800472a { LCD_ShowString(0,16,(uint8_t *)"erro",16,RED,BLUE,64); - 800477c: 2340 movs r3, #64 ; 0x40 - 800477e: 9302 str r3, [sp, #8] - 8004780: 231f movs r3, #31 - 8004782: 9301 str r3, [sp, #4] - 8004784: f44f 4378 mov.w r3, #63488 ; 0xf800 - 8004788: 9300 str r3, [sp, #0] - 800478a: 2310 movs r3, #16 - 800478c: 4a1b ldr r2, [pc, #108] ; (80047fc ) - 800478e: 2110 movs r1, #16 - 8004790: 2000 movs r0, #0 - 8004792: f001 fb75 bl 8005e80 + 8004710: 2340 movs r3, #64 ; 0x40 + 8004712: 9302 str r3, [sp, #8] + 8004714: 231f movs r3, #31 + 8004716: 9301 str r3, [sp, #4] + 8004718: f44f 4378 mov.w r3, #63488 ; 0xf800 + 800471c: 9300 str r3, [sp, #0] + 800471e: 2310 movs r3, #16 + 8004720: 4a18 ldr r2, [pc, #96] ; (8004784 ) + 8004722: 2110 movs r1, #16 + 8004724: 2000 movs r0, #0 + 8004726: f001 fb6d bl 8005e04 } f_mount(&SD,"0:",1); - 8004796: 2201 movs r2, #1 - 8004798: 4919 ldr r1, [pc, #100] ; (8004800 ) - 800479a: 481a ldr r0, [pc, #104] ; (8004804 ) - 800479c: f7ff fbbe bl 8003f1c + 800472a: 2201 movs r2, #1 + 800472c: 4916 ldr r1, [pc, #88] ; (8004788 ) + 800472e: 4817 ldr r0, [pc, #92] ; (800478c ) + 8004730: f7ff fbbe bl 8003eb0 res=f_open(&fil,"0:/demo.txt",FA_READ); - 80047a0: f107 0358 add.w r3, r7, #88 ; 0x58 - 80047a4: 2201 movs r2, #1 - 80047a6: 4918 ldr r1, [pc, #96] ; (8004808 ) - 80047a8: 4618 mov r0, r3 - 80047aa: f7ff fbff bl 8003fac - 80047ae: 4603 mov r3, r0 - 80047b0: f887 3287 strb.w r3, [r7, #647] ; 0x287 - res=f_read(&fil,fil_buff,32,(UINT*)&br); - 80047b4: f107 0316 add.w r3, r7, #22 - 80047b8: f107 0118 add.w r1, r7, #24 - 80047bc: f107 0058 add.w r0, r7, #88 ; 0x58 - 80047c0: 2220 movs r2, #32 - 80047c2: f7ff fdfe bl 80043c2 - 80047c6: 4603 mov r3, r0 - 80047c8: f887 3287 strb.w r3, [r7, #647] ; 0x287 - sprintf(str,"%s\0\0",fil_buff); - 80047cc: f107 0218 add.w r2, r7, #24 - 80047d0: 1d3b adds r3, r7, #4 - 80047d2: 490e ldr r1, [pc, #56] ; (800480c ) - 80047d4: 4618 mov r0, r3 - 80047d6: f001 fbf1 bl 8005fbc - LCD_ShowString(0,0,str,16,RED,BLUE,64); - 80047da: 1d3a adds r2, r7, #4 - 80047dc: 2340 movs r3, #64 ; 0x40 - 80047de: 9302 str r3, [sp, #8] - 80047e0: 231f movs r3, #31 - 80047e2: 9301 str r3, [sp, #4] - 80047e4: f44f 4378 mov.w r3, #63488 ; 0xf800 - 80047e8: 9300 str r3, [sp, #0] - 80047ea: 2310 movs r3, #16 - 80047ec: 2100 movs r1, #0 - 80047ee: 2000 movs r0, #0 - 80047f0: f001 fb46 bl 8005e80 + 8004734: f107 0398 add.w r3, r7, #152 ; 0x98 + 8004738: 2201 movs r2, #1 + 800473a: 4915 ldr r1, [pc, #84] ; (8004790 ) + 800473c: 4618 mov r0, r3 + 800473e: f7ff fbff bl 8003f40 + 8004742: 4603 mov r3, r0 + 8004744: f887 32c7 strb.w r3, [r7, #711] ; 0x2c7 + res=f_read(&fil,fil_buff,64,(UINT*)&br); + 8004748: f107 0316 add.w r3, r7, #22 + 800474c: f107 0118 add.w r1, r7, #24 + 8004750: f107 0098 add.w r0, r7, #152 ; 0x98 + 8004754: 2240 movs r2, #64 ; 0x40 + 8004756: f7ff fdfe bl 8004356 + 800475a: 4603 mov r3, r0 + 800475c: f887 32c7 strb.w r3, [r7, #711] ; 0x2c7 + LCD_ShowString(0,0,fil_buff,16,RED,BLUE,64); + 8004760: f107 0218 add.w r2, r7, #24 + 8004764: 2340 movs r3, #64 ; 0x40 + 8004766: 9302 str r3, [sp, #8] + 8004768: 231f movs r3, #31 + 800476a: 9301 str r3, [sp, #4] + 800476c: f44f 4378 mov.w r3, #63488 ; 0xf800 + 8004770: 9300 str r3, [sp, #0] + 8004772: 2310 movs r3, #16 + 8004774: 2100 movs r1, #0 + 8004776: 2000 movs r0, #0 + 8004778: f001 fb44 bl 8005e04 sprintf(str,"%02x\n%02x\n%02x\n%02x\n%02x",ftinfo.fontok,ftinfo.ugbkaddr,ftinfo.ugbksize,ftinfo.f12addr,ftinfo.gbk12size); LCD_ShowString(0,0,str,12,RED,BLUE); LCD_ShowString(0,100,"163165sdf°¢¶û·¨",12,RED,BLUE); */ while(1) - 80047f4: e7fe b.n 80047f4 - 80047f6: bf00 nop - 80047f8: 40010c00 .word 0x40010c00 - 80047fc: 0800689c .word 0x0800689c - 8004800: 080068a4 .word 0x080068a4 - 8004804: 200005ec .word 0x200005ec - 8004808: 080068a8 .word 0x080068a8 - 800480c: 080068b4 .word 0x080068b4 + 800477c: e7fe b.n 800477c + 800477e: bf00 nop + 8004780: 40010c00 .word 0x40010c00 + 8004784: 08005fa0 .word 0x08005fa0 + 8004788: 08005fa8 .word 0x08005fa8 + 800478c: 2000057c .word 0x2000057c + 8004790: 08005fac .word 0x08005fac -08004810 : +08004794 : //ReadAddr:¿ªÊ¼¶ÁÈ¡µÄµØÖ·(24bit) //NumByteToRead:Òª¶ÁÈ¡µÄ×Ö½ÚÊý(×î´ó65535) void W25QXX_Read(uint8_t* pBuffer,uint32_t ReadAddr,uint16_t NumByteToRead) { - 8004810: b580 push {r7, lr} - 8004812: b086 sub sp, #24 - 8004814: af00 add r7, sp, #0 - 8004816: 60f8 str r0, [r7, #12] - 8004818: 60b9 str r1, [r7, #8] - 800481a: 4613 mov r3, r2 - 800481c: 80fb strh r3, [r7, #6] + 8004794: b580 push {r7, lr} + 8004796: b086 sub sp, #24 + 8004798: af00 add r7, sp, #0 + 800479a: 60f8 str r0, [r7, #12] + 800479c: 60b9 str r1, [r7, #8] + 800479e: 4613 mov r3, r2 + 80047a0: 80fb strh r3, [r7, #6] unsigned char buff[4]; HAL_GPIO_WritePin(FLASH_E_GPIO_Port,FLASH_E_Pin,0); - 800481e: 2200 movs r2, #0 - 8004820: f44f 5180 mov.w r1, #4096 ; 0x1000 - 8004824: 4813 ldr r0, [pc, #76] ; (8004874 ) - 8004826: f7fc fadd bl 8000de4 + 80047a2: 2200 movs r2, #0 + 80047a4: f44f 5180 mov.w r1, #4096 ; 0x1000 + 80047a8: 4813 ldr r0, [pc, #76] ; (80047f8 ) + 80047aa: f7fc fae5 bl 8000d78 buff[0]=W25X_ReadData; - 800482a: 2303 movs r3, #3 - 800482c: 753b strb r3, [r7, #20] + 80047ae: 2303 movs r3, #3 + 80047b0: 753b strb r3, [r7, #20] buff[1]=(uint8_t)((ReadAddr)>>16); - 800482e: 68bb ldr r3, [r7, #8] - 8004830: 0c1b lsrs r3, r3, #16 - 8004832: b2db uxtb r3, r3 - 8004834: 757b strb r3, [r7, #21] + 80047b2: 68bb ldr r3, [r7, #8] + 80047b4: 0c1b lsrs r3, r3, #16 + 80047b6: b2db uxtb r3, r3 + 80047b8: 757b strb r3, [r7, #21] buff[2]=(uint8_t)((ReadAddr)>>8); - 8004836: 68bb ldr r3, [r7, #8] - 8004838: 0a1b lsrs r3, r3, #8 - 800483a: b2db uxtb r3, r3 - 800483c: 75bb strb r3, [r7, #22] + 80047ba: 68bb ldr r3, [r7, #8] + 80047bc: 0a1b lsrs r3, r3, #8 + 80047be: b2db uxtb r3, r3 + 80047c0: 75bb strb r3, [r7, #22] buff[3]=(uint8_t)ReadAddr; - 800483e: 68bb ldr r3, [r7, #8] - 8004840: b2db uxtb r3, r3 - 8004842: 75fb strb r3, [r7, #23] + 80047c2: 68bb ldr r3, [r7, #8] + 80047c4: b2db uxtb r3, r3 + 80047c6: 75fb strb r3, [r7, #23] HAL_SPI_Transmit(&hspi2,buff,4,100); //·¢ËͶÁÈ¡ÃüÁî - 8004844: f107 0114 add.w r1, r7, #20 - 8004848: 2364 movs r3, #100 ; 0x64 - 800484a: 2204 movs r2, #4 - 800484c: 480a ldr r0, [pc, #40] ; (8004878 ) - 800484e: f7fc ff4d bl 80016ec + 80047c8: f107 0114 add.w r1, r7, #20 + 80047cc: 2364 movs r3, #100 ; 0x64 + 80047ce: 2204 movs r2, #4 + 80047d0: 480a ldr r0, [pc, #40] ; (80047fc ) + 80047d2: f7fc ff55 bl 8001680 HAL_SPI_Receive(&hspi2,pBuffer,NumByteToRead,100); - 8004852: 88fa ldrh r2, [r7, #6] - 8004854: 2364 movs r3, #100 ; 0x64 - 8004856: 68f9 ldr r1, [r7, #12] - 8004858: 4807 ldr r0, [pc, #28] ; (8004878 ) - 800485a: f7fd f883 bl 8001964 + 80047d6: 88fa ldrh r2, [r7, #6] + 80047d8: 2364 movs r3, #100 ; 0x64 + 80047da: 68f9 ldr r1, [r7, #12] + 80047dc: 4807 ldr r0, [pc, #28] ; (80047fc ) + 80047de: f7fd f88b bl 80018f8 HAL_GPIO_WritePin(FLASH_E_GPIO_Port,FLASH_E_Pin,1); - 800485e: 2201 movs r2, #1 - 8004860: f44f 5180 mov.w r1, #4096 ; 0x1000 - 8004864: 4803 ldr r0, [pc, #12] ; (8004874 ) - 8004866: f7fc fabd bl 8000de4 + 80047e2: 2201 movs r2, #1 + 80047e4: f44f 5180 mov.w r1, #4096 ; 0x1000 + 80047e8: 4803 ldr r0, [pc, #12] ; (80047f8 ) + 80047ea: f7fc fac5 bl 8000d78 } - 800486a: bf00 nop - 800486c: 3718 adds r7, #24 - 800486e: 46bd mov sp, r7 - 8004870: bd80 pop {r7, pc} - 8004872: bf00 nop - 8004874: 40010c00 .word 0x40010c00 - 8004878: 200000e4 .word 0x200000e4 + 80047ee: bf00 nop + 80047f0: 3718 adds r7, #24 + 80047f2: 46bd mov sp, r7 + 80047f4: bd80 pop {r7, pc} + 80047f6: bf00 nop + 80047f8: 40010c00 .word 0x40010c00 + 80047fc: 20000074 .word 0x20000074 -0800487c : Timer2--; } /* SPI Chip Select */ static void SELECT(void) { - 800487c: b580 push {r7, lr} - 800487e: af00 add r7, sp, #0 + 8004800: b580 push {r7, lr} + 8004802: af00 add r7, sp, #0 HAL_GPIO_WritePin(SD_CS_GPIO_Port, SD_CS_Pin, GPIO_PIN_RESET); - 8004880: 2200 movs r2, #0 - 8004882: 2104 movs r1, #4 - 8004884: 4802 ldr r0, [pc, #8] ; (8004890 ) - 8004886: f7fc faad bl 8000de4 + 8004804: 2200 movs r2, #0 + 8004806: 2104 movs r1, #4 + 8004808: 4802 ldr r0, [pc, #8] ; (8004814 ) + 800480a: f7fc fab5 bl 8000d78 } - 800488a: bf00 nop - 800488c: bd80 pop {r7, pc} - 800488e: bf00 nop - 8004890: 40011400 .word 0x40011400 + 800480e: bf00 nop + 8004810: bd80 pop {r7, pc} + 8004812: bf00 nop + 8004814: 40011400 .word 0x40011400 -08004894 : +08004818 : /* SPI Chip Deselect */ static void DESELECT(void) { - 8004894: b580 push {r7, lr} - 8004896: af00 add r7, sp, #0 + 8004818: b580 push {r7, lr} + 800481a: af00 add r7, sp, #0 HAL_GPIO_WritePin(SD_CS_GPIO_Port, SD_CS_Pin, GPIO_PIN_SET); - 8004898: 2201 movs r2, #1 - 800489a: 2104 movs r1, #4 - 800489c: 4802 ldr r0, [pc, #8] ; (80048a8 ) - 800489e: f7fc faa1 bl 8000de4 + 800481c: 2201 movs r2, #1 + 800481e: 2104 movs r1, #4 + 8004820: 4802 ldr r0, [pc, #8] ; (800482c ) + 8004822: f7fc faa9 bl 8000d78 } - 80048a2: bf00 nop - 80048a4: bd80 pop {r7, pc} - 80048a6: bf00 nop - 80048a8: 40011400 .word 0x40011400 + 8004826: bf00 nop + 8004828: bd80 pop {r7, pc} + 800482a: bf00 nop + 800482c: 40011400 .word 0x40011400 -080048ac : +08004830 : static void SPI_TxByte(BYTE data) { - 80048ac: b580 push {r7, lr} - 80048ae: b082 sub sp, #8 - 80048b0: af00 add r7, sp, #0 - 80048b2: 4603 mov r3, r0 - 80048b4: 71fb strb r3, [r7, #7] - while (HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY); - 80048b6: bf00 nop - 80048b8: 4808 ldr r0, [pc, #32] ; (80048dc ) - 80048ba: f7fd fb06 bl 8001eca - 80048be: 4603 mov r3, r0 - 80048c0: 2b01 cmp r3, #1 - 80048c2: d1f9 bne.n 80048b8 - HAL_SPI_Transmit(&hspi2, &data, 1, SPI_TIMEOUT); - 80048c4: 1df9 adds r1, r7, #7 - 80048c6: f44f 737a mov.w r3, #1000 ; 0x3e8 - 80048ca: 2201 movs r2, #1 - 80048cc: 4803 ldr r0, [pc, #12] ; (80048dc ) - 80048ce: f7fc ff0d bl 80016ec + 8004830: b580 push {r7, lr} + 8004832: b082 sub sp, #8 + 8004834: af00 add r7, sp, #0 + 8004836: 4603 mov r3, r0 + 8004838: 71fb strb r3, [r7, #7] + while (HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY); + 800483a: bf00 nop + 800483c: 4808 ldr r0, [pc, #32] ; (8004860 ) + 800483e: f7fd fb0e bl 8001e5e + 8004842: 4603 mov r3, r0 + 8004844: 2b01 cmp r3, #1 + 8004846: d1f9 bne.n 800483c + HAL_SPI_Transmit(&hspi2, &data, 1, SPI_TIMEOUT); + 8004848: 1df9 adds r1, r7, #7 + 800484a: f44f 737a mov.w r3, #1000 ; 0x3e8 + 800484e: 2201 movs r2, #1 + 8004850: 4803 ldr r0, [pc, #12] ; (8004860 ) + 8004852: f7fc ff15 bl 8001680 } - 80048d2: bf00 nop - 80048d4: 3708 adds r7, #8 - 80048d6: 46bd mov sp, r7 - 80048d8: bd80 pop {r7, pc} - 80048da: bf00 nop - 80048dc: 200000e4 .word 0x200000e4 + 8004856: bf00 nop + 8004858: 3708 adds r7, #8 + 800485a: 46bd mov sp, r7 + 800485c: bd80 pop {r7, pc} + 800485e: bf00 nop + 8004860: 20000074 .word 0x20000074 -080048e0 : +08004864 : static uint8_t SPI_RxByte(void) { - 80048e0: b580 push {r7, lr} - 80048e2: b084 sub sp, #16 - 80048e4: af02 add r7, sp, #8 + 8004864: b580 push {r7, lr} + 8004866: b084 sub sp, #16 + 8004868: af02 add r7, sp, #8 uint8_t dummy, data; dummy = 0xFF; - 80048e6: 23ff movs r3, #255 ; 0xff - 80048e8: 71fb strb r3, [r7, #7] + 800486a: 23ff movs r3, #255 ; 0xff + 800486c: 71fb strb r3, [r7, #7] data = 0; - 80048ea: 2300 movs r3, #0 - 80048ec: 71bb strb r3, [r7, #6] + 800486e: 2300 movs r3, #0 + 8004870: 71bb strb r3, [r7, #6] while ((HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY)); - 80048ee: bf00 nop - 80048f0: 4809 ldr r0, [pc, #36] ; (8004918 ) - 80048f2: f7fd faea bl 8001eca - 80048f6: 4603 mov r3, r0 - 80048f8: 2b01 cmp r3, #1 - 80048fa: d1f9 bne.n 80048f0 + 8004872: bf00 nop + 8004874: 4809 ldr r0, [pc, #36] ; (800489c ) + 8004876: f7fd faf2 bl 8001e5e + 800487a: 4603 mov r3, r0 + 800487c: 2b01 cmp r3, #1 + 800487e: d1f9 bne.n 8004874 HAL_SPI_TransmitReceive(&hspi2, &dummy, &data, 1, SPI_TIMEOUT); - 80048fc: 1dba adds r2, r7, #6 - 80048fe: 1df9 adds r1, r7, #7 - 8004900: f44f 737a mov.w r3, #1000 ; 0x3e8 - 8004904: 9300 str r3, [sp, #0] - 8004906: 2301 movs r3, #1 - 8004908: 4803 ldr r0, [pc, #12] ; (8004918 ) - 800490a: f7fd f93c bl 8001b86 + 8004880: 1dba adds r2, r7, #6 + 8004882: 1df9 adds r1, r7, #7 + 8004884: f44f 737a mov.w r3, #1000 ; 0x3e8 + 8004888: 9300 str r3, [sp, #0] + 800488a: 2301 movs r3, #1 + 800488c: 4803 ldr r0, [pc, #12] ; (800489c ) + 800488e: f7fd f944 bl 8001b1a return data; - 800490e: 79bb ldrb r3, [r7, #6] + 8004892: 79bb ldrb r3, [r7, #6] } - 8004910: 4618 mov r0, r3 - 8004912: 3708 adds r7, #8 - 8004914: 46bd mov sp, r7 - 8004916: bd80 pop {r7, pc} - 8004918: 200000e4 .word 0x200000e4 + 8004894: 4618 mov r0, r3 + 8004896: 3708 adds r7, #8 + 8004898: 46bd mov sp, r7 + 800489a: bd80 pop {r7, pc} + 800489c: 20000074 .word 0x20000074 -0800491c : +080048a0 : static void SPI_RxBytePtr(uint8_t *buff) { - 800491c: b580 push {r7, lr} - 800491e: b082 sub sp, #8 - 8004920: af00 add r7, sp, #0 - 8004922: 6078 str r0, [r7, #4] + 80048a0: b580 push {r7, lr} + 80048a2: b082 sub sp, #8 + 80048a4: af00 add r7, sp, #0 + 80048a6: 6078 str r0, [r7, #4] *buff = SPI_RxByte(); - 8004924: f7ff ffdc bl 80048e0 - 8004928: 4603 mov r3, r0 - 800492a: 461a mov r2, r3 - 800492c: 687b ldr r3, [r7, #4] - 800492e: 701a strb r2, [r3, #0] + 80048a8: f7ff ffdc bl 8004864 + 80048ac: 4603 mov r3, r0 + 80048ae: 461a mov r2, r3 + 80048b0: 687b ldr r3, [r7, #4] + 80048b2: 701a strb r2, [r3, #0] } - 8004930: bf00 nop - 8004932: 3708 adds r7, #8 - 8004934: 46bd mov sp, r7 - 8004936: bd80 pop {r7, pc} + 80048b4: bf00 nop + 80048b6: 3708 adds r7, #8 + 80048b8: 46bd mov sp, r7 + 80048ba: bd80 pop {r7, pc} -08004938 : +080048bc : static uint8_t SD_ReadyWait(void) { - 8004938: b580 push {r7, lr} - 800493a: b082 sub sp, #8 - 800493c: af00 add r7, sp, #0 + 80048bc: b580 push {r7, lr} + 80048be: b082 sub sp, #8 + 80048c0: af00 add r7, sp, #0 uint8_t res; Timer2 = 50; - 800493e: 4b0b ldr r3, [pc, #44] ; (800496c ) - 8004940: 2232 movs r2, #50 ; 0x32 - 8004942: 701a strb r2, [r3, #0] + 80048c2: 4b0b ldr r3, [pc, #44] ; (80048f0 ) + 80048c4: 2232 movs r2, #50 ; 0x32 + 80048c6: 701a strb r2, [r3, #0] SPI_RxByte(); - 8004944: f7ff ffcc bl 80048e0 + 80048c8: f7ff ffcc bl 8004864 do { res = SPI_RxByte(); - 8004948: f7ff ffca bl 80048e0 - 800494c: 4603 mov r3, r0 - 800494e: 71fb strb r3, [r7, #7] + 80048cc: f7ff ffca bl 8004864 + 80048d0: 4603 mov r3, r0 + 80048d2: 71fb strb r3, [r7, #7] } while ((res != 0xFF) && Timer2); - 8004950: 79fb ldrb r3, [r7, #7] - 8004952: 2bff cmp r3, #255 ; 0xff - 8004954: d004 beq.n 8004960 - 8004956: 4b05 ldr r3, [pc, #20] ; (800496c ) - 8004958: 781b ldrb r3, [r3, #0] - 800495a: b2db uxtb r3, r3 - 800495c: 2b00 cmp r3, #0 - 800495e: d1f3 bne.n 8004948 + 80048d4: 79fb ldrb r3, [r7, #7] + 80048d6: 2bff cmp r3, #255 ; 0xff + 80048d8: d004 beq.n 80048e4 + 80048da: 4b05 ldr r3, [pc, #20] ; (80048f0 ) + 80048dc: 781b ldrb r3, [r3, #0] + 80048de: b2db uxtb r3, r3 + 80048e0: 2b00 cmp r3, #0 + 80048e2: d1f3 bne.n 80048cc return res; - 8004960: 79fb ldrb r3, [r7, #7] + 80048e4: 79fb ldrb r3, [r7, #7] } - 8004962: 4618 mov r0, r3 - 8004964: 3708 adds r7, #8 - 8004966: 46bd mov sp, r7 - 8004968: bd80 pop {r7, pc} - 800496a: bf00 nop - 800496c: 2000081c .word 0x2000081c + 80048e6: 4618 mov r0, r3 + 80048e8: 3708 adds r7, #8 + 80048ea: 46bd mov sp, r7 + 80048ec: bd80 pop {r7, pc} + 80048ee: bf00 nop + 80048f0: 200007ac .word 0x200007ac -08004970 : +080048f4 : static void SD_PowerOn(void) { - 8004970: b580 push {r7, lr} - 8004972: b086 sub sp, #24 - 8004974: af00 add r7, sp, #0 + 80048f4: b580 push {r7, lr} + 80048f6: b086 sub sp, #24 + 80048f8: af00 add r7, sp, #0 uint8_t cmd_arg[6]; uint32_t Count = 0x1FFF; - 8004976: f641 73ff movw r3, #8191 ; 0x1fff - 800497a: 617b str r3, [r7, #20] + 80048fa: f641 73ff movw r3, #8191 ; 0x1fff + 80048fe: 617b str r3, [r7, #20] DESELECT(); - 800497c: f7ff ff8a bl 8004894 + 8004900: f7ff ff8a bl 8004818 for(int i = 0; i < 10; i++) - 8004980: 2300 movs r3, #0 - 8004982: 613b str r3, [r7, #16] - 8004984: e005 b.n 8004992 + 8004904: 2300 movs r3, #0 + 8004906: 613b str r3, [r7, #16] + 8004908: e005 b.n 8004916 { SPI_TxByte(0xFF); - 8004986: 20ff movs r0, #255 ; 0xff - 8004988: f7ff ff90 bl 80048ac + 800490a: 20ff movs r0, #255 ; 0xff + 800490c: f7ff ff90 bl 8004830 for(int i = 0; i < 10; i++) - 800498c: 693b ldr r3, [r7, #16] - 800498e: 3301 adds r3, #1 - 8004990: 613b str r3, [r7, #16] - 8004992: 693b ldr r3, [r7, #16] - 8004994: 2b09 cmp r3, #9 - 8004996: ddf6 ble.n 8004986 + 8004910: 693b ldr r3, [r7, #16] + 8004912: 3301 adds r3, #1 + 8004914: 613b str r3, [r7, #16] + 8004916: 693b ldr r3, [r7, #16] + 8004918: 2b09 cmp r3, #9 + 800491a: ddf6 ble.n 800490a } /* SPI Chips Select */ SELECT(); - 8004998: f7ff ff70 bl 800487c cmd_arg[0] = (CMD0 | 0x40); - 800499c: 2340 movs r3, #64 ; 0x40 - 800499e: 713b strb r3, [r7, #4] + 8004920: 2340 movs r3, #64 ; 0x40 + 8004922: 713b strb r3, [r7, #4] cmd_arg[1] = 0; - 80049a0: 2300 movs r3, #0 - 80049a2: 717b strb r3, [r7, #5] + 8004924: 2300 movs r3, #0 + 8004926: 717b strb r3, [r7, #5] cmd_arg[2] = 0; - 80049a4: 2300 movs r3, #0 - 80049a6: 71bb strb r3, [r7, #6] + 8004928: 2300 movs r3, #0 + 800492a: 71bb strb r3, [r7, #6] cmd_arg[3] = 0; - 80049a8: 2300 movs r3, #0 - 80049aa: 71fb strb r3, [r7, #7] + 800492c: 2300 movs r3, #0 + 800492e: 71fb strb r3, [r7, #7] cmd_arg[4] = 0; - 80049ac: 2300 movs r3, #0 - 80049ae: 723b strb r3, [r7, #8] + 8004930: 2300 movs r3, #0 + 8004932: 723b strb r3, [r7, #8] cmd_arg[5] = 0x95; - 80049b0: 2395 movs r3, #149 ; 0x95 - 80049b2: 727b strb r3, [r7, #9] + 8004934: 2395 movs r3, #149 ; 0x95 + 8004936: 727b strb r3, [r7, #9] for (int i = 0; i < 6; i++) - 80049b4: 2300 movs r3, #0 - 80049b6: 60fb str r3, [r7, #12] - 80049b8: e009 b.n 80049ce + 8004938: 2300 movs r3, #0 + 800493a: 60fb str r3, [r7, #12] + 800493c: e009 b.n 8004952 { SPI_TxByte(cmd_arg[i]); - 80049ba: 1d3a adds r2, r7, #4 - 80049bc: 68fb ldr r3, [r7, #12] - 80049be: 4413 add r3, r2 - 80049c0: 781b ldrb r3, [r3, #0] - 80049c2: 4618 mov r0, r3 - 80049c4: f7ff ff72 bl 80048ac + 800493e: 1d3a adds r2, r7, #4 + 8004940: 68fb ldr r3, [r7, #12] + 8004942: 4413 add r3, r2 + 8004944: 781b ldrb r3, [r3, #0] + 8004946: 4618 mov r0, r3 + 8004948: f7ff ff72 bl 8004830 for (int i = 0; i < 6; i++) - 80049c8: 68fb ldr r3, [r7, #12] - 80049ca: 3301 adds r3, #1 - 80049cc: 60fb str r3, [r7, #12] - 80049ce: 68fb ldr r3, [r7, #12] - 80049d0: 2b05 cmp r3, #5 - 80049d2: ddf2 ble.n 80049ba + 800494c: 68fb ldr r3, [r7, #12] + 800494e: 3301 adds r3, #1 + 8004950: 60fb str r3, [r7, #12] + 8004952: 68fb ldr r3, [r7, #12] + 8004954: 2b05 cmp r3, #5 + 8004956: ddf2 ble.n 800493e } while ((SPI_RxByte() != 0x01) && Count) - 80049d4: e002 b.n 80049dc + 8004958: e002 b.n 8004960 { Count--; - 80049d6: 697b ldr r3, [r7, #20] - 80049d8: 3b01 subs r3, #1 - 80049da: 617b str r3, [r7, #20] + 800495a: 697b ldr r3, [r7, #20] + 800495c: 3b01 subs r3, #1 + 800495e: 617b str r3, [r7, #20] while ((SPI_RxByte() != 0x01) && Count) - 80049dc: f7ff ff80 bl 80048e0 - 80049e0: 4603 mov r3, r0 - 80049e2: 2b01 cmp r3, #1 - 80049e4: d002 beq.n 80049ec - 80049e6: 697b ldr r3, [r7, #20] - 80049e8: 2b00 cmp r3, #0 - 80049ea: d1f4 bne.n 80049d6 + 8004960: f7ff ff80 bl 8004864 + 8004964: 4603 mov r3, r0 + 8004966: 2b01 cmp r3, #1 + 8004968: d002 beq.n 8004970 + 800496a: 697b ldr r3, [r7, #20] + 800496c: 2b00 cmp r3, #0 + 800496e: d1f4 bne.n 800495a } DESELECT(); - 80049ec: f7ff ff52 bl 8004894 + 8004970: f7ff ff52 bl 8004818 SPI_TxByte(0XFF); - 80049f0: 20ff movs r0, #255 ; 0xff - 80049f2: f7ff ff5b bl 80048ac + 8004974: 20ff movs r0, #255 ; 0xff + 8004976: f7ff ff5b bl 8004830 PowerFlag = 1; - 80049f6: 4b03 ldr r3, [pc, #12] ; (8004a04 ) - 80049f8: 2201 movs r2, #1 - 80049fa: 701a strb r2, [r3, #0] + 800497a: 4b03 ldr r3, [pc, #12] ; (8004988 ) + 800497c: 2201 movs r2, #1 + 800497e: 701a strb r2, [r3, #0] } - 80049fc: bf00 nop - 80049fe: 3718 adds r7, #24 - 8004a00: 46bd mov sp, r7 - 8004a02: bd80 pop {r7, pc} - 8004a04: 200000d9 .word 0x200000d9 + 8004980: bf00 nop + 8004982: 3718 adds r7, #24 + 8004984: 46bd mov sp, r7 + 8004986: bd80 pop {r7, pc} + 8004988: 20000071 .word 0x20000071 -08004a08 : +0800498c : static void SD_PowerOff(void) { - 8004a08: b480 push {r7} - 8004a0a: af00 add r7, sp, #0 + 800498c: b480 push {r7} + 800498e: af00 add r7, sp, #0 PowerFlag = 0; - 8004a0c: 4b03 ldr r3, [pc, #12] ; (8004a1c ) - 8004a0e: 2200 movs r2, #0 - 8004a10: 701a strb r2, [r3, #0] + 8004990: 4b03 ldr r3, [pc, #12] ; (80049a0 ) + 8004992: 2200 movs r2, #0 + 8004994: 701a strb r2, [r3, #0] } - 8004a12: bf00 nop - 8004a14: 46bd mov sp, r7 - 8004a16: bc80 pop {r7} - 8004a18: 4770 bx lr - 8004a1a: bf00 nop - 8004a1c: 200000d9 .word 0x200000d9 + 8004996: bf00 nop + 8004998: 46bd mov sp, r7 + 800499a: bc80 pop {r7} + 800499c: 4770 bx lr + 800499e: bf00 nop + 80049a0: 20000071 .word 0x20000071 -08004a20 : +080049a4 : static uint8_t SD_CheckPower(void) { - 8004a20: b480 push {r7} - 8004a22: af00 add r7, sp, #0 + 80049a4: b480 push {r7} + 80049a6: af00 add r7, sp, #0 /* 0=off, 1=on */ return PowerFlag; - 8004a24: 4b02 ldr r3, [pc, #8] ; (8004a30 ) - 8004a26: 781b ldrb r3, [r3, #0] + 80049a8: 4b02 ldr r3, [pc, #8] ; (80049b4 ) + 80049aa: 781b ldrb r3, [r3, #0] } - 8004a28: 4618 mov r0, r3 - 8004a2a: 46bd mov sp, r7 - 8004a2c: bc80 pop {r7} - 8004a2e: 4770 bx lr - 8004a30: 200000d9 .word 0x200000d9 + 80049ac: 4618 mov r0, r3 + 80049ae: 46bd mov sp, r7 + 80049b0: bc80 pop {r7} + 80049b2: 4770 bx lr + 80049b4: 20000071 .word 0x20000071 -08004a34 : +080049b8 : static bool SD_RxDataBlock(BYTE *buff, UINT btr) { - 8004a34: b580 push {r7, lr} - 8004a36: b084 sub sp, #16 - 8004a38: af00 add r7, sp, #0 - 8004a3a: 6078 str r0, [r7, #4] - 8004a3c: 6039 str r1, [r7, #0] + 80049b8: b580 push {r7, lr} + 80049ba: b084 sub sp, #16 + 80049bc: af00 add r7, sp, #0 + 80049be: 6078 str r0, [r7, #4] + 80049c0: 6039 str r1, [r7, #0] uint8_t token; Timer1 = 10; - 8004a3e: 4b17 ldr r3, [pc, #92] ; (8004a9c ) - 8004a40: 220a movs r2, #10 - 8004a42: 701a strb r2, [r3, #0] + 80049c2: 4b17 ldr r3, [pc, #92] ; (8004a20 ) + 80049c4: 220a movs r2, #10 + 80049c6: 701a strb r2, [r3, #0] do { token = SPI_RxByte(); - 8004a44: f7ff ff4c bl 80048e0 - 8004a48: 4603 mov r3, r0 - 8004a4a: 73fb strb r3, [r7, #15] + 80049c8: f7ff ff4c bl 8004864 + 80049cc: 4603 mov r3, r0 + 80049ce: 73fb strb r3, [r7, #15] } while((token == 0xFF) && Timer1); - 8004a4c: 7bfb ldrb r3, [r7, #15] - 8004a4e: 2bff cmp r3, #255 ; 0xff - 8004a50: d104 bne.n 8004a5c - 8004a52: 4b12 ldr r3, [pc, #72] ; (8004a9c ) - 8004a54: 781b ldrb r3, [r3, #0] - 8004a56: b2db uxtb r3, r3 - 8004a58: 2b00 cmp r3, #0 - 8004a5a: d1f3 bne.n 8004a44 + 80049d0: 7bfb ldrb r3, [r7, #15] + 80049d2: 2bff cmp r3, #255 ; 0xff + 80049d4: d104 bne.n 80049e0 + 80049d6: 4b12 ldr r3, [pc, #72] ; (8004a20 ) + 80049d8: 781b ldrb r3, [r3, #0] + 80049da: b2db uxtb r3, r3 + 80049dc: 2b00 cmp r3, #0 + 80049de: d1f3 bne.n 80049c8 if(token != 0xFE) - 8004a5c: 7bfb ldrb r3, [r7, #15] - 8004a5e: 2bfe cmp r3, #254 ; 0xfe - 8004a60: d001 beq.n 8004a66 + 80049e0: 7bfb ldrb r3, [r7, #15] + 80049e2: 2bfe cmp r3, #254 ; 0xfe + 80049e4: d001 beq.n 80049ea return FALSE; - 8004a62: 2300 movs r3, #0 - 8004a64: e016 b.n 8004a94 + 80049e6: 2300 movs r3, #0 + 80049e8: e016 b.n 8004a18 do { SPI_RxBytePtr(buff++); - 8004a66: 687b ldr r3, [r7, #4] - 8004a68: 1c5a adds r2, r3, #1 - 8004a6a: 607a str r2, [r7, #4] - 8004a6c: 4618 mov r0, r3 - 8004a6e: f7ff ff55 bl 800491c + 80049ea: 687b ldr r3, [r7, #4] + 80049ec: 1c5a adds r2, r3, #1 + 80049ee: 607a str r2, [r7, #4] + 80049f0: 4618 mov r0, r3 + 80049f2: f7ff ff55 bl 80048a0 SPI_RxBytePtr(buff++); - 8004a72: 687b ldr r3, [r7, #4] - 8004a74: 1c5a adds r2, r3, #1 - 8004a76: 607a str r2, [r7, #4] - 8004a78: 4618 mov r0, r3 - 8004a7a: f7ff ff4f bl 800491c + 80049f6: 687b ldr r3, [r7, #4] + 80049f8: 1c5a adds r2, r3, #1 + 80049fa: 607a str r2, [r7, #4] + 80049fc: 4618 mov r0, r3 + 80049fe: f7ff ff4f bl 80048a0 } while(btr -= 2); - 8004a7e: 683b ldr r3, [r7, #0] - 8004a80: 3b02 subs r3, #2 - 8004a82: 603b str r3, [r7, #0] - 8004a84: 683b ldr r3, [r7, #0] - 8004a86: 2b00 cmp r3, #0 - 8004a88: d1ed bne.n 8004a66 + 8004a02: 683b ldr r3, [r7, #0] + 8004a04: 3b02 subs r3, #2 + 8004a06: 603b str r3, [r7, #0] + 8004a08: 683b ldr r3, [r7, #0] + 8004a0a: 2b00 cmp r3, #0 + 8004a0c: d1ed bne.n 80049ea SPI_RxByte(); - 8004a8a: f7ff ff29 bl 80048e0 + 8004a0e: f7ff ff29 bl 8004864 SPI_RxByte(); - 8004a8e: f7ff ff27 bl 80048e0 + 8004a12: f7ff ff27 bl 8004864 return TRUE; - 8004a92: 2301 movs r3, #1 + 8004a16: 2301 movs r3, #1 } - 8004a94: 4618 mov r0, r3 - 8004a96: 3710 adds r7, #16 - 8004a98: 46bd mov sp, r7 - 8004a9a: bd80 pop {r7, pc} - 8004a9c: 2000081d .word 0x2000081d + 8004a18: 4618 mov r0, r3 + 8004a1a: 3710 adds r7, #16 + 8004a1c: 46bd mov sp, r7 + 8004a1e: bd80 pop {r7, pc} + 8004a20: 200007ad .word 0x200007ad -08004aa0 : +08004a24 : #if _READONLY == 0 static bool SD_TxDataBlock(const BYTE *buff, BYTE token) { - 8004aa0: b580 push {r7, lr} - 8004aa2: b084 sub sp, #16 - 8004aa4: af00 add r7, sp, #0 - 8004aa6: 6078 str r0, [r7, #4] - 8004aa8: 460b mov r3, r1 - 8004aaa: 70fb strb r3, [r7, #3] + 8004a24: b580 push {r7, lr} + 8004a26: b084 sub sp, #16 + 8004a28: af00 add r7, sp, #0 + 8004a2a: 6078 str r0, [r7, #4] + 8004a2c: 460b mov r3, r1 + 8004a2e: 70fb strb r3, [r7, #3] uint8_t resp, wc; uint8_t i = 0; - 8004aac: 2300 movs r3, #0 - 8004aae: 737b strb r3, [r7, #13] + 8004a30: 2300 movs r3, #0 + 8004a32: 737b strb r3, [r7, #13] if (SD_ReadyWait() != 0xFF) - 8004ab0: f7ff ff42 bl 8004938 - 8004ab4: 4603 mov r3, r0 - 8004ab6: 2bff cmp r3, #255 ; 0xff - 8004ab8: d001 beq.n 8004abe + 8004a34: f7ff ff42 bl 80048bc + 8004a38: 4603 mov r3, r0 + 8004a3a: 2bff cmp r3, #255 ; 0xff + 8004a3c: d001 beq.n 8004a42 return FALSE; - 8004aba: 2300 movs r3, #0 - 8004abc: e040 b.n 8004b40 + 8004a3e: 2300 movs r3, #0 + 8004a40: e040 b.n 8004ac4 SPI_TxByte(token); - 8004abe: 78fb ldrb r3, [r7, #3] - 8004ac0: 4618 mov r0, r3 - 8004ac2: f7ff fef3 bl 80048ac + 8004a42: 78fb ldrb r3, [r7, #3] + 8004a44: 4618 mov r0, r3 + 8004a46: f7ff fef3 bl 8004830 if (token != 0xFD) - 8004ac6: 78fb ldrb r3, [r7, #3] - 8004ac8: 2bfd cmp r3, #253 ; 0xfd - 8004aca: d031 beq.n 8004b30 + 8004a4a: 78fb ldrb r3, [r7, #3] + 8004a4c: 2bfd cmp r3, #253 ; 0xfd + 8004a4e: d031 beq.n 8004ab4 { wc = 0; - 8004acc: 2300 movs r3, #0 - 8004ace: 73bb strb r3, [r7, #14] + 8004a50: 2300 movs r3, #0 + 8004a52: 73bb strb r3, [r7, #14] do { SPI_TxByte(*buff++); - 8004ad0: 687b ldr r3, [r7, #4] - 8004ad2: 1c5a adds r2, r3, #1 - 8004ad4: 607a str r2, [r7, #4] - 8004ad6: 781b ldrb r3, [r3, #0] - 8004ad8: 4618 mov r0, r3 - 8004ada: f7ff fee7 bl 80048ac + 8004a54: 687b ldr r3, [r7, #4] + 8004a56: 1c5a adds r2, r3, #1 + 8004a58: 607a str r2, [r7, #4] + 8004a5a: 781b ldrb r3, [r3, #0] + 8004a5c: 4618 mov r0, r3 + 8004a5e: f7ff fee7 bl 8004830 SPI_TxByte(*buff++); - 8004ade: 687b ldr r3, [r7, #4] - 8004ae0: 1c5a adds r2, r3, #1 - 8004ae2: 607a str r2, [r7, #4] - 8004ae4: 781b ldrb r3, [r3, #0] - 8004ae6: 4618 mov r0, r3 - 8004ae8: f7ff fee0 bl 80048ac + 8004a62: 687b ldr r3, [r7, #4] + 8004a64: 1c5a adds r2, r3, #1 + 8004a66: 607a str r2, [r7, #4] + 8004a68: 781b ldrb r3, [r3, #0] + 8004a6a: 4618 mov r0, r3 + 8004a6c: f7ff fee0 bl 8004830 } while (--wc); - 8004aec: 7bbb ldrb r3, [r7, #14] - 8004aee: 3b01 subs r3, #1 - 8004af0: 73bb strb r3, [r7, #14] - 8004af2: 7bbb ldrb r3, [r7, #14] - 8004af4: 2b00 cmp r3, #0 - 8004af6: d1eb bne.n 8004ad0 + 8004a70: 7bbb ldrb r3, [r7, #14] + 8004a72: 3b01 subs r3, #1 + 8004a74: 73bb strb r3, [r7, #14] + 8004a76: 7bbb ldrb r3, [r7, #14] + 8004a78: 2b00 cmp r3, #0 + 8004a7a: d1eb bne.n 8004a54 SPI_RxByte(); - 8004af8: f7ff fef2 bl 80048e0 + 8004a7c: f7ff fef2 bl 8004864 SPI_RxByte(); - 8004afc: f7ff fef0 bl 80048e0 + 8004a80: f7ff fef0 bl 8004864 while (i <= 64) - 8004b00: e00b b.n 8004b1a + 8004a84: e00b b.n 8004a9e { resp = SPI_RxByte(); - 8004b02: f7ff feed bl 80048e0 - 8004b06: 4603 mov r3, r0 - 8004b08: 73fb strb r3, [r7, #15] + 8004a86: f7ff feed bl 8004864 + 8004a8a: 4603 mov r3, r0 + 8004a8c: 73fb strb r3, [r7, #15] if ((resp & 0x1F) == 0x05) - 8004b0a: 7bfb ldrb r3, [r7, #15] - 8004b0c: f003 031f and.w r3, r3, #31 - 8004b10: 2b05 cmp r3, #5 - 8004b12: d006 beq.n 8004b22 + 8004a8e: 7bfb ldrb r3, [r7, #15] + 8004a90: f003 031f and.w r3, r3, #31 + 8004a94: 2b05 cmp r3, #5 + 8004a96: d006 beq.n 8004aa6 break; i++; - 8004b14: 7b7b ldrb r3, [r7, #13] - 8004b16: 3301 adds r3, #1 - 8004b18: 737b strb r3, [r7, #13] + 8004a98: 7b7b ldrb r3, [r7, #13] + 8004a9a: 3301 adds r3, #1 + 8004a9c: 737b strb r3, [r7, #13] while (i <= 64) - 8004b1a: 7b7b ldrb r3, [r7, #13] - 8004b1c: 2b40 cmp r3, #64 ; 0x40 - 8004b1e: d9f0 bls.n 8004b02 - 8004b20: e000 b.n 8004b24 + 8004a9e: 7b7b ldrb r3, [r7, #13] + 8004aa0: 2b40 cmp r3, #64 ; 0x40 + 8004aa2: d9f0 bls.n 8004a86 + 8004aa4: e000 b.n 8004aa8 break; - 8004b22: bf00 nop + 8004aa6: bf00 nop } while (SPI_RxByte() == 0); - 8004b24: bf00 nop - 8004b26: f7ff fedb bl 80048e0 - 8004b2a: 4603 mov r3, r0 - 8004b2c: 2b00 cmp r3, #0 - 8004b2e: d0fa beq.n 8004b26 + 8004aa8: bf00 nop + 8004aaa: f7ff fedb bl 8004864 + 8004aae: 4603 mov r3, r0 + 8004ab0: 2b00 cmp r3, #0 + 8004ab2: d0fa beq.n 8004aaa } if ((resp & 0x1F) == 0x05) - 8004b30: 7bfb ldrb r3, [r7, #15] - 8004b32: f003 031f and.w r3, r3, #31 - 8004b36: 2b05 cmp r3, #5 - 8004b38: d101 bne.n 8004b3e + 8004ab4: 7bfb ldrb r3, [r7, #15] + 8004ab6: f003 031f and.w r3, r3, #31 + 8004aba: 2b05 cmp r3, #5 + 8004abc: d101 bne.n 8004ac2 return TRUE; - 8004b3a: 2301 movs r3, #1 - 8004b3c: e000 b.n 8004b40 + 8004abe: 2301 movs r3, #1 + 8004ac0: e000 b.n 8004ac4 else return FALSE; - 8004b3e: 2300 movs r3, #0 + 8004ac2: 2300 movs r3, #0 } - 8004b40: 4618 mov r0, r3 - 8004b42: 3710 adds r7, #16 - 8004b44: 46bd mov sp, r7 - 8004b46: bd80 pop {r7, pc} + 8004ac4: 4618 mov r0, r3 + 8004ac6: 3710 adds r7, #16 + 8004ac8: 46bd mov sp, r7 + 8004aca: bd80 pop {r7, pc} -08004b48 : +08004acc : #endif /* _READONLY */ static BYTE SD_SendCmd(BYTE cmd, DWORD arg) { - 8004b48: b580 push {r7, lr} - 8004b4a: b084 sub sp, #16 - 8004b4c: af00 add r7, sp, #0 - 8004b4e: 4603 mov r3, r0 - 8004b50: 6039 str r1, [r7, #0] - 8004b52: 71fb strb r3, [r7, #7] + 8004acc: b580 push {r7, lr} + 8004ace: b084 sub sp, #16 + 8004ad0: af00 add r7, sp, #0 + 8004ad2: 4603 mov r3, r0 + 8004ad4: 6039 str r1, [r7, #0] + 8004ad6: 71fb strb r3, [r7, #7] uint8_t crc, res; if (SD_ReadyWait() != 0xFF) - 8004b54: f7ff fef0 bl 8004938 - 8004b58: 4603 mov r3, r0 - 8004b5a: 2bff cmp r3, #255 ; 0xff - 8004b5c: d001 beq.n 8004b62 + 8004ad8: f7ff fef0 bl 80048bc + 8004adc: 4603 mov r3, r0 + 8004ade: 2bff cmp r3, #255 ; 0xff + 8004ae0: d001 beq.n 8004ae6 return 0xFF; - 8004b5e: 23ff movs r3, #255 ; 0xff - 8004b60: e040 b.n 8004be4 + 8004ae2: 23ff movs r3, #255 ; 0xff + 8004ae4: e040 b.n 8004b68 SPI_TxByte(cmd); /* Command */ - 8004b62: 79fb ldrb r3, [r7, #7] - 8004b64: 4618 mov r0, r3 - 8004b66: f7ff fea1 bl 80048ac + 8004ae6: 79fb ldrb r3, [r7, #7] + 8004ae8: 4618 mov r0, r3 + 8004aea: f7ff fea1 bl 8004830 SPI_TxByte((BYTE) (arg >> 24)); /* Argument[31..24] */ - 8004b6a: 683b ldr r3, [r7, #0] - 8004b6c: 0e1b lsrs r3, r3, #24 - 8004b6e: b2db uxtb r3, r3 - 8004b70: 4618 mov r0, r3 - 8004b72: f7ff fe9b bl 80048ac + 8004aee: 683b ldr r3, [r7, #0] + 8004af0: 0e1b lsrs r3, r3, #24 + 8004af2: b2db uxtb r3, r3 + 8004af4: 4618 mov r0, r3 + 8004af6: f7ff fe9b bl 8004830 SPI_TxByte((BYTE) (arg >> 16)); /* Argument[23..16] */ - 8004b76: 683b ldr r3, [r7, #0] - 8004b78: 0c1b lsrs r3, r3, #16 - 8004b7a: b2db uxtb r3, r3 - 8004b7c: 4618 mov r0, r3 - 8004b7e: f7ff fe95 bl 80048ac + 8004afa: 683b ldr r3, [r7, #0] + 8004afc: 0c1b lsrs r3, r3, #16 + 8004afe: b2db uxtb r3, r3 + 8004b00: 4618 mov r0, r3 + 8004b02: f7ff fe95 bl 8004830 SPI_TxByte((BYTE) (arg >> 8)); /* Argument[15..8] */ - 8004b82: 683b ldr r3, [r7, #0] - 8004b84: 0a1b lsrs r3, r3, #8 - 8004b86: b2db uxtb r3, r3 - 8004b88: 4618 mov r0, r3 - 8004b8a: f7ff fe8f bl 80048ac + 8004b06: 683b ldr r3, [r7, #0] + 8004b08: 0a1b lsrs r3, r3, #8 + 8004b0a: b2db uxtb r3, r3 + 8004b0c: 4618 mov r0, r3 + 8004b0e: f7ff fe8f bl 8004830 SPI_TxByte((BYTE) arg); /* Argument[7..0] */ - 8004b8e: 683b ldr r3, [r7, #0] - 8004b90: b2db uxtb r3, r3 - 8004b92: 4618 mov r0, r3 - 8004b94: f7ff fe8a bl 80048ac + 8004b12: 683b ldr r3, [r7, #0] + 8004b14: b2db uxtb r3, r3 + 8004b16: 4618 mov r0, r3 + 8004b18: f7ff fe8a bl 8004830 crc = 0; - 8004b98: 2300 movs r3, #0 - 8004b9a: 73fb strb r3, [r7, #15] + 8004b1c: 2300 movs r3, #0 + 8004b1e: 73fb strb r3, [r7, #15] if (cmd == CMD0) - 8004b9c: 79fb ldrb r3, [r7, #7] - 8004b9e: 2b40 cmp r3, #64 ; 0x40 - 8004ba0: d101 bne.n 8004ba6 + 8004b20: 79fb ldrb r3, [r7, #7] + 8004b22: 2b40 cmp r3, #64 ; 0x40 + 8004b24: d101 bne.n 8004b2a crc = 0x95; /* CRC for CMD0(0) */ - 8004ba2: 2395 movs r3, #149 ; 0x95 - 8004ba4: 73fb strb r3, [r7, #15] + 8004b26: 2395 movs r3, #149 ; 0x95 + 8004b28: 73fb strb r3, [r7, #15] if (cmd == CMD8) - 8004ba6: 79fb ldrb r3, [r7, #7] - 8004ba8: 2b48 cmp r3, #72 ; 0x48 - 8004baa: d101 bne.n 8004bb0 + 8004b2a: 79fb ldrb r3, [r7, #7] + 8004b2c: 2b48 cmp r3, #72 ; 0x48 + 8004b2e: d101 bne.n 8004b34 crc = 0x87; /* CRC for CMD8(0x1AA) */ - 8004bac: 2387 movs r3, #135 ; 0x87 - 8004bae: 73fb strb r3, [r7, #15] + 8004b30: 2387 movs r3, #135 ; 0x87 + 8004b32: 73fb strb r3, [r7, #15] SPI_TxByte(crc); - 8004bb0: 7bfb ldrb r3, [r7, #15] - 8004bb2: 4618 mov r0, r3 - 8004bb4: f7ff fe7a bl 80048ac + 8004b34: 7bfb ldrb r3, [r7, #15] + 8004b36: 4618 mov r0, r3 + 8004b38: f7ff fe7a bl 8004830 if (cmd == CMD12) - 8004bb8: 79fb ldrb r3, [r7, #7] - 8004bba: 2b4c cmp r3, #76 ; 0x4c - 8004bbc: d101 bne.n 8004bc2 + 8004b3c: 79fb ldrb r3, [r7, #7] + 8004b3e: 2b4c cmp r3, #76 ; 0x4c + 8004b40: d101 bne.n 8004b46 SPI_RxByte(); - 8004bbe: f7ff fe8f bl 80048e0 + 8004b42: f7ff fe8f bl 8004864 uint8_t n = 10; - 8004bc2: 230a movs r3, #10 - 8004bc4: 73bb strb r3, [r7, #14] + 8004b46: 230a movs r3, #10 + 8004b48: 73bb strb r3, [r7, #14] do { res = SPI_RxByte(); - 8004bc6: f7ff fe8b bl 80048e0 - 8004bca: 4603 mov r3, r0 - 8004bcc: 737b strb r3, [r7, #13] + 8004b4a: f7ff fe8b bl 8004864 + 8004b4e: 4603 mov r3, r0 + 8004b50: 737b strb r3, [r7, #13] } while ((res & 0x80) && --n); - 8004bce: f997 300d ldrsb.w r3, [r7, #13] - 8004bd2: 2b00 cmp r3, #0 - 8004bd4: da05 bge.n 8004be2 - 8004bd6: 7bbb ldrb r3, [r7, #14] - 8004bd8: 3b01 subs r3, #1 - 8004bda: 73bb strb r3, [r7, #14] - 8004bdc: 7bbb ldrb r3, [r7, #14] - 8004bde: 2b00 cmp r3, #0 - 8004be0: d1f1 bne.n 8004bc6 + 8004b52: f997 300d ldrsb.w r3, [r7, #13] + 8004b56: 2b00 cmp r3, #0 + 8004b58: da05 bge.n 8004b66 + 8004b5a: 7bbb ldrb r3, [r7, #14] + 8004b5c: 3b01 subs r3, #1 + 8004b5e: 73bb strb r3, [r7, #14] + 8004b60: 7bbb ldrb r3, [r7, #14] + 8004b62: 2b00 cmp r3, #0 + 8004b64: d1f1 bne.n 8004b4a return res; - 8004be2: 7b7b ldrb r3, [r7, #13] + 8004b66: 7b7b ldrb r3, [r7, #13] } - 8004be4: 4618 mov r0, r3 - 8004be6: 3710 adds r7, #16 - 8004be8: 46bd mov sp, r7 - 8004bea: bd80 pop {r7, pc} + 8004b68: 4618 mov r0, r3 + 8004b6a: 3710 adds r7, #16 + 8004b6c: 46bd mov sp, r7 + 8004b6e: bd80 pop {r7, pc} -08004bec : +08004b70 : -----------------------------------------------------------------------*/ DSTATUS SD_disk_initialize(BYTE drv) { - 8004bec: b590 push {r4, r7, lr} - 8004bee: b085 sub sp, #20 - 8004bf0: af00 add r7, sp, #0 - 8004bf2: 4603 mov r3, r0 - 8004bf4: 71fb strb r3, [r7, #7] + 8004b70: b590 push {r4, r7, lr} + 8004b72: b085 sub sp, #20 + 8004b74: af00 add r7, sp, #0 + 8004b76: 4603 mov r3, r0 + 8004b78: 71fb strb r3, [r7, #7] uint8_t n, type, ocr[4]; if(drv) - 8004bf6: 79fb ldrb r3, [r7, #7] - 8004bf8: 2b00 cmp r3, #0 - 8004bfa: d001 beq.n 8004c00 + 8004b7a: 79fb ldrb r3, [r7, #7] + 8004b7c: 2b00 cmp r3, #0 + 8004b7e: d001 beq.n 8004b84 return STA_NOINIT; - 8004bfc: 2301 movs r3, #1 - 8004bfe: e0d5 b.n 8004dac + 8004b80: 2301 movs r3, #1 + 8004b82: e0d5 b.n 8004d30 if(Stat & STA_NODISK) - 8004c00: 4b6c ldr r3, [pc, #432] ; (8004db4 ) - 8004c02: 781b ldrb r3, [r3, #0] - 8004c04: b2db uxtb r3, r3 - 8004c06: f003 0302 and.w r3, r3, #2 - 8004c0a: 2b00 cmp r3, #0 - 8004c0c: d003 beq.n 8004c16 + 8004b84: 4b6c ldr r3, [pc, #432] ; (8004d38 ) + 8004b86: 781b ldrb r3, [r3, #0] + 8004b88: b2db uxtb r3, r3 + 8004b8a: f003 0302 and.w r3, r3, #2 + 8004b8e: 2b00 cmp r3, #0 + 8004b90: d003 beq.n 8004b9a return Stat; - 8004c0e: 4b69 ldr r3, [pc, #420] ; (8004db4 ) - 8004c10: 781b ldrb r3, [r3, #0] - 8004c12: b2db uxtb r3, r3 - 8004c14: e0ca b.n 8004dac + 8004b92: 4b69 ldr r3, [pc, #420] ; (8004d38 ) + 8004b94: 781b ldrb r3, [r3, #0] + 8004b96: b2db uxtb r3, r3 + 8004b98: e0ca b.n 8004d30 SD_PowerOn(); - 8004c16: f7ff feab bl 8004970 + 8004b9a: f7ff feab bl 80048f4 SELECT(); - 8004c1a: f7ff fe2f bl 800487c type = 0; - 8004c1e: 2300 movs r3, #0 - 8004c20: 73bb strb r3, [r7, #14] + 8004ba2: 2300 movs r3, #0 + 8004ba4: 73bb strb r3, [r7, #14] if (SD_SendCmd(CMD0, 0) == 1) - 8004c22: 2100 movs r1, #0 - 8004c24: 2040 movs r0, #64 ; 0x40 - 8004c26: f7ff ff8f bl 8004b48 - 8004c2a: 4603 mov r3, r0 - 8004c2c: 2b01 cmp r3, #1 - 8004c2e: f040 80a5 bne.w 8004d7c + 8004ba6: 2100 movs r1, #0 + 8004ba8: 2040 movs r0, #64 ; 0x40 + 8004baa: f7ff ff8f bl 8004acc + 8004bae: 4603 mov r3, r0 + 8004bb0: 2b01 cmp r3, #1 + 8004bb2: f040 80a5 bne.w 8004d00 { Timer1 = 100; - 8004c32: 4b61 ldr r3, [pc, #388] ; (8004db8 ) - 8004c34: 2264 movs r2, #100 ; 0x64 - 8004c36: 701a strb r2, [r3, #0] + 8004bb6: 4b61 ldr r3, [pc, #388] ; (8004d3c ) + 8004bb8: 2264 movs r2, #100 ; 0x64 + 8004bba: 701a strb r2, [r3, #0] if (SD_SendCmd(CMD8, 0x1AA) == 1) - 8004c38: f44f 71d5 mov.w r1, #426 ; 0x1aa - 8004c3c: 2048 movs r0, #72 ; 0x48 - 8004c3e: f7ff ff83 bl 8004b48 - 8004c42: 4603 mov r3, r0 - 8004c44: 2b01 cmp r3, #1 - 8004c46: d158 bne.n 8004cfa + 8004bbc: f44f 71d5 mov.w r1, #426 ; 0x1aa + 8004bc0: 2048 movs r0, #72 ; 0x48 + 8004bc2: f7ff ff83 bl 8004acc + 8004bc6: 4603 mov r3, r0 + 8004bc8: 2b01 cmp r3, #1 + 8004bca: d158 bne.n 8004c7e { /* SDC Ver2+ */ for (n = 0; n < 4; n++) - 8004c48: 2300 movs r3, #0 - 8004c4a: 73fb strb r3, [r7, #15] - 8004c4c: e00c b.n 8004c68 + 8004bcc: 2300 movs r3, #0 + 8004bce: 73fb strb r3, [r7, #15] + 8004bd0: e00c b.n 8004bec { ocr[n] = SPI_RxByte(); - 8004c4e: 7bfc ldrb r4, [r7, #15] - 8004c50: f7ff fe46 bl 80048e0 - 8004c54: 4603 mov r3, r0 - 8004c56: 461a mov r2, r3 - 8004c58: f107 0310 add.w r3, r7, #16 - 8004c5c: 4423 add r3, r4 - 8004c5e: f803 2c08 strb.w r2, [r3, #-8] + 8004bd2: 7bfc ldrb r4, [r7, #15] + 8004bd4: f7ff fe46 bl 8004864 + 8004bd8: 4603 mov r3, r0 + 8004bda: 461a mov r2, r3 + 8004bdc: f107 0310 add.w r3, r7, #16 + 8004be0: 4423 add r3, r4 + 8004be2: f803 2c08 strb.w r2, [r3, #-8] for (n = 0; n < 4; n++) - 8004c62: 7bfb ldrb r3, [r7, #15] - 8004c64: 3301 adds r3, #1 - 8004c66: 73fb strb r3, [r7, #15] - 8004c68: 7bfb ldrb r3, [r7, #15] - 8004c6a: 2b03 cmp r3, #3 - 8004c6c: d9ef bls.n 8004c4e + 8004be6: 7bfb ldrb r3, [r7, #15] + 8004be8: 3301 adds r3, #1 + 8004bea: 73fb strb r3, [r7, #15] + 8004bec: 7bfb ldrb r3, [r7, #15] + 8004bee: 2b03 cmp r3, #3 + 8004bf0: d9ef bls.n 8004bd2 } if (ocr[2] == 0x01 && ocr[3] == 0xAA) - 8004c6e: 7abb ldrb r3, [r7, #10] - 8004c70: 2b01 cmp r3, #1 - 8004c72: f040 8083 bne.w 8004d7c - 8004c76: 7afb ldrb r3, [r7, #11] - 8004c78: 2baa cmp r3, #170 ; 0xaa - 8004c7a: d17f bne.n 8004d7c + 8004bf2: 7abb ldrb r3, [r7, #10] + 8004bf4: 2b01 cmp r3, #1 + 8004bf6: f040 8083 bne.w 8004d00 + 8004bfa: 7afb ldrb r3, [r7, #11] + 8004bfc: 2baa cmp r3, #170 ; 0xaa + 8004bfe: d17f bne.n 8004d00 { do { if (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 1UL << 30) == 0) - 8004c7c: 2100 movs r1, #0 - 8004c7e: 2077 movs r0, #119 ; 0x77 - 8004c80: f7ff ff62 bl 8004b48 - 8004c84: 4603 mov r3, r0 - 8004c86: 2b01 cmp r3, #1 - 8004c88: d807 bhi.n 8004c9a - 8004c8a: f04f 4180 mov.w r1, #1073741824 ; 0x40000000 - 8004c8e: 2069 movs r0, #105 ; 0x69 - 8004c90: f7ff ff5a bl 8004b48 - 8004c94: 4603 mov r3, r0 - 8004c96: 2b00 cmp r3, #0 - 8004c98: d005 beq.n 8004ca6 + 8004c00: 2100 movs r1, #0 + 8004c02: 2077 movs r0, #119 ; 0x77 + 8004c04: f7ff ff62 bl 8004acc + 8004c08: 4603 mov r3, r0 + 8004c0a: 2b01 cmp r3, #1 + 8004c0c: d807 bhi.n 8004c1e + 8004c0e: f04f 4180 mov.w r1, #1073741824 ; 0x40000000 + 8004c12: 2069 movs r0, #105 ; 0x69 + 8004c14: f7ff ff5a bl 8004acc + 8004c18: 4603 mov r3, r0 + 8004c1a: 2b00 cmp r3, #0 + 8004c1c: d005 beq.n 8004c2a break; /* ACMD41 with HCS bit */ } while (Timer1); - 8004c9a: 4b47 ldr r3, [pc, #284] ; (8004db8 ) - 8004c9c: 781b ldrb r3, [r3, #0] - 8004c9e: b2db uxtb r3, r3 - 8004ca0: 2b00 cmp r3, #0 - 8004ca2: d1eb bne.n 8004c7c - 8004ca4: e000 b.n 8004ca8 + 8004c1e: 4b47 ldr r3, [pc, #284] ; (8004d3c ) + 8004c20: 781b ldrb r3, [r3, #0] + 8004c22: b2db uxtb r3, r3 + 8004c24: 2b00 cmp r3, #0 + 8004c26: d1eb bne.n 8004c00 + 8004c28: e000 b.n 8004c2c break; /* ACMD41 with HCS bit */ - 8004ca6: bf00 nop + 8004c2a: bf00 nop if (Timer1 && SD_SendCmd(CMD58, 0) == 0) - 8004ca8: 4b43 ldr r3, [pc, #268] ; (8004db8 ) - 8004caa: 781b ldrb r3, [r3, #0] - 8004cac: b2db uxtb r3, r3 - 8004cae: 2b00 cmp r3, #0 - 8004cb0: d064 beq.n 8004d7c - 8004cb2: 2100 movs r1, #0 - 8004cb4: 207a movs r0, #122 ; 0x7a - 8004cb6: f7ff ff47 bl 8004b48 - 8004cba: 4603 mov r3, r0 - 8004cbc: 2b00 cmp r3, #0 - 8004cbe: d15d bne.n 8004d7c + 8004c2c: 4b43 ldr r3, [pc, #268] ; (8004d3c ) + 8004c2e: 781b ldrb r3, [r3, #0] + 8004c30: b2db uxtb r3, r3 + 8004c32: 2b00 cmp r3, #0 + 8004c34: d064 beq.n 8004d00 + 8004c36: 2100 movs r1, #0 + 8004c38: 207a movs r0, #122 ; 0x7a + 8004c3a: f7ff ff47 bl 8004acc + 8004c3e: 4603 mov r3, r0 + 8004c40: 2b00 cmp r3, #0 + 8004c42: d15d bne.n 8004d00 { /* Check CCS bit */ for (n = 0; n < 4; n++) - 8004cc0: 2300 movs r3, #0 - 8004cc2: 73fb strb r3, [r7, #15] - 8004cc4: e00c b.n 8004ce0 + 8004c44: 2300 movs r3, #0 + 8004c46: 73fb strb r3, [r7, #15] + 8004c48: e00c b.n 8004c64 { ocr[n] = SPI_RxByte(); - 8004cc6: 7bfc ldrb r4, [r7, #15] - 8004cc8: f7ff fe0a bl 80048e0 - 8004ccc: 4603 mov r3, r0 - 8004cce: 461a mov r2, r3 - 8004cd0: f107 0310 add.w r3, r7, #16 - 8004cd4: 4423 add r3, r4 - 8004cd6: f803 2c08 strb.w r2, [r3, #-8] + 8004c4a: 7bfc ldrb r4, [r7, #15] + 8004c4c: f7ff fe0a bl 8004864 + 8004c50: 4603 mov r3, r0 + 8004c52: 461a mov r2, r3 + 8004c54: f107 0310 add.w r3, r7, #16 + 8004c58: 4423 add r3, r4 + 8004c5a: f803 2c08 strb.w r2, [r3, #-8] for (n = 0; n < 4; n++) - 8004cda: 7bfb ldrb r3, [r7, #15] - 8004cdc: 3301 adds r3, #1 - 8004cde: 73fb strb r3, [r7, #15] - 8004ce0: 7bfb ldrb r3, [r7, #15] - 8004ce2: 2b03 cmp r3, #3 - 8004ce4: d9ef bls.n 8004cc6 + 8004c5e: 7bfb ldrb r3, [r7, #15] + 8004c60: 3301 adds r3, #1 + 8004c62: 73fb strb r3, [r7, #15] + 8004c64: 7bfb ldrb r3, [r7, #15] + 8004c66: 2b03 cmp r3, #3 + 8004c68: d9ef bls.n 8004c4a } type = (ocr[0] & 0x40) ? 6 : 2; - 8004ce6: 7a3b ldrb r3, [r7, #8] - 8004ce8: f003 0340 and.w r3, r3, #64 ; 0x40 - 8004cec: 2b00 cmp r3, #0 - 8004cee: d001 beq.n 8004cf4 - 8004cf0: 2306 movs r3, #6 - 8004cf2: e000 b.n 8004cf6 - 8004cf4: 2302 movs r3, #2 - 8004cf6: 73bb strb r3, [r7, #14] - 8004cf8: e040 b.n 8004d7c + 8004c6a: 7a3b ldrb r3, [r7, #8] + 8004c6c: f003 0340 and.w r3, r3, #64 ; 0x40 + 8004c70: 2b00 cmp r3, #0 + 8004c72: d001 beq.n 8004c78 + 8004c74: 2306 movs r3, #6 + 8004c76: e000 b.n 8004c7a + 8004c78: 2302 movs r3, #2 + 8004c7a: 73bb strb r3, [r7, #14] + 8004c7c: e040 b.n 8004d00 } } else { /* SDC Ver1 or MMC */ type = (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 0) <= 1) ? 2 : 1; /* SDC : MMC */ - 8004cfa: 2100 movs r1, #0 - 8004cfc: 2077 movs r0, #119 ; 0x77 - 8004cfe: f7ff ff23 bl 8004b48 - 8004d02: 4603 mov r3, r0 - 8004d04: 2b01 cmp r3, #1 - 8004d06: d808 bhi.n 8004d1a - 8004d08: 2100 movs r1, #0 - 8004d0a: 2069 movs r0, #105 ; 0x69 - 8004d0c: f7ff ff1c bl 8004b48 - 8004d10: 4603 mov r3, r0 - 8004d12: 2b01 cmp r3, #1 - 8004d14: d801 bhi.n 8004d1a - 8004d16: 2302 movs r3, #2 - 8004d18: e000 b.n 8004d1c - 8004d1a: 2301 movs r3, #1 - 8004d1c: 73bb strb r3, [r7, #14] + 8004c7e: 2100 movs r1, #0 + 8004c80: 2077 movs r0, #119 ; 0x77 + 8004c82: f7ff ff23 bl 8004acc + 8004c86: 4603 mov r3, r0 + 8004c88: 2b01 cmp r3, #1 + 8004c8a: d808 bhi.n 8004c9e + 8004c8c: 2100 movs r1, #0 + 8004c8e: 2069 movs r0, #105 ; 0x69 + 8004c90: f7ff ff1c bl 8004acc + 8004c94: 4603 mov r3, r0 + 8004c96: 2b01 cmp r3, #1 + 8004c98: d801 bhi.n 8004c9e + 8004c9a: 2302 movs r3, #2 + 8004c9c: e000 b.n 8004ca0 + 8004c9e: 2301 movs r3, #1 + 8004ca0: 73bb strb r3, [r7, #14] do { if (type == 2) - 8004d1e: 7bbb ldrb r3, [r7, #14] - 8004d20: 2b02 cmp r3, #2 - 8004d22: d10e bne.n 8004d42 + 8004ca2: 7bbb ldrb r3, [r7, #14] + 8004ca4: 2b02 cmp r3, #2 + 8004ca6: d10e bne.n 8004cc6 { if (SD_SendCmd(CMD55, 0) <= 1 && SD_SendCmd(CMD41, 0) == 0) - 8004d24: 2100 movs r1, #0 - 8004d26: 2077 movs r0, #119 ; 0x77 - 8004d28: f7ff ff0e bl 8004b48 - 8004d2c: 4603 mov r3, r0 - 8004d2e: 2b01 cmp r3, #1 - 8004d30: d80e bhi.n 8004d50 - 8004d32: 2100 movs r1, #0 - 8004d34: 2069 movs r0, #105 ; 0x69 - 8004d36: f7ff ff07 bl 8004b48 - 8004d3a: 4603 mov r3, r0 - 8004d3c: 2b00 cmp r3, #0 - 8004d3e: d107 bne.n 8004d50 + 8004ca8: 2100 movs r1, #0 + 8004caa: 2077 movs r0, #119 ; 0x77 + 8004cac: f7ff ff0e bl 8004acc + 8004cb0: 4603 mov r3, r0 + 8004cb2: 2b01 cmp r3, #1 + 8004cb4: d80e bhi.n 8004cd4 + 8004cb6: 2100 movs r1, #0 + 8004cb8: 2069 movs r0, #105 ; 0x69 + 8004cba: f7ff ff07 bl 8004acc + 8004cbe: 4603 mov r3, r0 + 8004cc0: 2b00 cmp r3, #0 + 8004cc2: d107 bne.n 8004cd4 break; /* ACMD41 */ - 8004d40: e00d b.n 8004d5e + 8004cc4: e00d b.n 8004ce2 } else { if (SD_SendCmd(CMD1, 0) == 0) - 8004d42: 2100 movs r1, #0 - 8004d44: 2041 movs r0, #65 ; 0x41 - 8004d46: f7ff feff bl 8004b48 - 8004d4a: 4603 mov r3, r0 - 8004d4c: 2b00 cmp r3, #0 - 8004d4e: d005 beq.n 8004d5c + 8004cc6: 2100 movs r1, #0 + 8004cc8: 2041 movs r0, #65 ; 0x41 + 8004cca: f7ff feff bl 8004acc + 8004cce: 4603 mov r3, r0 + 8004cd0: 2b00 cmp r3, #0 + 8004cd2: d005 beq.n 8004ce0 break; /* CMD1 */ } } while (Timer1); - 8004d50: 4b19 ldr r3, [pc, #100] ; (8004db8 ) - 8004d52: 781b ldrb r3, [r3, #0] - 8004d54: b2db uxtb r3, r3 - 8004d56: 2b00 cmp r3, #0 - 8004d58: d1e1 bne.n 8004d1e - 8004d5a: e000 b.n 8004d5e + 8004cd4: 4b19 ldr r3, [pc, #100] ; (8004d3c ) + 8004cd6: 781b ldrb r3, [r3, #0] + 8004cd8: b2db uxtb r3, r3 + 8004cda: 2b00 cmp r3, #0 + 8004cdc: d1e1 bne.n 8004ca2 + 8004cde: e000 b.n 8004ce2 break; /* CMD1 */ - 8004d5c: bf00 nop + 8004ce0: bf00 nop if (!Timer1 || SD_SendCmd(CMD16, 512) != 0) - 8004d5e: 4b16 ldr r3, [pc, #88] ; (8004db8 ) - 8004d60: 781b ldrb r3, [r3, #0] - 8004d62: b2db uxtb r3, r3 - 8004d64: 2b00 cmp r3, #0 - 8004d66: d007 beq.n 8004d78 - 8004d68: f44f 7100 mov.w r1, #512 ; 0x200 - 8004d6c: 2050 movs r0, #80 ; 0x50 - 8004d6e: f7ff feeb bl 8004b48 - 8004d72: 4603 mov r3, r0 - 8004d74: 2b00 cmp r3, #0 - 8004d76: d001 beq.n 8004d7c + 8004ce2: 4b16 ldr r3, [pc, #88] ; (8004d3c ) + 8004ce4: 781b ldrb r3, [r3, #0] + 8004ce6: b2db uxtb r3, r3 + 8004ce8: 2b00 cmp r3, #0 + 8004cea: d007 beq.n 8004cfc + 8004cec: f44f 7100 mov.w r1, #512 ; 0x200 + 8004cf0: 2050 movs r0, #80 ; 0x50 + 8004cf2: f7ff feeb bl 8004acc + 8004cf6: 4603 mov r3, r0 + 8004cf8: 2b00 cmp r3, #0 + 8004cfa: d001 beq.n 8004d00 { type = 0; - 8004d78: 2300 movs r3, #0 - 8004d7a: 73bb strb r3, [r7, #14] + 8004cfc: 2300 movs r3, #0 + 8004cfe: 73bb strb r3, [r7, #14] } } } CardType = type; - 8004d7c: 4a0f ldr r2, [pc, #60] ; (8004dbc ) - 8004d7e: 7bbb ldrb r3, [r7, #14] - 8004d80: 7013 strb r3, [r2, #0] + 8004d00: 4a0f ldr r2, [pc, #60] ; (8004d40 ) + 8004d02: 7bbb ldrb r3, [r7, #14] + 8004d04: 7013 strb r3, [r2, #0] DESELECT(); - 8004d82: f7ff fd87 bl 8004894 + 8004d06: f7ff fd87 bl 8004818 SPI_RxByte(); - 8004d86: f7ff fdab bl 80048e0 + 8004d0a: f7ff fdab bl 8004864 if (type) - 8004d8a: 7bbb ldrb r3, [r7, #14] - 8004d8c: 2b00 cmp r3, #0 - 8004d8e: d008 beq.n 8004da2 + 8004d0e: 7bbb ldrb r3, [r7, #14] + 8004d10: 2b00 cmp r3, #0 + 8004d12: d008 beq.n 8004d26 { /* Clear STA_NOINIT */ Stat &= ~STA_NOINIT; - 8004d90: 4b08 ldr r3, [pc, #32] ; (8004db4 ) - 8004d92: 781b ldrb r3, [r3, #0] - 8004d94: b2db uxtb r3, r3 - 8004d96: f023 0301 bic.w r3, r3, #1 - 8004d9a: b2da uxtb r2, r3 - 8004d9c: 4b05 ldr r3, [pc, #20] ; (8004db4 ) - 8004d9e: 701a strb r2, [r3, #0] - 8004da0: e001 b.n 8004da6 + 8004d14: 4b08 ldr r3, [pc, #32] ; (8004d38 ) + 8004d16: 781b ldrb r3, [r3, #0] + 8004d18: b2db uxtb r3, r3 + 8004d1a: f023 0301 bic.w r3, r3, #1 + 8004d1e: b2da uxtb r2, r3 + 8004d20: 4b05 ldr r3, [pc, #20] ; (8004d38 ) + 8004d22: 701a strb r2, [r3, #0] + 8004d24: e001 b.n 8004d2a } else { /* Initialization failed */ SD_PowerOff(); - 8004da2: f7ff fe31 bl 8004a08 + 8004d26: f7ff fe31 bl 800498c } return Stat; - 8004da6: 4b03 ldr r3, [pc, #12] ; (8004db4 ) - 8004da8: 781b ldrb r3, [r3, #0] - 8004daa: b2db uxtb r3, r3 + 8004d2a: 4b03 ldr r3, [pc, #12] ; (8004d38 ) + 8004d2c: 781b ldrb r3, [r3, #0] + 8004d2e: b2db uxtb r3, r3 } - 8004dac: 4618 mov r0, r3 - 8004dae: 3714 adds r7, #20 - 8004db0: 46bd mov sp, r7 - 8004db2: bd90 pop {r4, r7, pc} - 8004db4: 20000020 .word 0x20000020 - 8004db8: 2000081d .word 0x2000081d - 8004dbc: 200000d8 .word 0x200000d8 + 8004d30: 4618 mov r0, r3 + 8004d32: 3714 adds r7, #20 + 8004d34: 46bd mov sp, r7 + 8004d36: bd90 pop {r4, r7, pc} + 8004d38: 20000020 .word 0x20000020 + 8004d3c: 200007ad .word 0x200007ad + 8004d40: 20000070 .word 0x20000070 -08004dc0 : +08004d44 : DSTATUS SD_disk_status(BYTE drv) { - 8004dc0: b480 push {r7} - 8004dc2: b083 sub sp, #12 - 8004dc4: af00 add r7, sp, #0 - 8004dc6: 4603 mov r3, r0 - 8004dc8: 71fb strb r3, [r7, #7] + 8004d44: b480 push {r7} + 8004d46: b083 sub sp, #12 + 8004d48: af00 add r7, sp, #0 + 8004d4a: 4603 mov r3, r0 + 8004d4c: 71fb strb r3, [r7, #7] if (drv) - 8004dca: 79fb ldrb r3, [r7, #7] - 8004dcc: 2b00 cmp r3, #0 - 8004dce: d001 beq.n 8004dd4 + 8004d4e: 79fb ldrb r3, [r7, #7] + 8004d50: 2b00 cmp r3, #0 + 8004d52: d001 beq.n 8004d58 return STA_NOINIT; - 8004dd0: 2301 movs r3, #1 - 8004dd2: e002 b.n 8004dda + 8004d54: 2301 movs r3, #1 + 8004d56: e002 b.n 8004d5e return Stat; - 8004dd4: 4b03 ldr r3, [pc, #12] ; (8004de4 ) - 8004dd6: 781b ldrb r3, [r3, #0] - 8004dd8: b2db uxtb r3, r3 + 8004d58: 4b03 ldr r3, [pc, #12] ; (8004d68 ) + 8004d5a: 781b ldrb r3, [r3, #0] + 8004d5c: b2db uxtb r3, r3 } - 8004dda: 4618 mov r0, r3 - 8004ddc: 370c adds r7, #12 - 8004dde: 46bd mov sp, r7 - 8004de0: bc80 pop {r7} - 8004de2: 4770 bx lr - 8004de4: 20000020 .word 0x20000020 + 8004d5e: 4618 mov r0, r3 + 8004d60: 370c adds r7, #12 + 8004d62: 46bd mov sp, r7 + 8004d64: bc80 pop {r7} + 8004d66: 4770 bx lr + 8004d68: 20000020 .word 0x20000020 -08004de8 : +08004d6c : DRESULT SD_disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count) { - 8004de8: b580 push {r7, lr} - 8004dea: b084 sub sp, #16 - 8004dec: af00 add r7, sp, #0 - 8004dee: 60b9 str r1, [r7, #8] - 8004df0: 607a str r2, [r7, #4] - 8004df2: 603b str r3, [r7, #0] - 8004df4: 4603 mov r3, r0 - 8004df6: 73fb strb r3, [r7, #15] + 8004d6c: b580 push {r7, lr} + 8004d6e: b084 sub sp, #16 + 8004d70: af00 add r7, sp, #0 + 8004d72: 60b9 str r1, [r7, #8] + 8004d74: 607a str r2, [r7, #4] + 8004d76: 603b str r3, [r7, #0] + 8004d78: 4603 mov r3, r0 + 8004d7a: 73fb strb r3, [r7, #15] if (pdrv || !count) - 8004df8: 7bfb ldrb r3, [r7, #15] - 8004dfa: 2b00 cmp r3, #0 - 8004dfc: d102 bne.n 8004e04 - 8004dfe: 683b ldr r3, [r7, #0] - 8004e00: 2b00 cmp r3, #0 - 8004e02: d101 bne.n 8004e08 + 8004d7c: 7bfb ldrb r3, [r7, #15] + 8004d7e: 2b00 cmp r3, #0 + 8004d80: d102 bne.n 8004d88 + 8004d82: 683b ldr r3, [r7, #0] + 8004d84: 2b00 cmp r3, #0 + 8004d86: d101 bne.n 8004d8c return RES_PARERR; - 8004e04: 2304 movs r3, #4 - 8004e06: e051 b.n 8004eac + 8004d88: 2304 movs r3, #4 + 8004d8a: e051 b.n 8004e30 if (Stat & STA_NOINIT) - 8004e08: 4b2a ldr r3, [pc, #168] ; (8004eb4 ) - 8004e0a: 781b ldrb r3, [r3, #0] - 8004e0c: b2db uxtb r3, r3 - 8004e0e: f003 0301 and.w r3, r3, #1 - 8004e12: 2b00 cmp r3, #0 - 8004e14: d001 beq.n 8004e1a + 8004d8c: 4b2a ldr r3, [pc, #168] ; (8004e38 ) + 8004d8e: 781b ldrb r3, [r3, #0] + 8004d90: b2db uxtb r3, r3 + 8004d92: f003 0301 and.w r3, r3, #1 + 8004d96: 2b00 cmp r3, #0 + 8004d98: d001 beq.n 8004d9e return RES_NOTRDY; - 8004e16: 2303 movs r3, #3 - 8004e18: e048 b.n 8004eac + 8004d9a: 2303 movs r3, #3 + 8004d9c: e048 b.n 8004e30 if (!(CardType & 4)) - 8004e1a: 4b27 ldr r3, [pc, #156] ; (8004eb8 ) - 8004e1c: 781b ldrb r3, [r3, #0] - 8004e1e: f003 0304 and.w r3, r3, #4 - 8004e22: 2b00 cmp r3, #0 - 8004e24: d102 bne.n 8004e2c + 8004d9e: 4b27 ldr r3, [pc, #156] ; (8004e3c ) + 8004da0: 781b ldrb r3, [r3, #0] + 8004da2: f003 0304 and.w r3, r3, #4 + 8004da6: 2b00 cmp r3, #0 + 8004da8: d102 bne.n 8004db0 sector *= 512; - 8004e26: 687b ldr r3, [r7, #4] - 8004e28: 025b lsls r3, r3, #9 - 8004e2a: 607b str r3, [r7, #4] + 8004daa: 687b ldr r3, [r7, #4] + 8004dac: 025b lsls r3, r3, #9 + 8004dae: 607b str r3, [r7, #4] SELECT(); - 8004e2c: f7ff fd26 bl 800487c if (count == 1) - 8004e30: 683b ldr r3, [r7, #0] - 8004e32: 2b01 cmp r3, #1 - 8004e34: d111 bne.n 8004e5a + 8004db4: 683b ldr r3, [r7, #0] + 8004db6: 2b01 cmp r3, #1 + 8004db8: d111 bne.n 8004dde { if ((SD_SendCmd(CMD17, sector) == 0) && SD_RxDataBlock(buff, 512)) - 8004e36: 6879 ldr r1, [r7, #4] - 8004e38: 2051 movs r0, #81 ; 0x51 - 8004e3a: f7ff fe85 bl 8004b48 - 8004e3e: 4603 mov r3, r0 - 8004e40: 2b00 cmp r3, #0 - 8004e42: d129 bne.n 8004e98 - 8004e44: f44f 7100 mov.w r1, #512 ; 0x200 - 8004e48: 68b8 ldr r0, [r7, #8] - 8004e4a: f7ff fdf3 bl 8004a34 - 8004e4e: 4603 mov r3, r0 - 8004e50: 2b00 cmp r3, #0 - 8004e52: d021 beq.n 8004e98 + 8004dba: 6879 ldr r1, [r7, #4] + 8004dbc: 2051 movs r0, #81 ; 0x51 + 8004dbe: f7ff fe85 bl 8004acc + 8004dc2: 4603 mov r3, r0 + 8004dc4: 2b00 cmp r3, #0 + 8004dc6: d129 bne.n 8004e1c + 8004dc8: f44f 7100 mov.w r1, #512 ; 0x200 + 8004dcc: 68b8 ldr r0, [r7, #8] + 8004dce: f7ff fdf3 bl 80049b8 + 8004dd2: 4603 mov r3, r0 + 8004dd4: 2b00 cmp r3, #0 + 8004dd6: d021 beq.n 8004e1c count = 0; - 8004e54: 2300 movs r3, #0 - 8004e56: 603b str r3, [r7, #0] - 8004e58: e01e b.n 8004e98 + 8004dd8: 2300 movs r3, #0 + 8004dda: 603b str r3, [r7, #0] + 8004ddc: e01e b.n 8004e1c } else { if (SD_SendCmd(CMD18, sector) == 0) - 8004e5a: 6879 ldr r1, [r7, #4] - 8004e5c: 2052 movs r0, #82 ; 0x52 - 8004e5e: f7ff fe73 bl 8004b48 - 8004e62: 4603 mov r3, r0 - 8004e64: 2b00 cmp r3, #0 - 8004e66: d117 bne.n 8004e98 + 8004dde: 6879 ldr r1, [r7, #4] + 8004de0: 2052 movs r0, #82 ; 0x52 + 8004de2: f7ff fe73 bl 8004acc + 8004de6: 4603 mov r3, r0 + 8004de8: 2b00 cmp r3, #0 + 8004dea: d117 bne.n 8004e1c { do { if (!SD_RxDataBlock(buff, 512)) - 8004e68: f44f 7100 mov.w r1, #512 ; 0x200 - 8004e6c: 68b8 ldr r0, [r7, #8] - 8004e6e: f7ff fde1 bl 8004a34 - 8004e72: 4603 mov r3, r0 - 8004e74: 2b00 cmp r3, #0 - 8004e76: d00a beq.n 8004e8e + 8004dec: f44f 7100 mov.w r1, #512 ; 0x200 + 8004df0: 68b8 ldr r0, [r7, #8] + 8004df2: f7ff fde1 bl 80049b8 + 8004df6: 4603 mov r3, r0 + 8004df8: 2b00 cmp r3, #0 + 8004dfa: d00a beq.n 8004e12 break; buff += 512; - 8004e78: 68bb ldr r3, [r7, #8] - 8004e7a: f503 7300 add.w r3, r3, #512 ; 0x200 - 8004e7e: 60bb str r3, [r7, #8] + 8004dfc: 68bb ldr r3, [r7, #8] + 8004dfe: f503 7300 add.w r3, r3, #512 ; 0x200 + 8004e02: 60bb str r3, [r7, #8] } while (--count); - 8004e80: 683b ldr r3, [r7, #0] - 8004e82: 3b01 subs r3, #1 - 8004e84: 603b str r3, [r7, #0] - 8004e86: 683b ldr r3, [r7, #0] - 8004e88: 2b00 cmp r3, #0 - 8004e8a: d1ed bne.n 8004e68 - 8004e8c: e000 b.n 8004e90 + 8004e04: 683b ldr r3, [r7, #0] + 8004e06: 3b01 subs r3, #1 + 8004e08: 603b str r3, [r7, #0] + 8004e0a: 683b ldr r3, [r7, #0] + 8004e0c: 2b00 cmp r3, #0 + 8004e0e: d1ed bne.n 8004dec + 8004e10: e000 b.n 8004e14 break; - 8004e8e: bf00 nop + 8004e12: bf00 nop SD_SendCmd(CMD12, 0); - 8004e90: 2100 movs r1, #0 - 8004e92: 204c movs r0, #76 ; 0x4c - 8004e94: f7ff fe58 bl 8004b48 + 8004e14: 2100 movs r1, #0 + 8004e16: 204c movs r0, #76 ; 0x4c + 8004e18: f7ff fe58 bl 8004acc } } DESELECT(); - 8004e98: f7ff fcfc bl 8004894 + 8004e1c: f7ff fcfc bl 8004818 SPI_RxByte(); - 8004e9c: f7ff fd20 bl 80048e0 + 8004e20: f7ff fd20 bl 8004864 return count ? RES_ERROR : RES_OK; - 8004ea0: 683b ldr r3, [r7, #0] - 8004ea2: 2b00 cmp r3, #0 - 8004ea4: bf14 ite ne - 8004ea6: 2301 movne r3, #1 - 8004ea8: 2300 moveq r3, #0 - 8004eaa: b2db uxtb r3, r3 + 8004e24: 683b ldr r3, [r7, #0] + 8004e26: 2b00 cmp r3, #0 + 8004e28: bf14 ite ne + 8004e2a: 2301 movne r3, #1 + 8004e2c: 2300 moveq r3, #0 + 8004e2e: b2db uxtb r3, r3 } - 8004eac: 4618 mov r0, r3 - 8004eae: 3710 adds r7, #16 - 8004eb0: 46bd mov sp, r7 - 8004eb2: bd80 pop {r7, pc} - 8004eb4: 20000020 .word 0x20000020 - 8004eb8: 200000d8 .word 0x200000d8 + 8004e30: 4618 mov r0, r3 + 8004e32: 3710 adds r7, #16 + 8004e34: 46bd mov sp, r7 + 8004e36: bd80 pop {r7, pc} + 8004e38: 20000020 .word 0x20000020 + 8004e3c: 20000070 .word 0x20000070 -08004ebc : +08004e40 : #if _READONLY == 0 DRESULT SD_disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count) { - 8004ebc: b580 push {r7, lr} - 8004ebe: b084 sub sp, #16 - 8004ec0: af00 add r7, sp, #0 - 8004ec2: 60b9 str r1, [r7, #8] - 8004ec4: 607a str r2, [r7, #4] - 8004ec6: 603b str r3, [r7, #0] - 8004ec8: 4603 mov r3, r0 - 8004eca: 73fb strb r3, [r7, #15] + 8004e40: b580 push {r7, lr} + 8004e42: b084 sub sp, #16 + 8004e44: af00 add r7, sp, #0 + 8004e46: 60b9 str r1, [r7, #8] + 8004e48: 607a str r2, [r7, #4] + 8004e4a: 603b str r3, [r7, #0] + 8004e4c: 4603 mov r3, r0 + 8004e4e: 73fb strb r3, [r7, #15] if (pdrv || !count) - 8004ecc: 7bfb ldrb r3, [r7, #15] - 8004ece: 2b00 cmp r3, #0 - 8004ed0: d102 bne.n 8004ed8 - 8004ed2: 683b ldr r3, [r7, #0] - 8004ed4: 2b00 cmp r3, #0 - 8004ed6: d101 bne.n 8004edc + 8004e50: 7bfb ldrb r3, [r7, #15] + 8004e52: 2b00 cmp r3, #0 + 8004e54: d102 bne.n 8004e5c + 8004e56: 683b ldr r3, [r7, #0] + 8004e58: 2b00 cmp r3, #0 + 8004e5a: d101 bne.n 8004e60 return RES_PARERR; - 8004ed8: 2304 movs r3, #4 - 8004eda: e06b b.n 8004fb4 + 8004e5c: 2304 movs r3, #4 + 8004e5e: e06b b.n 8004f38 if (Stat & STA_NOINIT) - 8004edc: 4b37 ldr r3, [pc, #220] ; (8004fbc ) - 8004ede: 781b ldrb r3, [r3, #0] - 8004ee0: b2db uxtb r3, r3 - 8004ee2: f003 0301 and.w r3, r3, #1 - 8004ee6: 2b00 cmp r3, #0 - 8004ee8: d001 beq.n 8004eee + 8004e60: 4b37 ldr r3, [pc, #220] ; (8004f40 ) + 8004e62: 781b ldrb r3, [r3, #0] + 8004e64: b2db uxtb r3, r3 + 8004e66: f003 0301 and.w r3, r3, #1 + 8004e6a: 2b00 cmp r3, #0 + 8004e6c: d001 beq.n 8004e72 return RES_NOTRDY; - 8004eea: 2303 movs r3, #3 - 8004eec: e062 b.n 8004fb4 + 8004e6e: 2303 movs r3, #3 + 8004e70: e062 b.n 8004f38 if (Stat & STA_PROTECT) - 8004eee: 4b33 ldr r3, [pc, #204] ; (8004fbc ) - 8004ef0: 781b ldrb r3, [r3, #0] - 8004ef2: b2db uxtb r3, r3 - 8004ef4: f003 0304 and.w r3, r3, #4 - 8004ef8: 2b00 cmp r3, #0 - 8004efa: d001 beq.n 8004f00 + 8004e72: 4b33 ldr r3, [pc, #204] ; (8004f40 ) + 8004e74: 781b ldrb r3, [r3, #0] + 8004e76: b2db uxtb r3, r3 + 8004e78: f003 0304 and.w r3, r3, #4 + 8004e7c: 2b00 cmp r3, #0 + 8004e7e: d001 beq.n 8004e84 return RES_WRPRT; - 8004efc: 2302 movs r3, #2 - 8004efe: e059 b.n 8004fb4 + 8004e80: 2302 movs r3, #2 + 8004e82: e059 b.n 8004f38 if (!(CardType & 4)) - 8004f00: 4b2f ldr r3, [pc, #188] ; (8004fc0 ) - 8004f02: 781b ldrb r3, [r3, #0] - 8004f04: f003 0304 and.w r3, r3, #4 - 8004f08: 2b00 cmp r3, #0 - 8004f0a: d102 bne.n 8004f12 + 8004e84: 4b2f ldr r3, [pc, #188] ; (8004f44 ) + 8004e86: 781b ldrb r3, [r3, #0] + 8004e88: f003 0304 and.w r3, r3, #4 + 8004e8c: 2b00 cmp r3, #0 + 8004e8e: d102 bne.n 8004e96 sector *= 512; - 8004f0c: 687b ldr r3, [r7, #4] - 8004f0e: 025b lsls r3, r3, #9 - 8004f10: 607b str r3, [r7, #4] + 8004e90: 687b ldr r3, [r7, #4] + 8004e92: 025b lsls r3, r3, #9 + 8004e94: 607b str r3, [r7, #4] SELECT(); - 8004f12: f7ff fcb3 bl 800487c if (count == 1) - 8004f16: 683b ldr r3, [r7, #0] - 8004f18: 2b01 cmp r3, #1 - 8004f1a: d110 bne.n 8004f3e + 8004e9a: 683b ldr r3, [r7, #0] + 8004e9c: 2b01 cmp r3, #1 + 8004e9e: d110 bne.n 8004ec2 { if ((SD_SendCmd(CMD24, sector) == 0) && SD_TxDataBlock(buff, 0xFE)) - 8004f1c: 6879 ldr r1, [r7, #4] - 8004f1e: 2058 movs r0, #88 ; 0x58 - 8004f20: f7ff fe12 bl 8004b48 - 8004f24: 4603 mov r3, r0 - 8004f26: 2b00 cmp r3, #0 - 8004f28: d13a bne.n 8004fa0 - 8004f2a: 21fe movs r1, #254 ; 0xfe - 8004f2c: 68b8 ldr r0, [r7, #8] - 8004f2e: f7ff fdb7 bl 8004aa0 - 8004f32: 4603 mov r3, r0 - 8004f34: 2b00 cmp r3, #0 - 8004f36: d033 beq.n 8004fa0 + 8004ea0: 6879 ldr r1, [r7, #4] + 8004ea2: 2058 movs r0, #88 ; 0x58 + 8004ea4: f7ff fe12 bl 8004acc + 8004ea8: 4603 mov r3, r0 + 8004eaa: 2b00 cmp r3, #0 + 8004eac: d13a bne.n 8004f24 + 8004eae: 21fe movs r1, #254 ; 0xfe + 8004eb0: 68b8 ldr r0, [r7, #8] + 8004eb2: f7ff fdb7 bl 8004a24 + 8004eb6: 4603 mov r3, r0 + 8004eb8: 2b00 cmp r3, #0 + 8004eba: d033 beq.n 8004f24 count = 0; - 8004f38: 2300 movs r3, #0 - 8004f3a: 603b str r3, [r7, #0] - 8004f3c: e030 b.n 8004fa0 + 8004ebc: 2300 movs r3, #0 + 8004ebe: 603b str r3, [r7, #0] + 8004ec0: e030 b.n 8004f24 } else { if (CardType & 2) - 8004f3e: 4b20 ldr r3, [pc, #128] ; (8004fc0 ) - 8004f40: 781b ldrb r3, [r3, #0] - 8004f42: f003 0302 and.w r3, r3, #2 - 8004f46: 2b00 cmp r3, #0 - 8004f48: d007 beq.n 8004f5a + 8004ec2: 4b20 ldr r3, [pc, #128] ; (8004f44 ) + 8004ec4: 781b ldrb r3, [r3, #0] + 8004ec6: f003 0302 and.w r3, r3, #2 + 8004eca: 2b00 cmp r3, #0 + 8004ecc: d007 beq.n 8004ede { SD_SendCmd(CMD55, 0); - 8004f4a: 2100 movs r1, #0 - 8004f4c: 2077 movs r0, #119 ; 0x77 - 8004f4e: f7ff fdfb bl 8004b48 + 8004ece: 2100 movs r1, #0 + 8004ed0: 2077 movs r0, #119 ; 0x77 + 8004ed2: f7ff fdfb bl 8004acc SD_SendCmd(CMD23, count); /* ACMD23 */ - 8004f52: 6839 ldr r1, [r7, #0] - 8004f54: 2057 movs r0, #87 ; 0x57 - 8004f56: f7ff fdf7 bl 8004b48 + 8004ed6: 6839 ldr r1, [r7, #0] + 8004ed8: 2057 movs r0, #87 ; 0x57 + 8004eda: f7ff fdf7 bl 8004acc } if (SD_SendCmd(CMD25, sector) == 0) - 8004f5a: 6879 ldr r1, [r7, #4] - 8004f5c: 2059 movs r0, #89 ; 0x59 - 8004f5e: f7ff fdf3 bl 8004b48 - 8004f62: 4603 mov r3, r0 - 8004f64: 2b00 cmp r3, #0 - 8004f66: d11b bne.n 8004fa0 + 8004ede: 6879 ldr r1, [r7, #4] + 8004ee0: 2059 movs r0, #89 ; 0x59 + 8004ee2: f7ff fdf3 bl 8004acc + 8004ee6: 4603 mov r3, r0 + 8004ee8: 2b00 cmp r3, #0 + 8004eea: d11b bne.n 8004f24 { do { if(!SD_TxDataBlock(buff, 0xFC)) - 8004f68: 21fc movs r1, #252 ; 0xfc - 8004f6a: 68b8 ldr r0, [r7, #8] - 8004f6c: f7ff fd98 bl 8004aa0 - 8004f70: 4603 mov r3, r0 - 8004f72: 2b00 cmp r3, #0 - 8004f74: d00a beq.n 8004f8c + 8004eec: 21fc movs r1, #252 ; 0xfc + 8004eee: 68b8 ldr r0, [r7, #8] + 8004ef0: f7ff fd98 bl 8004a24 + 8004ef4: 4603 mov r3, r0 + 8004ef6: 2b00 cmp r3, #0 + 8004ef8: d00a beq.n 8004f10 break; buff += 512; - 8004f76: 68bb ldr r3, [r7, #8] - 8004f78: f503 7300 add.w r3, r3, #512 ; 0x200 - 8004f7c: 60bb str r3, [r7, #8] + 8004efa: 68bb ldr r3, [r7, #8] + 8004efc: f503 7300 add.w r3, r3, #512 ; 0x200 + 8004f00: 60bb str r3, [r7, #8] } while (--count); - 8004f7e: 683b ldr r3, [r7, #0] - 8004f80: 3b01 subs r3, #1 - 8004f82: 603b str r3, [r7, #0] - 8004f84: 683b ldr r3, [r7, #0] - 8004f86: 2b00 cmp r3, #0 - 8004f88: d1ee bne.n 8004f68 - 8004f8a: e000 b.n 8004f8e + 8004f02: 683b ldr r3, [r7, #0] + 8004f04: 3b01 subs r3, #1 + 8004f06: 603b str r3, [r7, #0] + 8004f08: 683b ldr r3, [r7, #0] + 8004f0a: 2b00 cmp r3, #0 + 8004f0c: d1ee bne.n 8004eec + 8004f0e: e000 b.n 8004f12 break; - 8004f8c: bf00 nop + 8004f10: bf00 nop if(!SD_TxDataBlock(0, 0xFD)) - 8004f8e: 21fd movs r1, #253 ; 0xfd - 8004f90: 2000 movs r0, #0 - 8004f92: f7ff fd85 bl 8004aa0 - 8004f96: 4603 mov r3, r0 - 8004f98: 2b00 cmp r3, #0 - 8004f9a: d101 bne.n 8004fa0 + 8004f12: 21fd movs r1, #253 ; 0xfd + 8004f14: 2000 movs r0, #0 + 8004f16: f7ff fd85 bl 8004a24 + 8004f1a: 4603 mov r3, r0 + 8004f1c: 2b00 cmp r3, #0 + 8004f1e: d101 bne.n 8004f24 { count = 1; - 8004f9c: 2301 movs r3, #1 - 8004f9e: 603b str r3, [r7, #0] + 8004f20: 2301 movs r3, #1 + 8004f22: 603b str r3, [r7, #0] } } } DESELECT(); - 8004fa0: f7ff fc78 bl 8004894 + 8004f24: f7ff fc78 bl 8004818 SPI_RxByte(); - 8004fa4: f7ff fc9c bl 80048e0 + 8004f28: f7ff fc9c bl 8004864 return count ? RES_ERROR : RES_OK; - 8004fa8: 683b ldr r3, [r7, #0] - 8004faa: 2b00 cmp r3, #0 - 8004fac: bf14 ite ne - 8004fae: 2301 movne r3, #1 - 8004fb0: 2300 moveq r3, #0 - 8004fb2: b2db uxtb r3, r3 + 8004f2c: 683b ldr r3, [r7, #0] + 8004f2e: 2b00 cmp r3, #0 + 8004f30: bf14 ite ne + 8004f32: 2301 movne r3, #1 + 8004f34: 2300 moveq r3, #0 + 8004f36: b2db uxtb r3, r3 } - 8004fb4: 4618 mov r0, r3 - 8004fb6: 3710 adds r7, #16 - 8004fb8: 46bd mov sp, r7 - 8004fba: bd80 pop {r7, pc} - 8004fbc: 20000020 .word 0x20000020 - 8004fc0: 200000d8 .word 0x200000d8 + 8004f38: 4618 mov r0, r3 + 8004f3a: 3710 adds r7, #16 + 8004f3c: 46bd mov sp, r7 + 8004f3e: bd80 pop {r7, pc} + 8004f40: 20000020 .word 0x20000020 + 8004f44: 20000070 .word 0x20000070 -08004fc4 : +08004f48 : #endif /* _READONLY */ DRESULT SD_disk_ioctl(BYTE drv, BYTE ctrl, void *buff) { - 8004fc4: b590 push {r4, r7, lr} - 8004fc6: b08b sub sp, #44 ; 0x2c - 8004fc8: af00 add r7, sp, #0 - 8004fca: 4603 mov r3, r0 - 8004fcc: 603a str r2, [r7, #0] - 8004fce: 71fb strb r3, [r7, #7] - 8004fd0: 460b mov r3, r1 - 8004fd2: 71bb strb r3, [r7, #6] + 8004f48: b590 push {r4, r7, lr} + 8004f4a: b08b sub sp, #44 ; 0x2c + 8004f4c: af00 add r7, sp, #0 + 8004f4e: 4603 mov r3, r0 + 8004f50: 603a str r2, [r7, #0] + 8004f52: 71fb strb r3, [r7, #7] + 8004f54: 460b mov r3, r1 + 8004f56: 71bb strb r3, [r7, #6] DRESULT res; BYTE n, csd[16], *ptr = buff; - 8004fd4: 683b ldr r3, [r7, #0] - 8004fd6: 623b str r3, [r7, #32] + 8004f58: 683b ldr r3, [r7, #0] + 8004f5a: 623b str r3, [r7, #32] WORD csize; if (drv) - 8004fd8: 79fb ldrb r3, [r7, #7] - 8004fda: 2b00 cmp r3, #0 - 8004fdc: d001 beq.n 8004fe2 + 8004f5c: 79fb ldrb r3, [r7, #7] + 8004f5e: 2b00 cmp r3, #0 + 8004f60: d001 beq.n 8004f66 return RES_PARERR; - 8004fde: 2304 movs r3, #4 - 8004fe0: e11b b.n 800521a + 8004f62: 2304 movs r3, #4 + 8004f64: e11b b.n 800519e res = RES_ERROR; - 8004fe2: 2301 movs r3, #1 - 8004fe4: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8004f66: 2301 movs r3, #1 + 8004f68: f887 3027 strb.w r3, [r7, #39] ; 0x27 if (ctrl == CTRL_POWER) - 8004fe8: 79bb ldrb r3, [r7, #6] - 8004fea: 2b05 cmp r3, #5 - 8004fec: d129 bne.n 8005042 + 8004f6c: 79bb ldrb r3, [r7, #6] + 8004f6e: 2b05 cmp r3, #5 + 8004f70: d129 bne.n 8004fc6 { switch (*ptr) - 8004fee: 6a3b ldr r3, [r7, #32] - 8004ff0: 781b ldrb r3, [r3, #0] - 8004ff2: 2b02 cmp r3, #2 - 8004ff4: d017 beq.n 8005026 - 8004ff6: 2b02 cmp r3, #2 - 8004ff8: dc1f bgt.n 800503a - 8004ffa: 2b00 cmp r3, #0 - 8004ffc: d002 beq.n 8005004 - 8004ffe: 2b01 cmp r3, #1 - 8005000: d00b beq.n 800501a - 8005002: e01a b.n 800503a + 8004f72: 6a3b ldr r3, [r7, #32] + 8004f74: 781b ldrb r3, [r3, #0] + 8004f76: 2b02 cmp r3, #2 + 8004f78: d017 beq.n 8004faa + 8004f7a: 2b02 cmp r3, #2 + 8004f7c: dc1f bgt.n 8004fbe + 8004f7e: 2b00 cmp r3, #0 + 8004f80: d002 beq.n 8004f88 + 8004f82: 2b01 cmp r3, #1 + 8004f84: d00b beq.n 8004f9e + 8004f86: e01a b.n 8004fbe { case 0: if (SD_CheckPower()) - 8005004: f7ff fd0c bl 8004a20 - 8005008: 4603 mov r3, r0 - 800500a: 2b00 cmp r3, #0 - 800500c: d001 beq.n 8005012 + 8004f88: f7ff fd0c bl 80049a4 + 8004f8c: 4603 mov r3, r0 + 8004f8e: 2b00 cmp r3, #0 + 8004f90: d001 beq.n 8004f96 SD_PowerOff(); /* Power Off */ - 800500e: f7ff fcfb bl 8004a08 + 8004f92: f7ff fcfb bl 800498c res = RES_OK; - 8005012: 2300 movs r3, #0 - 8005014: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8004f96: 2300 movs r3, #0 + 8004f98: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005018: e0fd b.n 8005216 + 8004f9c: e0fd b.n 800519a case 1: SD_PowerOn(); /* Power On */ - 800501a: f7ff fca9 bl 8004970 + 8004f9e: f7ff fca9 bl 80048f4 res = RES_OK; - 800501e: 2300 movs r3, #0 - 8005020: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8004fa2: 2300 movs r3, #0 + 8004fa4: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005024: e0f7 b.n 8005216 + 8004fa8: e0f7 b.n 800519a case 2: *(ptr + 1) = (BYTE) SD_CheckPower(); - 8005026: 6a3b ldr r3, [r7, #32] - 8005028: 1c5c adds r4, r3, #1 - 800502a: f7ff fcf9 bl 8004a20 - 800502e: 4603 mov r3, r0 - 8005030: 7023 strb r3, [r4, #0] + 8004faa: 6a3b ldr r3, [r7, #32] + 8004fac: 1c5c adds r4, r3, #1 + 8004fae: f7ff fcf9 bl 80049a4 + 8004fb2: 4603 mov r3, r0 + 8004fb4: 7023 strb r3, [r4, #0] res = RES_OK; /* Power Check */ - 8005032: 2300 movs r3, #0 - 8005034: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8004fb6: 2300 movs r3, #0 + 8004fb8: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005038: e0ed b.n 8005216 + 8004fbc: e0ed b.n 800519a default: res = RES_PARERR; - 800503a: 2304 movs r3, #4 - 800503c: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 8005040: e0e9 b.n 8005216 + 8004fbe: 2304 movs r3, #4 + 8004fc0: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8004fc4: e0e9 b.n 800519a } } else { if (Stat & STA_NOINIT) - 8005042: 4b78 ldr r3, [pc, #480] ; (8005224 ) - 8005044: 781b ldrb r3, [r3, #0] - 8005046: b2db uxtb r3, r3 - 8005048: f003 0301 and.w r3, r3, #1 - 800504c: 2b00 cmp r3, #0 - 800504e: d001 beq.n 8005054 + 8004fc6: 4b78 ldr r3, [pc, #480] ; (80051a8 ) + 8004fc8: 781b ldrb r3, [r3, #0] + 8004fca: b2db uxtb r3, r3 + 8004fcc: f003 0301 and.w r3, r3, #1 + 8004fd0: 2b00 cmp r3, #0 + 8004fd2: d001 beq.n 8004fd8 return RES_NOTRDY; - 8005050: 2303 movs r3, #3 - 8005052: e0e2 b.n 800521a + 8004fd4: 2303 movs r3, #3 + 8004fd6: e0e2 b.n 800519e SELECT(); - 8005054: f7ff fc12 bl 800487c switch (ctrl) - 8005058: 79bb ldrb r3, [r7, #6] - 800505a: 2b0d cmp r3, #13 - 800505c: f200 80cc bhi.w 80051f8 - 8005060: a201 add r2, pc, #4 ; (adr r2, 8005068 ) - 8005062: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8005066: bf00 nop - 8005068: 08005163 .word 0x08005163 - 800506c: 080050a1 .word 0x080050a1 - 8005070: 08005153 .word 0x08005153 - 8005074: 080051f9 .word 0x080051f9 - 8005078: 080051f9 .word 0x080051f9 - 800507c: 080051f9 .word 0x080051f9 - 8005080: 080051f9 .word 0x080051f9 - 8005084: 080051f9 .word 0x080051f9 - 8005088: 080051f9 .word 0x080051f9 - 800508c: 080051f9 .word 0x080051f9 - 8005090: 080051f9 .word 0x080051f9 - 8005094: 08005175 .word 0x08005175 - 8005098: 08005199 .word 0x08005199 - 800509c: 080051bd .word 0x080051bd + 8004fdc: 79bb ldrb r3, [r7, #6] + 8004fde: 2b0d cmp r3, #13 + 8004fe0: f200 80cc bhi.w 800517c + 8004fe4: a201 add r2, pc, #4 ; (adr r2, 8004fec ) + 8004fe6: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 8004fea: bf00 nop + 8004fec: 080050e7 .word 0x080050e7 + 8004ff0: 08005025 .word 0x08005025 + 8004ff4: 080050d7 .word 0x080050d7 + 8004ff8: 0800517d .word 0x0800517d + 8004ffc: 0800517d .word 0x0800517d + 8005000: 0800517d .word 0x0800517d + 8005004: 0800517d .word 0x0800517d + 8005008: 0800517d .word 0x0800517d + 800500c: 0800517d .word 0x0800517d + 8005010: 0800517d .word 0x0800517d + 8005014: 0800517d .word 0x0800517d + 8005018: 080050f9 .word 0x080050f9 + 800501c: 0800511d .word 0x0800511d + 8005020: 08005141 .word 0x08005141 { case GET_SECTOR_COUNT: if ((SD_SendCmd(CMD9, 0) == 0) && SD_RxDataBlock(csd, 16)) - 80050a0: 2100 movs r1, #0 - 80050a2: 2049 movs r0, #73 ; 0x49 - 80050a4: f7ff fd50 bl 8004b48 - 80050a8: 4603 mov r3, r0 - 80050aa: 2b00 cmp r3, #0 - 80050ac: f040 80a8 bne.w 8005200 - 80050b0: f107 030c add.w r3, r7, #12 - 80050b4: 2110 movs r1, #16 - 80050b6: 4618 mov r0, r3 - 80050b8: f7ff fcbc bl 8004a34 - 80050bc: 4603 mov r3, r0 - 80050be: 2b00 cmp r3, #0 - 80050c0: f000 809e beq.w 8005200 + 8005024: 2100 movs r1, #0 + 8005026: 2049 movs r0, #73 ; 0x49 + 8005028: f7ff fd50 bl 8004acc + 800502c: 4603 mov r3, r0 + 800502e: 2b00 cmp r3, #0 + 8005030: f040 80a8 bne.w 8005184 + 8005034: f107 030c add.w r3, r7, #12 + 8005038: 2110 movs r1, #16 + 800503a: 4618 mov r0, r3 + 800503c: f7ff fcbc bl 80049b8 + 8005040: 4603 mov r3, r0 + 8005042: 2b00 cmp r3, #0 + 8005044: f000 809e beq.w 8005184 { if ((csd[0] >> 6) == 1) - 80050c4: 7b3b ldrb r3, [r7, #12] - 80050c6: 099b lsrs r3, r3, #6 - 80050c8: b2db uxtb r3, r3 - 80050ca: 2b01 cmp r3, #1 - 80050cc: d10e bne.n 80050ec + 8005048: 7b3b ldrb r3, [r7, #12] + 800504a: 099b lsrs r3, r3, #6 + 800504c: b2db uxtb r3, r3 + 800504e: 2b01 cmp r3, #1 + 8005050: d10e bne.n 8005070 { /* SDC ver 2.00 */ csize = csd[9] + ((WORD) csd[8] << 8) + 1; - 80050ce: 7d7b ldrb r3, [r7, #21] - 80050d0: b29a uxth r2, r3 - 80050d2: 7d3b ldrb r3, [r7, #20] - 80050d4: b29b uxth r3, r3 - 80050d6: 021b lsls r3, r3, #8 - 80050d8: b29b uxth r3, r3 - 80050da: 4413 add r3, r2 - 80050dc: b29b uxth r3, r3 - 80050de: 3301 adds r3, #1 - 80050e0: 83fb strh r3, [r7, #30] + 8005052: 7d7b ldrb r3, [r7, #21] + 8005054: b29a uxth r2, r3 + 8005056: 7d3b ldrb r3, [r7, #20] + 8005058: b29b uxth r3, r3 + 800505a: 021b lsls r3, r3, #8 + 800505c: b29b uxth r3, r3 + 800505e: 4413 add r3, r2 + 8005060: b29b uxth r3, r3 + 8005062: 3301 adds r3, #1 + 8005064: 83fb strh r3, [r7, #30] *(DWORD*) buff = (DWORD) csize << 10; - 80050e2: 8bfb ldrh r3, [r7, #30] - 80050e4: 029a lsls r2, r3, #10 - 80050e6: 683b ldr r3, [r7, #0] - 80050e8: 601a str r2, [r3, #0] - 80050ea: e02e b.n 800514a + 8005066: 8bfb ldrh r3, [r7, #30] + 8005068: 029a lsls r2, r3, #10 + 800506a: 683b ldr r3, [r7, #0] + 800506c: 601a str r2, [r3, #0] + 800506e: e02e b.n 80050ce } else { /* MMC or SDC ver 1.XX */ n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2; - 80050ec: 7c7b ldrb r3, [r7, #17] - 80050ee: f003 030f and.w r3, r3, #15 - 80050f2: b2da uxtb r2, r3 - 80050f4: 7dbb ldrb r3, [r7, #22] - 80050f6: 09db lsrs r3, r3, #7 - 80050f8: b2db uxtb r3, r3 - 80050fa: 4413 add r3, r2 - 80050fc: b2da uxtb r2, r3 - 80050fe: 7d7b ldrb r3, [r7, #21] - 8005100: 005b lsls r3, r3, #1 - 8005102: b2db uxtb r3, r3 - 8005104: f003 0306 and.w r3, r3, #6 - 8005108: b2db uxtb r3, r3 - 800510a: 4413 add r3, r2 - 800510c: b2db uxtb r3, r3 - 800510e: 3302 adds r3, #2 - 8005110: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 8005070: 7c7b ldrb r3, [r7, #17] + 8005072: f003 030f and.w r3, r3, #15 + 8005076: b2da uxtb r2, r3 + 8005078: 7dbb ldrb r3, [r7, #22] + 800507a: 09db lsrs r3, r3, #7 + 800507c: b2db uxtb r3, r3 + 800507e: 4413 add r3, r2 + 8005080: b2da uxtb r2, r3 + 8005082: 7d7b ldrb r3, [r7, #21] + 8005084: 005b lsls r3, r3, #1 + 8005086: b2db uxtb r3, r3 + 8005088: f003 0306 and.w r3, r3, #6 + 800508c: b2db uxtb r3, r3 + 800508e: 4413 add r3, r2 + 8005090: b2db uxtb r3, r3 + 8005092: 3302 adds r3, #2 + 8005094: f887 3026 strb.w r3, [r7, #38] ; 0x26 csize = (csd[8] >> 6) + ((WORD) csd[7] << 2) + ((WORD) (csd[6] & 3) << 10) + 1; - 8005114: 7d3b ldrb r3, [r7, #20] - 8005116: 099b lsrs r3, r3, #6 - 8005118: b2db uxtb r3, r3 - 800511a: b29a uxth r2, r3 - 800511c: 7cfb ldrb r3, [r7, #19] - 800511e: b29b uxth r3, r3 - 8005120: 009b lsls r3, r3, #2 - 8005122: b29b uxth r3, r3 - 8005124: 4413 add r3, r2 - 8005126: b29a uxth r2, r3 - 8005128: 7cbb ldrb r3, [r7, #18] - 800512a: 029b lsls r3, r3, #10 - 800512c: b29b uxth r3, r3 - 800512e: f403 6340 and.w r3, r3, #3072 ; 0xc00 - 8005132: b29b uxth r3, r3 - 8005134: 4413 add r3, r2 - 8005136: b29b uxth r3, r3 - 8005138: 3301 adds r3, #1 - 800513a: 83fb strh r3, [r7, #30] + 8005098: 7d3b ldrb r3, [r7, #20] + 800509a: 099b lsrs r3, r3, #6 + 800509c: b2db uxtb r3, r3 + 800509e: b29a uxth r2, r3 + 80050a0: 7cfb ldrb r3, [r7, #19] + 80050a2: b29b uxth r3, r3 + 80050a4: 009b lsls r3, r3, #2 + 80050a6: b29b uxth r3, r3 + 80050a8: 4413 add r3, r2 + 80050aa: b29a uxth r2, r3 + 80050ac: 7cbb ldrb r3, [r7, #18] + 80050ae: 029b lsls r3, r3, #10 + 80050b0: b29b uxth r3, r3 + 80050b2: f403 6340 and.w r3, r3, #3072 ; 0xc00 + 80050b6: b29b uxth r3, r3 + 80050b8: 4413 add r3, r2 + 80050ba: b29b uxth r3, r3 + 80050bc: 3301 adds r3, #1 + 80050be: 83fb strh r3, [r7, #30] *(DWORD*) buff = (DWORD) csize << (n - 9); - 800513c: 8bfa ldrh r2, [r7, #30] - 800513e: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 8005142: 3b09 subs r3, #9 - 8005144: 409a lsls r2, r3 - 8005146: 683b ldr r3, [r7, #0] - 8005148: 601a str r2, [r3, #0] + 80050c0: 8bfa ldrh r2, [r7, #30] + 80050c2: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 80050c6: 3b09 subs r3, #9 + 80050c8: 409a lsls r2, r3 + 80050ca: 683b ldr r3, [r7, #0] + 80050cc: 601a str r2, [r3, #0] } res = RES_OK; - 800514a: 2300 movs r3, #0 - 800514c: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80050ce: 2300 movs r3, #0 + 80050d0: f887 3027 strb.w r3, [r7, #39] ; 0x27 } break; - 8005150: e056 b.n 8005200 + 80050d4: e056 b.n 8005184 case GET_SECTOR_SIZE: *(WORD*) buff = 512; - 8005152: 683b ldr r3, [r7, #0] - 8005154: f44f 7200 mov.w r2, #512 ; 0x200 - 8005158: 801a strh r2, [r3, #0] + 80050d6: 683b ldr r3, [r7, #0] + 80050d8: f44f 7200 mov.w r2, #512 ; 0x200 + 80050dc: 801a strh r2, [r3, #0] res = RES_OK; - 800515a: 2300 movs r3, #0 - 800515c: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80050de: 2300 movs r3, #0 + 80050e0: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005160: e055 b.n 800520e + 80050e4: e055 b.n 8005192 case CTRL_SYNC: if (SD_ReadyWait() == 0xFF) - 8005162: f7ff fbe9 bl 8004938 - 8005166: 4603 mov r3, r0 - 8005168: 2bff cmp r3, #255 ; 0xff - 800516a: d14b bne.n 8005204 + 80050e6: f7ff fbe9 bl 80048bc + 80050ea: 4603 mov r3, r0 + 80050ec: 2bff cmp r3, #255 ; 0xff + 80050ee: d14b bne.n 8005188 res = RES_OK; - 800516c: 2300 movs r3, #0 - 800516e: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 80050f0: 2300 movs r3, #0 + 80050f2: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005172: e047 b.n 8005204 + 80050f6: e047 b.n 8005188 case MMC_GET_CSD: if (SD_SendCmd(CMD9, 0) == 0 && SD_RxDataBlock(ptr, 16)) - 8005174: 2100 movs r1, #0 - 8005176: 2049 movs r0, #73 ; 0x49 - 8005178: f7ff fce6 bl 8004b48 - 800517c: 4603 mov r3, r0 - 800517e: 2b00 cmp r3, #0 - 8005180: d142 bne.n 8005208 - 8005182: 2110 movs r1, #16 - 8005184: 6a38 ldr r0, [r7, #32] - 8005186: f7ff fc55 bl 8004a34 - 800518a: 4603 mov r3, r0 - 800518c: 2b00 cmp r3, #0 - 800518e: d03b beq.n 8005208 + 80050f8: 2100 movs r1, #0 + 80050fa: 2049 movs r0, #73 ; 0x49 + 80050fc: f7ff fce6 bl 8004acc + 8005100: 4603 mov r3, r0 + 8005102: 2b00 cmp r3, #0 + 8005104: d142 bne.n 800518c + 8005106: 2110 movs r1, #16 + 8005108: 6a38 ldr r0, [r7, #32] + 800510a: f7ff fc55 bl 80049b8 + 800510e: 4603 mov r3, r0 + 8005110: 2b00 cmp r3, #0 + 8005112: d03b beq.n 800518c res = RES_OK; - 8005190: 2300 movs r3, #0 - 8005192: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005114: 2300 movs r3, #0 + 8005116: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 8005196: e037 b.n 8005208 + 800511a: e037 b.n 800518c case MMC_GET_CID: if (SD_SendCmd(CMD10, 0) == 0 && SD_RxDataBlock(ptr, 16)) - 8005198: 2100 movs r1, #0 - 800519a: 204a movs r0, #74 ; 0x4a - 800519c: f7ff fcd4 bl 8004b48 - 80051a0: 4603 mov r3, r0 - 80051a2: 2b00 cmp r3, #0 - 80051a4: d132 bne.n 800520c - 80051a6: 2110 movs r1, #16 - 80051a8: 6a38 ldr r0, [r7, #32] - 80051aa: f7ff fc43 bl 8004a34 - 80051ae: 4603 mov r3, r0 - 80051b0: 2b00 cmp r3, #0 - 80051b2: d02b beq.n 800520c + 800511c: 2100 movs r1, #0 + 800511e: 204a movs r0, #74 ; 0x4a + 8005120: f7ff fcd4 bl 8004acc + 8005124: 4603 mov r3, r0 + 8005126: 2b00 cmp r3, #0 + 8005128: d132 bne.n 8005190 + 800512a: 2110 movs r1, #16 + 800512c: 6a38 ldr r0, [r7, #32] + 800512e: f7ff fc43 bl 80049b8 + 8005132: 4603 mov r3, r0 + 8005134: 2b00 cmp r3, #0 + 8005136: d02b beq.n 8005190 res = RES_OK; - 80051b4: 2300 movs r3, #0 - 80051b6: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005138: 2300 movs r3, #0 + 800513a: f887 3027 strb.w r3, [r7, #39] ; 0x27 break; - 80051ba: e027 b.n 800520c + 800513e: e027 b.n 8005190 case MMC_GET_OCR: if (SD_SendCmd(CMD58, 0) == 0) - 80051bc: 2100 movs r1, #0 - 80051be: 207a movs r0, #122 ; 0x7a - 80051c0: f7ff fcc2 bl 8004b48 - 80051c4: 4603 mov r3, r0 - 80051c6: 2b00 cmp r3, #0 - 80051c8: d116 bne.n 80051f8 + 8005140: 2100 movs r1, #0 + 8005142: 207a movs r0, #122 ; 0x7a + 8005144: f7ff fcc2 bl 8004acc + 8005148: 4603 mov r3, r0 + 800514a: 2b00 cmp r3, #0 + 800514c: d116 bne.n 800517c { for (n = 0; n < 4; n++) - 80051ca: 2300 movs r3, #0 - 80051cc: f887 3026 strb.w r3, [r7, #38] ; 0x26 - 80051d0: e00b b.n 80051ea + 800514e: 2300 movs r3, #0 + 8005150: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 8005154: e00b b.n 800516e { *ptr++ = SPI_RxByte(); - 80051d2: 6a3c ldr r4, [r7, #32] - 80051d4: 1c63 adds r3, r4, #1 - 80051d6: 623b str r3, [r7, #32] - 80051d8: f7ff fb82 bl 80048e0 - 80051dc: 4603 mov r3, r0 - 80051de: 7023 strb r3, [r4, #0] + 8005156: 6a3c ldr r4, [r7, #32] + 8005158: 1c63 adds r3, r4, #1 + 800515a: 623b str r3, [r7, #32] + 800515c: f7ff fb82 bl 8004864 + 8005160: 4603 mov r3, r0 + 8005162: 7023 strb r3, [r4, #0] for (n = 0; n < 4; n++) - 80051e0: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 80051e4: 3301 adds r3, #1 - 80051e6: f887 3026 strb.w r3, [r7, #38] ; 0x26 - 80051ea: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 - 80051ee: 2b03 cmp r3, #3 - 80051f0: d9ef bls.n 80051d2 + 8005164: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 8005168: 3301 adds r3, #1 + 800516a: f887 3026 strb.w r3, [r7, #38] ; 0x26 + 800516e: f897 3026 ldrb.w r3, [r7, #38] ; 0x26 + 8005172: 2b03 cmp r3, #3 + 8005174: d9ef bls.n 8005156 } res = RES_OK; - 80051f2: 2300 movs r3, #0 - 80051f4: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005176: 2300 movs r3, #0 + 8005178: f887 3027 strb.w r3, [r7, #39] ; 0x27 } default: res = RES_PARERR; - 80051f8: 2304 movs r3, #4 - 80051fa: f887 3027 strb.w r3, [r7, #39] ; 0x27 - 80051fe: e006 b.n 800520e + 800517c: 2304 movs r3, #4 + 800517e: f887 3027 strb.w r3, [r7, #39] ; 0x27 + 8005182: e006 b.n 8005192 break; - 8005200: bf00 nop - 8005202: e004 b.n 800520e + 8005184: bf00 nop + 8005186: e004 b.n 8005192 break; - 8005204: bf00 nop - 8005206: e002 b.n 800520e + 8005188: bf00 nop + 800518a: e002 b.n 8005192 break; - 8005208: bf00 nop - 800520a: e000 b.n 800520e + 800518c: bf00 nop + 800518e: e000 b.n 8005192 break; - 800520c: bf00 nop + 8005190: bf00 nop } DESELECT(); - 800520e: f7ff fb41 bl 8004894 + 8005192: f7ff fb41 bl 8004818 SPI_RxByte(); - 8005212: f7ff fb65 bl 80048e0 + 8005196: f7ff fb65 bl 8004864 } return res; - 8005216: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 + 800519a: f897 3027 ldrb.w r3, [r7, #39] ; 0x27 } - 800521a: 4618 mov r0, r3 - 800521c: 372c adds r7, #44 ; 0x2c - 800521e: 46bd mov sp, r7 - 8005220: bd90 pop {r4, r7, pc} - 8005222: bf00 nop - 8005224: 20000020 .word 0x20000020 + 800519e: 4618 mov r0, r3 + 80051a0: 372c adds r7, #44 ; 0x2c + 80051a2: 46bd mov sp, r7 + 80051a4: bd90 pop {r4, r7, pc} + 80051a6: bf00 nop + 80051a8: 20000020 .word 0x20000020 -08005228 : +080051ac : _lcd_dev lcddev; //¹ÜÀíLCDÖØÒª²ÎÊý //**************************************************¼¸ÖÖ¿ìËÙ½Ó¿Ú //д¼Ä´æÆ÷º¯Êý //regval:¼Ä´æÆ÷Öµ void LCD_WR_REG(uint16_t regval) { - 8005228: b480 push {r7} - 800522a: b083 sub sp, #12 - 800522c: af00 add r7, sp, #0 - 800522e: 4603 mov r3, r0 - 8005230: 80fb strh r3, [r7, #6] + 80051ac: b480 push {r7} + 80051ae: b083 sub sp, #12 + 80051b0: af00 add r7, sp, #0 + 80051b2: 4603 mov r3, r0 + 80051b4: 80fb strh r3, [r7, #6] LCD_REG_ADDRESS=regval;//дÈëҪдµÄ¼Ä´æÆ÷ÐòºÅ - 8005232: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 8005236: 88fb ldrh r3, [r7, #6] - 8005238: 8013 strh r3, [r2, #0] + 80051b6: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 80051ba: 88fb ldrh r3, [r7, #6] + 80051bc: 8013 strh r3, [r2, #0] } - 800523a: bf00 nop - 800523c: 370c adds r7, #12 - 800523e: 46bd mov sp, r7 - 8005240: bc80 pop {r7} - 8005242: 4770 bx lr + 80051be: bf00 nop + 80051c0: 370c adds r7, #12 + 80051c2: 46bd mov sp, r7 + 80051c4: bc80 pop {r7} + 80051c6: 4770 bx lr -08005244 : +080051c8 : //дLCDÊý¾Ý //data:ҪдÈëµÄÖµ void LCD_WR_DATA(uint16_t data) { - 8005244: b480 push {r7} - 8005246: b083 sub sp, #12 - 8005248: af00 add r7, sp, #0 - 800524a: 4603 mov r3, r0 - 800524c: 80fb strh r3, [r7, #6] + 80051c8: b480 push {r7} + 80051ca: b083 sub sp, #12 + 80051cc: af00 add r7, sp, #0 + 80051ce: 4603 mov r3, r0 + 80051d0: 80fb strh r3, [r7, #6] LCD_DATA_ADDRESS=data; - 800524e: 4a04 ldr r2, [pc, #16] ; (8005260 ) - 8005250: 88fb ldrh r3, [r7, #6] - 8005252: 8013 strh r3, [r2, #0] + 80051d2: 4a04 ldr r2, [pc, #16] ; (80051e4 ) + 80051d4: 88fb ldrh r3, [r7, #6] + 80051d6: 8013 strh r3, [r2, #0] } - 8005254: bf00 nop - 8005256: 370c adds r7, #12 - 8005258: 46bd mov sp, r7 - 800525a: bc80 pop {r7} - 800525c: 4770 bx lr - 800525e: bf00 nop - 8005260: 6c000800 .word 0x6c000800 + 80051d8: bf00 nop + 80051da: 370c adds r7, #12 + 80051dc: 46bd mov sp, r7 + 80051de: bc80 pop {r7} + 80051e0: 4770 bx lr + 80051e2: bf00 nop + 80051e4: 6c000800 .word 0x6c000800 -08005264 : +080051e8 : } //д¼Ä´æÆ÷ //LCD_Reg:¼Ä´æÆ÷µØÖ· //LCD_RegValue:ҪдÈëµÄÊý¾Ý void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) { - 8005264: b480 push {r7} - 8005266: b083 sub sp, #12 - 8005268: af00 add r7, sp, #0 - 800526a: 4603 mov r3, r0 - 800526c: 460a mov r2, r1 - 800526e: 80fb strh r3, [r7, #6] - 8005270: 4613 mov r3, r2 - 8005272: 80bb strh r3, [r7, #4] + 80051e8: b480 push {r7} + 80051ea: b083 sub sp, #12 + 80051ec: af00 add r7, sp, #0 + 80051ee: 4603 mov r3, r0 + 80051f0: 460a mov r2, r1 + 80051f2: 80fb strh r3, [r7, #6] + 80051f4: 4613 mov r3, r2 + 80051f6: 80bb strh r3, [r7, #4] LCD_REG_ADDRESS = LCD_Reg; //дÈëҪдµÄ¼Ä´æÆ÷ÐòºÅ - 8005274: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 8005278: 88fb ldrh r3, [r7, #6] - 800527a: 8013 strh r3, [r2, #0] + 80051f8: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 80051fc: 88fb ldrh r3, [r7, #6] + 80051fe: 8013 strh r3, [r2, #0] LCD_DATA_ADDRESS = LCD_RegValue;//дÈëÊý¾Ý - 800527c: 4a03 ldr r2, [pc, #12] ; (800528c ) - 800527e: 88bb ldrh r3, [r7, #4] - 8005280: 8013 strh r3, [r2, #0] + 8005200: 4a03 ldr r2, [pc, #12] ; (8005210 ) + 8005202: 88bb ldrh r3, [r7, #4] + 8005204: 8013 strh r3, [r2, #0] } - 8005282: bf00 nop - 8005284: 370c adds r7, #12 - 8005286: 46bd mov sp, r7 - 8005288: bc80 pop {r7} - 800528a: 4770 bx lr - 800528c: 6c000800 .word 0x6c000800 + 8005206: bf00 nop + 8005208: 370c adds r7, #12 + 800520a: 46bd mov sp, r7 + 800520c: bc80 pop {r7} + 800520e: 4770 bx lr + 8005210: 6c000800 .word 0x6c000800 -08005290 : +08005214 : //¶Á¼Ä´æÆ÷ //LCD_Reg:¼Ä´æÆ÷µØÖ· //·µ»ØÖµ:¶Áµ½µÄÊý¾Ý uint16_t LCD_ReadReg(uint16_t LCD_Reg) { - 8005290: b480 push {r7} - 8005292: b083 sub sp, #12 - 8005294: af00 add r7, sp, #0 - 8005296: 4603 mov r3, r0 - 8005298: 80fb strh r3, [r7, #6] + 8005214: b480 push {r7} + 8005216: b083 sub sp, #12 + 8005218: af00 add r7, sp, #0 + 800521a: 4603 mov r3, r0 + 800521c: 80fb strh r3, [r7, #6] LCD_REG_ADDRESS=LCD_Reg; //дÈëÒª¶ÁµÄ¼Ä´æÆ÷ÐòºÅ - 800529a: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 - 800529e: 88fb ldrh r3, [r7, #6] - 80052a0: 8013 strh r3, [r2, #0] + 800521e: f04f 42d8 mov.w r2, #1811939328 ; 0x6c000000 + 8005222: 88fb ldrh r3, [r7, #6] + 8005224: 8013 strh r3, [r2, #0] //delay_us(5); return LCD_DATA_ADDRESS; //·µ»Ø¶Áµ½µÄÖµ - 80052a2: 4b04 ldr r3, [pc, #16] ; (80052b4 ) - 80052a4: 881b ldrh r3, [r3, #0] - 80052a6: b29b uxth r3, r3 + 8005226: 4b04 ldr r3, [pc, #16] ; (8005238 ) + 8005228: 881b ldrh r3, [r3, #0] + 800522a: b29b uxth r3, r3 } - 80052a8: 4618 mov r0, r3 - 80052aa: 370c adds r7, #12 - 80052ac: 46bd mov sp, r7 - 80052ae: bc80 pop {r7} - 80052b0: 4770 bx lr - 80052b2: bf00 nop - 80052b4: 6c000800 .word 0x6c000800 + 800522c: 4618 mov r0, r3 + 800522e: 370c adds r7, #12 + 8005230: 46bd mov sp, r7 + 8005232: bc80 pop {r7} + 8005234: 4770 bx lr + 8005236: bf00 nop + 8005238: 6c000800 .word 0x6c000800 -080052b8 : +0800523c : //×¢Òâ:ÆäËûº¯Êý¿ÉÄÜ»áÊܵ½´Ëº¯ÊýÉèÖõÄÓ°Ïì(ÓÈÆäÊÇ9341/6804ÕâÁ½¸öÆæÝâ), //ËùÒÔ,Ò»°ãÉèÖÃΪL2R_U2D¼´¿É,Èç¹ûÉèÖÃΪÆäËûɨÃ跽ʽ,¿ÉÄܵ¼ÖÂÏÔʾ²»Õý³£. //dir:0~7,´ú±í8¸ö·½Ïò(¾ßÌ嶨Òå¼ûlcd.h) //9320/9325/9328/4531/4535/1505/b505/8989/5408/9341/5310µÈICÒѾ­Êµ¼Ê²âÊÔ void LCD_Scan_Dir(uint8_t dir) { - 80052b8: b580 push {r7, lr} - 80052ba: b084 sub sp, #16 - 80052bc: af00 add r7, sp, #0 - 80052be: 4603 mov r3, r0 - 80052c0: 71fb strb r3, [r7, #7] + 800523c: b580 push {r7, lr} + 800523e: b084 sub sp, #16 + 8005240: af00 add r7, sp, #0 + 8005242: 4603 mov r3, r0 + 8005244: 71fb strb r3, [r7, #7] uint16_t regval=0; - 80052c2: 2300 movs r3, #0 - 80052c4: 81fb strh r3, [r7, #14] + 8005246: 2300 movs r3, #0 + 8005248: 81fb strh r3, [r7, #14] uint8_t dirreg=0; - 80052c6: 2300 movs r3, #0 - 80052c8: 737b strb r3, [r7, #13] + 800524a: 2300 movs r3, #0 + 800524c: 737b strb r3, [r7, #13] uint16_t temp; if(lcddev.dir==1&&lcddev.id!=0X6804)//ºáÆÁʱ£¬¶Ô6804²»¸Ä±äɨÃè·½Ïò£¡ - 80052ca: 4ba8 ldr r3, [pc, #672] ; (800556c ) - 80052cc: 799b ldrb r3, [r3, #6] - 80052ce: 2b01 cmp r3, #1 - 80052d0: d134 bne.n 800533c - 80052d2: 4ba6 ldr r3, [pc, #664] ; (800556c ) - 80052d4: 889b ldrh r3, [r3, #4] - 80052d6: f646 0204 movw r2, #26628 ; 0x6804 - 80052da: 4293 cmp r3, r2 - 80052dc: d02e beq.n 800533c + 800524e: 4ba8 ldr r3, [pc, #672] ; (80054f0 ) + 8005250: 799b ldrb r3, [r3, #6] + 8005252: 2b01 cmp r3, #1 + 8005254: d134 bne.n 80052c0 + 8005256: 4ba6 ldr r3, [pc, #664] ; (80054f0 ) + 8005258: 889b ldrh r3, [r3, #4] + 800525a: f646 0204 movw r2, #26628 ; 0x6804 + 800525e: 4293 cmp r3, r2 + 8005260: d02e beq.n 80052c0 { switch(dir)//·½Ïòת»» - 80052de: 79fb ldrb r3, [r7, #7] - 80052e0: 2b07 cmp r3, #7 - 80052e2: d82c bhi.n 800533e - 80052e4: a201 add r2, pc, #4 ; (adr r2, 80052ec ) - 80052e6: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 80052ea: bf00 nop - 80052ec: 0800530d .word 0x0800530d - 80052f0: 08005313 .word 0x08005313 - 80052f4: 08005319 .word 0x08005319 - 80052f8: 0800531f .word 0x0800531f - 80052fc: 08005325 .word 0x08005325 - 8005300: 0800532b .word 0x0800532b - 8005304: 08005331 .word 0x08005331 - 8005308: 08005337 .word 0x08005337 + 8005262: 79fb ldrb r3, [r7, #7] + 8005264: 2b07 cmp r3, #7 + 8005266: d82c bhi.n 80052c2 + 8005268: a201 add r2, pc, #4 ; (adr r2, 8005270 ) + 800526a: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800526e: bf00 nop + 8005270: 08005291 .word 0x08005291 + 8005274: 08005297 .word 0x08005297 + 8005278: 0800529d .word 0x0800529d + 800527c: 080052a3 .word 0x080052a3 + 8005280: 080052a9 .word 0x080052a9 + 8005284: 080052af .word 0x080052af + 8005288: 080052b5 .word 0x080052b5 + 800528c: 080052bb .word 0x080052bb { case 0:dir=6;break; - 800530c: 2306 movs r3, #6 - 800530e: 71fb strb r3, [r7, #7] - 8005310: e015 b.n 800533e + 8005290: 2306 movs r3, #6 + 8005292: 71fb strb r3, [r7, #7] + 8005294: e015 b.n 80052c2 case 1:dir=7;break; - 8005312: 2307 movs r3, #7 - 8005314: 71fb strb r3, [r7, #7] - 8005316: e012 b.n 800533e + 8005296: 2307 movs r3, #7 + 8005298: 71fb strb r3, [r7, #7] + 800529a: e012 b.n 80052c2 case 2:dir=4;break; - 8005318: 2304 movs r3, #4 - 800531a: 71fb strb r3, [r7, #7] - 800531c: e00f b.n 800533e + 800529c: 2304 movs r3, #4 + 800529e: 71fb strb r3, [r7, #7] + 80052a0: e00f b.n 80052c2 case 3:dir=5;break; - 800531e: 2305 movs r3, #5 - 8005320: 71fb strb r3, [r7, #7] - 8005322: e00c b.n 800533e + 80052a2: 2305 movs r3, #5 + 80052a4: 71fb strb r3, [r7, #7] + 80052a6: e00c b.n 80052c2 case 4:dir=1;break; - 8005324: 2301 movs r3, #1 - 8005326: 71fb strb r3, [r7, #7] - 8005328: e009 b.n 800533e + 80052a8: 2301 movs r3, #1 + 80052aa: 71fb strb r3, [r7, #7] + 80052ac: e009 b.n 80052c2 case 5:dir=0;break; - 800532a: 2300 movs r3, #0 - 800532c: 71fb strb r3, [r7, #7] - 800532e: e006 b.n 800533e + 80052ae: 2300 movs r3, #0 + 80052b0: 71fb strb r3, [r7, #7] + 80052b2: e006 b.n 80052c2 case 6:dir=3;break; - 8005330: 2303 movs r3, #3 - 8005332: 71fb strb r3, [r7, #7] - 8005334: e003 b.n 800533e + 80052b4: 2303 movs r3, #3 + 80052b6: 71fb strb r3, [r7, #7] + 80052b8: e003 b.n 80052c2 case 7:dir=2;break; - 8005336: 2302 movs r3, #2 - 8005338: 71fb strb r3, [r7, #7] - 800533a: e000 b.n 800533e + 80052ba: 2302 movs r3, #2 + 80052bc: 71fb strb r3, [r7, #7] + 80052be: e000 b.n 80052c2 } } - 800533c: bf00 nop + 80052c0: bf00 nop if(lcddev.id==0x9341||lcddev.id==0X6804||lcddev.id==0X5310)//9341/6804/5310,ºÜÌØÊâ - 800533e: 4b8b ldr r3, [pc, #556] ; (800556c ) - 8005340: 889b ldrh r3, [r3, #4] - 8005342: f249 3241 movw r2, #37697 ; 0x9341 - 8005346: 4293 cmp r3, r2 - 8005348: d00c beq.n 8005364 - 800534a: 4b88 ldr r3, [pc, #544] ; (800556c ) - 800534c: 889b ldrh r3, [r3, #4] - 800534e: f646 0204 movw r2, #26628 ; 0x6804 - 8005352: 4293 cmp r3, r2 - 8005354: d006 beq.n 8005364 - 8005356: 4b85 ldr r3, [pc, #532] ; (800556c ) - 8005358: 889b ldrh r3, [r3, #4] - 800535a: f245 3210 movw r2, #21264 ; 0x5310 - 800535e: 4293 cmp r3, r2 - 8005360: f040 80bb bne.w 80054da + 80052c2: 4b8b ldr r3, [pc, #556] ; (80054f0 ) + 80052c4: 889b ldrh r3, [r3, #4] + 80052c6: f249 3241 movw r2, #37697 ; 0x9341 + 80052ca: 4293 cmp r3, r2 + 80052cc: d00c beq.n 80052e8 + 80052ce: 4b88 ldr r3, [pc, #544] ; (80054f0 ) + 80052d0: 889b ldrh r3, [r3, #4] + 80052d2: f646 0204 movw r2, #26628 ; 0x6804 + 80052d6: 4293 cmp r3, r2 + 80052d8: d006 beq.n 80052e8 + 80052da: 4b85 ldr r3, [pc, #532] ; (80054f0 ) + 80052dc: 889b ldrh r3, [r3, #4] + 80052de: f245 3210 movw r2, #21264 ; 0x5310 + 80052e2: 4293 cmp r3, r2 + 80052e4: f040 80bb bne.w 800545e { switch(dir) - 8005364: 79fb ldrb r3, [r7, #7] - 8005366: 2b07 cmp r3, #7 - 8005368: d835 bhi.n 80053d6 - 800536a: a201 add r2, pc, #4 ; (adr r2, 8005370 ) - 800536c: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 8005370: 080053d7 .word 0x080053d7 - 8005374: 08005391 .word 0x08005391 - 8005378: 0800539b .word 0x0800539b - 800537c: 080053a5 .word 0x080053a5 - 8005380: 080053af .word 0x080053af - 8005384: 080053b9 .word 0x080053b9 - 8005388: 080053c3 .word 0x080053c3 - 800538c: 080053cd .word 0x080053cd + 80052e8: 79fb ldrb r3, [r7, #7] + 80052ea: 2b07 cmp r3, #7 + 80052ec: d835 bhi.n 800535a + 80052ee: a201 add r2, pc, #4 ; (adr r2, 80052f4 ) + 80052f0: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 80052f4: 0800535b .word 0x0800535b + 80052f8: 08005315 .word 0x08005315 + 80052fc: 0800531f .word 0x0800531f + 8005300: 08005329 .word 0x08005329 + 8005304: 08005333 .word 0x08005333 + 8005308: 0800533d .word 0x0800533d + 800530c: 08005347 .word 0x08005347 + 8005310: 08005351 .word 0x08005351 { case L2R_U2D://´Ó×óµ½ÓÒ,´ÓÉϵ½Ï regval|=(0<<7)|(0<<6)|(0<<5); break; case L2R_D2U://´Ó×óµ½ÓÒ,´Óϵ½ÉÏ regval|=(1<<7)|(0<<6)|(0<<5); - 8005390: 89fb ldrh r3, [r7, #14] - 8005392: f043 0380 orr.w r3, r3, #128 ; 0x80 - 8005396: 81fb strh r3, [r7, #14] + 8005314: 89fb ldrh r3, [r7, #14] + 8005316: f043 0380 orr.w r3, r3, #128 ; 0x80 + 800531a: 81fb strh r3, [r7, #14] break; - 8005398: e01d b.n 80053d6 + 800531c: e01d b.n 800535a case R2L_U2D://´ÓÓÒµ½×ó,´ÓÉϵ½Ï regval|=(0<<7)|(1<<6)|(0<<5); - 800539a: 89fb ldrh r3, [r7, #14] - 800539c: f043 0340 orr.w r3, r3, #64 ; 0x40 - 80053a0: 81fb strh r3, [r7, #14] + 800531e: 89fb ldrh r3, [r7, #14] + 8005320: f043 0340 orr.w r3, r3, #64 ; 0x40 + 8005324: 81fb strh r3, [r7, #14] break; - 80053a2: e018 b.n 80053d6 + 8005326: e018 b.n 800535a case R2L_D2U://´ÓÓÒµ½×ó,´Óϵ½ÉÏ regval|=(1<<7)|(1<<6)|(0<<5); - 80053a4: 89fb ldrh r3, [r7, #14] - 80053a6: f043 03c0 orr.w r3, r3, #192 ; 0xc0 - 80053aa: 81fb strh r3, [r7, #14] + 8005328: 89fb ldrh r3, [r7, #14] + 800532a: f043 03c0 orr.w r3, r3, #192 ; 0xc0 + 800532e: 81fb strh r3, [r7, #14] break; - 80053ac: e013 b.n 80053d6 + 8005330: e013 b.n 800535a case U2D_L2R://´ÓÉϵ½ÏÂ,´Ó×óµ½ÓÒ regval|=(0<<7)|(0<<6)|(1<<5); - 80053ae: 89fb ldrh r3, [r7, #14] - 80053b0: f043 0320 orr.w r3, r3, #32 - 80053b4: 81fb strh r3, [r7, #14] + 8005332: 89fb ldrh r3, [r7, #14] + 8005334: f043 0320 orr.w r3, r3, #32 + 8005338: 81fb strh r3, [r7, #14] break; - 80053b6: e00e b.n 80053d6 + 800533a: e00e b.n 800535a case U2D_R2L://´ÓÉϵ½ÏÂ,´ÓÓÒµ½×ó regval|=(0<<7)|(1<<6)|(1<<5); - 80053b8: 89fb ldrh r3, [r7, #14] - 80053ba: f043 0360 orr.w r3, r3, #96 ; 0x60 - 80053be: 81fb strh r3, [r7, #14] + 800533c: 89fb ldrh r3, [r7, #14] + 800533e: f043 0360 orr.w r3, r3, #96 ; 0x60 + 8005342: 81fb strh r3, [r7, #14] break; - 80053c0: e009 b.n 80053d6 + 8005344: e009 b.n 800535a case D2U_L2R://´Óϵ½ÉÏ,´Ó×óµ½ÓÒ regval|=(1<<7)|(0<<6)|(1<<5); - 80053c2: 89fb ldrh r3, [r7, #14] - 80053c4: f043 03a0 orr.w r3, r3, #160 ; 0xa0 - 80053c8: 81fb strh r3, [r7, #14] + 8005346: 89fb ldrh r3, [r7, #14] + 8005348: f043 03a0 orr.w r3, r3, #160 ; 0xa0 + 800534c: 81fb strh r3, [r7, #14] break; - 80053ca: e004 b.n 80053d6 + 800534e: e004 b.n 800535a case D2U_R2L://´Óϵ½ÉÏ,´ÓÓÒµ½×ó regval|=(1<<7)|(1<<6)|(1<<5); - 80053cc: 89fb ldrh r3, [r7, #14] - 80053ce: f043 03e0 orr.w r3, r3, #224 ; 0xe0 - 80053d2: 81fb strh r3, [r7, #14] + 8005350: 89fb ldrh r3, [r7, #14] + 8005352: f043 03e0 orr.w r3, r3, #224 ; 0xe0 + 8005356: 81fb strh r3, [r7, #14] break; - 80053d4: bf00 nop + 8005358: bf00 nop } dirreg=0X36; - 80053d6: 2336 movs r3, #54 ; 0x36 - 80053d8: 737b strb r3, [r7, #13] + 800535a: 2336 movs r3, #54 ; 0x36 + 800535c: 737b strb r3, [r7, #13] if(lcddev.id!=0X5310)regval|=0X08;//5310²»ÐèÒªBGR - 80053da: 4b64 ldr r3, [pc, #400] ; (800556c ) - 80053dc: 889b ldrh r3, [r3, #4] - 80053de: f245 3210 movw r2, #21264 ; 0x5310 - 80053e2: 4293 cmp r3, r2 - 80053e4: d003 beq.n 80053ee - 80053e6: 89fb ldrh r3, [r7, #14] - 80053e8: f043 0308 orr.w r3, r3, #8 - 80053ec: 81fb strh r3, [r7, #14] + 800535e: 4b64 ldr r3, [pc, #400] ; (80054f0 ) + 8005360: 889b ldrh r3, [r3, #4] + 8005362: f245 3210 movw r2, #21264 ; 0x5310 + 8005366: 4293 cmp r3, r2 + 8005368: d003 beq.n 8005372 + 800536a: 89fb ldrh r3, [r7, #14] + 800536c: f043 0308 orr.w r3, r3, #8 + 8005370: 81fb strh r3, [r7, #14] if(lcddev.id==0X6804)regval|=0x02;//6804µÄBIT6ºÍ9341µÄ·´ÁË - 80053ee: 4b5f ldr r3, [pc, #380] ; (800556c ) - 80053f0: 889b ldrh r3, [r3, #4] - 80053f2: f646 0204 movw r2, #26628 ; 0x6804 - 80053f6: 4293 cmp r3, r2 - 80053f8: d103 bne.n 8005402 - 80053fa: 89fb ldrh r3, [r7, #14] - 80053fc: f043 0302 orr.w r3, r3, #2 - 8005400: 81fb strh r3, [r7, #14] + 8005372: 4b5f ldr r3, [pc, #380] ; (80054f0 ) + 8005374: 889b ldrh r3, [r3, #4] + 8005376: f646 0204 movw r2, #26628 ; 0x6804 + 800537a: 4293 cmp r3, r2 + 800537c: d103 bne.n 8005386 + 800537e: 89fb ldrh r3, [r7, #14] + 8005380: f043 0302 orr.w r3, r3, #2 + 8005384: 81fb strh r3, [r7, #14] LCD_WriteReg(dirreg,regval); - 8005402: 7b7b ldrb r3, [r7, #13] - 8005404: b29b uxth r3, r3 - 8005406: 89fa ldrh r2, [r7, #14] - 8005408: 4611 mov r1, r2 - 800540a: 4618 mov r0, r3 - 800540c: f7ff ff2a bl 8005264 + 8005386: 7b7b ldrb r3, [r7, #13] + 8005388: b29b uxth r3, r3 + 800538a: 89fa ldrh r2, [r7, #14] + 800538c: 4611 mov r1, r2 + 800538e: 4618 mov r0, r3 + 8005390: f7ff ff2a bl 80051e8 if((regval&0X20)||lcddev.dir==1) - 8005410: 89fb ldrh r3, [r7, #14] - 8005412: f003 0320 and.w r3, r3, #32 - 8005416: 2b00 cmp r3, #0 - 8005418: d103 bne.n 8005422 - 800541a: 4b54 ldr r3, [pc, #336] ; (800556c ) - 800541c: 799b ldrb r3, [r3, #6] - 800541e: 2b01 cmp r3, #1 - 8005420: d110 bne.n 8005444 + 8005394: 89fb ldrh r3, [r7, #14] + 8005396: f003 0320 and.w r3, r3, #32 + 800539a: 2b00 cmp r3, #0 + 800539c: d103 bne.n 80053a6 + 800539e: 4b54 ldr r3, [pc, #336] ; (80054f0 ) + 80053a0: 799b ldrb r3, [r3, #6] + 80053a2: 2b01 cmp r3, #1 + 80053a4: d110 bne.n 80053c8 { if(lcddev.width) - 8005424: 881a ldrh r2, [r3, #0] - 8005426: 4b51 ldr r3, [pc, #324] ; (800556c ) - 8005428: 885b ldrh r3, [r3, #2] - 800542a: 429a cmp r2, r3 - 800542c: d21a bcs.n 8005464 + 80053a6: 4b52 ldr r3, [pc, #328] ; (80054f0 ) + 80053a8: 881a ldrh r2, [r3, #0] + 80053aa: 4b51 ldr r3, [pc, #324] ; (80054f0 ) + 80053ac: 885b ldrh r3, [r3, #2] + 80053ae: 429a cmp r2, r3 + 80053b0: d21a bcs.n 80053e8 { temp=lcddev.width; - 800542e: 4b4f ldr r3, [pc, #316] ; (800556c ) - 8005430: 881b ldrh r3, [r3, #0] - 8005432: 817b strh r3, [r7, #10] + 80053b2: 4b4f ldr r3, [pc, #316] ; (80054f0 ) + 80053b4: 881b ldrh r3, [r3, #0] + 80053b6: 817b strh r3, [r7, #10] lcddev.width=lcddev.height; - 8005434: 4b4d ldr r3, [pc, #308] ; (800556c ) - 8005436: 885a ldrh r2, [r3, #2] - 8005438: 4b4c ldr r3, [pc, #304] ; (800556c ) - 800543a: 801a strh r2, [r3, #0] + 80053b8: 4b4d ldr r3, [pc, #308] ; (80054f0 ) + 80053ba: 885a ldrh r2, [r3, #2] + 80053bc: 4b4c ldr r3, [pc, #304] ; (80054f0 ) + 80053be: 801a strh r2, [r3, #0] lcddev.height=temp; - 800543c: 4a4b ldr r2, [pc, #300] ; (800556c ) - 800543e: 897b ldrh r3, [r7, #10] - 8005440: 8053 strh r3, [r2, #2] + 80053c0: 4a4b ldr r2, [pc, #300] ; (80054f0 ) + 80053c2: 897b ldrh r3, [r7, #10] + 80053c4: 8053 strh r3, [r2, #2] if(lcddev.width + 80053c6: e00f b.n 80053e8 } }else { if(lcddev.width>lcddev.height)//½»»»X,Y - 8005444: 4b49 ldr r3, [pc, #292] ; (800556c ) - 8005446: 881a ldrh r2, [r3, #0] - 8005448: 4b48 ldr r3, [pc, #288] ; (800556c ) - 800544a: 885b ldrh r3, [r3, #2] - 800544c: 429a cmp r2, r3 - 800544e: d909 bls.n 8005464 + 80053c8: 4b49 ldr r3, [pc, #292] ; (80054f0 ) + 80053ca: 881a ldrh r2, [r3, #0] + 80053cc: 4b48 ldr r3, [pc, #288] ; (80054f0 ) + 80053ce: 885b ldrh r3, [r3, #2] + 80053d0: 429a cmp r2, r3 + 80053d2: d909 bls.n 80053e8 { temp=lcddev.width; - 8005450: 4b46 ldr r3, [pc, #280] ; (800556c ) - 8005452: 881b ldrh r3, [r3, #0] - 8005454: 817b strh r3, [r7, #10] + 80053d4: 4b46 ldr r3, [pc, #280] ; (80054f0 ) + 80053d6: 881b ldrh r3, [r3, #0] + 80053d8: 817b strh r3, [r7, #10] lcddev.width=lcddev.height; - 8005456: 4b45 ldr r3, [pc, #276] ; (800556c ) - 8005458: 885a ldrh r2, [r3, #2] - 800545a: 4b44 ldr r3, [pc, #272] ; (800556c ) - 800545c: 801a strh r2, [r3, #0] + 80053da: 4b45 ldr r3, [pc, #276] ; (80054f0 ) + 80053dc: 885a ldrh r2, [r3, #2] + 80053de: 4b44 ldr r3, [pc, #272] ; (80054f0 ) + 80053e0: 801a strh r2, [r3, #0] lcddev.height=temp; - 800545e: 4a43 ldr r2, [pc, #268] ; (800556c ) - 8005460: 897b ldrh r3, [r7, #10] - 8005462: 8053 strh r3, [r2, #2] + 80053e2: 4a43 ldr r2, [pc, #268] ; (80054f0 ) + 80053e4: 897b ldrh r3, [r7, #10] + 80053e6: 8053 strh r3, [r2, #2] } } LCD_WR_REG(lcddev.setxcmd); - 8005464: 4b41 ldr r3, [pc, #260] ; (800556c ) - 8005466: 7a1b ldrb r3, [r3, #8] - 8005468: b29b uxth r3, r3 - 800546a: 4618 mov r0, r3 - 800546c: f7ff fedc bl 8005228 + 80053e8: 4b41 ldr r3, [pc, #260] ; (80054f0 ) + 80053ea: 7a1b ldrb r3, [r3, #8] + 80053ec: b29b uxth r3, r3 + 80053ee: 4618 mov r0, r3 + 80053f0: f7ff fedc bl 80051ac LCD_WR_DATA(0);LCD_WR_DATA(0); - 8005470: 2000 movs r0, #0 - 8005472: f7ff fee7 bl 8005244 - 8005476: 2000 movs r0, #0 - 8005478: f7ff fee4 bl 8005244 + 80053f4: 2000 movs r0, #0 + 80053f6: f7ff fee7 bl 80051c8 + 80053fa: 2000 movs r0, #0 + 80053fc: f7ff fee4 bl 80051c8 LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF); - 800547c: 4b3b ldr r3, [pc, #236] ; (800556c ) - 800547e: 881b ldrh r3, [r3, #0] - 8005480: 3b01 subs r3, #1 - 8005482: 121b asrs r3, r3, #8 - 8005484: b29b uxth r3, r3 - 8005486: 4618 mov r0, r3 - 8005488: f7ff fedc bl 8005244 - 800548c: 4b37 ldr r3, [pc, #220] ; (800556c ) - 800548e: 881b ldrh r3, [r3, #0] - 8005490: 3b01 subs r3, #1 - 8005492: b29b uxth r3, r3 - 8005494: b2db uxtb r3, r3 - 8005496: b29b uxth r3, r3 - 8005498: 4618 mov r0, r3 - 800549a: f7ff fed3 bl 8005244 + 8005400: 4b3b ldr r3, [pc, #236] ; (80054f0 ) + 8005402: 881b ldrh r3, [r3, #0] + 8005404: 3b01 subs r3, #1 + 8005406: 121b asrs r3, r3, #8 + 8005408: b29b uxth r3, r3 + 800540a: 4618 mov r0, r3 + 800540c: f7ff fedc bl 80051c8 + 8005410: 4b37 ldr r3, [pc, #220] ; (80054f0 ) + 8005412: 881b ldrh r3, [r3, #0] + 8005414: 3b01 subs r3, #1 + 8005416: b29b uxth r3, r3 + 8005418: b2db uxtb r3, r3 + 800541a: b29b uxth r3, r3 + 800541c: 4618 mov r0, r3 + 800541e: f7ff fed3 bl 80051c8 LCD_WR_REG(lcddev.setycmd); - 800549e: 4b33 ldr r3, [pc, #204] ; (800556c ) - 80054a0: 7a5b ldrb r3, [r3, #9] - 80054a2: b29b uxth r3, r3 - 80054a4: 4618 mov r0, r3 - 80054a6: f7ff febf bl 8005228 + 8005422: 4b33 ldr r3, [pc, #204] ; (80054f0 ) + 8005424: 7a5b ldrb r3, [r3, #9] + 8005426: b29b uxth r3, r3 + 8005428: 4618 mov r0, r3 + 800542a: f7ff febf bl 80051ac LCD_WR_DATA(0);LCD_WR_DATA(0); - 80054aa: 2000 movs r0, #0 - 80054ac: f7ff feca bl 8005244 - 80054b0: 2000 movs r0, #0 - 80054b2: f7ff fec7 bl 8005244 + 800542e: 2000 movs r0, #0 + 8005430: f7ff feca bl 80051c8 + 8005434: 2000 movs r0, #0 + 8005436: f7ff fec7 bl 80051c8 LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF); - 80054b6: 4b2d ldr r3, [pc, #180] ; (800556c ) - 80054b8: 885b ldrh r3, [r3, #2] - 80054ba: 3b01 subs r3, #1 - 80054bc: 121b asrs r3, r3, #8 - 80054be: b29b uxth r3, r3 - 80054c0: 4618 mov r0, r3 - 80054c2: f7ff febf bl 8005244 - 80054c6: 4b29 ldr r3, [pc, #164] ; (800556c ) - 80054c8: 885b ldrh r3, [r3, #2] - 80054ca: 3b01 subs r3, #1 - 80054cc: b29b uxth r3, r3 - 80054ce: b2db uxtb r3, r3 - 80054d0: b29b uxth r3, r3 - 80054d2: 4618 mov r0, r3 - 80054d4: f7ff feb6 bl 8005244 - 80054d8: e058 b.n 800558c + 800543a: 4b2d ldr r3, [pc, #180] ; (80054f0 ) + 800543c: 885b ldrh r3, [r3, #2] + 800543e: 3b01 subs r3, #1 + 8005440: 121b asrs r3, r3, #8 + 8005442: b29b uxth r3, r3 + 8005444: 4618 mov r0, r3 + 8005446: f7ff febf bl 80051c8 + 800544a: 4b29 ldr r3, [pc, #164] ; (80054f0 ) + 800544c: 885b ldrh r3, [r3, #2] + 800544e: 3b01 subs r3, #1 + 8005450: b29b uxth r3, r3 + 8005452: b2db uxtb r3, r3 + 8005454: b29b uxth r3, r3 + 8005456: 4618 mov r0, r3 + 8005458: f7ff feb6 bl 80051c8 + 800545c: e058 b.n 8005510 }else { switch(dir) - 80054da: 79fb ldrb r3, [r7, #7] - 80054dc: 2b07 cmp r3, #7 - 80054de: d836 bhi.n 800554e - 80054e0: a201 add r2, pc, #4 ; (adr r2, 80054e8 ) - 80054e2: f852 f023 ldr.w pc, [r2, r3, lsl #2] - 80054e6: bf00 nop - 80054e8: 08005509 .word 0x08005509 - 80054ec: 08005513 .word 0x08005513 - 80054f0: 0800551d .word 0x0800551d - 80054f4: 0800554f .word 0x0800554f - 80054f8: 08005527 .word 0x08005527 - 80054fc: 08005531 .word 0x08005531 - 8005500: 0800553b .word 0x0800553b - 8005504: 08005545 .word 0x08005545 + 800545e: 79fb ldrb r3, [r7, #7] + 8005460: 2b07 cmp r3, #7 + 8005462: d836 bhi.n 80054d2 + 8005464: a201 add r2, pc, #4 ; (adr r2, 800546c ) + 8005466: f852 f023 ldr.w pc, [r2, r3, lsl #2] + 800546a: bf00 nop + 800546c: 0800548d .word 0x0800548d + 8005470: 08005497 .word 0x08005497 + 8005474: 080054a1 .word 0x080054a1 + 8005478: 080054d3 .word 0x080054d3 + 800547c: 080054ab .word 0x080054ab + 8005480: 080054b5 .word 0x080054b5 + 8005484: 080054bf .word 0x080054bf + 8005488: 080054c9 .word 0x080054c9 { case L2R_U2D://´Ó×óµ½ÓÒ,´ÓÉϵ½Ï regval|=(1<<5)|(1<<4)|(0<<3); - 8005508: 89fb ldrh r3, [r7, #14] - 800550a: f043 0330 orr.w r3, r3, #48 ; 0x30 - 800550e: 81fb strh r3, [r7, #14] + 800548c: 89fb ldrh r3, [r7, #14] + 800548e: f043 0330 orr.w r3, r3, #48 ; 0x30 + 8005492: 81fb strh r3, [r7, #14] break; - 8005510: e01d b.n 800554e + 8005494: e01d b.n 80054d2 case L2R_D2U://´Ó×óµ½ÓÒ,´Óϵ½ÉÏ regval|=(0<<5)|(1<<4)|(0<<3); - 8005512: 89fb ldrh r3, [r7, #14] - 8005514: f043 0310 orr.w r3, r3, #16 - 8005518: 81fb strh r3, [r7, #14] + 8005496: 89fb ldrh r3, [r7, #14] + 8005498: f043 0310 orr.w r3, r3, #16 + 800549c: 81fb strh r3, [r7, #14] break; - 800551a: e018 b.n 800554e + 800549e: e018 b.n 80054d2 case R2L_U2D://´ÓÓÒµ½×ó,´ÓÉϵ½Ï regval|=(1<<5)|(0<<4)|(0<<3); - 800551c: 89fb ldrh r3, [r7, #14] - 800551e: f043 0320 orr.w r3, r3, #32 - 8005522: 81fb strh r3, [r7, #14] + 80054a0: 89fb ldrh r3, [r7, #14] + 80054a2: f043 0320 orr.w r3, r3, #32 + 80054a6: 81fb strh r3, [r7, #14] break; - 8005524: e013 b.n 800554e + 80054a8: e013 b.n 80054d2 case R2L_D2U://´ÓÓÒµ½×ó,´Óϵ½ÉÏ regval|=(0<<5)|(0<<4)|(0<<3); break; case U2D_L2R://´ÓÉϵ½ÏÂ,´Ó×óµ½ÓÒ regval|=(1<<5)|(1<<4)|(1<<3); - 8005526: 89fb ldrh r3, [r7, #14] - 8005528: f043 0338 orr.w r3, r3, #56 ; 0x38 - 800552c: 81fb strh r3, [r7, #14] + 80054aa: 89fb ldrh r3, [r7, #14] + 80054ac: f043 0338 orr.w r3, r3, #56 ; 0x38 + 80054b0: 81fb strh r3, [r7, #14] break; - 800552e: e00e b.n 800554e + 80054b2: e00e b.n 80054d2 case U2D_R2L://´ÓÉϵ½ÏÂ,´ÓÓÒµ½×ó regval|=(1<<5)|(0<<4)|(1<<3); - 8005530: 89fb ldrh r3, [r7, #14] - 8005532: f043 0328 orr.w r3, r3, #40 ; 0x28 - 8005536: 81fb strh r3, [r7, #14] + 80054b4: 89fb ldrh r3, [r7, #14] + 80054b6: f043 0328 orr.w r3, r3, #40 ; 0x28 + 80054ba: 81fb strh r3, [r7, #14] break; - 8005538: e009 b.n 800554e + 80054bc: e009 b.n 80054d2 case D2U_L2R://´Óϵ½ÉÏ,´Ó×óµ½ÓÒ regval|=(0<<5)|(1<<4)|(1<<3); - 800553a: 89fb ldrh r3, [r7, #14] - 800553c: f043 0318 orr.w r3, r3, #24 - 8005540: 81fb strh r3, [r7, #14] + 80054be: 89fb ldrh r3, [r7, #14] + 80054c0: f043 0318 orr.w r3, r3, #24 + 80054c4: 81fb strh r3, [r7, #14] break; - 8005542: e004 b.n 800554e + 80054c6: e004 b.n 80054d2 case D2U_R2L://´Óϵ½ÉÏ,´ÓÓÒµ½×ó regval|=(0<<5)|(0<<4)|(1<<3); - 8005544: 89fb ldrh r3, [r7, #14] - 8005546: f043 0308 orr.w r3, r3, #8 - 800554a: 81fb strh r3, [r7, #14] + 80054c8: 89fb ldrh r3, [r7, #14] + 80054ca: f043 0308 orr.w r3, r3, #8 + 80054ce: 81fb strh r3, [r7, #14] break; - 800554c: bf00 nop + 80054d0: bf00 nop } if(lcddev.id==0x8989)//8989 IC - 800554e: 4b07 ldr r3, [pc, #28] ; (800556c ) - 8005550: 889b ldrh r3, [r3, #4] - 8005552: f648 1289 movw r2, #35209 ; 0x8989 - 8005556: 4293 cmp r3, r2 - 8005558: d10a bne.n 8005570 + 80054d2: 4b07 ldr r3, [pc, #28] ; (80054f0 ) + 80054d4: 889b ldrh r3, [r3, #4] + 80054d6: f648 1289 movw r2, #35209 ; 0x8989 + 80054da: 4293 cmp r3, r2 + 80054dc: d10a bne.n 80054f4 { dirreg=0X11; - 800555a: 2311 movs r3, #17 - 800555c: 737b strb r3, [r7, #13] + 80054de: 2311 movs r3, #17 + 80054e0: 737b strb r3, [r7, #13] regval|=0X6040; //65K - 800555e: 89fb ldrh r3, [r7, #14] - 8005560: f443 43c0 orr.w r3, r3, #24576 ; 0x6000 - 8005564: f043 0340 orr.w r3, r3, #64 ; 0x40 - 8005568: 81fb strh r3, [r7, #14] - 800556a: e007 b.n 800557c - 800556c: 20000820 .word 0x20000820 + 80054e2: 89fb ldrh r3, [r7, #14] + 80054e4: f443 43c0 orr.w r3, r3, #24576 ; 0x6000 + 80054e8: f043 0340 orr.w r3, r3, #64 ; 0x40 + 80054ec: 81fb strh r3, [r7, #14] + 80054ee: e007 b.n 8005500 + 80054f0: 200007b0 .word 0x200007b0 }else//ÆäËûÇý¶¯IC { dirreg=0X03; - 8005570: 2303 movs r3, #3 - 8005572: 737b strb r3, [r7, #13] + 80054f4: 2303 movs r3, #3 + 80054f6: 737b strb r3, [r7, #13] regval|=1<<12; - 8005574: 89fb ldrh r3, [r7, #14] - 8005576: f443 5380 orr.w r3, r3, #4096 ; 0x1000 - 800557a: 81fb strh r3, [r7, #14] + 80054f8: 89fb ldrh r3, [r7, #14] + 80054fa: f443 5380 orr.w r3, r3, #4096 ; 0x1000 + 80054fe: 81fb strh r3, [r7, #14] } LCD_WriteReg(dirreg,regval); - 800557c: 7b7b ldrb r3, [r7, #13] - 800557e: b29b uxth r3, r3 - 8005580: 89fa ldrh r2, [r7, #14] - 8005582: 4611 mov r1, r2 - 8005584: 4618 mov r0, r3 - 8005586: f7ff fe6d bl 8005264 + 8005500: 7b7b ldrb r3, [r7, #13] + 8005502: b29b uxth r3, r3 + 8005504: 89fa ldrh r2, [r7, #14] + 8005506: 4611 mov r1, r2 + 8005508: 4618 mov r0, r3 + 800550a: f7ff fe6d bl 80051e8 } } - 800558a: bf00 nop - 800558c: bf00 nop - 800558e: 3710 adds r7, #16 - 8005590: 46bd mov sp, r7 - 8005592: bd80 pop {r7, pc} + 800550e: bf00 nop + 8005510: bf00 nop + 8005512: 3710 adds r7, #16 + 8005514: 46bd mov sp, r7 + 8005516: bd80 pop {r7, pc} -08005594 : +08005518 : //ÉèÖÃLCDÏÔʾ·½Ïò //dir:0,ÊúÆÁ£»1,ºáÆÁ void LCD_Display_Dir(uint8_t dir) { - 8005594: b580 push {r7, lr} - 8005596: b082 sub sp, #8 - 8005598: af00 add r7, sp, #0 - 800559a: 4603 mov r3, r0 - 800559c: 71fb strb r3, [r7, #7] + 8005518: b580 push {r7, lr} + 800551a: b082 sub sp, #8 + 800551c: af00 add r7, sp, #0 + 800551e: 4603 mov r3, r0 + 8005520: 71fb strb r3, [r7, #7] if(dir==0) //ÊúÆÁ - 800559e: 79fb ldrb r3, [r7, #7] - 80055a0: 2b00 cmp r3, #0 - 80055a2: d154 bne.n 800564e + 8005522: 79fb ldrb r3, [r7, #7] + 8005524: 2b00 cmp r3, #0 + 8005526: d154 bne.n 80055d2 { lcddev.dir=0; //ÊúÆÁ - 80055a4: 4b5d ldr r3, [pc, #372] ; (800571c ) - 80055a6: 2200 movs r2, #0 - 80055a8: 719a strb r2, [r3, #6] + 8005528: 4b5d ldr r3, [pc, #372] ; (80056a0 ) + 800552a: 2200 movs r2, #0 + 800552c: 719a strb r2, [r3, #6] lcddev.width=240; - 80055aa: 4b5c ldr r3, [pc, #368] ; (800571c ) - 80055ac: 22f0 movs r2, #240 ; 0xf0 - 80055ae: 801a strh r2, [r3, #0] + 800552e: 4b5c ldr r3, [pc, #368] ; (80056a0 ) + 8005530: 22f0 movs r2, #240 ; 0xf0 + 8005532: 801a strh r2, [r3, #0] lcddev.height=320; - 80055b0: 4b5a ldr r3, [pc, #360] ; (800571c ) - 80055b2: f44f 72a0 mov.w r2, #320 ; 0x140 - 80055b6: 805a strh r2, [r3, #2] + 8005534: 4b5a ldr r3, [pc, #360] ; (80056a0 ) + 8005536: f44f 72a0 mov.w r2, #320 ; 0x140 + 800553a: 805a strh r2, [r3, #2] if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310) - 80055b8: 4b58 ldr r3, [pc, #352] ; (800571c ) - 80055ba: 889b ldrh r3, [r3, #4] - 80055bc: f249 3241 movw r2, #37697 ; 0x9341 - 80055c0: 4293 cmp r3, r2 - 80055c2: d00b beq.n 80055dc - 80055c4: 4b55 ldr r3, [pc, #340] ; (800571c ) - 80055c6: 889b ldrh r3, [r3, #4] - 80055c8: f646 0204 movw r2, #26628 ; 0x6804 - 80055cc: 4293 cmp r3, r2 - 80055ce: d005 beq.n 80055dc - 80055d0: 4b52 ldr r3, [pc, #328] ; (800571c ) - 80055d2: 889b ldrh r3, [r3, #4] - 80055d4: f245 3210 movw r2, #21264 ; 0x5310 - 80055d8: 4293 cmp r3, r2 - 80055da: d11e bne.n 800561a + 800553c: 4b58 ldr r3, [pc, #352] ; (80056a0 ) + 800553e: 889b ldrh r3, [r3, #4] + 8005540: f249 3241 movw r2, #37697 ; 0x9341 + 8005544: 4293 cmp r3, r2 + 8005546: d00b beq.n 8005560 + 8005548: 4b55 ldr r3, [pc, #340] ; (80056a0 ) + 800554a: 889b ldrh r3, [r3, #4] + 800554c: f646 0204 movw r2, #26628 ; 0x6804 + 8005550: 4293 cmp r3, r2 + 8005552: d005 beq.n 8005560 + 8005554: 4b52 ldr r3, [pc, #328] ; (80056a0 ) + 8005556: 889b ldrh r3, [r3, #4] + 8005558: f245 3210 movw r2, #21264 ; 0x5310 + 800555c: 4293 cmp r3, r2 + 800555e: d11e bne.n 800559e { lcddev.wramcmd=0X2C; - 80055dc: 4b4f ldr r3, [pc, #316] ; (800571c ) - 80055de: 222c movs r2, #44 ; 0x2c - 80055e0: 71da strb r2, [r3, #7] + 8005560: 4b4f ldr r3, [pc, #316] ; (80056a0 ) + 8005562: 222c movs r2, #44 ; 0x2c + 8005564: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2A; - 80055e2: 4b4e ldr r3, [pc, #312] ; (800571c ) - 80055e4: 222a movs r2, #42 ; 0x2a - 80055e6: 721a strb r2, [r3, #8] + 8005566: 4b4e ldr r3, [pc, #312] ; (80056a0 ) + 8005568: 222a movs r2, #42 ; 0x2a + 800556a: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 80055e8: 4b4c ldr r3, [pc, #304] ; (800571c ) - 80055ea: 222b movs r2, #43 ; 0x2b - 80055ec: 725a strb r2, [r3, #9] + 800556c: 4b4c ldr r3, [pc, #304] ; (80056a0 ) + 800556e: 222b movs r2, #43 ; 0x2b + 8005570: 725a strb r2, [r3, #9] if(lcddev.id==0X6804||lcddev.id==0X5310) - 80055ee: 4b4b ldr r3, [pc, #300] ; (800571c ) - 80055f0: 889b ldrh r3, [r3, #4] - 80055f2: f646 0204 movw r2, #26628 ; 0x6804 - 80055f6: 4293 cmp r3, r2 - 80055f8: d006 beq.n 8005608 - 80055fa: 4b48 ldr r3, [pc, #288] ; (800571c ) - 80055fc: 889b ldrh r3, [r3, #4] - 80055fe: f245 3210 movw r2, #21264 ; 0x5310 - 8005602: 4293 cmp r3, r2 - 8005604: f040 8081 bne.w 800570a + 8005572: 4b4b ldr r3, [pc, #300] ; (80056a0 ) + 8005574: 889b ldrh r3, [r3, #4] + 8005576: f646 0204 movw r2, #26628 ; 0x6804 + 800557a: 4293 cmp r3, r2 + 800557c: d006 beq.n 800558c + 800557e: 4b48 ldr r3, [pc, #288] ; (80056a0 ) + 8005580: 889b ldrh r3, [r3, #4] + 8005582: f245 3210 movw r2, #21264 ; 0x5310 + 8005586: 4293 cmp r3, r2 + 8005588: f040 8081 bne.w 800568e { lcddev.width=320; - 8005608: 4b44 ldr r3, [pc, #272] ; (800571c ) - 800560a: f44f 72a0 mov.w r2, #320 ; 0x140 - 800560e: 801a strh r2, [r3, #0] + 800558c: 4b44 ldr r3, [pc, #272] ; (80056a0 ) + 800558e: f44f 72a0 mov.w r2, #320 ; 0x140 + 8005592: 801a strh r2, [r3, #0] lcddev.height=480; - 8005610: 4b42 ldr r3, [pc, #264] ; (800571c ) - 8005612: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 8005616: 805a strh r2, [r3, #2] + 8005594: 4b42 ldr r3, [pc, #264] ; (80056a0 ) + 8005596: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 800559a: 805a strh r2, [r3, #2] if(lcddev.id==0X6804||lcddev.id==0X5310) - 8005618: e077 b.n 800570a + 800559c: e077 b.n 800568e } }else if(lcddev.id==0X8989) - 800561a: 4b40 ldr r3, [pc, #256] ; (800571c ) - 800561c: 889b ldrh r3, [r3, #4] - 800561e: f648 1289 movw r2, #35209 ; 0x8989 - 8005622: 4293 cmp r3, r2 - 8005624: d109 bne.n 800563a + 800559e: 4b40 ldr r3, [pc, #256] ; (80056a0 ) + 80055a0: 889b ldrh r3, [r3, #4] + 80055a2: f648 1289 movw r2, #35209 ; 0x8989 + 80055a6: 4293 cmp r3, r2 + 80055a8: d109 bne.n 80055be { lcddev.wramcmd=R34; - 8005626: 4b3d ldr r3, [pc, #244] ; (800571c ) - 8005628: 2222 movs r2, #34 ; 0x22 - 800562a: 71da strb r2, [r3, #7] + 80055aa: 4b3d ldr r3, [pc, #244] ; (80056a0 ) + 80055ac: 2222 movs r2, #34 ; 0x22 + 80055ae: 71da strb r2, [r3, #7] lcddev.setxcmd=0X4E; - 800562c: 4b3b ldr r3, [pc, #236] ; (800571c ) - 800562e: 224e movs r2, #78 ; 0x4e - 8005630: 721a strb r2, [r3, #8] + 80055b0: 4b3b ldr r3, [pc, #236] ; (80056a0 ) + 80055b2: 224e movs r2, #78 ; 0x4e + 80055b4: 721a strb r2, [r3, #8] lcddev.setycmd=0X4F; - 8005632: 4b3a ldr r3, [pc, #232] ; (800571c ) - 8005634: 224f movs r2, #79 ; 0x4f - 8005636: 725a strb r2, [r3, #9] - 8005638: e068 b.n 800570c + 80055b6: 4b3a ldr r3, [pc, #232] ; (80056a0 ) + 80055b8: 224f movs r2, #79 ; 0x4f + 80055ba: 725a strb r2, [r3, #9] + 80055bc: e068 b.n 8005690 }else { lcddev.wramcmd=R34; - 800563a: 4b38 ldr r3, [pc, #224] ; (800571c ) - 800563c: 2222 movs r2, #34 ; 0x22 - 800563e: 71da strb r2, [r3, #7] + 80055be: 4b38 ldr r3, [pc, #224] ; (80056a0 ) + 80055c0: 2222 movs r2, #34 ; 0x22 + 80055c2: 71da strb r2, [r3, #7] lcddev.setxcmd=R32; - 8005640: 4b36 ldr r3, [pc, #216] ; (800571c ) - 8005642: 2220 movs r2, #32 - 8005644: 721a strb r2, [r3, #8] + 80055c4: 4b36 ldr r3, [pc, #216] ; (80056a0 ) + 80055c6: 2220 movs r2, #32 + 80055c8: 721a strb r2, [r3, #8] lcddev.setycmd=R33; - 8005646: 4b35 ldr r3, [pc, #212] ; (800571c ) - 8005648: 2221 movs r2, #33 ; 0x21 - 800564a: 725a strb r2, [r3, #9] - 800564c: e05e b.n 800570c + 80055ca: 4b35 ldr r3, [pc, #212] ; (80056a0 ) + 80055cc: 2221 movs r2, #33 ; 0x21 + 80055ce: 725a strb r2, [r3, #9] + 80055d0: e05e b.n 8005690 } }else //ºáÆÁ { lcddev.dir=1; //ºáÆÁ - 800564e: 4b33 ldr r3, [pc, #204] ; (800571c ) - 8005650: 2201 movs r2, #1 - 8005652: 719a strb r2, [r3, #6] + 80055d2: 4b33 ldr r3, [pc, #204] ; (80056a0 ) + 80055d4: 2201 movs r2, #1 + 80055d6: 719a strb r2, [r3, #6] lcddev.width=320; - 8005654: 4b31 ldr r3, [pc, #196] ; (800571c ) - 8005656: f44f 72a0 mov.w r2, #320 ; 0x140 - 800565a: 801a strh r2, [r3, #0] + 80055d8: 4b31 ldr r3, [pc, #196] ; (80056a0 ) + 80055da: f44f 72a0 mov.w r2, #320 ; 0x140 + 80055de: 801a strh r2, [r3, #0] lcddev.height=240; - 800565c: 4b2f ldr r3, [pc, #188] ; (800571c ) - 800565e: 22f0 movs r2, #240 ; 0xf0 - 8005660: 805a strh r2, [r3, #2] + 80055e0: 4b2f ldr r3, [pc, #188] ; (80056a0 ) + 80055e2: 22f0 movs r2, #240 ; 0xf0 + 80055e4: 805a strh r2, [r3, #2] if(lcddev.id==0X9341||lcddev.id==0X5310) - 8005662: 4b2e ldr r3, [pc, #184] ; (800571c ) - 8005664: 889b ldrh r3, [r3, #4] - 8005666: f249 3241 movw r2, #37697 ; 0x9341 - 800566a: 4293 cmp r3, r2 - 800566c: d005 beq.n 800567a - 800566e: 4b2b ldr r3, [pc, #172] ; (800571c ) - 8005670: 889b ldrh r3, [r3, #4] - 8005672: f245 3210 movw r2, #21264 ; 0x5310 - 8005676: 4293 cmp r3, r2 - 8005678: d109 bne.n 800568e + 80055e6: 4b2e ldr r3, [pc, #184] ; (80056a0 ) + 80055e8: 889b ldrh r3, [r3, #4] + 80055ea: f249 3241 movw r2, #37697 ; 0x9341 + 80055ee: 4293 cmp r3, r2 + 80055f0: d005 beq.n 80055fe + 80055f2: 4b2b ldr r3, [pc, #172] ; (80056a0 ) + 80055f4: 889b ldrh r3, [r3, #4] + 80055f6: f245 3210 movw r2, #21264 ; 0x5310 + 80055fa: 4293 cmp r3, r2 + 80055fc: d109 bne.n 8005612 { lcddev.wramcmd=0X2C; - 800567a: 4b28 ldr r3, [pc, #160] ; (800571c ) - 800567c: 222c movs r2, #44 ; 0x2c - 800567e: 71da strb r2, [r3, #7] + 80055fe: 4b28 ldr r3, [pc, #160] ; (80056a0 ) + 8005600: 222c movs r2, #44 ; 0x2c + 8005602: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2A; - 8005680: 4b26 ldr r3, [pc, #152] ; (800571c ) - 8005682: 222a movs r2, #42 ; 0x2a - 8005684: 721a strb r2, [r3, #8] + 8005604: 4b26 ldr r3, [pc, #152] ; (80056a0 ) + 8005606: 222a movs r2, #42 ; 0x2a + 8005608: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 8005686: 4b25 ldr r3, [pc, #148] ; (800571c ) - 8005688: 222b movs r2, #43 ; 0x2b - 800568a: 725a strb r2, [r3, #9] - 800568c: e028 b.n 80056e0 + 800560a: 4b25 ldr r3, [pc, #148] ; (80056a0 ) + 800560c: 222b movs r2, #43 ; 0x2b + 800560e: 725a strb r2, [r3, #9] + 8005610: e028 b.n 8005664 }else if(lcddev.id==0X6804) - 800568e: 4b23 ldr r3, [pc, #140] ; (800571c ) - 8005690: 889b ldrh r3, [r3, #4] - 8005692: f646 0204 movw r2, #26628 ; 0x6804 - 8005696: 4293 cmp r3, r2 - 8005698: d109 bne.n 80056ae + 8005612: 4b23 ldr r3, [pc, #140] ; (80056a0 ) + 8005614: 889b ldrh r3, [r3, #4] + 8005616: f646 0204 movw r2, #26628 ; 0x6804 + 800561a: 4293 cmp r3, r2 + 800561c: d109 bne.n 8005632 { lcddev.wramcmd=0X2C; - 800569a: 4b20 ldr r3, [pc, #128] ; (800571c ) - 800569c: 222c movs r2, #44 ; 0x2c - 800569e: 71da strb r2, [r3, #7] + 800561e: 4b20 ldr r3, [pc, #128] ; (80056a0 ) + 8005620: 222c movs r2, #44 ; 0x2c + 8005622: 71da strb r2, [r3, #7] lcddev.setxcmd=0X2B; - 80056a0: 4b1e ldr r3, [pc, #120] ; (800571c ) - 80056a2: 222b movs r2, #43 ; 0x2b - 80056a4: 721a strb r2, [r3, #8] + 8005624: 4b1e ldr r3, [pc, #120] ; (80056a0 ) + 8005626: 222b movs r2, #43 ; 0x2b + 8005628: 721a strb r2, [r3, #8] lcddev.setycmd=0X2A; - 80056a6: 4b1d ldr r3, [pc, #116] ; (800571c ) - 80056a8: 222a movs r2, #42 ; 0x2a - 80056aa: 725a strb r2, [r3, #9] - 80056ac: e018 b.n 80056e0 + 800562a: 4b1d ldr r3, [pc, #116] ; (80056a0 ) + 800562c: 222a movs r2, #42 ; 0x2a + 800562e: 725a strb r2, [r3, #9] + 8005630: e018 b.n 8005664 }else if(lcddev.id==0X8989) - 80056ae: 4b1b ldr r3, [pc, #108] ; (800571c ) - 80056b0: 889b ldrh r3, [r3, #4] - 80056b2: f648 1289 movw r2, #35209 ; 0x8989 - 80056b6: 4293 cmp r3, r2 - 80056b8: d109 bne.n 80056ce + 8005632: 4b1b ldr r3, [pc, #108] ; (80056a0 ) + 8005634: 889b ldrh r3, [r3, #4] + 8005636: f648 1289 movw r2, #35209 ; 0x8989 + 800563a: 4293 cmp r3, r2 + 800563c: d109 bne.n 8005652 { lcddev.wramcmd=R34; - 80056ba: 4b18 ldr r3, [pc, #96] ; (800571c ) - 80056bc: 2222 movs r2, #34 ; 0x22 - 80056be: 71da strb r2, [r3, #7] + 800563e: 4b18 ldr r3, [pc, #96] ; (80056a0 ) + 8005640: 2222 movs r2, #34 ; 0x22 + 8005642: 71da strb r2, [r3, #7] lcddev.setxcmd=0X4F; - 80056c0: 4b16 ldr r3, [pc, #88] ; (800571c ) - 80056c2: 224f movs r2, #79 ; 0x4f - 80056c4: 721a strb r2, [r3, #8] + 8005644: 4b16 ldr r3, [pc, #88] ; (80056a0 ) + 8005646: 224f movs r2, #79 ; 0x4f + 8005648: 721a strb r2, [r3, #8] lcddev.setycmd=0X4E; - 80056c6: 4b15 ldr r3, [pc, #84] ; (800571c ) - 80056c8: 224e movs r2, #78 ; 0x4e - 80056ca: 725a strb r2, [r3, #9] - 80056cc: e008 b.n 80056e0 + 800564a: 4b15 ldr r3, [pc, #84] ; (80056a0 ) + 800564c: 224e movs r2, #78 ; 0x4e + 800564e: 725a strb r2, [r3, #9] + 8005650: e008 b.n 8005664 }else { lcddev.wramcmd=R34; - 80056ce: 4b13 ldr r3, [pc, #76] ; (800571c ) - 80056d0: 2222 movs r2, #34 ; 0x22 - 80056d2: 71da strb r2, [r3, #7] + 8005652: 4b13 ldr r3, [pc, #76] ; (80056a0 ) + 8005654: 2222 movs r2, #34 ; 0x22 + 8005656: 71da strb r2, [r3, #7] lcddev.setxcmd=R33; - 80056d4: 4b11 ldr r3, [pc, #68] ; (800571c ) - 80056d6: 2221 movs r2, #33 ; 0x21 - 80056d8: 721a strb r2, [r3, #8] + 8005658: 4b11 ldr r3, [pc, #68] ; (80056a0 ) + 800565a: 2221 movs r2, #33 ; 0x21 + 800565c: 721a strb r2, [r3, #8] lcddev.setycmd=R32; - 80056da: 4b10 ldr r3, [pc, #64] ; (800571c ) - 80056dc: 2220 movs r2, #32 - 80056de: 725a strb r2, [r3, #9] + 800565e: 4b10 ldr r3, [pc, #64] ; (80056a0 ) + 8005660: 2220 movs r2, #32 + 8005662: 725a strb r2, [r3, #9] } if(lcddev.id==0X6804||lcddev.id==0X5310) - 80056e0: 4b0e ldr r3, [pc, #56] ; (800571c ) - 80056e2: 889b ldrh r3, [r3, #4] - 80056e4: f646 0204 movw r2, #26628 ; 0x6804 - 80056e8: 4293 cmp r3, r2 - 80056ea: d005 beq.n 80056f8 - 80056ec: 4b0b ldr r3, [pc, #44] ; (800571c ) - 80056ee: 889b ldrh r3, [r3, #4] - 80056f0: f245 3210 movw r2, #21264 ; 0x5310 - 80056f4: 4293 cmp r3, r2 - 80056f6: d109 bne.n 800570c + 8005664: 4b0e ldr r3, [pc, #56] ; (80056a0 ) + 8005666: 889b ldrh r3, [r3, #4] + 8005668: f646 0204 movw r2, #26628 ; 0x6804 + 800566c: 4293 cmp r3, r2 + 800566e: d005 beq.n 800567c + 8005670: 4b0b ldr r3, [pc, #44] ; (80056a0 ) + 8005672: 889b ldrh r3, [r3, #4] + 8005674: f245 3210 movw r2, #21264 ; 0x5310 + 8005678: 4293 cmp r3, r2 + 800567a: d109 bne.n 8005690 { lcddev.width=480; - 80056f8: 4b08 ldr r3, [pc, #32] ; (800571c ) - 80056fa: f44f 72f0 mov.w r2, #480 ; 0x1e0 - 80056fe: 801a strh r2, [r3, #0] + 800567c: 4b08 ldr r3, [pc, #32] ; (80056a0 ) + 800567e: f44f 72f0 mov.w r2, #480 ; 0x1e0 + 8005682: 801a strh r2, [r3, #0] lcddev.height=320; - 8005700: 4b06 ldr r3, [pc, #24] ; (800571c ) - 8005702: f44f 72a0 mov.w r2, #320 ; 0x140 - 8005706: 805a strh r2, [r3, #2] - 8005708: e000 b.n 800570c + 8005684: 4b06 ldr r3, [pc, #24] ; (80056a0 ) + 8005686: f44f 72a0 mov.w r2, #320 ; 0x140 + 800568a: 805a strh r2, [r3, #2] + 800568c: e000 b.n 8005690 if(lcddev.id==0X6804||lcddev.id==0X5310) - 800570a: bf00 nop + 800568e: bf00 nop } } LCD_Scan_Dir(DFT_SCAN_DIR); //ĬÈÏɨÃè·½Ïò - 800570c: 2000 movs r0, #0 - 800570e: f7ff fdd3 bl 80052b8 + 8005690: 2000 movs r0, #0 + 8005692: f7ff fdd3 bl 800523c } - 8005712: bf00 nop - 8005714: 3708 adds r7, #8 - 8005716: 46bd mov sp, r7 - 8005718: bd80 pop {r7, pc} - 800571a: bf00 nop - 800571c: 20000820 .word 0x20000820 + 8005696: bf00 nop + 8005698: 3708 adds r7, #8 + 800569a: 46bd mov sp, r7 + 800569c: bd80 pop {r7, pc} + 800569e: bf00 nop + 80056a0: 200007b0 .word 0x200007b0 -08005720 : +080056a4 : //³õʼ»¯lcd //¸Ã³õʼ»¯º¯Êý¿ÉÒÔ³õʼ»¯¸÷ÖÖÒº¾§! void LCDx_Init(void) { - 8005720: b580 push {r7, lr} - 8005722: af00 add r7, sp, #0 + 80056a4: b580 push {r7, lr} + 80056a6: af00 add r7, sp, #0 LCD_BL(0); - 8005724: 2200 movs r2, #0 - 8005726: 2101 movs r1, #1 - 8005728: 4876 ldr r0, [pc, #472] ; (8005904 ) - 800572a: f7fb fb5b bl 8000de4 + 80056a8: 2200 movs r2, #0 + 80056aa: 2101 movs r1, #1 + 80056ac: 4876 ldr r0, [pc, #472] ; (8005888 ) + 80056ae: f7fb fb63 bl 8000d78 HAL_Delay(50); // delay 50 ms - 800572e: 2032 movs r0, #50 ; 0x32 - 8005730: f7fb f8bc bl 80008ac + 80056b2: 2032 movs r0, #50 ; 0x32 + 80056b4: f7fb f8c4 bl 8000840 LCD_WriteReg(0x0000,0x0001); - 8005734: 2101 movs r1, #1 - 8005736: 2000 movs r0, #0 - 8005738: f7ff fd94 bl 8005264 + 80056b8: 2101 movs r1, #1 + 80056ba: 2000 movs r0, #0 + 80056bc: f7ff fd94 bl 80051e8 HAL_Delay(50); // delay 50 ms - 800573c: 2032 movs r0, #50 ; 0x32 - 800573e: f7fb f8b5 bl 80008ac + 80056c0: 2032 movs r0, #50 ; 0x32 + 80056c2: f7fb f8bd bl 8000840 lcddev.id = LCD_ReadReg(0x0000); - 8005742: 2000 movs r0, #0 - 8005744: f7ff fda4 bl 8005290 - 8005748: 4603 mov r3, r0 - 800574a: 461a mov r2, r3 - 800574c: 4b6e ldr r3, [pc, #440] ; (8005908 ) - 800574e: 809a strh r2, [r3, #4] + 80056c6: 2000 movs r0, #0 + 80056c8: f7ff fda4 bl 8005214 + 80056cc: 4603 mov r3, r0 + 80056ce: 461a mov r2, r3 + 80056d0: 4b6e ldr r3, [pc, #440] ; (800588c ) + 80056d2: 809a strh r2, [r3, #4] LCD_WriteReg(0x00E5,0x78F0); - 8005750: f647 01f0 movw r1, #30960 ; 0x78f0 - 8005754: 20e5 movs r0, #229 ; 0xe5 - 8005756: f7ff fd85 bl 8005264 + 80056d4: f647 01f0 movw r1, #30960 ; 0x78f0 + 80056d8: 20e5 movs r0, #229 ; 0xe5 + 80056da: f7ff fd85 bl 80051e8 LCD_WriteReg(0x0001,0x0100); - 800575a: f44f 7180 mov.w r1, #256 ; 0x100 - 800575e: 2001 movs r0, #1 - 8005760: f7ff fd80 bl 8005264 + 80056de: f44f 7180 mov.w r1, #256 ; 0x100 + 80056e2: 2001 movs r0, #1 + 80056e4: f7ff fd80 bl 80051e8 LCD_WriteReg(0x0002,0x0700); - 8005764: f44f 61e0 mov.w r1, #1792 ; 0x700 - 8005768: 2002 movs r0, #2 - 800576a: f7ff fd7b bl 8005264 + 80056e8: f44f 61e0 mov.w r1, #1792 ; 0x700 + 80056ec: 2002 movs r0, #2 + 80056ee: f7ff fd7b bl 80051e8 LCD_WriteReg(0x0003,0x1030); - 800576e: f241 0130 movw r1, #4144 ; 0x1030 - 8005772: 2003 movs r0, #3 - 8005774: f7ff fd76 bl 8005264 + 80056f2: f241 0130 movw r1, #4144 ; 0x1030 + 80056f6: 2003 movs r0, #3 + 80056f8: f7ff fd76 bl 80051e8 LCD_WriteReg(0x0004,0x0000); - 8005778: 2100 movs r1, #0 - 800577a: 2004 movs r0, #4 - 800577c: f7ff fd72 bl 8005264 + 80056fc: 2100 movs r1, #0 + 80056fe: 2004 movs r0, #4 + 8005700: f7ff fd72 bl 80051e8 LCD_WriteReg(0x0008,0x0202); - 8005780: f240 2102 movw r1, #514 ; 0x202 - 8005784: 2008 movs r0, #8 - 8005786: f7ff fd6d bl 8005264 + 8005704: f240 2102 movw r1, #514 ; 0x202 + 8005708: 2008 movs r0, #8 + 800570a: f7ff fd6d bl 80051e8 LCD_WriteReg(0x0009,0x0000); - 800578a: 2100 movs r1, #0 - 800578c: 2009 movs r0, #9 - 800578e: f7ff fd69 bl 8005264 + 800570e: 2100 movs r1, #0 + 8005710: 2009 movs r0, #9 + 8005712: f7ff fd69 bl 80051e8 LCD_WriteReg(0x000A,0x0000); - 8005792: 2100 movs r1, #0 - 8005794: 200a movs r0, #10 - 8005796: f7ff fd65 bl 8005264 + 8005716: 2100 movs r1, #0 + 8005718: 200a movs r0, #10 + 800571a: f7ff fd65 bl 80051e8 LCD_WriteReg(0x000C,0x0000); - 800579a: 2100 movs r1, #0 - 800579c: 200c movs r0, #12 - 800579e: f7ff fd61 bl 8005264 + 800571e: 2100 movs r1, #0 + 8005720: 200c movs r0, #12 + 8005722: f7ff fd61 bl 80051e8 LCD_WriteReg(0x000D,0x0000); - 80057a2: 2100 movs r1, #0 - 80057a4: 200d movs r0, #13 - 80057a6: f7ff fd5d bl 8005264 + 8005726: 2100 movs r1, #0 + 8005728: 200d movs r0, #13 + 800572a: f7ff fd5d bl 80051e8 LCD_WriteReg(0x000F,0x0000); - 80057aa: 2100 movs r1, #0 - 80057ac: 200f movs r0, #15 - 80057ae: f7ff fd59 bl 8005264 + 800572e: 2100 movs r1, #0 + 8005730: 200f movs r0, #15 + 8005732: f7ff fd59 bl 80051e8 //power on sequence VGHVGL LCD_WriteReg(0x0010,0x0000); - 80057b2: 2100 movs r1, #0 - 80057b4: 2010 movs r0, #16 - 80057b6: f7ff fd55 bl 8005264 + 8005736: 2100 movs r1, #0 + 8005738: 2010 movs r0, #16 + 800573a: f7ff fd55 bl 80051e8 LCD_WriteReg(0x0011,0x0007); - 80057ba: 2107 movs r1, #7 - 80057bc: 2011 movs r0, #17 - 80057be: f7ff fd51 bl 8005264 + 800573e: 2107 movs r1, #7 + 8005740: 2011 movs r0, #17 + 8005742: f7ff fd51 bl 80051e8 LCD_WriteReg(0x0012,0x0000); - 80057c2: 2100 movs r1, #0 - 80057c4: 2012 movs r0, #18 - 80057c6: f7ff fd4d bl 8005264 + 8005746: 2100 movs r1, #0 + 8005748: 2012 movs r0, #18 + 800574a: f7ff fd4d bl 80051e8 LCD_WriteReg(0x0013,0x0000); - 80057ca: 2100 movs r1, #0 - 80057cc: 2013 movs r0, #19 - 80057ce: f7ff fd49 bl 8005264 + 800574e: 2100 movs r1, #0 + 8005750: 2013 movs r0, #19 + 8005752: f7ff fd49 bl 80051e8 LCD_WriteReg(0x0007,0x0000); - 80057d2: 2100 movs r1, #0 - 80057d4: 2007 movs r0, #7 - 80057d6: f7ff fd45 bl 8005264 + 8005756: 2100 movs r1, #0 + 8005758: 2007 movs r0, #7 + 800575a: f7ff fd45 bl 80051e8 //vgh LCD_WriteReg(0x0010,0x1690); - 80057da: f241 6190 movw r1, #5776 ; 0x1690 - 80057de: 2010 movs r0, #16 - 80057e0: f7ff fd40 bl 8005264 + 800575e: f241 6190 movw r1, #5776 ; 0x1690 + 8005762: 2010 movs r0, #16 + 8005764: f7ff fd40 bl 80051e8 LCD_WriteReg(0x0011,0x0227); - 80057e4: f240 2127 movw r1, #551 ; 0x227 - 80057e8: 2011 movs r0, #17 - 80057ea: f7ff fd3b bl 8005264 + 8005768: f240 2127 movw r1, #551 ; 0x227 + 800576c: 2011 movs r0, #17 + 800576e: f7ff fd3b bl 80051e8 //delayms(100); //vregiout LCD_WriteReg(0x0012,0x009D); //0x001b - 80057ee: 219d movs r1, #157 ; 0x9d - 80057f0: 2012 movs r0, #18 - 80057f2: f7ff fd37 bl 8005264 + 8005772: 219d movs r1, #157 ; 0x9d + 8005774: 2012 movs r0, #18 + 8005776: f7ff fd37 bl 80051e8 //delayms(100); //vom amplitude LCD_WriteReg(0x0013,0x1900); - 80057f6: f44f 51c8 mov.w r1, #6400 ; 0x1900 - 80057fa: 2013 movs r0, #19 - 80057fc: f7ff fd32 bl 8005264 + 800577a: f44f 51c8 mov.w r1, #6400 ; 0x1900 + 800577e: 2013 movs r0, #19 + 8005780: f7ff fd32 bl 80051e8 //delayms(100); //vom H LCD_WriteReg(0x0029,0x0025); - 8005800: 2125 movs r1, #37 ; 0x25 - 8005802: 2029 movs r0, #41 ; 0x29 - 8005804: f7ff fd2e bl 8005264 + 8005784: 2125 movs r1, #37 ; 0x25 + 8005786: 2029 movs r0, #41 ; 0x29 + 8005788: f7ff fd2e bl 80051e8 LCD_WriteReg(0x002B,0x000D); - 8005808: 210d movs r1, #13 - 800580a: 202b movs r0, #43 ; 0x2b - 800580c: f7ff fd2a bl 8005264 + 800578c: 210d movs r1, #13 + 800578e: 202b movs r0, #43 ; 0x2b + 8005790: f7ff fd2a bl 80051e8 //gamma LCD_WriteReg(0x0030,0x0007); - 8005810: 2107 movs r1, #7 - 8005812: 2030 movs r0, #48 ; 0x30 - 8005814: f7ff fd26 bl 8005264 + 8005794: 2107 movs r1, #7 + 8005796: 2030 movs r0, #48 ; 0x30 + 8005798: f7ff fd26 bl 80051e8 LCD_WriteReg(0x0031,0x0303); - 8005818: f240 3103 movw r1, #771 ; 0x303 - 800581c: 2031 movs r0, #49 ; 0x31 - 800581e: f7ff fd21 bl 8005264 + 800579c: f240 3103 movw r1, #771 ; 0x303 + 80057a0: 2031 movs r0, #49 ; 0x31 + 80057a2: f7ff fd21 bl 80051e8 LCD_WriteReg(0x0032,0x0003);// 0006 - 8005822: 2103 movs r1, #3 - 8005824: 2032 movs r0, #50 ; 0x32 - 8005826: f7ff fd1d bl 8005264 + 80057a6: 2103 movs r1, #3 + 80057a8: 2032 movs r0, #50 ; 0x32 + 80057aa: f7ff fd1d bl 80051e8 LCD_WriteReg(0x0035,0x0206); - 800582a: f240 2106 movw r1, #518 ; 0x206 - 800582e: 2035 movs r0, #53 ; 0x35 - 8005830: f7ff fd18 bl 8005264 + 80057ae: f240 2106 movw r1, #518 ; 0x206 + 80057b2: 2035 movs r0, #53 ; 0x35 + 80057b4: f7ff fd18 bl 80051e8 LCD_WriteReg(0x0036,0x0008); - 8005834: 2108 movs r1, #8 - 8005836: 2036 movs r0, #54 ; 0x36 - 8005838: f7ff fd14 bl 8005264 + 80057b8: 2108 movs r1, #8 + 80057ba: 2036 movs r0, #54 ; 0x36 + 80057bc: f7ff fd14 bl 80051e8 LCD_WriteReg(0x0037,0x0406); - 800583c: f240 4106 movw r1, #1030 ; 0x406 - 8005840: 2037 movs r0, #55 ; 0x37 - 8005842: f7ff fd0f bl 8005264 + 80057c0: f240 4106 movw r1, #1030 ; 0x406 + 80057c4: 2037 movs r0, #55 ; 0x37 + 80057c6: f7ff fd0f bl 80051e8 LCD_WriteReg(0x0038,0x0304);//0200 - 8005846: f44f 7141 mov.w r1, #772 ; 0x304 - 800584a: 2038 movs r0, #56 ; 0x38 - 800584c: f7ff fd0a bl 8005264 + 80057ca: f44f 7141 mov.w r1, #772 ; 0x304 + 80057ce: 2038 movs r0, #56 ; 0x38 + 80057d0: f7ff fd0a bl 80051e8 LCD_WriteReg(0x0039,0x0007); - 8005850: 2107 movs r1, #7 - 8005852: 2039 movs r0, #57 ; 0x39 - 8005854: f7ff fd06 bl 8005264 + 80057d4: 2107 movs r1, #7 + 80057d6: 2039 movs r0, #57 ; 0x39 + 80057d8: f7ff fd06 bl 80051e8 LCD_WriteReg(0x003C,0x0602);// 0504 - 8005858: f240 6102 movw r1, #1538 ; 0x602 - 800585c: 203c movs r0, #60 ; 0x3c - 800585e: f7ff fd01 bl 8005264 + 80057dc: f240 6102 movw r1, #1538 ; 0x602 + 80057e0: 203c movs r0, #60 ; 0x3c + 80057e2: f7ff fd01 bl 80051e8 LCD_WriteReg(0x003D,0x0008); - 8005862: 2108 movs r1, #8 - 8005864: 203d movs r0, #61 ; 0x3d - 8005866: f7ff fcfd bl 8005264 + 80057e6: 2108 movs r1, #8 + 80057e8: 203d movs r0, #61 ; 0x3d + 80057ea: f7ff fcfd bl 80051e8 //ram LCD_WriteReg(0x0050,0x0000); - 800586a: 2100 movs r1, #0 - 800586c: 2050 movs r0, #80 ; 0x50 - 800586e: f7ff fcf9 bl 8005264 + 80057ee: 2100 movs r1, #0 + 80057f0: 2050 movs r0, #80 ; 0x50 + 80057f2: f7ff fcf9 bl 80051e8 LCD_WriteReg(0x0051,0x00EF); - 8005872: 21ef movs r1, #239 ; 0xef - 8005874: 2051 movs r0, #81 ; 0x51 - 8005876: f7ff fcf5 bl 8005264 + 80057f6: 21ef movs r1, #239 ; 0xef + 80057f8: 2051 movs r0, #81 ; 0x51 + 80057fa: f7ff fcf5 bl 80051e8 LCD_WriteReg(0x0052,0x0000); - 800587a: 2100 movs r1, #0 - 800587c: 2052 movs r0, #82 ; 0x52 - 800587e: f7ff fcf1 bl 8005264 + 80057fe: 2100 movs r1, #0 + 8005800: 2052 movs r0, #82 ; 0x52 + 8005802: f7ff fcf1 bl 80051e8 LCD_WriteReg(0x0053,0x013F); - 8005882: f240 113f movw r1, #319 ; 0x13f - 8005886: 2053 movs r0, #83 ; 0x53 - 8005888: f7ff fcec bl 8005264 + 8005806: f240 113f movw r1, #319 ; 0x13f + 800580a: 2053 movs r0, #83 ; 0x53 + 800580c: f7ff fcec bl 80051e8 LCD_WriteReg(0x0060,0xA700); - 800588c: f44f 4127 mov.w r1, #42752 ; 0xa700 - 8005890: 2060 movs r0, #96 ; 0x60 - 8005892: f7ff fce7 bl 8005264 + 8005810: f44f 4127 mov.w r1, #42752 ; 0xa700 + 8005814: 2060 movs r0, #96 ; 0x60 + 8005816: f7ff fce7 bl 80051e8 LCD_WriteReg(0x0061,0x0001); - 8005896: 2101 movs r1, #1 - 8005898: 2061 movs r0, #97 ; 0x61 - 800589a: f7ff fce3 bl 8005264 + 800581a: 2101 movs r1, #1 + 800581c: 2061 movs r0, #97 ; 0x61 + 800581e: f7ff fce3 bl 80051e8 LCD_WriteReg(0x006A,0x0000); - 800589e: 2100 movs r1, #0 - 80058a0: 206a movs r0, #106 ; 0x6a - 80058a2: f7ff fcdf bl 8005264 + 8005822: 2100 movs r1, #0 + 8005824: 206a movs r0, #106 ; 0x6a + 8005826: f7ff fcdf bl 80051e8 // LCD_WriteReg(0x0080,0x0000); - 80058a6: 2100 movs r1, #0 - 80058a8: 2080 movs r0, #128 ; 0x80 - 80058aa: f7ff fcdb bl 8005264 + 800582a: 2100 movs r1, #0 + 800582c: 2080 movs r0, #128 ; 0x80 + 800582e: f7ff fcdb bl 80051e8 LCD_WriteReg(0x0081,0x0000); - 80058ae: 2100 movs r1, #0 - 80058b0: 2081 movs r0, #129 ; 0x81 - 80058b2: f7ff fcd7 bl 8005264 + 8005832: 2100 movs r1, #0 + 8005834: 2081 movs r0, #129 ; 0x81 + 8005836: f7ff fcd7 bl 80051e8 LCD_WriteReg(0x0082,0x0000); - 80058b6: 2100 movs r1, #0 - 80058b8: 2082 movs r0, #130 ; 0x82 - 80058ba: f7ff fcd3 bl 8005264 + 800583a: 2100 movs r1, #0 + 800583c: 2082 movs r0, #130 ; 0x82 + 800583e: f7ff fcd3 bl 80051e8 LCD_WriteReg(0x0083,0x0000); - 80058be: 2100 movs r1, #0 - 80058c0: 2083 movs r0, #131 ; 0x83 - 80058c2: f7ff fccf bl 8005264 + 8005842: 2100 movs r1, #0 + 8005844: 2083 movs r0, #131 ; 0x83 + 8005846: f7ff fccf bl 80051e8 LCD_WriteReg(0x0084,0x0000); - 80058c6: 2100 movs r1, #0 - 80058c8: 2084 movs r0, #132 ; 0x84 - 80058ca: f7ff fccb bl 8005264 + 800584a: 2100 movs r1, #0 + 800584c: 2084 movs r0, #132 ; 0x84 + 800584e: f7ff fccb bl 80051e8 LCD_WriteReg(0x0085,0x0000); - 80058ce: 2100 movs r1, #0 - 80058d0: 2085 movs r0, #133 ; 0x85 - 80058d2: f7ff fcc7 bl 8005264 + 8005852: 2100 movs r1, #0 + 8005854: 2085 movs r0, #133 ; 0x85 + 8005856: f7ff fcc7 bl 80051e8 // LCD_WriteReg(0x0090,0x0010); - 80058d6: 2110 movs r1, #16 - 80058d8: 2090 movs r0, #144 ; 0x90 - 80058da: f7ff fcc3 bl 8005264 + 800585a: 2110 movs r1, #16 + 800585c: 2090 movs r0, #144 ; 0x90 + 800585e: f7ff fcc3 bl 80051e8 LCD_WriteReg(0x0092,0x0600); - 80058de: f44f 61c0 mov.w r1, #1536 ; 0x600 - 80058e2: 2092 movs r0, #146 ; 0x92 - 80058e4: f7ff fcbe bl 8005264 + 8005862: f44f 61c0 mov.w r1, #1536 ; 0x600 + 8005866: 2092 movs r0, #146 ; 0x92 + 8005868: f7ff fcbe bl 80051e8 LCD_WriteReg(0x0007,0x0133); - 80058e8: f240 1133 movw r1, #307 ; 0x133 - 80058ec: 2007 movs r0, #7 - 80058ee: f7ff fcb9 bl 8005264 + 800586c: f240 1133 movw r1, #307 ; 0x133 + 8005870: 2007 movs r0, #7 + 8005872: f7ff fcb9 bl 80051e8 LCD_WriteReg(0x00,0x0022);// - 80058f2: 2122 movs r1, #34 ; 0x22 - 80058f4: 2000 movs r0, #0 - 80058f6: f7ff fcb5 bl 8005264 + 8005876: 2122 movs r1, #34 ; 0x22 + 8005878: 2000 movs r0, #0 + 800587a: f7ff fcb5 bl 80051e8 LCD_Display_Dir(1); //ĬÈÏΪhÆÁ - 80058fa: 2001 movs r0, #1 - 80058fc: f7ff fe4a bl 8005594 + 800587e: 2001 movs r0, #1 + 8005880: f7ff fe4a bl 8005518 } - 8005900: bf00 nop - 8005902: bd80 pop {r7, pc} - 8005904: 40010c00 .word 0x40010c00 - 8005908: 20000820 .word 0x20000820 + 8005884: bf00 nop + 8005886: bd80 pop {r7, pc} + 8005888: 40010c00 .word 0x40010c00 + 800588c: 200007b0 .word 0x200007b0 -0800590c : +08005890 : //***********************************************************´òµã ¶Áµã ʲôµÄ //ÉèÖùâ±êλÖà //Xpos:ºá×ø±ê //Ypos:×Ý×ø±ê void LCD_SetCursor(uint16_t Xpos, uint16_t Ypos) { - 800590c: b580 push {r7, lr} - 800590e: b082 sub sp, #8 - 8005910: af00 add r7, sp, #0 - 8005912: 4603 mov r3, r0 - 8005914: 460a mov r2, r1 - 8005916: 80fb strh r3, [r7, #6] - 8005918: 4613 mov r3, r2 - 800591a: 80bb strh r3, [r7, #4] + 8005890: b580 push {r7, lr} + 8005892: b082 sub sp, #8 + 8005894: af00 add r7, sp, #0 + 8005896: 4603 mov r3, r0 + 8005898: 460a mov r2, r1 + 800589a: 80fb strh r3, [r7, #6] + 800589c: 4613 mov r3, r2 + 800589e: 80bb strh r3, [r7, #4] if(lcddev.id==0X9341||lcddev.id==0X5310) - 800591c: 4b42 ldr r3, [pc, #264] ; (8005a28 ) - 800591e: 889b ldrh r3, [r3, #4] - 8005920: f249 3241 movw r2, #37697 ; 0x9341 - 8005924: 4293 cmp r3, r2 - 8005926: d005 beq.n 8005934 - 8005928: 4b3f ldr r3, [pc, #252] ; (8005a28 ) - 800592a: 889b ldrh r3, [r3, #4] - 800592c: f245 3210 movw r2, #21264 ; 0x5310 - 8005930: 4293 cmp r3, r2 - 8005932: d124 bne.n 800597e + 80058a0: 4b42 ldr r3, [pc, #264] ; (80059ac ) + 80058a2: 889b ldrh r3, [r3, #4] + 80058a4: f249 3241 movw r2, #37697 ; 0x9341 + 80058a8: 4293 cmp r3, r2 + 80058aa: d005 beq.n 80058b8 + 80058ac: 4b3f ldr r3, [pc, #252] ; (80059ac ) + 80058ae: 889b ldrh r3, [r3, #4] + 80058b0: f245 3210 movw r2, #21264 ; 0x5310 + 80058b4: 4293 cmp r3, r2 + 80058b6: d124 bne.n 8005902 { LCD_WR_REG(lcddev.setxcmd); - 8005934: 4b3c ldr r3, [pc, #240] ; (8005a28 ) - 8005936: 7a1b ldrb r3, [r3, #8] - 8005938: b29b uxth r3, r3 - 800593a: 4618 mov r0, r3 - 800593c: f7ff fc74 bl 8005228 + 80058b8: 4b3c ldr r3, [pc, #240] ; (80059ac ) + 80058ba: 7a1b ldrb r3, [r3, #8] + 80058bc: b29b uxth r3, r3 + 80058be: 4618 mov r0, r3 + 80058c0: f7ff fc74 bl 80051ac LCD_WR_DATA(Xpos>>8); - 8005940: 88fb ldrh r3, [r7, #6] - 8005942: 0a1b lsrs r3, r3, #8 - 8005944: b29b uxth r3, r3 - 8005946: 4618 mov r0, r3 - 8005948: f7ff fc7c bl 8005244 + 80058c4: 88fb ldrh r3, [r7, #6] + 80058c6: 0a1b lsrs r3, r3, #8 + 80058c8: b29b uxth r3, r3 + 80058ca: 4618 mov r0, r3 + 80058cc: f7ff fc7c bl 80051c8 LCD_WR_DATA(Xpos&0XFF); - 800594c: 88fb ldrh r3, [r7, #6] - 800594e: b2db uxtb r3, r3 - 8005950: b29b uxth r3, r3 - 8005952: 4618 mov r0, r3 - 8005954: f7ff fc76 bl 8005244 + 80058d0: 88fb ldrh r3, [r7, #6] + 80058d2: b2db uxtb r3, r3 + 80058d4: b29b uxth r3, r3 + 80058d6: 4618 mov r0, r3 + 80058d8: f7ff fc76 bl 80051c8 LCD_WR_REG(lcddev.setycmd); - 8005958: 4b33 ldr r3, [pc, #204] ; (8005a28 ) - 800595a: 7a5b ldrb r3, [r3, #9] - 800595c: b29b uxth r3, r3 - 800595e: 4618 mov r0, r3 - 8005960: f7ff fc62 bl 8005228 + 80058dc: 4b33 ldr r3, [pc, #204] ; (80059ac ) + 80058de: 7a5b ldrb r3, [r3, #9] + 80058e0: b29b uxth r3, r3 + 80058e2: 4618 mov r0, r3 + 80058e4: f7ff fc62 bl 80051ac LCD_WR_DATA(Ypos>>8); - 8005964: 88bb ldrh r3, [r7, #4] - 8005966: 0a1b lsrs r3, r3, #8 - 8005968: b29b uxth r3, r3 - 800596a: 4618 mov r0, r3 - 800596c: f7ff fc6a bl 8005244 + 80058e8: 88bb ldrh r3, [r7, #4] + 80058ea: 0a1b lsrs r3, r3, #8 + 80058ec: b29b uxth r3, r3 + 80058ee: 4618 mov r0, r3 + 80058f0: f7ff fc6a bl 80051c8 LCD_WR_DATA(Ypos&0XFF); - 8005970: 88bb ldrh r3, [r7, #4] - 8005972: b2db uxtb r3, r3 - 8005974: b29b uxth r3, r3 - 8005976: 4618 mov r0, r3 - 8005978: f7ff fc64 bl 8005244 + 80058f4: 88bb ldrh r3, [r7, #4] + 80058f6: b2db uxtb r3, r3 + 80058f8: b29b uxth r3, r3 + 80058fa: 4618 mov r0, r3 + 80058fc: f7ff fc64 bl 80051c8 { if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁÆäʵ¾ÍÊǵ÷תx,y×ø±ê LCD_WriteReg(lcddev.setxcmd, Xpos); LCD_WriteReg(lcddev.setycmd, Ypos); } } - 800597c: e050 b.n 8005a20 + 8005900: e050 b.n 80059a4 }else if(lcddev.id==0X6804) - 800597e: 4b2a ldr r3, [pc, #168] ; (8005a28 ) - 8005980: 889b ldrh r3, [r3, #4] - 8005982: f646 0204 movw r2, #26628 ; 0x6804 - 8005986: 4293 cmp r3, r2 - 8005988: d12f bne.n 80059ea + 8005902: 4b2a ldr r3, [pc, #168] ; (80059ac ) + 8005904: 889b ldrh r3, [r3, #4] + 8005906: f646 0204 movw r2, #26628 ; 0x6804 + 800590a: 4293 cmp r3, r2 + 800590c: d12f bne.n 800596e if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁʱ´¦Àí - 800598a: 4b27 ldr r3, [pc, #156] ; (8005a28 ) - 800598c: 799b ldrb r3, [r3, #6] - 800598e: 2b01 cmp r3, #1 - 8005990: d106 bne.n 80059a0 - 8005992: 4b25 ldr r3, [pc, #148] ; (8005a28 ) - 8005994: 881a ldrh r2, [r3, #0] - 8005996: 88fb ldrh r3, [r7, #6] - 8005998: 1ad3 subs r3, r2, r3 - 800599a: b29b uxth r3, r3 - 800599c: 3b01 subs r3, #1 - 800599e: 80fb strh r3, [r7, #6] + 800590e: 4b27 ldr r3, [pc, #156] ; (80059ac ) + 8005910: 799b ldrb r3, [r3, #6] + 8005912: 2b01 cmp r3, #1 + 8005914: d106 bne.n 8005924 + 8005916: 4b25 ldr r3, [pc, #148] ; (80059ac ) + 8005918: 881a ldrh r2, [r3, #0] + 800591a: 88fb ldrh r3, [r7, #6] + 800591c: 1ad3 subs r3, r2, r3 + 800591e: b29b uxth r3, r3 + 8005920: 3b01 subs r3, #1 + 8005922: 80fb strh r3, [r7, #6] LCD_WR_REG(lcddev.setxcmd); - 80059a0: 4b21 ldr r3, [pc, #132] ; (8005a28 ) - 80059a2: 7a1b ldrb r3, [r3, #8] - 80059a4: b29b uxth r3, r3 - 80059a6: 4618 mov r0, r3 - 80059a8: f7ff fc3e bl 8005228 + 8005924: 4b21 ldr r3, [pc, #132] ; (80059ac ) + 8005926: 7a1b ldrb r3, [r3, #8] + 8005928: b29b uxth r3, r3 + 800592a: 4618 mov r0, r3 + 800592c: f7ff fc3e bl 80051ac LCD_WR_DATA(Xpos>>8); - 80059ac: 88fb ldrh r3, [r7, #6] - 80059ae: 0a1b lsrs r3, r3, #8 - 80059b0: b29b uxth r3, r3 - 80059b2: 4618 mov r0, r3 - 80059b4: f7ff fc46 bl 8005244 + 8005930: 88fb ldrh r3, [r7, #6] + 8005932: 0a1b lsrs r3, r3, #8 + 8005934: b29b uxth r3, r3 + 8005936: 4618 mov r0, r3 + 8005938: f7ff fc46 bl 80051c8 LCD_WR_DATA(Xpos&0XFF); - 80059b8: 88fb ldrh r3, [r7, #6] - 80059ba: b2db uxtb r3, r3 - 80059bc: b29b uxth r3, r3 - 80059be: 4618 mov r0, r3 - 80059c0: f7ff fc40 bl 8005244 + 800593c: 88fb ldrh r3, [r7, #6] + 800593e: b2db uxtb r3, r3 + 8005940: b29b uxth r3, r3 + 8005942: 4618 mov r0, r3 + 8005944: f7ff fc40 bl 80051c8 LCD_WR_REG(lcddev.setycmd); - 80059c4: 4b18 ldr r3, [pc, #96] ; (8005a28 ) - 80059c6: 7a5b ldrb r3, [r3, #9] - 80059c8: b29b uxth r3, r3 - 80059ca: 4618 mov r0, r3 - 80059cc: f7ff fc2c bl 8005228 + 8005948: 4b18 ldr r3, [pc, #96] ; (80059ac ) + 800594a: 7a5b ldrb r3, [r3, #9] + 800594c: b29b uxth r3, r3 + 800594e: 4618 mov r0, r3 + 8005950: f7ff fc2c bl 80051ac LCD_WR_DATA(Ypos>>8); - 80059d0: 88bb ldrh r3, [r7, #4] - 80059d2: 0a1b lsrs r3, r3, #8 - 80059d4: b29b uxth r3, r3 - 80059d6: 4618 mov r0, r3 - 80059d8: f7ff fc34 bl 8005244 + 8005954: 88bb ldrh r3, [r7, #4] + 8005956: 0a1b lsrs r3, r3, #8 + 8005958: b29b uxth r3, r3 + 800595a: 4618 mov r0, r3 + 800595c: f7ff fc34 bl 80051c8 LCD_WR_DATA(Ypos&0XFF); - 80059dc: 88bb ldrh r3, [r7, #4] - 80059de: b2db uxtb r3, r3 - 80059e0: b29b uxth r3, r3 - 80059e2: 4618 mov r0, r3 - 80059e4: f7ff fc2e bl 8005244 + 8005960: 88bb ldrh r3, [r7, #4] + 8005962: b2db uxtb r3, r3 + 8005964: b29b uxth r3, r3 + 8005966: 4618 mov r0, r3 + 8005968: f7ff fc2e bl 80051c8 } - 80059e8: e01a b.n 8005a20 + 800596c: e01a b.n 80059a4 if(lcddev.dir==1)Xpos=lcddev.width-1-Xpos;//ºáÆÁÆäʵ¾ÍÊǵ÷תx,y×ø±ê - 80059ea: 4b0f ldr r3, [pc, #60] ; (8005a28 ) - 80059ec: 799b ldrb r3, [r3, #6] - 80059ee: 2b01 cmp r3, #1 - 80059f0: d106 bne.n 8005a00 - 80059f2: 4b0d ldr r3, [pc, #52] ; (8005a28 ) - 80059f4: 881a ldrh r2, [r3, #0] - 80059f6: 88fb ldrh r3, [r7, #6] - 80059f8: 1ad3 subs r3, r2, r3 - 80059fa: b29b uxth r3, r3 - 80059fc: 3b01 subs r3, #1 - 80059fe: 80fb strh r3, [r7, #6] + 800596e: 4b0f ldr r3, [pc, #60] ; (80059ac ) + 8005970: 799b ldrb r3, [r3, #6] + 8005972: 2b01 cmp r3, #1 + 8005974: d106 bne.n 8005984 + 8005976: 4b0d ldr r3, [pc, #52] ; (80059ac ) + 8005978: 881a ldrh r2, [r3, #0] + 800597a: 88fb ldrh r3, [r7, #6] + 800597c: 1ad3 subs r3, r2, r3 + 800597e: b29b uxth r3, r3 + 8005980: 3b01 subs r3, #1 + 8005982: 80fb strh r3, [r7, #6] LCD_WriteReg(lcddev.setxcmd, Xpos); - 8005a00: 4b09 ldr r3, [pc, #36] ; (8005a28 ) - 8005a02: 7a1b ldrb r3, [r3, #8] - 8005a04: b29b uxth r3, r3 - 8005a06: 88fa ldrh r2, [r7, #6] - 8005a08: 4611 mov r1, r2 - 8005a0a: 4618 mov r0, r3 - 8005a0c: f7ff fc2a bl 8005264 + 8005984: 4b09 ldr r3, [pc, #36] ; (80059ac ) + 8005986: 7a1b ldrb r3, [r3, #8] + 8005988: b29b uxth r3, r3 + 800598a: 88fa ldrh r2, [r7, #6] + 800598c: 4611 mov r1, r2 + 800598e: 4618 mov r0, r3 + 8005990: f7ff fc2a bl 80051e8 LCD_WriteReg(lcddev.setycmd, Ypos); - 8005a10: 4b05 ldr r3, [pc, #20] ; (8005a28 ) - 8005a12: 7a5b ldrb r3, [r3, #9] - 8005a14: b29b uxth r3, r3 - 8005a16: 88ba ldrh r2, [r7, #4] - 8005a18: 4611 mov r1, r2 - 8005a1a: 4618 mov r0, r3 - 8005a1c: f7ff fc22 bl 8005264 + 8005994: 4b05 ldr r3, [pc, #20] ; (80059ac ) + 8005996: 7a5b ldrb r3, [r3, #9] + 8005998: b29b uxth r3, r3 + 800599a: 88ba ldrh r2, [r7, #4] + 800599c: 4611 mov r1, r2 + 800599e: 4618 mov r0, r3 + 80059a0: f7ff fc22 bl 80051e8 } - 8005a20: bf00 nop - 8005a22: 3708 adds r7, #8 - 8005a24: 46bd mov sp, r7 - 8005a26: bd80 pop {r7, pc} - 8005a28: 20000820 .word 0x20000820 + 80059a4: bf00 nop + 80059a6: 3708 adds r7, #8 + 80059a8: 46bd mov sp, r7 + 80059aa: bd80 pop {r7, pc} + 80059ac: 200007b0 .word 0x200007b0 -08005a2c : +080059b0 : } //»­µã //x,y:×ø±ê //POINT_COLOR:´ËµãµÄÑÕÉ« void LCD_set_dot(uint16_t x,uint16_t y,uint16_t color) { - 8005a2c: b580 push {r7, lr} - 8005a2e: b082 sub sp, #8 - 8005a30: af00 add r7, sp, #0 - 8005a32: 4603 mov r3, r0 - 8005a34: 80fb strh r3, [r7, #6] - 8005a36: 460b mov r3, r1 - 8005a38: 80bb strh r3, [r7, #4] - 8005a3a: 4613 mov r3, r2 - 8005a3c: 807b strh r3, [r7, #2] + 80059b0: b580 push {r7, lr} + 80059b2: b082 sub sp, #8 + 80059b4: af00 add r7, sp, #0 + 80059b6: 4603 mov r3, r0 + 80059b8: 80fb strh r3, [r7, #6] + 80059ba: 460b mov r3, r1 + 80059bc: 80bb strh r3, [r7, #4] + 80059be: 4613 mov r3, r2 + 80059c0: 807b strh r3, [r7, #2] LCD_SetCursor(x,y); //ÉèÖùâ±êλÖà - 8005a3e: 88ba ldrh r2, [r7, #4] - 8005a40: 88fb ldrh r3, [r7, #6] - 8005a42: 4611 mov r1, r2 - 8005a44: 4618 mov r0, r3 - 8005a46: f7ff ff61 bl 800590c + 80059c2: 88ba ldrh r2, [r7, #4] + 80059c4: 88fb ldrh r3, [r7, #6] + 80059c6: 4611 mov r1, r2 + 80059c8: 4618 mov r0, r3 + 80059ca: f7ff ff61 bl 8005890 LCD_REG_ADDRESS=lcddev.wramcmd; //¿ªÊ¼Ð´ÈëGRAM - 8005a4a: 4b06 ldr r3, [pc, #24] ; (8005a64 ) - 8005a4c: 79da ldrb r2, [r3, #7] - 8005a4e: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 - 8005a52: b292 uxth r2, r2 - 8005a54: 801a strh r2, [r3, #0] + 80059ce: 4b06 ldr r3, [pc, #24] ; (80059e8 ) + 80059d0: 79da ldrb r2, [r3, #7] + 80059d2: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 + 80059d6: b292 uxth r2, r2 + 80059d8: 801a strh r2, [r3, #0] LCD_DATA_ADDRESS=color; - 8005a56: 4a04 ldr r2, [pc, #16] ; (8005a68 ) - 8005a58: 887b ldrh r3, [r7, #2] - 8005a5a: 8013 strh r3, [r2, #0] + 80059da: 4a04 ldr r2, [pc, #16] ; (80059ec ) + 80059dc: 887b ldrh r3, [r7, #2] + 80059de: 8013 strh r3, [r2, #0] } - 8005a5c: bf00 nop - 8005a5e: 3708 adds r7, #8 - 8005a60: 46bd mov sp, r7 - 8005a62: bd80 pop {r7, pc} - 8005a64: 20000820 .word 0x20000820 - 8005a68: 6c000800 .word 0x6c000800 + 80059e0: bf00 nop + 80059e2: 3708 adds r7, #8 + 80059e4: 46bd mov sp, r7 + 80059e6: bd80 pop {r7, pc} + 80059e8: 200007b0 .word 0x200007b0 + 80059ec: 6c000800 .word 0x6c000800 -08005a6c : +080059f0 : //ÇåÆÁº¯Êý //color:ÒªÇåÆÁµÄÌî³äÉ« void LCD_Clear(uint16_t color) { - 8005a6c: b580 push {r7, lr} - 8005a6e: b084 sub sp, #16 - 8005a70: af00 add r7, sp, #0 - 8005a72: 4603 mov r3, r0 - 8005a74: 80fb strh r3, [r7, #6] + 80059f0: b580 push {r7, lr} + 80059f2: b084 sub sp, #16 + 80059f4: af00 add r7, sp, #0 + 80059f6: 4603 mov r3, r0 + 80059f8: 80fb strh r3, [r7, #6] uint32_t index=0; - 8005a76: 2300 movs r3, #0 - 8005a78: 60fb str r3, [r7, #12] + 80059fa: 2300 movs r3, #0 + 80059fc: 60fb str r3, [r7, #12] uint32_t totalpoint=lcddev.width; - 8005a7a: 4b23 ldr r3, [pc, #140] ; (8005b08 ) - 8005a7c: 881b ldrh r3, [r3, #0] - 8005a7e: 60bb str r3, [r7, #8] + 80059fe: 4b23 ldr r3, [pc, #140] ; (8005a8c ) + 8005a00: 881b ldrh r3, [r3, #0] + 8005a02: 60bb str r3, [r7, #8] totalpoint*=lcddev.height; //µÃµ½×ܵãÊý - 8005a80: 4b21 ldr r3, [pc, #132] ; (8005b08 ) - 8005a82: 885b ldrh r3, [r3, #2] - 8005a84: 461a mov r2, r3 - 8005a86: 68bb ldr r3, [r7, #8] - 8005a88: fb02 f303 mul.w r3, r2, r3 - 8005a8c: 60bb str r3, [r7, #8] + 8005a04: 4b21 ldr r3, [pc, #132] ; (8005a8c ) + 8005a06: 885b ldrh r3, [r3, #2] + 8005a08: 461a mov r2, r3 + 8005a0a: 68bb ldr r3, [r7, #8] + 8005a0c: fb02 f303 mul.w r3, r2, r3 + 8005a10: 60bb str r3, [r7, #8] if((lcddev.id==0X6804)&&(lcddev.dir==1))//6804ºáÆÁµÄʱºòÌØÊâ´¦Àí - 8005a8e: 4b1e ldr r3, [pc, #120] ; (8005b08 ) - 8005a90: 889b ldrh r3, [r3, #4] - 8005a92: f646 0204 movw r2, #26628 ; 0x6804 - 8005a96: 4293 cmp r3, r2 - 8005a98: d11a bne.n 8005ad0 - 8005a9a: 4b1b ldr r3, [pc, #108] ; (8005b08 ) - 8005a9c: 799b ldrb r3, [r3, #6] - 8005a9e: 2b01 cmp r3, #1 - 8005aa0: d116 bne.n 8005ad0 + 8005a12: 4b1e ldr r3, [pc, #120] ; (8005a8c ) + 8005a14: 889b ldrh r3, [r3, #4] + 8005a16: f646 0204 movw r2, #26628 ; 0x6804 + 8005a1a: 4293 cmp r3, r2 + 8005a1c: d11a bne.n 8005a54 + 8005a1e: 4b1b ldr r3, [pc, #108] ; (8005a8c ) + 8005a20: 799b ldrb r3, [r3, #6] + 8005a22: 2b01 cmp r3, #1 + 8005a24: d116 bne.n 8005a54 { lcddev.dir=0; - 8005aa2: 4b19 ldr r3, [pc, #100] ; (8005b08 ) - 8005aa4: 2200 movs r2, #0 - 8005aa6: 719a strb r2, [r3, #6] + 8005a26: 4b19 ldr r3, [pc, #100] ; (8005a8c ) + 8005a28: 2200 movs r2, #0 + 8005a2a: 719a strb r2, [r3, #6] lcddev.setxcmd=0X2A; - 8005aa8: 4b17 ldr r3, [pc, #92] ; (8005b08 ) - 8005aaa: 222a movs r2, #42 ; 0x2a - 8005aac: 721a strb r2, [r3, #8] + 8005a2c: 4b17 ldr r3, [pc, #92] ; (8005a8c ) + 8005a2e: 222a movs r2, #42 ; 0x2a + 8005a30: 721a strb r2, [r3, #8] lcddev.setycmd=0X2B; - 8005aae: 4b16 ldr r3, [pc, #88] ; (8005b08 ) - 8005ab0: 222b movs r2, #43 ; 0x2b - 8005ab2: 725a strb r2, [r3, #9] + 8005a32: 4b16 ldr r3, [pc, #88] ; (8005a8c ) + 8005a34: 222b movs r2, #43 ; 0x2b + 8005a36: 725a strb r2, [r3, #9] LCD_SetCursor(0x00,0x0000); //ÉèÖùâ±êλÖà - 8005ab4: 2100 movs r1, #0 - 8005ab6: 2000 movs r0, #0 - 8005ab8: f7ff ff28 bl 800590c + 8005a38: 2100 movs r1, #0 + 8005a3a: 2000 movs r0, #0 + 8005a3c: f7ff ff28 bl 8005890 lcddev.dir=1; - 8005abc: 4b12 ldr r3, [pc, #72] ; (8005b08 ) - 8005abe: 2201 movs r2, #1 - 8005ac0: 719a strb r2, [r3, #6] + 8005a40: 4b12 ldr r3, [pc, #72] ; (8005a8c ) + 8005a42: 2201 movs r2, #1 + 8005a44: 719a strb r2, [r3, #6] lcddev.setxcmd=0X2B; - 8005ac2: 4b11 ldr r3, [pc, #68] ; (8005b08 ) - 8005ac4: 222b movs r2, #43 ; 0x2b - 8005ac6: 721a strb r2, [r3, #8] + 8005a46: 4b11 ldr r3, [pc, #68] ; (8005a8c ) + 8005a48: 222b movs r2, #43 ; 0x2b + 8005a4a: 721a strb r2, [r3, #8] lcddev.setycmd=0X2A; - 8005ac8: 4b0f ldr r3, [pc, #60] ; (8005b08 ) - 8005aca: 222a movs r2, #42 ; 0x2a - 8005acc: 725a strb r2, [r3, #9] - 8005ace: e003 b.n 8005ad8 + 8005a4c: 4b0f ldr r3, [pc, #60] ; (8005a8c ) + 8005a4e: 222a movs r2, #42 ; 0x2a + 8005a50: 725a strb r2, [r3, #9] + 8005a52: e003 b.n 8005a5c }else LCD_SetCursor(0x00,0x0000); //ÉèÖùâ±êλÖà - 8005ad0: 2100 movs r1, #0 - 8005ad2: 2000 movs r0, #0 - 8005ad4: f7ff ff1a bl 800590c + 8005a54: 2100 movs r1, #0 + 8005a56: 2000 movs r0, #0 + 8005a58: f7ff ff1a bl 8005890 LCD_REG_ADDRESS=lcddev.wramcmd; //¿ªÊ¼Ð´ÈëGRAM - 8005ad8: 4b0b ldr r3, [pc, #44] ; (8005b08 ) - 8005ada: 79da ldrb r2, [r3, #7] - 8005adc: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 - 8005ae0: b292 uxth r2, r2 - 8005ae2: 801a strh r2, [r3, #0] + 8005a5c: 4b0b ldr r3, [pc, #44] ; (8005a8c ) + 8005a5e: 79da ldrb r2, [r3, #7] + 8005a60: f04f 43d8 mov.w r3, #1811939328 ; 0x6c000000 + 8005a64: b292 uxth r2, r2 + 8005a66: 801a strh r2, [r3, #0] for(index=0;index + 8005a68: 2300 movs r3, #0 + 8005a6a: 60fb str r3, [r7, #12] + 8005a6c: e005 b.n 8005a7a { LCD_DATA_ADDRESS=color; - 8005aea: 4a08 ldr r2, [pc, #32] ; (8005b0c ) - 8005aec: 88fb ldrh r3, [r7, #6] - 8005aee: 8013 strh r3, [r2, #0] + 8005a6e: 4a08 ldr r2, [pc, #32] ; (8005a90 ) + 8005a70: 88fb ldrh r3, [r7, #6] + 8005a72: 8013 strh r3, [r2, #0] for(index=0;index + 8005a74: 68fb ldr r3, [r7, #12] + 8005a76: 3301 adds r3, #1 + 8005a78: 60fb str r3, [r7, #12] + 8005a7a: 68fa ldr r2, [r7, #12] + 8005a7c: 68bb ldr r3, [r7, #8] + 8005a7e: 429a cmp r2, r3 + 8005a80: d3f5 bcc.n 8005a6e } } - 8005afe: bf00 nop - 8005b00: bf00 nop - 8005b02: 3710 adds r7, #16 - 8005b04: 46bd mov sp, r7 - 8005b06: bd80 pop {r7, pc} - 8005b08: 20000820 .word 0x20000820 - 8005b0c: 6c000800 .word 0x6c000800 + 8005a82: bf00 nop + 8005a84: bf00 nop + 8005a86: 3710 adds r7, #16 + 8005a88: 46bd mov sp, r7 + 8005a8a: bd80 pop {r7, pc} + 8005a8c: 200007b0 .word 0x200007b0 + 8005a90: 6c000800 .word 0x6c000800 -08005b10 : +08005a94 : //³õʼ»¯×ÖÌå //·µ»ØÖµ:0,×Ö¿âÍêºÃ. // ÆäËû,×ֿⶪʧ uint8_t font_init(void) { - 8005b10: b580 push {r7, lr} - 8005b12: b082 sub sp, #8 - 8005b14: af00 add r7, sp, #0 + 8005a94: b580 push {r7, lr} + 8005a96: b082 sub sp, #8 + 8005a98: af00 add r7, sp, #0 uint8_t t=0; - 8005b16: 2300 movs r3, #0 - 8005b18: 71fb strb r3, [r7, #7] + 8005a9a: 2300 movs r3, #0 + 8005a9c: 71fb strb r3, [r7, #7] while(t<10)//Á¬Ðø¶ÁÈ¡10´Î,¶¼ÊÇ´íÎó,˵Ã÷ȷʵÊÇÓÐÎÊÌâ,µÃ¸üÐÂ×Ö¿âÁË - 8005b1a: e014 b.n 8005b46 + 8005a9e: e014 b.n 8005aca { t++; - 8005b1c: 79fb ldrb r3, [r7, #7] - 8005b1e: 3301 adds r3, #1 - 8005b20: 71fb strb r3, [r7, #7] + 8005aa0: 79fb ldrb r3, [r7, #7] + 8005aa2: 3301 adds r3, #1 + 8005aa4: 71fb strb r3, [r7, #7] W25QXX_Read((uint8_t*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//¶Á³öftinfo½á¹¹ÌåÊý¾Ý - 8005b22: 2224 movs r2, #36 ; 0x24 - 8005b24: f44f 0180 mov.w r1, #4194304 ; 0x400000 - 8005b28: 480d ldr r0, [pc, #52] ; (8005b60 ) - 8005b2a: f7fe fe71 bl 8004810 + 8005aa6: 2224 movs r2, #36 ; 0x24 + 8005aa8: f44f 0180 mov.w r1, #4194304 ; 0x400000 + 8005aac: 480d ldr r0, [pc, #52] ; (8005ae4 ) + 8005aae: f7fe fe71 bl 8004794 if(ftinfo.fontok==0XAA) - 8005b2e: 4b0c ldr r3, [pc, #48] ; (8005b60 ) - 8005b30: 781b ldrb r3, [r3, #0] - 8005b32: 2baa cmp r3, #170 ; 0xaa - 8005b34: d107 bne.n 8005b46 + 8005ab2: 4b0c ldr r3, [pc, #48] ; (8005ae4 ) + 8005ab4: 781b ldrb r3, [r3, #0] + 8005ab6: 2baa cmp r3, #170 ; 0xaa + 8005ab8: d107 bne.n 8005aca { ftinfo.f12addr=0x0042a929; - 8005b36: 4b0a ldr r3, [pc, #40] ; (8005b60 ) - 8005b38: 4a0a ldr r2, [pc, #40] ; (8005b64 ) - 8005b3a: 60da str r2, [r3, #12] + 8005aba: 4b0a ldr r3, [pc, #40] ; (8005ae4 ) + 8005abc: 4a0a ldr r2, [pc, #40] ; (8005ae8 ) + 8005abe: 60da str r2, [r3, #12] ftinfo.f16addr=0x004b6d89; - 8005b3c: 4b08 ldr r3, [pc, #32] ; (8005b60 ) - 8005b3e: 4a0a ldr r2, [pc, #40] ; (8005b68 ) - 8005b40: 615a str r2, [r3, #20] + 8005ac0: 4b08 ldr r3, [pc, #32] ; (8005ae4 ) + 8005ac2: 4a0a ldr r2, [pc, #40] ; (8005aec ) + 8005ac4: 615a str r2, [r3, #20] return 0; - 8005b42: 2300 movs r3, #0 - 8005b44: e008 b.n 8005b58 + 8005ac6: 2300 movs r3, #0 + 8005ac8: e008 b.n 8005adc while(t<10)//Á¬Ðø¶ÁÈ¡10´Î,¶¼ÊÇ´íÎó,˵Ã÷ȷʵÊÇÓÐÎÊÌâ,µÃ¸üÐÂ×Ö¿âÁË - 8005b46: 79fb ldrb r3, [r7, #7] - 8005b48: 2b09 cmp r3, #9 - 8005b4a: d9e7 bls.n 8005b1c + 8005aca: 79fb ldrb r3, [r7, #7] + 8005acc: 2b09 cmp r3, #9 + 8005ace: d9e7 bls.n 8005aa0 } } if(ftinfo.fontok!=0XAA)return 1; - 8005b4c: 4b04 ldr r3, [pc, #16] ; (8005b60 ) - 8005b4e: 781b ldrb r3, [r3, #0] - 8005b50: 2baa cmp r3, #170 ; 0xaa - 8005b52: d001 beq.n 8005b58 - 8005b54: 2301 movs r3, #1 - 8005b56: e7ff b.n 8005b58 + 8005ad0: 4b04 ldr r3, [pc, #16] ; (8005ae4 ) + 8005ad2: 781b ldrb r3, [r3, #0] + 8005ad4: 2baa cmp r3, #170 ; 0xaa + 8005ad6: d001 beq.n 8005adc + 8005ad8: 2301 movs r3, #1 + 8005ada: e7ff b.n 8005adc } - 8005b58: 4618 mov r0, r3 - 8005b5a: 3708 adds r7, #8 - 8005b5c: 46bd mov sp, r7 - 8005b5e: bd80 pop {r7, pc} - 8005b60: 2000082c .word 0x2000082c - 8005b64: 0042a929 .word 0x0042a929 - 8005b68: 004b6d89 .word 0x004b6d89 + 8005adc: 4618 mov r0, r3 + 8005ade: 3708 adds r7, #8 + 8005ae0: 46bd mov sp, r7 + 8005ae2: bd80 pop {r7, pc} + 8005ae4: 200007bc .word 0x200007bc + 8005ae8: 0042a929 .word 0x0042a929 + 8005aec: 004b6d89 .word 0x004b6d89 -08005b6c : +08005af0 : //´Ó×Ö¿âÖвéÕÒ³ö×ÖÄ£ //code ×Ö·û´®µÄ¿ªÊ¼µØÖ·,GBKÂë //mat Êý¾Ý´æ·ÅµØÖ· (size/8+((size%8)?1:0))*(size) bytes´óС //size:×ÖÌå´óС void Get_HzMat(unsigned char *code,unsigned char *mat,uint8_t size) { - 8005b6c: b580 push {r7, lr} - 8005b6e: b086 sub sp, #24 - 8005b70: af00 add r7, sp, #0 - 8005b72: 60f8 str r0, [r7, #12] - 8005b74: 60b9 str r1, [r7, #8] - 8005b76: 4613 mov r3, r2 - 8005b78: 71fb strb r3, [r7, #7] + 8005af0: b580 push {r7, lr} + 8005af2: b086 sub sp, #24 + 8005af4: af00 add r7, sp, #0 + 8005af6: 60f8 str r0, [r7, #12] + 8005af8: 60b9 str r1, [r7, #8] + 8005afa: 4613 mov r3, r2 + 8005afc: 71fb strb r3, [r7, #7] unsigned char qh,ql; unsigned char i; unsigned long foffset; uint8_t csize=(size/8+((size%8)?1:0))*(size);//µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý - 8005b7a: 79fb ldrb r3, [r7, #7] - 8005b7c: 08db lsrs r3, r3, #3 - 8005b7e: b2db uxtb r3, r3 - 8005b80: 461a mov r2, r3 - 8005b82: 79fb ldrb r3, [r7, #7] - 8005b84: f003 0307 and.w r3, r3, #7 - 8005b88: b2db uxtb r3, r3 - 8005b8a: 2b00 cmp r3, #0 - 8005b8c: bf14 ite ne - 8005b8e: 2301 movne r3, #1 - 8005b90: 2300 moveq r3, #0 - 8005b92: b2db uxtb r3, r3 - 8005b94: 4413 add r3, r2 - 8005b96: b2db uxtb r3, r3 - 8005b98: 79fa ldrb r2, [r7, #7] - 8005b9a: fb02 f303 mul.w r3, r2, r3 - 8005b9e: 757b strb r3, [r7, #21] + 8005afe: 79fb ldrb r3, [r7, #7] + 8005b00: 08db lsrs r3, r3, #3 + 8005b02: b2db uxtb r3, r3 + 8005b04: 461a mov r2, r3 + 8005b06: 79fb ldrb r3, [r7, #7] + 8005b08: f003 0307 and.w r3, r3, #7 + 8005b0c: b2db uxtb r3, r3 + 8005b0e: 2b00 cmp r3, #0 + 8005b10: bf14 ite ne + 8005b12: 2301 movne r3, #1 + 8005b14: 2300 moveq r3, #0 + 8005b16: b2db uxtb r3, r3 + 8005b18: 4413 add r3, r2 + 8005b1a: b2db uxtb r3, r3 + 8005b1c: 79fa ldrb r2, [r7, #7] + 8005b1e: fb02 f303 mul.w r3, r2, r3 + 8005b22: 757b strb r3, [r7, #21] qh=*code; - 8005ba0: 68fb ldr r3, [r7, #12] - 8005ba2: 781b ldrb r3, [r3, #0] - 8005ba4: 753b strb r3, [r7, #20] + 8005b24: 68fb ldr r3, [r7, #12] + 8005b26: 781b ldrb r3, [r3, #0] + 8005b28: 753b strb r3, [r7, #20] ql=*(++code); - 8005ba6: 68fb ldr r3, [r7, #12] - 8005ba8: 3301 adds r3, #1 - 8005baa: 60fb str r3, [r7, #12] - 8005bac: 68fb ldr r3, [r7, #12] - 8005bae: 781b ldrb r3, [r3, #0] - 8005bb0: 75fb strb r3, [r7, #23] + 8005b2a: 68fb ldr r3, [r7, #12] + 8005b2c: 3301 adds r3, #1 + 8005b2e: 60fb str r3, [r7, #12] + 8005b30: 68fb ldr r3, [r7, #12] + 8005b32: 781b ldrb r3, [r3, #0] + 8005b34: 75fb strb r3, [r7, #23] if(qh<0x81||ql<0x40||ql==0xff||qh==0xff)//·Ç ³£Óúº×Ö - 8005bb2: 7d3b ldrb r3, [r7, #20] - 8005bb4: 2b80 cmp r3, #128 ; 0x80 - 8005bb6: d908 bls.n 8005bca - 8005bb8: 7dfb ldrb r3, [r7, #23] - 8005bba: 2b3f cmp r3, #63 ; 0x3f - 8005bbc: d905 bls.n 8005bca - 8005bbe: 7dfb ldrb r3, [r7, #23] - 8005bc0: 2bff cmp r3, #255 ; 0xff - 8005bc2: d002 beq.n 8005bca - 8005bc4: 7d3b ldrb r3, [r7, #20] - 8005bc6: 2bff cmp r3, #255 ; 0xff - 8005bc8: d10f bne.n 8005bea + 8005b36: 7d3b ldrb r3, [r7, #20] + 8005b38: 2b80 cmp r3, #128 ; 0x80 + 8005b3a: d908 bls.n 8005b4e + 8005b3c: 7dfb ldrb r3, [r7, #23] + 8005b3e: 2b3f cmp r3, #63 ; 0x3f + 8005b40: d905 bls.n 8005b4e + 8005b42: 7dfb ldrb r3, [r7, #23] + 8005b44: 2bff cmp r3, #255 ; 0xff + 8005b46: d002 beq.n 8005b4e + 8005b48: 7d3b ldrb r3, [r7, #20] + 8005b4a: 2bff cmp r3, #255 ; 0xff + 8005b4c: d10f bne.n 8005b6e { for(i=0;i - 8005bd0: 68bb ldr r3, [r7, #8] - 8005bd2: 1c5a adds r2, r3, #1 - 8005bd4: 60ba str r2, [r7, #8] - 8005bd6: 2200 movs r2, #0 - 8005bd8: 701a strb r2, [r3, #0] - 8005bda: 7dbb ldrb r3, [r7, #22] - 8005bdc: 3301 adds r3, #1 - 8005bde: 75bb strb r3, [r7, #22] - 8005be0: 7dba ldrb r2, [r7, #22] - 8005be2: 7d7b ldrb r3, [r7, #21] - 8005be4: 429a cmp r2, r3 - 8005be6: d3f3 bcc.n 8005bd0 + 8005b4e: 2300 movs r3, #0 + 8005b50: 75bb strb r3, [r7, #22] + 8005b52: e007 b.n 8005b64 + 8005b54: 68bb ldr r3, [r7, #8] + 8005b56: 1c5a adds r2, r3, #1 + 8005b58: 60ba str r2, [r7, #8] + 8005b5a: 2200 movs r2, #0 + 8005b5c: 701a strb r2, [r3, #0] + 8005b5e: 7dbb ldrb r3, [r7, #22] + 8005b60: 3301 adds r3, #1 + 8005b62: 75bb strb r3, [r7, #22] + 8005b64: 7dba ldrb r2, [r7, #22] + 8005b66: 7d7b ldrb r3, [r7, #21] + 8005b68: 429a cmp r2, r3 + 8005b6a: d3f3 bcc.n 8005b54 return; //½áÊø·ÃÎÊ - 8005be8: e041 b.n 8005c6e + 8005b6c: e041 b.n 8005bf2 } if(ql<0x7f)ql-=0x40;//×¢Òâ! - 8005bea: 7dfb ldrb r3, [r7, #23] - 8005bec: 2b7e cmp r3, #126 ; 0x7e - 8005bee: d803 bhi.n 8005bf8 - 8005bf0: 7dfb ldrb r3, [r7, #23] - 8005bf2: 3b40 subs r3, #64 ; 0x40 - 8005bf4: 75fb strb r3, [r7, #23] - 8005bf6: e002 b.n 8005bfe + 8005b6e: 7dfb ldrb r3, [r7, #23] + 8005b70: 2b7e cmp r3, #126 ; 0x7e + 8005b72: d803 bhi.n 8005b7c + 8005b74: 7dfb ldrb r3, [r7, #23] + 8005b76: 3b40 subs r3, #64 ; 0x40 + 8005b78: 75fb strb r3, [r7, #23] + 8005b7a: e002 b.n 8005b82 else ql-=0x41; - 8005bf8: 7dfb ldrb r3, [r7, #23] - 8005bfa: 3b41 subs r3, #65 ; 0x41 - 8005bfc: 75fb strb r3, [r7, #23] + 8005b7c: 7dfb ldrb r3, [r7, #23] + 8005b7e: 3b41 subs r3, #65 ; 0x41 + 8005b80: 75fb strb r3, [r7, #23] qh-=0x81; - 8005bfe: 7d3b ldrb r3, [r7, #20] - 8005c00: 337f adds r3, #127 ; 0x7f - 8005c02: 753b strb r3, [r7, #20] + 8005b82: 7d3b ldrb r3, [r7, #20] + 8005b84: 337f adds r3, #127 ; 0x7f + 8005b86: 753b strb r3, [r7, #20] foffset=((unsigned long)190*qh+ql)*csize; //µÃµ½×Ö¿âÖеÄ×Ö½ÚÆ«ÒÆÁ¿ - 8005c04: 7d3b ldrb r3, [r7, #20] - 8005c06: 22be movs r2, #190 ; 0xbe - 8005c08: fb02 f203 mul.w r2, r2, r3 - 8005c0c: 7dfb ldrb r3, [r7, #23] - 8005c0e: 4413 add r3, r2 - 8005c10: 7d7a ldrb r2, [r7, #21] - 8005c12: fb02 f303 mul.w r3, r2, r3 - 8005c16: 613b str r3, [r7, #16] + 8005b88: 7d3b ldrb r3, [r7, #20] + 8005b8a: 22be movs r2, #190 ; 0xbe + 8005b8c: fb02 f203 mul.w r2, r2, r3 + 8005b90: 7dfb ldrb r3, [r7, #23] + 8005b92: 4413 add r3, r2 + 8005b94: 7d7a ldrb r2, [r7, #21] + 8005b96: fb02 f303 mul.w r3, r2, r3 + 8005b9a: 613b str r3, [r7, #16] switch(size) - 8005c18: 79fb ldrb r3, [r7, #7] - 8005c1a: 2b18 cmp r3, #24 - 8005c1c: d01c beq.n 8005c58 - 8005c1e: 2b18 cmp r3, #24 - 8005c20: dc25 bgt.n 8005c6e - 8005c22: 2b0c cmp r3, #12 - 8005c24: d002 beq.n 8005c2c - 8005c26: 2b10 cmp r3, #16 - 8005c28: d00b beq.n 8005c42 - 8005c2a: e020 b.n 8005c6e + 8005b9c: 79fb ldrb r3, [r7, #7] + 8005b9e: 2b18 cmp r3, #24 + 8005ba0: d01c beq.n 8005bdc + 8005ba2: 2b18 cmp r3, #24 + 8005ba4: dc25 bgt.n 8005bf2 + 8005ba6: 2b0c cmp r3, #12 + 8005ba8: d002 beq.n 8005bb0 + 8005baa: 2b10 cmp r3, #16 + 8005bac: d00b beq.n 8005bc6 + 8005bae: e020 b.n 8005bf2 { case 12: W25QXX_Read(mat,foffset+ftinfo.f12addr,csize); - 8005c2c: 4b11 ldr r3, [pc, #68] ; (8005c74 ) - 8005c2e: 68da ldr r2, [r3, #12] - 8005c30: 693b ldr r3, [r7, #16] - 8005c32: 4413 add r3, r2 - 8005c34: 7d7a ldrb r2, [r7, #21] - 8005c36: b292 uxth r2, r2 - 8005c38: 4619 mov r1, r3 - 8005c3a: 68b8 ldr r0, [r7, #8] - 8005c3c: f7fe fde8 bl 8004810 + 8005bb0: 4b11 ldr r3, [pc, #68] ; (8005bf8 ) + 8005bb2: 68da ldr r2, [r3, #12] + 8005bb4: 693b ldr r3, [r7, #16] + 8005bb6: 4413 add r3, r2 + 8005bb8: 7d7a ldrb r2, [r7, #21] + 8005bba: b292 uxth r2, r2 + 8005bbc: 4619 mov r1, r3 + 8005bbe: 68b8 ldr r0, [r7, #8] + 8005bc0: f7fe fde8 bl 8004794 break; - 8005c40: e015 b.n 8005c6e + 8005bc4: e015 b.n 8005bf2 case 16: W25QXX_Read(mat,foffset+ftinfo.f16addr,csize); - 8005c42: 4b0c ldr r3, [pc, #48] ; (8005c74 ) - 8005c44: 695a ldr r2, [r3, #20] - 8005c46: 693b ldr r3, [r7, #16] - 8005c48: 4413 add r3, r2 - 8005c4a: 7d7a ldrb r2, [r7, #21] - 8005c4c: b292 uxth r2, r2 - 8005c4e: 4619 mov r1, r3 - 8005c50: 68b8 ldr r0, [r7, #8] - 8005c52: f7fe fddd bl 8004810 + 8005bc6: 4b0c ldr r3, [pc, #48] ; (8005bf8 ) + 8005bc8: 695a ldr r2, [r3, #20] + 8005bca: 693b ldr r3, [r7, #16] + 8005bcc: 4413 add r3, r2 + 8005bce: 7d7a ldrb r2, [r7, #21] + 8005bd0: b292 uxth r2, r2 + 8005bd2: 4619 mov r1, r3 + 8005bd4: 68b8 ldr r0, [r7, #8] + 8005bd6: f7fe fddd bl 8004794 break; - 8005c56: e00a b.n 8005c6e + 8005bda: e00a b.n 8005bf2 case 24: W25QXX_Read(mat,foffset+ftinfo.f24addr,csize); - 8005c58: 4b06 ldr r3, [pc, #24] ; (8005c74 ) - 8005c5a: 69da ldr r2, [r3, #28] - 8005c5c: 693b ldr r3, [r7, #16] - 8005c5e: 4413 add r3, r2 - 8005c60: 7d7a ldrb r2, [r7, #21] - 8005c62: b292 uxth r2, r2 - 8005c64: 4619 mov r1, r3 - 8005c66: 68b8 ldr r0, [r7, #8] - 8005c68: f7fe fdd2 bl 8004810 + 8005bdc: 4b06 ldr r3, [pc, #24] ; (8005bf8 ) + 8005bde: 69da ldr r2, [r3, #28] + 8005be0: 693b ldr r3, [r7, #16] + 8005be2: 4413 add r3, r2 + 8005be4: 7d7a ldrb r2, [r7, #21] + 8005be6: b292 uxth r2, r2 + 8005be8: 4619 mov r1, r3 + 8005bea: 68b8 ldr r0, [r7, #8] + 8005bec: f7fe fdd2 bl 8004794 break; - 8005c6c: bf00 nop + 8005bf0: bf00 nop } } - 8005c6e: 3718 adds r7, #24 - 8005c70: 46bd mov sp, r7 - 8005c72: bd80 pop {r7, pc} - 8005c74: 2000082c .word 0x2000082c + 8005bf2: 3718 adds r7, #24 + 8005bf4: 46bd mov sp, r7 + 8005bf6: bd80 pop {r7, pc} + 8005bf8: 200007bc .word 0x200007bc -08005c78 : +08005bfc : //x,y :ºº×ÖµÄ×ø±ê //font:ºº×ÖGBKÂë //size:×ÖÌå´óС //mode:0,Õý³£ÏÔʾ,1,µþ¼ÓÏÔʾ void Show_Font(uint16_t x,uint16_t y,uint8_t *font,uint8_t size,uint16_t bg,uint16_t color) { - 8005c78: b580 push {r7, lr} - 8005c7a: b098 sub sp, #96 ; 0x60 - 8005c7c: af00 add r7, sp, #0 - 8005c7e: 60ba str r2, [r7, #8] - 8005c80: 461a mov r2, r3 - 8005c82: 4603 mov r3, r0 - 8005c84: 81fb strh r3, [r7, #14] - 8005c86: 460b mov r3, r1 - 8005c88: 81bb strh r3, [r7, #12] - 8005c8a: 4613 mov r3, r2 - 8005c8c: 71fb strb r3, [r7, #7] + 8005bfc: b580 push {r7, lr} + 8005bfe: b098 sub sp, #96 ; 0x60 + 8005c00: af00 add r7, sp, #0 + 8005c02: 60ba str r2, [r7, #8] + 8005c04: 461a mov r2, r3 + 8005c06: 4603 mov r3, r0 + 8005c08: 81fb strh r3, [r7, #14] + 8005c0a: 460b mov r3, r1 + 8005c0c: 81bb strh r3, [r7, #12] + 8005c0e: 4613 mov r3, r2 + 8005c10: 71fb strb r3, [r7, #7] uint8_t temp,t,t1; uint16_t y0=y; - 8005c8e: 89bb ldrh r3, [r7, #12] - 8005c90: f8a7 305a strh.w r3, [r7, #90] ; 0x5a + 8005c12: 89bb ldrh r3, [r7, #12] + 8005c14: f8a7 305a strh.w r3, [r7, #90] ; 0x5a uint8_t dzk[72]; uint8_t csize=(size/8+((size%8)?1:0))*(size);//µÃµ½×ÖÌåÒ»¸ö×Ö·û¶ÔÓ¦µãÕó¼¯ËùÕ¼µÄ×Ö½ÚÊý - 8005c94: 79fb ldrb r3, [r7, #7] - 8005c96: 08db lsrs r3, r3, #3 - 8005c98: b2db uxtb r3, r3 - 8005c9a: 461a mov r2, r3 - 8005c9c: 79fb ldrb r3, [r7, #7] - 8005c9e: f003 0307 and.w r3, r3, #7 - 8005ca2: b2db uxtb r3, r3 - 8005ca4: 2b00 cmp r3, #0 - 8005ca6: bf14 ite ne - 8005ca8: 2301 movne r3, #1 - 8005caa: 2300 moveq r3, #0 - 8005cac: b2db uxtb r3, r3 - 8005cae: 4413 add r3, r2 - 8005cb0: b2db uxtb r3, r3 - 8005cb2: 79fa ldrb r2, [r7, #7] - 8005cb4: fb02 f303 mul.w r3, r2, r3 - 8005cb8: f887 3059 strb.w r3, [r7, #89] ; 0x59 + 8005c18: 79fb ldrb r3, [r7, #7] + 8005c1a: 08db lsrs r3, r3, #3 + 8005c1c: b2db uxtb r3, r3 + 8005c1e: 461a mov r2, r3 + 8005c20: 79fb ldrb r3, [r7, #7] + 8005c22: f003 0307 and.w r3, r3, #7 + 8005c26: b2db uxtb r3, r3 + 8005c28: 2b00 cmp r3, #0 + 8005c2a: bf14 ite ne + 8005c2c: 2301 movne r3, #1 + 8005c2e: 2300 moveq r3, #0 + 8005c30: b2db uxtb r3, r3 + 8005c32: 4413 add r3, r2 + 8005c34: b2db uxtb r3, r3 + 8005c36: 79fa ldrb r2, [r7, #7] + 8005c38: fb02 f303 mul.w r3, r2, r3 + 8005c3c: f887 3059 strb.w r3, [r7, #89] ; 0x59 if(size!=12&&size!=16)return; //²»Ö§³ÖµÄsize - 8005cbc: 79fb ldrb r3, [r7, #7] - 8005cbe: 2b0c cmp r3, #12 - 8005cc0: d002 beq.n 8005cc8 - 8005cc2: 79fb ldrb r3, [r7, #7] - 8005cc4: 2b10 cmp r3, #16 - 8005cc6: d15b bne.n 8005d80 + 8005c40: 79fb ldrb r3, [r7, #7] + 8005c42: 2b0c cmp r3, #12 + 8005c44: d002 beq.n 8005c4c + 8005c46: 79fb ldrb r3, [r7, #7] + 8005c48: 2b10 cmp r3, #16 + 8005c4a: d15b bne.n 8005d04 Get_HzMat(font,dzk,size); //µÃµ½ÏàÓ¦´óСµÄµãÕóÊý¾Ý - 8005cc8: 79fa ldrb r2, [r7, #7] - 8005cca: f107 0310 add.w r3, r7, #16 - 8005cce: 4619 mov r1, r3 - 8005cd0: 68b8 ldr r0, [r7, #8] - 8005cd2: f7ff ff4b bl 8005b6c + 8005c4c: 79fa ldrb r2, [r7, #7] + 8005c4e: f107 0310 add.w r3, r7, #16 + 8005c52: 4619 mov r1, r3 + 8005c54: 68b8 ldr r0, [r7, #8] + 8005c56: f7ff ff4b bl 8005af0 for(t=0;t + 8005c5a: 2300 movs r3, #0 + 8005c5c: f887 305e strb.w r3, [r7, #94] ; 0x5e + 8005c60: e049 b.n 8005cf6 { temp=dzk[t]; //µÃµ½µãÕóÊý¾Ý - 8005cde: f897 305e ldrb.w r3, [r7, #94] ; 0x5e - 8005ce2: f107 0260 add.w r2, r7, #96 ; 0x60 - 8005ce6: 4413 add r3, r2 - 8005ce8: f813 3c50 ldrb.w r3, [r3, #-80] - 8005cec: f887 305f strb.w r3, [r7, #95] ; 0x5f + 8005c62: f897 305e ldrb.w r3, [r7, #94] ; 0x5e + 8005c66: f107 0260 add.w r2, r7, #96 ; 0x60 + 8005c6a: 4413 add r3, r2 + 8005c6c: f813 3c50 ldrb.w r3, [r3, #-80] + 8005c70: f887 305f strb.w r3, [r7, #95] ; 0x5f for(t1=0;t1<8;t1++) - 8005cf0: 2300 movs r3, #0 - 8005cf2: f887 305d strb.w r3, [r7, #93] ; 0x5d - 8005cf6: e033 b.n 8005d60 + 8005c74: 2300 movs r3, #0 + 8005c76: f887 305d strb.w r3, [r7, #93] ; 0x5d + 8005c7a: e033 b.n 8005ce4 { if(temp&0x80){LCD_set_dot(x,y,color);}else{if(bg!=color){LCD_set_dot(x,y,bg);}} - 8005cf8: f997 305f ldrsb.w r3, [r7, #95] ; 0x5f - 8005cfc: 2b00 cmp r3, #0 - 8005cfe: da07 bge.n 8005d10 - 8005d00: f8b7 206c ldrh.w r2, [r7, #108] ; 0x6c - 8005d04: 89b9 ldrh r1, [r7, #12] - 8005d06: 89fb ldrh r3, [r7, #14] - 8005d08: 4618 mov r0, r3 - 8005d0a: f7ff fe8f bl 8005a2c - 8005d0e: e00c b.n 8005d2a - 8005d10: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 - 8005d14: f8b7 306c ldrh.w r3, [r7, #108] ; 0x6c - 8005d18: 429a cmp r2, r3 - 8005d1a: d006 beq.n 8005d2a - 8005d1c: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 - 8005d20: 89b9 ldrh r1, [r7, #12] - 8005d22: 89fb ldrh r3, [r7, #14] - 8005d24: 4618 mov r0, r3 - 8005d26: f7ff fe81 bl 8005a2c + 8005c7c: f997 305f ldrsb.w r3, [r7, #95] ; 0x5f + 8005c80: 2b00 cmp r3, #0 + 8005c82: da07 bge.n 8005c94 + 8005c84: f8b7 206c ldrh.w r2, [r7, #108] ; 0x6c + 8005c88: 89b9 ldrh r1, [r7, #12] + 8005c8a: 89fb ldrh r3, [r7, #14] + 8005c8c: 4618 mov r0, r3 + 8005c8e: f7ff fe8f bl 80059b0 + 8005c92: e00c b.n 8005cae + 8005c94: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 + 8005c98: f8b7 306c ldrh.w r3, [r7, #108] ; 0x6c + 8005c9c: 429a cmp r2, r3 + 8005c9e: d006 beq.n 8005cae + 8005ca0: f8b7 2068 ldrh.w r2, [r7, #104] ; 0x68 + 8005ca4: 89b9 ldrh r1, [r7, #12] + 8005ca6: 89fb ldrh r3, [r7, #14] + 8005ca8: 4618 mov r0, r3 + 8005caa: f7ff fe81 bl 80059b0 temp<<=1; - 8005d2a: f897 305f ldrb.w r3, [r7, #95] ; 0x5f - 8005d2e: 005b lsls r3, r3, #1 - 8005d30: f887 305f strb.w r3, [r7, #95] ; 0x5f + 8005cae: f897 305f ldrb.w r3, [r7, #95] ; 0x5f + 8005cb2: 005b lsls r3, r3, #1 + 8005cb4: f887 305f strb.w r3, [r7, #95] ; 0x5f y++; - 8005d34: 89bb ldrh r3, [r7, #12] - 8005d36: 3301 adds r3, #1 - 8005d38: 81bb strh r3, [r7, #12] + 8005cb8: 89bb ldrh r3, [r7, #12] + 8005cba: 3301 adds r3, #1 + 8005cbc: 81bb strh r3, [r7, #12] if((y-y0)==size) - 8005d3a: 89ba ldrh r2, [r7, #12] - 8005d3c: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a - 8005d40: 1ad2 subs r2, r2, r3 - 8005d42: 79fb ldrb r3, [r7, #7] - 8005d44: 429a cmp r2, r3 - 8005d46: d106 bne.n 8005d56 + 8005cbe: 89ba ldrh r2, [r7, #12] + 8005cc0: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a + 8005cc4: 1ad2 subs r2, r2, r3 + 8005cc6: 79fb ldrb r3, [r7, #7] + 8005cc8: 429a cmp r2, r3 + 8005cca: d106 bne.n 8005cda { y=y0; - 8005d48: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a - 8005d4c: 81bb strh r3, [r7, #12] + 8005ccc: f8b7 305a ldrh.w r3, [r7, #90] ; 0x5a + 8005cd0: 81bb strh r3, [r7, #12] x++; - 8005d4e: 89fb ldrh r3, [r7, #14] - 8005d50: 3301 adds r3, #1 - 8005d52: 81fb strh r3, [r7, #14] + 8005cd2: 89fb ldrh r3, [r7, #14] + 8005cd4: 3301 adds r3, #1 + 8005cd6: 81fb strh r3, [r7, #14] break; - 8005d54: e008 b.n 8005d68 + 8005cd8: e008 b.n 8005cec for(t1=0;t1<8;t1++) - 8005d56: f897 305d ldrb.w r3, [r7, #93] ; 0x5d - 8005d5a: 3301 adds r3, #1 - 8005d5c: f887 305d strb.w r3, [r7, #93] ; 0x5d - 8005d60: f897 305d ldrb.w r3, [r7, #93] ; 0x5d - 8005d64: 2b07 cmp r3, #7 - 8005d66: d9c7 bls.n 8005cf8 + 8005cda: f897 305d ldrb.w r3, [r7, #93] ; 0x5d + 8005cde: 3301 adds r3, #1 + 8005ce0: f887 305d strb.w r3, [r7, #93] ; 0x5d + 8005ce4: f897 305d ldrb.w r3, [r7, #93] ; 0x5d + 8005ce8: 2b07 cmp r3, #7 + 8005cea: d9c7 bls.n 8005c7c for(t=0;t - 8005d7e: e000 b.n 8005d82 + 8005cec: f897 305e ldrb.w r3, [r7, #94] ; 0x5e + 8005cf0: 3301 adds r3, #1 + 8005cf2: f887 305e strb.w r3, [r7, #94] ; 0x5e + 8005cf6: f897 205e ldrb.w r2, [r7, #94] ; 0x5e + 8005cfa: f897 3059 ldrb.w r3, [r7, #89] ; 0x59 + 8005cfe: 429a cmp r2, r3 + 8005d00: d3af bcc.n 8005c62 + 8005d02: e000 b.n 8005d06 if(size!=12&&size!=16)return; //²»Ö§³ÖµÄsize - 8005d80: bf00 nop + 8005d04: bf00 nop } } } } - 8005d82: 3760 adds r7, #96 ; 0x60 - 8005d84: 46bd mov sp, r7 - 8005d86: bd80 pop {r7, pc} + 8005d06: 3760 adds r7, #96 ; 0x60 + 8005d08: 46bd mov sp, r7 + 8005d0a: bd80 pop {r7, pc} -08005d88 : +08005d0c : //num:ÒªÏÔʾµÄ×Ö·û:" "--->"~" //size:×ÖÌå´óС 12/16 //mode:µþ¼Ó·½Ê½(1)»¹ÊǷǵþ¼Ó·½Ê½(0) void LCD_ShowChar(uint16_t x,uint16_t y,uint8_t num,uint8_t size,uint16_t bg,uint16_t color) { - 8005d88: b590 push {r4, r7, lr} - 8005d8a: b085 sub sp, #20 - 8005d8c: af00 add r7, sp, #0 - 8005d8e: 4604 mov r4, r0 - 8005d90: 4608 mov r0, r1 - 8005d92: 4611 mov r1, r2 - 8005d94: 461a mov r2, r3 - 8005d96: 4623 mov r3, r4 - 8005d98: 80fb strh r3, [r7, #6] - 8005d9a: 4603 mov r3, r0 - 8005d9c: 80bb strh r3, [r7, #4] - 8005d9e: 460b mov r3, r1 - 8005da0: 70fb strb r3, [r7, #3] - 8005da2: 4613 mov r3, r2 - 8005da4: 70bb strb r3, [r7, #2] + 8005d0c: b590 push {r4, r7, lr} + 8005d0e: b085 sub sp, #20 + 8005d10: af00 add r7, sp, #0 + 8005d12: 4604 mov r4, r0 + 8005d14: 4608 mov r0, r1 + 8005d16: 4611 mov r1, r2 + 8005d18: 461a mov r2, r3 + 8005d1a: 4623 mov r3, r4 + 8005d1c: 80fb strh r3, [r7, #6] + 8005d1e: 4603 mov r3, r0 + 8005d20: 80bb strh r3, [r7, #4] + 8005d22: 460b mov r3, r1 + 8005d24: 70fb strb r3, [r7, #3] + 8005d26: 4613 mov r3, r2 + 8005d28: 70bb strb r3, [r7, #2] uint8_t temp,t1,t; uint16_t y0=y; - 8005da6: 88bb ldrh r3, [r7, #4] - 8005da8: 817b strh r3, [r7, #10] + 8005d2a: 88bb ldrh r3, [r7, #4] + 8005d2c: 817b strh r3, [r7, #10] //ÉèÖô°¿Ú num=num-' ';//µÃµ½Æ«ÒƺóµÄÖµ - 8005daa: 78fb ldrb r3, [r7, #3] - 8005dac: 3b20 subs r3, #32 - 8005dae: 70fb strb r3, [r7, #3] + 8005d2e: 78fb ldrb r3, [r7, #3] + 8005d30: 3b20 subs r3, #32 + 8005d32: 70fb strb r3, [r7, #3] for(t=0;t + 8005d34: 2300 movs r3, #0 + 8005d36: 737b strb r3, [r7, #13] + 8005d38: e055 b.n 8005de6 { if(size==12){temp=asc2_1206[num][t];} //µ÷ÓÃ1206×ÖÌå - 8005db6: 78bb ldrb r3, [r7, #2] - 8005db8: 2b0c cmp r3, #12 - 8005dba: d10b bne.n 8005dd4 - 8005dbc: 78fa ldrb r2, [r7, #3] - 8005dbe: 7b79 ldrb r1, [r7, #13] - 8005dc0: 482c ldr r0, [pc, #176] ; (8005e74 ) - 8005dc2: 4613 mov r3, r2 - 8005dc4: 005b lsls r3, r3, #1 - 8005dc6: 4413 add r3, r2 - 8005dc8: 009b lsls r3, r3, #2 - 8005dca: 4403 add r3, r0 - 8005dcc: 440b add r3, r1 - 8005dce: 781b ldrb r3, [r3, #0] - 8005dd0: 73fb strb r3, [r7, #15] - 8005dd2: e007 b.n 8005de4 + 8005d3a: 78bb ldrb r3, [r7, #2] + 8005d3c: 2b0c cmp r3, #12 + 8005d3e: d10b bne.n 8005d58 + 8005d40: 78fa ldrb r2, [r7, #3] + 8005d42: 7b79 ldrb r1, [r7, #13] + 8005d44: 482c ldr r0, [pc, #176] ; (8005df8 ) + 8005d46: 4613 mov r3, r2 + 8005d48: 005b lsls r3, r3, #1 + 8005d4a: 4413 add r3, r2 + 8005d4c: 009b lsls r3, r3, #2 + 8005d4e: 4403 add r3, r0 + 8005d50: 440b add r3, r1 + 8005d52: 781b ldrb r3, [r3, #0] + 8005d54: 73fb strb r3, [r7, #15] + 8005d56: e007 b.n 8005d68 else{ temp=asc2_1608[num][t]; } //µ÷ÓÃ1608×ÖÌå - 8005dd4: 78fa ldrb r2, [r7, #3] - 8005dd6: 7b7b ldrb r3, [r7, #13] - 8005dd8: 4927 ldr r1, [pc, #156] ; (8005e78 ) - 8005dda: 0112 lsls r2, r2, #4 - 8005ddc: 440a add r2, r1 - 8005dde: 4413 add r3, r2 - 8005de0: 781b ldrb r3, [r3, #0] - 8005de2: 73fb strb r3, [r7, #15] + 8005d58: 78fa ldrb r2, [r7, #3] + 8005d5a: 7b7b ldrb r3, [r7, #13] + 8005d5c: 4927 ldr r1, [pc, #156] ; (8005dfc ) + 8005d5e: 0112 lsls r2, r2, #4 + 8005d60: 440a add r2, r1 + 8005d62: 4413 add r3, r2 + 8005d64: 781b ldrb r3, [r3, #0] + 8005d66: 73fb strb r3, [r7, #15] for(t1=0;t1<8;t1++) - 8005de4: 2300 movs r3, #0 - 8005de6: 73bb strb r3, [r7, #14] - 8005de8: e033 b.n 8005e52 + 8005d68: 2300 movs r3, #0 + 8005d6a: 73bb strb r3, [r7, #14] + 8005d6c: e033 b.n 8005dd6 { if(temp&0x80){LCD_set_dot(x,y,color);}else{if(bg!=color){LCD_set_dot(x,y,bg);}} - 8005dea: f997 300f ldrsb.w r3, [r7, #15] - 8005dee: 2b00 cmp r3, #0 - 8005df0: da06 bge.n 8005e00 - 8005df2: 8cba ldrh r2, [r7, #36] ; 0x24 - 8005df4: 88b9 ldrh r1, [r7, #4] - 8005df6: 88fb ldrh r3, [r7, #6] - 8005df8: 4618 mov r0, r3 - 8005dfa: f7ff fe17 bl 8005a2c - 8005dfe: e009 b.n 8005e14 - 8005e00: 8c3a ldrh r2, [r7, #32] - 8005e02: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005e04: 429a cmp r2, r3 - 8005e06: d005 beq.n 8005e14 - 8005e08: 8c3a ldrh r2, [r7, #32] - 8005e0a: 88b9 ldrh r1, [r7, #4] - 8005e0c: 88fb ldrh r3, [r7, #6] - 8005e0e: 4618 mov r0, r3 - 8005e10: f7ff fe0c bl 8005a2c + 8005d6e: f997 300f ldrsb.w r3, [r7, #15] + 8005d72: 2b00 cmp r3, #0 + 8005d74: da06 bge.n 8005d84 + 8005d76: 8cba ldrh r2, [r7, #36] ; 0x24 + 8005d78: 88b9 ldrh r1, [r7, #4] + 8005d7a: 88fb ldrh r3, [r7, #6] + 8005d7c: 4618 mov r0, r3 + 8005d7e: f7ff fe17 bl 80059b0 + 8005d82: e009 b.n 8005d98 + 8005d84: 8c3a ldrh r2, [r7, #32] + 8005d86: 8cbb ldrh r3, [r7, #36] ; 0x24 + 8005d88: 429a cmp r2, r3 + 8005d8a: d005 beq.n 8005d98 + 8005d8c: 8c3a ldrh r2, [r7, #32] + 8005d8e: 88b9 ldrh r1, [r7, #4] + 8005d90: 88fb ldrh r3, [r7, #6] + 8005d92: 4618 mov r0, r3 + 8005d94: f7ff fe0c bl 80059b0 temp<<=1; - 8005e14: 7bfb ldrb r3, [r7, #15] - 8005e16: 005b lsls r3, r3, #1 - 8005e18: 73fb strb r3, [r7, #15] + 8005d98: 7bfb ldrb r3, [r7, #15] + 8005d9a: 005b lsls r3, r3, #1 + 8005d9c: 73fb strb r3, [r7, #15] y++; - 8005e1a: 88bb ldrh r3, [r7, #4] - 8005e1c: 3301 adds r3, #1 - 8005e1e: 80bb strh r3, [r7, #4] + 8005d9e: 88bb ldrh r3, [r7, #4] + 8005da0: 3301 adds r3, #1 + 8005da2: 80bb strh r3, [r7, #4] if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005e20: 4b16 ldr r3, [pc, #88] ; (8005e7c ) - 8005e22: 881b ldrh r3, [r3, #0] - 8005e24: 88fa ldrh r2, [r7, #6] - 8005e26: 429a cmp r2, r3 - 8005e28: d220 bcs.n 8005e6c + 8005da4: 4b16 ldr r3, [pc, #88] ; (8005e00 ) + 8005da6: 881b ldrh r3, [r3, #0] + 8005da8: 88fa ldrh r2, [r7, #6] + 8005daa: 429a cmp r2, r3 + 8005dac: d220 bcs.n 8005df0 if((y-y0)==size) - 8005e2a: 88ba ldrh r2, [r7, #4] - 8005e2c: 897b ldrh r3, [r7, #10] - 8005e2e: 1ad2 subs r2, r2, r3 - 8005e30: 78bb ldrb r3, [r7, #2] - 8005e32: 429a cmp r2, r3 - 8005e34: d10a bne.n 8005e4c + 8005dae: 88ba ldrh r2, [r7, #4] + 8005db0: 897b ldrh r3, [r7, #10] + 8005db2: 1ad2 subs r2, r2, r3 + 8005db4: 78bb ldrb r3, [r7, #2] + 8005db6: 429a cmp r2, r3 + 8005db8: d10a bne.n 8005dd0 { y=y0; - 8005e36: 897b ldrh r3, [r7, #10] - 8005e38: 80bb strh r3, [r7, #4] + 8005dba: 897b ldrh r3, [r7, #10] + 8005dbc: 80bb strh r3, [r7, #4] x++; - 8005e3a: 88fb ldrh r3, [r7, #6] - 8005e3c: 3301 adds r3, #1 - 8005e3e: 80fb strh r3, [r7, #6] + 8005dbe: 88fb ldrh r3, [r7, #6] + 8005dc0: 3301 adds r3, #1 + 8005dc2: 80fb strh r3, [r7, #6] if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005e40: 4b0e ldr r3, [pc, #56] ; (8005e7c ) - 8005e42: 881b ldrh r3, [r3, #0] - 8005e44: 88fa ldrh r2, [r7, #6] - 8005e46: 429a cmp r2, r3 - 8005e48: d307 bcc.n 8005e5a - 8005e4a: e010 b.n 8005e6e + 8005dc4: 4b0e ldr r3, [pc, #56] ; (8005e00 ) + 8005dc6: 881b ldrh r3, [r3, #0] + 8005dc8: 88fa ldrh r2, [r7, #6] + 8005dca: 429a cmp r2, r3 + 8005dcc: d307 bcc.n 8005dde + 8005dce: e010 b.n 8005df2 for(t1=0;t1<8;t1++) - 8005e4c: 7bbb ldrb r3, [r7, #14] - 8005e4e: 3301 adds r3, #1 - 8005e50: 73bb strb r3, [r7, #14] - 8005e52: 7bbb ldrb r3, [r7, #14] - 8005e54: 2b07 cmp r3, #7 - 8005e56: d9c8 bls.n 8005dea - 8005e58: e000 b.n 8005e5c + 8005dd0: 7bbb ldrb r3, [r7, #14] + 8005dd2: 3301 adds r3, #1 + 8005dd4: 73bb strb r3, [r7, #14] + 8005dd6: 7bbb ldrb r3, [r7, #14] + 8005dd8: 2b07 cmp r3, #7 + 8005dda: d9c8 bls.n 8005d6e + 8005ddc: e000 b.n 8005de0 break; - 8005e5a: bf00 nop + 8005dde: bf00 nop for(t=0;t - 8005e6a: e000 b.n 8005e6e + 8005de0: 7b7b ldrb r3, [r7, #13] + 8005de2: 3301 adds r3, #1 + 8005de4: 737b strb r3, [r7, #13] + 8005de6: 7b7a ldrb r2, [r7, #13] + 8005de8: 78bb ldrb r3, [r7, #2] + 8005dea: 429a cmp r2, r3 + 8005dec: d3a5 bcc.n 8005d3a + 8005dee: e000 b.n 8005df2 if(x>=lcddev.width){return;}//³¬ÇøÓòÁË - 8005e6c: bf00 nop + 8005df0: bf00 nop } } } - 8005e6e: 3714 adds r7, #20 - 8005e70: 46bd mov sp, r7 - 8005e72: bd90 pop {r4, r7, pc} - 8005e74: 0800694c .word 0x0800694c - 8005e78: 08006dc0 .word 0x08006dc0 - 8005e7c: 20000820 .word 0x20000820 + 8005df2: 3714 adds r7, #20 + 8005df4: 46bd mov sp, r7 + 8005df6: bd90 pop {r4, r7, pc} + 8005df8: 08006048 .word 0x08006048 + 8005dfc: 080064bc .word 0x080064bc + 8005e00: 200007b0 .word 0x200007b0 -08005e80 : +08005e04 : //width,height:ÇøÓò´óС //size:×ÖÌå´óС //*p:×Ö·û´®ÆðʼµØÖ· void LCD_ShowString(uint16_t x,uint16_t y,uint8_t *p,uint8_t size,uint16_t bg,uint16_t color,uint16_t len) { - 8005e80: b590 push {r4, r7, lr} - 8005e82: b087 sub sp, #28 - 8005e84: af02 add r7, sp, #8 - 8005e86: 60ba str r2, [r7, #8] - 8005e88: 461a mov r2, r3 - 8005e8a: 4603 mov r3, r0 - 8005e8c: 81fb strh r3, [r7, #14] - 8005e8e: 460b mov r3, r1 - 8005e90: 81bb strh r3, [r7, #12] - 8005e92: 4613 mov r3, r2 - 8005e94: 71fb strb r3, [r7, #7] + 8005e04: b590 push {r4, r7, lr} + 8005e06: b087 sub sp, #28 + 8005e08: af02 add r7, sp, #8 + 8005e0a: 60ba str r2, [r7, #8] + 8005e0c: 461a mov r2, r3 + 8005e0e: 4603 mov r3, r0 + 8005e10: 81fb strh r3, [r7, #14] + 8005e12: 460b mov r3, r1 + 8005e14: 81bb strh r3, [r7, #12] + 8005e16: 4613 mov r3, r2 + 8005e18: 71fb strb r3, [r7, #7] while(len--) - 8005e96: e052 b.n 8005f3e + 8005e1a: e052 b.n 8005ec2 { if(x>=lcddev.width) - 8005e98: 4b2e ldr r3, [pc, #184] ; (8005f54 ) - 8005e9a: 881b ldrh r3, [r3, #0] - 8005e9c: 89fa ldrh r2, [r7, #14] - 8005e9e: 429a cmp r2, r3 - 8005ea0: d306 bcc.n 8005eb0 + 8005e1c: 4b2e ldr r3, [pc, #184] ; (8005ed8 ) + 8005e1e: 881b ldrh r3, [r3, #0] + 8005e20: 89fa ldrh r2, [r7, #14] + 8005e22: 429a cmp r2, r3 + 8005e24: d306 bcc.n 8005e34 { x=0; - 8005ea2: 2300 movs r3, #0 - 8005ea4: 81fb strh r3, [r7, #14] + 8005e26: 2300 movs r3, #0 + 8005e28: 81fb strh r3, [r7, #14] y+=size; - 8005ea6: 79fb ldrb r3, [r7, #7] - 8005ea8: b29a uxth r2, r3 - 8005eaa: 89bb ldrh r3, [r7, #12] - 8005eac: 4413 add r3, r2 - 8005eae: 81bb strh r3, [r7, #12] + 8005e2a: 79fb ldrb r3, [r7, #7] + 8005e2c: b29a uxth r2, r3 + 8005e2e: 89bb ldrh r3, [r7, #12] + 8005e30: 4413 add r3, r2 + 8005e32: 81bb strh r3, [r7, #12] } if(*p=='\0') - 8005eb0: 68bb ldr r3, [r7, #8] - 8005eb2: 781b ldrb r3, [r3, #0] - 8005eb4: 2b00 cmp r3, #0 - 8005eb6: d048 beq.n 8005f4a + 8005e34: 68bb ldr r3, [r7, #8] + 8005e36: 781b ldrb r3, [r3, #0] + 8005e38: 2b00 cmp r3, #0 + 8005e3a: d048 beq.n 8005ece { return; } if(*p=='\r') - 8005eb8: 68bb ldr r3, [r7, #8] - 8005eba: 781b ldrb r3, [r3, #0] - 8005ebc: 2b0d cmp r3, #13 - 8005ebe: d102 bne.n 8005ec6 + 8005e3c: 68bb ldr r3, [r7, #8] + 8005e3e: 781b ldrb r3, [r3, #0] + 8005e40: 2b0d cmp r3, #13 + 8005e42: d102 bne.n 8005e4a { p++; - 8005ec0: 68bb ldr r3, [r7, #8] - 8005ec2: 3301 adds r3, #1 - 8005ec4: 60bb str r3, [r7, #8] + 8005e44: 68bb ldr r3, [r7, #8] + 8005e46: 3301 adds r3, #1 + 8005e48: 60bb str r3, [r7, #8] } if(*p=='\n') - 8005ec6: 68bb ldr r3, [r7, #8] - 8005ec8: 781b ldrb r3, [r3, #0] - 8005eca: 2b0a cmp r3, #10 - 8005ecc: d109 bne.n 8005ee2 + 8005e4a: 68bb ldr r3, [r7, #8] + 8005e4c: 781b ldrb r3, [r3, #0] + 8005e4e: 2b0a cmp r3, #10 + 8005e50: d109 bne.n 8005e66 { x=0; - 8005ece: 2300 movs r3, #0 - 8005ed0: 81fb strh r3, [r7, #14] + 8005e52: 2300 movs r3, #0 + 8005e54: 81fb strh r3, [r7, #14] y+=size; - 8005ed2: 79fb ldrb r3, [r7, #7] - 8005ed4: b29a uxth r2, r3 - 8005ed6: 89bb ldrh r3, [r7, #12] - 8005ed8: 4413 add r3, r2 - 8005eda: 81bb strh r3, [r7, #12] + 8005e56: 79fb ldrb r3, [r7, #7] + 8005e58: b29a uxth r2, r3 + 8005e5a: 89bb ldrh r3, [r7, #12] + 8005e5c: 4413 add r3, r2 + 8005e5e: 81bb strh r3, [r7, #12] p++; - 8005edc: 68bb ldr r3, [r7, #8] - 8005ede: 3301 adds r3, #1 - 8005ee0: 60bb str r3, [r7, #8] + 8005e60: 68bb ldr r3, [r7, #8] + 8005e62: 3301 adds r3, #1 + 8005e64: 60bb str r3, [r7, #8] } if(*p<127) - 8005ee2: 68bb ldr r3, [r7, #8] - 8005ee4: 781b ldrb r3, [r3, #0] - 8005ee6: 2b7e cmp r3, #126 ; 0x7e - 8005ee8: d813 bhi.n 8005f12 + 8005e66: 68bb ldr r3, [r7, #8] + 8005e68: 781b ldrb r3, [r3, #0] + 8005e6a: 2b7e cmp r3, #126 ; 0x7e + 8005e6c: d813 bhi.n 8005e96 { LCD_ShowChar(x,y,*p,size,bg,color); - 8005eea: 68bb ldr r3, [r7, #8] - 8005eec: 781a ldrb r2, [r3, #0] - 8005eee: 79fc ldrb r4, [r7, #7] - 8005ef0: 89b9 ldrh r1, [r7, #12] - 8005ef2: 89f8 ldrh r0, [r7, #14] - 8005ef4: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005ef6: 9301 str r3, [sp, #4] - 8005ef8: 8c3b ldrh r3, [r7, #32] - 8005efa: 9300 str r3, [sp, #0] - 8005efc: 4623 mov r3, r4 - 8005efe: f7ff ff43 bl 8005d88 + 8005e6e: 68bb ldr r3, [r7, #8] + 8005e70: 781a ldrb r2, [r3, #0] + 8005e72: 79fc ldrb r4, [r7, #7] + 8005e74: 89b9 ldrh r1, [r7, #12] + 8005e76: 89f8 ldrh r0, [r7, #14] + 8005e78: 8cbb ldrh r3, [r7, #36] ; 0x24 + 8005e7a: 9301 str r3, [sp, #4] + 8005e7c: 8c3b ldrh r3, [r7, #32] + 8005e7e: 9300 str r3, [sp, #0] + 8005e80: 4623 mov r3, r4 + 8005e82: f7ff ff43 bl 8005d0c x+=(size/2); - 8005f02: 79fb ldrb r3, [r7, #7] - 8005f04: 085b lsrs r3, r3, #1 - 8005f06: b2db uxtb r3, r3 - 8005f08: b29a uxth r2, r3 - 8005f0a: 89fb ldrh r3, [r7, #14] - 8005f0c: 4413 add r3, r2 - 8005f0e: 81fb strh r3, [r7, #14] - 8005f10: e012 b.n 8005f38 + 8005e86: 79fb ldrb r3, [r7, #7] + 8005e88: 085b lsrs r3, r3, #1 + 8005e8a: b2db uxtb r3, r3 + 8005e8c: b29a uxth r2, r3 + 8005e8e: 89fb ldrh r3, [r7, #14] + 8005e90: 4413 add r3, r2 + 8005e92: 81fb strh r3, [r7, #14] + 8005e94: e012 b.n 8005ebc }else { Show_Font(x,y,p,size,bg,color); - 8005f12: 79fa ldrb r2, [r7, #7] - 8005f14: 89b9 ldrh r1, [r7, #12] - 8005f16: 89f8 ldrh r0, [r7, #14] - 8005f18: 8cbb ldrh r3, [r7, #36] ; 0x24 - 8005f1a: 9301 str r3, [sp, #4] - 8005f1c: 8c3b ldrh r3, [r7, #32] - 8005f1e: 9300 str r3, [sp, #0] - 8005f20: 4613 mov r3, r2 - 8005f22: 68ba ldr r2, [r7, #8] - 8005f24: f7ff fea8 bl 8005c78 + 8005e96: 79fa ldrb r2, [r7, #7] + 8005e98: 89b9 ldrh r1, [r7, #12] + 8005e9a: 89f8 ldrh r0, [r7, #14] + 8005e9c: 8cbb ldrh r3, [r7, #36] ; 0x24 + 8005e9e: 9301 str r3, [sp, #4] + 8005ea0: 8c3b ldrh r3, [r7, #32] + 8005ea2: 9300 str r3, [sp, #0] + 8005ea4: 4613 mov r3, r2 + 8005ea6: 68ba ldr r2, [r7, #8] + 8005ea8: f7ff fea8 bl 8005bfc p++; - 8005f28: 68bb ldr r3, [r7, #8] - 8005f2a: 3301 adds r3, #1 - 8005f2c: 60bb str r3, [r7, #8] + 8005eac: 68bb ldr r3, [r7, #8] + 8005eae: 3301 adds r3, #1 + 8005eb0: 60bb str r3, [r7, #8] x+=size; - 8005f2e: 79fb ldrb r3, [r7, #7] - 8005f30: b29a uxth r2, r3 - 8005f32: 89fb ldrh r3, [r7, #14] - 8005f34: 4413 add r3, r2 - 8005f36: 81fb strh r3, [r7, #14] + 8005eb2: 79fb ldrb r3, [r7, #7] + 8005eb4: b29a uxth r2, r3 + 8005eb6: 89fb ldrh r3, [r7, #14] + 8005eb8: 4413 add r3, r2 + 8005eba: 81fb strh r3, [r7, #14] } p++; - 8005f38: 68bb ldr r3, [r7, #8] - 8005f3a: 3301 adds r3, #1 - 8005f3c: 60bb str r3, [r7, #8] + 8005ebc: 68bb ldr r3, [r7, #8] + 8005ebe: 3301 adds r3, #1 + 8005ec0: 60bb str r3, [r7, #8] while(len--) - 8005f3e: 8d3b ldrh r3, [r7, #40] ; 0x28 - 8005f40: 1e5a subs r2, r3, #1 - 8005f42: 853a strh r2, [r7, #40] ; 0x28 - 8005f44: 2b00 cmp r3, #0 - 8005f46: d1a7 bne.n 8005e98 - 8005f48: e000 b.n 8005f4c + 8005ec2: 8d3b ldrh r3, [r7, #40] ; 0x28 + 8005ec4: 1e5a subs r2, r3, #1 + 8005ec6: 853a strh r2, [r7, #40] ; 0x28 + 8005ec8: 2b00 cmp r3, #0 + 8005eca: d1a7 bne.n 8005e1c + 8005ecc: e000 b.n 8005ed0 return; - 8005f4a: bf00 nop + 8005ece: bf00 nop } } - 8005f4c: 3714 adds r7, #20 - 8005f4e: 46bd mov sp, r7 - 8005f50: bd90 pop {r4, r7, pc} - 8005f52: bf00 nop - 8005f54: 20000820 .word 0x20000820 + 8005ed0: 3714 adds r7, #20 + 8005ed2: 46bd mov sp, r7 + 8005ed4: bd90 pop {r4, r7, pc} + 8005ed6: bf00 nop + 8005ed8: 200007b0 .word 0x200007b0 -08005f58 <__errno>: - 8005f58: 4b01 ldr r3, [pc, #4] ; (8005f60 <__errno+0x8>) - 8005f5a: 6818 ldr r0, [r3, #0] - 8005f5c: 4770 bx lr - 8005f5e: bf00 nop - 8005f60: 20000024 .word 0x20000024 +08005edc <__libc_init_array>: + 8005edc: b570 push {r4, r5, r6, lr} + 8005ede: 2600 movs r6, #0 + 8005ee0: 4d0c ldr r5, [pc, #48] ; (8005f14 <__libc_init_array+0x38>) + 8005ee2: 4c0d ldr r4, [pc, #52] ; (8005f18 <__libc_init_array+0x3c>) + 8005ee4: 1b64 subs r4, r4, r5 + 8005ee6: 10a4 asrs r4, r4, #2 + 8005ee8: 42a6 cmp r6, r4 + 8005eea: d109 bne.n 8005f00 <__libc_init_array+0x24> + 8005eec: f000 f822 bl 8005f34 <_init> + 8005ef0: 2600 movs r6, #0 + 8005ef2: 4d0a ldr r5, [pc, #40] ; (8005f1c <__libc_init_array+0x40>) + 8005ef4: 4c0a ldr r4, [pc, #40] ; (8005f20 <__libc_init_array+0x44>) + 8005ef6: 1b64 subs r4, r4, r5 + 8005ef8: 10a4 asrs r4, r4, #2 + 8005efa: 42a6 cmp r6, r4 + 8005efc: d105 bne.n 8005f0a <__libc_init_array+0x2e> + 8005efe: bd70 pop {r4, r5, r6, pc} + 8005f00: f855 3b04 ldr.w r3, [r5], #4 + 8005f04: 4798 blx r3 + 8005f06: 3601 adds r6, #1 + 8005f08: e7ee b.n 8005ee8 <__libc_init_array+0xc> + 8005f0a: f855 3b04 ldr.w r3, [r5], #4 + 8005f0e: 4798 blx r3 + 8005f10: 3601 adds r6, #1 + 8005f12: e7f2 b.n 8005efa <__libc_init_array+0x1e> + 8005f14: 08006aac .word 0x08006aac + 8005f18: 08006aac .word 0x08006aac + 8005f1c: 08006aac .word 0x08006aac + 8005f20: 08006ab0 .word 0x08006ab0 -08005f64 <__libc_init_array>: - 8005f64: b570 push {r4, r5, r6, lr} - 8005f66: 2600 movs r6, #0 - 8005f68: 4d0c ldr r5, [pc, #48] ; (8005f9c <__libc_init_array+0x38>) - 8005f6a: 4c0d ldr r4, [pc, #52] ; (8005fa0 <__libc_init_array+0x3c>) - 8005f6c: 1b64 subs r4, r4, r5 - 8005f6e: 10a4 asrs r4, r4, #2 - 8005f70: 42a6 cmp r6, r4 - 8005f72: d109 bne.n 8005f88 <__libc_init_array+0x24> - 8005f74: f000 fc5c bl 8006830 <_init> - 8005f78: 2600 movs r6, #0 - 8005f7a: 4d0a ldr r5, [pc, #40] ; (8005fa4 <__libc_init_array+0x40>) - 8005f7c: 4c0a ldr r4, [pc, #40] ; (8005fa8 <__libc_init_array+0x44>) - 8005f7e: 1b64 subs r4, r4, r5 - 8005f80: 10a4 asrs r4, r4, #2 - 8005f82: 42a6 cmp r6, r4 - 8005f84: d105 bne.n 8005f92 <__libc_init_array+0x2e> - 8005f86: bd70 pop {r4, r5, r6, pc} - 8005f88: f855 3b04 ldr.w r3, [r5], #4 - 8005f8c: 4798 blx r3 - 8005f8e: 3601 adds r6, #1 - 8005f90: e7ee b.n 8005f70 <__libc_init_array+0xc> - 8005f92: f855 3b04 ldr.w r3, [r5], #4 - 8005f96: 4798 blx r3 - 8005f98: 3601 adds r6, #1 - 8005f9a: e7f2 b.n 8005f82 <__libc_init_array+0x1e> - 8005f9c: 080073e4 .word 0x080073e4 - 8005fa0: 080073e4 .word 0x080073e4 - 8005fa4: 080073e4 .word 0x080073e4 - 8005fa8: 080073e8 .word 0x080073e8 +08005f24 : + 8005f24: 4603 mov r3, r0 + 8005f26: 4402 add r2, r0 + 8005f28: 4293 cmp r3, r2 + 8005f2a: d100 bne.n 8005f2e + 8005f2c: 4770 bx lr + 8005f2e: f803 1b01 strb.w r1, [r3], #1 + 8005f32: e7f9 b.n 8005f28 -08005fac : - 8005fac: 4603 mov r3, r0 - 8005fae: 4402 add r2, r0 - 8005fb0: 4293 cmp r3, r2 - 8005fb2: d100 bne.n 8005fb6 - 8005fb4: 4770 bx lr - 8005fb6: f803 1b01 strb.w r1, [r3], #1 - 8005fba: e7f9 b.n 8005fb0 +08005f34 <_init>: + 8005f34: b5f8 push {r3, r4, r5, r6, r7, lr} + 8005f36: bf00 nop + 8005f38: bcf8 pop {r3, r4, r5, r6, r7} + 8005f3a: bc08 pop {r3} + 8005f3c: 469e mov lr, r3 + 8005f3e: 4770 bx lr -08005fbc : - 8005fbc: b40e push {r1, r2, r3} - 8005fbe: f06f 4100 mvn.w r1, #2147483648 ; 0x80000000 - 8005fc2: b500 push {lr} - 8005fc4: b09c sub sp, #112 ; 0x70 - 8005fc6: ab1d add r3, sp, #116 ; 0x74 - 8005fc8: 9002 str r0, [sp, #8] - 8005fca: 9006 str r0, [sp, #24] - 8005fcc: 9107 str r1, [sp, #28] - 8005fce: 9104 str r1, [sp, #16] - 8005fd0: 4808 ldr r0, [pc, #32] ; (8005ff4 ) - 8005fd2: 4909 ldr r1, [pc, #36] ; (8005ff8 ) - 8005fd4: f853 2b04 ldr.w r2, [r3], #4 - 8005fd8: 9105 str r1, [sp, #20] - 8005fda: 6800 ldr r0, [r0, #0] - 8005fdc: a902 add r1, sp, #8 - 8005fde: 9301 str r3, [sp, #4] - 8005fe0: f000 f868 bl 80060b4 <_svfiprintf_r> - 8005fe4: 2200 movs r2, #0 - 8005fe6: 9b02 ldr r3, [sp, #8] - 8005fe8: 701a strb r2, [r3, #0] - 8005fea: b01c add sp, #112 ; 0x70 - 8005fec: f85d eb04 ldr.w lr, [sp], #4 - 8005ff0: b003 add sp, #12 - 8005ff2: 4770 bx lr - 8005ff4: 20000024 .word 0x20000024 - 8005ff8: ffff0208 .word 0xffff0208 - -08005ffc <__ssputs_r>: - 8005ffc: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 8006000: 688e ldr r6, [r1, #8] - 8006002: 4682 mov sl, r0 - 8006004: 429e cmp r6, r3 - 8006006: 460c mov r4, r1 - 8006008: 4690 mov r8, r2 - 800600a: 461f mov r7, r3 - 800600c: d838 bhi.n 8006080 <__ssputs_r+0x84> - 800600e: 898a ldrh r2, [r1, #12] - 8006010: f412 6f90 tst.w r2, #1152 ; 0x480 - 8006014: d032 beq.n 800607c <__ssputs_r+0x80> - 8006016: 6825 ldr r5, [r4, #0] - 8006018: 6909 ldr r1, [r1, #16] - 800601a: 3301 adds r3, #1 - 800601c: eba5 0901 sub.w r9, r5, r1 - 8006020: 6965 ldr r5, [r4, #20] - 8006022: 444b add r3, r9 - 8006024: eb05 0545 add.w r5, r5, r5, lsl #1 - 8006028: eb05 75d5 add.w r5, r5, r5, lsr #31 - 800602c: 106d asrs r5, r5, #1 - 800602e: 429d cmp r5, r3 - 8006030: bf38 it cc - 8006032: 461d movcc r5, r3 - 8006034: 0553 lsls r3, r2, #21 - 8006036: d531 bpl.n 800609c <__ssputs_r+0xa0> - 8006038: 4629 mov r1, r5 - 800603a: f000 fb53 bl 80066e4 <_malloc_r> - 800603e: 4606 mov r6, r0 - 8006040: b950 cbnz r0, 8006058 <__ssputs_r+0x5c> - 8006042: 230c movs r3, #12 - 8006044: f04f 30ff mov.w r0, #4294967295 - 8006048: f8ca 3000 str.w r3, [sl] - 800604c: 89a3 ldrh r3, [r4, #12] - 800604e: f043 0340 orr.w r3, r3, #64 ; 0x40 - 8006052: 81a3 strh r3, [r4, #12] - 8006054: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8006058: 464a mov r2, r9 - 800605a: 6921 ldr r1, [r4, #16] - 800605c: f000 face bl 80065fc - 8006060: 89a3 ldrh r3, [r4, #12] - 8006062: f423 6390 bic.w r3, r3, #1152 ; 0x480 - 8006066: f043 0380 orr.w r3, r3, #128 ; 0x80 - 800606a: 81a3 strh r3, [r4, #12] - 800606c: 6126 str r6, [r4, #16] - 800606e: 444e add r6, r9 - 8006070: 6026 str r6, [r4, #0] - 8006072: 463e mov r6, r7 - 8006074: 6165 str r5, [r4, #20] - 8006076: eba5 0509 sub.w r5, r5, r9 - 800607a: 60a5 str r5, [r4, #8] - 800607c: 42be cmp r6, r7 - 800607e: d900 bls.n 8006082 <__ssputs_r+0x86> - 8006080: 463e mov r6, r7 - 8006082: 4632 mov r2, r6 - 8006084: 4641 mov r1, r8 - 8006086: 6820 ldr r0, [r4, #0] - 8006088: f000 fac6 bl 8006618 - 800608c: 68a3 ldr r3, [r4, #8] - 800608e: 6822 ldr r2, [r4, #0] - 8006090: 1b9b subs r3, r3, r6 - 8006092: 4432 add r2, r6 - 8006094: 2000 movs r0, #0 - 8006096: 60a3 str r3, [r4, #8] - 8006098: 6022 str r2, [r4, #0] - 800609a: e7db b.n 8006054 <__ssputs_r+0x58> - 800609c: 462a mov r2, r5 - 800609e: f000 fb7b bl 8006798 <_realloc_r> - 80060a2: 4606 mov r6, r0 - 80060a4: 2800 cmp r0, #0 - 80060a6: d1e1 bne.n 800606c <__ssputs_r+0x70> - 80060a8: 4650 mov r0, sl - 80060aa: 6921 ldr r1, [r4, #16] - 80060ac: f000 face bl 800664c <_free_r> - 80060b0: e7c7 b.n 8006042 <__ssputs_r+0x46> - ... - -080060b4 <_svfiprintf_r>: - 80060b4: e92d 4ff0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} - 80060b8: 4698 mov r8, r3 - 80060ba: 898b ldrh r3, [r1, #12] - 80060bc: 4607 mov r7, r0 - 80060be: 061b lsls r3, r3, #24 - 80060c0: 460d mov r5, r1 - 80060c2: 4614 mov r4, r2 - 80060c4: b09d sub sp, #116 ; 0x74 - 80060c6: d50e bpl.n 80060e6 <_svfiprintf_r+0x32> - 80060c8: 690b ldr r3, [r1, #16] - 80060ca: b963 cbnz r3, 80060e6 <_svfiprintf_r+0x32> - 80060cc: 2140 movs r1, #64 ; 0x40 - 80060ce: f000 fb09 bl 80066e4 <_malloc_r> - 80060d2: 6028 str r0, [r5, #0] - 80060d4: 6128 str r0, [r5, #16] - 80060d6: b920 cbnz r0, 80060e2 <_svfiprintf_r+0x2e> - 80060d8: 230c movs r3, #12 - 80060da: 603b str r3, [r7, #0] - 80060dc: f04f 30ff mov.w r0, #4294967295 - 80060e0: e0d1 b.n 8006286 <_svfiprintf_r+0x1d2> - 80060e2: 2340 movs r3, #64 ; 0x40 - 80060e4: 616b str r3, [r5, #20] - 80060e6: 2300 movs r3, #0 - 80060e8: 9309 str r3, [sp, #36] ; 0x24 - 80060ea: 2320 movs r3, #32 - 80060ec: f88d 3029 strb.w r3, [sp, #41] ; 0x29 - 80060f0: 2330 movs r3, #48 ; 0x30 - 80060f2: f04f 0901 mov.w r9, #1 - 80060f6: f8cd 800c str.w r8, [sp, #12] - 80060fa: f8df 81a4 ldr.w r8, [pc, #420] ; 80062a0 <_svfiprintf_r+0x1ec> - 80060fe: f88d 302a strb.w r3, [sp, #42] ; 0x2a - 8006102: 4623 mov r3, r4 - 8006104: 469a mov sl, r3 - 8006106: f813 2b01 ldrb.w r2, [r3], #1 - 800610a: b10a cbz r2, 8006110 <_svfiprintf_r+0x5c> - 800610c: 2a25 cmp r2, #37 ; 0x25 - 800610e: d1f9 bne.n 8006104 <_svfiprintf_r+0x50> - 8006110: ebba 0b04 subs.w fp, sl, r4 - 8006114: d00b beq.n 800612e <_svfiprintf_r+0x7a> - 8006116: 465b mov r3, fp - 8006118: 4622 mov r2, r4 - 800611a: 4629 mov r1, r5 - 800611c: 4638 mov r0, r7 - 800611e: f7ff ff6d bl 8005ffc <__ssputs_r> - 8006122: 3001 adds r0, #1 - 8006124: f000 80aa beq.w 800627c <_svfiprintf_r+0x1c8> - 8006128: 9a09 ldr r2, [sp, #36] ; 0x24 - 800612a: 445a add r2, fp - 800612c: 9209 str r2, [sp, #36] ; 0x24 - 800612e: f89a 3000 ldrb.w r3, [sl] - 8006132: 2b00 cmp r3, #0 - 8006134: f000 80a2 beq.w 800627c <_svfiprintf_r+0x1c8> - 8006138: 2300 movs r3, #0 - 800613a: f04f 32ff mov.w r2, #4294967295 - 800613e: e9cd 2305 strd r2, r3, [sp, #20] - 8006142: f10a 0a01 add.w sl, sl, #1 - 8006146: 9304 str r3, [sp, #16] - 8006148: 9307 str r3, [sp, #28] - 800614a: f88d 3053 strb.w r3, [sp, #83] ; 0x53 - 800614e: 931a str r3, [sp, #104] ; 0x68 - 8006150: 4654 mov r4, sl - 8006152: 2205 movs r2, #5 - 8006154: f814 1b01 ldrb.w r1, [r4], #1 - 8006158: 4851 ldr r0, [pc, #324] ; (80062a0 <_svfiprintf_r+0x1ec>) - 800615a: f000 fa41 bl 80065e0 - 800615e: 9a04 ldr r2, [sp, #16] - 8006160: b9d8 cbnz r0, 800619a <_svfiprintf_r+0xe6> - 8006162: 06d0 lsls r0, r2, #27 - 8006164: bf44 itt mi - 8006166: 2320 movmi r3, #32 - 8006168: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 - 800616c: 0711 lsls r1, r2, #28 - 800616e: bf44 itt mi - 8006170: 232b movmi r3, #43 ; 0x2b - 8006172: f88d 3053 strbmi.w r3, [sp, #83] ; 0x53 - 8006176: f89a 3000 ldrb.w r3, [sl] - 800617a: 2b2a cmp r3, #42 ; 0x2a - 800617c: d015 beq.n 80061aa <_svfiprintf_r+0xf6> - 800617e: 4654 mov r4, sl - 8006180: 2000 movs r0, #0 - 8006182: f04f 0c0a mov.w ip, #10 - 8006186: 9a07 ldr r2, [sp, #28] - 8006188: 4621 mov r1, r4 - 800618a: f811 3b01 ldrb.w r3, [r1], #1 - 800618e: 3b30 subs r3, #48 ; 0x30 - 8006190: 2b09 cmp r3, #9 - 8006192: d94e bls.n 8006232 <_svfiprintf_r+0x17e> - 8006194: b1b0 cbz r0, 80061c4 <_svfiprintf_r+0x110> - 8006196: 9207 str r2, [sp, #28] - 8006198: e014 b.n 80061c4 <_svfiprintf_r+0x110> - 800619a: eba0 0308 sub.w r3, r0, r8 - 800619e: fa09 f303 lsl.w r3, r9, r3 - 80061a2: 4313 orrs r3, r2 - 80061a4: 46a2 mov sl, r4 - 80061a6: 9304 str r3, [sp, #16] - 80061a8: e7d2 b.n 8006150 <_svfiprintf_r+0x9c> - 80061aa: 9b03 ldr r3, [sp, #12] - 80061ac: 1d19 adds r1, r3, #4 - 80061ae: 681b ldr r3, [r3, #0] - 80061b0: 9103 str r1, [sp, #12] - 80061b2: 2b00 cmp r3, #0 - 80061b4: bfbb ittet lt - 80061b6: 425b neglt r3, r3 - 80061b8: f042 0202 orrlt.w r2, r2, #2 - 80061bc: 9307 strge r3, [sp, #28] - 80061be: 9307 strlt r3, [sp, #28] - 80061c0: bfb8 it lt - 80061c2: 9204 strlt r2, [sp, #16] - 80061c4: 7823 ldrb r3, [r4, #0] - 80061c6: 2b2e cmp r3, #46 ; 0x2e - 80061c8: d10c bne.n 80061e4 <_svfiprintf_r+0x130> - 80061ca: 7863 ldrb r3, [r4, #1] - 80061cc: 2b2a cmp r3, #42 ; 0x2a - 80061ce: d135 bne.n 800623c <_svfiprintf_r+0x188> - 80061d0: 9b03 ldr r3, [sp, #12] - 80061d2: 3402 adds r4, #2 - 80061d4: 1d1a adds r2, r3, #4 - 80061d6: 681b ldr r3, [r3, #0] - 80061d8: 9203 str r2, [sp, #12] - 80061da: 2b00 cmp r3, #0 - 80061dc: bfb8 it lt - 80061de: f04f 33ff movlt.w r3, #4294967295 - 80061e2: 9305 str r3, [sp, #20] - 80061e4: f8df a0c8 ldr.w sl, [pc, #200] ; 80062b0 <_svfiprintf_r+0x1fc> - 80061e8: 2203 movs r2, #3 - 80061ea: 4650 mov r0, sl - 80061ec: 7821 ldrb r1, [r4, #0] - 80061ee: f000 f9f7 bl 80065e0 - 80061f2: b140 cbz r0, 8006206 <_svfiprintf_r+0x152> - 80061f4: 2340 movs r3, #64 ; 0x40 - 80061f6: eba0 000a sub.w r0, r0, sl - 80061fa: fa03 f000 lsl.w r0, r3, r0 - 80061fe: 9b04 ldr r3, [sp, #16] - 8006200: 3401 adds r4, #1 - 8006202: 4303 orrs r3, r0 - 8006204: 9304 str r3, [sp, #16] - 8006206: f814 1b01 ldrb.w r1, [r4], #1 - 800620a: 2206 movs r2, #6 - 800620c: 4825 ldr r0, [pc, #148] ; (80062a4 <_svfiprintf_r+0x1f0>) - 800620e: f88d 1028 strb.w r1, [sp, #40] ; 0x28 - 8006212: f000 f9e5 bl 80065e0 - 8006216: 2800 cmp r0, #0 - 8006218: d038 beq.n 800628c <_svfiprintf_r+0x1d8> - 800621a: 4b23 ldr r3, [pc, #140] ; (80062a8 <_svfiprintf_r+0x1f4>) - 800621c: bb1b cbnz r3, 8006266 <_svfiprintf_r+0x1b2> - 800621e: 9b03 ldr r3, [sp, #12] - 8006220: 3307 adds r3, #7 - 8006222: f023 0307 bic.w r3, r3, #7 - 8006226: 3308 adds r3, #8 - 8006228: 9303 str r3, [sp, #12] - 800622a: 9b09 ldr r3, [sp, #36] ; 0x24 - 800622c: 4433 add r3, r6 - 800622e: 9309 str r3, [sp, #36] ; 0x24 - 8006230: e767 b.n 8006102 <_svfiprintf_r+0x4e> - 8006232: 460c mov r4, r1 - 8006234: 2001 movs r0, #1 - 8006236: fb0c 3202 mla r2, ip, r2, r3 - 800623a: e7a5 b.n 8006188 <_svfiprintf_r+0xd4> - 800623c: 2300 movs r3, #0 - 800623e: f04f 0c0a mov.w ip, #10 - 8006242: 4619 mov r1, r3 - 8006244: 3401 adds r4, #1 - 8006246: 9305 str r3, [sp, #20] - 8006248: 4620 mov r0, r4 - 800624a: f810 2b01 ldrb.w r2, [r0], #1 - 800624e: 3a30 subs r2, #48 ; 0x30 - 8006250: 2a09 cmp r2, #9 - 8006252: d903 bls.n 800625c <_svfiprintf_r+0x1a8> - 8006254: 2b00 cmp r3, #0 - 8006256: d0c5 beq.n 80061e4 <_svfiprintf_r+0x130> - 8006258: 9105 str r1, [sp, #20] - 800625a: e7c3 b.n 80061e4 <_svfiprintf_r+0x130> - 800625c: 4604 mov r4, r0 - 800625e: 2301 movs r3, #1 - 8006260: fb0c 2101 mla r1, ip, r1, r2 - 8006264: e7f0 b.n 8006248 <_svfiprintf_r+0x194> - 8006266: ab03 add r3, sp, #12 - 8006268: 9300 str r3, [sp, #0] - 800626a: 462a mov r2, r5 - 800626c: 4638 mov r0, r7 - 800626e: 4b0f ldr r3, [pc, #60] ; (80062ac <_svfiprintf_r+0x1f8>) - 8006270: a904 add r1, sp, #16 - 8006272: f3af 8000 nop.w - 8006276: 1c42 adds r2, r0, #1 - 8006278: 4606 mov r6, r0 - 800627a: d1d6 bne.n 800622a <_svfiprintf_r+0x176> - 800627c: 89ab ldrh r3, [r5, #12] - 800627e: 065b lsls r3, r3, #25 - 8006280: f53f af2c bmi.w 80060dc <_svfiprintf_r+0x28> - 8006284: 9809 ldr r0, [sp, #36] ; 0x24 - 8006286: b01d add sp, #116 ; 0x74 - 8006288: e8bd 8ff0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} - 800628c: ab03 add r3, sp, #12 - 800628e: 9300 str r3, [sp, #0] - 8006290: 462a mov r2, r5 - 8006292: 4638 mov r0, r7 - 8006294: 4b05 ldr r3, [pc, #20] ; (80062ac <_svfiprintf_r+0x1f8>) - 8006296: a904 add r1, sp, #16 - 8006298: f000 f87c bl 8006394 <_printf_i> - 800629c: e7eb b.n 8006276 <_svfiprintf_r+0x1c2> - 800629e: bf00 nop - 80062a0: 080073b0 .word 0x080073b0 - 80062a4: 080073ba .word 0x080073ba - 80062a8: 00000000 .word 0x00000000 - 80062ac: 08005ffd .word 0x08005ffd - 80062b0: 080073b6 .word 0x080073b6 - -080062b4 <_printf_common>: - 80062b4: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr} - 80062b8: 4616 mov r6, r2 - 80062ba: 4699 mov r9, r3 - 80062bc: 688a ldr r2, [r1, #8] - 80062be: 690b ldr r3, [r1, #16] - 80062c0: 4607 mov r7, r0 - 80062c2: 4293 cmp r3, r2 - 80062c4: bfb8 it lt - 80062c6: 4613 movlt r3, r2 - 80062c8: 6033 str r3, [r6, #0] - 80062ca: f891 2043 ldrb.w r2, [r1, #67] ; 0x43 - 80062ce: 460c mov r4, r1 - 80062d0: f8dd 8020 ldr.w r8, [sp, #32] - 80062d4: b10a cbz r2, 80062da <_printf_common+0x26> - 80062d6: 3301 adds r3, #1 - 80062d8: 6033 str r3, [r6, #0] - 80062da: 6823 ldr r3, [r4, #0] - 80062dc: 0699 lsls r1, r3, #26 - 80062de: bf42 ittt mi - 80062e0: 6833 ldrmi r3, [r6, #0] - 80062e2: 3302 addmi r3, #2 - 80062e4: 6033 strmi r3, [r6, #0] - 80062e6: 6825 ldr r5, [r4, #0] - 80062e8: f015 0506 ands.w r5, r5, #6 - 80062ec: d106 bne.n 80062fc <_printf_common+0x48> - 80062ee: f104 0a19 add.w sl, r4, #25 - 80062f2: 68e3 ldr r3, [r4, #12] - 80062f4: 6832 ldr r2, [r6, #0] - 80062f6: 1a9b subs r3, r3, r2 - 80062f8: 42ab cmp r3, r5 - 80062fa: dc28 bgt.n 800634e <_printf_common+0x9a> - 80062fc: f894 2043 ldrb.w r2, [r4, #67] ; 0x43 - 8006300: 1e13 subs r3, r2, #0 - 8006302: 6822 ldr r2, [r4, #0] - 8006304: bf18 it ne - 8006306: 2301 movne r3, #1 - 8006308: 0692 lsls r2, r2, #26 - 800630a: d42d bmi.n 8006368 <_printf_common+0xb4> - 800630c: 4649 mov r1, r9 - 800630e: 4638 mov r0, r7 - 8006310: f104 0243 add.w r2, r4, #67 ; 0x43 - 8006314: 47c0 blx r8 - 8006316: 3001 adds r0, #1 - 8006318: d020 beq.n 800635c <_printf_common+0xa8> - 800631a: 6823 ldr r3, [r4, #0] - 800631c: 68e5 ldr r5, [r4, #12] - 800631e: f003 0306 and.w r3, r3, #6 - 8006322: 2b04 cmp r3, #4 - 8006324: bf18 it ne - 8006326: 2500 movne r5, #0 - 8006328: 6832 ldr r2, [r6, #0] - 800632a: f04f 0600 mov.w r6, #0 - 800632e: 68a3 ldr r3, [r4, #8] - 8006330: bf08 it eq - 8006332: 1aad subeq r5, r5, r2 - 8006334: 6922 ldr r2, [r4, #16] - 8006336: bf08 it eq - 8006338: ea25 75e5 biceq.w r5, r5, r5, asr #31 - 800633c: 4293 cmp r3, r2 - 800633e: bfc4 itt gt - 8006340: 1a9b subgt r3, r3, r2 - 8006342: 18ed addgt r5, r5, r3 - 8006344: 341a adds r4, #26 - 8006346: 42b5 cmp r5, r6 - 8006348: d11a bne.n 8006380 <_printf_common+0xcc> - 800634a: 2000 movs r0, #0 - 800634c: e008 b.n 8006360 <_printf_common+0xac> - 800634e: 2301 movs r3, #1 - 8006350: 4652 mov r2, sl - 8006352: 4649 mov r1, r9 - 8006354: 4638 mov r0, r7 - 8006356: 47c0 blx r8 - 8006358: 3001 adds r0, #1 - 800635a: d103 bne.n 8006364 <_printf_common+0xb0> - 800635c: f04f 30ff mov.w r0, #4294967295 - 8006360: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8006364: 3501 adds r5, #1 - 8006366: e7c4 b.n 80062f2 <_printf_common+0x3e> - 8006368: 2030 movs r0, #48 ; 0x30 - 800636a: 18e1 adds r1, r4, r3 - 800636c: f881 0043 strb.w r0, [r1, #67] ; 0x43 - 8006370: 1c5a adds r2, r3, #1 - 8006372: f894 1045 ldrb.w r1, [r4, #69] ; 0x45 - 8006376: 4422 add r2, r4 - 8006378: 3302 adds r3, #2 - 800637a: f882 1043 strb.w r1, [r2, #67] ; 0x43 - 800637e: e7c5 b.n 800630c <_printf_common+0x58> - 8006380: 2301 movs r3, #1 - 8006382: 4622 mov r2, r4 - 8006384: 4649 mov r1, r9 - 8006386: 4638 mov r0, r7 - 8006388: 47c0 blx r8 - 800638a: 3001 adds r0, #1 - 800638c: d0e6 beq.n 800635c <_printf_common+0xa8> - 800638e: 3601 adds r6, #1 - 8006390: e7d9 b.n 8006346 <_printf_common+0x92> - ... - -08006394 <_printf_i>: - 8006394: e92d 47ff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, lr} - 8006398: 460c mov r4, r1 - 800639a: 7e27 ldrb r7, [r4, #24] - 800639c: 4691 mov r9, r2 - 800639e: 2f78 cmp r7, #120 ; 0x78 - 80063a0: 4680 mov r8, r0 - 80063a2: 469a mov sl, r3 - 80063a4: 990c ldr r1, [sp, #48] ; 0x30 - 80063a6: f104 0243 add.w r2, r4, #67 ; 0x43 - 80063aa: d807 bhi.n 80063bc <_printf_i+0x28> - 80063ac: 2f62 cmp r7, #98 ; 0x62 - 80063ae: d80a bhi.n 80063c6 <_printf_i+0x32> - 80063b0: 2f00 cmp r7, #0 - 80063b2: f000 80d9 beq.w 8006568 <_printf_i+0x1d4> - 80063b6: 2f58 cmp r7, #88 ; 0x58 - 80063b8: f000 80a4 beq.w 8006504 <_printf_i+0x170> - 80063bc: f104 0642 add.w r6, r4, #66 ; 0x42 - 80063c0: f884 7042 strb.w r7, [r4, #66] ; 0x42 - 80063c4: e03a b.n 800643c <_printf_i+0xa8> - 80063c6: f1a7 0363 sub.w r3, r7, #99 ; 0x63 - 80063ca: 2b15 cmp r3, #21 - 80063cc: d8f6 bhi.n 80063bc <_printf_i+0x28> - 80063ce: a001 add r0, pc, #4 ; (adr r0, 80063d4 <_printf_i+0x40>) - 80063d0: f850 f023 ldr.w pc, [r0, r3, lsl #2] - 80063d4: 0800642d .word 0x0800642d - 80063d8: 08006441 .word 0x08006441 - 80063dc: 080063bd .word 0x080063bd - 80063e0: 080063bd .word 0x080063bd - 80063e4: 080063bd .word 0x080063bd - 80063e8: 080063bd .word 0x080063bd - 80063ec: 08006441 .word 0x08006441 - 80063f0: 080063bd .word 0x080063bd - 80063f4: 080063bd .word 0x080063bd - 80063f8: 080063bd .word 0x080063bd - 80063fc: 080063bd .word 0x080063bd - 8006400: 0800654f .word 0x0800654f - 8006404: 08006471 .word 0x08006471 - 8006408: 08006531 .word 0x08006531 - 800640c: 080063bd .word 0x080063bd - 8006410: 080063bd .word 0x080063bd - 8006414: 08006571 .word 0x08006571 - 8006418: 080063bd .word 0x080063bd - 800641c: 08006471 .word 0x08006471 - 8006420: 080063bd .word 0x080063bd - 8006424: 080063bd .word 0x080063bd - 8006428: 08006539 .word 0x08006539 - 800642c: 680b ldr r3, [r1, #0] - 800642e: f104 0642 add.w r6, r4, #66 ; 0x42 - 8006432: 1d1a adds r2, r3, #4 - 8006434: 681b ldr r3, [r3, #0] - 8006436: 600a str r2, [r1, #0] - 8006438: f884 3042 strb.w r3, [r4, #66] ; 0x42 - 800643c: 2301 movs r3, #1 - 800643e: e0a4 b.n 800658a <_printf_i+0x1f6> - 8006440: 6825 ldr r5, [r4, #0] - 8006442: 6808 ldr r0, [r1, #0] - 8006444: 062e lsls r6, r5, #24 - 8006446: f100 0304 add.w r3, r0, #4 - 800644a: d50a bpl.n 8006462 <_printf_i+0xce> - 800644c: 6805 ldr r5, [r0, #0] - 800644e: 600b str r3, [r1, #0] - 8006450: 2d00 cmp r5, #0 - 8006452: da03 bge.n 800645c <_printf_i+0xc8> - 8006454: 232d movs r3, #45 ; 0x2d - 8006456: 426d negs r5, r5 - 8006458: f884 3043 strb.w r3, [r4, #67] ; 0x43 - 800645c: 230a movs r3, #10 - 800645e: 485e ldr r0, [pc, #376] ; (80065d8 <_printf_i+0x244>) - 8006460: e019 b.n 8006496 <_printf_i+0x102> - 8006462: f015 0f40 tst.w r5, #64 ; 0x40 - 8006466: 6805 ldr r5, [r0, #0] - 8006468: 600b str r3, [r1, #0] - 800646a: bf18 it ne - 800646c: b22d sxthne r5, r5 - 800646e: e7ef b.n 8006450 <_printf_i+0xbc> - 8006470: 680b ldr r3, [r1, #0] - 8006472: 6825 ldr r5, [r4, #0] - 8006474: 1d18 adds r0, r3, #4 - 8006476: 6008 str r0, [r1, #0] - 8006478: 0628 lsls r0, r5, #24 - 800647a: d501 bpl.n 8006480 <_printf_i+0xec> - 800647c: 681d ldr r5, [r3, #0] - 800647e: e002 b.n 8006486 <_printf_i+0xf2> - 8006480: 0669 lsls r1, r5, #25 - 8006482: d5fb bpl.n 800647c <_printf_i+0xe8> - 8006484: 881d ldrh r5, [r3, #0] - 8006486: 2f6f cmp r7, #111 ; 0x6f - 8006488: bf0c ite eq - 800648a: 2308 moveq r3, #8 - 800648c: 230a movne r3, #10 - 800648e: 4852 ldr r0, [pc, #328] ; (80065d8 <_printf_i+0x244>) - 8006490: 2100 movs r1, #0 - 8006492: f884 1043 strb.w r1, [r4, #67] ; 0x43 - 8006496: 6866 ldr r6, [r4, #4] - 8006498: 2e00 cmp r6, #0 - 800649a: bfa8 it ge - 800649c: 6821 ldrge r1, [r4, #0] - 800649e: 60a6 str r6, [r4, #8] - 80064a0: bfa4 itt ge - 80064a2: f021 0104 bicge.w r1, r1, #4 - 80064a6: 6021 strge r1, [r4, #0] - 80064a8: b90d cbnz r5, 80064ae <_printf_i+0x11a> - 80064aa: 2e00 cmp r6, #0 - 80064ac: d04d beq.n 800654a <_printf_i+0x1b6> - 80064ae: 4616 mov r6, r2 - 80064b0: fbb5 f1f3 udiv r1, r5, r3 - 80064b4: fb03 5711 mls r7, r3, r1, r5 - 80064b8: 5dc7 ldrb r7, [r0, r7] - 80064ba: f806 7d01 strb.w r7, [r6, #-1]! - 80064be: 462f mov r7, r5 - 80064c0: 42bb cmp r3, r7 - 80064c2: 460d mov r5, r1 - 80064c4: d9f4 bls.n 80064b0 <_printf_i+0x11c> - 80064c6: 2b08 cmp r3, #8 - 80064c8: d10b bne.n 80064e2 <_printf_i+0x14e> - 80064ca: 6823 ldr r3, [r4, #0] - 80064cc: 07df lsls r7, r3, #31 - 80064ce: d508 bpl.n 80064e2 <_printf_i+0x14e> - 80064d0: 6923 ldr r3, [r4, #16] - 80064d2: 6861 ldr r1, [r4, #4] - 80064d4: 4299 cmp r1, r3 - 80064d6: bfde ittt le - 80064d8: 2330 movle r3, #48 ; 0x30 - 80064da: f806 3c01 strble.w r3, [r6, #-1] - 80064de: f106 36ff addle.w r6, r6, #4294967295 - 80064e2: 1b92 subs r2, r2, r6 - 80064e4: 6122 str r2, [r4, #16] - 80064e6: 464b mov r3, r9 - 80064e8: 4621 mov r1, r4 - 80064ea: 4640 mov r0, r8 - 80064ec: f8cd a000 str.w sl, [sp] - 80064f0: aa03 add r2, sp, #12 - 80064f2: f7ff fedf bl 80062b4 <_printf_common> - 80064f6: 3001 adds r0, #1 - 80064f8: d14c bne.n 8006594 <_printf_i+0x200> - 80064fa: f04f 30ff mov.w r0, #4294967295 - 80064fe: b004 add sp, #16 - 8006500: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc} - 8006504: 4834 ldr r0, [pc, #208] ; (80065d8 <_printf_i+0x244>) - 8006506: f884 7045 strb.w r7, [r4, #69] ; 0x45 - 800650a: 680e ldr r6, [r1, #0] - 800650c: 6823 ldr r3, [r4, #0] - 800650e: f856 5b04 ldr.w r5, [r6], #4 - 8006512: 061f lsls r7, r3, #24 - 8006514: 600e str r6, [r1, #0] - 8006516: d514 bpl.n 8006542 <_printf_i+0x1ae> - 8006518: 07d9 lsls r1, r3, #31 - 800651a: bf44 itt mi - 800651c: f043 0320 orrmi.w r3, r3, #32 - 8006520: 6023 strmi r3, [r4, #0] - 8006522: b91d cbnz r5, 800652c <_printf_i+0x198> - 8006524: 6823 ldr r3, [r4, #0] - 8006526: f023 0320 bic.w r3, r3, #32 - 800652a: 6023 str r3, [r4, #0] - 800652c: 2310 movs r3, #16 - 800652e: e7af b.n 8006490 <_printf_i+0xfc> - 8006530: 6823 ldr r3, [r4, #0] - 8006532: f043 0320 orr.w r3, r3, #32 - 8006536: 6023 str r3, [r4, #0] - 8006538: 2378 movs r3, #120 ; 0x78 - 800653a: 4828 ldr r0, [pc, #160] ; (80065dc <_printf_i+0x248>) - 800653c: f884 3045 strb.w r3, [r4, #69] ; 0x45 - 8006540: e7e3 b.n 800650a <_printf_i+0x176> - 8006542: 065e lsls r6, r3, #25 - 8006544: bf48 it mi - 8006546: b2ad uxthmi r5, r5 - 8006548: e7e6 b.n 8006518 <_printf_i+0x184> - 800654a: 4616 mov r6, r2 - 800654c: e7bb b.n 80064c6 <_printf_i+0x132> - 800654e: 680b ldr r3, [r1, #0] - 8006550: 6826 ldr r6, [r4, #0] - 8006552: 1d1d adds r5, r3, #4 - 8006554: 6960 ldr r0, [r4, #20] - 8006556: 600d str r5, [r1, #0] - 8006558: 0635 lsls r5, r6, #24 - 800655a: 681b ldr r3, [r3, #0] - 800655c: d501 bpl.n 8006562 <_printf_i+0x1ce> - 800655e: 6018 str r0, [r3, #0] - 8006560: e002 b.n 8006568 <_printf_i+0x1d4> - 8006562: 0671 lsls r1, r6, #25 - 8006564: d5fb bpl.n 800655e <_printf_i+0x1ca> - 8006566: 8018 strh r0, [r3, #0] - 8006568: 2300 movs r3, #0 - 800656a: 4616 mov r6, r2 - 800656c: 6123 str r3, [r4, #16] - 800656e: e7ba b.n 80064e6 <_printf_i+0x152> - 8006570: 680b ldr r3, [r1, #0] - 8006572: 1d1a adds r2, r3, #4 - 8006574: 600a str r2, [r1, #0] - 8006576: 681e ldr r6, [r3, #0] - 8006578: 2100 movs r1, #0 - 800657a: 4630 mov r0, r6 - 800657c: 6862 ldr r2, [r4, #4] - 800657e: f000 f82f bl 80065e0 - 8006582: b108 cbz r0, 8006588 <_printf_i+0x1f4> - 8006584: 1b80 subs r0, r0, r6 - 8006586: 6060 str r0, [r4, #4] - 8006588: 6863 ldr r3, [r4, #4] - 800658a: 6123 str r3, [r4, #16] - 800658c: 2300 movs r3, #0 - 800658e: f884 3043 strb.w r3, [r4, #67] ; 0x43 - 8006592: e7a8 b.n 80064e6 <_printf_i+0x152> - 8006594: 4632 mov r2, r6 - 8006596: 4649 mov r1, r9 - 8006598: 4640 mov r0, r8 - 800659a: 6923 ldr r3, [r4, #16] - 800659c: 47d0 blx sl - 800659e: 3001 adds r0, #1 - 80065a0: d0ab beq.n 80064fa <_printf_i+0x166> - 80065a2: 6823 ldr r3, [r4, #0] - 80065a4: 079b lsls r3, r3, #30 - 80065a6: d413 bmi.n 80065d0 <_printf_i+0x23c> - 80065a8: 68e0 ldr r0, [r4, #12] - 80065aa: 9b03 ldr r3, [sp, #12] - 80065ac: 4298 cmp r0, r3 - 80065ae: bfb8 it lt - 80065b0: 4618 movlt r0, r3 - 80065b2: e7a4 b.n 80064fe <_printf_i+0x16a> - 80065b4: 2301 movs r3, #1 - 80065b6: 4632 mov r2, r6 - 80065b8: 4649 mov r1, r9 - 80065ba: 4640 mov r0, r8 - 80065bc: 47d0 blx sl - 80065be: 3001 adds r0, #1 - 80065c0: d09b beq.n 80064fa <_printf_i+0x166> - 80065c2: 3501 adds r5, #1 - 80065c4: 68e3 ldr r3, [r4, #12] - 80065c6: 9903 ldr r1, [sp, #12] - 80065c8: 1a5b subs r3, r3, r1 - 80065ca: 42ab cmp r3, r5 - 80065cc: dcf2 bgt.n 80065b4 <_printf_i+0x220> - 80065ce: e7eb b.n 80065a8 <_printf_i+0x214> - 80065d0: 2500 movs r5, #0 - 80065d2: f104 0619 add.w r6, r4, #25 - 80065d6: e7f5 b.n 80065c4 <_printf_i+0x230> - 80065d8: 080073c1 .word 0x080073c1 - 80065dc: 080073d2 .word 0x080073d2 - -080065e0 : - 80065e0: 4603 mov r3, r0 - 80065e2: b510 push {r4, lr} - 80065e4: b2c9 uxtb r1, r1 - 80065e6: 4402 add r2, r0 - 80065e8: 4293 cmp r3, r2 - 80065ea: 4618 mov r0, r3 - 80065ec: d101 bne.n 80065f2 - 80065ee: 2000 movs r0, #0 - 80065f0: e003 b.n 80065fa - 80065f2: 7804 ldrb r4, [r0, #0] - 80065f4: 3301 adds r3, #1 - 80065f6: 428c cmp r4, r1 - 80065f8: d1f6 bne.n 80065e8 - 80065fa: bd10 pop {r4, pc} - -080065fc : - 80065fc: 440a add r2, r1 - 80065fe: 4291 cmp r1, r2 - 8006600: f100 33ff add.w r3, r0, #4294967295 - 8006604: d100 bne.n 8006608 - 8006606: 4770 bx lr - 8006608: b510 push {r4, lr} - 800660a: f811 4b01 ldrb.w r4, [r1], #1 - 800660e: 4291 cmp r1, r2 - 8006610: f803 4f01 strb.w r4, [r3, #1]! - 8006614: d1f9 bne.n 800660a - 8006616: bd10 pop {r4, pc} - -08006618 : - 8006618: 4288 cmp r0, r1 - 800661a: b510 push {r4, lr} - 800661c: eb01 0402 add.w r4, r1, r2 - 8006620: d902 bls.n 8006628 - 8006622: 4284 cmp r4, r0 - 8006624: 4623 mov r3, r4 - 8006626: d807 bhi.n 8006638 - 8006628: 1e43 subs r3, r0, #1 - 800662a: 42a1 cmp r1, r4 - 800662c: d008 beq.n 8006640 - 800662e: f811 2b01 ldrb.w r2, [r1], #1 - 8006632: f803 2f01 strb.w r2, [r3, #1]! - 8006636: e7f8 b.n 800662a - 8006638: 4601 mov r1, r0 - 800663a: 4402 add r2, r0 - 800663c: 428a cmp r2, r1 - 800663e: d100 bne.n 8006642 - 8006640: bd10 pop {r4, pc} - 8006642: f813 4d01 ldrb.w r4, [r3, #-1]! - 8006646: f802 4d01 strb.w r4, [r2, #-1]! - 800664a: e7f7 b.n 800663c - -0800664c <_free_r>: - 800664c: b538 push {r3, r4, r5, lr} - 800664e: 4605 mov r5, r0 - 8006650: 2900 cmp r1, #0 - 8006652: d043 beq.n 80066dc <_free_r+0x90> - 8006654: f851 3c04 ldr.w r3, [r1, #-4] - 8006658: 1f0c subs r4, r1, #4 - 800665a: 2b00 cmp r3, #0 - 800665c: bfb8 it lt - 800665e: 18e4 addlt r4, r4, r3 - 8006660: f000 f8d0 bl 8006804 <__malloc_lock> - 8006664: 4a1e ldr r2, [pc, #120] ; (80066e0 <_free_r+0x94>) - 8006666: 6813 ldr r3, [r2, #0] - 8006668: 4610 mov r0, r2 - 800666a: b933 cbnz r3, 800667a <_free_r+0x2e> - 800666c: 6063 str r3, [r4, #4] - 800666e: 6014 str r4, [r2, #0] - 8006670: 4628 mov r0, r5 - 8006672: e8bd 4038 ldmia.w sp!, {r3, r4, r5, lr} - 8006676: f000 b8cb b.w 8006810 <__malloc_unlock> - 800667a: 42a3 cmp r3, r4 - 800667c: d90a bls.n 8006694 <_free_r+0x48> - 800667e: 6821 ldr r1, [r4, #0] - 8006680: 1862 adds r2, r4, r1 - 8006682: 4293 cmp r3, r2 - 8006684: bf01 itttt eq - 8006686: 681a ldreq r2, [r3, #0] - 8006688: 685b ldreq r3, [r3, #4] - 800668a: 1852 addeq r2, r2, r1 - 800668c: 6022 streq r2, [r4, #0] - 800668e: 6063 str r3, [r4, #4] - 8006690: 6004 str r4, [r0, #0] - 8006692: e7ed b.n 8006670 <_free_r+0x24> - 8006694: 461a mov r2, r3 - 8006696: 685b ldr r3, [r3, #4] - 8006698: b10b cbz r3, 800669e <_free_r+0x52> - 800669a: 42a3 cmp r3, r4 - 800669c: d9fa bls.n 8006694 <_free_r+0x48> - 800669e: 6811 ldr r1, [r2, #0] - 80066a0: 1850 adds r0, r2, r1 - 80066a2: 42a0 cmp r0, r4 - 80066a4: d10b bne.n 80066be <_free_r+0x72> - 80066a6: 6820 ldr r0, [r4, #0] - 80066a8: 4401 add r1, r0 - 80066aa: 1850 adds r0, r2, r1 - 80066ac: 4283 cmp r3, r0 - 80066ae: 6011 str r1, [r2, #0] - 80066b0: d1de bne.n 8006670 <_free_r+0x24> - 80066b2: 6818 ldr r0, [r3, #0] - 80066b4: 685b ldr r3, [r3, #4] - 80066b6: 4401 add r1, r0 - 80066b8: 6011 str r1, [r2, #0] - 80066ba: 6053 str r3, [r2, #4] - 80066bc: e7d8 b.n 8006670 <_free_r+0x24> - 80066be: d902 bls.n 80066c6 <_free_r+0x7a> - 80066c0: 230c movs r3, #12 - 80066c2: 602b str r3, [r5, #0] - 80066c4: e7d4 b.n 8006670 <_free_r+0x24> - 80066c6: 6820 ldr r0, [r4, #0] - 80066c8: 1821 adds r1, r4, r0 - 80066ca: 428b cmp r3, r1 - 80066cc: bf01 itttt eq - 80066ce: 6819 ldreq r1, [r3, #0] - 80066d0: 685b ldreq r3, [r3, #4] - 80066d2: 1809 addeq r1, r1, r0 - 80066d4: 6021 streq r1, [r4, #0] - 80066d6: 6063 str r3, [r4, #4] - 80066d8: 6054 str r4, [r2, #4] - 80066da: e7c9 b.n 8006670 <_free_r+0x24> - 80066dc: bd38 pop {r3, r4, r5, pc} - 80066de: bf00 nop - 80066e0: 200000dc .word 0x200000dc - -080066e4 <_malloc_r>: - 80066e4: b5f8 push {r3, r4, r5, r6, r7, lr} - 80066e6: 1ccd adds r5, r1, #3 - 80066e8: f025 0503 bic.w r5, r5, #3 - 80066ec: 3508 adds r5, #8 - 80066ee: 2d0c cmp r5, #12 - 80066f0: bf38 it cc - 80066f2: 250c movcc r5, #12 - 80066f4: 2d00 cmp r5, #0 - 80066f6: 4606 mov r6, r0 - 80066f8: db01 blt.n 80066fe <_malloc_r+0x1a> - 80066fa: 42a9 cmp r1, r5 - 80066fc: d903 bls.n 8006706 <_malloc_r+0x22> - 80066fe: 230c movs r3, #12 - 8006700: 6033 str r3, [r6, #0] - 8006702: 2000 movs r0, #0 - 8006704: bdf8 pop {r3, r4, r5, r6, r7, pc} - 8006706: f000 f87d bl 8006804 <__malloc_lock> - 800670a: 4921 ldr r1, [pc, #132] ; (8006790 <_malloc_r+0xac>) - 800670c: 680a ldr r2, [r1, #0] - 800670e: 4614 mov r4, r2 - 8006710: b99c cbnz r4, 800673a <_malloc_r+0x56> - 8006712: 4f20 ldr r7, [pc, #128] ; (8006794 <_malloc_r+0xb0>) - 8006714: 683b ldr r3, [r7, #0] - 8006716: b923 cbnz r3, 8006722 <_malloc_r+0x3e> - 8006718: 4621 mov r1, r4 - 800671a: 4630 mov r0, r6 - 800671c: f000 f862 bl 80067e4 <_sbrk_r> - 8006720: 6038 str r0, [r7, #0] - 8006722: 4629 mov r1, r5 - 8006724: 4630 mov r0, r6 - 8006726: f000 f85d bl 80067e4 <_sbrk_r> - 800672a: 1c43 adds r3, r0, #1 - 800672c: d123 bne.n 8006776 <_malloc_r+0x92> - 800672e: 230c movs r3, #12 - 8006730: 4630 mov r0, r6 - 8006732: 6033 str r3, [r6, #0] - 8006734: f000 f86c bl 8006810 <__malloc_unlock> - 8006738: e7e3 b.n 8006702 <_malloc_r+0x1e> - 800673a: 6823 ldr r3, [r4, #0] - 800673c: 1b5b subs r3, r3, r5 - 800673e: d417 bmi.n 8006770 <_malloc_r+0x8c> - 8006740: 2b0b cmp r3, #11 - 8006742: d903 bls.n 800674c <_malloc_r+0x68> - 8006744: 6023 str r3, [r4, #0] - 8006746: 441c add r4, r3 - 8006748: 6025 str r5, [r4, #0] - 800674a: e004 b.n 8006756 <_malloc_r+0x72> - 800674c: 6863 ldr r3, [r4, #4] - 800674e: 42a2 cmp r2, r4 - 8006750: bf0c ite eq - 8006752: 600b streq r3, [r1, #0] - 8006754: 6053 strne r3, [r2, #4] - 8006756: 4630 mov r0, r6 - 8006758: f000 f85a bl 8006810 <__malloc_unlock> - 800675c: f104 000b add.w r0, r4, #11 - 8006760: 1d23 adds r3, r4, #4 - 8006762: f020 0007 bic.w r0, r0, #7 - 8006766: 1ac2 subs r2, r0, r3 - 8006768: d0cc beq.n 8006704 <_malloc_r+0x20> - 800676a: 1a1b subs r3, r3, r0 - 800676c: 50a3 str r3, [r4, r2] - 800676e: e7c9 b.n 8006704 <_malloc_r+0x20> - 8006770: 4622 mov r2, r4 - 8006772: 6864 ldr r4, [r4, #4] - 8006774: e7cc b.n 8006710 <_malloc_r+0x2c> - 8006776: 1cc4 adds r4, r0, #3 - 8006778: f024 0403 bic.w r4, r4, #3 - 800677c: 42a0 cmp r0, r4 - 800677e: d0e3 beq.n 8006748 <_malloc_r+0x64> - 8006780: 1a21 subs r1, r4, r0 - 8006782: 4630 mov r0, r6 - 8006784: f000 f82e bl 80067e4 <_sbrk_r> - 8006788: 3001 adds r0, #1 - 800678a: d1dd bne.n 8006748 <_malloc_r+0x64> - 800678c: e7cf b.n 800672e <_malloc_r+0x4a> - 800678e: bf00 nop - 8006790: 200000dc .word 0x200000dc - 8006794: 200000e0 .word 0x200000e0 - -08006798 <_realloc_r>: - 8006798: b5f8 push {r3, r4, r5, r6, r7, lr} - 800679a: 4607 mov r7, r0 - 800679c: 4614 mov r4, r2 - 800679e: 460e mov r6, r1 - 80067a0: b921 cbnz r1, 80067ac <_realloc_r+0x14> - 80067a2: 4611 mov r1, r2 - 80067a4: e8bd 40f8 ldmia.w sp!, {r3, r4, r5, r6, r7, lr} - 80067a8: f7ff bf9c b.w 80066e4 <_malloc_r> - 80067ac: b922 cbnz r2, 80067b8 <_realloc_r+0x20> - 80067ae: f7ff ff4d bl 800664c <_free_r> - 80067b2: 4625 mov r5, r4 - 80067b4: 4628 mov r0, r5 - 80067b6: bdf8 pop {r3, r4, r5, r6, r7, pc} - 80067b8: f000 f830 bl 800681c <_malloc_usable_size_r> - 80067bc: 42a0 cmp r0, r4 - 80067be: d20f bcs.n 80067e0 <_realloc_r+0x48> - 80067c0: 4621 mov r1, r4 - 80067c2: 4638 mov r0, r7 - 80067c4: f7ff ff8e bl 80066e4 <_malloc_r> - 80067c8: 4605 mov r5, r0 - 80067ca: 2800 cmp r0, #0 - 80067cc: d0f2 beq.n 80067b4 <_realloc_r+0x1c> - 80067ce: 4631 mov r1, r6 - 80067d0: 4622 mov r2, r4 - 80067d2: f7ff ff13 bl 80065fc - 80067d6: 4631 mov r1, r6 - 80067d8: 4638 mov r0, r7 - 80067da: f7ff ff37 bl 800664c <_free_r> - 80067de: e7e9 b.n 80067b4 <_realloc_r+0x1c> - 80067e0: 4635 mov r5, r6 - 80067e2: e7e7 b.n 80067b4 <_realloc_r+0x1c> - -080067e4 <_sbrk_r>: - 80067e4: b538 push {r3, r4, r5, lr} - 80067e6: 2300 movs r3, #0 - 80067e8: 4d05 ldr r5, [pc, #20] ; (8006800 <_sbrk_r+0x1c>) - 80067ea: 4604 mov r4, r0 - 80067ec: 4608 mov r0, r1 - 80067ee: 602b str r3, [r5, #0] - 80067f0: f7f9 ff98 bl 8000724 <_sbrk> - 80067f4: 1c43 adds r3, r0, #1 - 80067f6: d102 bne.n 80067fe <_sbrk_r+0x1a> - 80067f8: 682b ldr r3, [r5, #0] - 80067fa: b103 cbz r3, 80067fe <_sbrk_r+0x1a> - 80067fc: 6023 str r3, [r4, #0] - 80067fe: bd38 pop {r3, r4, r5, pc} - 8006800: 20000850 .word 0x20000850 - -08006804 <__malloc_lock>: - 8006804: 4801 ldr r0, [pc, #4] ; (800680c <__malloc_lock+0x8>) - 8006806: f000 b811 b.w 800682c <__retarget_lock_acquire_recursive> - 800680a: bf00 nop - 800680c: 20000858 .word 0x20000858 - -08006810 <__malloc_unlock>: - 8006810: 4801 ldr r0, [pc, #4] ; (8006818 <__malloc_unlock+0x8>) - 8006812: f000 b80c b.w 800682e <__retarget_lock_release_recursive> - 8006816: bf00 nop - 8006818: 20000858 .word 0x20000858 - -0800681c <_malloc_usable_size_r>: - 800681c: f851 3c04 ldr.w r3, [r1, #-4] - 8006820: 1f18 subs r0, r3, #4 - 8006822: 2b00 cmp r3, #0 - 8006824: bfbc itt lt - 8006826: 580b ldrlt r3, [r1, r0] - 8006828: 18c0 addlt r0, r0, r3 - 800682a: 4770 bx lr - -0800682c <__retarget_lock_acquire_recursive>: - 800682c: 4770 bx lr - -0800682e <__retarget_lock_release_recursive>: - 800682e: 4770 bx lr - -08006830 <_init>: - 8006830: b5f8 push {r3, r4, r5, r6, r7, lr} - 8006832: bf00 nop - 8006834: bcf8 pop {r3, r4, r5, r6, r7} - 8006836: bc08 pop {r3} - 8006838: 469e mov lr, r3 - 800683a: 4770 bx lr - -0800683c <_fini>: - 800683c: b5f8 push {r3, r4, r5, r6, r7, lr} - 800683e: bf00 nop - 8006840: bcf8 pop {r3, r4, r5, r6, r7} - 8006842: bc08 pop {r3} - 8006844: 469e mov lr, r3 - 8006846: 4770 bx lr +08005f40 <_fini>: + 8005f40: b5f8 push {r3, r4, r5, r6, r7, lr} + 8005f42: bf00 nop + 8005f44: bcf8 pop {r3, r4, r5, r6, r7} + 8005f46: bc08 pop {r3} + 8005f48: 469e mov lr, r3 + 8005f4a: 4770 bx lr diff --git a/103ze/Debug/103ze_code.map b/103ze/Debug/103ze_code.map index 9876e87..ecbbcc9 100644 --- a/103ze/Debug/103ze_code.map +++ b/103ze/Debug/103ze_code.map @@ -10,69 +10,23 @@ c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externalt c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/crt0.o (__libc_init_array) c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/crt0.o (memset) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - mycode/c.o (sprintf) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) (_svfprintf_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_printf_i) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memchr) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memcpy) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (memmove) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_free_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_malloc_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) (_realloc_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) (_sbrk_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) (__malloc_lock) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) (_malloc_usable_size_r) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) (errno) -c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) (__retarget_lock_acquire_recursive) Allocating common symbols Common symbol size file USERPath 0x4 FATFS/App/fatfs.o -__lock___atexit_recursive_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) -__lock___arc4random_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) hspi2 0x58 Core/Src/main.o -errno 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) ftinfo 0x24 mycode/text.o uwTick 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o pFlash 0x20 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.o -__lock___env_recursive_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) -__lock___sinit_recursive_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) hsram1 0x48 Core/Src/main.o -__lock___malloc_recursive_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) retUSER 0x1 FATFS/App/fatfs.o lcddev 0xa mycode/lcd.o SD 0x230 mycode/c.o Timer2 0x1 mycode/fatfs_sd.o -__lock___at_quick_exit_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) Timer1 0x1 mycode/fatfs_sd.o -__lock___dd_hash_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) -__lock___tz_mutex 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) USERFile 0x22c FATFS/App/fatfs.o USERFatFS 0x230 FATFS/App/fatfs.o -__lock___sfp_recursive_mutex - 0x1 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) Discarded input sections @@ -447,6 +401,15 @@ Discarded input sections .text 0x0000000000000000 0x0 Core/Src/sysmem.o .data 0x0000000000000000 0x0 Core/Src/sysmem.o .bss 0x0000000000000000 0x0 Core/Src/sysmem.o + .bss.__sbrk_heap_end + 0x0000000000000000 0x4 Core/Src/sysmem.o + .text._sbrk 0x0000000000000000 0x6c Core/Src/sysmem.o + .debug_info 0x0000000000000000 0xa25 Core/Src/sysmem.o + .debug_abbrev 0x0000000000000000 0x1bf Core/Src/sysmem.o + .debug_aranges + 0x0000000000000000 0x20 Core/Src/sysmem.o + .debug_ranges 0x0000000000000000 0x10 Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0xff Core/Src/sysmem.o .debug_macro 0x0000000000000000 0xa9c Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x10 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x22 Core/Src/sysmem.o @@ -465,9 +428,16 @@ Discarded input sections .debug_macro 0x0000000000000000 0x71 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x1c Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x12a Core/Src/sysmem.o + .debug_macro 0x0000000000000000 0x23b Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x103 Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x6a Core/Src/sysmem.o .debug_macro 0x0000000000000000 0x1df Core/Src/sysmem.o + .debug_line 0x0000000000000000 0x4f8 Core/Src/sysmem.o + .debug_str 0x0000000000000000 0x6250 Core/Src/sysmem.o + .comment 0x0000000000000000 0x54 Core/Src/sysmem.o + .debug_frame 0x0000000000000000 0x34 Core/Src/sysmem.o + .ARM.attributes + 0x0000000000000000 0x2d Core/Src/sysmem.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o .group 0x0000000000000000 0xc Core/Src/system_stm32f1xx.o @@ -3342,6 +3312,10 @@ Discarded input sections .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + .text.__errno 0x0000000000000000 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + .debug_frame 0x0000000000000000 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + .ARM.attributes + 0x0000000000000000 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-exit.o) @@ -3352,80 +3326,20 @@ Discarded input sections .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) + .data._impure_ptr + 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) + .data.impure_data + 0x0000000000000000 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .rodata._global_impure_ptr 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) + .ARM.attributes + 0x0000000000000000 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .text._sprintf_r - 0x0000000000000000 0x38 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .text.__ssprint_r - 0x0000000000000000 0xf6 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .text.cleanup_glue - 0x0000000000000000 0x1a c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .text._reclaim_reent - 0x0000000000000000 0xb8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_init - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_init_recursive - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_close - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_close_recursive - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_acquire - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_try_acquire - 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_try_acquire_recursive - 0x0000000000000000 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .text.__retarget_lock_release - 0x0000000000000000 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) .text 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o .data 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o .bss 0x0000000000000000 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtend.o @@ -3513,7 +3427,7 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte 0x0000000008000000 g_pfnVectors 0x00000000080001e4 . = ALIGN (0x4) -.text 0x00000000080001e4 0x6664 +.text 0x00000000080001e4 0x5d68 0x00000000080001e4 . = ALIGN (0x4) *(.text) .text 0x00000000080001e4 0x40 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o @@ -3571,507 +3485,448 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .text.SysTick_Handler 0x0000000008000716 0xc Core/Src/stm32f1xx_it.o 0x0000000008000716 SysTick_Handler - *fill* 0x0000000008000722 0x2 - .text._sbrk 0x0000000008000724 0x6c Core/Src/sysmem.o - 0x0000000008000724 _sbrk .text.SystemInit - 0x0000000008000790 0xc Core/Src/system_stm32f1xx.o - 0x0000000008000790 SystemInit + 0x0000000008000722 0xc Core/Src/system_stm32f1xx.o + 0x0000000008000722 SystemInit + *fill* 0x000000000800072e 0x2 .text.Reset_Handler - 0x000000000800079c 0x48 Core/Startup/startup_stm32f103zetx.o - 0x000000000800079c Reset_Handler + 0x0000000008000730 0x48 Core/Startup/startup_stm32f103zetx.o + 0x0000000008000730 Reset_Handler .text.Default_Handler - 0x00000000080007e4 0x2 Core/Startup/startup_stm32f103zetx.o - 0x00000000080007e4 RTC_Alarm_IRQHandler - 0x00000000080007e4 EXTI2_IRQHandler - 0x00000000080007e4 TIM8_TRG_COM_IRQHandler - 0x00000000080007e4 TIM8_CC_IRQHandler - 0x00000000080007e4 TIM1_CC_IRQHandler - 0x00000000080007e4 TIM6_IRQHandler - 0x00000000080007e4 PVD_IRQHandler - 0x00000000080007e4 SDIO_IRQHandler - 0x00000000080007e4 EXTI3_IRQHandler - 0x00000000080007e4 EXTI0_IRQHandler - 0x00000000080007e4 I2C2_EV_IRQHandler - 0x00000000080007e4 ADC1_2_IRQHandler - 0x00000000080007e4 SPI1_IRQHandler - 0x00000000080007e4 TAMPER_IRQHandler - 0x00000000080007e4 TIM8_UP_IRQHandler - 0x00000000080007e4 DMA2_Channel2_IRQHandler - 0x00000000080007e4 DMA1_Channel4_IRQHandler - 0x00000000080007e4 USART3_IRQHandler - 0x00000000080007e4 RTC_IRQHandler - 0x00000000080007e4 DMA1_Channel7_IRQHandler - 0x00000000080007e4 CAN1_RX1_IRQHandler - 0x00000000080007e4 UART5_IRQHandler - 0x00000000080007e4 ADC3_IRQHandler - 0x00000000080007e4 TIM4_IRQHandler - 0x00000000080007e4 DMA2_Channel1_IRQHandler - 0x00000000080007e4 I2C1_EV_IRQHandler - 0x00000000080007e4 DMA1_Channel6_IRQHandler - 0x00000000080007e4 UART4_IRQHandler - 0x00000000080007e4 TIM3_IRQHandler - 0x00000000080007e4 RCC_IRQHandler - 0x00000000080007e4 TIM1_TRG_COM_IRQHandler - 0x00000000080007e4 DMA1_Channel1_IRQHandler - 0x00000000080007e4 Default_Handler - 0x00000000080007e4 EXTI15_10_IRQHandler - 0x00000000080007e4 TIM7_IRQHandler - 0x00000000080007e4 TIM5_IRQHandler - 0x00000000080007e4 EXTI9_5_IRQHandler - 0x00000000080007e4 SPI2_IRQHandler - 0x00000000080007e4 DMA1_Channel5_IRQHandler - 0x00000000080007e4 EXTI4_IRQHandler - 0x00000000080007e4 USB_LP_CAN1_RX0_IRQHandler - 0x00000000080007e4 USB_HP_CAN1_TX_IRQHandler - 0x00000000080007e4 DMA1_Channel3_IRQHandler - 0x00000000080007e4 FSMC_IRQHandler - 0x00000000080007e4 TIM1_UP_IRQHandler - 0x00000000080007e4 WWDG_IRQHandler - 0x00000000080007e4 TIM2_IRQHandler - 0x00000000080007e4 TIM1_BRK_IRQHandler - 0x00000000080007e4 EXTI1_IRQHandler - 0x00000000080007e4 DMA2_Channel4_5_IRQHandler - 0x00000000080007e4 USART2_IRQHandler - 0x00000000080007e4 I2C2_ER_IRQHandler - 0x00000000080007e4 DMA1_Channel2_IRQHandler - 0x00000000080007e4 TIM8_BRK_IRQHandler - 0x00000000080007e4 CAN1_SCE_IRQHandler - 0x00000000080007e4 FLASH_IRQHandler - 0x00000000080007e4 USART1_IRQHandler - 0x00000000080007e4 SPI3_IRQHandler - 0x00000000080007e4 I2C1_ER_IRQHandler - 0x00000000080007e4 USBWakeUp_IRQHandler - 0x00000000080007e4 DMA2_Channel3_IRQHandler - *fill* 0x00000000080007e6 0x2 + 0x0000000008000778 0x2 Core/Startup/startup_stm32f103zetx.o + 0x0000000008000778 RTC_Alarm_IRQHandler + 0x0000000008000778 EXTI2_IRQHandler + 0x0000000008000778 TIM8_TRG_COM_IRQHandler + 0x0000000008000778 TIM8_CC_IRQHandler + 0x0000000008000778 TIM1_CC_IRQHandler + 0x0000000008000778 TIM6_IRQHandler + 0x0000000008000778 PVD_IRQHandler + 0x0000000008000778 SDIO_IRQHandler + 0x0000000008000778 EXTI3_IRQHandler + 0x0000000008000778 EXTI0_IRQHandler + 0x0000000008000778 I2C2_EV_IRQHandler + 0x0000000008000778 ADC1_2_IRQHandler + 0x0000000008000778 SPI1_IRQHandler + 0x0000000008000778 TAMPER_IRQHandler + 0x0000000008000778 TIM8_UP_IRQHandler + 0x0000000008000778 DMA2_Channel2_IRQHandler + 0x0000000008000778 DMA1_Channel4_IRQHandler + 0x0000000008000778 USART3_IRQHandler + 0x0000000008000778 RTC_IRQHandler + 0x0000000008000778 DMA1_Channel7_IRQHandler + 0x0000000008000778 CAN1_RX1_IRQHandler + 0x0000000008000778 UART5_IRQHandler + 0x0000000008000778 ADC3_IRQHandler + 0x0000000008000778 TIM4_IRQHandler + 0x0000000008000778 DMA2_Channel1_IRQHandler + 0x0000000008000778 I2C1_EV_IRQHandler + 0x0000000008000778 DMA1_Channel6_IRQHandler + 0x0000000008000778 UART4_IRQHandler + 0x0000000008000778 TIM3_IRQHandler + 0x0000000008000778 RCC_IRQHandler + 0x0000000008000778 TIM1_TRG_COM_IRQHandler + 0x0000000008000778 DMA1_Channel1_IRQHandler + 0x0000000008000778 Default_Handler + 0x0000000008000778 EXTI15_10_IRQHandler + 0x0000000008000778 TIM7_IRQHandler + 0x0000000008000778 TIM5_IRQHandler + 0x0000000008000778 EXTI9_5_IRQHandler + 0x0000000008000778 SPI2_IRQHandler + 0x0000000008000778 DMA1_Channel5_IRQHandler + 0x0000000008000778 EXTI4_IRQHandler + 0x0000000008000778 USB_LP_CAN1_RX0_IRQHandler + 0x0000000008000778 USB_HP_CAN1_TX_IRQHandler + 0x0000000008000778 DMA1_Channel3_IRQHandler + 0x0000000008000778 FSMC_IRQHandler + 0x0000000008000778 TIM1_UP_IRQHandler + 0x0000000008000778 WWDG_IRQHandler + 0x0000000008000778 TIM2_IRQHandler + 0x0000000008000778 TIM1_BRK_IRQHandler + 0x0000000008000778 EXTI1_IRQHandler + 0x0000000008000778 DMA2_Channel4_5_IRQHandler + 0x0000000008000778 USART2_IRQHandler + 0x0000000008000778 I2C2_ER_IRQHandler + 0x0000000008000778 DMA1_Channel2_IRQHandler + 0x0000000008000778 TIM8_BRK_IRQHandler + 0x0000000008000778 CAN1_SCE_IRQHandler + 0x0000000008000778 FLASH_IRQHandler + 0x0000000008000778 USART1_IRQHandler + 0x0000000008000778 SPI3_IRQHandler + 0x0000000008000778 I2C1_ER_IRQHandler + 0x0000000008000778 USBWakeUp_IRQHandler + 0x0000000008000778 DMA2_Channel3_IRQHandler + *fill* 0x000000000800077a 0x2 .text.HAL_Init - 0x00000000080007e8 0x2c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x00000000080007e8 HAL_Init + 0x000000000800077c 0x2c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x000000000800077c HAL_Init .text.HAL_InitTick - 0x0000000008000814 0x60 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000008000814 HAL_InitTick + 0x00000000080007a8 0x60 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x00000000080007a8 HAL_InitTick .text.HAL_IncTick - 0x0000000008000874 0x24 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000008000874 HAL_IncTick + 0x0000000008000808 0x24 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000008000808 HAL_IncTick .text.HAL_GetTick - 0x0000000008000898 0x14 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000008000898 HAL_GetTick + 0x000000000800082c 0x14 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x000000000800082c HAL_GetTick .text.HAL_Delay - 0x00000000080008ac 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x00000000080008ac HAL_Delay + 0x0000000008000840 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000008000840 HAL_Delay .text.__NVIC_SetPriorityGrouping - 0x00000000080008f4 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000888 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.__NVIC_GetPriorityGrouping - 0x000000000800093c 0x1c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080008d0 0x1c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.__NVIC_SetPriority - 0x0000000008000958 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080008ec 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.NVIC_EncodePriority - 0x00000000080009ac 0x64 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000940 0x64 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.SysTick_Config - 0x0000000008000a10 0x44 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080009a4 0x44 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .text.HAL_NVIC_SetPriorityGrouping - 0x0000000008000a54 0x16 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x0000000008000a54 HAL_NVIC_SetPriorityGrouping + 0x00000000080009e8 0x16 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080009e8 HAL_NVIC_SetPriorityGrouping .text.HAL_NVIC_SetPriority - 0x0000000008000a6a 0x38 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x0000000008000a6a HAL_NVIC_SetPriority + 0x00000000080009fe 0x38 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x00000000080009fe HAL_NVIC_SetPriority .text.HAL_SYSTICK_Config - 0x0000000008000aa2 0x18 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - 0x0000000008000aa2 HAL_SYSTICK_Config - *fill* 0x0000000008000aba 0x2 + 0x0000000008000a36 0x18 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000008000a36 HAL_SYSTICK_Config + *fill* 0x0000000008000a4e 0x2 .text.HAL_GPIO_Init - 0x0000000008000abc 0x328 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - 0x0000000008000abc HAL_GPIO_Init + 0x0000000008000a50 0x328 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000008000a50 HAL_GPIO_Init .text.HAL_GPIO_WritePin - 0x0000000008000de4 0x30 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - 0x0000000008000de4 HAL_GPIO_WritePin + 0x0000000008000d78 0x30 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000008000d78 HAL_GPIO_WritePin .text.HAL_RCC_OscConfig - 0x0000000008000e14 0x500 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x0000000008000e14 HAL_RCC_OscConfig + 0x0000000008000da8 0x500 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000008000da8 HAL_RCC_OscConfig .text.HAL_RCC_ClockConfig - 0x0000000008001314 0x1d4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x0000000008001314 HAL_RCC_ClockConfig + 0x00000000080012a8 0x1d4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x00000000080012a8 HAL_RCC_ClockConfig .text.HAL_RCC_GetSysClockFreq - 0x00000000080014e8 0xc0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - 0x00000000080014e8 HAL_RCC_GetSysClockFreq + 0x000000000800147c 0xc0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x000000000800147c HAL_RCC_GetSysClockFreq .text.RCC_Delay - 0x00000000080015a8 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x000000000800153c 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .text.HAL_SPI_Init - 0x00000000080015e4 0x108 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x00000000080015e4 HAL_SPI_Init + 0x0000000008001578 0x108 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001578 HAL_SPI_Init .text.HAL_SPI_Transmit - 0x00000000080016ec 0x278 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x00000000080016ec HAL_SPI_Transmit + 0x0000000008001680 0x278 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001680 HAL_SPI_Transmit .text.HAL_SPI_Receive - 0x0000000008001964 0x222 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001964 HAL_SPI_Receive + 0x00000000080018f8 0x222 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000080018f8 HAL_SPI_Receive .text.HAL_SPI_TransmitReceive - 0x0000000008001b86 0x344 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001b86 HAL_SPI_TransmitReceive + 0x0000000008001b1a 0x344 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001b1a HAL_SPI_TransmitReceive .text.HAL_SPI_GetState - 0x0000000008001eca 0x1a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - 0x0000000008001eca HAL_SPI_GetState + 0x0000000008001e5e 0x1a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001e5e HAL_SPI_GetState .text.SPI_WaitFlagStateUntilTimeout - 0x0000000008001ee4 0x110 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001e78 0x110 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.SPI_EndRxTransaction - 0x0000000008001ff4 0xa4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000008001f88 0xa4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.SPI_EndRxTxTransaction - 0x0000000008002098 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x000000000800202c 0x3c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .text.HAL_SRAM_Init - 0x00000000080020d4 0x9a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - 0x00000000080020d4 HAL_SRAM_Init - *fill* 0x000000000800216e 0x2 + 0x0000000008002068 0x9a Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x0000000008002068 HAL_SRAM_Init + *fill* 0x0000000008002102 0x2 .text.FSMC_NORSRAM_Init - 0x0000000008002170 0xd4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x0000000008002170 FSMC_NORSRAM_Init + 0x0000000008002104 0xd4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x0000000008002104 FSMC_NORSRAM_Init .text.FSMC_NORSRAM_Timing_Init - 0x0000000008002244 0x68 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x0000000008002244 FSMC_NORSRAM_Timing_Init + 0x00000000080021d8 0x68 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x00000000080021d8 FSMC_NORSRAM_Timing_Init .text.FSMC_NORSRAM_Extended_Timing_Init - 0x00000000080022ac 0x70 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - 0x00000000080022ac FSMC_NORSRAM_Extended_Timing_Init + 0x0000000008002240 0x70 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x0000000008002240 FSMC_NORSRAM_Extended_Timing_Init .text.MX_FATFS_Init - 0x000000000800231c 0x24 FATFS/App/fatfs.o - 0x000000000800231c MX_FATFS_Init + 0x00000000080022b0 0x24 FATFS/App/fatfs.o + 0x00000000080022b0 MX_FATFS_Init .text.get_fattime - 0x0000000008002340 0xe FATFS/App/fatfs.o - 0x0000000008002340 get_fattime - *fill* 0x000000000800234e 0x2 + 0x00000000080022d4 0xe FATFS/App/fatfs.o + 0x00000000080022d4 get_fattime + *fill* 0x00000000080022e2 0x2 .text.USER_initialize - 0x0000000008002350 0x2c FATFS/Target/user_diskio.o - 0x0000000008002350 USER_initialize + 0x00000000080022e4 0x2c FATFS/Target/user_diskio.o + 0x00000000080022e4 USER_initialize .text.USER_status - 0x000000000800237c 0x2c FATFS/Target/user_diskio.o - 0x000000000800237c USER_status + 0x0000000008002310 0x2c FATFS/Target/user_diskio.o + 0x0000000008002310 USER_status .text.USER_read - 0x00000000080023a8 0x26 FATFS/Target/user_diskio.o - 0x00000000080023a8 USER_read + 0x000000000800233c 0x26 FATFS/Target/user_diskio.o + 0x000000000800233c USER_read .text.USER_write - 0x00000000080023ce 0x26 FATFS/Target/user_diskio.o - 0x00000000080023ce USER_write + 0x0000000008002362 0x26 FATFS/Target/user_diskio.o + 0x0000000008002362 USER_write .text.USER_ioctl - 0x00000000080023f4 0x2a FATFS/Target/user_diskio.o - 0x00000000080023f4 USER_ioctl - *fill* 0x000000000800241e 0x2 + 0x0000000008002388 0x2a FATFS/Target/user_diskio.o + 0x0000000008002388 USER_ioctl + *fill* 0x00000000080023b2 0x2 .text.disk_status - 0x0000000008002420 0x34 Middlewares/Third_Party/FatFs/src/diskio.o - 0x0000000008002420 disk_status + 0x00000000080023b4 0x34 Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000080023b4 disk_status .text.disk_initialize - 0x0000000008002454 0x4c Middlewares/Third_Party/FatFs/src/diskio.o - 0x0000000008002454 disk_initialize + 0x00000000080023e8 0x4c Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000080023e8 disk_initialize .text.disk_read - 0x00000000080024a0 0x40 Middlewares/Third_Party/FatFs/src/diskio.o - 0x00000000080024a0 disk_read + 0x0000000008002434 0x40 Middlewares/Third_Party/FatFs/src/diskio.o + 0x0000000008002434 disk_read .text.disk_write - 0x00000000080024e0 0x40 Middlewares/Third_Party/FatFs/src/diskio.o - 0x00000000080024e0 disk_write - .text.mem_cpy 0x0000000008002520 0x3c Middlewares/Third_Party/FatFs/src/ff.o - .text.mem_set 0x000000000800255c 0x34 Middlewares/Third_Party/FatFs/src/ff.o - .text.mem_cmp 0x0000000008002590 0x4c Middlewares/Third_Party/FatFs/src/ff.o - .text.chk_chr 0x00000000080025dc 0x34 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002474 0x40 Middlewares/Third_Party/FatFs/src/diskio.o + 0x0000000008002474 disk_write + .text.mem_cpy 0x00000000080024b4 0x3c Middlewares/Third_Party/FatFs/src/ff.o + .text.mem_set 0x00000000080024f0 0x34 Middlewares/Third_Party/FatFs/src/ff.o + .text.mem_cmp 0x0000000008002524 0x4c Middlewares/Third_Party/FatFs/src/ff.o + .text.chk_chr 0x0000000008002570 0x34 Middlewares/Third_Party/FatFs/src/ff.o .text.chk_lock - 0x0000000008002610 0xd8 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080025a4 0xd8 Middlewares/Third_Party/FatFs/src/ff.o .text.enq_lock - 0x00000000080026e8 0x48 Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800267c 0x48 Middlewares/Third_Party/FatFs/src/ff.o .text.inc_lock - 0x0000000008002730 0x16c Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080026c4 0x16c Middlewares/Third_Party/FatFs/src/ff.o .text.clear_lock - 0x000000000800289c 0x54 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002830 0x54 Middlewares/Third_Party/FatFs/src/ff.o .text.sync_window - 0x00000000080028f0 0x92 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002884 0x92 Middlewares/Third_Party/FatFs/src/ff.o .text.move_window - 0x0000000008002982 0x5c Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002916 0x5c Middlewares/Third_Party/FatFs/src/ff.o .text.clust2sect - 0x00000000080029de 0x42 Middlewares/Third_Party/FatFs/src/ff.o - 0x00000000080029de clust2sect - .text.get_fat 0x0000000008002a20 0x174 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008002a20 get_fat - .text.put_fat 0x0000000008002b94 0x21c Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008002b94 put_fat + 0x0000000008002972 0x42 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002972 clust2sect + .text.get_fat 0x00000000080029b4 0x174 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080029b4 get_fat + .text.put_fat 0x0000000008002b28 0x21c Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002b28 put_fat .text.remove_chain - 0x0000000008002db0 0xb4 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002d44 0xb4 Middlewares/Third_Party/FatFs/src/ff.o .text.create_chain - 0x0000000008002e64 0x13a Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002df8 0x13a Middlewares/Third_Party/FatFs/src/ff.o .text.clmt_clust - 0x0000000008002f9e 0x68 Middlewares/Third_Party/FatFs/src/ff.o - .text.dir_sdi 0x0000000008003006 0x128 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008002f32 0x68 Middlewares/Third_Party/FatFs/src/ff.o + .text.dir_sdi 0x0000000008002f9a 0x128 Middlewares/Third_Party/FatFs/src/ff.o .text.dir_next - 0x000000000800312e 0x1ee Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080030c2 0x1ee Middlewares/Third_Party/FatFs/src/ff.o .text.dir_alloc - 0x000000000800331c 0x94 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080032b0 0x94 Middlewares/Third_Party/FatFs/src/ff.o .text.ld_clust - 0x00000000080033b0 0x5a Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003344 0x5a Middlewares/Third_Party/FatFs/src/ff.o .text.st_clust - 0x000000000800340a 0x4c Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800339e 0x4c Middlewares/Third_Party/FatFs/src/ff.o .text.dir_find - 0x0000000008003456 0x9e Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080033ea 0x9e Middlewares/Third_Party/FatFs/src/ff.o .text.dir_register - 0x00000000080034f4 0x72 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x0000000008003566 0x2 + 0x0000000008003488 0x72 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x00000000080034fa 0x2 .text.create_name - 0x0000000008003568 0x180 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080034fc 0x180 Middlewares/Third_Party/FatFs/src/ff.o .text.follow_path - 0x00000000080036e8 0xdc Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000800367c 0xdc Middlewares/Third_Party/FatFs/src/ff.o .text.get_ldnumber - 0x00000000080037c4 0x86 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x000000000800384a 0x2 + 0x0000000008003758 0x86 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x00000000080037de 0x2 .text.check_fs - 0x000000000800384c 0xd4 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080037e0 0xd4 Middlewares/Third_Party/FatFs/src/ff.o .text.find_volume - 0x0000000008003920 0x594 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000080038b4 0x594 Middlewares/Third_Party/FatFs/src/ff.o .text.validate - 0x0000000008003eb4 0x66 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x0000000008003f1a 0x2 - .text.f_mount 0x0000000008003f1c 0x90 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008003f1c f_mount - .text.f_open 0x0000000008003fac 0x416 Middlewares/Third_Party/FatFs/src/ff.o - 0x0000000008003fac f_open - .text.f_read 0x00000000080043c2 0x2d6 Middlewares/Third_Party/FatFs/src/ff.o - 0x00000000080043c2 f_read + 0x0000000008003e48 0x66 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x0000000008003eae 0x2 + .text.f_mount 0x0000000008003eb0 0x90 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003eb0 f_mount + .text.f_open 0x0000000008003f40 0x416 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008003f40 f_open + .text.f_read 0x0000000008004356 0x2d6 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008004356 f_read .text.FATFS_LinkDriverEx - 0x0000000008004698 0x94 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x0000000008004698 FATFS_LinkDriverEx + 0x000000000800462c 0x94 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x000000000800462c FATFS_LinkDriverEx .text.FATFS_LinkDriver - 0x000000000800472c 0x1e Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x000000000800472c FATFS_LinkDriver - *fill* 0x000000000800474a 0x2 - .text.my_main 0x000000000800474c 0xc4 mycode/c.o - 0x000000000800474c my_main + 0x00000000080046c0 0x1e Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x00000000080046c0 FATFS_LinkDriver + *fill* 0x00000000080046de 0x2 + .text.my_main 0x00000000080046e0 0xb4 mycode/c.o + 0x00000000080046e0 my_main .text.W25QXX_Read - 0x0000000008004810 0x6c mycode/falsh.o - 0x0000000008004810 W25QXX_Read - .text.SELECT 0x000000000800487c 0x18 mycode/fatfs_sd.o + 0x0000000008004794 0x6c mycode/falsh.o + 0x0000000008004794 W25QXX_Read + .text.SELECT 0x0000000008004800 0x18 mycode/fatfs_sd.o .text.DESELECT - 0x0000000008004894 0x18 mycode/fatfs_sd.o + 0x0000000008004818 0x18 mycode/fatfs_sd.o .text.SPI_TxByte - 0x00000000080048ac 0x34 mycode/fatfs_sd.o + 0x0000000008004830 0x34 mycode/fatfs_sd.o .text.SPI_RxByte - 0x00000000080048e0 0x3c mycode/fatfs_sd.o + 0x0000000008004864 0x3c mycode/fatfs_sd.o .text.SPI_RxBytePtr - 0x000000000800491c 0x1c mycode/fatfs_sd.o + 0x00000000080048a0 0x1c mycode/fatfs_sd.o .text.SD_ReadyWait - 0x0000000008004938 0x38 mycode/fatfs_sd.o + 0x00000000080048bc 0x38 mycode/fatfs_sd.o .text.SD_PowerOn - 0x0000000008004970 0x98 mycode/fatfs_sd.o + 0x00000000080048f4 0x98 mycode/fatfs_sd.o .text.SD_PowerOff - 0x0000000008004a08 0x18 mycode/fatfs_sd.o + 0x000000000800498c 0x18 mycode/fatfs_sd.o .text.SD_CheckPower - 0x0000000008004a20 0x14 mycode/fatfs_sd.o + 0x00000000080049a4 0x14 mycode/fatfs_sd.o .text.SD_RxDataBlock - 0x0000000008004a34 0x6c mycode/fatfs_sd.o + 0x00000000080049b8 0x6c mycode/fatfs_sd.o .text.SD_TxDataBlock - 0x0000000008004aa0 0xa8 mycode/fatfs_sd.o + 0x0000000008004a24 0xa8 mycode/fatfs_sd.o .text.SD_SendCmd - 0x0000000008004b48 0xa4 mycode/fatfs_sd.o + 0x0000000008004acc 0xa4 mycode/fatfs_sd.o .text.SD_disk_initialize - 0x0000000008004bec 0x1d4 mycode/fatfs_sd.o - 0x0000000008004bec SD_disk_initialize + 0x0000000008004b70 0x1d4 mycode/fatfs_sd.o + 0x0000000008004b70 SD_disk_initialize .text.SD_disk_status - 0x0000000008004dc0 0x28 mycode/fatfs_sd.o - 0x0000000008004dc0 SD_disk_status + 0x0000000008004d44 0x28 mycode/fatfs_sd.o + 0x0000000008004d44 SD_disk_status .text.SD_disk_read - 0x0000000008004de8 0xd4 mycode/fatfs_sd.o - 0x0000000008004de8 SD_disk_read + 0x0000000008004d6c 0xd4 mycode/fatfs_sd.o + 0x0000000008004d6c SD_disk_read .text.SD_disk_write - 0x0000000008004ebc 0x108 mycode/fatfs_sd.o - 0x0000000008004ebc SD_disk_write + 0x0000000008004e40 0x108 mycode/fatfs_sd.o + 0x0000000008004e40 SD_disk_write .text.SD_disk_ioctl - 0x0000000008004fc4 0x264 mycode/fatfs_sd.o - 0x0000000008004fc4 SD_disk_ioctl + 0x0000000008004f48 0x264 mycode/fatfs_sd.o + 0x0000000008004f48 SD_disk_ioctl .text.LCD_WR_REG - 0x0000000008005228 0x1c mycode/lcd.o - 0x0000000008005228 LCD_WR_REG + 0x00000000080051ac 0x1c mycode/lcd.o + 0x00000000080051ac LCD_WR_REG .text.LCD_WR_DATA - 0x0000000008005244 0x20 mycode/lcd.o - 0x0000000008005244 LCD_WR_DATA + 0x00000000080051c8 0x20 mycode/lcd.o + 0x00000000080051c8 LCD_WR_DATA .text.LCD_WriteReg - 0x0000000008005264 0x2c mycode/lcd.o - 0x0000000008005264 LCD_WriteReg + 0x00000000080051e8 0x2c mycode/lcd.o + 0x00000000080051e8 LCD_WriteReg .text.LCD_ReadReg - 0x0000000008005290 0x28 mycode/lcd.o - 0x0000000008005290 LCD_ReadReg + 0x0000000008005214 0x28 mycode/lcd.o + 0x0000000008005214 LCD_ReadReg .text.LCD_Scan_Dir - 0x00000000080052b8 0x2dc mycode/lcd.o - 0x00000000080052b8 LCD_Scan_Dir + 0x000000000800523c 0x2dc mycode/lcd.o + 0x000000000800523c LCD_Scan_Dir .text.LCD_Display_Dir - 0x0000000008005594 0x18c mycode/lcd.o - 0x0000000008005594 LCD_Display_Dir + 0x0000000008005518 0x18c mycode/lcd.o + 0x0000000008005518 LCD_Display_Dir .text.LCDx_Init - 0x0000000008005720 0x1ec mycode/lcd.o - 0x0000000008005720 LCDx_Init + 0x00000000080056a4 0x1ec mycode/lcd.o + 0x00000000080056a4 LCDx_Init .text.LCD_SetCursor - 0x000000000800590c 0x120 mycode/lcd.o - 0x000000000800590c LCD_SetCursor + 0x0000000008005890 0x120 mycode/lcd.o + 0x0000000008005890 LCD_SetCursor .text.LCD_set_dot - 0x0000000008005a2c 0x40 mycode/lcd.o - 0x0000000008005a2c LCD_set_dot + 0x00000000080059b0 0x40 mycode/lcd.o + 0x00000000080059b0 LCD_set_dot .text.LCD_Clear - 0x0000000008005a6c 0xa4 mycode/lcd.o - 0x0000000008005a6c LCD_Clear + 0x00000000080059f0 0xa4 mycode/lcd.o + 0x00000000080059f0 LCD_Clear .text.font_init - 0x0000000008005b10 0x5c mycode/text.o - 0x0000000008005b10 font_init + 0x0000000008005a94 0x5c mycode/text.o + 0x0000000008005a94 font_init .text.Get_HzMat - 0x0000000008005b6c 0x10c mycode/text.o - 0x0000000008005b6c Get_HzMat + 0x0000000008005af0 0x10c mycode/text.o + 0x0000000008005af0 Get_HzMat .text.Show_Font - 0x0000000008005c78 0x110 mycode/text.o - 0x0000000008005c78 Show_Font + 0x0000000008005bfc 0x110 mycode/text.o + 0x0000000008005bfc Show_Font .text.LCD_ShowChar - 0x0000000008005d88 0xf8 mycode/text.o - 0x0000000008005d88 LCD_ShowChar + 0x0000000008005d0c 0xf8 mycode/text.o + 0x0000000008005d0c LCD_ShowChar .text.LCD_ShowString - 0x0000000008005e80 0xd8 mycode/text.o - 0x0000000008005e80 LCD_ShowString - .text.__errno 0x0000000008005f58 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) - 0x0000000008005f58 __errno + 0x0000000008005e04 0xd8 mycode/text.o + 0x0000000008005e04 LCD_ShowString .text.__libc_init_array - 0x0000000008005f64 0x48 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) - 0x0000000008005f64 __libc_init_array - .text.memset 0x0000000008005fac 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) - 0x0000000008005fac memset - .text.sprintf 0x0000000008005fbc 0x40 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - 0x0000000008005fbc siprintf - 0x0000000008005fbc sprintf - .text.__ssputs_r - 0x0000000008005ffc 0xb6 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - 0x0000000008005ffc __ssputs_r - *fill* 0x00000000080060b2 0x2 - .text._svfprintf_r - 0x00000000080060b4 0x200 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - 0x00000000080060b4 _svfiprintf_r - 0x00000000080060b4 _svfprintf_r - .text._printf_common - 0x00000000080062b4 0xde c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - 0x00000000080062b4 _printf_common - *fill* 0x0000000008006392 0x2 - .text._printf_i - 0x0000000008006394 0x24c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - 0x0000000008006394 _printf_i - .text.memchr 0x00000000080065e0 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - 0x00000000080065e0 memchr - .text.memcpy 0x00000000080065fc 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - 0x00000000080065fc memcpy - .text.memmove 0x0000000008006618 0x34 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - 0x0000000008006618 memmove - .text._free_r 0x000000000800664c 0x98 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - 0x000000000800664c _free_r - .text._malloc_r - 0x00000000080066e4 0xb4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - 0x00000000080066e4 _malloc_r - .text._realloc_r - 0x0000000008006798 0x4c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - 0x0000000008006798 _realloc_r - .text._sbrk_r 0x00000000080067e4 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - 0x00000000080067e4 _sbrk_r - .text.__malloc_lock - 0x0000000008006804 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - 0x0000000008006804 __malloc_lock - .text.__malloc_unlock - 0x0000000008006810 0xc c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - 0x0000000008006810 __malloc_unlock - .text._malloc_usable_size_r - 0x000000000800681c 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - 0x000000000800681c _malloc_usable_size_r - .text.__retarget_lock_acquire_recursive - 0x000000000800682c 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - 0x000000000800682c __retarget_lock_acquire_recursive - .text.__retarget_lock_release_recursive - 0x000000000800682e 0x2 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - 0x000000000800682e __retarget_lock_release_recursive + 0x0000000008005edc 0x48 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + 0x0000000008005edc __libc_init_array + .text.memset 0x0000000008005f24 0x10 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) + 0x0000000008005f24 memset *(.glue_7) - .glue_7 0x0000000008006830 0x0 linker stubs + .glue_7 0x0000000008005f34 0x0 linker stubs *(.glue_7t) - .glue_7t 0x0000000008006830 0x0 linker stubs + .glue_7t 0x0000000008005f34 0x0 linker stubs *(.eh_frame) - .eh_frame 0x0000000008006830 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .eh_frame 0x0000000008005f34 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o *(.init) - .init 0x0000000008006830 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o - 0x0000000008006830 _init - .init 0x0000000008006834 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + .init 0x0000000008005f34 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o + 0x0000000008005f34 _init + .init 0x0000000008005f38 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o *(.fini) - .fini 0x000000000800683c 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o - 0x000000000800683c _fini - .fini 0x0000000008006840 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o - 0x0000000008006848 . = ALIGN (0x4) - 0x0000000008006848 _etext = . + .fini 0x0000000008005f40 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crti.o + 0x0000000008005f40 _fini + .fini 0x0000000008005f44 0x8 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + 0x0000000008005f4c . = ALIGN (0x4) + 0x0000000008005f4c _etext = . -.vfp11_veneer 0x0000000008006848 0x0 - .vfp11_veneer 0x0000000008006848 0x0 linker stubs +.vfp11_veneer 0x0000000008005f4c 0x0 + .vfp11_veneer 0x0000000008005f4c 0x0 linker stubs -.v4_bx 0x0000000008006848 0x0 - .v4_bx 0x0000000008006848 0x0 linker stubs +.v4_bx 0x0000000008005f4c 0x0 + .v4_bx 0x0000000008005f4c 0x0 linker stubs -.iplt 0x0000000008006848 0x0 - .iplt 0x0000000008006848 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o +.iplt 0x0000000008005f4c 0x0 + .iplt 0x0000000008005f4c 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o -.rodata 0x0000000008006848 0xb9c - 0x0000000008006848 . = ALIGN (0x4) +.rodata 0x0000000008005f4c 0xb60 + 0x0000000008005f4c . = ALIGN (0x4) *(.rodata) - .rodata 0x0000000008006848 0x10 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .rodata 0x0000000008006858 0x44 Middlewares/Third_Party/FatFs/src/ff.o - .rodata 0x000000000800689c 0x1d mycode/c.o + .rodata 0x0000000008005f4c 0x10 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .rodata 0x0000000008005f5c 0x44 Middlewares/Third_Party/FatFs/src/ff.o + .rodata 0x0000000008005fa0 0x18 mycode/c.o *(.rodata*) - *fill* 0x00000000080068b9 0x3 .rodata.AHBPrescTable - 0x00000000080068bc 0x10 Core/Src/system_stm32f1xx.o - 0x00000000080068bc AHBPrescTable - .rodata.ExCvt 0x00000000080068cc 0x80 Middlewares/Third_Party/FatFs/src/ff.o + 0x0000000008005fb8 0x10 Core/Src/system_stm32f1xx.o + 0x0000000008005fb8 AHBPrescTable + .rodata.ExCvt 0x0000000008005fc8 0x80 Middlewares/Third_Party/FatFs/src/ff.o .rodata.asc2_1206 - 0x000000000800694c 0x474 mycode/text.o - 0x000000000800694c asc2_1206 + 0x0000000008006048 0x474 mycode/text.o + 0x0000000008006048 asc2_1206 .rodata.asc2_1608 - 0x0000000008006dc0 0x5f0 mycode/text.o - 0x0000000008006dc0 asc2_1608 - .rodata._svfprintf_r.str1.1 - 0x00000000080073b0 0x11 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .rodata._printf_i.str1.1 - 0x00000000080073c1 0x22 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - 0x00000000080073e4 . = ALIGN (0x4) - *fill* 0x00000000080073e3 0x1 + 0x00000000080064bc 0x5f0 mycode/text.o + 0x00000000080064bc asc2_1608 + 0x0000000008006aac . = ALIGN (0x4) -.rel.dyn 0x00000000080073e4 0x0 - .rel.iplt 0x00000000080073e4 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o +.rel.dyn 0x0000000008006aac 0x0 + .rel.iplt 0x0000000008006aac 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o -.ARM.extab 0x00000000080073e4 0x0 - 0x00000000080073e4 . = ALIGN (0x4) +.ARM.extab 0x0000000008006aac 0x0 + 0x0000000008006aac . = ALIGN (0x4) *(.ARM.extab* .gnu.linkonce.armextab.*) - 0x00000000080073e4 . = ALIGN (0x4) + 0x0000000008006aac . = ALIGN (0x4) -.ARM 0x00000000080073e4 0x0 - 0x00000000080073e4 . = ALIGN (0x4) - 0x00000000080073e4 __exidx_start = . +.ARM 0x0000000008006aac 0x0 + 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008006aac __exidx_start = . *(.ARM.exidx*) - 0x00000000080073e4 __exidx_end = . - 0x00000000080073e4 . = ALIGN (0x4) + 0x0000000008006aac __exidx_end = . + 0x0000000008006aac . = ALIGN (0x4) -.preinit_array 0x00000000080073e4 0x0 - 0x00000000080073e4 . = ALIGN (0x4) - 0x00000000080073e4 PROVIDE (__preinit_array_start = .) +.preinit_array 0x0000000008006aac 0x0 + 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008006aac PROVIDE (__preinit_array_start = .) *(.preinit_array*) - 0x00000000080073e4 PROVIDE (__preinit_array_end = .) - 0x00000000080073e4 . = ALIGN (0x4) + 0x0000000008006aac PROVIDE (__preinit_array_end = .) + 0x0000000008006aac . = ALIGN (0x4) -.init_array 0x00000000080073e4 0x4 - 0x00000000080073e4 . = ALIGN (0x4) - 0x00000000080073e4 PROVIDE (__init_array_start = .) +.init_array 0x0000000008006aac 0x4 + 0x0000000008006aac . = ALIGN (0x4) + 0x0000000008006aac PROVIDE (__init_array_start = .) *(SORT_BY_NAME(.init_array.*)) *(.init_array*) - .init_array 0x00000000080073e4 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o - 0x00000000080073e8 PROVIDE (__init_array_end = .) - 0x00000000080073e8 . = ALIGN (0x4) + .init_array 0x0000000008006aac 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + 0x0000000008006ab0 PROVIDE (__init_array_end = .) + 0x0000000008006ab0 . = ALIGN (0x4) -.fini_array 0x00000000080073e8 0x4 - 0x00000000080073e8 . = ALIGN (0x4) +.fini_array 0x0000000008006ab0 0x4 + 0x0000000008006ab0 . = ALIGN (0x4) [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_NAME(.fini_array.*)) *(.fini_array*) - .fini_array 0x00000000080073e8 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .fini_array 0x0000000008006ab0 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o [!provide] PROVIDE (__fini_array_end = .) - 0x00000000080073ec . = ALIGN (0x4) - 0x00000000080073ec _sidata = LOADADDR (.data) + 0x0000000008006ab4 . = ALIGN (0x4) + 0x0000000008006ab4 _sidata = LOADADDR (.data) -.data 0x0000000020000000 0x88 load address 0x00000000080073ec +.data 0x0000000020000000 0x24 load address 0x0000000008006ab4 0x0000000020000000 . = ALIGN (0x4) 0x0000000020000000 _sdata = . *(.data) @@ -4091,96 +3946,70 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte 0x000000002000000c 0x14 FATFS/Target/user_diskio.o 0x000000002000000c USER_Driver .data.Stat 0x0000000020000020 0x1 mycode/fatfs_sd.o - *fill* 0x0000000020000021 0x3 - .data._impure_ptr - 0x0000000020000024 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) - 0x0000000020000024 _impure_ptr - .data.impure_data - 0x0000000020000028 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) *(.RamFunc) *(.RamFunc*) - 0x0000000020000088 . = ALIGN (0x4) - 0x0000000020000088 _edata = . + 0x0000000020000024 . = ALIGN (0x4) + *fill* 0x0000000020000021 0x3 + 0x0000000020000024 _edata = . -.igot.plt 0x0000000020000088 0x0 load address 0x0000000008007474 - .igot.plt 0x0000000020000088 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o - 0x0000000020000088 . = ALIGN (0x4) +.igot.plt 0x0000000020000024 0x0 load address 0x0000000008006ad8 + .igot.plt 0x0000000020000024 0x0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + 0x0000000020000024 . = ALIGN (0x4) -.bss 0x0000000020000088 0x7d8 load address 0x0000000008007474 - 0x0000000020000088 _sbss = . - 0x0000000020000088 __bss_start__ = _sbss +.bss 0x0000000020000024 0x7bc load address 0x0000000008006ad8 + 0x0000000020000024 _sbss = . + 0x0000000020000024 __bss_start__ = _sbss *(.bss) - .bss 0x0000000020000088 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o + .bss 0x0000000020000024 0x1c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtbegin.o *(.bss*) .bss.FSMC_Initialized - 0x00000000200000a4 0x4 Core/Src/stm32f1xx_hal_msp.o - .bss.__sbrk_heap_end - 0x00000000200000a8 0x4 Core/Src/sysmem.o - .bss.FatFs 0x00000000200000ac 0x4 Middlewares/Third_Party/FatFs/src/ff.o - .bss.Fsid 0x00000000200000b0 0x2 Middlewares/Third_Party/FatFs/src/ff.o - *fill* 0x00000000200000b2 0x2 - .bss.Files 0x00000000200000b4 0x18 Middlewares/Third_Party/FatFs/src/ff.o - .bss.disk 0x00000000200000cc 0xc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - 0x00000000200000cc disk - .bss.CardType 0x00000000200000d8 0x1 mycode/fatfs_sd.o + 0x0000000020000040 0x4 Core/Src/stm32f1xx_hal_msp.o + .bss.FatFs 0x0000000020000044 0x4 Middlewares/Third_Party/FatFs/src/ff.o + .bss.Fsid 0x0000000020000048 0x2 Middlewares/Third_Party/FatFs/src/ff.o + *fill* 0x000000002000004a 0x2 + .bss.Files 0x000000002000004c 0x18 Middlewares/Third_Party/FatFs/src/ff.o + .bss.disk 0x0000000020000064 0xc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x0000000020000064 disk + .bss.CardType 0x0000000020000070 0x1 mycode/fatfs_sd.o .bss.PowerFlag - 0x00000000200000d9 0x1 mycode/fatfs_sd.o - *fill* 0x00000000200000da 0x2 - .bss.__malloc_free_list - 0x00000000200000dc 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - 0x00000000200000dc __malloc_free_list - .bss.__malloc_sbrk_start - 0x00000000200000e0 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - 0x00000000200000e0 __malloc_sbrk_start + 0x0000000020000071 0x1 mycode/fatfs_sd.o *(COMMON) - COMMON 0x00000000200000e4 0xa0 Core/Src/main.o - 0x00000000200000e4 hspi2 - 0x000000002000013c hsram1 - COMMON 0x0000000020000184 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - 0x0000000020000184 uwTick - COMMON 0x0000000020000188 0x464 FATFS/App/fatfs.o - 0x0000000020000188 USERPath - 0x000000002000018c retUSER - 0x0000000020000190 USERFile - 0x00000000200003bc USERFatFS - COMMON 0x00000000200005ec 0x230 mycode/c.o - 0x00000000200005ec SD - COMMON 0x000000002000081c 0x2 mycode/fatfs_sd.o - 0x000000002000081c Timer2 - 0x000000002000081d Timer1 - *fill* 0x000000002000081e 0x2 - COMMON 0x0000000020000820 0xa mycode/lcd.o - 0x0000000020000820 lcddev - *fill* 0x000000002000082a 0x2 - COMMON 0x000000002000082c 0x24 mycode/text.o - 0x000000002000082c ftinfo - COMMON 0x0000000020000850 0x4 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - 0x0000000020000850 errno - COMMON 0x0000000020000854 0x9 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - 0x0000000020000854 __lock___atexit_recursive_mutex - 0x0000000020000855 __lock___arc4random_mutex - 0x0000000020000856 __lock___env_recursive_mutex - 0x0000000020000857 __lock___sinit_recursive_mutex - 0x0000000020000858 __lock___malloc_recursive_mutex - 0x0000000020000859 __lock___at_quick_exit_mutex - 0x000000002000085a __lock___dd_hash_mutex - 0x000000002000085b __lock___tz_mutex - 0x000000002000085c __lock___sfp_recursive_mutex - 0x0000000020000860 . = ALIGN (0x4) - *fill* 0x000000002000085d 0x3 - 0x0000000020000860 _ebss = . - 0x0000000020000860 __bss_end__ = _ebss + *fill* 0x0000000020000072 0x2 + COMMON 0x0000000020000074 0xa0 Core/Src/main.o + 0x0000000020000074 hspi2 + 0x00000000200000cc hsram1 + COMMON 0x0000000020000114 0x4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000020000114 uwTick + COMMON 0x0000000020000118 0x464 FATFS/App/fatfs.o + 0x0000000020000118 USERPath + 0x000000002000011c retUSER + 0x0000000020000120 USERFile + 0x000000002000034c USERFatFS + COMMON 0x000000002000057c 0x230 mycode/c.o + 0x000000002000057c SD + COMMON 0x00000000200007ac 0x2 mycode/fatfs_sd.o + 0x00000000200007ac Timer2 + 0x00000000200007ad Timer1 + *fill* 0x00000000200007ae 0x2 + COMMON 0x00000000200007b0 0xa mycode/lcd.o + 0x00000000200007b0 lcddev + *fill* 0x00000000200007ba 0x2 + COMMON 0x00000000200007bc 0x24 mycode/text.o + 0x00000000200007bc ftinfo + 0x00000000200007e0 . = ALIGN (0x4) + 0x00000000200007e0 _ebss = . + 0x00000000200007e0 __bss_end__ = _ebss ._user_heap_stack - 0x0000000020000860 0x1000 load address 0x0000000008007474 - 0x0000000020000860 . = ALIGN (0x8) + 0x00000000200007e0 0x1000 load address 0x0000000008006ad8 + 0x00000000200007e0 . = ALIGN (0x8) [!provide] PROVIDE (end = .) - 0x0000000020000860 PROVIDE (_end = .) - 0x0000000020001060 . = (. + _Min_Heap_Size) - *fill* 0x0000000020000860 0x800 - 0x0000000020001860 . = (. + _Min_Stack_Size) - *fill* 0x0000000020001060 0x800 - 0x0000000020001860 . = ALIGN (0x8) + 0x00000000200007e0 PROVIDE (_end = .) + 0x0000000020000fe0 . = (. + _Min_Heap_Size) + *fill* 0x00000000200007e0 0x800 + 0x00000000200017e0 . = (. + _Min_Stack_Size) + *fill* 0x0000000020000fe0 0x800 + 0x00000000200017e0 . = ALIGN (0x8) /DISCARD/ libc.a(*) @@ -4201,140 +4030,104 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .ARM.attributes 0x00000000000000a4 0x2d Core/Src/stm32f1xx_it.o .ARM.attributes - 0x00000000000000d1 0x2d Core/Src/sysmem.o + 0x00000000000000d1 0x2d Core/Src/system_stm32f1xx.o .ARM.attributes - 0x00000000000000fe 0x2d Core/Src/system_stm32f1xx.o + 0x00000000000000fe 0x21 Core/Startup/startup_stm32f103zetx.o .ARM.attributes - 0x000000000000012b 0x21 Core/Startup/startup_stm32f103zetx.o + 0x000000000000011f 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .ARM.attributes - 0x000000000000014c 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x000000000000014c 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .ARM.attributes - 0x0000000000000179 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000000000179 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .ARM.attributes - 0x00000000000001a6 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x00000000000001a6 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .ARM.attributes - 0x00000000000001d3 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x00000000000001d3 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .ARM.attributes - 0x0000000000000200 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x0000000000000200 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o .ARM.attributes - 0x000000000000022d 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x000000000000022d 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o .ARM.attributes - 0x000000000000025a 0x2d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x000000000000025a 0x2d FATFS/App/fatfs.o .ARM.attributes - 0x0000000000000287 0x2d FATFS/App/fatfs.o + 0x0000000000000287 0x2d FATFS/Target/user_diskio.o .ARM.attributes - 0x00000000000002b4 0x2d FATFS/Target/user_diskio.o + 0x00000000000002b4 0x2d Middlewares/Third_Party/FatFs/src/diskio.o .ARM.attributes - 0x00000000000002e1 0x2d Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000000002e1 0x2d Middlewares/Third_Party/FatFs/src/ff.o .ARM.attributes - 0x000000000000030e 0x2d Middlewares/Third_Party/FatFs/src/ff.o + 0x000000000000030e 0x2d Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .ARM.attributes - 0x000000000000033b 0x2d Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x000000000000033b 0x2d mycode/c.o .ARM.attributes - 0x0000000000000368 0x2d mycode/c.o + 0x0000000000000368 0x2d mycode/falsh.o .ARM.attributes - 0x0000000000000395 0x2d mycode/falsh.o + 0x0000000000000395 0x2d mycode/fatfs_sd.o .ARM.attributes - 0x00000000000003c2 0x2d mycode/fatfs_sd.o + 0x00000000000003c2 0x2d mycode/lcd.o .ARM.attributes - 0x00000000000003ef 0x2d mycode/lcd.o + 0x00000000000003ef 0x2d mycode/text.o .ARM.attributes - 0x000000000000041c 0x2d mycode/text.o + 0x000000000000041c 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) .ARM.attributes - 0x0000000000000449 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) + 0x0000000000000449 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) .ARM.attributes - 0x0000000000000476 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-impure.o) - .ARM.attributes - 0x00000000000004a3 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) - .ARM.attributes - 0x00000000000004d0 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) - .ARM.attributes - 0x00000000000004fd 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .ARM.attributes - 0x000000000000052a 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .ARM.attributes - 0x0000000000000557 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - .ARM.attributes - 0x0000000000000584 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - .ARM.attributes - 0x00000000000005b1 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - .ARM.attributes - 0x00000000000005de 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - .ARM.attributes - 0x000000000000060b 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - .ARM.attributes - 0x0000000000000638 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - .ARM.attributes - 0x0000000000000665 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - .ARM.attributes - 0x0000000000000692 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - .ARM.attributes - 0x00000000000006bf 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - .ARM.attributes - 0x00000000000006ec 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - .ARM.attributes - 0x0000000000000719 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .ARM.attributes - 0x0000000000000746 0x2d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) - .ARM.attributes - 0x0000000000000773 0x1d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o + 0x0000000000000476 0x1d c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp/crtn.o OUTPUT(103ze_code.elf elf32-littlearm) LOAD linker stubs LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc.a LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libm.a LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7-m/nofp\libgcc.a -.debug_info 0x0000000000000000 0xed98 +.debug_info 0x0000000000000000 0xe347 .debug_info 0x0000000000000000 0x117c Core/Src/main.o .debug_info 0x000000000000117c 0xbe6 Core/Src/stm32f1xx_hal_msp.o .debug_info 0x0000000000001d62 0x222 Core/Src/stm32f1xx_it.o - .debug_info 0x0000000000001f84 0xa25 Core/Src/sysmem.o - .debug_info 0x00000000000029a9 0x2be Core/Src/system_stm32f1xx.o - .debug_info 0x0000000000002c67 0x22 Core/Startup/startup_stm32f103zetx.o - .debug_info 0x0000000000002c89 0x7d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_info 0x0000000000003459 0xc42 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_info 0x000000000000409b 0x701 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_info 0x000000000000479c 0x88e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_info 0x000000000000502a 0x16bd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_info 0x00000000000066e7 0xd4b Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_info 0x0000000000007432 0xae7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_info 0x0000000000007f19 0x5e8 FATFS/App/fatfs.o - .debug_info 0x0000000000008501 0xced FATFS/Target/user_diskio.o - .debug_info 0x00000000000091ee 0x4fe Middlewares/Third_Party/FatFs/src/diskio.o - .debug_info 0x00000000000096ec 0x2333 Middlewares/Third_Party/FatFs/src/ff.o - .debug_info 0x000000000000ba1f 0x495 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_info 0x000000000000beb4 0x7ef mycode/c.o - .debug_info 0x000000000000c6a3 0x73b mycode/falsh.o - .debug_info 0x000000000000cdde 0xc6d mycode/fatfs_sd.o - .debug_info 0x000000000000da4b 0x8a2 mycode/lcd.o - .debug_info 0x000000000000e2ed 0xaab mycode/text.o + .debug_info 0x0000000000001f84 0x2be Core/Src/system_stm32f1xx.o + .debug_info 0x0000000000002242 0x22 Core/Startup/startup_stm32f103zetx.o + .debug_info 0x0000000000002264 0x7d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_info 0x0000000000002a34 0xc42 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_info 0x0000000000003676 0x701 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_info 0x0000000000003d77 0x88e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_info 0x0000000000004605 0x16bd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_info 0x0000000000005cc2 0xd4b Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_info 0x0000000000006a0d 0xae7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_info 0x00000000000074f4 0x5e8 FATFS/App/fatfs.o + .debug_info 0x0000000000007adc 0xced FATFS/Target/user_diskio.o + .debug_info 0x00000000000087c9 0x4fe Middlewares/Third_Party/FatFs/src/diskio.o + .debug_info 0x0000000000008cc7 0x2333 Middlewares/Third_Party/FatFs/src/ff.o + .debug_info 0x000000000000affa 0x495 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_info 0x000000000000b48f 0x7c3 mycode/c.o + .debug_info 0x000000000000bc52 0x73b mycode/falsh.o + .debug_info 0x000000000000c38d 0xc6d mycode/fatfs_sd.o + .debug_info 0x000000000000cffa 0x8a2 mycode/lcd.o + .debug_info 0x000000000000d89c 0xaab mycode/text.o -.debug_abbrev 0x0000000000000000 0x2ced +.debug_abbrev 0x0000000000000000 0x2b1d .debug_abbrev 0x0000000000000000 0x292 Core/Src/main.o .debug_abbrev 0x0000000000000292 0x20b Core/Src/stm32f1xx_hal_msp.o .debug_abbrev 0x000000000000049d 0xd2 Core/Src/stm32f1xx_it.o - .debug_abbrev 0x000000000000056f 0x1bf Core/Src/sysmem.o - .debug_abbrev 0x000000000000072e 0x14e Core/Src/system_stm32f1xx.o - .debug_abbrev 0x000000000000087c 0x12 Core/Startup/startup_stm32f103zetx.o - .debug_abbrev 0x000000000000088e 0x1ed Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_abbrev 0x0000000000000a7b 0x313 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_abbrev 0x0000000000000d8e 0x1e8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_abbrev 0x0000000000000f76 0x273 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_abbrev 0x00000000000011e9 0x26e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_abbrev 0x0000000000001457 0x1f2 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_abbrev 0x0000000000001649 0x1ae Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_abbrev 0x00000000000017f7 0x19d FATFS/App/fatfs.o - .debug_abbrev 0x0000000000001994 0x22e FATFS/Target/user_diskio.o - .debug_abbrev 0x0000000000001bc2 0x18b Middlewares/Third_Party/FatFs/src/diskio.o - .debug_abbrev 0x0000000000001d4d 0x2bf Middlewares/Third_Party/FatFs/src/ff.o - .debug_abbrev 0x000000000000200c 0x1bc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_abbrev 0x00000000000021c8 0x201 mycode/c.o - .debug_abbrev 0x00000000000023c9 0x185 mycode/falsh.o - .debug_abbrev 0x000000000000254e 0x2c5 mycode/fatfs_sd.o - .debug_abbrev 0x0000000000002813 0x29c mycode/lcd.o - .debug_abbrev 0x0000000000002aaf 0x23e mycode/text.o + .debug_abbrev 0x000000000000056f 0x14e Core/Src/system_stm32f1xx.o + .debug_abbrev 0x00000000000006bd 0x12 Core/Startup/startup_stm32f103zetx.o + .debug_abbrev 0x00000000000006cf 0x1ed Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_abbrev 0x00000000000008bc 0x313 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_abbrev 0x0000000000000bcf 0x1e8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_abbrev 0x0000000000000db7 0x273 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_abbrev 0x000000000000102a 0x26e Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_abbrev 0x0000000000001298 0x1f2 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_abbrev 0x000000000000148a 0x1ae Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_abbrev 0x0000000000001638 0x19d FATFS/App/fatfs.o + .debug_abbrev 0x00000000000017d5 0x22e FATFS/Target/user_diskio.o + .debug_abbrev 0x0000000000001a03 0x18b Middlewares/Third_Party/FatFs/src/diskio.o + .debug_abbrev 0x0000000000001b8e 0x2bf Middlewares/Third_Party/FatFs/src/ff.o + .debug_abbrev 0x0000000000001e4d 0x1bc Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_abbrev 0x0000000000002009 0x1f0 mycode/c.o + .debug_abbrev 0x00000000000021f9 0x185 mycode/falsh.o + .debug_abbrev 0x000000000000237e 0x2c5 mycode/fatfs_sd.o + .debug_abbrev 0x0000000000002643 0x29c mycode/lcd.o + .debug_abbrev 0x00000000000028df 0x23e mycode/text.o -.debug_aranges 0x0000000000000000 0xc18 +.debug_aranges 0x0000000000000000 0xbf8 .debug_aranges 0x0000000000000000 0x48 Core/Src/main.o .debug_aranges @@ -4342,72 +4135,69 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .debug_aranges 0x0000000000000098 0x60 Core/Src/stm32f1xx_it.o .debug_aranges - 0x00000000000000f8 0x20 Core/Src/sysmem.o + 0x00000000000000f8 0x28 Core/Src/system_stm32f1xx.o .debug_aranges - 0x0000000000000118 0x28 Core/Src/system_stm32f1xx.o + 0x0000000000000120 0x28 Core/Startup/startup_stm32f103zetx.o .debug_aranges - 0x0000000000000140 0x28 Core/Startup/startup_stm32f103zetx.o + 0x0000000000000148 0xe0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .debug_aranges - 0x0000000000000168 0xe0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + 0x0000000000000228 0x100 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o .debug_aranges - 0x0000000000000248 0x100 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + 0x0000000000000328 0x58 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o .debug_aranges - 0x0000000000000348 0x58 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + 0x0000000000000380 0x90 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o .debug_aranges - 0x00000000000003a0 0x90 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + 0x0000000000000410 0x1d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o .debug_aranges - 0x0000000000000430 0x1d0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + 0x00000000000005e0 0xb8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o .debug_aranges - 0x0000000000000600 0xb8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + 0x0000000000000698 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o .debug_aranges - 0x00000000000006b8 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + 0x0000000000000740 0x28 FATFS/App/fatfs.o .debug_aranges - 0x0000000000000760 0x28 FATFS/App/fatfs.o + 0x0000000000000768 0x40 FATFS/Target/user_diskio.o .debug_aranges - 0x0000000000000788 0x40 FATFS/Target/user_diskio.o + 0x00000000000007a8 0x48 Middlewares/Third_Party/FatFs/src/diskio.o .debug_aranges - 0x00000000000007c8 0x48 Middlewares/Third_Party/FatFs/src/diskio.o + 0x00000000000007f0 0x1e8 Middlewares/Third_Party/FatFs/src/ff.o .debug_aranges - 0x0000000000000810 0x1e8 Middlewares/Third_Party/FatFs/src/ff.o + 0x00000000000009d8 0x40 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o .debug_aranges - 0x00000000000009f8 0x40 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + 0x0000000000000a18 0x20 mycode/c.o .debug_aranges - 0x0000000000000a38 0x20 mycode/c.o + 0x0000000000000a38 0x20 mycode/falsh.o .debug_aranges - 0x0000000000000a58 0x20 mycode/falsh.o + 0x0000000000000a58 0xa8 mycode/fatfs_sd.o .debug_aranges - 0x0000000000000a78 0xa8 mycode/fatfs_sd.o + 0x0000000000000b00 0xb8 mycode/lcd.o .debug_aranges - 0x0000000000000b20 0xb8 mycode/lcd.o - .debug_aranges - 0x0000000000000bd8 0x40 mycode/text.o + 0x0000000000000bb8 0x40 mycode/text.o -.debug_ranges 0x0000000000000000 0xab0 +.debug_ranges 0x0000000000000000 0xaa0 .debug_ranges 0x0000000000000000 0x38 Core/Src/main.o .debug_ranges 0x0000000000000038 0x40 Core/Src/stm32f1xx_hal_msp.o .debug_ranges 0x0000000000000078 0x50 Core/Src/stm32f1xx_it.o - .debug_ranges 0x00000000000000c8 0x10 Core/Src/sysmem.o - .debug_ranges 0x00000000000000d8 0x18 Core/Src/system_stm32f1xx.o - .debug_ranges 0x00000000000000f0 0x20 Core/Startup/startup_stm32f103zetx.o - .debug_ranges 0x0000000000000110 0xd0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_ranges 0x00000000000001e0 0xf0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_ranges 0x00000000000002d0 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_ranges 0x0000000000000318 0x80 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_ranges 0x0000000000000398 0x1c0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_ranges 0x0000000000000558 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_ranges 0x0000000000000600 0x98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_ranges 0x0000000000000698 0x18 FATFS/App/fatfs.o - .debug_ranges 0x00000000000006b0 0x30 FATFS/Target/user_diskio.o - .debug_ranges 0x00000000000006e0 0x38 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_ranges 0x0000000000000718 0x1d8 Middlewares/Third_Party/FatFs/src/ff.o - .debug_ranges 0x00000000000008f0 0x30 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_ranges 0x0000000000000920 0x10 mycode/c.o - .debug_ranges 0x0000000000000930 0x10 mycode/falsh.o - .debug_ranges 0x0000000000000940 0x98 mycode/fatfs_sd.o - .debug_ranges 0x00000000000009d8 0xa8 mycode/lcd.o - .debug_ranges 0x0000000000000a80 0x30 mycode/text.o + .debug_ranges 0x00000000000000c8 0x18 Core/Src/system_stm32f1xx.o + .debug_ranges 0x00000000000000e0 0x20 Core/Startup/startup_stm32f103zetx.o + .debug_ranges 0x0000000000000100 0xd0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_ranges 0x00000000000001d0 0xf0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_ranges 0x00000000000002c0 0x48 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_ranges 0x0000000000000308 0x80 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_ranges 0x0000000000000388 0x1c0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_ranges 0x0000000000000548 0xa8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_ranges 0x00000000000005f0 0x98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_ranges 0x0000000000000688 0x18 FATFS/App/fatfs.o + .debug_ranges 0x00000000000006a0 0x30 FATFS/Target/user_diskio.o + .debug_ranges 0x00000000000006d0 0x38 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_ranges 0x0000000000000708 0x1d8 Middlewares/Third_Party/FatFs/src/ff.o + .debug_ranges 0x00000000000008e0 0x30 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_ranges 0x0000000000000910 0x10 mycode/c.o + .debug_ranges 0x0000000000000920 0x10 mycode/falsh.o + .debug_ranges 0x0000000000000930 0x98 mycode/fatfs_sd.o + .debug_ranges 0x00000000000009c8 0xa8 mycode/lcd.o + .debug_ranges 0x0000000000000a70 0x30 mycode/text.o -.debug_macro 0x0000000000000000 0x1abc9 +.debug_macro 0x0000000000000000 0x1a88f .debug_macro 0x0000000000000000 0x20e Core/Src/main.o .debug_macro 0x000000000000020e 0xa9c Core/Src/main.o .debug_macro 0x0000000000000caa 0x21b Core/Src/main.o @@ -4451,111 +4241,106 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .debug_macro 0x0000000000017501 0x8e Core/Src/main.o .debug_macro 0x000000000001758f 0x1b7 Core/Src/stm32f1xx_hal_msp.o .debug_macro 0x0000000000017746 0x1c1 Core/Src/stm32f1xx_it.o - .debug_macro 0x0000000000017907 0xff Core/Src/sysmem.o - .debug_macro 0x0000000000017a06 0x23b Core/Src/sysmem.o - .debug_macro 0x0000000000017c41 0x1a8 Core/Src/system_stm32f1xx.o - .debug_macro 0x0000000000017de9 0x1cc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_macro 0x0000000000017fb5 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_macro 0x000000000001815d 0x213 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_macro 0x0000000000018370 0x1ba Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_macro 0x000000000001852a 0x1b0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_macro 0x00000000000186da 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_macro 0x0000000000018882 0x1e1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_macro 0x0000000000018a63 0x20a FATFS/App/fatfs.o - .debug_macro 0x0000000000018c6d 0xd8 FATFS/App/fatfs.o - .debug_macro 0x0000000000018d45 0x2dc FATFS/Target/user_diskio.o - .debug_macro 0x0000000000019021 0x10 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000019031 0x20 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000019051 0x16 FATFS/Target/user_diskio.o - .debug_macro 0x0000000000019067 0x7c FATFS/Target/user_diskio.o - .debug_macro 0x00000000000190e3 0xbd FATFS/Target/user_diskio.o - .debug_macro 0x00000000000191a0 0x56 FATFS/Target/user_diskio.o - .debug_macro 0x00000000000191f6 0x64 FATFS/Target/user_diskio.o - .debug_macro 0x000000000001925a 0x1f7 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_macro 0x0000000000019451 0x43e Middlewares/Third_Party/FatFs/src/ff.o - .debug_macro 0x000000000001988f 0x58 Middlewares/Third_Party/FatFs/src/ff.o - .debug_macro 0x00000000000198e7 0x1f7 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_macro 0x0000000000019ade 0x233 mycode/c.o - .debug_macro 0x0000000000019d11 0x38a mycode/c.o - .debug_macro 0x000000000001a09b 0x10 mycode/c.o - .debug_macro 0x000000000001a0ab 0x1d1 mycode/falsh.o - .debug_macro 0x000000000001a27c 0x206 mycode/fatfs_sd.o - .debug_macro 0x000000000001a482 0x1d0 mycode/lcd.o - .debug_macro 0x000000000001a652 0x384 mycode/lcd.o - .debug_macro 0x000000000001a9d6 0x1e3 mycode/text.o - .debug_macro 0x000000000001abb9 0x10 mycode/text.o + .debug_macro 0x0000000000017907 0x1a8 Core/Src/system_stm32f1xx.o + .debug_macro 0x0000000000017aaf 0x1cc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_macro 0x0000000000017c7b 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_macro 0x0000000000017e23 0x213 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_macro 0x0000000000018036 0x1ba Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_macro 0x00000000000181f0 0x1b0 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_macro 0x00000000000183a0 0x1a8 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_macro 0x0000000000018548 0x1e1 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_macro 0x0000000000018729 0x20a FATFS/App/fatfs.o + .debug_macro 0x0000000000018933 0xd8 FATFS/App/fatfs.o + .debug_macro 0x0000000000018a0b 0x2dc FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018ce7 0x10 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018cf7 0x20 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018d17 0x16 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018d2d 0x7c FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018da9 0xbd FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018e66 0x56 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018ebc 0x64 FATFS/Target/user_diskio.o + .debug_macro 0x0000000000018f20 0x1f7 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_macro 0x0000000000019117 0x43e Middlewares/Third_Party/FatFs/src/ff.o + .debug_macro 0x0000000000019555 0x58 Middlewares/Third_Party/FatFs/src/ff.o + .debug_macro 0x00000000000195ad 0x1f7 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_macro 0x00000000000197a4 0x233 mycode/c.o + .debug_macro 0x00000000000199d7 0x38a mycode/c.o + .debug_macro 0x0000000000019d61 0x10 mycode/c.o + .debug_macro 0x0000000000019d71 0x1d1 mycode/falsh.o + .debug_macro 0x0000000000019f42 0x206 mycode/fatfs_sd.o + .debug_macro 0x000000000001a148 0x1d0 mycode/lcd.o + .debug_macro 0x000000000001a318 0x384 mycode/lcd.o + .debug_macro 0x000000000001a69c 0x1e3 mycode/text.o + .debug_macro 0x000000000001a87f 0x10 mycode/text.o -.debug_line 0x0000000000000000 0x102bc +.debug_line 0x0000000000000000 0xfdb5 .debug_line 0x0000000000000000 0x884 Core/Src/main.o .debug_line 0x0000000000000884 0x77c Core/Src/stm32f1xx_hal_msp.o .debug_line 0x0000000000001000 0x73c Core/Src/stm32f1xx_it.o - .debug_line 0x000000000000173c 0x4f8 Core/Src/sysmem.o - .debug_line 0x0000000000001c34 0x6f8 Core/Src/system_stm32f1xx.o - .debug_line 0x000000000000232c 0x84 Core/Startup/startup_stm32f103zetx.o - .debug_line 0x00000000000023b0 0x925 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_line 0x0000000000002cd5 0xb0d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_line 0x00000000000037e2 0x9e4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_line 0x00000000000041c6 0xd33 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_line 0x0000000000004ef9 0x1b9d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_line 0x0000000000006a96 0xc98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_line 0x000000000000772e 0x981 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_line 0x00000000000080af 0x715 FATFS/App/fatfs.o - .debug_line 0x00000000000087c4 0x8c7 FATFS/Target/user_diskio.o - .debug_line 0x000000000000908b 0x786 Middlewares/Third_Party/FatFs/src/diskio.o - .debug_line 0x0000000000009811 0x2f22 Middlewares/Third_Party/FatFs/src/ff.o - .debug_line 0x000000000000c733 0x7a3 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_line 0x000000000000ced6 0x754 mycode/c.o - .debug_line 0x000000000000d62a 0x69c mycode/falsh.o - .debug_line 0x000000000000dcc6 0xd6a mycode/fatfs_sd.o - .debug_line 0x000000000000ea30 0xfac mycode/lcd.o - .debug_line 0x000000000000f9dc 0x8e0 mycode/text.o + .debug_line 0x000000000000173c 0x6f8 Core/Src/system_stm32f1xx.o + .debug_line 0x0000000000001e34 0x84 Core/Startup/startup_stm32f103zetx.o + .debug_line 0x0000000000001eb8 0x925 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_line 0x00000000000027dd 0xb0d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_line 0x00000000000032ea 0x9e4 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_line 0x0000000000003cce 0xd33 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_line 0x0000000000004a01 0x1b9d Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_line 0x000000000000659e 0xc98 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_line 0x0000000000007236 0x981 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_line 0x0000000000007bb7 0x715 FATFS/App/fatfs.o + .debug_line 0x00000000000082cc 0x8c7 FATFS/Target/user_diskio.o + .debug_line 0x0000000000008b93 0x786 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_line 0x0000000000009319 0x2f22 Middlewares/Third_Party/FatFs/src/ff.o + .debug_line 0x000000000000c23b 0x7a3 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_line 0x000000000000c9de 0x745 mycode/c.o + .debug_line 0x000000000000d123 0x69c mycode/falsh.o + .debug_line 0x000000000000d7bf 0xd6a mycode/fatfs_sd.o + .debug_line 0x000000000000e529 0xfac mycode/lcd.o + .debug_line 0x000000000000f4d5 0x8e0 mycode/text.o -.debug_str 0x0000000000000000 0x93fbe +.debug_str 0x0000000000000000 0x93ad3 .debug_str 0x0000000000000000 0x8cef8 Core/Src/main.o 0x8d419 (size before relaxing) .debug_str 0x000000000008cef8 0xc5 Core/Src/stm32f1xx_hal_msp.o 0x8c968 (size before relaxing) .debug_str 0x000000000008cfbd 0xbd Core/Src/stm32f1xx_it.o 0x8c33b (size before relaxing) - .debug_str 0x000000000008d07a 0x220a Core/Src/sysmem.o - 0x6250 (size before relaxing) - .debug_str 0x000000000008f284 0x52 Core/Src/system_stm32f1xx.o + .debug_str 0x000000000008d07a 0x52 Core/Src/system_stm32f1xx.o 0x8c285 (size before relaxing) - .debug_str 0x000000000008f2d6 0x36 Core/Startup/startup_stm32f103zetx.o + .debug_str 0x000000000008d0cc 0x36 Core/Startup/startup_stm32f103zetx.o 0x64 (size before relaxing) - .debug_str 0x000000000008f30c 0x5f6 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_str 0x000000000008d102 0x5f6 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o 0x8c9fa (size before relaxing) - .debug_str 0x000000000008f902 0x300 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_str 0x000000000008d6f8 0x300 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o 0x8ca02 (size before relaxing) - .debug_str 0x000000000008fc02 0x324 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_str 0x000000000008d9f8 0x324 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o 0x8c649 (size before relaxing) - .debug_str 0x000000000008ff26 0x24f Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_str 0x000000000008dd1c 0x24f Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o 0x8c682 (size before relaxing) - .debug_str 0x0000000000090175 0x544 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_str 0x000000000008df6b 0x544 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o 0x8cb90 (size before relaxing) - .debug_str 0x00000000000906b9 0x1f7 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_str 0x000000000008e4af 0x1fd Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o 0x8c87b (size before relaxing) - .debug_str 0x00000000000908b0 0x7ef Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_str 0x000000000008e6ac 0x7ef Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o 0x8cc1c (size before relaxing) - .debug_str 0x000000000009109f 0x2f FATFS/App/fatfs.o + .debug_str 0x000000000008ee9b 0x2f FATFS/App/fatfs.o 0x8cbc6 (size before relaxing) - .debug_str 0x00000000000910ce 0x15dc FATFS/Target/user_diskio.o + .debug_str 0x000000000008eeca 0x32fd FATFS/Target/user_diskio.o 0x8fe1e (size before relaxing) - .debug_str 0x00000000000926aa 0x52 Middlewares/Third_Party/FatFs/src/diskio.o + .debug_str 0x00000000000921c7 0x52 Middlewares/Third_Party/FatFs/src/diskio.o 0x8cb03 (size before relaxing) - .debug_str 0x00000000000926fc 0xd6b Middlewares/Third_Party/FatFs/src/ff.o + .debug_str 0x0000000000092219 0xd6b Middlewares/Third_Party/FatFs/src/ff.o 0x8d8f0 (size before relaxing) - .debug_str 0x0000000000093467 0xa2 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_str 0x0000000000092f84 0xa2 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o 0x8cb54 (size before relaxing) - .debug_str 0x0000000000093509 0x6e8 mycode/c.o - 0x8d3b6 (size before relaxing) - .debug_str 0x0000000000093bf1 0x5a mycode/falsh.o + .debug_str 0x0000000000093026 0x6e0 mycode/c.o + 0x8d3ae (size before relaxing) + .debug_str 0x0000000000093706 0x5a mycode/falsh.o 0x8c6c7 (size before relaxing) - .debug_str 0x0000000000093c4b 0x17b mycode/fatfs_sd.o + .debug_str 0x0000000000093760 0x17b mycode/fatfs_sd.o 0x8cafc (size before relaxing) - .debug_str 0x0000000000093dc6 0x18c mycode/lcd.o + .debug_str 0x00000000000938db 0x18c mycode/lcd.o 0x8ca89 (size before relaxing) - .debug_str 0x0000000000093f52 0x6c mycode/text.o + .debug_str 0x0000000000093a67 0x6c mycode/text.o 0x8cdb6 (size before relaxing) .comment 0x0000000000000000 0x53 @@ -4563,7 +4348,6 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte 0x54 (size before relaxing) .comment 0x0000000000000053 0x54 Core/Src/stm32f1xx_hal_msp.o .comment 0x0000000000000053 0x54 Core/Src/stm32f1xx_it.o - .comment 0x0000000000000053 0x54 Core/Src/sysmem.o .comment 0x0000000000000053 0x54 Core/Src/system_stm32f1xx.o .comment 0x0000000000000053 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o .comment 0x0000000000000053 0x54 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o @@ -4583,43 +4367,27 @@ LOAD c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.exte .comment 0x0000000000000053 0x54 mycode/lcd.o .comment 0x0000000000000053 0x54 mycode/text.o -.debug_frame 0x0000000000000000 0x32d8 +.debug_frame 0x0000000000000000 0x2e84 .debug_frame 0x0000000000000000 0xcc Core/Src/main.o .debug_frame 0x00000000000000cc 0x108 Core/Src/stm32f1xx_hal_msp.o .debug_frame 0x00000000000001d4 0x104 Core/Src/stm32f1xx_it.o - .debug_frame 0x00000000000002d8 0x34 Core/Src/sysmem.o - .debug_frame 0x000000000000030c 0x58 Core/Src/system_stm32f1xx.o - .debug_frame 0x0000000000000364 0x334 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o - .debug_frame 0x0000000000000698 0x428 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o - .debug_frame 0x0000000000000ac0 0x14c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o - .debug_frame 0x0000000000000c0c 0x21c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o - .debug_frame 0x0000000000000e28 0x824 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o - .debug_frame 0x000000000000164c 0x30c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o - .debug_frame 0x0000000000001958 0x2dc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o - .debug_frame 0x0000000000001c34 0x4c FATFS/App/fatfs.o - .debug_frame 0x0000000000001c80 0xc4 FATFS/Target/user_diskio.o - .debug_frame 0x0000000000001d44 0xec Middlewares/Third_Party/FatFs/src/diskio.o - .debug_frame 0x0000000000001e30 0x8d0 Middlewares/Third_Party/FatFs/src/ff.o - .debug_frame 0x0000000000002700 0xc8 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o - .debug_frame 0x00000000000027c8 0x30 mycode/c.o - .debug_frame 0x00000000000027f8 0x34 mycode/falsh.o - .debug_frame 0x000000000000282c 0x288 mycode/fatfs_sd.o - .debug_frame 0x0000000000002ab4 0x2ec mycode/lcd.o - .debug_frame 0x0000000000002da0 0xcc mycode/text.o - .debug_frame 0x0000000000002e6c 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-errno.o) - .debug_frame 0x0000000000002e8c 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) - .debug_frame 0x0000000000002eb8 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) - .debug_frame 0x0000000000002ed8 0x6c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sprintf.o) - .debug_frame 0x0000000000002f44 0x90 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-svfprintf.o) - .debug_frame 0x0000000000002fd4 0x60 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-vfprintf_i.o) - .debug_frame 0x0000000000003034 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memchr-stub.o) - .debug_frame 0x000000000000305c 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memcpy-stub.o) - .debug_frame 0x0000000000003084 0x28 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memmove.o) - .debug_frame 0x00000000000030ac 0x38 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-freer.o) - .debug_frame 0x00000000000030e4 0x30 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-mallocr.o) - .debug_frame 0x0000000000003114 0x3c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-reallocr.o) - .debug_frame 0x0000000000003150 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-sbrkr.o) - .debug_frame 0x000000000000317c 0x30 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-mlock.o) - .debug_frame 0x00000000000031ac 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-nano-msizer.o) - .debug_frame 0x00000000000031cc 0x5c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-reent.o) - .debug_frame 0x0000000000003228 0xb0 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-lock.o) + .debug_frame 0x00000000000002d8 0x58 Core/Src/system_stm32f1xx.o + .debug_frame 0x0000000000000330 0x334 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.o + .debug_frame 0x0000000000000664 0x428 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.o + .debug_frame 0x0000000000000a8c 0x14c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.o + .debug_frame 0x0000000000000bd8 0x21c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.o + .debug_frame 0x0000000000000df4 0x824 Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_spi.o + .debug_frame 0x0000000000001618 0x30c Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_sram.o + .debug_frame 0x0000000000001924 0x2dc Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_fsmc.o + .debug_frame 0x0000000000001c00 0x4c FATFS/App/fatfs.o + .debug_frame 0x0000000000001c4c 0xc4 FATFS/Target/user_diskio.o + .debug_frame 0x0000000000001d10 0xec Middlewares/Third_Party/FatFs/src/diskio.o + .debug_frame 0x0000000000001dfc 0x8d0 Middlewares/Third_Party/FatFs/src/ff.o + .debug_frame 0x00000000000026cc 0xc8 Middlewares/Third_Party/FatFs/src/ff_gen_drv.o + .debug_frame 0x0000000000002794 0x30 mycode/c.o + .debug_frame 0x00000000000027c4 0x34 mycode/falsh.o + .debug_frame 0x00000000000027f8 0x288 mycode/fatfs_sd.o + .debug_frame 0x0000000000002a80 0x2ec mycode/lcd.o + .debug_frame 0x0000000000002d6c 0xcc mycode/text.o + .debug_frame 0x0000000000002e38 0x2c c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-init.o) + .debug_frame 0x0000000000002e64 0x20 c:/st/stm32cubeide_1.6.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.9-2020-q2-update.win32_1.5.0.202011040924/tools/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp\libc_nano.a(lib_a-memset.o) diff --git a/103ze/Debug/mycode/c.o b/103ze/Debug/mycode/c.o index c61410aaa01a7fb9ce3098f54ae4569263422467..dc2ee0d5763c95a6c3dac5a4307638feece7b1fa 100644 GIT binary patch delta 101012 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 z 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�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 delta 101331 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
  • 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