From 0bc9e2bd4a0971508af86725b99d401f92309fdb Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Thu, 5 Sep 2024 19:32:35 +0200 Subject: [PATCH] wip --- build/final.elf | Bin 55116 -> 61884 bytes build/final.elf.map | 342 ++- build/gpio.S | 349 +-- build/gpio.i | 34 +- build/gpio.o | Bin 42328 -> 42892 bytes build/main.S | 1132 ++++---- build/main.i | 115 +- build/main.o | Bin 48600 -> 50820 bytes build/timer.S | 286 +- build/timer.i | 12 +- build/timer.o | Bin 44612 -> 44840 bytes build/usart.S | 6072 +++++++++++++++++++++++++++++++++++++++++++ build/usart.i | 2287 ++++++++++++++++ build/usart.o | Bin 0 -> 47848 bytes flake.nix | 7 +- src/gpio.h | 30 +- src/main.c | 5 + src/rcc.h | 8 + src/timer.c | 2 +- src/timer.h | 4 +- src/usart.c | 71 + src/usart.h | 57 + todo.txt | 2 + 23 files changed, 9920 insertions(+), 895 deletions(-) create mode 100644 build/usart.S create mode 100644 build/usart.i create mode 100644 build/usart.o create mode 100644 src/usart.c create mode 100644 src/usart.h create mode 100644 todo.txt diff --git a/build/final.elf b/build/final.elf index 72a7ae973eff74ae76774e019bb5abccd9df6700..64ba45f9d4a3ddeaae627af19f178299fd9816f9 100755 GIT binary patch literal 61884 zcmb<-^>JflWMqH=CI$@#5U-Pkfy0D>f#JwI1_lNe238XW1qMb24F+KbA+S7y09XeH z0|Ntx2O9$e2(yBOAmSj_C>{-g(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R z7&IZkqyXyc&tzfXK*#7#gvo=%VeFAWgZxWx+_0r}1H*b|H!io|4Z?2Kg}*zbxn^%- z{@NhiU_6`Ycf#)u<`4YLyAytANN4QI2x1UaWc5{XQ!|x0!uxM2!(+6fokQ_)x z${8fiuwTS{uUqU7mg)j`;%s16n&nVk$)L@6fkBz!fq*j8FXqouZoe~TB_f-}z|gRT zVZFDvbdHyo^M{6D;S^7A=?o7qS^XJ?ChOj>^(cf$V>Ud z2jOZ-m^2*y_CNsI8RPc^;Q9^ zRrZ$7Py)HI7-YLVlI+gK~ADpm$W(?~cn-Ked0}1jV1oenw>m<=dN@KQJ=i-c(&!UCI1`k-56Cs>$py0vA02(_~U|?VX=JA%!0fj9Kvv3NRH^_8OZw95P1a@!lZ}mpAl32a{zx^+| zmBg?gEo{MVXIKvje^8vEg+El@(px&)!V4^)Z0;?cVdka$!GKvf!NglS!`RFDg95W~ zf}yu`hJlyzmjlJZ33}er8M>gfQY@UH?Jb?9<)!?kAXzv`!&^E_-OKsQgJj_(Rd4Am z6_B{IaFUX@be1AW+*vqD&RaTL7L>M(g_C8y8I*1%$bfv5C^1hwH>E--^gZXj-yZ7x3HZSK7 zEXBiMhsZaB%b(wc9A3XGgA*9`vw?EUhX!U) zUIoP`547Rfm{mmV85kIt>vR|xm<>cC z85kJ27Jvjwj2IZ0gG3t{7#O(!F)}b{u&{GjGBPkQeKcfX;8+84G1D?91_n+LlZDAv zn}LA~#N=QKb7x@S1~GZqJY9kqctA`6Hh-5O23`ObiT6EWREL49pD7 zi6RUPEcVPG7xLayWnf_BW&6d*z~KY(?wmD@3=FIVnRyJnQd1Zh7?>vJv6dy~Fz_ma zB$y`VvV%Oxw;ANSi6sn-j7b@0%x`2vteRjU;`&`HgE!G11E4cNCIa8C2&@I zW>F>v25zTN1_lYXS)eF#bPi%*gT_&OGy?-0G>&3GY-k(>2QjcgqKFBk8X80I6B!uT zATh+iRZw2Uz`?#3WTJBr13Sb(uxHsJ1~PE7L@_V~aO_}aU|@0%GGyR@sR=S-;DD%M zoE6W&zyYz8u`Zf{fdgu5a1a9r#8xI(_aFuih^>qrkqitRyr8g=VC)02!RbPVu>oWZ zIIt9$oc%%=I0QgyRG0#Sof$a5=|Y3aF(`4M#5))m7+66p24+a{!2v2bSRI)`c^)hY zie3hG^H>H3PE+;`pwLla-yhGwz-hvM4&(@Bp^f1T42-_4pz@-JnSo;lxVTAWVPFu> zNljs34CMit!!)so=Uy}eLnM?}#%qjp;ljwkz&MAY z1yuYoFtS85F)*-$%bgcVkaEWXTJHQ}Vqi#70o6KKDj!BjSp%(bU}X)creK7WHK-L1 z2c)cFgqAhX^2L{dfq`=o0|NudS6rnG3=F9ZtRVleEeD0%Tu?Q`6Pe7wz?jJgQo_m% znmXlW0*Ns5@_~bfg(nYGBI|&}lG$dkFmQm{NQ`p?f>K!v+aG6MsLa1E$D<^wSmz)T4cQya|mNM>N*gD6l2G37y`LRu^g97+rf z44I4!49qFTB@CQGVB;p1Fc%jkGjOUycm)i?J}e9zQlQ!sq>3M^Du;oA4P*|3At<3R zFtRi;!{VVJ84?fi(0F*l%)r2FK>hL`8Yj%qIKff=vx3ThPDuIB#=!(F45(KF2oX^O zfYcDG0YGX9)c_zhglYhg8bUPyNDZMH0HlVv8US1#f|PSZY5-PHAoGArR#r9+5m?#E zid43;B9*PINM$Q4*eo8V;2;K8q_UM2scdCMDqC5R%2rmSvXvF7Y-L3%TUn9HR#v34 zl@+OMWko7mS&_gO=dVFQ(gEDKl|I6!3+ z;~WNUXr=)*iXkoMCTOOqfM%M*EDQ|GZE$27>nj#9_@N5F6G!0;z#z4v;vkc?4p^nnxftu*?Axhc%BtY*_OM zqz0BbK;p3G5r_?I9)Z-rG6zT;);t2SVa+2DyMuunM1hp^fT{;Z23AlYvw@oC8m#Os zObiT+psoii2S^zMBdG7e$_Zk#FoHTCtXv>A2P3HW!3s8thY8gEU0AedJg8Cq=f*`gE16xfp1A`13+hb6X2x?8S zgTxt_T!I+bz|LV|ataD!U;{gc1Kd1f13QO@$vMb~feq{&0Vd}lV+J;`b3_>Xk{KA- zz|N6i;03iW7#-Op*cdnrz_k@SGXn!(G6SQdEQrN4u^iUq0Jk4(f3U)`3%CWr%D~FN z@dK=pfl-Blo7;|?nU8^iiI;(y&q|TSn%h!Q)Kl1kn}LB@3?#&D&27o;Da^pYqQSt- zC&SIaz{<+N%weU-2$5it0J#k;f~=X{1f&_PNKwF37^I3rkWrOSn46hTnlDsbkWoOq zQk;Q-6Y2yG1_mxu29Q16!i>y(+}u`Riy4I(7C+*duJP0AtrySf87LK@c-+g^*mvtuE;) z3<=#DaOeu72bG8(JTMXQ07_j@TR}++#hvzG?=yqV0VfZr+tI^N4HAa@4BUz=pk%?0 z&2Jn~TR0dPIAMO{g87YGltEpRfdLXspt$7r6ta;U*m8n-1k$Z1@#VC04cBM*9hq%?Ox9gSoxB#Fba2^MbwwLx zWrL}Mbv0m}5LovFq!xrB_Oo)p)We!Mu%-`44G2Tbwc>`UgO%;DG9Ok+fYgGpD5(3y z0Pzz$*i-BfFNq^dfP8U;i5=_-Mh0nQDX_!Y!OmufI2y%Bushiyu9QL62X+`EJJ?<9 z5LdB+1~fp!ag3}CBHp0EE+;JzDQW^Dn?*t7GA|IBrwt;bok8Rl5fEAJ2_i*3KxB*< zh@5Q=BI`9lq)9M{oBV0Q`#fY@f7ATmo3M7{v4d1C`&w}H((#s*^F1iSwq zSp5V$kjOT$`VU|?Xo9-_4A;TrVh51yA3YG+#0nyJtAfaVJ|J=?*oE$3KW^~{iM+D{ zk#j>pq!=HF)CQZM1GdpX10>SN4>rax*(C%AP{*6Y+4Igr7_q92e8QnV3TFR_Wl6-r5zm3rQkI1R34=FJ~&lu zR{^m@!0ex3-yH#`D>kq%4uDO_RsyMU1C!6dq!BoU^n-1D3s$)g>>dL}kjemXj0=O) zzyWY-iBboN9{|TiCfLT^;8;5WjzI-**cP~h)Lc*ok;h~}WIQ-6NrGdf7o6t*fkU+# zoEpV=Kx*v3>G>sCb{RM}OTnpYCOAyafz`-@-7py(Zed`ND`56nc902C;FOsFPBXi~ z=JSKYAr*o0MJH$;Pd$^o`z7udA-;82|m_FX90FOJ~2mI9k>1kNd1 z;25a~=LIHknZO7x4MM=O^Q1sNY6IsH18|%Qfb-o7a0na#r#e4ydfp5!8E%3@j}u%z z>;R|FE^ul&2M+lPN04d!U_Y{h&36UoxD{YG%mc@rC^+wPg57@`9OI?n{8#|aDaK&a zOu;sO2m2x)9M1p1BB#Kvoe$Q#4xE0n!KHc^*qwr4b2z}c;2t>LHiE|d2B$-Pa1P}Jhky<^O}c~QqQe)Y@;I1$ z1WsLIV0R{fbMbF*+Ry;Ys)0-FR&cG93QjGq;Ii~NnB)hCj}W*lt(F6s`3)TY+2E8A z0rr;<*!)m%I9r2L;0~}kGr=x@3D$cU?5|3&8X<7l@`K$F3Xa*sV3T)%Q;0t}MP-0} zG!Y!*tHCLx0-SDr!Ks}A>}wWqx_S)Gl^ejJ8UR-R6CD0i!Qp>i9OUL0u;XV0ZF?!{i~@M+?E?FTr{LC)i*1<{*{&U|nm$K57P+X?oyr zE&->9L*Nk8a001Z3l4#K;23ED%j)rf#P@>3VX_~Hy#(y4&0v$gOh6*)E+F!TAc(A1 z1f@nZ5e5b}hPeVD@}U%nGz6!Ua$b})IJHayr-u_@pT>bh!vdV@ ztV}^_G~GeuwGa?_NESrSW(JWH)j?z{IKRk)eYXaj-w%RjjTu>4`A&i6y#?4<+1Ys* z7?`=(*~36BZ}tih$t=jh%9QEJz`)GH$^I5B!pg-i&cndK!d?s_nT5F7*Mk|tJnWlz z85mfYMR=Jx`B=F+KvU~HOzdyKf_%*E&Y&>`_O&3AmA77sfq{ipR9q4?BE!$#BLFf{ zR1l<}Nr3&KD2Tzr!p7aOz}Wl}-Vv zP>cl?!74?dY@mJ&6xrIxK^aW13KWr#nOZ^R-%F;opv?G&=>(`w{mPUKitryyD?#D; zo2d?z!TvM-0%>b!UI>bm8O%>Xg0q>|fr|5m%m+d15J1lI-2xJiehx|vNryqHJo!5) zE}L0`KoV^%O7c+WiG2e(Kv5E8oQ5nY5By{l1|`h@jIp46(aK~BDn7cHv_a-hW%363 zaW>N?Q0`jIlmXJbktqh`-u+BFKn=muOfx;9W?)`L9P$fyePe+Od|$fU`P zg&-@YGa7?R?L~~sKnAR3v<9i)#^?(wCU!7_-M*6%?D$=bVAte@B&aO%*_E6u04$FK>2qWV=>5_J&gAh z85mg4F`9w`{|n=LZm6+b+@P9J)E86+NL~U3gtP+4K*bZFnp5>Is4Q1s0y11z9~3@@ zI-nZKcp=Cl%V(fax19mX<@UKCOI<=hb*ZN$DDC+5g3@2`GtiP3Q22|l2f0VK1mqm$ z`ykh7nt?oHDgjD6_BTMm;28sIZv^*&l3)X4A*dK?WZVG?lqSYiAPZ(N&I7qqVlva*1&I3977~?BYI=R9q1Ii9p8Sj8f;%kfwpd|N<@f*l3&lw{?<-rR^ zeNcFPV|)in9N!tGLAL*3GzT>v+L$;&#X>vNdr(&BV9Eu#a~jipP<1t($p+;38BDW4 z#qTnvW1w(a&a@JgoL4Y`C$YCNse*jFo#{QO-M52@6I4|lV`>69@Hmqss7g7{BnS$n z>r8H-NVv;X35u_KOrR-I)<;Y#prYv+(*{sJf6Y_{3W;w_pFs_y24+uC!Pd$Q9$@HU zP6XwdUgoQy0%->GeNgz%WS$L54ojGuKn`5Wd4k)cnV_FJw$aJQ35N`$(7s#-gOr4-GoyBCP%fP_4oT=?tibbH503k;g|+n)EyZ3Q4bP zpk(9y0u+EgJ)p8W&;g_}s0tJi!BU_|4tWD=!G~S~C6q`PP@F~uf$~r^E2y0va~0&y z*ji9%#+ifKk;&&k**)bI$akrXAn~*hAY0OBfNadU18T$N+JjO<-VacM&c6amr3J1a z8w=w=$)n^0s103e28z0}2vE$Ge+RKEzJmh2vIkVOREvXhX3Z>6nyys`g#l`cjPkgK~H?}4JQ zhj9)l3HO5bb2G3`VB7=B+7lV?fKt{Z#%fT3H<@u0C{m^{&HzzU8IOXBlIe^*pct9K z7zhgDnT+}%!)7s7gSsoT89hPu$vnnyAno%Rc|mdu7^6Yia3SMVkl-T5R#1axF{37^ zcwNdk1r#L97?VL2({e^mP$9H}(HrEkm5f_KQMQVaAEaar<6TgPVlCrqP-U==@h^y4 z&sYHp=?#o$K>9W_c7Z~03u7}VQEX*=4~n~Oj7LEUWjo_%kmGkS{sGk;WZ>BaDflSU$?=4x)}RI)LK; z1YFouDOm!FJZKr!}WC8`xe@0JGwrpT31*vRgN(2>hO-!>v7IiV*1C^%TOfeuECNk{+h1n#g z+aMoJX8H-rAXAvCKw&nOi4!C@jj0w?Zp>h+136+Q(|u5E&SLrs$`rGiVnDfT4$~Qs z+%l%+pnSKS$qAGSRx$B_1XnY?0J(Y%lL;sXtYvx+N=xgQPJ@cH^-Rk_)^21v14`wa zm>z(r%}fd)m0Orjf>ds0+Rh2m&%nSc>j+AeioZZHp_~WGc`7eKrKQo<0H_M4zo3#s zgb7q)iLM64ibMk_fk?gv#felJD9y-7f!MMqK;^ewBPb{oPlGB&r3R3R%C(?ES@kWb z)KPN=^}*Gbf;_6X2ULyf*Mr0j3P4qy(GE~qWs(YtO0$Qcq;0VrQv5T47E>}aj1EOJ zuriDeMUM_ej}AqT4n>a+MUM_ej}AqT4n>a+MGv;2XfD`LG&gK0ng?|#nin<{%?BHb z=0_ch7Jv;!3&Mt?g_t>oNg9e4K^=+~MGQrYD1pYLSy>@t(#&jZ>=DW!5q5U=d0++y z2m2W?gOii}9f-lo-3;0i10G>ydKJ#Vz^d97%D}*?W*N=Ez^c_6&%nT{otVJDz^a#> z$iTp=e>9ANfz{}93-n(^46JtZK_d1pAhuH@ z$Yf{92nGgLm*_YK23EHekooS{Ky1%;kV-FMkY4Y%AoG21fb8Iq(LTE%Y)R{bb`d|gg_?OTYy9w8M#45 zH!%i1l%!+}T z(g9Mh}1Ta+vJ)-rpWVvWR;RY_A8$T*{n7f#8!U>a+g*& zNLKp-$TU4qkhuPLkQ&2XAajhAAYs7-T4XTVu>}>5qaC}^j@@X-ZnR@J+OZq$ z*o}7VMmu(ctz*Z+%*hJxgt3BGOfYk>v4YpbFw4N!8>Q)kmH_Pmk<7dt(4HLDWkW3B z9u;jC(olIN2NP&J^JqhTw4n}~_Z)4gGmJLWM;q#+4fWB6`e;Law4pxQP#<&+byn~+ z1v3j9Y$}EwHWkBxIu*kSn~LFrO~r7dPQ~y*8}P!su&Ee6W=?*1FMya`0RqTVG3=Sv zpve{{R>&L+qzf=QokIR}3KQten9-ieXwPJ{X98N}IodN}810#i_Dn{5CZj!*(Vod@ z&t%Z{OxR&P6AoCaj4hK^B8SdMpFGBSZ+av4??$p%Zj)6C>kqK3)b!$km>pQ*s#@<=H^T zDQPhpi`T~S%aHd)ofS=yjTSl zS=kkAS(WryrS({aY*_gfSlMk^CG=P|Y*-cbSo!r>8Eu)^7#JB@H5gc#K!-gs^DrW` zD=4x`*sz-GF)*<(ve_^&u`ubeYBMmgu&^nx@_}d@Rz?t|4>scg$WaU|44|WVnMe;6 zF+b3`j9>y0Dxn}TaL|BG9A-=gaWg>#=;R1Sih@g(ft3k#mKDgyiUzFOHmr*FpkPz9 z1(RSlrvs}N$ny%U`XEY=l?y^C8bQ@SbU{c^nA(CvRvAn}*!D9Hyrf-GRPW#R)xsQ?2j6X=vK<}(b8tjxCh z`Ud)}JO-?awyc(VtcG5!iZ-m;3arfftY%THJbJ9`imd7eth#!vta>0pt_iHnkr}MI zcC6fbtgOsc3g9??242p`!jMRG$_J%-Q0iv_rF_mxP~3qDL>zUVAYaR~3I%{9*cq5um=#$qL6kMC zCP>PLmC=_26cR!VtW2O&$(ThLS()_>Sb0FQhD=N#IT=u{VPW84e#F2Ck}Ql2|OQ4cy6P7LZ%C3{va z8&)M-3=*7El)$+LnN+j~m>wu^Dcga`NH7W34b6GV2oXkGCT>t5N;0rA zfzGC5wm}O-Rs{xDCeV3x%m)}4S(T$$H56Dm4Z%euqXMe|D3$54g33)sJyu42CQb%M z#$ac^3LjU;;1EMIh4}bjXFo$TFju2OlOf#GFC^aA(@#MoJ|4!7kJn^~k9To(_Vji1 ziFfgIkB?U{G-rs95A|@2cXRR#iH}#XUs5l@-#C6@ia0)dOiI@ zd>td=oi&m*6_OQ{l@)w^7~$6I0iu#8iX>$$GbZ_$2*4j`+7P<JDX)XB$HAtygCT_GjEG$|*QA-y0op8*uhU{fqW z;i;gZ8y}A>gg9^Y!n{?ihm!+AXgU!2C!O?g&>SWU9vrs*Zjev_2L&jN#>cxj`GCX9&>-G5A|O6q!Pvk8tYWSgO$p}DDvrHQerfrXKgk%hTw zs;;qx8#t~)VL<{`X`p8S2@E%|cGM(b$q*m!1CAh1KWOY|=o%Urfs!Fq!qG1TS^$|E zgTfo^K1i_wNtT9YaOY;^7nOiL8xZ7~0xs$Tf;b)e9Ohb%m5pkWItCp;WM1w^EubG);^Z-8TvYrLbM zOMGy+V?ey2f*~RU8=Ao)5T1b{LZAo)l^r0LT7ZfyXFm%N8&qz9a;IawlVh-JyrYXt zkb;Img^7WIk%57MK`6|1@!;|SW|jgZpMmWKnF0|9r5lj72oaF2@$sQPJ}8OZ%mfr@ zDIjMA1bJG3qW~P!u7RK&sQ?bsOt>_x&H$%SGZR>hf=e+l0ZPKq`UzX=4hZtBfE!k! z339XrQYeAh5Ql=3VMIKrbPb9317{yY2BdNo8o6s^DxCp3X z^Hkkj?X&^~-E?CG-SqU7Bn4f60|njUk`&uyqY4Gxw6xN^K6BCaB&4K7d-vq;WdPYuCakRC|9`qg*wN(Mz}hMf?_ou)Q|`UCmCN? z1*OmsH(d)QhWPl*yps5|#NrZTqxh2el+?6LP?-y=$zU19%p@MA#0RHAaO}aYGzQg4 zV3VM67oVX3N<$Tp<_tXXfzlCFEFj1ek|3d;ch&%>O;5iNL$i1g2UKl9G9_9o!`uUu zupreuq$mZq&_Km&a3HLG2M!!aMdRe@j;Lr%jE%sl8{G5*7qZ~?B&a}uq-7){z`4BC z*D(UpBJ*{O&?p6ktDk?or=O3fAE=fBmux7F5@>FPHb)>WOSs=4Z6cKX2P#=XwE$9s z1=KVJXD?6|1QkGF4%mIck-_ot!67c7$nj7Bg&m~aGcy6j2q^1=WWeenLXbp+NG9-% z1g)o#@-jFAz*@n%9JQE;hZQNXv;YoakmJD_9Oi3Cu?x!5pymypptxzpZjnd4#l7f<=_!3PG zkSe4qNm~IT0?MrM{%&r;t|1Cq3Sd(-L5U^^R2}*{Mu3tjD2hNS4wlWKl@%n^K$2ib zgW?a=u|aO@g2cdWHArJO9-PGkf?R`K12u9JvvhJZ^FWS{he*UL*w`o-nrSL%D?mkj zJ^lQH;^P(UY!x&>8Z;3qG(dVa8RA1AeG^cD6XFr->jY|Oy9R~(2YEyK7|_xirGXs| zYUgPBsMY}o0VLmmnINOkQY1L>K_p>S zE^5mpAjq>6EDz4;;MNqF3(3ZirZ2R4YiJ58n^M5}6WkdD*ZJ|G5Jk`gY-k2j1a3UUVdg?PG(+ed^|WSgu1}H;l|)zZwe?3!EOeZMj#%@JMrMo9H>!&DCR@K zAqeUx_`Agi_?JgJ^fr_<&AWu-;0xo_L zNjxVjE#I;l^}g>P;(cQl;M4CS06V>K>==XfV$$4{v0+J zgMtp$d2|afG>Z>&bq?`I={$nN-Xk7V9D#C&XK=iyt8=`WfvKrwe7pjv(+CP4aK3{V zBdC>-n@v9%+J<4B(t-Y=l}>ffGaos6d3K2v`R)AjlJ8J-9%ETOW@c zYQdhqF3@&0NP(f50yq(Za)Dz6EDb_Eog9(2YJCU$k`)4AjlsSX$t0`aTwST1-MW%h%k2pb-2vIgEr8Ho?`@} zKL8pr0{aludqYF;Xay)fV0j2y%%Bx6;4ljfaf>%Lf_ep%@crH5 z-F*BVK_jZ55l?7xCTfTjQq6!;2dKD0?MeiDy2A!ap{{|HaFG50NIj@{gZSIf6kMJm zjSwSM^x%jBwWvT*h*Unn>Scy_m_5O+f$`44Aqu7p$oV_SH6%3150Sk=DG{73!G#5Q zv=z(+rN)3D&j?6=2ims*53sl(4SfYW`$1Y5;PM1i#erJ-C>@MUL_-POAO>Y&nESy3 zpj-@!El?nUbZQ`KNsthD=sN`74Kg$Wr5BU{QHY1Mz#;h-r7IF2;2-Q6fmATWgGY71 zr6i<01Lq-Fj}fhwj0g2~AbmQ}@C~ZT;Ep&f<-mt1p^Yzas~uGHIfukM`UQJJ5*Vnf z1Fal_<2@8Wg$*QFBE-)TIys5$cAR1=?L)1 zHY6oMns(3$0dNopV;wjHjh8@+HBgUO0bG%QVj09^h>u4eEdf=KpmYJw#h^+Vsn*3- z^@1~=C!WzzhWL2IbO|&SK}Qb3Efq+P!i;G*mjF*^@Q`*WG`oUr0ga@B`t4wQ!3CGG zo{52xg^{s|nVGSLsgZ?+S*o_N1!(jgT#UqHRP{)u0yO1AJHoCJ0UDr8;_Dcp2_CCT z0jC8-+=98#{8kE1BH)H5sBQr_pUq4lJq<|r5Y)j&o-P5E+2KKs0Z9Gs`1sPyJaEex zRAqqYg%H&Mj&?P;HiQqA!2<<6ngJ^3L2XD-B8N2LLG=x&u7fxoJnjIBUT7Hr?lD3d zV4(DX(iwvdJx4&B6ov*yCZH-F+{y+S3$Ml?nIp{81v$%u1~|b3jL=d%9x{3hvIZLJ z&?E^Gi3b-~kb)IjR6#hPV#>)g1Qe_qhM-O+s3i7viuZB#12x7JK*()gdnN&I$}AMWv|<8XECV`T04T+J>c?kX8@8@-#-P zJVCJnD^bB-gOu@Fbc>kA4RH+yRaq|apn=tppitK^M;~w<>FXJc zn1un&Awq}3pvD+O#umY@gk?!E2UH}1y73_AfFwXg0Ei6|2hTto8-X(?>ga!byuVYh zzmIE(YrL;xh=&3iKi1qoCzuN^wV?w~paKgV z$*vJ0@t!W8Vc3*>%qvPC3kaLE%Ih}1R$b)4XhKG29iXkrsp z5ZQj{zzjqosBQsIJm-V0fpkVdeHW)-7szNmsmJ zcFunJpz;=6KY@k^AhR&}h%^ccUT~5CCkUj{8r)2PWFe%XQOMvGq_9E65hT%p3mX?# z=Xg;1jrVm8@$d&NH30RlK@kmYg~fxr=x)B?QVUYWq8kK>SLk#QqDTUlwHBcsL7@7r z0_+8F+ZmMkAR{jE;GrgrIS5!E3tZPIK)O1}V;bN!2jK1&xGm%d86FA^b`6U6addL^ zi4O>Jb@K$R4uFok!n(rX3KTRVhrm$1kckDTg^0;|A5g9^GXYOcKpJ9D4oDo_=mJ$& zh#UhKLZn)75&^Xm;loIXZWySe4KK?OmArWxw3P@gw_zh*$je6J!6hy%jsn3`N@yjn zvriPH7Dp{5K|F->P|X3&;`+EofXey^NIHZLQ-OLl&@o`wKu{qLYI%ZE3AB|BZ6zxp z^#?(L37K~Qw?!Z|AtZsqoq#lE16peX%BhgF32tnHnc(sewOaui5<(<1ltEL>kxd^^ zAVcTSAO#0_>4Xn>?SxMdNERLiSSG!|*$l1NgfuEZ{)2T$L8&u9*U;1(GQW=!m7szh z(nEyKh?PQmE=U<71>Alug{Xq|Bf<3$sPYDP6re_ zGCm%f2a){g0rsZ{*q_0uofDAZp03XEpg}cg#4CU*El{+=5|(e6E2ISm8oLJh7|~@1 zFG&Hb1&!gk`3LzrhQxcix`H%-nn$4NEl78y7`(^~44P18$jmEI&^BVw&&bbB)lbYx ztt9=9LtKahWQYx<7?HR^l~g>Wn}kTl;L;K_tN|{_k#Y#A6$~n` zd>GlK+b@a z{@@Cbs8+qP5qL3Jd~s??d~SY9Dl~?`uJp0LKEj!2)g-27C;?DP#J}NVh}l3 z1v`d-%XawEBxqRz9<7f6hY@59BLW;okp3807#vWbm;&{_8T^9-TwPs2BQM})F-#oa zC?I&`Iv%tx1r!}%9jGNoCO847fNg^~0^IHckFOyw4}eZ3gPY#aID=*>@Q@gEdV*Q#TMEB+G-#AW+{8z4Hh4q@O!{ zatS=v1R26~fvu-ffG(DX%nLylOM`L{IQ^7@5;!<7A~FQ1`b7<41tk+bV?6`VN(xZD z4z3#^#S}PEgDMMT3@MC3;o$~a(BT1Zbbv}!Xd4nay&x};_JMi|wmcfNmIGSQKq3xQ z1Y?;PhfZH3=0Q-(HAuPwucm^k@B|Hk;xfw&I^_lL*BQh5bwSAeI`CvUD2-sOpF;K> zxb@}?nt1X6=Vc#%|A6=q|9BryCuc_=$glw@tUzf8Hs1qjL}DAxg-nP*TeHwyWo!se zL71+@^M=0R7og9{&;u2IV7mz25BN7jXZ-p zD4@A|1!ZOMxHo8U08J27(}67nXEAVf2j+t6y!d#h$Pm|f$YQm4(AW)leYB5fNQjRs zeB~OXEHO4hTEBsPpbtEm0!l}q@#J_=#`E(J@d)w{R{%A>z|;OE};4{ z9yHYs>ZgDM8?^cpR0_mH!x@^+Af>kpe3l7P+Bo^dLv}`hQwY2-hO49m73Hv*Btz6C zCg46Y*u$WyMNomM0A9d}Tm+-_K0qBol$scBKdvenJaP>wyr69?2nUi=N?{AV7~)~I z3~cQbXdySaX@k7#+sG8;A4r*kSww^KA$a5$oGg%dpzd`hD3zn-6i}3aiW=}P4QMii z43>fvqpUXs7s9Y^CUkTT;SOk+fCllw4RYvebkK|xv_{6Pe!Usu-NGR28$A8ugF}K` z9eq9hL6sr2_(WOn0h;fJx)7WWz?C&*?*yor2Za>ss1i6kAvz?WJO#-M;6_9+SU)sF zSAfSqK)Ds-ZRFxK9^9k@%}5)Xfd?N^>r)?>AlC>`4BwK)S&F|9F%_4CEeg8wON?!}Bj}xiWYS zVUVl4XE10D^TD-n|zLkRjgJ(b)quFAo|Iat!qe0Z*tyo6}C7?(X3E7#~k}KVMfrQ04^X z`4D)!6I?)ngWb$T0oJ)inwbg=a`BA-SCe2x;HX0CPC=qE0#Q~&s&9~2!HqWfgco>S z8nglH=ML$*AcZTejSL=G0XM{v3O4W%87MzNhJ~O-E2y6hvd7p6RI~<%IEH|>n}Nm^ zAiH%Sq!D;S0jQr1n%{uVG=hQ~!z^fG0~M{Hg-fczrmiB>+m%U@wC^kRTpt zG72>Kg-G?F6d&N}2P$r@okM-V+g##<9o<~x z!yJ7=K|vWGk2=u@>b!vp6o@XY%QH+sQ$(;Ow}=n|Cmm1_#m7U3hrxXe$SzAmQ^+1m zLsM^1$bh00Ho)o}6d4fW4{7m3n&6;O49K`Cc-#uqk4q!y%bb3fht~zGr@rfRSi$9utW-@A)Pslgaj>c9i0P1J%d2ISmVJ3 zIbwVg+Ho^8!JOlQH?2^X$$^qOq%n+Adw@zXBV$n722}}2Wrs12btLG%f+rUgpMqim zWFUH-1TGU{Lj}-G2pz`-g*doq0FQluc+frpsOAJEW!N55P|gE2Ofgroz;-l);sMmr z0XqqliQ?h=EI`fP_;~1|QczrhEdoa@hy~V(9If&3NDXpO8`a$}6s3BErf;ZUEI`E^ zcu5G@E8tQNWG*Brg?b=O&7zkwkZnt#3<4@XK$<|KkC224N~5sG5oFF3&O44g^I7X!aMhE7{xwl3&a{!1)EX1qvF<@V%{&J*}Vy8Y0#ajsh2{3h+Touw~Fi zEU1&Qu#q8fMTTRx5j3#_YF^+s9y0hH0WI_(>qx;H2f!H@Jm3ooI8X%wYAJw5y5KXt zkZJ~LL=T+KkdjC!@&Z3_MCPOPpP^I55HaW^Qa+@g4K@Yr25@N(=0eu(f?8bA^#k$# zemiR#Wl2d0a|bg?l6KHnvmRvzl{m%^cbRc;~^a~SI`nK zaQ_orm4Z$y0423}$Dkm`NJtF|nHfX47m_MLo(0z>p8oO9mX`65U=N1(3NT95c*tra z=vr&g(ps>Q;LHX|^N|liIgo< zG#UIsaSvYL0BPq#Dqh6#2c?kq3wX8)Y#AtJKzX2w0-D63LoCn*LP#C}_Y=VFcgTJL zJe@%~&DYZp(xAh=aT`_&Ln;rjHDCf@I zp3VyKFad?)lEjisP!Pg4phL16wyMX>7`k&O1*Ke1fg~$P%tMAV;m&|2RZv`j+yN?i z!9w6v1upf#Tu_w{O4%S+gHtVdd=kV1$$)f03L$7tNzr5gZO~Q#&;3D1@j+=H-dF*p zAaFqriB*(z1L`)QmhY?INEsNu})BwL1q{YL4_EsiGUWrpffK( zB`&D71us0obr5PP52_mc-N46j#DhAJ&=~+w&jz-w6LR_h{NMp>qw^?!2G6pCb2@C6 z+6TOZ3Owfmass?{hq2fc(xC%&V!?eHNQH)DwgS{y24xCZ0q5)jT7LoQfF$0Q0@HT9agBju-LqdW)okBxgH9$N2ia{sKfEe&CejrXUs38s7 z*$1@>ve_4u3_!+ffWrXF1Eoc9W5>`89utrxi5wM>>JZX~1nY)$`e3U$K_fumlXQYy zeHSI}8Ko+03>4^$h1f*7*U1lk9N zaG=gX-7p1S77cG|LAHCr>S^dCp8|L!8IgNI^&O}o0M6iGVeoiAmXd@r11@AB{ZFKjMj8kKO)r6y1*8Ip^js@IsR^`A1G;4rG=vK} z<^Zw>IzC<_H&G`y6O=;1v)B+}kf1^?WHCW0*hp~U2eBN!83mDWAq^LJJ_>RMmoxC0 zc(jrQx~CGnHq<%Z!#_9#dQKClOhs`nsFe#YS^V7~hgCre7*ITcf(+cK0JrWyJV-1d zr{GXON6^TYs|z?ufrr0ADG9y~0qwji(3}&!=Jpt zT?O#CCYqDLg*B)u2Ac~ln^8IhkU|@jn~=v|!a*BK{ewJR{osolAmtLo3E&nwXc8W@ zbOSt^gJqwjnF;dr60XK5XoSzz$I}Iz1EDLRAeF2FXqFbT3mG!TVr--UITQdC#*V?h z@xhUPA&wF8p?;ojo`@&}Z^Hy98gM!U`5Y28;FyABC~$iY%!C9OaybSW;lkIJLQQTi z{viQD{w@sQL~d*ZFCnp+401VWT~?SIq%8|iqR8PI!~mKq0q=D7PyjDMK;3x>SxW>u z!wU1DFVNgDtfT=qQXw5HXjU-*H-Nwu1vmsiWg3(RDvlrveZj3{$j}D7kpmkL(=+vf zuD%2N*uwV0g#>vbT9)gD?;`_f`;ut@#*H{=nmbG6%1}6 zf*K#7_yfl#xCj98z!n6#g2s!TJzSl=K}DXY8>njn>Oz22fP)_F4-gMjv_hjS0KCc- zFkK1d_j7;vfq@gT;4j--QzCa9K&K`exZWFAO+(*kY- z$noIlf-TJf#TG;nB2*ybFp#!AVp`6eA;8nmFVq)l;8;z;AjuHCW*$_Cfz1U69ykub zT+qM?q~?ayVDRZ)90dbp?Jsl=2--w21C5d)3M{nhAG~7`oNU06jp$WE7Ve>@QE;*9 z0iS6EH$;>2^K;@syNTk#>ssRzi&Bx+hkz0VxE=)8%izQi92x*>W(LQ*1_ilBIJ*Xb z*QtOb65>hF$N^+H78-w`&N-;8MRPi+SO9g6z}XW#>;UT$fH{!%7kGLCW-hE@;{(=V0Fv7w%R0cVS#T^Nl6a{m1Gqb<4O#e!$amm8hq7)RJYNf5G6fD0 zNF;+x6)+QG9csA>D^AdI1f-*cSOE=5z!Bzd0lJW*gTPT95s$Pq5!7~rZWKXkfPlP- z@DQlA04kwCc^B*&a03R!19=9v;ss3x+?s~8v><0#fZBJCu#KVMYzeMa;H5kyh*13r zTaF4XCkz-M`A8dlkP&3;1e6*Rjzj**$J5UV)8xMf)JV6_-aCUKxhs@7|eF`=Yoc554ynIcDAkfyc04GCNzo7UKPhS)8 ze4h~mc(YNwQ&13OExD&ZXp<#;hrcF6T25kd22>Sjfe(f;u702flLBO`CWfq&X9&b< zjDZ|u3-AeiZa$8|9`TOOLGhl>u72^zrlCoJjS2`4igyl*5AzR3+Di$s!P(6{DBdFg zbeN=Ph=K{&!_GnR9>JgkR=`_Z%otpJ9fKeeAjQGq8p%2N$=RSyi(rO=ngYlNV3UHw z!8U;RFCq(qo#E^pWXRy`9Ape4pjJUl42}=*@d0hz0v&$n=;37K6X5CxvC|P6`T^lV zu72^(;4vv=|AOsCRRp#SY+rl2{Et{;1Dy^WXMg-%!8)3;Gp=R z2tQZwnF^5*PeT$bOakmw#{efISOA04CuX8iuw-!ba599%gNw5_D15+a0L5L1{Zyc1 zEkHqzB#n|MK&=a~8rNXgpfFb#1BM_d%Mi{og0oEEEHkjBAlu^u0)ku(!9ihYz))J8 zSX5#J*~b!}R9TYBfJo#T#mR{|si0^CGZfSm5OUyf11C=;F>siGTo1Ma z1{r~z;Ti;9EC|tubP^h5c+9}W1Y9&Ac_SDcSg_IxN zoe@D(l$;C-7?3aE#keMee?W-0Yb3<6NS+H0at3?P$cVwk(=~`8wIZ`b!2~VpKz=m> zr!sKB28V;S7%-G%=9L^GoweQj0)JVU+^NU_%pz z;9zI>AVfJ565$HAz?=cWAU&{z0ct~m6E8G1 zfeP6`jY3e&6=K$rfnbBcQ3kRASr5qlno#El2gQSuX-JTxU$C!dNQkQoO8$gO!$She z7*LM$2zG@kN3#PY3D*S8Y?y5)B-8vfz~?~bVR{5o3u5yKI3ggi44OA{HHHM6CWEuH zE2Mycv{XQ`3<_%_Q-)w)=OCnHiJZD2nn8gMO^4v(8XQ^R0zMRHB!_~tIV?m$japFK z+%q`X5gZ3FgCR9I$O4F=NDT@FQ&7DDj$lyZ4IJa35Cw-EC}E= z;PD3525z8%q`+|iw$2DqtbzRpD%c3OzvlDW;0M3Hw3c$X=EHM-eA?||2vOhREz*>1IZUsd?R4J^afXq`F z8Z+diro`vxF@UCrL9IZ&WCkafkRVWr?P(MY3V%rL08R{`uthQ$VxbwRN`j{cJ5N?k2%g6v!_o(98=edmxEV!O$37G(bvB zXv`}ZLX$eU4D@g^1g9&AnINr@!bt(D6BIJwrUs~}hs7);ccFXAz#MXpIVjM;rFCh6 zUNQqHh~jfobMuQT8H!61le3{!YCPzu>G;&V6b1+@F(svlAwH?N7%Y~OnwD6aQxcz% zn3s~1S_D-CHWi`>!YoQHPAvg#luj)wDlI69FH21>$uEj8Nd(=v0CER7#pxwO+O^>5 z1SfO7WCr(;fFK5UXJ;z~4acHf1<+aCA^G_^$r*{6d5{yigHm%06*QbmGjmcD5{q(m zLGwnYnwk(v#BtpWj>ZfO42h|UNtq0cnxLy=%w2VT8Q6H)eL0!9*o0U_7)2SynI#w{ z8KoGd8D$vd*pwKF-_%`Pl+2)?msz1-T#{dus$W@TVVP-Ym|I*`W|UZEXjx=rmSb#g zRF$5XnOT-)n5>(goU99SZE9{(YD!9K3fS3tMX5Q4`XJ%F{Jd0MkX!XL^OAE)Q&RPF z6O%JC^HOPRNpWQ{O)a37;W?Q}`svBZXh8*vc|Ai|h=F%+gBFay5@|_gL29vH219&t zNlIp3iCzXoMFuEg!sPN&%X2c5K#Cx&__EZZ;>`R!y$pur{JgZxbiE9Q%+%D>v;w^h zhP2eglF}lGnVESd#iby@_{6;8OuY<-;*yk<)HDbKG_a(X0q&^kB{LKyCxbMD21)cX z7z)aZ^fExjR4RyuBzutV#G(>##ze^)ddUn73=BLB3=IGO|Nqa(z*NJ>!^@xo5@cXt zn8C=vk;K5j;K;|)&gjS|;mFIL#mC~v%j^R)Jfq{Vmba7M)SUudmiOBAd zU|?VXsRLaMB>+|jF&AX02vlwc3j+rSSPo~JE^&v!vh2i6Wkcpu50uf;X>nLG?IgANxBPgA~WG+5q(kBZDAB0!+fp z2jw5I00YE4P(Fe2L1_`fW?+D+2jvHd7!!j$0|SF669We*e=spX+*bn+IEZ`wbxyU=n6ND9wTepyu5`QV;SUD9s|v|3Q+sgh+r%n0cVvy1)WZ^WLzch94-+ zBFl@gp~{2OEV8@{lDs1W1H(*cUQ}XWVsJ;}hobQ#(fHA5d{B9VY+eqi{DImh!0_>Z zIhy)bG=2|=4=oRc7?>Dlf%r)716_gG$-=+^Dpx@AE70WEqVabzFfjaPWZ(dmn;`W^ z(d5sg@vks2F#Kd?-~eSnkot#^fCF(E1Q=Kt-k_=fgvS4m#%Ezf4PQYdKFEAUBt9to zHPQGcXnbo(5dwD)DBUtJFhTi@3;}5BqtN(?X#7kxej$qa%nY??@=c5k3=3HpI6!4G z$o)NN@)H;t7*tspI6(CSNPZ5Q{4zBDYBc^vH2xkm{z)|VT}G1!U6qNP{@$X=e?{Yi z?nFdZ&&Y%tUwmkMX(k4SUSKAL<9q{`u#!N|ZM$iT<|x@ZvD|1;3kFGJ(6L*wsaVqkd4g2*pN(d18| z@vo!t@1yZQq49sA@!6SC<41&^Xd1npm|9ViX~2+@npBz|pPQeTS(0A_YI!nLFcha` z=7V}#>8bJH-W#;n2JYFFWab*imlni>XakU&G)guEIRkXV64VlKYtOJPVWCtkKt42#Pfmu=B}M7+$@#e;qYMqfj4GK(%GH@J#m|akHp!x^IXRBghm<;aigLsg*0+~4# zP2J493=FOiC14Vy288E<`&A4DU_k~3hI@Az7))Rss2L#cIw%`vuh2aPhRM)G0g?xq z1;YEF>Of*3yy5`^!xNAMh=Y_4Ktf2`8G0TuFo1dyp#GLNR2`_z4eCKc(*W3no>vSE b*+>E)b3hUxeMrI#-`_GYoCZliF-#o*gZ8g9 delta 20545 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 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" .LASF645: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" +.LASF859: + .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" .LASF623: .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" .LASF515: @@ -4839,7 +4878,7 @@ gpio_write: .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF872: +.LASF886: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" @@ -4869,6 +4908,8 @@ gpio_write: .ascii "SCNdFAST32 __SCN32FAST(d)\000" .LASF339: .ascii "__UHQ_IBIT__ 0\000" +.LASF858: + .ascii "GPIO_MODER_MODER3_BIT 7\000" .LASF60: .ascii "__INT_FAST16_TYPE__ int\000" .LASF631: @@ -4917,11 +4958,11 @@ gpio_write: .ascii "SCNdFAST8 __SCN8FAST(d)\000" .LASF576: .ascii "_UINTPTR_T_DECLARED \000" -.LASF885: +.LASF899: .ascii "AFRH\000" .LASF314: .ascii "__ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK\000" -.LASF884: +.LASF898: .ascii "AFRL\000" .LASF273: .ascii "__ULFRACT_MIN__ 0.0ULR\000" @@ -4935,7 +4976,7 @@ gpio_write: .ascii "__INT32_TYPE__ long int\000" .LASF118: .ascii "__UINT_LEAST8_MAX__ 0xff\000" -.LASF883: +.LASF897: .ascii "LCKR\000" .LASF520: .ascii "__int20__ +2\000" @@ -4981,7 +5022,7 @@ gpio_write: .ascii "__QQ_IBIT__ 0\000" .LASF763: .ascii "PRIdLEAST32 __PRI32LEAST(d)\000" -.LASF879: +.LASF893: .ascii "OTYPER\000" .LASF811: .ascii "SCNuLEAST64 __SCN64LEAST(u)\000" @@ -5001,11 +5042,11 @@ gpio_write: .ascii "__GNUC_MINOR__ 3\000" .LASF57: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" -.LASF895: +.LASF909: .ascii "src/gpio.c\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF856: +.LASF870: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" @@ -5057,7 +5098,7 @@ gpio_write: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" .LASF23: .ascii "__SIZEOF_SIZE_T__ 4\000" -.LASF857: +.LASF871: .ascii "GPIO_PORT_OFFSET (0x400U)\000" .LASF50: .ascii "__UINT64_TYPE__ long long unsigned int\000" @@ -5067,6 +5108,8 @@ gpio_write: .ascii "__INT64_C(c) c ## LL\000" .LASF699: .ascii "PRIuFAST8 __PRI8FAST(u)\000" +.LASF867: + .ascii "GPIO_AFRL_AFRL2_BIT 8\000" .LASF190: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" .LASF445: @@ -5075,7 +5118,7 @@ gpio_write: .ascii "__ACCUM_IBIT__ 16\000" .LASF509: .ascii "unsigned\000" -.LASF881: +.LASF895: .ascii "PUPDR\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" @@ -5085,7 +5128,7 @@ gpio_write: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF359: .ascii "__UDA_IBIT__ 32\000" -.LASF892: +.LASF906: .ascii "mode\000" .LASF586: .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" @@ -5099,7 +5142,7 @@ gpio_write: .ascii "__UHQ_FBIT__ 16\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF889: +.LASF903: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" @@ -5137,7 +5180,7 @@ gpio_write: .ascii "__FAST8 \000" .LASF496: .ascii "__XSI_VISIBLE 0\000" -.LASF882: +.LASF896: .ascii "BSRR\000" .LASF794: .ascii "PRIu64 __PRI64(u)\000" @@ -5225,7 +5268,7 @@ gpio_write: .ascii "PRIx32 __PRI32(x)\000" .LASF278: .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" -.LASF876: +.LASF890: .ascii "uint32_t\000" .LASF689: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" @@ -5273,13 +5316,13 @@ gpio_write: .ascii "__INT_LEAST16_TYPE__ short int\000" .LASF326: .ascii "__QQ_FBIT__ 7\000" -.LASF861: +.LASF875: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF866: +.LASF880: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" diff --git a/build/gpio.i b/build/gpio.i index ba500f4..5bd12dc 100644 --- a/build/gpio.i +++ b/build/gpio.i @@ -1995,10 +1995,36 @@ struct gpio { volatile uint32_t ODR; volatile uint32_t BSRR; volatile uint32_t LCKR; - volatile uint32_t AFRL[2]; - volatile uint32_t AFRH[2]; + volatile uint32_t AFRL; + volatile uint32_t AFRH; }; +#define GPIOA_BASE_ADDR (0x40020000U) +#define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) + + +#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_MODER3_MASK (0b11) +#define GPIO_MODER_MODER3_AF (0b10) + +#define GPIO_MODER_MODER2_BIT 4 +#define GPIO_MODER_MODER2_MASK (0b11) +#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRL_AFRL3_BIT 12 +#define GPIO_AFRL_AFRL3_MASK (0b1111) +#define GPIO_AFRL_AFRL3_USART2_RX (0b0111) + +#define GPIO_AFRL_AFRL2_BIT 8 +#define GPIO_AFRL_AFRL2_MASK (0b1111) +#define GPIO_AFRL_AFRL2_USART2_TX (0b0111) + + + + + + #define GPIO_BASE_ADDR (0x40020000U) #define GPIO_PORT_OFFSET (0x400U) #define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) @@ -2020,9 +2046,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 40 "src/gpio.h" 3 4 +# 66 "src/gpio.h" 3 4 _Bool -# 40 "src/gpio.h" +# 66 "src/gpio.h" val); # 5 "src/gpio.c" 2 diff --git a/build/gpio.o b/build/gpio.o index 81c99fcbae6b6417a239de18d30f01cf704eb081..a22906c643e8dead24f1a9085482f8c727493752 100644 GIT binary patch delta 7274 zcmca{imB&3(*y;kH*+>BWiW~}GBGf)GBC0*FfcH1h;cA5$X;<_VE8_HA){FRXJG~g zMn;Ymq6`d-OsuC&7#NtZN-;1nS;}}bfP~l&2Qn})van9%V_;y8(q&*^@|R8p$*{0L zQDtCYOVZ5bFiSy(gkN*I{4jTso2UWoNV)WsPyFfe}=XJBAf5wT}rU|^2+ zXJBA95Q$`9V5sL>01}bWVqjnn5^ZE)VBltEVqnl{d0VP`aCU|?Xe;!9v;U|^Xc4B|YI0EIv% z69WSi%NkDx24)84Y7qto7JFup6M4JT7#J9N*+6de0eN`Nn#pp^5~^!J&Yzge4)PA) zW-zCOfsv6(L4tvSk7X|d0|WnQjmgo>va$j~o(v3(Y&sw-nV>q@p*jR7Pi2m%=Vf5# zuu^2P=C)K6^%SJrvD2(TWV{fF zd;u2!02V(1wq;j6SfWt^B)!@lL@qS}k(!nulHV3Y+Hir$%giA1v>}Lm0CuRH0ElhP z2_h>5LF8Mo8bv!0`vlm`(`+ENq$`Nz0joJ`4`Lqyvz5i_K^#365P1ho-f#r5U+9C# zc2*FXt_C6v{XpbRuoK^deQ6K~65#>+-Zc!wmgWPI31AD>fWz#A21sNMKZraFb`}d* zb|u(Z=IRXf46F=N0U+r%aDZe=g4nm*K;%0xsVxI$gG1#uI6U;gmOTyvi5~%n(-CmM z?q&dqd;*(x5KNwD1c`KmRsP}zvGdJ9RB1M^*}MP)M5T^hV5Ap_)UaBDSI5?H;R0py9z-h}v8pO^3JN=&$ zhwefYZ$uaKxPlvwwg+GeZ}orU9H^9O}W+ zUB)1xDd5=k1{=)_cEl-RkT|ath|~egP6elr60mP#!QnIoY^W$W*#CiJ_aQhs0-Zs+ z*ueoF3r@D>;4qd2N1__o`u|Me^zQ?XttsHZpI`*i_6_XsHQ=D*13T^zIR5s6<9ii2 zJBffDx&s{G^TBClKA3$L?1%!e`fp&m%%>x3l3x-uo2h5iE$D*g4)5>n}YpX3ihQ3SmYBp^~?dA zAPbJxS75I;%7fGYez0+d;6VNa_TNRYZ`{D~Ee|$Y4xC~9!CABgoFmx5WkU(rI0vxo z1F#9*V83dDqg51~{T715?;bemeG3M8>;+iL8O{Ue<6LlDa)6`Y2RIqBg00yCt|M3tK+X*T z%iaTfCKsFw+|5Da++gda!HF>ioKfw-VUSY~j;(9p`1lPjVy*l^8kE3g-#)P0Q^C3U zCOCb}2CFdvm)<|X1x_%mdL4X(S+gZ<|WPGW{&S5E`yczmn04fgEFv#?7)%Y5B5yECpi5t11r@5YwiKN zs{tI-Q^0<80hf%O;KaBS9P69FiE##46M zE)~9lJ$472keNVvt)5{QxQv?$4pIehYB&TAi4<^1Oa?nk4Xlk398OEX8BYrAl&Rn- zivgDbn&52z`(}v9jq(Y2gJ^{1d&g?L1eHWi2MasDP;v> ztEhpg1{bZs762A&AWQ4(K+sOhXvJV{h-C#dC zgG;wn;55$+7XJs1^$cf_N+z&h*McL3A1rIk0}@}U2TuR|0U%BQ*j?MeM*EtAMABVB z@FZzPS zr-S02!Pbnyoq>&^*#jh07X~5?DW)K;u0U~#Sv(0^Q5wr`O?-jfl7?>GZS@~Az zGB7X;u(7i9@Jv3(FUEAoYw|OG6DCd3$ua^moCl>C7+6?EBPAz03TV}T2jyk9bWqf@ zcY^|#qa0KyaDKM|rxFHMX(v!XDkg!-LzQe$a#Y_03UY0BP+aS+1qJ70rY=xf^pfcj zC|A5;k_F|*uT1wr!Ty7Z15}OvW@-eb^#4p&AZ_i;%RnJBgSq|%NOU&y8BpQ6klDl+ zYOC*dka%<%C{mJGL7|oW7!;z-ETJHYHkR4)P?cg9ptPtc2Qp7%0;p*C$tVU&AO9IW zLFu!VDGQX5yO<0>8DuI`B*>GqnY2OqaWzx@Y>@jmGR*^(`umx*LHbWK@qjvvAmtAj z89?#=jPV4hG4qNs9h9SgFdBp0@Q0BRRC+fvEdrG$olJ8<_0}S$%j!^van*smFHmR5 zz`&->3Q9ye%Rw=!>(0Qyz^2D!#lXO%Uk~bJvKe@WGBB_i-eY25U^Ds)N{+_PpnPKz z11f7wFM$euvz?%F#5@dC+*|O0N*T)!plZ=76_iPwRX}x%*CSAw5)=<|dhBaZ%w`+~ z6_bU2Am>*ofqd74pMz9C=GJ;&qc8C$|k;9B2pD=)2!Ql^zHTecmgeYtWS)r&6 z5>b5xDqpm3)q|=S*F_*ldTs_4e_jl3(C}m90|f;CEKp@Cbq^prA1{1l176Q$c}ksRpvub{QzY*>489#-$Tf zxp_u|Oz@ioN`%4Ej!>(_6+lrVD-J4Ulo>!i)w~C?!&DlSe(aAJf$AC0L{KUUJ_t&O z4UDfq$+D4A98?Z8G425QYX;+DkdtOIegoyPS&Sz^d14VG2gp^6883i*vxG4XR64F> zoDNE#>lvSOFfg!gV3Yu*{~e5xAZjP$Nl<+3V*Ct>gd>c%K_%}|#`@17haY3S2Fm1D z7`s7Ey~^kfqOLI}fYRMF#!!%Bo-?|D%7qtL1||a(+tpd4Z zI@5BH(iu#=pmZ{msRipo%Skh3D&Kt>0+sW7g$}wGxwV=|fn^6vAYY*ctP&)2q1dXb(PGB?znLm;7 zDkybLVyu4$D*7ff&I3iv6vh@1HI?xfs7#s8s0E6Y8H{0|P@c({4@wiW82dq8iP?-t zK>~E99;l>U%2)&nlx2*Cpjv7D>9>yYIEY%$r~nG=4UF-iQgt)qDUjE; zFm`|v##YAZpbpG7#uK2#vYk-_H2)TrrbL1QesQnDRhgo6WQhluhR_@qo&eWlXm~#w=%Y z2c?8nOg@9aS_aAj!}`bMkS;Mplr#=;HF zA&lBQOJ^U8EUIRscwfh0Z?Ij4hK8D(!wm!2Wl)tEqbS+D)Iyg<0ab-jd}y#^P>4}{ zNCe0v14F~j=WS$}u($by%uwcgViAgrV%)NOeTkh?t=IXNe zn|Z@#F=Ob4gs%DKWs%jKqF|%p0S__QVzWZ>KY`5(CHCwJW`-7NmT5)?MybY@Muw?r zM#e^o29`-i7Ac0NX-O7Io9nAZ852D~vmpEo41Q2L1WHFi=|m`<3#CgyG&=*sd=Smg zz_1=l?}E|?K{P7^!z~ca&%p3<^Vgc|(v$b}7HmEP#(#eI3)R}Hfo;+)j8rwfn28J^% zlf&jKF%?Xi{A!UJzl*E>>nNnY?ka zIupa}$+s4(v31EXFl-K+%(g^{$+md1))F{6axd3rHnTNNQhl4fPsOLh1G$Nfq~gWhk=2~Upf^e!@~Yc zg@J*QgLSbEh+=^!oX~1#K6GxLaY~}PSc2ifjLW@fq_{?#GZkHf%%Xx z0|T>xNF)OTLp|F9kO-G10|RrAXd?py12;1h1A_qzJBKAB0|V0vLk0$pH6VvGB|9-N zaDtdDOq|*b3|t^42a~uv0|PgR$;0mH62!m*VhXVPy96=tf|w#qi#!<^_&`hvrZxu# z27VAzhUtzy1A~AkBSSrd0@GT11_nV-Mg|5Ah;|T@7wmQhHjpFu*clBO7#LU-_(~ZW z7+AE0L7YelP_Se&F)%Q(2zxLvFf%aoi7+s*s51L8GBEHjP-S3Xfd>RQt>ZM5c${`L~4tI$Of>ul{Sbi;S3@ZML=YzCy2c54kB5^K%}2Fh%^VA;2aEM z&jsfUF?$eO(h@{|5(JSiz~Z@Jaa*u0zV$*NiErW{Qo{{I7Jwb`#T>+50yg?JCy0HS z8AMJq0FkRrK;&6|5c!G&L~?^Icnemu%?2c5D*+-WvVq8HU=Pd}0I{9yKx8;r{S481 z5J!&%MBV|Dp$;JSW<3y@%?cuGRYBwo9}pP^c48RVm(%@0A`7iR7P5~)7}4p?1q znmh##qG#Zgc^E96%m-4W3AWf5EZf8b64?h%KDoLeHWyfA9hg0X9VDUwPM%8ObW;yD z|0$TQqX?311BZ7WIKOa1q(hBB5}M%Hy$3eB3G9eiVUT!}B#1l+b~_iCeH!eWOW<%i z0S+N;a2T8f$F2of*!urW;Pk&49E-offgf!M(zX=r z??d3Ay9pLC2V15BR;lg+QnMWF&>i3aX9Me<4`$B*JK`xgz7K-+nt)T!PjHD64EFte zaP~gp22TGG;7sBVP9~4QZj=His0U!BE#Oe;0moSzSoSbDkj249WPo{V84C=N2n+``{jVy#o*|R1t;oMa1m4mO33vL$DBac zB!Yw52b@g0!GUiIj=#HRAlZlD#Ki>8cmd#)5eAMwZg3fJ1zebPfMdN1oGsPCKE4A^ z6E0vYSA#>y6&%vM;IL@~JGVXy?E6x1%9H^6&lc=bF|a`!z?N+R=VJ?STwVre)Ld|A zUC;+PZV|YSxBw0Vc5noJ0ei**oC}1&9@qsA#U^lKdIPpFo9){gJV4&oS-DY1u#F@xS3$`IM^Fs!73f)KxXa&M?nEN zHN=8F#tAl`lMkH!|A32;Y_LI2;6OVAE|UAfKGOw9$0Kl(JPr`}1F4`7Rv!4>p%Fj)q65GOcNmVrI<&K;co zt-*nI8=OEm!L^n*IHsGxemw~G6B{@&>Vac@0XQ*=f<<`13HB5?E8YP|mJ!%!9&joF zwb57^_JVy}1TGb_z|~tfI3Z_(isyO;UvL?h01nc*;MDL991`Eb;!a>c%?5`DBRHHo zz!|R}Y>*Z>%DBO);S1P;gWwci4i3dL;H>xw9A;a<9{UZB&_iGkgn*;3z6NZlB{;Dx z2UkTuz-f35I2|a0t@#g5+snYw5djWBR&d~-0IQ#`#lXPE&;xeL6)zCm%mPGugW0=$ zKx_eUj(7?dw^9X(Y}5gfUm@lHGjKk>s{|5?0lRcPsBmCd56(PZ${_It5J!N0#%m4| zQ3dO&1ShUYaOoxp4(cp$nkWW`*;7Z5%1BvIE~o%UN*P%85jRMDx-K~Vm-&G>X<&CX zf{m6i0f{_u29cG5Aks+@WW-}(1_m|;I{^?mLkdK`02ejd;Fixtu+u+*TS}#1i<7}A zCJCG-rh!Aw0vsOyKylB&VagECz{c>(4P?;M5D?iR3nCXVgUEDs5NQss*S~^`AYX8m z(+=twFtW1pP19juU>0CwW#7%sz`)GK&JOArus}#=K@L_XXV1y|`AyXKh%hiP^Dsdr z_?RIK2+7K8CdI(O!YX=BVzQKgR{c{@5@8DkB@uQxP!i;D0u>&dJ=WmV#K0b0P#(QX0d2t6fGus>!B0F_xUnc_it{teS4Q04iR$qf`eKbZ1CmCSD@ zA5en*&$Jz+t(`d(6oNCD>otQ|IjH-@)`DE1cox(u(fAH(hy7%H2vYN(Q3O<8w=(?)l?`1?1|V~%GQ9z% zwAoBepzN@ksa^o2dn1!D$i@4aCV}*yW-9iC8vcOsv>5{f+cU;;knyh=jX*j72jf3b z)c#@I04n91nZ!ZmO(&B9$lygxFV&!Wxt@YDnSiGO0|T43G$^s@@VPTEu<5!pFfg#` zowZo<`HUu*;uo>QCVqjo1Isri?CYkz!iU~6XP@!k;0;(1) zxV4g|ihX$9Z{ziprpPkWXW8f?_s92b4Ms|AI>GicXO48X1p)9NNKX z1v06AGNUHQj_HhlK_Re+u@hv%TE_Pv4ci!{K{PT1o?yk)4yb5S{07QFs;@xhkhWtzC}X&Cf*k3Y z1S%%IYF(h=$95AG*!-y=DR_(q?Bf$a<9Vs5ChT>C*qtf)FDawLoEK}lX(1>|?dQc#ORbs|Vw zeKROU~wV+B@QwZcJ(`O)u+V>lR>LX79P)!tU21* z;Ot;j0cC@ojB7zo+QsMvii9JKA3!+2JelbdC_PQ7XSxMS(^HwWK)HSzQzXbG)0tF2iF*dq4UnNTnS4Q| z?kpw&T?PiWVzS~QDDzgP z)q{e)`U88b9?{KqjcIgkoglC7l2aNB*yws zP|-J;F%uLqQyBe0)KtcDkpAh6`#~CKFtUO|c_!lw}!C|RKTufTnsAx)-i4cQR^AoL4m!2aWbd?+sx<=3dAjpexQW0mGK`a z`nEAn1|^p5j7veT-@$kvRFmvtyag)Qb~Ac`0(uXlF(|V3GCl(Z_&&zBTA=)Qka0FB z-ydR(0r}}LV;CrX9AQ)k#q?1|UJ!MR(G`>iPB1Eh^7cu_#UPcZ7#W7#^s=tahGu(D8=4moCxy$1I9v-yB{*11|{rAjK&~i9y2Zg8Ty1V1{5PN7$ZR; z^OEr!C}dwT27!X)HRB{uVtK=83o20GGFE}|+IvQQP&j>H+{_3n|35PR16luxF$)x= zpBeXo!s|PuA}A&OV2lRk?w^cPL9zCWaWg0melyMlQGXacL4o*>@dU{1|BMWv+}Xe+ z22$C`WDP3rnwT;{Hgz%8gECn+lO)K7iA<9~p*D%B8RVt<$xPcoX=e(P9w^wRGCcdDUWG7h~CU}38ZujQxQn%R;FxD zkO2$~tg_Oel&Q!G3Qc7TPzF@l4=Ol~RtG>;FwFy1#v+xVwz#Mbs00yH0o6?sO`v*1 zN)Qw}GDkpZQ7+GNbD?w#+hjqdhRy4hRx@obR9(To*;IEg%Vq&1fA-C_mf9?vPuof{ zZDw}(#JXA5?HcQ5F`q?TlP`qr+`K$|2J`0d=qgUO_;?=|C!fg|z2!D@r`{CU{HWBC zT_MHXBH7X`#l+ko&BWNmJSolCG&RK_)i}l6C^gN(Fm!z!0;YK^D{8~+q|>xy7Z>m3apG$ zlNA>zGtH@Z=o8K0PAG4g=$PHwUgr(s!I^ilsCQUxKM2$^VjDg_{%jB+wN=$1e zO_p1##`;kT+2biQCg&|xV+C~=OkjFhduA{&I7~jcRGHOXnt?$KY|)>k0!(LSOy*mr z#uh8Xz#tVm*=m^*Q+eU!xMgZgdkZJGEmLDsD4D!&nHtlSnUk+AQ)6l> 8)\000" .LASF198: .ascii "__FLT32_DIG__ 6\000" +.LASF904: + .ascii "RCC_APB1ENR_USART2EN_BIT 17\000" .LASF889: .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" .LASF645: .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" +.LASF912: + .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" .LASF623: .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" .LASF554: @@ -5705,19 +5914,21 @@ main: .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" .LASF733: .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" -.LASF954: +.LASF991: .ascii "APB1RSTR\000" .LASF298: .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" .LASF393: .ascii "__ARM_FEATURE_CRYPTO\000" -.LASF960: +.LASF997: .ascii "APB1ENR\000" .LASF741: .ascii "SCNdFAST16 __SCN16FAST(d)\000" .LASF872: .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" +.LASF957: + .ascii "USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)\000" .LASF787: .ascii "__PRI64LEAST(x) __LEAST64 __STRINGIFY(x)\000" .LASF677: @@ -5741,7 +5952,7 @@ main: .ascii ")\000" .LASF155: .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" -.LASF945: +.LASF982: .ascii "long long unsigned int\000" .LASF611: .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" @@ -5773,6 +5984,8 @@ main: .ascii "SCNdFAST32 __SCN32FAST(d)\000" .LASF339: .ascii "__UHQ_IBIT__ 0\000" +.LASF911: + .ascii "GPIO_MODER_MODER3_BIT 7\000" .LASF60: .ascii "__INT_FAST16_TYPE__ int\000" .LASF679: @@ -5788,11 +6001,11 @@ main: .ascii " RCC_PLLCFGR_PLLN_BIT)\000" .LASF56: .ascii "__UINT_LEAST16_TYPE__ short unsigned int\000" -.LASF926: +.LASF944: .ascii "PWR_SCALE3 (0b11)\000" .LASF573: .ascii "_INTMAX_T_DECLARED \000" -.LASF988: +.LASF1025: .ascii "CCER\000" .LASF40: .ascii "__CHAR16_TYPE__ short unsigned int\000" @@ -5850,18 +6063,20 @@ main: .ascii "__int20__ +2\000" .LASF654: .ascii "_WCHAR_T_ \000" -.LASF984: +.LASF1021: .ascii "SMCR\000" .LASF828: .ascii "PRIoMAX __PRIMAX(o)\000" .LASF747: .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" -.LASF921: +.LASF939: .ascii "FLASH_ACR_LATENCY_MASK (0b1111)\000" -.LASF974: +.LASF1011: .ascii "GPIO_MODE_INPUT\000" .LASF743: .ascii "SCNoFAST16 __SCN16FAST(o)\000" +.LASF1038: + .ascii "usart2_init\000" .LASF345: .ascii "__UTQ_IBIT__ 0\000" .LASF348: @@ -5888,6 +6103,8 @@ main: .ascii "PRIi16 __PRI16(i)\000" .LASF390: .ascii "__ARM_FEATURE_DSP 1\000" +.LASF963: + .ascii "USART_CR1_UE_ENABLE (1 << USART_CR1_UE_BIT)\000" .LASF825: .ascii "__SCNMAX(x) __STRINGIFY(ll ##x)\000" .LASF327: @@ -5914,19 +6131,23 @@ main: .ascii "__UINT_LEAST32_TYPE__ long unsigned int\000" .LASF405: .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" -.LASF905: +.LASF923: .ascii "GPIO_BASE_ADDR (0x40020000U)\000" .LASF38: .ascii "__INTMAX_TYPE__ long long int\000" .LASF377: .ascii "__GCC_ATOMIC_INT_LOCK_FREE 2\000" +.LASF969: + .ascii "USART_BRR_MANTISSA_MASK (0b111111111111)\000" +.LASF958: + .ascii "USART_SR_RXNE_BIT 5\000" .LASF561: .ascii "_INT8_T_DECLARED \000" .LASF436: .ascii "__ARM_ARCH_7EM__ 1\000" .LASF428: .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" -.LASF957: +.LASF994: .ascii "AHB1ENR\000" .LASF295: .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" @@ -5966,7 +6187,7 @@ main: .ascii "__DBL_DIG__ 15\000" .LASF275: .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" -.LASF952: +.LASF989: .ascii "AHB2RSTR\000" .LASF671: .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" @@ -5986,24 +6207,28 @@ main: .ascii "_FVWRITE_IN_STREAMIO 1\000" .LASF183: .ascii "__LDBL_MIN_10_EXP__ (-307)\000" +.LASF920: + .ascii "GPIO_AFRL_AFRL2_BIT 8\000" .LASF190: .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" .LASF445: .ascii "__ARM_FEATURE_CDE\000" -.LASF980: +.LASF1017: .ascii "KEYR\000" .LASF509: .ascii "unsigned\000" .LASF381: .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" -.LASF938: +.LASF975: .ascii "short int\000" .LASF835: .ascii "SCNuMAX __SCNMAX(u)\000" +.LASF955: + .ascii "USART2 ((struct usart *) USART2_BASE_ADDR)\000" .LASF121: .ascii "__UINT16_C(c) c\000" -.LASF934: - .ascii "TIM4_ENABLE (1 << TIM4_CR_CEN_BIT)\000" +.LASF970: + .ascii "USART_BRR_FRACTION_BIT 0\000" .LASF359: .ascii "__UDA_IBIT__ 32\000" .LASF534: @@ -6022,19 +6247,22 @@ main: .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" .LASF443: .ascii "__ARM_FEATURE_COPROC\000" -.LASF977: +.LASF1014: .ascii "GPIO_MODE_ANALOG\000" .LASF177: .ascii "__DBL_HAS_INFINITY__ 1\000" -.LASF932: +.LASF950: .ascii "TIM4 ((struct timer *) TIM4_BASE_ADDR)\000" .LASF95: .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" .LASF608: .ascii "UINT64_MAX (__UINT64_MAX__)\000" +.LASF901: + .ascii "RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAE" + .ascii "N_BIT)\000" .LASF471: .ascii "_RETARGETABLE_LOCKING 1\000" -.LASF915: +.LASF933: .ascii "FLASH_ACR_DCEN_BIT 10\000" .LASF453: .ascii "__USES_INITFINI__ 1\000" @@ -6106,11 +6334,11 @@ main: .ascii "__LDBL_DECIMAL_DIG__ 17\000" .LASF701: .ascii "PRIXFAST8 __PRI8FAST(X)\000" -.LASF1001: +.LASF1041: .ascii "led_on\000" .LASF308: .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" -.LASF1003: +.LASF1043: .ascii "src/main.c\000" .LASF126: .ascii "__INT_FAST8_MAX__ 0x7fffffff\000" @@ -6148,13 +6376,13 @@ main: .ascii "__ULLFRACT_MIN__ 0.0ULLR\000" .LASF651: .ascii "_T_WCHAR_ \000" -.LASF993: +.LASF1030: .ascii "BDTR\000" .LASF382: .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" .LASF664: .ascii "_BSD_WCHAR_T_\000" -.LASF972: +.LASF1009: .ascii "PLLI2SCFGR\000" .LASF277: .ascii "__LLFRACT_IBIT__ 0\000" @@ -6162,9 +6390,9 @@ main: .ascii "UINT16_C(x) __UINT16_C(x)\000" .LASF756: .ascii "PRIx32 __PRI32(x)\000" -.LASF999: +.LASF1039: .ascii "tim4_init\000" -.LASF948: +.LASF985: .ascii "uint32_t\000" .LASF878: .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" @@ -6172,13 +6400,13 @@ main: .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" .LASF506: .ascii "_SYS__INTSUP_H \000" -.LASF982: +.LASF1019: .ascii "OPTCR\000" .LASF290: .ascii "__SACCUM_EPSILON__ 0x1P-7HK\000" .LASF415: .ascii "__GCC_ASM_FLAG_OUTPUTS__ 1\000" -.LASF913: +.LASF931: .ascii "FLASH_BASE_ADDR (0x40023C00U)\000" .LASF745: .ascii "SCNxFAST16 __SCN16FAST(x)\000" @@ -6224,13 +6452,13 @@ main: .ascii "__PRI16(x) __INT16 __STRINGIFY(x)\000" .LASF159: .ascii "__FLT_HAS_DENORM__ 1\000" -.LASF910: +.LASF928: .ascii "PINNUM(pin) (pin & 0b1111)\000" .LASF768: .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" .LASF171: .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" -.LASF939: +.LASF976: .ascii "short unsigned int\000" .LASF276: .ascii "__LLFRACT_FBIT__ 63\000" @@ -6238,6 +6466,8 @@ main: .ascii "__FLT32_HAS_INFINITY__ 1\000" .LASF416: .ascii "__thumb__ 1\000" +.LASF968: + .ascii "USART_BRR_MANTISSA_BIT 4\000" .LASF421: .ascii "__ARMEL__ 1\000" .LASF690: @@ -6246,7 +6476,9 @@ main: .ascii "__HQ_FBIT__ 15\000" .LASF854: .ascii "__bool_true_false_are_defined 1\000" -.LASF907: +.LASF962: + .ascii "USART_CR1_UE_BIT 13\000" +.LASF925: .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" .ascii "R + (GPIO_PORT_OFFSET * port)))\000" .LASF798: @@ -6257,7 +6489,7 @@ main: .ascii "__SIZE_MAX__ 0xffffffffU\000" .LASF818: .ascii "PRIXFAST64 __PRI64FAST(X)\000" -.LASF912: +.LASF930: .ascii "FLASH_H_ \000" .LASF412: .ascii "__ARM_ARCH\000" @@ -6275,7 +6507,7 @@ main: .ascii "SCNuFAST32 __SCN32FAST(u)\000" .LASF522: .ascii "long +4\000" -.LASF951: +.LASF988: .ascii "AHB1RSTR\000" .LASF723: .ascii "SCNx16 __SCN16(x)\000" @@ -6321,6 +6553,8 @@ main: .ascii "__DBL_MIN_10_EXP__ (-307)\000" .LASF795: .ascii "PRIx64 __PRI64(x)\000" +.LASF964: + .ascii "USART_CR1_TE_BIT 3\000" .LASF512: .ascii "__int20\000" .LASF619: @@ -6345,7 +6579,7 @@ main: .ascii "__INT_LEAST64_TYPE__ long long int\000" .LASF103: .ascii "__UINT16_MAX__ 0xffff\000" -.LASF924: +.LASF942: .ascii "PWR_BASE_ADDR (0x40007000U)\000" .LASF446: .ascii "__ARM_FEATURE_CDE_COPROC\000" diff --git a/build/main.i b/build/main.i index 1404660..ef8b24f 100644 --- a/build/main.i +++ b/build/main.i @@ -2097,9 +2097,17 @@ struct rcc { #define RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << RCC_CFGR_SW_BIT) + +#define RCC_AHB1ENR_GPIOAEN_BIT 0 +#define RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAEN_BIT) + + #define RCC_APB1ENR_PWREN_BIT 28 #define RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PWREN_BIT) +#define RCC_APB1ENR_USART2EN_BIT 17 +#define RCC_APB1ENR_USART2EN_ENABLE (1 << RCC_APB1ENR_USART2EN_BIT) + #define RCC_APB1ENR_TIM4_BIT 2 #define RCC_APB1ENR_TIM4_ENABLE (1 << RCC_APB1ENR_TIM4_BIT) # 5 "src/main.c" 2 @@ -2119,10 +2127,36 @@ struct gpio { volatile uint32_t ODR; volatile uint32_t BSRR; volatile uint32_t LCKR; - volatile uint32_t AFRL[2]; - volatile uint32_t AFRH[2]; + volatile uint32_t AFRL; + volatile uint32_t AFRH; }; +#define GPIOA_BASE_ADDR (0x40020000U) +#define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) + + +#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_MODER3_MASK (0b11) +#define GPIO_MODER_MODER3_AF (0b10) + +#define GPIO_MODER_MODER2_BIT 4 +#define GPIO_MODER_MODER2_MASK (0b11) +#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRL_AFRL3_BIT 12 +#define GPIO_AFRL_AFRL3_MASK (0b1111) +#define GPIO_AFRL_AFRL3_USART2_RX (0b0111) + +#define GPIO_AFRL_AFRL2_BIT 8 +#define GPIO_AFRL_AFRL2_MASK (0b1111) +#define GPIO_AFRL_AFRL2_USART2_TX (0b0111) + + + + + + #define GPIO_BASE_ADDR (0x40020000U) #define GPIO_PORT_OFFSET (0x400U) #define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) @@ -2144,9 +2178,9 @@ typedef enum { void gpio_set_mode(uint16_t pin, GPIO_MODE mode); void gpio_write(uint16_t pin, -# 40 "src/gpio.h" 3 4 +# 66 "src/gpio.h" 3 4 _Bool -# 40 "src/gpio.h" +# 66 "src/gpio.h" val); # 6 "src/main.c" 2 # 1 "src/flash.h" 1 @@ -2237,12 +2271,69 @@ struct timer { #define TIM4_BASE_ADDR (0x40000800U) #define TIM4 ((struct timer *) TIM4_BASE_ADDR) -#define TIM4_CR_CEN_BIT 0 -#define TIM4_ENABLE (1 << TIM4_CR_CEN_BIT) +#define TIM_CR1_CEN_BIT 0 +#define TIM_ENABLE (1 << TIM_CR1_CEN_BIT) void tim4_init(void); void tim4_start(void); # 9 "src/main.c" 2 +# 1 "src/usart.h" 1 + +#define USART_H_ + + + +struct usart { + volatile uint32_t SR; + volatile uint32_t DR; + volatile uint32_t BRR; + volatile uint32_t CR1; + volatile uint32_t CR2; + volatile uint32_t CR3; + volatile uint32_t GTPR; +}; + +#define USART2_BASE_ADDR (0x40004400U) +#define USART2 ((struct usart *) USART2_BASE_ADDR) + + + +#define USART_SR_TXE_BIT 7 +#define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT) + + +#define USART_SR_RXNE_BIT 5 +#define USART_SR_RXNE_READY (1 <AHB1ENR |= (1 << (led >> 8)); @@ -2322,19 +2415,21 @@ int main(void) { uint16_t counter = ((struct timer *) (0x40000800U))->CNT; -# 87 "src/main.c" 3 4 +# 90 "src/main.c" 3 4 _Bool -# 87 "src/main.c" +# 90 "src/main.c" led_on = -# 87 "src/main.c" 3 4 +# 90 "src/main.c" 3 4 ((_Bool)+0u) -# 87 "src/main.c" +# 90 "src/main.c" ; while(1) { if ((((struct timer *) (0x40000800U))->CNT - counter) >= 250) { led_on = !led_on; gpio_write(led, led_on); + usart2_write_byte('a'); + counter = ((struct timer *) (0x40000800U))->CNT; } }; diff --git a/build/main.o b/build/main.o index 7baa25a3a5ce343d9fe13e2cda2b95d1fcc6e8b0..79371523de9fe81b7706c85ff380249d4ea3da88 100644 GIT binary patch delta 12424 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 SC5f0F3=FIw3qh74xfTG!Ee8+) delta 10093 zcmZqaWxny7X@Ww%!A1rUU^M}e3>pl93;_&`3=9lP3=9m)3=Ckl3IhX!DwM6pz`&pm zWos}nFla*AS_}*f+EBI*0|SFDl�Wz@QIh8!#|17(&@b3=9m$3=H*P3qY2eLM6-? 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 ((maj) << 16) + (min))\000" +.LASF653: + .ascii "_T_WCHAR \000" +.LASF435: + .ascii "__THUMB_INTERWORK__ 1\000" +.LASF576: + .ascii "_INTPTR_T_DECLARED \000" +.LASF475: + .ascii "_WANT_IO_LONG_LONG 1\000" +.LASF243: + .ascii "__FLT32X_HAS_INFINITY__ 1\000" +.LASF619: + .ascii "INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1)\000" +.LASF673: + .ascii "__SCN8LEAST(x) __LEAST8 __STRINGIFY(x)\000" +.LASF856: + .ascii "RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT)\000" +.LASF55: + .ascii "__UINT_LEAST8_TYPE__ unsigned char\000" +.LASF728: + .ascii "PRIuLEAST16 __PRI16LEAST(u)\000" +.LASF296: + .ascii "__ACCUM_FBIT__ 15\000" +.LASF792: + .ascii "PRId64 __PRI64(d)\000" +.LASF872: + .ascii "RCC_PLLCFGR_PLLP(p) ((p & RCC_PLLCFGR_PLLP_MASK) <<" + .ascii " RCC_PLLCFGR_PLLP_BIT)\000" +.LASF302: + .ascii "__UACCUM_IBIT__ 16\000" +.LASF953: + .ascii "long int\000" +.LASF720: + .ascii "SCNd16 __SCN16(d)\000" +.LASF132: + .ascii "__INT_FAST64_MAX__ 0x7fffffffffffffffLL\000" +.LASF236: + .ascii "__FLT32X_DECIMAL_DIG__ 17\000" +.LASF173: + .ascii "__DBL_MIN__ ((double)2.2250738585072014e-308L)\000" +.LASF244: + .ascii "__FLT32X_HAS_QUIET_NAN__ 1\000" +.LASF773: + .ascii "SCNuLEAST32 __SCN32LEAST(u)\000" +.LASF240: + .ascii "__FLT32X_EPSILON__ 2.2204460492503131e-16F32x\000" +.LASF557: + .ascii "___int_least16_t_defined 1\000" +.LASF878: + .ascii "RCC_PLLCFGR_PLLM(m) ((m & RCC_PLLCFGR_PLLM_MASK) <<" + .ascii " RCC_PLLCFGR_PLLM_BIT)\000" +.LASF59: + .ascii "__INT_FAST8_TYPE__ int\000" +.LASF545: + .ascii "_NOINLINE __attribute__ ((__noinline__))\000" +.LASF358: + .ascii "__UDA_FBIT__ 32\000" +.LASF775: + .ascii "PRIdFAST32 __PRI32FAST(d)\000" +.LASF93: + .ascii "__UINTMAX_C(c) c ## ULL\000" +.LASF865: + .ascii "RCC_PLLCFGR_PLLQ_BIT 24\000" +.LASF31: + .ascii "__SIZEOF_POINTER__ 4\000" +.LASF622: + .ascii "INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1)\000" +.LASF371: + .ascii "__GCC_ATOMIC_BOOL_LOCK_FREE 2\000" +.LASF893: + .ascii "RCC_CFGR_SW_MASK (0b11)\000" +.LASF916: + .ascii "GPIO_MODER_MODER2_AF (0b10)\000" +.LASF432: + .ascii "__ARM_NEON__\000" +.LASF588: + .ascii "UINTPTR_MAX (__UINTPTR_MAX__)\000" +.LASF201: + .ascii "__FLT32_MAX_EXP__ 128\000" +.LASF825: + .ascii "__PRIMAX(x) __STRINGIFY(ll ##x)\000" +.LASF39: + .ascii "__UINTMAX_TYPE__ long long unsigned int\000" +.LASF284: + .ascii "__ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR\000" +.LASF698: + .ascii "PRIiFAST8 __PRI8FAST(i)\000" +.LASF936: + .ascii "USART_SR_RXNE_READY (1 <> 8)\000" +.LASF198: + .ascii "__FLT32_DIG__ 6\000" +.LASF899: + .ascii "RCC_APB1ENR_USART2EN_BIT 17\000" +.LASF884: + .ascii "RCC_CFGR_PPRE1_MASK (0b111)\000" +.LASF646: + .ascii "UINTMAX_C(x) __UINTMAX_C(x)\000" +.LASF912: + .ascii "GPIO_MODER_MODER3_MASK (0b11)\000" +.LASF624: + .ascii "UINT_FAST64_MAX (__UINT_FAST64_MAX__)\000" +.LASF555: + .ascii "___int64_t_defined 1\000" +.LASF193: + .ascii "__LDBL_HAS_DENORM__ 1\000" +.LASF384: + .ascii "__HAVE_SPECULATION_SAFE_VALUE 1\000" +.LASF286: + .ascii "__SACCUM_FBIT__ 7\000" +.LASF734: + .ascii "SCNuLEAST16 __SCN16LEAST(u)\000" +.LASF965: + .ascii "APB1RSTR\000" +.LASF298: + .ascii "__ACCUM_MIN__ (-0X1P15K-0X1P15K)\000" +.LASF393: + .ascii "__ARM_FEATURE_CRYPTO\000" +.LASF971: + .ascii "APB1ENR\000" +.LASF742: + .ascii "SCNdFAST16 __SCN16FAST(d)\000" +.LASF867: + .ascii "RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) <<" + .ascii " RCC_PLLCFGR_PLLQ_BIT)\000" +.LASF934: + .ascii "USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT)\000" +.LASF788: + .ascii "__PRI64LEAST(x) __LEAST64 __STRINGIFY(x)\000" +.LASF678: + .ascii "PRIu8 __PRI8(u)\000" +.LASF124: + .ascii "__UINT_LEAST64_MAX__ 0xffffffffffffffffULL\000" +.LASF257: + .ascii "__FRACT_IBIT__ 0\000" +.LASF11: + .ascii "__ATOMIC_ACQUIRE 2\000" +.LASF477: + .ascii "_WANT_USE_GDTOA 1\000" +.LASF229: + .ascii "__FLT64_IS_IEC_60559__ 2\000" +.LASF461: + .ascii "__NEWLIB_PATCHLEVEL__ 0\000" +.LASF26: + .ascii "__ORDER_LITTLE_ENDIAN__ 1234\000" +.LASF869: + .ascii "RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT" + .ascii ")\000" +.LASF155: + .ascii "__FLT_NORM_MAX__ 3.4028234663852886e+38F\000" +.LASF956: + .ascii "long long unsigned int\000" +.LASF612: + .ascii "UINT_LEAST64_MAX (__UINT_LEAST64_MAX__)\000" +.LASF150: + .ascii "__FLT_MIN_10_EXP__ (-37)\000" +.LASF890: + .ascii "RCC_CFGR_SWS_MASK (0b11)\000" +.LASF312: + .ascii "__ULACCUM_IBIT__ 32\000" +.LASF777: + .ascii "PRIoFAST32 __PRI32FAST(o)\000" +.LASF71: + .ascii "__SHRT_MAX__ 0x7fff\000" +.LASF196: + .ascii "__LDBL_IS_IEC_60559__ 2\000" +.LASF696: + .ascii "SCNxLEAST8 __SCN8LEAST(x)\000" +.LASF325: + .ascii "__ULLACCUM_EPSILON__ 0x1P-32ULLK\000" +.LASF570: + .ascii "__int32_t_defined 1\000" +.LASF332: + .ascii "__DQ_FBIT__ 63\000" +.LASF491: + .ascii "__GNU_VISIBLE 0\000" +.LASF287: + .ascii "__SACCUM_IBIT__ 8\000" +.LASF781: + .ascii "SCNdFAST32 __SCN32FAST(d)\000" +.LASF339: + .ascii "__UHQ_IBIT__ 0\000" +.LASF370: + .ascii "__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1\000" +.LASF60: + .ascii "__INT_FAST16_TYPE__ int\000" +.LASF680: + .ascii "PRIX8 __PRI8(X)\000" +.LASF61: + .ascii "__INT_FAST32_TYPE__ int\000" +.LASF288: + .ascii "__SACCUM_MIN__ (-0X1P7HK-0X1P7HK)\000" +.LASF274: + .ascii "__ULFRACT_MAX__ 0XFFFFFFFFP-32ULR\000" +.LASF875: + .ascii "RCC_PLLCFGR_PLLN(n) ((n & RCC_PLLCFGR_PLLN_MASK) <<" + .ascii " RCC_PLLCFGR_PLLN_BIT)\000" +.LASF56: + .ascii "__UINT_LEAST16_TYPE__ short unsigned int\000" +.LASF574: + .ascii "_INTMAX_T_DECLARED \000" +.LASF309: + .ascii "__LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK\000" +.LASF40: + .ascii "__CHAR16_TYPE__ short unsigned int\000" +.LASF231: + .ascii "__FLT32X_DIG__ 15\000" +.LASF741: + .ascii "PRIXFAST16 __PRI16FAST(X)\000" +.LASF834: + .ascii "SCNiMAX __SCNMAX(i)\000" +.LASF853: + .ascii "RCC_CR_PLLRDY_BIT 25\000" +.LASF768: + .ascii "PRIxLEAST32 __PRI32LEAST(x)\000" +.LASF344: + .ascii "__UTQ_FBIT__ 128\000" +.LASF848: + .ascii "SCNoPTR __SCNPTR(o)\000" +.LASF842: + .ascii "PRIoPTR __PRIPTR(o)\000" +.LASF732: + .ascii "SCNiLEAST16 __SCN16LEAST(i)\000" +.LASF15: + .ascii "__FINITE_MATH_ONLY__ 0\000" +.LASF128: + .ascii "__INT_FAST16_MAX__ 0x7fffffff\000" +.LASF550: + .ascii "__have_longlong64 1\000" +.LASF469: + .ascii "_MB_CAPABLE 1\000" +.LASF19: + .ascii "__SIZEOF_SHORT__ 2\000" +.LASF703: + .ascii "SCNdFAST8 __SCN8FAST(d)\000" +.LASF577: + .ascii "_UINTPTR_T_DECLARED \000" +.LASF993: + .ascii "AFRH\000" +.LASF314: + .ascii "__ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK\000" +.LASF992: + .ascii "AFRL\000" +.LASF273: + .ascii "__ULFRACT_MIN__ 0.0ULR\000" +.LASF628: + .ascii "SIZE_MAX (__SIZE_MAX__)\000" +.LASF333: + .ascii "__DQ_IBIT__ 0\000" +.LASF450: + .ascii "__ARM_BF16_FORMAT_ALTERNATIVE\000" +.LASF45: + .ascii "__INT32_TYPE__ long int\000" +.LASF569: + .ascii "_UINT32_T_DECLARED \000" +.LASF521: + .ascii "__int20__ +2\000" +.LASF655: + .ascii "_WCHAR_T_ \000" +.LASF571: + .ascii "_INT64_T_DECLARED \000" +.LASF829: + .ascii "PRIoMAX __PRIMAX(o)\000" +.LASF748: + .ascii "__SCN32(x) __INT32 __STRINGIFY(x)\000" +.LASF744: + .ascii "SCNoFAST16 __SCN16FAST(o)\000" +.LASF997: + .ascii "usart2_init\000" +.LASF345: + .ascii "__UTQ_IBIT__ 0\000" +.LASF925: + .ascii "GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADD" + .ascii "R + (GPIO_PORT_OFFSET * port)))\000" +.LASF348: + .ascii "__SA_FBIT__ 15\000" +.LASF661: + .ascii "__INT_WCHAR_T_H \000" +.LASF237: + .ascii "__FLT32X_MAX__ 1.7976931348623157e+308F32x\000" +.LASF553: + .ascii "___int16_t_defined 1\000" +.LASF438: + .ascii "__ARM_EABI__ 1\000" +.LASF466: + .ascii "_HAVE_INITFINI_ARRAY 1\000" +.LASF733: + .ascii "SCNoLEAST16 __SCN16LEAST(o)\000" +.LASF474: + .ascii "_WANT_IO_C99_FORMATS 1\000" +.LASF163: + .ascii "__FLT_IS_IEC_60559__ 2\000" +.LASF418: + .ascii "__THUMBEL__ 1\000" +.LASF715: + .ascii "PRIi16 __PRI16(i)\000" +.LASF390: + .ascii "__ARM_FEATURE_DSP 1\000" +.LASF940: + .ascii "USART_CR1_UE_ENABLE (1 << USART_CR1_UE_BIT)\000" +.LASF826: + .ascii "__SCNMAX(x) __STRINGIFY(ll ##x)\000" +.LASF327: + .ascii "__QQ_IBIT__ 0\000" +.LASF764: + .ascii "PRIdLEAST32 __PRI32LEAST(d)\000" +.LASF987: + .ascii "OTYPER\000" +.LASF812: + .ascii "SCNuLEAST64 __SCN64LEAST(u)\000" +.LASF644: + .ascii "UINT64_C(x) __UINT64_C(x)\000" +.LASF316: + .ascii "__LLACCUM_FBIT__ 31\000" +.LASF717: + .ascii "PRIu16 __PRI16(u)\000" +.LASF233: + .ascii "__FLT32X_MIN_10_EXP__ (-307)\000" +.LASF594: + .ascii "UINT_LEAST8_MAX (__UINT_LEAST8_MAX__)\000" +.LASF341: + .ascii "__USQ_IBIT__ 0\000" +.LASF6: + .ascii "__GNUC_MINOR__ 3\000" +.LASF454: + .ascii "RCC_H_ \000" +.LASF405: + .ascii "__ARM_FEATURE_NUMERIC_MAXMIN\000" +.LASF923: + .ascii "GPIO_BASE_ADDR (0x40020000U)\000" +.LASF38: + .ascii "__INTMAX_TYPE__ long long int\000" +.LASF512: + .ascii "short\000" +.LASF946: + .ascii "USART_BRR_MANTISSA_MASK (0b111111111111)\000" +.LASF935: + .ascii "USART_SR_RXNE_BIT 5\000" +.LASF436: + .ascii "__ARM_ARCH_7EM__ 1\000" +.LASF428: + .ascii "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC\000" +.LASF968: + .ascii "AHB1ENR\000" +.LASF295: + .ascii "__USACCUM_EPSILON__ 0x1P-8UHK\000" +.LASF178: + .ascii "__DBL_HAS_QUIET_NAN__ 1\000" +.LASF641: + .ascii "INT32_C(x) __INT32_C(x)\000" +.LASF618: + .ascii "UINT_FAST16_MAX (__UINT_FAST16_MAX__)\000" +.LASF546: + .ascii "_NOINLINE_STATIC _NOINLINE static\000" +.LASF279: + .ascii "__LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR\000" +.LASF840: + .ascii "PRIdPTR __PRIPTR(d)\000" +.LASF606: + .ascii "UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)\000" +.LASF731: + .ascii "SCNdLEAST16 __SCN16LEAST(d)\000" +.LASF814: + .ascii "PRIdFAST64 __PRI64FAST(d)\000" +.LASF833: + .ascii "SCNdMAX __SCNMAX(d)\000" +.LASF518: + .ascii "char +0\000" +.LASF67: + .ascii "__INTPTR_TYPE__ int\000" +.LASF68: + .ascii "__UINTPTR_TYPE__ unsigned int\000" +.LASF837: + .ascii "SCNxMAX __SCNMAX(x)\000" +.LASF362: + .ascii "__REGISTER_PREFIX__ \000" +.LASF204: + .ascii "__FLT32_MAX__ 3.4028234663852886e+38F32\000" +.LASF165: + .ascii "__DBL_DIG__ 15\000" +.LASF275: + .ascii "__ULFRACT_EPSILON__ 0x1P-32ULR\000" +.LASF963: + .ascii "AHB2RSTR\000" +.LASF672: + .ascii "__SCN8(x) __INT8 __STRINGIFY(x)\000" +.LASF882: + .ascii "RCC_CFGR_PPRE2_MASK (0b111)\000" +.LASF23: + .ascii "__SIZEOF_SIZE_T__ 4\000" +.LASF854: + .ascii "RCC_CR_PLLRDY_LOCKED (1 << RCC_CR_PLLRDY_BIT)\000" +.LASF50: + .ascii "__UINT64_TYPE__ long long unsigned int\000" +.LASF580: + .ascii "__int_least32_t_defined 1\000" +.LASF116: + .ascii "__INT64_C(c) c ## LL\000" +.LASF464: + .ascii "_FVWRITE_IN_STREAMIO 1\000" +.LASF920: + .ascii "GPIO_AFRL_AFRL2_BIT 8\000" +.LASF190: + .ascii "__LDBL_MIN__ 2.2250738585072014e-308L\000" +.LASF445: + .ascii "__ARM_FEATURE_CDE\000" +.LASF297: + .ascii "__ACCUM_IBIT__ 16\000" +.LASF510: + .ascii "unsigned\000" +.LASF381: + .ascii "__GCC_DESTRUCTIVE_SIZE 64\000" +.LASF989: + .ascii "PUPDR\000" +.LASF836: + .ascii "SCNuMAX __SCNMAX(u)\000" +.LASF932: + .ascii "USART2 ((struct usart *) USART2_BASE_ADDR)\000" +.LASF121: + .ascii "__UINT16_C(c) c\000" +.LASF359: + .ascii "__UDA_IBIT__ 32\000" +.LASF535: + .ascii "__LEAST16 \"h\"\000" +.LASF877: + .ascii "RCC_PLLCFGR_PLLM_MASK (0b111111)\000" +.LASF587: + .ascii "INTPTR_MAX (__INTPTR_MAX__)\000" +.LASF711: + .ascii "__SCN16(x) __INT16 __STRINGIFY(x)\000" +.LASF607: + .ascii "INT64_MIN (-__INT64_MAX__ - 1)\000" +.LASF9: + .ascii "__ATOMIC_RELAXED 0\000" +.LASF543: + .ascii "_ATTRIBUTE(attrs) __attribute__ (attrs)\000" +.LASF443: + .ascii "__ARM_FEATURE_COPROC\000" +.LASF177: + .ascii "__DBL_HAS_INFINITY__ 1\000" +.LASF95: + .ascii "__SIG_ATOMIC_MAX__ 0x7fffffff\000" +.LASF609: + .ascii "UINT64_MAX (__UINT64_MAX__)\000" +.LASF472: + .ascii "_RETARGETABLE_LOCKING 1\000" +.LASF440: + .ascii "__ARM_ARCH_EXT_IDIV__ 1\000" +.LASF638: + .ascii "UINT8_C(x) __UINT8_C(x)\000" +.LASF170: + .ascii "__DBL_DECIMAL_DIG__ 17\000" +.LASF551: + .ascii "__have_long32 1\000" +.LASF855: + .ascii "RCC_CR_PLLON_BIT 24\000" +.LASF658: + .ascii "_WCHAR_T_DEFINED \000" +.LASF793: + .ascii "PRIi64 __PRI64(i)\000" +.LASF811: + .ascii "SCNoLEAST64 __SCN64LEAST(o)\000" +.LASF573: + .ascii "__int64_t_defined 1\000" +.LASF99: + .ascii "__INT16_MAX__ 0x7fff\000" +.LASF479: + .ascii "__SYS_CONFIG_H__ \000" +.LASF876: + .ascii "RCC_PLLCFGR_PLLM_BIT 0\000" +.LASF8: + .ascii "__VERSION__ \"12.3.1 20230626\"\000" +.LASF498: + .ascii "__SSP_FORTIFY_LEVEL 0\000" +.LASF530: + .ascii "__FAST8 \000" +.LASF497: + .ascii "__XSI_VISIBLE 0\000" +.LASF990: + .ascii "BSRR\000" +.LASF795: + .ascii "PRIu64 __PRI64(u)\000" +.LASF97: + .ascii "__SIG_ATOMIC_WIDTH__ 32\000" +.LASF224: + .ascii "__FLT64_EPSILON__ 2.2204460492503131e-16F64\000" +.LASF831: + .ascii "PRIxMAX __PRIMAX(x)\000" +.LASF488: + .ascii "__GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi)\000" +.LASF361: + .ascii "__UTA_IBIT__ 64\000" +.LASF322: + .ascii "__ULLACCUM_IBIT__ 32\000" +.LASF396: + .ascii "__ARM_FEATURE_CRC32\000" +.LASF285: + .ascii "__ULLFRACT_EPSILON__ 0x1P-64ULLR\000" +.LASF4: + .ascii "__STDC_HOSTED__ 1\000" +.LASF827: + .ascii "PRIdMAX __PRIMAX(d)\000" +.LASF388: + .ascii "__SIZEOF_WINT_T__ 4\000" +.LASF881: + .ascii "RCC_CFGR_PPRE2_BIT 13\000" +.LASF783: + .ascii "SCNoFAST32 __SCN32FAST(o)\000" +.LASF394: + .ascii "__ARM_FEATURE_UNALIGNED 1\000" +.LASF451: + .ascii "__GXX_TYPEINFO_EQUALITY_INLINE 0\000" +.LASF187: + .ascii "__LDBL_DECIMAL_DIG__ 17\000" +.LASF702: + .ascii "PRIXFAST8 __PRI8FAST(X)\000" +.LASF308: + .ascii "__LACCUM_MIN__ (-0X1P31LK-0X1P31LK)\000" +.LASF785: + .ascii "SCNxFAST32 __SCN32FAST(x)\000" +.LASF126: + .ascii "__INT_FAST8_MAX__ 0x7fffffff\000" +.LASF209: + .ascii "__FLT32_HAS_DENORM__ 1\000" +.LASF478: + .ascii "_WIDE_ORIENT 1\000" +.LASF323: + .ascii "__ULLACCUM_MIN__ 0.0ULLK\000" +.LASF131: + .ascii "__INT_FAST32_WIDTH__ 32\000" +.LASF222: + .ascii "__FLT64_NORM_MAX__ 1.7976931348623157e+308F64\000" +.LASF544: + .ascii "_ELIDABLE_INLINE static __inline__\000" +.LASF528: + .ascii "__INT32 \"l\"\000" +.LASF442: + .ascii "__ARM_ASM_SYNTAX_UNIFIED__ 1\000" +.LASF738: + .ascii "PRIoFAST16 __PRI16FAST(o)\000" +.LASF750: + .ascii "__SCN32LEAST(x) __LEAST32 __STRINGIFY(x)\000" +.LASF49: + .ascii "__UINT32_TYPE__ long unsigned int\000" +.LASF397: + .ascii "__ARM_FEATURE_DOTPROD\000" +.LASF747: + .ascii "__PRI32(x) __INT32 __STRINGIFY(x)\000" +.LASF437: + .ascii "__ARM_PCS_VFP 1\000" +.LASF700: + .ascii "PRIuFAST8 __PRI8FAST(u)\000" +.LASF283: + .ascii "__ULLFRACT_MIN__ 0.0ULLR\000" +.LASF652: + .ascii "_T_WCHAR_ \000" +.LASF562: + .ascii "_INT8_T_DECLARED \000" +.LASF382: + .ascii "__GCC_CONSTRUCTIVE_SIZE 64\000" +.LASF665: + .ascii "_BSD_WCHAR_T_\000" +.LASF983: + .ascii "PLLI2SCFGR\000" +.LASF277: + .ascii "__LLFRACT_IBIT__ 0\000" +.LASF640: + .ascii "UINT16_C(x) __UINT16_C(x)\000" +.LASF757: + .ascii "PRIx32 __PRI32(x)\000" +.LASF278: + .ascii "__LLFRACT_MIN__ (-0.5LLR-0.5LLR)\000" +.LASF959: + .ascii "uint32_t\000" +.LASF873: + .ascii "RCC_PLLCFGR_PLLN_BIT 6\000" +.LASF690: + .ascii "PRIxLEAST8 __PRI8LEAST(x)\000" +.LASF507: + .ascii "_SYS__INTSUP_H \000" +.LASF290: + .ascii "__SACCUM_EPSILON__ 0x1P-7HK\000" +.LASF415: + .ascii "__GCC_ASM_FLAG_OUTPUTS__ 1\000" +.LASF746: + .ascii "SCNxFAST16 __SCN16FAST(x)\000" +.LASF471: + .ascii "_REENT_CHECK_VERIFY 1\000" +.LASF776: + .ascii "PRIiFAST32 __PRI32FAST(i)\000" +.LASF424: + .ascii "__ARM_FP 4\000" +.LASF719: + .ascii "PRIX16 __PRI16(X)\000" +.LASF64: + .ascii "__UINT_FAST16_TYPE__ unsigned int\000" +.LASF782: + .ascii "SCNiFAST32 __SCN32FAST(i)\000" +.LASF355: + .ascii "__UHA_IBIT__ 8\000" +.LASF300: + .ascii "__ACCUM_EPSILON__ 0x1P-15K\000" +.LASF315: + .ascii "__ULACCUM_EPSILON__ 0x1P-32ULK\000" +.LASF181: + .ascii "__LDBL_DIG__ 15\000" +.LASF89: + .ascii "__SIZE_WIDTH__ 32\000" +.LASF871: + .ascii "RCC_PLLCFGR_PLLP_MASK (0b11)\000" +.LASF481: + .ascii "_SUPPORTS_ERREXCEPT \000" +.LASF215: + .ascii "__FLT64_DIG__ 15\000" +.LASF525: + .ascii "_INT32_EQ_LONG \000" +.LASF77: + .ascii "__WINT_MAX__ 0xffffffffU\000" +.LASF108: + .ascii "__INT_LEAST8_WIDTH__ 8\000" +.LASF52: + .ascii "__INT_LEAST16_TYPE__ short int\000" +.LASF326: + .ascii "__QQ_FBIT__ 7\000" +.LASF928: + .ascii "PINNUM(pin) (pin & 0b1111)\000" +.LASF769: + .ascii "PRIXLEAST32 __PRI32LEAST(X)\000" +.LASF171: + .ascii "__DBL_MAX__ ((double)1.7976931348623157e+308L)\000" +.LASF952: + .ascii "short unsigned int\000" +.LASF276: + .ascii "__LLFRACT_FBIT__ 63\000" +.LASF210: + .ascii "__FLT32_HAS_INFINITY__ 1\000" +.LASF416: + .ascii "__thumb__ 1\000" +.LASF945: + .ascii "USART_BRR_MANTISSA_BIT 4\000" +.LASF421: + .ascii "__ARMEL__ 1\000" +.LASF691: + .ascii "PRIXLEAST8 __PRI8LEAST(X)\000" +.LASF328: + .ascii "__HQ_FBIT__ 15\000" +.LASF908: + .ascii "__bool_true_false_are_defined 1\000" +.LASF939: + .ascii "USART_CR1_UE_BIT 13\000" +.LASF911: + .ascii "GPIO_MODER_MODER3_BIT 7\000" +.LASF799: + .ascii "SCNi64 __SCN64(i)\000" +.LASF861: + .ascii "RCC_CR_HSIRDY_BIT 1\000" +.LASF80: + .ascii "__SIZE_MAX__ 0xffffffffU\000" +.LASF819: + .ascii "PRIXFAST64 __PRI64FAST(X)\000" +.LASF412: + .ascii "__ARM_ARCH\000" +.LASF591: + .ascii "UINT8_MAX (__UINT8_MAX__)\000" +.LASF73: + .ascii "__LONG_MAX__ 0x7fffffffL\000" +.LASF615: + .ascii "UINT_FAST8_MAX (__UINT_FAST8_MAX__)\000" +.LASF578: + .ascii "__int_least8_t_defined 1\000" +.LASF801: + .ascii "SCNu64 __SCN64(u)\000" +.LASF784: + .ascii "SCNuFAST32 __SCN32FAST(u)\000" +.LASF523: + .ascii "long +4\000" +.LASF962: + .ascii "AHB1RSTR\000" +.LASF724: + .ascii "SCNx16 __SCN16(x)\000" +.LASF403: + .ascii "__ARM_FEATURE_LDREX 7\000" +.LASF789: + .ascii "__SCN64LEAST(x) __LEAST64 __STRINGIFY(x)\000" +.LASF280: + .ascii "__LLFRACT_EPSILON__ 0x1P-63LLR\000" +.LASF797: + .ascii "PRIX64 __PRI64(X)\000" +.LASF249: + .ascii "__SFRACT_MAX__ 0X7FP-7HR\000" +.LASF230: + .ascii "__FLT32X_MANT_DIG__ 53\000" +.LASF86: + .ascii "__WCHAR_WIDTH__ 32\000" +.LASF762: + .ascii "SCNu32 __SCN32(u)\000" +.LASF818: + .ascii "PRIxFAST64 __PRI64FAST(x)\000" +.LASF817: + .ascii "PRIuFAST64 __PRI64FAST(u)\000" +.LASF110: + .ascii "__INT16_C(c) c\000" +.LASF710: + .ascii "__PRI16FAST(x) __FAST16 __STRINGIFY(x)\000" +.LASF351: + .ascii "__DA_IBIT__ 32\000" +.LASF708: + .ascii "__PRI16(x) __INT16 __STRINGIFY(x)\000" +.LASF252: + .ascii "__USFRACT_IBIT__ 0\000" +.LASF519: + .ascii "short +1\000" +.LASF694: + .ascii "SCNoLEAST8 __SCN8LEAST(o)\000" +.LASF13: + .ascii "__ATOMIC_ACQ_REL 4\000" +.LASF51: + .ascii "__INT_LEAST8_TYPE__ signed char\000" +.LASF329: + .ascii "__HQ_IBIT__ 0\000" +.LASF167: + .ascii "__DBL_MIN_10_EXP__ (-307)\000" +.LASF796: + .ascii "PRIx64 __PRI64(x)\000" +.LASF941: + .ascii "USART_CR1_TE_BIT 3\000" +.LASF513: + .ascii "__int20\000" +.LASF620: + .ascii "INT_FAST32_MAX (__INT_FAST32_MAX__)\000" +.LASF205: + .ascii "__FLT32_NORM_MAX__ 3.4028234663852886e+38F32\000" +.LASF905: + .ascii "bool _Bool\000" +.LASF632: + .ascii "PTRDIFF_MIN (-PTRDIFF_MAX - 1)\000" +.LASF92: + .ascii "__UINTMAX_MAX__ 0xffffffffffffffffULL\000" +.LASF164: + .ascii "__DBL_MANT_DIG__ 53\000" +.LASF272: + .ascii "__ULFRACT_IBIT__ 0\000" +.LASF887: + .ascii "RCC_CFGR_HPRE_MASK (0b1111)\000" +.LASF72: + .ascii "__INT_MAX__ 0x7fffffff\000" +.LASF54: + .ascii "__INT_LEAST64_TYPE__ long long int\000" +.LASF103: + .ascii "__UINT16_MAX__ 0xffff\000" +.LASF446: + .ascii "__ARM_FEATURE_CDE_COPROC\000" +.LASF766: + .ascii "PRIoLEAST32 __PRI32LEAST(o)\000" +.LASF91: + .ascii "__INTMAX_C(c) c ## LL\000" + .ident "GCC: (Arm GNU Toolchain 12.3.Rel1 (Build arm-12.35)) 12.3.1 20230626" diff --git a/build/usart.i b/build/usart.i new file mode 100644 index 0000000..8e1f4ff --- /dev/null +++ b/build/usart.i @@ -0,0 +1,2287 @@ +# 0 "src/usart.c" +# 1 "/home/alex/code/own/c-compile-experiments//" +# 0 "" +#define __STDC__ 1 +# 0 "" +#define __STDC_VERSION__ 202000L +# 0 "" +#define __STDC_UTF_16__ 1 +# 0 "" +#define __STDC_UTF_32__ 1 +# 0 "" +#define __STDC_HOSTED__ 1 +# 0 "" +#define __GNUC__ 12 +# 0 "" +#define __GNUC_MINOR__ 3 +# 0 "" +#define __GNUC_PATCHLEVEL__ 1 +# 0 "" +#define __VERSION__ "12.3.1 20230626" +# 0 "" +#define __ATOMIC_RELAXED 0 +# 0 "" +#define __ATOMIC_SEQ_CST 5 +# 0 "" +#define __ATOMIC_ACQUIRE 2 +# 0 "" +#define __ATOMIC_RELEASE 3 +# 0 "" +#define __ATOMIC_ACQ_REL 4 +# 0 "" +#define __ATOMIC_CONSUME 1 +# 0 "" +#define __FINITE_MATH_ONLY__ 0 +# 0 "" +#define __SIZEOF_INT__ 4 +# 0 "" +#define __SIZEOF_LONG__ 4 +# 0 "" +#define __SIZEOF_LONG_LONG__ 8 +# 0 "" +#define __SIZEOF_SHORT__ 2 +# 0 "" +#define __SIZEOF_FLOAT__ 4 +# 0 "" +#define __SIZEOF_DOUBLE__ 8 +# 0 "" +#define __SIZEOF_LONG_DOUBLE__ 8 +# 0 "" +#define __SIZEOF_SIZE_T__ 4 +# 0 "" +#define __CHAR_BIT__ 8 +# 0 "" +#define __BIGGEST_ALIGNMENT__ 8 +# 0 "" +#define __ORDER_LITTLE_ENDIAN__ 1234 +# 0 "" +#define __ORDER_BIG_ENDIAN__ 4321 +# 0 "" +#define __ORDER_PDP_ENDIAN__ 3412 +# 0 "" +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +# 0 "" +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +# 0 "" +#define __SIZEOF_POINTER__ 4 +# 0 "" +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +# 0 "" +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +# 0 "" +#define __SIZE_TYPE__ unsigned int +# 0 "" +#define __PTRDIFF_TYPE__ int +# 0 "" +#define __WCHAR_TYPE__ unsigned int +# 0 "" +#define __WINT_TYPE__ unsigned int +# 0 "" +#define __INTMAX_TYPE__ long long int +# 0 "" +#define __UINTMAX_TYPE__ long long unsigned int +# 0 "" +#define __CHAR16_TYPE__ short unsigned int +# 0 "" +#define __CHAR32_TYPE__ long unsigned int +# 0 "" +#define __SIG_ATOMIC_TYPE__ int +# 0 "" +#define __INT8_TYPE__ signed char +# 0 "" +#define __INT16_TYPE__ short int +# 0 "" +#define __INT32_TYPE__ long int +# 0 "" +#define __INT64_TYPE__ long long int +# 0 "" +#define __UINT8_TYPE__ unsigned char +# 0 "" +#define __UINT16_TYPE__ short unsigned int +# 0 "" +#define __UINT32_TYPE__ long unsigned int +# 0 "" +#define __UINT64_TYPE__ long long unsigned int +# 0 "" +#define __INT_LEAST8_TYPE__ signed char +# 0 "" +#define __INT_LEAST16_TYPE__ short int +# 0 "" +#define __INT_LEAST32_TYPE__ long int +# 0 "" +#define __INT_LEAST64_TYPE__ long long int +# 0 "" +#define __UINT_LEAST8_TYPE__ unsigned char +# 0 "" +#define __UINT_LEAST16_TYPE__ short unsigned int +# 0 "" +#define __UINT_LEAST32_TYPE__ long unsigned int +# 0 "" +#define __UINT_LEAST64_TYPE__ long long unsigned int +# 0 "" +#define __INT_FAST8_TYPE__ int +# 0 "" +#define __INT_FAST16_TYPE__ int +# 0 "" +#define __INT_FAST32_TYPE__ int +# 0 "" +#define __INT_FAST64_TYPE__ long long int +# 0 "" +#define __UINT_FAST8_TYPE__ unsigned int +# 0 "" +#define __UINT_FAST16_TYPE__ unsigned int +# 0 "" +#define __UINT_FAST32_TYPE__ unsigned int +# 0 "" +#define __UINT_FAST64_TYPE__ long long unsigned int +# 0 "" +#define __INTPTR_TYPE__ int +# 0 "" +#define __UINTPTR_TYPE__ unsigned int +# 0 "" +#define __GXX_ABI_VERSION 1017 +# 0 "" +#define __SCHAR_MAX__ 0x7f +# 0 "" +#define __SHRT_MAX__ 0x7fff +# 0 "" +#define __INT_MAX__ 0x7fffffff +# 0 "" +#define __LONG_MAX__ 0x7fffffffL +# 0 "" +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +# 0 "" +#define __WCHAR_MAX__ 0xffffffffU +# 0 "" +#define __WCHAR_MIN__ 0U +# 0 "" +#define __WINT_MAX__ 0xffffffffU +# 0 "" +#define __WINT_MIN__ 0U +# 0 "" +#define __PTRDIFF_MAX__ 0x7fffffff +# 0 "" +#define __SIZE_MAX__ 0xffffffffU +# 0 "" +#define __SCHAR_WIDTH__ 8 +# 0 "" +#define __SHRT_WIDTH__ 16 +# 0 "" +#define __INT_WIDTH__ 32 +# 0 "" +#define __LONG_WIDTH__ 32 +# 0 "" +#define __LONG_LONG_WIDTH__ 64 +# 0 "" +#define __WCHAR_WIDTH__ 32 +# 0 "" +#define __WINT_WIDTH__ 32 +# 0 "" +#define __PTRDIFF_WIDTH__ 32 +# 0 "" +#define __SIZE_WIDTH__ 32 +# 0 "" +#define __INTMAX_MAX__ 0x7fffffffffffffffLL +# 0 "" +#define __INTMAX_C(c) c ## LL +# 0 "" +#define __UINTMAX_MAX__ 0xffffffffffffffffULL +# 0 "" +#define __UINTMAX_C(c) c ## ULL +# 0 "" +#define __INTMAX_WIDTH__ 64 +# 0 "" +#define __SIG_ATOMIC_MAX__ 0x7fffffff +# 0 "" +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +# 0 "" +#define __SIG_ATOMIC_WIDTH__ 32 +# 0 "" +#define __INT8_MAX__ 0x7f +# 0 "" +#define __INT16_MAX__ 0x7fff +# 0 "" +#define __INT32_MAX__ 0x7fffffffL +# 0 "" +#define __INT64_MAX__ 0x7fffffffffffffffLL +# 0 "" +#define __UINT8_MAX__ 0xff +# 0 "" +#define __UINT16_MAX__ 0xffff +# 0 "" +#define __UINT32_MAX__ 0xffffffffUL +# 0 "" +#define __UINT64_MAX__ 0xffffffffffffffffULL +# 0 "" +#define __INT_LEAST8_MAX__ 0x7f +# 0 "" +#define __INT8_C(c) c +# 0 "" +#define __INT_LEAST8_WIDTH__ 8 +# 0 "" +#define __INT_LEAST16_MAX__ 0x7fff +# 0 "" +#define __INT16_C(c) c +# 0 "" +#define __INT_LEAST16_WIDTH__ 16 +# 0 "" +#define __INT_LEAST32_MAX__ 0x7fffffffL +# 0 "" +#define __INT32_C(c) c ## L +# 0 "" +#define __INT_LEAST32_WIDTH__ 32 +# 0 "" +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL +# 0 "" +#define __INT64_C(c) c ## LL +# 0 "" +#define __INT_LEAST64_WIDTH__ 64 +# 0 "" +#define __UINT_LEAST8_MAX__ 0xff +# 0 "" +#define __UINT8_C(c) c +# 0 "" +#define __UINT_LEAST16_MAX__ 0xffff +# 0 "" +#define __UINT16_C(c) c +# 0 "" +#define __UINT_LEAST32_MAX__ 0xffffffffUL +# 0 "" +#define __UINT32_C(c) c ## UL +# 0 "" +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL +# 0 "" +#define __UINT64_C(c) c ## ULL +# 0 "" +#define __INT_FAST8_MAX__ 0x7fffffff +# 0 "" +#define __INT_FAST8_WIDTH__ 32 +# 0 "" +#define __INT_FAST16_MAX__ 0x7fffffff +# 0 "" +#define __INT_FAST16_WIDTH__ 32 +# 0 "" +#define __INT_FAST32_MAX__ 0x7fffffff +# 0 "" +#define __INT_FAST32_WIDTH__ 32 +# 0 "" +#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL +# 0 "" +#define __INT_FAST64_WIDTH__ 64 +# 0 "" +#define __UINT_FAST8_MAX__ 0xffffffffU +# 0 "" +#define __UINT_FAST16_MAX__ 0xffffffffU +# 0 "" +#define __UINT_FAST32_MAX__ 0xffffffffU +# 0 "" +#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL +# 0 "" +#define __INTPTR_MAX__ 0x7fffffff +# 0 "" +#define __INTPTR_WIDTH__ 32 +# 0 "" +#define __UINTPTR_MAX__ 0xffffffffU +# 0 "" +#define __GCC_IEC_559 0 +# 0 "" +#define __GCC_IEC_559_COMPLEX 0 +# 0 "" +#define __FLT_EVAL_METHOD__ 0 +# 0 "" +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +# 0 "" +#define __DEC_EVAL_METHOD__ 2 +# 0 "" +#define __FLT_RADIX__ 2 +# 0 "" +#define __FLT_MANT_DIG__ 24 +# 0 "" +#define __FLT_DIG__ 6 +# 0 "" +#define __FLT_MIN_EXP__ (-125) +# 0 "" +#define __FLT_MIN_10_EXP__ (-37) +# 0 "" +#define __FLT_MAX_EXP__ 128 +# 0 "" +#define __FLT_MAX_10_EXP__ 38 +# 0 "" +#define __FLT_DECIMAL_DIG__ 9 +# 0 "" +#define __FLT_MAX__ 3.4028234663852886e+38F +# 0 "" +#define __FLT_NORM_MAX__ 3.4028234663852886e+38F +# 0 "" +#define __FLT_MIN__ 1.1754943508222875e-38F +# 0 "" +#define __FLT_EPSILON__ 1.1920928955078125e-7F +# 0 "" +#define __FLT_DENORM_MIN__ 1.4012984643248171e-45F +# 0 "" +#define __FLT_HAS_DENORM__ 1 +# 0 "" +#define __FLT_HAS_INFINITY__ 1 +# 0 "" +#define __FLT_HAS_QUIET_NAN__ 1 +# 0 "" +#define __FP_FAST_FMAF 1 +# 0 "" +#define __FLT_IS_IEC_60559__ 2 +# 0 "" +#define __DBL_MANT_DIG__ 53 +# 0 "" +#define __DBL_DIG__ 15 +# 0 "" +#define __DBL_MIN_EXP__ (-1021) +# 0 "" +#define __DBL_MIN_10_EXP__ (-307) +# 0 "" +#define __DBL_MAX_EXP__ 1024 +# 0 "" +#define __DBL_MAX_10_EXP__ 308 +# 0 "" +#define __DBL_DECIMAL_DIG__ 17 +# 0 "" +#define __DBL_MAX__ ((double)1.7976931348623157e+308L) +# 0 "" +#define __DBL_NORM_MAX__ ((double)1.7976931348623157e+308L) +# 0 "" +#define __DBL_MIN__ ((double)2.2250738585072014e-308L) +# 0 "" +#define __DBL_EPSILON__ ((double)2.2204460492503131e-16L) +# 0 "" +#define __DBL_DENORM_MIN__ ((double)4.9406564584124654e-324L) +# 0 "" +#define __DBL_HAS_DENORM__ 1 +# 0 "" +#define __DBL_HAS_INFINITY__ 1 +# 0 "" +#define __DBL_HAS_QUIET_NAN__ 1 +# 0 "" +#define __DBL_IS_IEC_60559__ 2 +# 0 "" +#define __LDBL_MANT_DIG__ 53 +# 0 "" +#define __LDBL_DIG__ 15 +# 0 "" +#define __LDBL_MIN_EXP__ (-1021) +# 0 "" +#define __LDBL_MIN_10_EXP__ (-307) +# 0 "" +#define __LDBL_MAX_EXP__ 1024 +# 0 "" +#define __LDBL_MAX_10_EXP__ 308 +# 0 "" +#define __DECIMAL_DIG__ 17 +# 0 "" +#define __LDBL_DECIMAL_DIG__ 17 +# 0 "" +#define __LDBL_MAX__ 1.7976931348623157e+308L +# 0 "" +#define __LDBL_NORM_MAX__ 1.7976931348623157e+308L +# 0 "" +#define __LDBL_MIN__ 2.2250738585072014e-308L +# 0 "" +#define __LDBL_EPSILON__ 2.2204460492503131e-16L +# 0 "" +#define __LDBL_DENORM_MIN__ 4.9406564584124654e-324L +# 0 "" +#define __LDBL_HAS_DENORM__ 1 +# 0 "" +#define __LDBL_HAS_INFINITY__ 1 +# 0 "" +#define __LDBL_HAS_QUIET_NAN__ 1 +# 0 "" +#define __LDBL_IS_IEC_60559__ 2 +# 0 "" +#define __FLT32_MANT_DIG__ 24 +# 0 "" +#define __FLT32_DIG__ 6 +# 0 "" +#define __FLT32_MIN_EXP__ (-125) +# 0 "" +#define __FLT32_MIN_10_EXP__ (-37) +# 0 "" +#define __FLT32_MAX_EXP__ 128 +# 0 "" +#define __FLT32_MAX_10_EXP__ 38 +# 0 "" +#define __FLT32_DECIMAL_DIG__ 9 +# 0 "" +#define __FLT32_MAX__ 3.4028234663852886e+38F32 +# 0 "" +#define __FLT32_NORM_MAX__ 3.4028234663852886e+38F32 +# 0 "" +#define __FLT32_MIN__ 1.1754943508222875e-38F32 +# 0 "" +#define __FLT32_EPSILON__ 1.1920928955078125e-7F32 +# 0 "" +#define __FLT32_DENORM_MIN__ 1.4012984643248171e-45F32 +# 0 "" +#define __FLT32_HAS_DENORM__ 1 +# 0 "" +#define __FLT32_HAS_INFINITY__ 1 +# 0 "" +#define __FLT32_HAS_QUIET_NAN__ 1 +# 0 "" +#define __FP_FAST_FMAF32 1 +# 0 "" +#define __FLT32_IS_IEC_60559__ 2 +# 0 "" +#define __FLT64_MANT_DIG__ 53 +# 0 "" +#define __FLT64_DIG__ 15 +# 0 "" +#define __FLT64_MIN_EXP__ (-1021) +# 0 "" +#define __FLT64_MIN_10_EXP__ (-307) +# 0 "" +#define __FLT64_MAX_EXP__ 1024 +# 0 "" +#define __FLT64_MAX_10_EXP__ 308 +# 0 "" +#define __FLT64_DECIMAL_DIG__ 17 +# 0 "" +#define __FLT64_MAX__ 1.7976931348623157e+308F64 +# 0 "" +#define __FLT64_NORM_MAX__ 1.7976931348623157e+308F64 +# 0 "" +#define __FLT64_MIN__ 2.2250738585072014e-308F64 +# 0 "" +#define __FLT64_EPSILON__ 2.2204460492503131e-16F64 +# 0 "" +#define __FLT64_DENORM_MIN__ 4.9406564584124654e-324F64 +# 0 "" +#define __FLT64_HAS_DENORM__ 1 +# 0 "" +#define __FLT64_HAS_INFINITY__ 1 +# 0 "" +#define __FLT64_HAS_QUIET_NAN__ 1 +# 0 "" +#define __FLT64_IS_IEC_60559__ 2 +# 0 "" +#define __FLT32X_MANT_DIG__ 53 +# 0 "" +#define __FLT32X_DIG__ 15 +# 0 "" +#define __FLT32X_MIN_EXP__ (-1021) +# 0 "" +#define __FLT32X_MIN_10_EXP__ (-307) +# 0 "" +#define __FLT32X_MAX_EXP__ 1024 +# 0 "" +#define __FLT32X_MAX_10_EXP__ 308 +# 0 "" +#define __FLT32X_DECIMAL_DIG__ 17 +# 0 "" +#define __FLT32X_MAX__ 1.7976931348623157e+308F32x +# 0 "" +#define __FLT32X_NORM_MAX__ 1.7976931348623157e+308F32x +# 0 "" +#define __FLT32X_MIN__ 2.2250738585072014e-308F32x +# 0 "" +#define __FLT32X_EPSILON__ 2.2204460492503131e-16F32x +# 0 "" +#define __FLT32X_DENORM_MIN__ 4.9406564584124654e-324F32x +# 0 "" +#define __FLT32X_HAS_DENORM__ 1 +# 0 "" +#define __FLT32X_HAS_INFINITY__ 1 +# 0 "" +#define __FLT32X_HAS_QUIET_NAN__ 1 +# 0 "" +#define __FLT32X_IS_IEC_60559__ 2 +# 0 "" +#define __SFRACT_FBIT__ 7 +# 0 "" +#define __SFRACT_IBIT__ 0 +# 0 "" +#define __SFRACT_MIN__ (-0.5HR-0.5HR) +# 0 "" +#define __SFRACT_MAX__ 0X7FP-7HR +# 0 "" +#define __SFRACT_EPSILON__ 0x1P-7HR +# 0 "" +#define __USFRACT_FBIT__ 8 +# 0 "" +#define __USFRACT_IBIT__ 0 +# 0 "" +#define __USFRACT_MIN__ 0.0UHR +# 0 "" +#define __USFRACT_MAX__ 0XFFP-8UHR +# 0 "" +#define __USFRACT_EPSILON__ 0x1P-8UHR +# 0 "" +#define __FRACT_FBIT__ 15 +# 0 "" +#define __FRACT_IBIT__ 0 +# 0 "" +#define __FRACT_MIN__ (-0.5R-0.5R) +# 0 "" +#define __FRACT_MAX__ 0X7FFFP-15R +# 0 "" +#define __FRACT_EPSILON__ 0x1P-15R +# 0 "" +#define __UFRACT_FBIT__ 16 +# 0 "" +#define __UFRACT_IBIT__ 0 +# 0 "" +#define __UFRACT_MIN__ 0.0UR +# 0 "" +#define __UFRACT_MAX__ 0XFFFFP-16UR +# 0 "" +#define __UFRACT_EPSILON__ 0x1P-16UR +# 0 "" +#define __LFRACT_FBIT__ 31 +# 0 "" +#define __LFRACT_IBIT__ 0 +# 0 "" +#define __LFRACT_MIN__ (-0.5LR-0.5LR) +# 0 "" +#define __LFRACT_MAX__ 0X7FFFFFFFP-31LR +# 0 "" +#define __LFRACT_EPSILON__ 0x1P-31LR +# 0 "" +#define __ULFRACT_FBIT__ 32 +# 0 "" +#define __ULFRACT_IBIT__ 0 +# 0 "" +#define __ULFRACT_MIN__ 0.0ULR +# 0 "" +#define __ULFRACT_MAX__ 0XFFFFFFFFP-32ULR +# 0 "" +#define __ULFRACT_EPSILON__ 0x1P-32ULR +# 0 "" +#define __LLFRACT_FBIT__ 63 +# 0 "" +#define __LLFRACT_IBIT__ 0 +# 0 "" +#define __LLFRACT_MIN__ (-0.5LLR-0.5LLR) +# 0 "" +#define __LLFRACT_MAX__ 0X7FFFFFFFFFFFFFFFP-63LLR +# 0 "" +#define __LLFRACT_EPSILON__ 0x1P-63LLR +# 0 "" +#define __ULLFRACT_FBIT__ 64 +# 0 "" +#define __ULLFRACT_IBIT__ 0 +# 0 "" +#define __ULLFRACT_MIN__ 0.0ULLR +# 0 "" +#define __ULLFRACT_MAX__ 0XFFFFFFFFFFFFFFFFP-64ULLR +# 0 "" +#define __ULLFRACT_EPSILON__ 0x1P-64ULLR +# 0 "" +#define __SACCUM_FBIT__ 7 +# 0 "" +#define __SACCUM_IBIT__ 8 +# 0 "" +#define __SACCUM_MIN__ (-0X1P7HK-0X1P7HK) +# 0 "" +#define __SACCUM_MAX__ 0X7FFFP-7HK +# 0 "" +#define __SACCUM_EPSILON__ 0x1P-7HK +# 0 "" +#define __USACCUM_FBIT__ 8 +# 0 "" +#define __USACCUM_IBIT__ 8 +# 0 "" +#define __USACCUM_MIN__ 0.0UHK +# 0 "" +#define __USACCUM_MAX__ 0XFFFFP-8UHK +# 0 "" +#define __USACCUM_EPSILON__ 0x1P-8UHK +# 0 "" +#define __ACCUM_FBIT__ 15 +# 0 "" +#define __ACCUM_IBIT__ 16 +# 0 "" +#define __ACCUM_MIN__ (-0X1P15K-0X1P15K) +# 0 "" +#define __ACCUM_MAX__ 0X7FFFFFFFP-15K +# 0 "" +#define __ACCUM_EPSILON__ 0x1P-15K +# 0 "" +#define __UACCUM_FBIT__ 16 +# 0 "" +#define __UACCUM_IBIT__ 16 +# 0 "" +#define __UACCUM_MIN__ 0.0UK +# 0 "" +#define __UACCUM_MAX__ 0XFFFFFFFFP-16UK +# 0 "" +#define __UACCUM_EPSILON__ 0x1P-16UK +# 0 "" +#define __LACCUM_FBIT__ 31 +# 0 "" +#define __LACCUM_IBIT__ 32 +# 0 "" +#define __LACCUM_MIN__ (-0X1P31LK-0X1P31LK) +# 0 "" +#define __LACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LK +# 0 "" +#define __LACCUM_EPSILON__ 0x1P-31LK +# 0 "" +#define __ULACCUM_FBIT__ 32 +# 0 "" +#define __ULACCUM_IBIT__ 32 +# 0 "" +#define __ULACCUM_MIN__ 0.0ULK +# 0 "" +#define __ULACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULK +# 0 "" +#define __ULACCUM_EPSILON__ 0x1P-32ULK +# 0 "" +#define __LLACCUM_FBIT__ 31 +# 0 "" +#define __LLACCUM_IBIT__ 32 +# 0 "" +#define __LLACCUM_MIN__ (-0X1P31LLK-0X1P31LLK) +# 0 "" +#define __LLACCUM_MAX__ 0X7FFFFFFFFFFFFFFFP-31LLK +# 0 "" +#define __LLACCUM_EPSILON__ 0x1P-31LLK +# 0 "" +#define __ULLACCUM_FBIT__ 32 +# 0 "" +#define __ULLACCUM_IBIT__ 32 +# 0 "" +#define __ULLACCUM_MIN__ 0.0ULLK +# 0 "" +#define __ULLACCUM_MAX__ 0XFFFFFFFFFFFFFFFFP-32ULLK +# 0 "" +#define __ULLACCUM_EPSILON__ 0x1P-32ULLK +# 0 "" +#define __QQ_FBIT__ 7 +# 0 "" +#define __QQ_IBIT__ 0 +# 0 "" +#define __HQ_FBIT__ 15 +# 0 "" +#define __HQ_IBIT__ 0 +# 0 "" +#define __SQ_FBIT__ 31 +# 0 "" +#define __SQ_IBIT__ 0 +# 0 "" +#define __DQ_FBIT__ 63 +# 0 "" +#define __DQ_IBIT__ 0 +# 0 "" +#define __TQ_FBIT__ 127 +# 0 "" +#define __TQ_IBIT__ 0 +# 0 "" +#define __UQQ_FBIT__ 8 +# 0 "" +#define __UQQ_IBIT__ 0 +# 0 "" +#define __UHQ_FBIT__ 16 +# 0 "" +#define __UHQ_IBIT__ 0 +# 0 "" +#define __USQ_FBIT__ 32 +# 0 "" +#define __USQ_IBIT__ 0 +# 0 "" +#define __UDQ_FBIT__ 64 +# 0 "" +#define __UDQ_IBIT__ 0 +# 0 "" +#define __UTQ_FBIT__ 128 +# 0 "" +#define __UTQ_IBIT__ 0 +# 0 "" +#define __HA_FBIT__ 7 +# 0 "" +#define __HA_IBIT__ 8 +# 0 "" +#define __SA_FBIT__ 15 +# 0 "" +#define __SA_IBIT__ 16 +# 0 "" +#define __DA_FBIT__ 31 +# 0 "" +#define __DA_IBIT__ 32 +# 0 "" +#define __TA_FBIT__ 63 +# 0 "" +#define __TA_IBIT__ 64 +# 0 "" +#define __UHA_FBIT__ 8 +# 0 "" +#define __UHA_IBIT__ 8 +# 0 "" +#define __USA_FBIT__ 16 +# 0 "" +#define __USA_IBIT__ 16 +# 0 "" +#define __UDA_FBIT__ 32 +# 0 "" +#define __UDA_IBIT__ 32 +# 0 "" +#define __UTA_FBIT__ 64 +# 0 "" +#define __UTA_IBIT__ 64 +# 0 "" +#define __REGISTER_PREFIX__ +# 0 "" +#define __USER_LABEL_PREFIX__ +# 0 "" +#define __GNUC_STDC_INLINE__ 1 +# 0 "" +#define __NO_INLINE__ 1 +# 0 "" +#define __STRICT_ANSI__ 1 +# 0 "" +#define __CHAR_UNSIGNED__ 1 +# 0 "" +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +# 0 "" +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +# 0 "" +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +# 0 "" +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +# 0 "" +#define __GCC_ATOMIC_LLONG_LOCK_FREE 1 +# 0 "" +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +# 0 "" +#define __GCC_DESTRUCTIVE_SIZE 64 +# 0 "" +#define __GCC_CONSTRUCTIVE_SIZE 64 +# 0 "" +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +# 0 "" +#define __HAVE_SPECULATION_SAFE_VALUE 1 +# 0 "" +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +# 0 "" +#define __PRAGMA_REDEFINE_EXTNAME 1 +# 0 "" +#define __SIZEOF_WCHAR_T__ 4 +# 0 "" +#define __SIZEOF_WINT_T__ 4 +# 0 "" +#define __SIZEOF_PTRDIFF_T__ 4 +# 0 "" +#define __ARM_FEATURE_DSP 1 +# 0 "" +#define __ARM_FEATURE_QBIT 1 +# 0 "" +#define __ARM_FEATURE_SAT 1 +# 0 "" +#undef __ARM_FEATURE_CRYPTO +# 0 "" +#define __ARM_FEATURE_UNALIGNED 1 +# 0 "" +#undef __ARM_FEATURE_QRDMX +# 0 "" +#undef __ARM_FEATURE_CRC32 +# 0 "" +#undef __ARM_FEATURE_DOTPROD +# 0 "" +#undef __ARM_FEATURE_COMPLEX +# 0 "" +#define __ARM_32BIT_STATE 1 +# 0 "" +#undef __ARM_FEATURE_MVE +# 0 "" +#undef __ARM_FEATURE_CMSE +# 0 "" +#undef __ARM_FEATURE_LDREX +# 0 "" +#define __ARM_FEATURE_LDREX 7 +# 0 "" +#define __ARM_FEATURE_CLZ 1 +# 0 "" +#undef __ARM_FEATURE_NUMERIC_MAXMIN +# 0 "" +#define __ARM_FEATURE_SIMD32 1 +# 0 "" +#define __ARM_SIZEOF_MINIMAL_ENUM 1 +# 0 "" +#define __ARM_SIZEOF_WCHAR_T 4 +# 0 "" +#undef __ARM_ARCH_PROFILE +# 0 "" +#define __ARM_ARCH_PROFILE 77 +# 0 "" +#define __arm__ 1 +# 0 "" +#undef __ARM_ARCH +# 0 "" +#define __ARM_ARCH 7 +# 0 "" +#define __APCS_32__ 1 +# 0 "" +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +# 0 "" +#define __thumb__ 1 +# 0 "" +#define __thumb2__ 1 +# 0 "" +#define __THUMBEL__ 1 +# 0 "" +#undef __ARM_ARCH_ISA_THUMB +# 0 "" +#define __ARM_ARCH_ISA_THUMB 2 +# 0 "" +#define __ARMEL__ 1 +# 0 "" +#define __VFP_FP__ 1 +# 0 "" +#undef __ARM_FP +# 0 "" +#define __ARM_FP 4 +# 0 "" +#undef __ARM_FP16_FORMAT_IEEE +# 0 "" +#undef __ARM_FP16_FORMAT_ALTERNATIVE +# 0 "" +#undef __ARM_FP16_ARGS +# 0 "" +#undef __ARM_FEATURE_FP16_SCALAR_ARITHMETIC +# 0 "" +#undef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC +# 0 "" +#undef __ARM_FEATURE_FP16_FML +# 0 "" +#define __ARM_FEATURE_FMA 1 +# 0 "" +#undef __ARM_NEON__ +# 0 "" +#undef __ARM_NEON +# 0 "" +#undef __ARM_NEON_FP +# 0 "" +#define __THUMB_INTERWORK__ 1 +# 0 "" +#define __ARM_ARCH_7EM__ 1 +# 0 "" +#define __ARM_PCS_VFP 1 +# 0 "" +#define __ARM_EABI__ 1 +# 0 "" +#undef __FDPIC__ +# 0 "" +#define __ARM_ARCH_EXT_IDIV__ 1 +# 0 "" +#define __ARM_FEATURE_IDIV 1 +# 0 "" +#define __ARM_ASM_SYNTAX_UNIFIED__ 1 +# 0 "" +#undef __ARM_FEATURE_COPROC +# 0 "" +#define __ARM_FEATURE_COPROC 15 +# 0 "" +#undef __ARM_FEATURE_CDE +# 0 "" +#undef __ARM_FEATURE_CDE_COPROC +# 0 "" +#undef __ARM_FEATURE_MATMUL_INT8 +# 0 "" +#undef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC +# 0 "" +#undef __ARM_FEATURE_BF16_VECTOR_ARITHMETIC +# 0 "" +#undef __ARM_BF16_FORMAT_ALTERNATIVE +# 0 "" +#define __GXX_TYPEINFO_EQUALITY_INLINE 0 +# 0 "" +#define __ELF__ 1 +# 0 "" +#define __USES_INITFINI__ 1 +# 1 "src/usart.c" +# 1 "src/rcc.h" 1 + +#define RCC_H_ + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 1 3 +# 14 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 3 +#define _INTTYPES_H + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 1 3 + + + + + + +#define __NEWLIB_H__ 1 + + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_newlib_version.h" 1 3 + + + +#define _NEWLIB_VERSION_H__ 1 + +#define _NEWLIB_VERSION "4.3.0" +#define __NEWLIB__ 4 +#define __NEWLIB_MINOR__ 3 +#define __NEWLIB_PATCHLEVEL__ 0 +# 11 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 2 3 +# 27 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 3 +#define _ATEXIT_DYNAMIC_ALLOC 1 + + + + + +#define _FSEEK_OPTIMIZATION 1 + + +#define _FVWRITE_IN_STREAMIO 1 + + +#define _HAVE_CC_INHIBIT_LOOP_TO_LIBCALL 1 + + + +#define _HAVE_INITFINI_ARRAY 1 + + +#define _HAVE_LONG_DOUBLE 1 +# 355 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 3 +#define _LDBL_EQ_DBL 1 + + + + + +#define _MB_CAPABLE 1 + + +#define _MB_LEN_MAX 8 +# 373 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 3 +#define _REENT_CHECK_VERIFY 1 + + +#define _RETARGETABLE_LOCKING 1 + + +#define _UNBUF_STREAM_OPT 1 + + + +#define _WANT_IO_C99_FORMATS 1 + + + + + + + +#define _WANT_IO_LONG_LONG 1 +# 408 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/newlib.h" 3 +#define _WANT_REGISTER_FINI 1 + + +#define _WANT_USE_GDTOA 1 + + + + + +#define _WIDE_ORIENT 1 +# 17 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 1 3 + +#define __SYS_CONFIG_H__ + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" 1 3 +# 77 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" 3 +#define __IEEE_LITTLE_ENDIAN +# 91 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" 3 +#define _SUPPORTS_ERREXCEPT + + + + + + +#define __DOUBLE_TYPE double +#define __FLOAT_TYPE float +# 515 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/ieeefp.h" 3 +#define __OBSOLETE_MATH_DEFAULT 1 + + +#define __OBSOLETE_MATH __OBSOLETE_MATH_DEFAULT +# 5 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 2 3 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 1 3 +# 22 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define _SYS_FEATURES_H +# 33 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __GNUC_PREREQ(maj,min) ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) + + + + + + +#define __GNUC_PREREQ__(ma,mi) __GNUC_PREREQ(ma, mi) +# 249 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __ATFILE_VISIBLE 0 + + + + + +#define __BSD_VISIBLE 0 + + + + + +#define __GNU_VISIBLE 0 + + + + +#define __ISO_C_VISIBLE 2011 +# 277 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __LARGEFILE_VISIBLE 0 + + + + + +#define __MISC_VISIBLE 0 +# 299 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __POSIX_VISIBLE 0 + + + + + +#define __SVID_VISIBLE 0 +# 319 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __XSI_VISIBLE 0 +# 331 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/features.h" 3 +#define __SSP_FORTIFY_LEVEL 0 +# 6 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 2 3 +# 224 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 3 +#define _POINTER_INT long + + + + + +#undef __RAND_MAX + + + +#define __RAND_MAX 0x7fffffff +# 248 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 3 +#define __EXPORT + + + +#define __IMPORT + + + + + + +#define _READ_WRITE_RETURN_TYPE int + + + + + +#define _READ_WRITE_BUFSIZE_TYPE int +# 290 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/config.h" 3 +#define _USE_GDTOA +# 18 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 1 3 +# 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define _SYS__INTSUP_H + + + + + +#define __STDINT_EXP(x) __ ##x ##__ +# 35 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 + + + + + + + + +#undef signed +#undef unsigned +#undef char +#undef short +#undef int +#undef __int20 +#undef __int20__ +#undef long +#define signed +0 +#define unsigned +0 +#define char +0 +#define short +1 +#define __int20 +2 +#define __int20__ +2 +#define int +2 +#define long +4 +# 67 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define _INTPTR_EQ_INT + + + + + + +#define _INT32_EQ_LONG + + + + + + + +#define __INT8 "hh" +# 93 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __INT16 "h" +# 104 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __INT32 "l" +# 113 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __INT64 "ll" + + + + + + +#define __FAST8 +# 129 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __FAST16 + + + + + + +#define __FAST32 +# 147 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __FAST64 "ll" + + + +#define __LEAST8 "hh" +# 162 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __LEAST16 "h" +# 173 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __LEAST32 "l" +# 182 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#define __LEAST64 "ll" + +#undef signed +#undef unsigned +#undef char +#undef short +#undef int +#undef long + + + + + +# 194 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#undef __int20 + +# 195 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_intsup.h" 3 +#undef __int20__ + + +# 19 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_ansi.h" 1 3 + + + + + + + +#define _ANSIDECL_H_ +# 31 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_ansi.h" 3 +#define _BEGIN_STD_C +#define _END_STD_C +#define _NOTHROW + + + +#define _LONG_DOUBLE long double + + + + + +#define _ATTRIBUTE(attrs) __attribute__ (attrs) +# 69 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/_ansi.h" 3 +#define _ELIDABLE_INLINE static __inline__ + + + +#define _NOINLINE __attribute__ ((__noinline__)) +#define _NOINLINE_STATIC _NOINLINE static +# 20 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdint.h" 1 3 4 +# 9 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdint.h" 3 4 +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 1 3 4 +# 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define _STDINT_H + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 1 3 4 + + + + + +#define _MACHINE__DEFAULT_TYPES_H +# 15 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +#define __EXP(x) __ ##x ##__ +# 26 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +#define __have_longlong64 1 + + + + + + +#define __have_long32 1 + + + + + + + + +# 41 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef signed char __int8_t; + +typedef unsigned char __uint8_t; + + + +#define ___int8_t_defined 1 + + + + + + + +typedef short int __int16_t; + +typedef short unsigned int __uint16_t; + + + +#define ___int16_t_defined 1 +# 77 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef long int __int32_t; + +typedef long unsigned int __uint32_t; + + + +#define ___int32_t_defined 1 +# 103 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef long long int __int64_t; + +typedef long long unsigned int __uint64_t; + + + +#define ___int64_t_defined 1 +# 134 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef signed char __int_least8_t; + +typedef unsigned char __uint_least8_t; + + + +#define ___int_least8_t_defined 1 +# 160 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef short int __int_least16_t; + +typedef short unsigned int __uint_least16_t; + + + +#define ___int_least16_t_defined 1 +# 182 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef long int __int_least32_t; + +typedef long unsigned int __uint_least32_t; + + + +#define ___int_least32_t_defined 1 +# 200 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +typedef long long int __int_least64_t; + +typedef long long unsigned int __uint_least64_t; + + + +#define ___int_least64_t_defined 1 + + + + + + + +typedef long long int __intmax_t; + + + + + + + +typedef long long unsigned int __uintmax_t; + + + + + + + +typedef int __intptr_t; + +typedef unsigned int __uintptr_t; +# 244 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/machine/_default_types.h" 3 4 +#undef __EXP +# 13 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 2 3 4 + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_stdint.h" 1 3 4 +# 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_stdint.h" 3 4 +#define _SYS__STDINT_H +# 20 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/sys/_stdint.h" 3 4 +typedef __int8_t int8_t ; +#define _INT8_T_DECLARED + + +typedef __uint8_t uint8_t ; +#define _UINT8_T_DECLARED + +#define __int8_t_defined 1 + + + + +typedef __int16_t int16_t ; +#define _INT16_T_DECLARED + + +typedef __uint16_t uint16_t ; +#define _UINT16_T_DECLARED + +#define __int16_t_defined 1 + + + + +typedef __int32_t int32_t ; +#define _INT32_T_DECLARED + + +typedef __uint32_t uint32_t ; +#define _UINT32_T_DECLARED + +#define __int32_t_defined 1 + + + + +typedef __int64_t int64_t ; +#define _INT64_T_DECLARED + + +typedef __uint64_t uint64_t ; +#define _UINT64_T_DECLARED + +#define __int64_t_defined 1 + + + +typedef __intmax_t intmax_t; +#define _INTMAX_T_DECLARED + + + +typedef __uintmax_t uintmax_t; +#define _UINTMAX_T_DECLARED + + + +typedef __intptr_t intptr_t; +#define _INTPTR_T_DECLARED + + + +typedef __uintptr_t uintptr_t; +#define _UINTPTR_T_DECLARED +# 15 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 2 3 4 + + + + + + +typedef __int_least8_t int_least8_t; +typedef __uint_least8_t uint_least8_t; +#define __int_least8_t_defined 1 + + + +typedef __int_least16_t int_least16_t; +typedef __uint_least16_t uint_least16_t; +#define __int_least16_t_defined 1 + + + +typedef __int_least32_t int_least32_t; +typedef __uint_least32_t uint_least32_t; +#define __int_least32_t_defined 1 + + + +typedef __int_least64_t int_least64_t; +typedef __uint_least64_t uint_least64_t; +#define __int_least64_t_defined 1 +# 51 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 + typedef int int_fast8_t; + typedef unsigned int uint_fast8_t; +#define __int_fast8_t_defined 1 + + + + + + + + typedef int int_fast16_t; + typedef unsigned int uint_fast16_t; +#define __int_fast16_t_defined 1 + + + + + + + + typedef int int_fast32_t; + typedef unsigned int uint_fast32_t; +#define __int_fast32_t_defined 1 + + + + + + + + typedef long long int int_fast64_t; + typedef long long unsigned int uint_fast64_t; +#define __int_fast64_t_defined 1 +# 128 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INTPTR_MIN (-__INTPTR_MAX__ - 1) +#define INTPTR_MAX (__INTPTR_MAX__) +#define UINTPTR_MAX (__UINTPTR_MAX__) +# 152 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT8_MIN (-__INT8_MAX__ - 1) +#define INT8_MAX (__INT8_MAX__) +#define UINT8_MAX (__UINT8_MAX__) + + + + + + + +#define INT_LEAST8_MIN (-__INT_LEAST8_MAX__ - 1) +#define INT_LEAST8_MAX (__INT_LEAST8_MAX__) +#define UINT_LEAST8_MAX (__UINT_LEAST8_MAX__) +# 174 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT16_MIN (-__INT16_MAX__ - 1) +#define INT16_MAX (__INT16_MAX__) +#define UINT16_MAX (__UINT16_MAX__) + + + + + + + +#define INT_LEAST16_MIN (-__INT_LEAST16_MAX__ - 1) +#define INT_LEAST16_MAX (__INT_LEAST16_MAX__) +#define UINT_LEAST16_MAX (__UINT_LEAST16_MAX__) +# 196 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT32_MIN (-__INT32_MAX__ - 1) +#define INT32_MAX (__INT32_MAX__) +#define UINT32_MAX (__UINT32_MAX__) +# 212 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_LEAST32_MIN (-__INT_LEAST32_MAX__ - 1) +#define INT_LEAST32_MAX (__INT_LEAST32_MAX__) +#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__) +# 230 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT64_MIN (-__INT64_MAX__ - 1) +#define INT64_MAX (__INT64_MAX__) +#define UINT64_MAX (__UINT64_MAX__) +# 246 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_LEAST64_MIN (-__INT_LEAST64_MAX__ - 1) +#define INT_LEAST64_MAX (__INT_LEAST64_MAX__) +#define UINT_LEAST64_MAX (__UINT_LEAST64_MAX__) +# 262 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_FAST8_MIN (-__INT_FAST8_MAX__ - 1) +#define INT_FAST8_MAX (__INT_FAST8_MAX__) +#define UINT_FAST8_MAX (__UINT_FAST8_MAX__) +# 278 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_FAST16_MIN (-__INT_FAST16_MAX__ - 1) +#define INT_FAST16_MAX (__INT_FAST16_MAX__) +#define UINT_FAST16_MAX (__UINT_FAST16_MAX__) +# 294 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_FAST32_MIN (-__INT_FAST32_MAX__ - 1) +#define INT_FAST32_MAX (__INT_FAST32_MAX__) +#define UINT_FAST32_MAX (__UINT_FAST32_MAX__) +# 310 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT_FAST64_MIN (-__INT_FAST64_MAX__ - 1) +#define INT_FAST64_MAX (__INT_FAST64_MAX__) +#define UINT_FAST64_MAX (__UINT_FAST64_MAX__) +# 326 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INTMAX_MAX (__INTMAX_MAX__) +#define INTMAX_MIN (-INTMAX_MAX - 1) + + + + + + + +#define UINTMAX_MAX (__UINTMAX_MAX__) + + + + + + + +#define SIZE_MAX (__SIZE_MAX__) + + + + + +#define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1) +#define SIG_ATOMIC_MAX (__STDINT_EXP(INT_MAX)) + + + +#define PTRDIFF_MAX (__PTRDIFF_MAX__) + + + +#define PTRDIFF_MIN (-PTRDIFF_MAX - 1) + + + + +#define WCHAR_MIN (__WCHAR_MIN__) +# 374 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define WCHAR_MAX (__WCHAR_MAX__) +# 384 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define WINT_MAX (__WINT_MAX__) + + + + +#define WINT_MIN (__WINT_MIN__) + + + + + + +#define INT8_C(x) __INT8_C(x) +#define UINT8_C(x) __UINT8_C(x) +# 408 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT16_C(x) __INT16_C(x) +#define UINT16_C(x) __UINT16_C(x) +# 420 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT32_C(x) __INT32_C(x) +#define UINT32_C(x) __UINT32_C(x) +# 433 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INT64_C(x) __INT64_C(x) +#define UINT64_C(x) __UINT64_C(x) +# 449 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/stdint.h" 3 4 +#define INTMAX_C(x) __INTMAX_C(x) +#define UINTMAX_C(x) __UINTMAX_C(x) +# 10 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdint.h" 2 3 4 + + + +#define _GCC_WRAP_STDINT_H +# 21 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 +#define __need_wchar_t +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 1 3 4 +# 267 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 3 4 +#define __wchar_t__ +#define __WCHAR_T__ +#define _WCHAR_T +#define _T_WCHAR_ +#define _T_WCHAR +#define __WCHAR_T +#define _WCHAR_T_ +#define _BSD_WCHAR_T_ +#define _WCHAR_T_DEFINED_ +#define _WCHAR_T_DEFINED +#define _WCHAR_T_H +#define ___int_wchar_t_h +#define __INT_WCHAR_T_H +#define _GCC_WCHAR_T +#define _WCHAR_T_DECLARED +#define __DEFINED_wchar_t +# 295 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 3 4 +#undef _BSD_WCHAR_T_ +# 329 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 3 4 +typedef unsigned int wchar_t; +# 349 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 3 4 +#undef __need_wchar_t +# 410 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stddef.h" 3 4 +#undef __need_NULL +# 23 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 2 3 + + + + + +#define __STRINGIFY(a) #a + + +#define __PRI8(x) __INT8 __STRINGIFY(x) +#define __PRI8LEAST(x) __LEAST8 __STRINGIFY(x) +#define __PRI8FAST(x) __FAST8 __STRINGIFY(x) +# 46 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 3 +#define __SCN8(x) __INT8 __STRINGIFY(x) +#define __SCN8LEAST(x) __LEAST8 __STRINGIFY(x) +#define __SCN8FAST(x) __FAST8 __STRINGIFY(x) + + + +#define PRId8 __PRI8(d) +#define PRIi8 __PRI8(i) +#define PRIo8 __PRI8(o) +#define PRIu8 __PRI8(u) +#define PRIx8 __PRI8(x) +#define PRIX8 __PRI8(X) + + + + +#define SCNd8 __SCN8(d) +#define SCNi8 __SCN8(i) +#define SCNo8 __SCN8(o) +#define SCNu8 __SCN8(u) +#define SCNx8 __SCN8(x) + + + + +#define PRIdLEAST8 __PRI8LEAST(d) +#define PRIiLEAST8 __PRI8LEAST(i) +#define PRIoLEAST8 __PRI8LEAST(o) +#define PRIuLEAST8 __PRI8LEAST(u) +#define PRIxLEAST8 __PRI8LEAST(x) +#define PRIXLEAST8 __PRI8LEAST(X) + + + + +#define SCNdLEAST8 __SCN8LEAST(d) +#define SCNiLEAST8 __SCN8LEAST(i) +#define SCNoLEAST8 __SCN8LEAST(o) +#define SCNuLEAST8 __SCN8LEAST(u) +#define SCNxLEAST8 __SCN8LEAST(x) + + + +#define PRIdFAST8 __PRI8FAST(d) +#define PRIiFAST8 __PRI8FAST(i) +#define PRIoFAST8 __PRI8FAST(o) +#define PRIuFAST8 __PRI8FAST(u) +#define PRIxFAST8 __PRI8FAST(x) +#define PRIXFAST8 __PRI8FAST(X) + + + + +#define SCNdFAST8 __SCN8FAST(d) +#define SCNiFAST8 __SCN8FAST(i) +#define SCNoFAST8 __SCN8FAST(o) +#define SCNuFAST8 __SCN8FAST(u) +#define SCNxFAST8 __SCN8FAST(x) + + + + +#define __PRI16(x) __INT16 __STRINGIFY(x) +#define __PRI16LEAST(x) __LEAST16 __STRINGIFY(x) +#define __PRI16FAST(x) __FAST16 __STRINGIFY(x) +#define __SCN16(x) __INT16 __STRINGIFY(x) +#define __SCN16LEAST(x) __LEAST16 __STRINGIFY(x) +#define __SCN16FAST(x) __FAST16 __STRINGIFY(x) + + +#define PRId16 __PRI16(d) +#define PRIi16 __PRI16(i) +#define PRIo16 __PRI16(o) +#define PRIu16 __PRI16(u) +#define PRIx16 __PRI16(x) +#define PRIX16 __PRI16(X) + +#define SCNd16 __SCN16(d) +#define SCNi16 __SCN16(i) +#define SCNo16 __SCN16(o) +#define SCNu16 __SCN16(u) +#define SCNx16 __SCN16(x) + + +#define PRIdLEAST16 __PRI16LEAST(d) +#define PRIiLEAST16 __PRI16LEAST(i) +#define PRIoLEAST16 __PRI16LEAST(o) +#define PRIuLEAST16 __PRI16LEAST(u) +#define PRIxLEAST16 __PRI16LEAST(x) +#define PRIXLEAST16 __PRI16LEAST(X) + +#define SCNdLEAST16 __SCN16LEAST(d) +#define SCNiLEAST16 __SCN16LEAST(i) +#define SCNoLEAST16 __SCN16LEAST(o) +#define SCNuLEAST16 __SCN16LEAST(u) +#define SCNxLEAST16 __SCN16LEAST(x) + + +#define PRIdFAST16 __PRI16FAST(d) +#define PRIiFAST16 __PRI16FAST(i) +#define PRIoFAST16 __PRI16FAST(o) +#define PRIuFAST16 __PRI16FAST(u) +#define PRIxFAST16 __PRI16FAST(x) +#define PRIXFAST16 __PRI16FAST(X) + +#define SCNdFAST16 __SCN16FAST(d) +#define SCNiFAST16 __SCN16FAST(i) +#define SCNoFAST16 __SCN16FAST(o) +#define SCNuFAST16 __SCN16FAST(u) +#define SCNxFAST16 __SCN16FAST(x) + + +#define __PRI32(x) __INT32 __STRINGIFY(x) +#define __SCN32(x) __INT32 __STRINGIFY(x) +#define __PRI32LEAST(x) __LEAST32 __STRINGIFY(x) +#define __SCN32LEAST(x) __LEAST32 __STRINGIFY(x) +#define __PRI32FAST(x) __FAST32 __STRINGIFY(x) +#define __SCN32FAST(x) __FAST32 __STRINGIFY(x) + +#define PRId32 __PRI32(d) +#define PRIi32 __PRI32(i) +#define PRIo32 __PRI32(o) +#define PRIu32 __PRI32(u) +#define PRIx32 __PRI32(x) +#define PRIX32 __PRI32(X) + +#define SCNd32 __SCN32(d) +#define SCNi32 __SCN32(i) +#define SCNo32 __SCN32(o) +#define SCNu32 __SCN32(u) +#define SCNx32 __SCN32(x) + + +#define PRIdLEAST32 __PRI32LEAST(d) +#define PRIiLEAST32 __PRI32LEAST(i) +#define PRIoLEAST32 __PRI32LEAST(o) +#define PRIuLEAST32 __PRI32LEAST(u) +#define PRIxLEAST32 __PRI32LEAST(x) +#define PRIXLEAST32 __PRI32LEAST(X) + +#define SCNdLEAST32 __SCN32LEAST(d) +#define SCNiLEAST32 __SCN32LEAST(i) +#define SCNoLEAST32 __SCN32LEAST(o) +#define SCNuLEAST32 __SCN32LEAST(u) +#define SCNxLEAST32 __SCN32LEAST(x) + + +#define PRIdFAST32 __PRI32FAST(d) +#define PRIiFAST32 __PRI32FAST(i) +#define PRIoFAST32 __PRI32FAST(o) +#define PRIuFAST32 __PRI32FAST(u) +#define PRIxFAST32 __PRI32FAST(x) +#define PRIXFAST32 __PRI32FAST(X) + +#define SCNdFAST32 __SCN32FAST(d) +#define SCNiFAST32 __SCN32FAST(i) +#define SCNoFAST32 __SCN32FAST(o) +#define SCNuFAST32 __SCN32FAST(u) +#define SCNxFAST32 __SCN32FAST(x) + + + +#define __PRI64(x) __INT64 __STRINGIFY(x) +#define __SCN64(x) __INT64 __STRINGIFY(x) + +#define __PRI64LEAST(x) __LEAST64 __STRINGIFY(x) +#define __SCN64LEAST(x) __LEAST64 __STRINGIFY(x) +#define __PRI64FAST(x) __FAST64 __STRINGIFY(x) +#define __SCN64FAST(x) __FAST64 __STRINGIFY(x) + + +#define PRId64 __PRI64(d) +#define PRIi64 __PRI64(i) +#define PRIo64 __PRI64(o) +#define PRIu64 __PRI64(u) +#define PRIx64 __PRI64(x) +#define PRIX64 __PRI64(X) + +#define SCNd64 __SCN64(d) +#define SCNi64 __SCN64(i) +#define SCNo64 __SCN64(o) +#define SCNu64 __SCN64(u) +#define SCNx64 __SCN64(x) + + + +#define PRIdLEAST64 __PRI64LEAST(d) +#define PRIiLEAST64 __PRI64LEAST(i) +#define PRIoLEAST64 __PRI64LEAST(o) +#define PRIuLEAST64 __PRI64LEAST(u) +#define PRIxLEAST64 __PRI64LEAST(x) +#define PRIXLEAST64 __PRI64LEAST(X) + +#define SCNdLEAST64 __SCN64LEAST(d) +#define SCNiLEAST64 __SCN64LEAST(i) +#define SCNoLEAST64 __SCN64LEAST(o) +#define SCNuLEAST64 __SCN64LEAST(u) +#define SCNxLEAST64 __SCN64LEAST(x) + + + +#define PRIdFAST64 __PRI64FAST(d) +#define PRIiFAST64 __PRI64FAST(i) +#define PRIoFAST64 __PRI64FAST(o) +#define PRIuFAST64 __PRI64FAST(u) +#define PRIxFAST64 __PRI64FAST(x) +#define PRIXFAST64 __PRI64FAST(X) + +#define SCNdFAST64 __SCN64FAST(d) +#define SCNiFAST64 __SCN64FAST(i) +#define SCNoFAST64 __SCN64FAST(o) +#define SCNuFAST64 __SCN64FAST(u) +#define SCNxFAST64 __SCN64FAST(x) + + + + + + + +#define __PRIMAX(x) __STRINGIFY(ll ##x) +#define __SCNMAX(x) __STRINGIFY(ll ##x) + + + + + +#define PRIdMAX __PRIMAX(d) +#define PRIiMAX __PRIMAX(i) +#define PRIoMAX __PRIMAX(o) +#define PRIuMAX __PRIMAX(u) +#define PRIxMAX __PRIMAX(x) +#define PRIXMAX __PRIMAX(X) + +#define SCNdMAX __SCNMAX(d) +#define SCNiMAX __SCNMAX(i) +#define SCNoMAX __SCNMAX(o) +#define SCNuMAX __SCNMAX(u) +#define SCNxMAX __SCNMAX(x) +# 294 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/arm-none-eabi/include/inttypes.h" 3 +#define __PRIPTR(x) __STRINGIFY(x) +#define __SCNPTR(x) __STRINGIFY(x) + + +#define PRIdPTR __PRIPTR(d) +#define PRIiPTR __PRIPTR(i) +#define PRIoPTR __PRIPTR(o) +#define PRIuPTR __PRIPTR(u) +#define PRIxPTR __PRIPTR(x) +#define PRIXPTR __PRIPTR(X) + +#define SCNdPTR __SCNPTR(d) +#define SCNiPTR __SCNPTR(i) +#define SCNoPTR __SCNPTR(o) +#define SCNuPTR __SCNPTR(u) +#define SCNxPTR __SCNPTR(x) + + +typedef struct { + intmax_t quot; + intmax_t rem; +} imaxdiv_t; + +struct _reent; + + + + + +extern intmax_t imaxabs(intmax_t); +extern imaxdiv_t imaxdiv(intmax_t __numer, intmax_t __denomer); +extern intmax_t strtoimax(const char *__restrict, char **__restrict, int); +extern intmax_t _strtoimax_r(struct _reent *, const char *__restrict, char **__restrict, int); +extern uintmax_t strtoumax(const char *__restrict, char **__restrict, int); +extern uintmax_t _strtoumax_r(struct _reent *, const char *__restrict, char **__restrict, int); +extern intmax_t wcstoimax(const wchar_t *__restrict, wchar_t **__restrict, int); +extern intmax_t _wcstoimax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int); +extern uintmax_t wcstoumax(const wchar_t *__restrict, wchar_t **__restrict, int); +extern uintmax_t _wcstoumax_r(struct _reent *, const wchar_t *__restrict, wchar_t **__restrict, int); +# 5 "src/rcc.h" 2 + + +# 6 "src/rcc.h" +struct rcc { + volatile uint32_t CR; + volatile uint32_t PLLCFGR; + volatile uint32_t CFGR; + volatile uint32_t CIR; + volatile uint32_t AHB1RSTR; + volatile uint32_t AHB2RSTR; + volatile uint32_t RESERVED0[2]; + volatile uint32_t APB1RSTR; + volatile uint32_t APB2RSTR; + volatile uint32_t RESERVED1[2]; + volatile uint32_t AHB1ENR; + volatile uint32_t AHB2ENR; + volatile uint32_t RESERVED2[2]; + volatile uint32_t APB1ENR; + volatile uint32_t APB2ENR; + volatile uint32_t RESERVED3[2]; + volatile uint32_t AHB1LPENR; + volatile uint32_t AHB2LPENR; + volatile uint32_t RESERVED4[2]; + volatile uint32_t APB1LPENR; + volatile uint32_t APB2LPENR; + volatile uint32_t RESERVED5[2]; + volatile uint32_t BDCR; + volatile uint32_t CSR; + volatile uint32_t RESERVED6[2]; + volatile uint32_t SSCGR; + volatile uint32_t PLLI2SCFGR; + volatile uint32_t DCKCFGR; +}; + +#define RCC_BASE_ADDR (0x40023800U) +#define RCC ((struct rcc *) RCC_BASE_ADDR) + + + +#define RCC_CR_PLLRDY_BIT 25 +#define RCC_CR_PLLRDY_LOCKED (1 << RCC_CR_PLLRDY_BIT) + + +#define RCC_CR_PLLON_BIT 24 +#define RCC_CR_PLLON_ON (1 << RCC_CR_PLLON_BIT) + + +#define RCC_CR_HSERDY_BIT 17 +#define RCC_CR_HSERDY_READY (1 << RCC_CR_HSERDY_BIT) + + +#define RCC_CR_HSEON_BIT 16 +#define RCC_CR_HSEON_ON (1 << RCC_CR_HSEON_BIT) + + +#define RCC_CR_HSIRDY_BIT 1 +#define RCC_CR_HSIRDY_READY (1 << RCC_CR_HSIRDY_BIT) + + +#define RCC_CR_HSION_BIT 0 +#define RCC_CR_HSION_ON (1 << RCC_CR_HSION_BIT) + + +#define RCC_PLLCFGR_PLLQ_BIT 24 +#define RCC_PLLCFGR_PLLQ_MASK (0b1111) +#define RCC_PLLCFGR_PLLQ(q) ((q & RCC_PLLCFGR_PLLQ_MASK) << RCC_PLLCFGR_PLLQ_BIT) + +#define RCC_PLLCFGR_PLLSRC_BIT 22 +#define RCC_PLLCFGR_PLLSRC_HSE (1 << RCC_PLLCFGR_PLLSRC_BIT) + +#define RCC_PLLCFGR_PLLP_BIT 16 +#define RCC_PLLCFGR_PLLP_MASK (0b11) +#define RCC_PLLCFGR_PLLP(p) ((p & RCC_PLLCFGR_PLLP_MASK) << RCC_PLLCFGR_PLLP_BIT) + +#define RCC_PLLCFGR_PLLN_BIT 6 +#define RCC_PLLCFGR_PLLN_MASK (0b111111111) +#define RCC_PLLCFGR_PLLN(n) ((n & RCC_PLLCFGR_PLLN_MASK) << RCC_PLLCFGR_PLLN_BIT) + +#define RCC_PLLCFGR_PLLM_BIT 0 +#define RCC_PLLCFGR_PLLM_MASK (0b111111) +#define RCC_PLLCFGR_PLLM(m) ((m & RCC_PLLCFGR_PLLM_MASK) << RCC_PLLCFGR_PLLM_BIT) + + + +#define RCC_CFGR_PPRE_DIV_NONE 0 +#define RCC_CFGR_PPRE_DIV_2 (0b100) + + +#define RCC_CFGR_PPRE2_BIT 13 +#define RCC_CFGR_PPRE2_MASK (0b111) + + +#define RCC_CFGR_PPRE1_BIT 10 +#define RCC_CFGR_PPRE1_MASK (0b111) + + +#define RCC_CFGR_HPRE_DIV_NONE 0 + +#define RCC_CFGR_HPRE_BIT 4 +#define RCC_CFGR_HPRE_MASK (0b1111) + + +#define RCC_CFGR_SWS_PLL (0b10) + +#define RCC_CFGR_SWS_BIT 2 +#define RCC_CFGR_SWS_MASK (0b11) + + +#define RCC_CFGR_SW_PLL (0b10) + +#define RCC_CFGR_SW_BIT 0 +#define RCC_CFGR_SW_MASK (0b11) +#define RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << RCC_CFGR_SW_BIT) + + + +#define RCC_AHB1ENR_GPIOAEN_BIT 0 +#define RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAEN_BIT) + + +#define RCC_APB1ENR_PWREN_BIT 28 +#define RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PWREN_BIT) + +#define RCC_APB1ENR_USART2EN_BIT 17 +#define RCC_APB1ENR_USART2EN_ENABLE (1 << RCC_APB1ENR_USART2EN_BIT) + +#define RCC_APB1ENR_TIM4_BIT 2 +#define RCC_APB1ENR_TIM4_ENABLE (1 << RCC_APB1ENR_TIM4_BIT) +# 2 "src/usart.c" 2 +# 1 "src/gpio.h" 1 + +#define GPIO_H_ + +# 1 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdbool.h" 1 3 4 +# 29 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdbool.h" 3 4 +#define _STDBOOL_H + + + +#define bool _Bool + +#define true ((_Bool)+1u) +#define false ((_Bool)+0u) +# 50 "/nix/store/yr89i11mszv2az19r26l372zgaiivj1c-gcc-arm-embedded-12.3.rel1/lib/gcc/arm-none-eabi/12.3.1/include/stdbool.h" 3 4 +#define __bool_true_false_are_defined 1 +# 5 "src/gpio.h" 2 + + +struct gpio { + volatile uint32_t MODER; + volatile uint32_t OTYPER; + volatile uint32_t OSPEEDR; + volatile uint32_t PUPDR; + volatile uint32_t IDR; + volatile uint32_t ODR; + volatile uint32_t BSRR; + volatile uint32_t LCKR; + volatile uint32_t AFRL; + volatile uint32_t AFRH; +}; + +#define GPIOA_BASE_ADDR (0x40020000U) +#define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) + + +#define GPIO_MODER_MODER3_BIT 7 +#define GPIO_MODER_MODER3_MASK (0b11) +#define GPIO_MODER_MODER3_AF (0b10) + +#define GPIO_MODER_MODER2_BIT 4 +#define GPIO_MODER_MODER2_MASK (0b11) +#define GPIO_MODER_MODER2_AF (0b10) + + +#define GPIO_AFRL_AFRL3_BIT 12 +#define GPIO_AFRL_AFRL3_MASK (0b1111) +#define GPIO_AFRL_AFRL3_USART2_RX (0b0111) + +#define GPIO_AFRL_AFRL2_BIT 8 +#define GPIO_AFRL_AFRL2_MASK (0b1111) +#define GPIO_AFRL_AFRL2_USART2_TX (0b0111) + + + + + + +#define GPIO_BASE_ADDR (0x40020000U) +#define GPIO_PORT_OFFSET (0x400U) +#define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) + +#define BIT(x) (1 << x) + +#define PIN(port,num) ((((port) - 'A') << 8) | num) + +#define PINNUM(pin) (pin & 0b1111) + +#define PINPORT(pin) (pin >> 8) + +typedef enum { + GPIO_MODE_INPUT, + GPIO_MODE_OUTPUT, + GPIO_MODE_AF, + GPIO_MODE_ANALOG +} GPIO_MODE; + +void gpio_set_mode(uint16_t pin, GPIO_MODE mode); +void gpio_write(uint16_t pin, +# 66 "src/gpio.h" 3 4 + _Bool +# 66 "src/gpio.h" + val); +# 3 "src/usart.c" 2 +# 1 "src/usart.h" 1 + +#define USART_H_ + + + +struct usart { + volatile uint32_t SR; + volatile uint32_t DR; + volatile uint32_t BRR; + volatile uint32_t CR1; + volatile uint32_t CR2; + volatile uint32_t CR3; + volatile uint32_t GTPR; +}; + +#define USART2_BASE_ADDR (0x40004400U) +#define USART2 ((struct usart *) USART2_BASE_ADDR) + + + +#define USART_SR_TXE_BIT 7 +#define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT) + + +#define USART_SR_RXNE_BIT 5 +#define USART_SR_RXNE_READY (1 <AHB1ENR |= (1 << 0); + + + ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 4); + ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 4); + ((struct gpio *) (0x40020000U))->MODER &= ~((0b11) << 7); + ((struct gpio *) (0x40020000U))->MODER |= ((0b10) << 7); + + + ((struct gpio *) (0x40020000U))->AFRL &= ~((0b1111) << 8); + ((struct gpio *) (0x40020000U))->AFRL |= ((0b0111) << 8); + ((struct gpio *) (0x40020000U))->AFRL &= ~((0b1111) << 12); + ((struct gpio *) (0x40020000U))->AFRL |= ((0b0111) << 12); + + + ((struct rcc *) (0x40023800U))->AHB1ENR |= (1 << 17); + + + ((struct usart *) (0x40004400U))->CR1 = 0; + ((struct usart *) (0x40004400U))->CR2 = 0; + ((struct usart *) (0x40004400U))->CR3 = 0; +# 49 "src/usart.c" + ((struct usart *) (0x40004400U))->CR1 |= (1 << 15); + + ((struct usart *) (0x40004400U))->BRR &= ~((0b111111111111) << 4); + ((struct usart *) (0x40004400U))->BRR |= (0x34 << 4); + ((struct usart *) (0x40004400U))->BRR &= ~((0b111) << 0); + ((struct usart *) (0x40004400U))->BRR |= (0x0 << 0); + + + ((struct usart *) (0x40004400U))->CR1 |= (1 << 3); + ((struct usart *) (0x40004400U))->CR1 |= (1 << 2); +} + +void usart2_start(void) { + ((struct usart *) (0x40004400U))->CR1 |= (1 << 13); +} + +void usart2_write_byte(char c) { + + ((struct usart *) (0x40004400U))->DR = c; + + + while ((((struct usart *) (0x40004400U))->SR & (1 << 7)) == 0); +} diff --git a/build/usart.o b/build/usart.o new file mode 100644 index 0000000000000000000000000000000000000000..d9bad2b6987e1b97053ac66ac34b3d64edcaefaa GIT binary patch literal 47848 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�bwYp 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 L7^Gp6NcI8%c^E;4 literal 0 HcmV?d00001 diff --git a/flake.nix b/flake.nix index 7be6eef..557d069 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,11 @@ devShells = nixpkgs.lib.genAttrs systems (system: let - pkgs = nixpkgs.legacyPackages.${system}; + # pkgs = nixpkgs.legacyPackages.${system}; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; in { default = pkgs.mkShell { @@ -26,6 +30,7 @@ pkgs.stlink pkgs.gdb pkgs.openocd + pkgs.stm32cubemx pkgs.gdbgui ]; }; diff --git a/src/gpio.h b/src/gpio.h index b632b1b..725986b 100644 --- a/src/gpio.h +++ b/src/gpio.h @@ -13,10 +13,36 @@ struct gpio { volatile uint32_t ODR; // Port output data register volatile uint32_t BSRR; // Port bit set/reset register volatile uint32_t LCKR; // Port configuration lock register - volatile uint32_t AFRL[2]; // Alternative function low register - volatile uint32_t AFRH[2]; // Alternative function high register + volatile uint32_t AFRL; // Alternative function low register + volatile uint32_t AFRH; // Alternative function high register }; +#define GPIOA_BASE_ADDR (0x40020000U) +#define GPIOA ((struct gpio *) GPIOA_BASE_ADDR) + +// MODER register +#define GPIO_MODER_MODER3_BIT 7 // Bits [7:6] +#define GPIO_MODER_MODER3_MASK (0b11) +#define GPIO_MODER_MODER3_AF (0b10) + +#define GPIO_MODER_MODER2_BIT 4 // Bits [5:4] +#define GPIO_MODER_MODER2_MASK (0b11) +#define GPIO_MODER_MODER2_AF (0b10) + +// AFRL register +#define GPIO_AFRL_AFRL3_BIT 12 // Bits [15:12] +#define GPIO_AFRL_AFRL3_MASK (0b1111) +#define GPIO_AFRL_AFRL3_USART2_RX (0b0111) // Alternative function 7 + +#define GPIO_AFRL_AFRL2_BIT 8 // Bits [11:8] +#define GPIO_AFRL_AFRL2_MASK (0b1111) +#define GPIO_AFRL_AFRL2_USART2_TX (0b0111) // Alternative function 7 + + + + + + #define GPIO_BASE_ADDR (0x40020000U) #define GPIO_PORT_OFFSET (0x400U) #define GPIO(port) ((struct gpio*)(uintptr_t)(GPIO_BASE_ADDR + (GPIO_PORT_OFFSET * port))) diff --git a/src/main.c b/src/main.c index 82c27f9..329baf3 100644 --- a/src/main.c +++ b/src/main.c @@ -6,6 +6,7 @@ #include "flash.h" #include "pwr.h" #include "timer.h" +#include "usart.h" #define exit 42 @@ -76,8 +77,10 @@ static void system_clock_init(void) { int main(void) { (void) system_clock_init(); (void) tim4_init(); + (void) usart2_init(); (void) tim4_start(); + (void) usart2_start(); uint16_t led = PIN('C', 13); // Blue LED RCC->AHB1ENR |= BIT(PINPORT(led)); // Enable GPIO clock for LED @@ -90,6 +93,8 @@ int main(void) { led_on = !led_on; gpio_write(led, led_on); + usart2_write_byte('a'); + counter = TIM4->CNT; } }; diff --git a/src/rcc.h b/src/rcc.h index 153e57a..045b533 100644 --- a/src/rcc.h +++ b/src/rcc.h @@ -114,10 +114,18 @@ struct rcc { #define RCC_CFGR_SW_MASK (0b11) #define RCC_CFGR_SW(clock) ((clock & RCC_CFGR_SW_MASK) << RCC_CFGR_SW_BIT) +// AHB1ENR Register +// GPIOA AHB1ENR +#define RCC_AHB1ENR_GPIOAEN_BIT 0 +#define RCC_AHB1ENR_GPIOAEN_ENABLE (1 << RCC_AHB1ENR_GPIOAEN_BIT) + // APB1ENR Register #define RCC_APB1ENR_PWREN_BIT 28 #define RCC_APB1ENR_PWREN_CLOCK_ENABLE (1 << RCC_APB1ENR_PWREN_BIT) +#define RCC_APB1ENR_USART2EN_BIT 17 +#define RCC_APB1ENR_USART2EN_ENABLE (1 << RCC_APB1ENR_USART2EN_BIT) + #define RCC_APB1ENR_TIM4_BIT 2 #define RCC_APB1ENR_TIM4_ENABLE (1 << RCC_APB1ENR_TIM4_BIT) diff --git a/src/timer.c b/src/timer.c index cb794d3..0bec1bd 100644 --- a/src/timer.c +++ b/src/timer.c @@ -18,5 +18,5 @@ void tim4_init(void) { } void tim4_start(void) { - TIM4->CR1 |= TIM4_ENABLE; + TIM4->CR1 |= TIM_ENABLE; } diff --git a/src/timer.h b/src/timer.h index 18eebc4..3b386de 100644 --- a/src/timer.h +++ b/src/timer.h @@ -29,8 +29,8 @@ struct timer { #define TIM4_BASE_ADDR (0x40000800U) #define TIM4 ((struct timer *) TIM4_BASE_ADDR) -#define TIM4_CR_CEN_BIT 0 -#define TIM4_ENABLE (1 << TIM4_CR_CEN_BIT) +#define TIM_CR1_CEN_BIT 0 +#define TIM_ENABLE (1 << TIM_CR1_CEN_BIT) void tim4_init(void); void tim4_start(void); diff --git a/src/usart.c b/src/usart.c new file mode 100644 index 0000000..846bc5a --- /dev/null +++ b/src/usart.c @@ -0,0 +1,71 @@ +#include "rcc.h" +#include "gpio.h" +#include "usart.h" + +void usart2_init(void) { + // Enable clock for GPIOA + RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN_ENABLE; + + // Configure PA2 and PA3 (USART2 pins) to use alternative functions + GPIOA->MODER &= ~(GPIO_MODER_MODER2_MASK << GPIO_MODER_MODER2_BIT); + GPIOA->MODER |= (GPIO_MODER_MODER2_AF << GPIO_MODER_MODER2_BIT); + GPIOA->MODER &= ~(GPIO_MODER_MODER3_MASK << GPIO_MODER_MODER3_BIT); + GPIOA->MODER |= (GPIO_MODER_MODER3_AF << GPIO_MODER_MODER3_BIT); + + // Set pin alternative modes to use USART + GPIOA->AFRL &= ~(GPIO_AFRL_AFRL2_MASK << GPIO_AFRL_AFRL2_BIT); + GPIOA->AFRL |= (GPIO_AFRL_AFRL2_USART2_TX << GPIO_AFRL_AFRL2_BIT); + GPIOA->AFRL &= ~(GPIO_AFRL_AFRL3_MASK << GPIO_AFRL_AFRL3_BIT); + GPIOA->AFRL |= (GPIO_AFRL_AFRL3_USART2_RX << GPIO_AFRL_AFRL3_BIT); + + // Enable USART + RCC->AHB1ENR |= RCC_APB1ENR_USART2EN_ENABLE; + + // Clear control registers + USART2->CR1 = 0; + USART2->CR2 = 0; + USART2->CR3 = 0; + + // Calculate Baud rate: + // baud = f_clock / (8 * (2 - OVER8) * USARTDIV); => + // (8 * (2 - OVER8) * USARTDIV) = f_clock / baud; => + // USARTDIV = (f_clock / (baud * (8 * (2 - OVER8))); => + + // Target Baud rate = 115200, f_clock = 48MHz + + // With OVER8 = 1 (oversampling by 8) + // USARTDIV = (48E6 / (115200 * (8 * (2 - 1))) = 52.083 + // mantissa = 52 + // fraction = 0.083 * 8 = 0.664 ~= 1 + + // rounding fraction up: USARTDIV = 53 + // baud = 48E6 / (8 * (52 + 1)) = 113207.54716981133 + // error of 0.1% (115200 / 113207.54716981133) + + // rounding fraction down: USARTDIV = 52 + // baud = 48E6 / (8 * 52) = 115384.61538461539 + // error of 0.001% (115384.61538461539 / 115200) + + USART2->CR1 |= USART_CR1_OVER8_8; + + USART2->BRR &= ~(USART_BRR_MANTISSA_MASK << USART_BRR_MANTISSA_BIT); + USART2->BRR |= (0x34 << USART_BRR_MANTISSA_BIT); + USART2->BRR &= ~(USART_BRR_FRACTION_MASK << USART_BRR_FRACTION_BIT); + USART2->BRR |= (0x0 << USART_BRR_FRACTION_BIT); + + // Enable transmitter and receiver + USART2->CR1 |= USART_CR1_TE_ENABLE; + USART2->CR1 |= USART_CR1_RE_ENABLE; +} + +void usart2_start(void) { + USART2->CR1 |= USART_CR1_UE_ENABLE; +} + +void usart2_write_byte(char c) { + // Send data + USART2->DR = c; + + // Wait indefinitely for transmission to be ready for data + while ((USART2->SR & USART_SR_TXE_TRANSMITTED) == 0); +} diff --git a/src/usart.h b/src/usart.h new file mode 100644 index 0000000..873df4e --- /dev/null +++ b/src/usart.h @@ -0,0 +1,57 @@ +#ifndef USART_H_ +#define USART_H_ + +#include + +struct usart { + volatile uint32_t SR; // Status register + volatile uint32_t DR; // Data register + volatile uint32_t BRR; // Baud rate register + volatile uint32_t CR1; // Control register 1 + volatile uint32_t CR2; // Control register 2 + volatile uint32_t CR3; // Control register 3 + volatile uint32_t GTPR; // Guard time and prescaler registe +}; + +#define USART2_BASE_ADDR (0x40004400U) +#define USART2 ((struct usart *) USART2_BASE_ADDR) + +// SR Register +// Transmission data register empty +#define USART_SR_TXE_BIT 7 +#define USART_SR_TXE_TRANSMITTED (1 << USART_SR_TXE_BIT) + +// Read data register not empty +#define USART_SR_RXNE_BIT 5 +#define USART_SR_RXNE_READY (1 <