From 2373d614c684916b250653a8c30b026a5874f788 Mon Sep 17 00:00:00 2001 From: Christian Lind Madsen Date: Sun, 24 Nov 2024 14:48:00 +0100 Subject: [PATCH] commit --- .vs/storno_cqp6xx_digital_xtal/v14/.atsuo | Bin 78848 -> 117248 bytes storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o | Bin 12364 -> 18492 bytes storno_cqp6xx_digital_xtal/Debug/main.o | Bin 7124 -> 13076 bytes .../Debug/si5351_driver/si5351_driver.o | Bin 38348 -> 38220 bytes .../Debug/storno_cqp6xx_digital_xtal.elf | Bin 24880 -> 66160 bytes .../Debug/storno_cqp6xx_digital_xtal.hex | 259 +- .../Debug/storno_cqp6xx_digital_xtal.lss | 2710 +++++++++++++++-- .../Debug/storno_cqp6xx_digital_xtal.map | 463 +-- .../Debug/storno_cqp6xx_digital_xtal.srec | 259 +- storno_cqp6xx_digital_xtal/avr_eeprom_driver | 2 +- storno_cqp6xx_digital_xtal/cqm6xx_app.c | 31 +- storno_cqp6xx_digital_xtal/cqm6xx_app.h | 2 +- storno_cqp6xx_digital_xtal/main.c | 38 +- 13 files changed, 3277 insertions(+), 487 deletions(-) diff --git a/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo b/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo index fd84d6b0bf12001c1b338cdc65c9d53624655fa1..4b8f482c8994c2ea7e0e6308ef6c3d409ea09891 100644 GIT binary patch delta 11202 zcmeHN3s{t8zMpp(kjsD!ASfV?K!|ejo8dBpd4aibzoURe3*#`r00RRvT&0-O+|Arp z_?z==r_8Li%+=I6d)QOYdBn1lZ5_q3vh|Xej<%UuyVj zdH?VI{r>O&_I@9hPX(5Blh!gb`8-GR=kYv{bVFPn8ylmwl=j+L62|vhYuNX~g#|~* zz0k=YAP3=V{(#4yv9&7@`rP__Gm)(I!5>V1Km>sUIKvpNpgB$7+p{r&qi!nZ$%rUK zBw`u@cfbomND#9T5s2xCKtuo{3^5sT4`LQVjF^d_+YNW*Gcd>E!m$`6au5mjiZNfz z;}9VT5uzO7*b|$@yOgI4mW09Qf~md=tW+XYh|s~3KvFVTGK0)P%Dn=s^n)c?@+Krk z5p)&<=B=s=hd-3ZqO;i$V9t`MV_c=cay!P@~>-g4t7;arrX^vNkl-4T?V zl#8^UJ|yi+AChvK(j2EL{R23?@OG?ra$4wEh;rK7L3<*reE&~aJGi*mmhb&X0s_BS z!Ft>dFn-Yk+mWy${sr+{#FL0!h^G)wBQ_wOL2N`ki`ayC4)HwVcZki17Z5KZwjf?Y zY(@MY@gag92*nPhcOv#6Y>xUr;2z%dlMKA(DDTDm4a9#U-gMNxh54TlZzJAu)a}Ro z0D=k`H~)J`A40tEsH2B^80n7?R4!Tj%tZxNReml59~xcRu8Zu06F@P!H? zRcEdmiiKi-s^?VSss4%)U=dp4GmxMv$n{h^=q${$5mdi(5k>^W`>spp^zAXMFe5q< zU5Mp~9z-vq55Z0N0MZX41`rm+kiSYu#h31a?iNZ4qCE~`;ZqUx`S+2l@U{N{`5rn& zMWBjjgjcXhfS_qtayIdtj|4Xm%qeSyD;yQ8FbDtGc)?mqq{oWM&cPBbd1J7oXn+%d zeb{uZ0Q?u$aRNYhy%NjsB3uRF11wYF;{<^AyM+Ka&!6_gG}vH(j5>?;H8F{?Z9Y{+ zhWz4x)|j7+#%OugheJtFU?WdiJ?nS(G`}2T@G6uF-(8{Pp>YlB;OTjX*8ll&)ts<< zCY=!+IQwnGSCB1_fEUvP$On)SzT0XEB~wN1g7-^npFd>YCi*&JZ`*h2bnw&~)QW2d zQ;~r5!;#)v6e({6%Io90Y2-7UD`qHH39kniz}nn8_jGJo3zu^9gw!dE5$sT^GC^3l z;thRyeZoK_JrOkhK=tyltC#Kaj2J$V!pxLNU!Dx7nTK#L^)eO`30w}0g-t0l;dQ>m zG8W!($9YXbt?-)`Z348gBkg6G7jiwtZ@|vL_r7s(pq+$=};wCHv5$Frb z1yvB^(T&9`Jh&W`<4aPImb>(Ie+Ua-LhrqKY}eITnu>eK%b{BabAAyhgCt<762Q0l zdA=kZ+bP@Fr9@S+&{L2{d%BlkWdvM`%Efb70G4Q_FQFDFlIx4?hl|n0bP+J$Q!Jc` z4YOPtg+*9+1wqqLsF{2UouT`E30-IsR&mb;=At#$R0+|*m)iwUdqE5#RrlIP64Tv= zf_wNL_|U;``I2B9;WJ^>qicpD_jx9{)?Lgz1Y(647{1UWoM41VY?s5*iO2e17hQd( z7t*JXkayvs>5F{cJiUIy=|<(#S431gVU&rqS>{;CP-;5)6P09m>uI6rt+1r-zcuP# zxUlH>uFy-rOr>4@6M0&m$1AN*nWH}+jyUn}sgN!k8TuqWP=n^bgIB}T;hzzyHXho# z!_(%vl(DrATlCmdhj}8ekyol3dC=oGQ+-|+uQ6{q@hz__4Q*gbMw9xjdX6&b#sH{{a)+-sf4k; zxUiCdhgBmxxjh2*ce$RZGZlr~9^v9*@h0wQgY z_4o`DVUw0UPACJA@yS9_*u$~C;uRz0lfFrizRdDZ?#`X=j@r*7uG@+Jk<6-!npIS1 z%$3m#hSX+v6`n}}^r}(M`4XWLOa2I&K*Y37cM&tEJlX}gn)eRw`d>w--#l|P=8N8f zhnqc@<~@1X%7>DZbKSjunIA)$KXiYr+qJxRi2&lWJ%zXwXAHXNp~wmArah18#N!+EFj$+M>n`7yY54yJ$$L`jH~h@S8=V zG**M7zR}j#W{~h7ELrZ}{akUti1G8NW5R##M6t+9` zIr#z_4s+HUE*4l=e^F@n7u4}MW#M9I(T%;x&?>XX*VuCt`izKNHXsOd8R*f1h39JE z@~T{6B9eGk)Z~tZYhyM8X-`Z&uz?O2Ns+WLJVXF z#e3`>uc8qG_0tm!B8|eYz@@<1uqiT<_182&NJPJ-_TaPefom9mfj*57K)EV~&qf1< z9K+mcM8JnjL3u(6QWF9f8V_Iu(08vrcAx=)BPfZCn(50%EY!Plk8!6)y7Cu-+2~_= zVuT7;tVWaBftMi(QVmWzkynQ8JUIA%8d$1TZn!$qkGkPIAjrEv&JFLLSY{nA26vP< zG|@Z=GS+W_@F!y3@VY_!Py-O^TfuhV@n~Lp<1VF+E;LVdcDc;X@|~~V(Mt1a&enhk3F8l!p+pN3fsI&Q5_3CodGBfD$O&BS^cEU;DpkLa_kTv ze{k|W$ELU%w1un#zK!RmF^&*aO9CPvo4oeY>{5mAnYgWg{LaU7h)zkD8BeTJKLdN_ z?gq{KdGN6|6z9EVs~UFws1YiUZ8$`#^Zj8}O_(o=~nz{nYrF z)R?$1+S|@(TW@WmJ2{1CHO)rqHWQXy3LC4%&Uo*(j(9iwh;G$9dVgYL3ExlImF!1O z1z`_-c~lC|)cdnhT{8qQt+$=_X8wI)ulGTRfA=37yXIOrvw^t_e&b zg;c}#(^DtUM~ySGinWmE%kzfan+!f)rS@0FzP#^&Y-zI2oI{#n^o3Y{|2J%T4?}ct z;`gy|rK6cP*1~>6Dt|Q}{M+^L(1o_4m%ZWKwpf>%^@MoC_YcL+-%C{U82nqFAJ0Gc!|}^g#do0=-F_sc+Gl7WQkcPsNZ~*6p*% zJg~hJ>(#&9F%?9th!$esvbL5^v%al$Aq?&go73OFoJm&5GZb=ZLPm;Anvk5S&P+&4 zQK}PCq*7^ea-k(&HK{}}g-wb0t-2Pe$2{3p0a(azB6j2&%;nz{~sm#(8))74Qk zp$2xoGsmU-)Cr9)-C@Cqgk0fPYJy{Jv&V zvNkm(jY-i;wHmohLe&MqCVl$E!xi=md8)g_(oiTdgpvW21^Nu)af<)EJD%2tfy}P5 zC8dgTRb#QSJV#d6U8qnO%R2KL>*}+VW#-JrrJ9a{QcbREZbn6il2MoSF^aU7s)~%J zI7M@&sk~fKkfX_|$T5{8zKl~!Doo0F?flNQD`WE&ODOX3YHfO>y|BJxxq%T2-e!cVLMrTbivjG&GgRb*D5`b~YG$ zwS5I;x}H{ZcAKnJ+R|Q>p_b`2%}e^4^l4oc&3ajiK1bE1DrzaNTw*9`tjg|^G|H08 zSy>ILHr!WsRe6O%pP^|mW$23gx(m8{TQ#O7ef9YR zE#)a0>f(HvQms;yWSBIDhRU2wU4FA#VKOmoWt|ZK)(s_tw_PEK29N>^KHO2?8SCQDMt^pqEwa@$)|a+;YQQ&VgwQ-t5|+ zk@X`lG7H3K)9}Ott=kzAVEgd1+3wbjF(ir&9{vH1-{#c#sGqFH2aBDX3>~3&A?oN= z69Tr`9tMrRHBoCFVMsmuV+(#&E^rws7~yV)s)=gl*Dutz8&Z3EYBWY8&LEycTG$_` zy!7_-MDX0nSNX7T^(k-qmcyN{JW)&GnXA6u&8m6TT0;#6RJN1}OAck;O>( zLCx+qRMx=F-h>Y)KPw00n2@g049mwJfsHG+TX)8hVosHX{a)0V>ZRI5Z8xXm#7V(u ze=i(t4TKAyi=OZy-K;DOZ}TT*#CGt~ZnqHnValEaBj+8I>Kg0OI^s|Iac(N@5srMi z&A3M{m>$B7<_SjTal`MD;{6;z{Tx8uDu9}C%K++!Ii3FS17VD2;bj@%Z$;uDwEeFAV8{c__n)P7@4 z3hZ@Ss3x7(Y^pZswYI{QyNGk|LHs*1sUh@*k3EHsOm$E$>;3avr4LDWjoGf36@p;; z2HBoMM<`!tx>Fl&tGpz)M~s_s6w6ho2u*bJts|4&>>-}Bp3g>x&Y}ymMTOj56K7qF z^b}}6(q?~Qz}~bwC8X6^bRlhLyS{Z3(Ql|+5+M;ZJ{n&)czdEJF_;<>wT>zF8~nH_ zkhG2V%LUVxapQTRBL<}DsR$8n!(WNXWU_uHxnSK9M@p>z3<Wc8Xw`l(m$wmum{+N@q8Vz#a$WE~j30Nk8qSU8&u5;%2^{gQn1 zYevoIzp;7|5@3yRBPMH93{DtENCS+X3!rN>fhjS7TN_zrHP4zDH9Z2g=cf#BNF6_X=~;Pz zzFEgtz&jt3!suoXNPl-W1oVgaU-w;V@H2)?876*Yj5vjLl{@*8{n$W7b?t|9NRaK| zajn~MeK>jk&INTiB#H>#I02a;oKCsqMAC{Pxo+ruEsPq2t=&($|rmNJHYZ+mSR<6m^ve8!4YnjawCS>+L_a3|;Wvf5>*81J= zalXg?_Wtc}@9Wwb;c4>3zXsBr}U6fr#y*mHbRa8GfSV34xh#@Q|JV;neSWQ?% zXe8iSlilc|hFh)){zml#=xtj+y*1itnyxpNfJ+38u@?B2q15IvF04f!V=b~~`Esm9 zg}_=2Ca@M+<3FTDvavLjFpNN3jqg<>Ylk-<>HE;bYNT!tYmsYGX|EvM|3$P2uIAEW z&&-e`fW~mA!tycr(pVC1x9S6WjjnK48h3JO##90umyJ4&a5rH(VFsaq!1FL|(9U>$ zHP>u!-Im&fvx^hlN}5q?JCuaM`ed5h^Lv{7G~p1j1>aUCG%x+$ZOv2I4gC7;!P4Xe z^JW^jLVjXxfK~XNwGnD@wXIlTyM+;WE1st?vDmO&+)Lk3nBwdr`UKC_r3$zcr($bj zx|x~RC1FEdktI4{j)~c5#m>4yd_#7a9;V)BczPQ3rcH2X)XSgHl8lpKQaXLm$;F3b zU1o8ZMkjV6{X~V$&Ya@nR+23G_0gfkH!qC}9!Ldgb>PI+X>Hh=b|3D(^9~b?rPXN9 zwWC8;+_6Skl002woM0Z6zTiLC=b>|)*S#apIO?WZ*icoViNKWAWipSU&d%}JRW&0_ z8;lJ2NV{Ww^#=148e1rPx`rjn9{b9@5GG~NNLIj1Q#_EXU}tgxw$7P|t`t(MoQ_vh zN))z%?gu{Iq?Rard_utb;9}~$N|3O7(A_`V=<$I@e}s11MBuYD##y8M)N@AJ;rhYF z&jGxLQ|yyN9iE!kvxiOpx?#T5TpEe(ju9SLwhP?zr{mkUG_1>QSNOqX)A44$TipA& zc+(4y;s?|2@_0u%4Tq+C!Sq`=RjloCW=7JXi0NR_J>Rz`vZ;BVg4P@doIn_^y6;j# zOquyP-*(>jRONXL&yB;LmRNM&q(mR}b>eMZQ{%+VsZ8Zt0rR$G5&Cz5?L=>oT;_qvgV3R8^3 zhJIUR8+Ez}T-*ztLG#{aE=%}M#}F((Y!|M*kc1IAvCx4qxfM?pMA%mKoVG!Jmfb53*?x%%GOniJQOE4$}R4Fi^dpJH7S zjgoT;accZTcUhf@UxsvCS4OlWFXjkmC2v?^mPJM-ycD@a+W-Eap3UAn=kd1I)*;6G@q@@pUGSiBZ@YU#N_umYtv8*OCggwnH|$>y5afV!Foo;eqq7R=E0jcKJZ^6ohGZum>y*5Gd3q z5Pg&+F{K&?>x>~Y5U+oPA)bs`JAidmk50VZ)~2o<-gy3G*Sf@qdJ?Ce$zd%;FPFv; zWBPLsYhQ@MwAs1D;y8Df_Iko`T%A=ECXFUBm}0#uxti6{=Q&lhSAt#&E{C3c!)Vw@ zf;ZQ~!&vf%QHC#k9TlC$S;RixiVN38IB4TL=zMk$CdjtpM|X`fg`Lwr_|mWcBFs1{TovRakG^R2vvnp$;P!)M*mN)voeNWl z(9s@eM~Y01EIj8Kf!=LbmCPqT+Wp~@F*EA-tlxy*?M`Lqc*^ETG>h~m)_7pFJC za`DPsNS1F5REY`CKoV@mJ;$pMzFdUuM<>bGdgm{|1Fa!g?oIA9V=#7qnk-+@X3?U1 z#qMk{i#VF<7kVYHI5Tz%eTKiFt-2>MQ zF=p1Xzi?W_1`1fE-65S9RKXIhQV-k*WiqJN#K3*02Ijrli=U7yQ)r$yloUlDK>G)>Jyu0(?EMFcI_y#u%>lh`NNWh^O6nk=w`bjK#2rTi598J}e`S4XA+8QKD#wm@d z{i(}&9v80dMBUT`pIg9{r&^KH$i_TSwE~#*PI*AGyASWgjrKHbT3;fH{tQ*3 zt%brYZ6Y#(hizs*-tj{ls09k2I^*M)G`YAN-!~OyN1EW78qLVAM$G~m) z)!C$*nLofm$%b25^l$l4WVGql;LC96lSF$Ntmt(th{VOCBE`opSfTx>$47wC7|Q=z z*j@4lIC(TI?)6+>Qza*!WVAVWdw=1aS`rTh^HBj;6EBy*AbClB?;t(W^j)Q^ml(WP0JhK;%aKw+Rv6AQ*dN zX^33eyG@9CAPG7Rn)gI854ms(P9C8Z(Nqo&voB2$rEftFrwGa7$}xxmn+nUI5!8$a z!D|R+f^+!gOJ?Kjzm#Hmu|-^10~Ym@3fKkeq9`Z_8$S$s;RB=nHu};Im+<)L*Tt2U zP=nt5G;yX1TA+i&iYl(&4iJtw@^Pzc;6|EB-?))!o zEnCEe%MTwD?BLL z{s|GD4?a&esf*L027VS>Vsy__*3QPjplyt->Ldo38^QOcYcdvKe z>Vew74CMV*ka6SYm(aC6OFdT!TY}XE2VtL4xVD3ff7T$SaV9(6=Y|{hGp-t=f?^OC z-h{Pc*lYAOv~Pe7>W<=5Tr z{;_-X`@ZMA=Q;0r&wFlfzWKPKwr+*vILahPHK|NasrRasdI5#=HDQ*TrA}AxIn#RQ z^-e$AdA09s=Z)Th!h^ha;JW3&JqI2>aQMJ;2VOaF;=qXhsr`rhpX)#7d^UKj_x;|_ z@BYW#kL^CP`?ovZ+A*Ye?gwo^ZTpZXLE^G{WXl>XE+Q>wEjg zJFoW6bza?xOFfe52{q+vs2T`~%w|>%!mLa)2Wyq>DQR)uHLe$s0cUO2| z2l_&f?i@t!ja=U@PxE_DYj02QyUvc@z0lvFjohFDm zGv}ja+Z@kmea{zu*$8k73-addNLyLXYH2Ggyqs7$f4jEX=e50nm3-6l)KDKgsoj;g zcp0E)L4L)Tfo%&+LDgfq1-f$n3RaNHtA=4n?aG$jj0jQWN zJwoBQuWG`5X~N?q(5J<;MGYs__a(>gz#Szfqtplu@1)d&cXQN7qK}||6%Sut9`PvN zoNz1k=+7q9=+1gCChPRk}QXaX$(7J zl2h{yv@!N65sfqQ@dF|m|A#a?yJGF@CtYy@wQ^RT1zRUNZT{Dtwu!}`=y%+HXH&lu z>UVtG)x_e9`kjmWosIp@$04{}DP3&@s%`SB`L==d7i*ou#wMc{8e$Enl`i&NcR{x6 zwqk?uoO6M3U3MSW{v0j;HO^T#5~@$GqVDC{uy;DDz-CyhMdw0PNl`&ZzZ30uoVo1E zYOnAk@O{`S^j+gs^?GZ&z^j(_z?5tcyn`*)^T3qBJ#gkPPP!x6t~U+kMg%wSx=c!<$gWI2b`jEoTLbtR{Ju-;lOkZ&YJ(8he)CkY#xYwcoMSnwhIrvoPJI!hkoY)nu=Md-P7s z1kf^B!)+Oj<3yXw+hR=}3F~p|s89I=@b#Lxx-)Zl6@-c0YbgQ4VJA>(?rm)Bv%@bCLo@5M<43SLDgxUG)9Xr>Um21w*)jNSq zy`m9zwI;i$V5ZG0u`-1dtjv(n${FRHUNU-^zvR@Cbp@lGMrS1Euy2MMHf$+`aQ`^v zFIhb7Bg0l>^UM=De3Cx`6r9+3&M*{_;D9h>7TA*@FB}cIkroY4>sT}t=Pj#J-LSFF z8O5tdvtn_+qGWi`@mf2hIG`1lAnZvuKVrU>85vZ|iZf&!rJ1^`M~`w!oywt~t1hPU z(u@)xdN(>l)U*PjjhXC}>xvtOeM~n#HeZ#GW{q*f;HFXx=lJ;|nb5b>fvj8`Kk@3F zj`9uNUyaV4VhS+#f=OJ+N%2*cCE5>I$AN4K z1|ppbly`y{L4k_*JBj}E!uYS28@+yo@Wsw}D+LmkVAt{zGcY)lftxcKtm8}uvn`Xs zTFYeMgG?sfS*lL|J;96)(hQZ)5B4?I?{sE-k*BbE++x=tc2t`Ykq16x^^)Um< zZT$eZK-~;q>{w=4=1F<;x`tYlH&2A@1;hVFTIi#b7&2qZU+2C5@38pqe`AFI4>~`4 zw;Oy#=g#C0V|i!3ng4??{{Nvxlx>Pn?M*M-Y_pnStyh%Za=mB;@8`Xtfw`y zu_qOc{cTh$T0JKjT`+G!x!c+u-4f}ZBdvNxFwbr8iYBBmBkT!vr?Q0MPPa4Jo*_gc z@ItS3NZwXOGqmJ0S^_PQ7ax~RX(^jbL!nFVKCRB@Kd5^Gy{~K+!}c4=aV>!bp263$ceLPb z!|XH6KY7fdx(ivY9<>@|<9S6TxcjIH*z+6j`C8(6Qp@qq$SLsa4i)$d#Bee-C#!Tg z^<;PUdWS>~l)q>U?w+^&Yy>u1Uilh`-iT^P!zNO)y6~W;c&4%o9#K0(I$|b(SBkOl z6s&1l={D5WRl5yUja6$@dnDzqt7>d^Yqvz=DYvaFrCdyZ&c9?NRo|29>PgkcLoKn0 z!lH1yQr(={EQ6AU5cUV~TY93gR5b2#qUz<~hPQ>WX`m?8*@dZpc_g*1D`M7wr!}co zHmt698|oXIt5j2SedF4Cx2mDRZQS6lsb5}eEg&}y0#);7B98c5eG+tj7Sv6!~FF?5;TV6!xsOeMPG3AZa2bGz6v zy$e{Xo9fp!*3`Ninyc!v+_R*Unx1Cs>zdu=tDCB->uOaro=mA&BHkX*H@^M*3-Z`$y6v6apRG#fUahL+tZe7nl<)(7|}jGaW$xlWO_mji>{UToMVVk{dgt;qFAZBiiM92Un&<>0tSK|2tre&jhQ}uxt0)@2H0id6?L`qwgj&;UP)~}q^EtMy zi5@Q6>}gfIR?jLp2g_k~9BaEN(bFByrOnN$R-Tiu$jQ&k$k=bjr_5S$;J8z}3Hm$k)0$&T~Ni4$eXOQT(77zX4z!#(F==h@mB zX%EdqKG~7zPL+j2u~;%t)?N`Ps|O25^LdC%ps=jX_^FJ;VCP$+skUe&){1&qSP1UTX<#J(=A~wv?K>`kD(o zth%=@M=L6!cV27icSl04vh83s*CgVp?nKP!qT8^EdWxB;&a6beIbctNT}lT)-11{s z(ul;;p^Rr`X9%k#9#Lv#P0ixKtg7{m?jjdXaWNQfvx)TFdBKIj3b*{6a~7TH4G*Hm zk+@DE;VsM+Gl~PgFCyegzX3oQU(+qeWfBA6suF*nuc{>PYJXKp{%7*4N(!#YuPPaG zZ9!E@;ol9ZDk-|Iu&QL}zM`s9>Yb z#-RGc${1+dWwxyhzU@4Na9b~fal0bTW z{&?W?tb71C^VZ_{i8GP+z6T)b_=$2p(&_jK*3Gn`4Nn6kUYoC z$KcdTeng@jlIK|XyvQ`o@T;L}hvYaOKIHA>&+;_=WB%mvSbjaTGBy0(o9?v0ug0V? zfnSZw$=f5x@`*X+r{?4*=j5m6x*To$<`A2i|Kgr2Ik37eVmX1=d zop?#g8SRfkf8UfmAJosc+$J$UUh=}YHAwv6Je#>9ckD2 z@iPI^xTrjALt445-7^3FW(s}ka^m}G2*_<5hVr#oyAi7Fg9ZrBZSt^$Y65Fdh` zrGh^Jd7a=F^A)}d^f-RVHwgYRa76IW5DUcwb3aZBeiZm}!F#~DR`6of?H7!P`hsBo zL~^g-O{n{A!5zRq65Iv+OTmvp&x?Y80Q{EV9|Pxu$9|oHCx6K%?uUGu;6vcf5 zBIn0nw+kPt)Lnvk9zH0X&ER~?;yh|`ejuDaaDFQI^T5vvhiB<;1aqv93+Lv?KEPEVP*>E{GTrz z>Rd_;ontUZYD9i3@EVaX25uyV9z4_~!nq50Gx0b8q#nVufwvJu=O)zMC49DZt;nx~ z{D8=L7T+lHe}(+>#L$T@sDB|A`yUrM`}iy|2r<chr80k z%LQ}KZ?JH)U`zx3_nJAQW0d1OLKjt!g|`W&y*n*@rC=;sb)AKEEDAjsW_6>;iEkA= z6wkXX{8holcs^j^ZwThPc+A4z6HH${Y2hP+>9=27_^4p|?e`XbSup+fwuRpnd8G1eo zJ=;W1{As~#mvImEECJ>hTEr`W8S5DNS1dW>9wX&kj8{xNGgUAiYLhNBSEDZfb|S6=W~^i6zp>zEw)BFGuL7(M?im}8{laBzr!B=QZwPg_{Wk+Fq2$0rD8TRINM`A$4by4ka!N6zmefq6~I}{vz5i%Gnv>1zob3HCoZmirWv>bz?{Pz56&?rwh;j4 z8k~#E%#Hb!%UCa>oDCvzEd^vuD}l`zEvFpg$g$IF2K{2H!xaE#J50uYjsY?4FC-TG ziv`nu-Cwbv&9g7GU-wt+XMfoj+8-c>%}nesG3UJQuh>sJ%$(Hyh0RR!aj`G7U-wt+ zXMZ_Htf$}ez-Fe`^VEXetV)&Do=OZ!uQ6hK+Fk^1YdCmp|r+{Y)-VS`0;6uRY5yStS zk1GVzSM`Ev!#cqM;EM&*$05P=E6+#jsRm98t^>YIFvqu#7(QfM*9qplI4GEIyjd{M zi#r5!oOy1tZUyi|g4y?n1+(vu3+6oKJ4f=_?k@#z1paryZNUE_xC{6t!CQdwL!p|A z@ui&wf@vquR?6xBQo)me`Cg0i0PqySoToDc&jjY#O3qopeBVVJ1m-zQOdnPYUJATQ za5eB+!R+J51UCS065I^T_g&P(b#WQ7%t^lEB4&1%VA{;{mvZ`<=Pxn+d@Hfc;V%iM zAMO@h2z;+#&J(`Znu^lwi*DX9Uxpqk=idcwUoFd-%SKn0`Ah znCp~0M}CrJAIzQ;05*Fj`(QY%WA-1;SF?X|ybUKsEPK&ba%3;M#^UTFmbL#`a)7ts zd8fs>n;8CQx)+z(W4{Az+IpOr9Y^{RF0G?@Lvsa1eq3bQ`;%Px`+Vco2s zQwOJHepwy7JnJV;i!%7nn-(Gamrbi6_eV~zh}{pGA7Mqr@44`iVOs*;(Kyu7(v2_S z?BZA=oR!BHg7J2I;%IXQ5ykjDjcCOQ#*$>`e!fvxXW=(`^>>f=6W^xX+;>$@8n?$st4eYZhi>uZK0qmOnp(dHOnZIGG@Pv%hp$j0q0&w`?!A_ecVTEeL?7Bxk<*p7a*|pErLGUMSUZsjCuWg zAD#ucnE2b(Y!B+Y(Z@z@eaoS56ByLT^TOB{0FQOdJneu!{GU!nAOC%?t?!GLePh5j z`sRr~qk!>CAKtT>Wb_4d^xX@6DGV&_;}&f6Ez8mOI^sS4PH2*WjXAs{h}GWCH!QD@ z%<;XB-H#a+h;N2??eZsQ({4+Sz8~TY+K^GFea7s^bMzfM*E@sQ5AG>O-n*tvS3s2rRgVnPhl;cTH^4gW$bqGI+9Grn^8Qu4D!&fRFG3kkP*B zxQu-a6Rhs3%1XSiuo^IsPka8}k4{#iBBqz#yQz=siBr3PoO@h0c;2|Vh>@z*CNopa7rrFKjnnS6Ns_s5}`m$ghrL}qKYOrg0WuX*Xwi;tGp z%KDVlc@#ealPr^ip7j7}b(RIkv76H~~&mYqK7S-tMmobYT%=G;>To9CR% zZ#nfR=AXFh8n4 z$(-`}rZMFUlri$uPV{Sumr<@WeC1xsD_iCZIy4oS`6;}0j`wy{d3|6GU7C&z6`0qA zw{MxG>JRCZzQe|GM!Ani|Qj5IQ3@^3VOVxO(C0=Td=WJjZT@ZIxZa~epJD$_} zT_*aCGoe!+4BUD=?`1QK<-J_zrNqk(_iLYhUfmm6$hRz@Dtv6D?ykU=?Lg0ivOO50 zU*v&b`w{TG(eI#sPcwxNyirmZ)#wiN#>lH8IDZ-jUKcdA1{a6&BAwxQo=ux|3*;5P zX1pt%Ry3pqR7I1XLiyYdt?7fhMi zRB$fP;o#teGc@6-Ia<`9tq>WU$KZ`uw80de%ch#(th^7#=jB8+-^lA95J~;RdF|qY ztH1m!77YLRS1j1H5{-Fpt}b9ZJ`c~gqew$=c*2QKIKD@e(ixYqvJWxC8FZQ&oB@nd zUY-(pGv&<%`9rpTvs%asXoohmE=GEhH-eGkA=m~jZwMl02=eZIe=7Gl-0w`4@ncw; zsp}l3--FJ2&p#GeO}W)j?H~&@IC*8Y*mLlF-a$Pj?}C;$pU%@kF=ATtLSC6ocGzaG zH7}UfNRo4rK{xJaQ2QopFSyho6SWN9B4`JvVUM;{lv+~wWR~?fp+YLS(n^%iw-VFp zlvCrZsIIH@S2t822-Y~=&MbZ*T_l+A<+S{!gH zkwpau3e#3Ydm-fIb&wnB^ci^@n=7!nuqe${&T&>%?X6?Msxn2%jIiU?wyG+m4OU|d z&R0KkgO!*SR@igT@1G+tXU;zR4|!cL)NiRx@i6|T-H*whw- zVsY*wr&-r=xblPA&v|94xsJx?SE5I2G4S;pM6%%Y2?w%f-Oh%GPdLg~@n|cIFEkmL z{~0+x<%pGw|)psT%9j!$%O#{UB= zzmd-WjZ_j;@&%Wn^r=(%S;aXqm>6R~V)_1NZ3Yx*L&kyxTHn;RX7 zr}}OSH}&OGsYG-*5>NI;j%GINSL0A}w6RFu7f(hLqXV(N(Of+7e`8wF>szz&jq5iy zy91f{(OBkIsnyGZd+ty=o|4Rha5R$16$zsw?nrh>spvf;o5sf6NID&k@~^#tSR!&P zJj^l6<_7Rr2N+#wsSQ)D$Oouka82DvVNYa=l_G`V^lAg^BX60W5dK=n&!f8Iccx=p z{0~eo$J;+Wpd~)#Ooti$-;aKMwFVQmgHuNuuqjOH~@vx1t%wN6?Uvhu+6YP^HAgf_7qWtzP<1t`H`+X?y= zZ3Us}xlB#1Q#m^{X0V(1)-3|l8`G;^E;`3Eu&-yg+ttz0 z>UOnsx9n3xv7CFLrMuT{KN?Hs+`)8CxtJv!y=*MkIhsq4=Gv2y{zMG&{?T|M7f-qz zXgz7%=&>l)5VCS3X-trNW4UALnA+X7x6|$F?Cxz*J-waX`#as1t}eIxu)D9bt=*be zZaf*!v8sL9p`EFbbRw3EwI9v7-Lau~HW$kW^AoVrl*LfPi@_$`S!5822!J(bj5?xzF&_?v9PH`sktP* zt|Yy_B)y>|y|E;{sU&@y?zPS6G!FIN0S?#h{Rcuj-}k=I#_)!4Q>bwy**KVpWQVsk zlT(e^yW{D`{?Q?%MxvwJuztoyVndPjNN0yrnOtKul1OAjjYI1~jh)cKHoOfV8yIXH zG`-Tu9<|f`@!ViMmKZ>}L1;yD@l>)g8`Cjmm?jZBosLBBhGh;Ya=m(E$x%!_nL3;` zdX`e6Cu{1%T-x#I-C1`asxo73Fj<&(947tc;U<#6yiKU~Eqz$CSP6H*k8IyaJeoH@r1_@9$D-( zIe+s2<`Jf)+W(lZr8@99zL$0$k2Q9lZHGr4TX$`VE|NuoXBQI!>dFnnjQ#vDTfr{} zFC+3pgZDyr7y-)918=j^A#mZ`e&xm*q`muIDqXqJ%qSnO++f*4t)>11)cZx3{paH; z!3ut!46NYC>EN)W*`Gdhb0#u;HZ5(o*Zxb3X}f2c*0*5!GJZYE`6Tl7l~-QiSNNON z3V!c?DlhRX_EsVIRed1=@~eiD^a3>^5_(pP_TFb{aL)a%q&Y`w(Y~ij@}HA5d#V=g z{g$LTPioQL*Cfq|_O6wrs|thTwZ8E2zjT_{D3wM`J)bc3$cqu{xend~=9Q7rUoJXJ z5jRo32rq=qcvyB5;x;@+zKbmO_lr&k;yW#!evuzRoV4Wc@)?t(3;BqY4=?(l{Rh)u z?LT-6nER0*+=Vz~G5x1M3}HO}B^uQ_M6^kLw#Ag)N)~)Df}bEFAKko_+NzQ!RCJmF9u%|UI8vc z9rXVnAX_N>4&tT4Dacm~{{=WKyai?129}+Tw(k+<-SI5R^buE95a^vIP8rIFNMx=;RE2`7H&fSoD<#x`DcZn zM$CtH)*}8>vg|+43on5F--u2V>bgkQKc^`5uOj~xmg|a^t9hUW@Us!e+ z@^Uijy&b+a2(youl4UKg6g~?5o5?792F(6tS=ziq!xD5Tve)~JFx2tNz1wiwC$8iy&(92!1c`;7S+BeVG-i!tQ)q`{`cvW6h`Em#d5tjT+*6Ev zjV0$kLisxA@LvbWTfy8rjQo%#=RRWODND}1gL2OQj|z8#xnCIh82QgFIoGyX`!&KGFa3?fWFzx@Kpl?PDvSA#3Y2rN;9g+t z>=5R7@qZO4CwB>Re)U;=M3{ECZq2$rDvU_+H+{;{uq5t%a z@h3Sy;RC}|3ep8)UJ6N&1{+KaH|W#LiQ~+^@bM%&PxHcrKX#EIGJK=_iZJC|ca*cAIC;t3i*OsSnSD?zybjzT%<yU@8r&(&G3qCy-{>dLsAT$?6lQyK!W_eUg+t)u z!b`y)6J81C8l;_@!RLfI@179e0{)yZ&j8N|w}QC_S+)cG72z)Mi^2!N-zLlWay^pi z|BuKRM9$gE!W`dg!Z53@3v;Y}ICoK>W5M$+nPXio%yHr043x87^M%)v@i^=p1UsQZb(P0@gZ=0wi^JFvSqQfyZ>v{)uFpeCfUdl!1FqsWO;24`Vo(3D899jBj zj5^Xk$1R-)$?OD#Q+V=gKb$=_l8f}KFfM_;c-T;mKTCvpW30mc*{lj@@S9+m(s1#m zk0&est-?~aE@%qBQ%s#-bo=9(o%+&e>f-wT$IBYv%`kpT8cd-Hnj`)F8T`0nXD3q8 zqBMS?Neo2yguDa)bP}NB8%8dGW>&TZNw2)aUxK1M?Ve z!b8T?)ZrKD@qAj2=a=auiUX;)Qc8*96xL<$S8}wBxbu?H4&B z9gMvXA!X~`i8SZF2}bXO5ZLw3N4;N$jP>$NVd}jfY}~+7<0vYRNznOZ!2R3DZ>M#;> ztcpz@&%U<3@4(*E(4#$UBYAtTgH0Kr8bPP=jA(+vcOWp#ybg56bTfIZytl!2y&t(r zsqaCL^>Pa`?U)8*w!H&rYFmF%aSs`u0tFX6diuUqv0NcOg_%NKsH-+|iJ!t&fBK|dr!MAZC^j&63 zpnrVYOZ2`uTPdzV6O5kzyTS+&Ux(g#D{V~gM*-Wv+4!M`bBO+NPci;+Y^>&~x1e`~ nl}Rwj7|qLvv*o*Bu5r5Q0ZGB)1^ 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 a4eL5P8-If%sWh$gI4_Mh=26LS4F7-L)UNUX delta 7413 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 Q`+ASFpbE!S4zG>*e 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 WX$Q}a+A`Plt$C%YZY>7V_5BBy+HwZ~ delta 7544 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 TpRMrpltrr;+iv9*;pM*p3CGIt diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex index 7baffb7..9f14fd7 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex @@ -1,29 +1,240 @@ :1000000019C033C032C031C030C02FC02EC02DC087 :100010002CC02BC02AC029C028C027C026C025C09C -:1000200024C023C022C021C020C01FC042C01DC0A8 +:1000200024C023C022C021C020C01FC082C11DC067 :100030001CC01BC011241FBECFEFCDBFDFE3DEBF4E -:100040001FE3A0E0BFE3ECE9F1E002C005900D92F0 -:10005000AA31B107D9F72FE3AAE1BFE301C01D928E -:10006000A633B207E1F750D097C0CACFEF92FF9204 +:100040001FE3A0E0BFE3E7ECFEE002C005900D92E5 +:10005000A830B107D9F72FE3A8E0BFE301C01D9294 +:10006000AB36B207E1F78BD32AC7CACFEF92FF9224 :100070000F931F93CF93DF937C018B01D42FC0E0AC -:1000800007C0F801EC0FF11D6081C70171D0CF5F8F -:10009000CD17B8F3DF91CF911F910F91FF90EF90A3 -:1000A0000895CF93DF93EB015BD08883DF91CF91ED -:1000B00008951F920F920FB60F9211242F933F9322 -:1000C0004F935F936F937F938F939F93AF93BF9360 -:1000D000EF93FF93E0911A3FF0911B3F309719F097 -:1000E000809100080995FF91EF91BF91AF919F9189 -:1000F0008F917F916F915F914F913F912F910F90D1 -:100100000FBE0F901F90189541E06DE17FE380E0F6 -:1001100090E0C7DF2AE684E091E0215080409040E3 -:10012000E1F700C041E060E07FE380E090E09EDF27 -:10013000809108048D3059F480911C3F8F5F80932B -:100140001C3F80911C3F823310F010921C3F2AE626 -:1001500084E091E0215080409040E1F700C0E8CF7A -:1001600003D0808199270895FC01E050FC4E08954A -:10017000262FAF93BF93E0E0F0E1328131FDFDCF58 -:10018000DC01A050BC4E2C932DE924BF23E020833A -:0C0190000196BF91AF910895F894FFCF45 -:10019C0055000000000000000000000000000000FE -:0A01AC000000000000000000000049 +:100080000AC08C2F90E0F801E80FF91F60818E0DF7 +:100090009F1D01D7CF5FCD17A0F3DF91CF911F91A7 +:1000A0000F91FF90EF900895CF92DF92EF92FF9221 +:1000B0000F931F93CF93DF936C017B01D42FC0E08C +:1000C0000BC08C2F90E08701080F191F8C0D9D1D10 +:1000D000DAD6F8018083CF5FCD1798F3DF91CF9107 +:1000E0001F910F91FF90EF90DF90CF9008958111B5 +:1000F0000DC02091080430E002C0359527956A951F +:10010000E2F781E020FF80E090E0089580E090E059 +:100110000895E0E1F8E084818860848381E085834C +:1001200008958093170880911508807CE1F39091E1 +:100130001508892F807194FF04C083E08093140810 +:1001400081E00895CF92DF92EF92FF92CF93DF93F9 +:10015000EB0169017A01232B242B252B81F1E1DFAF +:10016000811130C09E012F5F3F4F88818093180816 +:100170008091150886FFFCCF8091150884FF06C08A +:1001800083E08093140881E090E01EC08091150800 +:100190008C7021F0BEDF81E090E016C080911508E0 +:1001A00084FD07C081E0C81AD108E108F108E9011F +:1001B000C9F683E08093140880E090E005C08FEFDB +:1001C0009FEF02C08FEF9FEFDF91CF91FF90EF90F5 +:1001D000DF90CF900895CF92DF92EF92FF92CF936E +:1001E000DF93EB0169017A01232B242B252B69F185 +:1001F000816097DF8823C9F02BC080911508807C2F +:10020000E1F3CE010196209118082883411551058C +:100210006105710521F424E02093140803C022E055 +:10022000209314086A017B01EC01B701A60141503B +:10023000510961097109CD28CE28CF28F1F683E054 +:100240008093140880E090E005C081E090E002C057 +:100250008FEF9FEFDF91CF91FF90EF90DF90CF90E6 +:100260000895809317088091150886FFFCCF809130 +:10027000150884FF06C083E08093140881E090E0B5 +:10028000089583E08093140880E090E00895E0E012 +:10029000F4E080818B7F80838081877F8083A0E1F1 +:1002A000B8E08BE016968C93169781E013968C93AA +:1002B000139715968C9388E0828B838B80E090E077 +:1002C0000895EF92FF920F931F93CF938C017B01C0 +:1002D000C42F842F880FC5DF009749F4F801E0820E +:1002E000F1824C2F50E0440F551F428302C08EEF25 +:1002F0009FEFCF911F910F91FF90EF9008950F9373 +:10030000009781F0FC01002319F0013031F00DC09D +:10031000828161DF80E090E00AC0828113DF80E0AB +:1003200090E005C08FEF9FEF02C080E090E00F915A +:1003300008951F920F920FB60F9211242F933F939F +:100340004F935F936F937F938F939F93AF93BF93DD +:10035000EF93FF93E091083FF091093F309719F038 +:10036000809100080995FF91EF91BF91AF919F9106 +:100370008F917F916F915F914F913F912F910F904E +:100380000FBE0F901F901895CF93DF931F92CDB79C +:10039000DEB7AC01F894E0E0F8E02CE635E0208729 +:1003A000318793E0978390EC96836115710511F482 +:1003B000452B39F080E8809305086093083F7093DF +:1003C000093F80910408882324F4809100088983E0 +:1003D0008981E0E0F4E080E4818380E8828378949E +:1003E0000F90DF91CF910895E091433FE23029F1E2 +:1003F00028F4EE2341F0E13091F040C0E33059F1B0 +:10040000E430B9F13BC0F0E0EE53F147208191E0D8 +:10041000281390E09093433F81E090E00895F0E04E +:10042000EE53F1479081891302C082E001C080E061 +:100430008093433F81E090E00895F0E0EE53F14770 +:100440009081891302C083E001C080E08093433F24 +:1004500081E090E00895F0E0EE53F1479081891338 +:1004600002C084E001C080E08093433F81E090E0DF +:1004700008951092433F80E090E008951092433F2A +:1004800081E090E008959091423F9330D1F028F4BC +:10049000992341F0913079F047C09430D1F09530F4 +:1004A00029F142C0A1DF892B19F481E08093423FFA +:1004B0001092413F39C080930A3F83E08093423FCE +:1004C00033C0EAE0FFE31182828384E08093423FFD +:1004D0002BC0EAE0FFE321813281A901482BCA0148 +:1004E0008183928385E08093423F1EC09091413F7B +:1004F000E92FF0E0E65FF04C838381E0890F809381 +:10050000413F90910A3F891778F0E091463FF09182 +:10051000473F6DE07FE38091443F9091453F0995CF +:100520001092423F1092413F80E090E00895009782 +:1005300059F06115710541F08093443F9093453F18 +:100540006093463F7093473F0895FC0122813381B9 +:10055000232B21F0892B21F481E0089581E0089577 +:1005600080E008959F92AF92BF92CF92DF92EF9278 +:10057000FF920F931F93CF93DF93EC01942EEC81A6 +:10058000FD81A184B284C384D484E580F680078190 +:10059000108521813281438154818A819B814AD295 +:1005A00081E493E00197F1F70000EC81FD81A588DB +:1005B000B688C788D08CE188F2880389148925859C +:1005C000368547855089692D8A819B813CD181E49C +:1005D00093E00197F1F7000040E0692D8A819B814B +:1005E000B8D1DF91CF911F910F91FF90EF90DF90E5 +:1005F000CF90BF90AF909F900895CF93DF93EC0181 +:1006000060E08A819B81D3D181E493E00197F1F787 +:10061000000088E49FE38C839D836091063F709186 +:10062000073F49E180E090E03FDD40E060E0CE013F +:1006300099DF40E060E08A819B818BD181E493E087 +:100640000197F1F70000DF91CF910895CF93DF93E9 +:10065000EC017BDF811132C089819881891771F1AA +:10066000813019F08230B1F029C081E493E0019724 +:10067000F1F7000040E060E08A819B814AD181E48B +:1006800093E00197F1F7000041E061E08A819B81EE +:1006900040D114C081E493E00197F1F7000041E0FC +:1006A00060E08A819B8135D181E493E00197F1F785 +:1006B000000040E061E08A819B812BD1DF91CF91E6 +:1006C0000895CF93DF93EC0140DF811124C089812D +:1006D000813051F018F0823099F01DC08883CE012E +:1006E0008CDF81E0898317C0CE01B0DF89818883E8 +:1006F00063E080E0FCDC019771F482E089830BC049 +:10070000CE01A4DF8981888363E080E0F0DC892B5F +:1007100011F481E08983DF91CF910895FC01648118 +:100720007581FB018081882319F0813031F00895B3 +:1007300049E180E090E09ADC089549E180E290E0B0 +:1007400095DC0895FC0164837583E8DF80E090E028 +:100750000895CF93DF936115710571F0009761F0F3 +:10076000EC01198218826A837B8362EA73E0DFDE20 +:1007700063E472E0CE0108DEDF91CF910895CF935C +:10078000DF93CDB7DEB7CB55D109CDBFDEBF80E05B +:1007900090E07DDD40E660E070E0CE01019691DD05 +:1007A0004FE751E0BE016F5F7F4FCE010496A0D1AD +:1007B000BE016C5F7F4F81E69FE3CBDF81E69FE365 +:1007C00080DF2AE684E091E0215080409040E1F70C +:1007D00000C0F4CF8F929F92AF92BF92CF92DF92E0 +:1007E000EF92FF920F931F93CF93DF93EC01862E2E +:1007F0005A0168017901C80101961BD2982E192F60 +:10080000FC018192CF01A601B50134D3EA81FB81BD +:10081000A70196012F5F3F4F4F4F5F4F01E0692DBA +:10082000712F88819981099580E090E0DF91CF91C7 +:100830001F910F91FF90EF90DF90CF90BF90AF90FE +:100840009F908F900895AF92BF92CF92DF92EF92D8 +:10085000FF920F931F93FC01662319F0613041F161 +:100860004DC0437086A18C7F482B46A337A320A799 +:10087000F2A6E3A6D601C501072E7CE0B695A795A2 +:10088000979587957A95D1F7702D83708295807FA3 +:100890000370802B81A7B4A2A5A2AF014C5D5F4F6E +:1008A00008E010E020E030E06AE2CF0193DF26C0EC +:1008B000437086A58C7F482B46A737A720ABF2AAAA +:1008C000E3AAD601C501072E7CE0B695A7959795BA +:1008D00087957A95D1F7702D83708295807F03700C +:1008E000802B81ABB4A6A5A6AF01445D5F4F08E0A5 +:1008F00010E020E030E062E3CF016CDF80E090E0C8 +:100900001F910F91FF90EF90DF90CF90BF90AF902D +:1009100008950F931F93662319F0613039F00BC0CF +:10092000FC01278140FB20F9278305C0FC012781BA +:1009300040FB21F92783AC01495F5F4F01E010E0E4 +:1009400020E030E063E046DF80E090E01F910F910F +:1009500008950F931F93662319F06130A1F022C010 +:10096000FC01228540FB27F933853F7D33872F64C7 +:100970002287AC01465F5F4F01E010E020E030E0ED +:1009800060E128DF0FC0FC01238540FB27F92F66BB +:100990002387AC01455F5F4F01E010E020E030E0CD +:1009A00061E118DF80E090E01F910F9108950F93AF +:1009B0001F93662319F0613039F00AC0FC012185CC +:1009C0002B7F277F218704C0FC012185246021879C +:1009D000AC01475F5F4F01E010E020E030E060EFE6 +:1009E000F9DE80E090E01F910F9108950F931F931F +:1009F00031E0611101C030E0FC01E95AFF4F208174 +:100A000030FB25F9208331E0411101C030E0AC0119 +:100A1000495A5F4FFA01208130FB27F9208301E01A +:100A200010E020E030E061EBD5DE80E090E01F9147 +:100A30000F910895AF92BF92CF92DF92EF92FF9203 +:100A40000F931F93CF93DF93EC01662319F061306E +:100A500001F13DC042708E898C7F482B4E8B3F8BBD +:100A6000288FD801C70188279927AF70BB27FA8E36 +:100A7000EB8E8A2F8F70898FBC8AAD8A08E010E0D8 +:100A800020E030E0AE014C5E5F4F6AE1CE01A2DEB5 +:100A90001EC042708E8D8C7F482B4E8F3F8F28A3B7 +:100AA000D801C70188279927AF70BB27FAA2EBA20C +:100AB0008A2F8F7089A3BC8EAD8E08E010E020E0F5 +:100AC00030E0AE01445E5F4F62E2CE0183DE41E082 +:100AD00061E0CE018BDF80E090E0DF91CF911F914C +:100AE0000F91FF90EF90DF90CF90BF90AF9008955F +:100AF000EF92FF920F931F93CF93DF931F92CDB787 +:100B0000DEB7009709F485C06115710509F484C04A +:100B10004115510509F483C07C01DC016D937C9380 +:100B2000119712964D935C931397FC01349684E5CC +:100B3000DF011D928A95E9F78FEF898301E010E0CC +:100B400020E030E0AE014F5F5F4F63E0C70142DE5F +:100B500080E8898301E010E020E030E0AE014F5FE3 +:100B60005F4F60E1C70136DE01E010E020E030E0D9 +:100B7000AE014F5F5F4F61E1C7012CDE01E010E085 +:100B800020E030E0AE014F5F5F4F62E1C70122DE3F +:100B900001E010E020E030E0AE014F5F5F4F63E125 +:100BA000C70118DE01E010E020E030E0AE014F5F49 +:100BB0005F4F64E1C7010EDE01E010E020E030E0AD +:100BC000AE014F5F5F4F65E1C70104DE01E010E059 +:100BD00020E030E0AE014F5F5F4F66E1C701FADD14 +:100BE00001E010E020E030E0AE014F5F5F4F67E1D1 +:100BF000C701F0DD80EC898301E010E020E030E007 +:100C0000AE014F5F5F4F67EBC701E4DD80E090E02E +:100C100008C08FEF9FEF05C08FEF9FEF02C08FEFEF +:100C20009FEF0F90DF91CF911F910F91FF90EF9069 +:100C300008950F931F93CF93DF938230910510F4A3 +:100C400082E090E0E091693FF0916A3F20E030E07F +:100C5000A0E0B0E0309719F1408151810281138109 +:100C600048175907C8F08417950769F4109731F0B1 +:100C700012960C93129713961C9327C00093693F0A +:100C800010936A3F22C02115310519F0421753070E +:100C900018F49A01BD01EF01DF01F801DBCF211546 +:100CA0003105F9F0281B390B2430310580F48A8195 +:100CB0009B816115710521F0FB018283938304C040 +:100CC0008093693F90936A3FFE01329644C0FE01D3 +:100CD000E20FF31F819391932250310928833983C6 +:100CE0003AC02091673F3091683F232B41F4209117 +:100CF000023F3091033F2093673F3093683F20913C +:100D0000003F3091013F2115310541F42DB73EB729 +:100D10004091043F5091053F241B350BE091673F04 +:100D2000F091683FE217F307A0F42E1B3F0B281742 +:100D3000390778F0AC014E5F5F4F2417350748F054 +:100D40004E0F5F1F4093673F5093683F819391938D +:100D500002C0E0E0F0E0CF01DF91CF911F910F9151 +:100D60000895CF93DF93009709F481C0FC01329777 +:100D700012821382A091693FB0916A3F109781F46B +:100D800020813181820F931F2091673F3091683F0E +:100D90002817390751F5E093673FF093683F67C024 +:100DA000ED0120E030E0CE17DF0740F44A815B819F +:100DB0009E0141155105F1F0EA01F5CFC283D383BD +:100DC00040815181840F951FC817D90759F4888134 +:100DD0009981840F951F0296808391838A819B81DC +:100DE000828393832115310529F4E093693FF093C1 +:100DF0006A3F3DC0E901EA83FB8349915991C40FE1 +:100E0000D51FEC17FD0761F480819181840F951F38 +:100E10000296E90188839983828193818A839B83E7 +:100E2000E0E0F0E012968D919C911397009719F0F5 +:100E3000FD01DC01F7CF8D919C9111979D012E5FF3 +:100E40003F4F820F931F2091673F3091683F2817D3 +:100E5000390769F4309729F41092693F10926A3F7C +:100E600002C012821382A093673FB093683FDF9164 +:100E7000CF910895FB01DC0102C001900D92415019 +:100E80005040D8F7089503D0808199270895FC0138 +:100E9000E050FC4E0895262FAF93BF93E0E0F0E1C1 +:100EA000328131FDFDCFDC01A050BC4E2C932DE9E9 +:100EB00024BF23E020830196BF91AF910895F89459 +:020EC000FFCF62 +:050EC2004F5A31434DC1 +:080EC70000006B3F2000483FD2 :00000001FF diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss index eed200e..e715c85 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss @@ -3,31 +3,33 @@ storno_cqp6xx_digital_xtal.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 0000001a 00803f00 0000019c 00000230 2**0 + 0 .data 00000008 00803f00 00000ec7 00000f7b 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 0000019c 00000000 00000000 00000094 2**1 + 1 .text 00000ec2 00000000 00000000 000000b4 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .bss 0000001c 00803f1a 00803f1a 0000024a 2**0 + 2 .rodata 00000005 00008ec2 00000ec2 00000f76 2**0 + CONTENTS, ALLOC, LOAD, READONLY, DATA + 3 .bss 00000063 00803f08 00803f08 00000f83 2**0 ALLOC - 3 .comment 00000030 00000000 00000000 0000024a 2**0 + 4 .comment 00000030 00000000 00000000 00000f83 2**0 CONTENTS, READONLY - 4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 0000027c 2**2 + 5 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00000fb4 2**2 CONTENTS, READONLY - 5 .debug_aranges 000000c8 00000000 00000000 000002b8 2**3 + 6 .debug_aranges 00000260 00000000 00000000 00000ff0 2**3 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 00001e3d 00000000 00000000 00000380 2**0 + 7 .debug_info 0000539c 00000000 00000000 00001250 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 00001565 00000000 00000000 000021bd 2**0 + 8 .debug_abbrev 00001d9f 00000000 00000000 000065ec 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 000007d0 00000000 00000000 00003722 2**0 + 9 .debug_line 000018a4 00000000 00000000 0000838b 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 00000140 00000000 00000000 00003ef4 2**2 + 10 .debug_frame 00000694 00000000 00000000 00009c30 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 00000e53 00000000 00000000 00004034 2**0 + 11 .debug_str 0000227c 00000000 00000000 0000a2c4 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 00000349 00000000 00000000 00004e87 2**0 + 12 .debug_loc 000023ef 00000000 00000000 0000c540 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000058 00000000 00000000 000051d0 2**0 + 13 .debug_ranges 000001a0 00000000 00000000 0000e92f 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -55,7 +57,7 @@ Disassembly of section .text: 26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt> 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> - 2c: 42 c0 rjmp .+132 ; 0xb2 <__vector_22> + 2c: 82 c1 rjmp .+772 ; 0x332 <__vector_22> 2e: 1d c0 rjmp .+58 ; 0x6a <__bad_interrupt> 30: 1c c0 rjmp .+56 ; 0x6a <__bad_interrupt> 32: 1b c0 rjmp .+54 ; 0x6a <__bad_interrupt> @@ -72,18 +74,18 @@ Disassembly of section .text: 40: 1f e3 ldi r17, 0x3F ; 63 42: a0 e0 ldi r26, 0x00 ; 0 44: bf e3 ldi r27, 0x3F ; 63 - 46: ec e9 ldi r30, 0x9C ; 156 - 48: f1 e0 ldi r31, 0x01 ; 1 + 46: e7 ec ldi r30, 0xC7 ; 199 + 48: fe e0 ldi r31, 0x0E ; 14 4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10> 4c: 05 90 lpm r0, Z+ 4e: 0d 92 st X+, r0 - 50: aa 31 cpi r26, 0x1A ; 26 + 50: a8 30 cpi r26, 0x08 ; 8 52: b1 07 cpc r27, r17 54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc> 00000056 <__do_clear_bss>: 56: 2f e3 ldi r18, 0x3F ; 63 - 58: aa e1 ldi r26, 0x1A ; 26 + 58: a8 e0 ldi r26, 0x08 ; 8 5a: bf e3 ldi r27, 0x3F ; 63 5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start> @@ -91,11 +93,11 @@ Disassembly of section .text: 5e: 1d 92 st X+, r1 00000060 <.do_clear_bss_start>: - 60: a6 33 cpi r26, 0x36 ; 54 + 60: ab 36 cpi r26, 0x6B ; 107 62: b2 07 cpc r27, r18 64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop> - 66: 50 d0 rcall .+160 ; 0x108
- 68: 97 c0 rjmp .+302 ; 0x198 <_exit> + 66: 8b d3 rcall .+1814 ; 0x77e
+ 68: 2a c7 rjmp .+3668 ; 0xebe <_exit> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> @@ -120,221 +122,2565 @@ void cm_EEPROM_write(uint8_t* address, uint8_t *data, uint8_t length) { for (uint8_t i = 0; i < length; i++) { 7e: c0 e0 ldi r28, 0x00 ; 0 - 80: 07 c0 rjmp .+14 ; 0x90 <__EEPROM_REGION_LENGTH__+0x10> + 80: 0a c0 rjmp .+20 ; 0x96 <__EEPROM_REGION_LENGTH__+0x16> - eeprom_write_byte(address,data[i]); - 82: f8 01 movw r30, r16 - 84: ec 0f add r30, r28 - 86: f1 1d adc r31, r1 - 88: 60 81 ld r22, Z - 8a: c7 01 movw r24, r14 - 8c: 71 d0 rcall .+226 ; 0x170 + eeprom_write_byte(address+i,data[i]); + 82: 8c 2f mov r24, r28 + 84: 90 e0 ldi r25, 0x00 ; 0 + 86: f8 01 movw r30, r16 + 88: e8 0f add r30, r24 + 8a: f9 1f adc r31, r25 + 8c: 60 81 ld r22, Z + 8e: 8e 0d add r24, r14 + 90: 9f 1d adc r25, r15 + 92: 01 d7 rcall .+3586 ; 0xe96 #include void cm_EEPROM_write(uint8_t* address, uint8_t *data, uint8_t length) { for (uint8_t i = 0; i < length; i++) { - 8e: cf 5f subi r28, 0xFF ; 255 - 90: cd 17 cp r28, r29 - 92: b8 f3 brcs .-18 ; 0x82 <__EEPROM_REGION_LENGTH__+0x2> + 94: cf 5f subi r28, 0xFF ; 255 + 96: cd 17 cp r28, r29 + 98: a0 f3 brcs .-24 ; 0x82 <__EEPROM_REGION_LENGTH__+0x2> //NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEERASEWRITE_gc; /* Wait until the write is complete */ //while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm); } } - 94: df 91 pop r29 - 96: cf 91 pop r28 - 98: 1f 91 pop r17 - 9a: 0f 91 pop r16 - 9c: ff 90 pop r15 - 9e: ef 90 pop r14 - a0: 08 95 ret + 9a: df 91 pop r29 + 9c: cf 91 pop r28 + 9e: 1f 91 pop r17 + a0: 0f 91 pop r16 + a2: ff 90 pop r15 + a4: ef 90 pop r14 + a6: 08 95 ret -000000a2 : +000000a8 : void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { - a2: cf 93 push r28 - a4: df 93 push r29 - a6: eb 01 movw r28, r22 + a8: cf 92 push r12 + aa: df 92 push r13 + ac: ef 92 push r14 + ae: ff 92 push r15 + b0: 0f 93 push r16 + b2: 1f 93 push r17 + b4: cf 93 push r28 + b6: df 93 push r29 + b8: 6c 01 movw r12, r24 + ba: 7b 01 movw r14, r22 + bc: d4 2f mov r29, r20 - data[0] = eeprom_read_byte(address); - a8: 5b d0 rcall .+182 ; 0x160 - aa: 88 83 st Y, r24 + for (uint8_t i = 0; i < length; i++) { + be: c0 e0 ldi r28, 0x00 ; 0 + c0: 0b c0 rjmp .+22 ; 0xd8 + data[i] = eeprom_read_byte(address+i); + c2: 8c 2f mov r24, r28 + c4: 90 e0 ldi r25, 0x00 ; 0 + c6: 87 01 movw r16, r14 + c8: 08 0f add r16, r24 + ca: 19 1f adc r17, r25 + cc: 8c 0d add r24, r12 + ce: 9d 1d adc r25, r13 + d0: da d6 rcall .+3508 ; 0xe86 + d2: f8 01 movw r30, r16 + d4: 80 83 st Z, r24 +} + + +void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { + + for (uint8_t i = 0; i < length; i++) { + d6: cf 5f subi r28, 0xFF ; 255 + d8: cd 17 cp r28, r29 + da: 98 f3 brcs .-26 ; 0xc2 // Directly read the data from NVMCTRL.DATA data[i] = NVMCTRL.DATA; }*/ } - ac: df 91 pop r29 - ae: cf 91 pop r28 - b0: 08 95 ret + dc: df 91 pop r29 + de: cf 91 pop r28 + e0: 1f 91 pop r17 + e2: 0f 91 pop r16 + e4: ff 90 pop r15 + e6: ef 90 pop r14 + e8: df 90 pop r13 + ea: cf 90 pop r12 + ec: 08 95 ret -000000b2 <__vector_22>: +000000ee : + return 0; +} + +int gpio_get_level(avr_gpio_ports port, uint8_t pin){ + + switch (port) + ee: 81 11 cpse r24, r1 + f0: 0d c0 rjmp .+26 ; 0x10c <__DATA_REGION_LENGTH__+0xc> + { + + case GPIO_PORTA: + return (PORTA.IN & (1 << pin)) ? 1 : 0; + f2: 20 91 08 04 lds r18, 0x0408 ; 0x800408 + f6: 30 e0 ldi r19, 0x00 ; 0 + f8: 02 c0 rjmp .+4 ; 0xfe + fa: 35 95 asr r19 + fc: 27 95 ror r18 + fe: 6a 95 dec r22 + 100: e2 f7 brpl .-8 ; 0xfa + 102: 81 e0 ldi r24, 0x01 ; 1 + 104: 20 ff sbrs r18, 0 + 106: 80 e0 ldi r24, 0x00 ; 0 + 108: 90 e0 ldi r25, 0x00 ; 0 + 10a: 08 95 ret + break; + + default: + break; + } + return 0; + 10c: 80 e0 ldi r24, 0x00 ; 0 + 10e: 90 e0 ldi r25, 0x00 ; 0 +} + 110: 08 95 ret + +00000112 : + *data = TWI0.MDATA; + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + return 0; // Success +} + 112: e0 e1 ldi r30, 0x10 ; 16 + 114: f8 e0 ldi r31, 0x08 ; 8 + 116: 84 81 ldd r24, Z+4 ; 0x04 + 118: 88 60 ori r24, 0x08 ; 8 + 11a: 84 83 std Z+4, r24 ; 0x04 + 11c: 81 e0 ldi r24, 0x01 ; 1 + 11e: 85 83 std Z+5, r24 ; 0x05 + 120: 08 95 ret + +00000122 : + 122: 80 93 17 08 sts 0x0817, r24 ; 0x800817 + 126: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 12a: 80 7c andi r24, 0xC0 ; 192 + 12c: e1 f3 breq .-8 ; 0x126 + 12e: 90 91 15 08 lds r25, 0x0815 ; 0x800815 + 132: 89 2f mov r24, r25 + 134: 80 71 andi r24, 0x10 ; 16 + 136: 94 ff sbrs r25, 4 + 138: 04 c0 rjmp .+8 ; 0x142 + 13a: 83 e0 ldi r24, 0x03 ; 3 + 13c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + 140: 81 e0 ldi r24, 0x01 ; 1 + 142: 08 95 ret + +00000144 : + +int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ + 144: cf 92 push r12 + 146: df 92 push r13 + 148: ef 92 push r14 + 14a: ff 92 push r15 + 14c: cf 93 push r28 + 14e: df 93 push r29 + 150: eb 01 movw r28, r22 + 152: 69 01 movw r12, r18 + 154: 7a 01 movw r14, r20 + + // Check length + if(len == 0) return CM_I2C_NOK; + 156: 23 2b or r18, r19 + 158: 24 2b or r18, r20 + 15a: 25 2b or r18, r21 + 15c: 81 f1 breq .+96 ; 0x1be + + // Make a pointer to data + uint8_t *dp = data; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr) != CM_I2C_OK)return CM_I2C_NOK; + 15e: e1 df rcall .-62 ; 0x122 + 160: 81 11 cpse r24, r1 + 162: 30 c0 rjmp .+96 ; 0x1c4 + + do + { + // Prepare and send new data. + TWI0.MDATA = *dp++; + 164: 9e 01 movw r18, r28 + 166: 2f 5f subi r18, 0xFF ; 255 + 168: 3f 4f sbci r19, 0xFF ; 255 + 16a: 88 81 ld r24, Y + 16c: 80 93 18 08 sts 0x0818, r24 ; 0x800818 + + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + 170: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 174: 86 ff sbrs r24, 6 + 176: fc cf rjmp .-8 ; 0x170 + + if (TWI0.MSTATUS & TWI_RXACK_bm) { + 178: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 17c: 84 ff sbrs r24, 4 + 17e: 06 c0 rjmp .+12 ; 0x18c + // NACK received + TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition + 180: 83 e0 ldi r24, 0x03 ; 3 + 182: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + return 1; // Error: NACK received + 186: 81 e0 ldi r24, 0x01 ; 1 + 188: 90 e0 ldi r25, 0x00 ; 0 + 18a: 1e c0 rjmp .+60 ; 0x1c8 + } + + // Check for bus error and reset if it happens.. + if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { + 18c: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 190: 8c 70 andi r24, 0x0C ; 12 + 192: 21 f0 breq .+8 ; 0x19c + i2c_reset(); + 194: be df rcall .-132 ; 0x112 + return 1; + 196: 81 e0 ldi r24, 0x01 ; 1 + 198: 90 e0 ldi r25, 0x00 ; 0 + 19a: 16 c0 rjmp .+44 ; 0x1c8 + } + + if (TWI0.MSTATUS & TWI_RXACK_bm) + 19c: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 1a0: 84 fd sbrc r24, 4 + 1a2: 07 c0 rjmp .+14 ; 0x1b2 + break; + + }while(--len); + 1a4: 81 e0 ldi r24, 0x01 ; 1 + 1a6: c8 1a sub r12, r24 + 1a8: d1 08 sbc r13, r1 + 1aa: e1 08 sbc r14, r1 + 1ac: f1 08 sbc r15, r1 + if(i2c_write_devAddr(dev_addr) != CM_I2C_OK)return CM_I2C_NOK; + + do + { + // Prepare and send new data. + TWI0.MDATA = *dp++; + 1ae: e9 01 movw r28, r18 + } + + if (TWI0.MSTATUS & TWI_RXACK_bm) + break; + + }while(--len); + 1b0: c9 f6 brne .-78 ; 0x164 + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 1b2: 83 e0 ldi r24, 0x03 ; 3 + 1b4: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + + + return CM_I2C_OK; + 1b8: 80 e0 ldi r24, 0x00 ; 0 + 1ba: 90 e0 ldi r25, 0x00 ; 0 + 1bc: 05 c0 rjmp .+10 ; 0x1c8 +} + +int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ + + // Check length + if(len == 0) return CM_I2C_NOK; + 1be: 8f ef ldi r24, 0xFF ; 255 + 1c0: 9f ef ldi r25, 0xFF ; 255 + 1c2: 02 c0 rjmp .+4 ; 0x1c8 + + // Make a pointer to data + uint8_t *dp = data; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr) != CM_I2C_OK)return CM_I2C_NOK; + 1c4: 8f ef ldi r24, 0xFF ; 255 + 1c6: 9f ef ldi r25, 0xFF ; 255 + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + + + return CM_I2C_OK; +} + 1c8: df 91 pop r29 + 1ca: cf 91 pop r28 + 1cc: ff 90 pop r15 + 1ce: ef 90 pop r14 + 1d0: df 90 pop r13 + 1d2: cf 90 pop r12 + 1d4: 08 95 ret + +000001d6 : + +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + 1d6: cf 92 push r12 + 1d8: df 92 push r13 + 1da: ef 92 push r14 + 1dc: ff 92 push r15 + 1de: cf 93 push r28 + 1e0: df 93 push r29 + 1e2: eb 01 movw r28, r22 + 1e4: 69 01 movw r12, r18 + 1e6: 7a 01 movw r14, r20 + + uint8_t *dp = data; + + if (len == 0) + 1e8: 23 2b or r18, r19 + 1ea: 24 2b or r18, r20 + 1ec: 25 2b or r18, r21 + 1ee: 69 f1 breq .+90 ; 0x24a + return 1; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + 1f0: 81 60 ori r24, 0x01 ; 1 + 1f2: 97 df rcall .-210 ; 0x122 + 1f4: 88 23 and r24, r24 + 1f6: c9 f0 breq .+50 ; 0x22a + 1f8: 2b c0 rjmp .+86 ; 0x250 + + while (len--) { + + while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); + 1fa: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 1fe: 80 7c andi r24, 0xC0 ; 192 + 200: e1 f3 breq .-8 ; 0x1fa + + *dp++ = TWI0.MDATA; + 202: ce 01 movw r24, r28 + 204: 01 96 adiw r24, 0x01 ; 1 + 206: 20 91 18 08 lds r18, 0x0818 ; 0x800818 + 20a: 28 83 st Y, r18 + if (len == 0) { + 20c: 41 15 cp r20, r1 + 20e: 51 05 cpc r21, r1 + 210: 61 05 cpc r22, r1 + 212: 71 05 cpc r23, r1 + 214: 21 f4 brne .+8 ; 0x21e + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + 216: 24 e0 ldi r18, 0x04 ; 4 + 218: 20 93 14 08 sts 0x0814, r18 ; 0x800814 + 21c: 03 c0 rjmp .+6 ; 0x224 + } else { + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + 21e: 22 e0 ldi r18, 0x02 ; 2 + 220: 20 93 14 08 sts 0x0814, r18 ; 0x800814 + 224: 6a 01 movw r12, r20 + 226: 7b 01 movw r14, r22 + + + return CM_I2C_OK; +} + +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + 228: ec 01 movw r28, r24 + return 1; + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + + while (len--) { + 22a: b7 01 movw r22, r14 + 22c: a6 01 movw r20, r12 + 22e: 41 50 subi r20, 0x01 ; 1 + 230: 51 09 sbc r21, r1 + 232: 61 09 sbc r22, r1 + 234: 71 09 sbc r23, r1 + 236: cd 28 or r12, r13 + 238: ce 28 or r12, r14 + 23a: cf 28 or r12, r15 + 23c: f1 f6 brne .-68 ; 0x1fa + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + } + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 23e: 83 e0 ldi r24, 0x03 ; 3 + 240: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + + return 0; + 244: 80 e0 ldi r24, 0x00 ; 0 + 246: 90 e0 ldi r25, 0x00 ; 0 + 248: 05 c0 rjmp .+10 ; 0x254 +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + + uint8_t *dp = data; + + if (len == 0) + return 1; + 24a: 81 e0 ldi r24, 0x01 ; 1 + 24c: 90 e0 ldi r25, 0x00 ; 0 + 24e: 02 c0 rjmp .+4 ; 0x254 + + // Send register address to I2C device, we would like to read from.. + if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; + 250: 8f ef ldi r24, 0xFF ; 255 + 252: 9f ef ldi r25, 0xFF ; 255 + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + + return 0; + + +} + 254: df 91 pop r29 + 256: cf 91 pop r28 + 258: ff 90 pop r15 + 25a: ef 90 pop r14 + 25c: df 90 pop r13 + 25e: cf 90 pop r12 + 260: 08 95 ret + +00000262 : + +int i2c_IsDeviceReady(uint8_t dev_addr){ + + TWI0.MADDR = dev_addr | 0; + 262: 80 93 17 08 sts 0x0817, r24 ; 0x800817 + + // Wait for acknowledgment + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + 266: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 26a: 86 ff sbrs r24, 6 + 26c: fc cf rjmp .-8 ; 0x266 + + if (TWI0.MSTATUS & TWI_RXACK_bm) { + 26e: 80 91 15 08 lds r24, 0x0815 ; 0x800815 + 272: 84 ff sbrs r24, 4 + 274: 06 c0 rjmp .+12 ; 0x282 + // NACK received + TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition + 276: 83 e0 ldi r24, 0x03 ; 3 + 278: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + return 1; // Error: NACK received + 27c: 81 e0 ldi r24, 0x01 ; 1 + 27e: 90 e0 ldi r25, 0x00 ; 0 + 280: 08 95 ret + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 282: 83 e0 ldi r24, 0x03 ; 3 + 284: 80 93 14 08 sts 0x0814, r24 ; 0x800814 + return CM_I2C_OK; // Success + 288: 80 e0 ldi r24, 0x00 ; 0 + 28a: 90 e0 ldi r25, 0x00 ; 0 + +} + 28c: 08 95 ret + +0000028e : + + +int cm_i2c_init(void *i2c_inst){ + + PORTA.DIR &= ~(1 << 2); // Clear bit 2 (PA2) + 28e: e0 e0 ldi r30, 0x00 ; 0 + 290: f4 e0 ldi r31, 0x04 ; 4 + 292: 80 81 ld r24, Z + 294: 8b 7f andi r24, 0xFB ; 251 + 296: 80 83 st Z, r24 + PORTA.DIR &= ~(1 << 3); // Clear bit 3 (PA3) + 298: 80 81 ld r24, Z + 29a: 87 7f andi r24, 0xF7 ; 247 + 29c: 80 83 st Z, r24 + + // Set the baud rate for 100kHz with a typical rise time of 300 ns + TWI0.MBAUD = 11; + 29e: a0 e1 ldi r26, 0x10 ; 16 + 2a0: b8 e0 ldi r27, 0x08 ; 8 + 2a2: 8b e0 ldi r24, 0x0B ; 11 + 2a4: 16 96 adiw r26, 0x06 ; 6 + 2a6: 8c 93 st X, r24 + 2a8: 16 97 sbiw r26, 0x06 ; 6 + + // Enable the TWI master and set it to enable operation + TWI0.MCTRLA = TWI_ENABLE_bm; + 2aa: 81 e0 ldi r24, 0x01 ; 1 + 2ac: 13 96 adiw r26, 0x03 ; 3 + 2ae: 8c 93 st X, r24 + 2b0: 13 97 sbiw r26, 0x03 ; 3 + + /* Set bus state idle */ + TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; + 2b2: 15 96 adiw r26, 0x05 ; 5 + 2b4: 8c 93 st X, r24 + + // Enable the internal pull-ups for PA2 (SDA) and PA3 (SCL) + PORTA.PIN2CTRL = PORT_PULLUPEN_bm; + 2b6: 88 e0 ldi r24, 0x08 ; 8 + 2b8: 82 8b std Z+18, r24 ; 0x12 + PORTA.PIN3CTRL = PORT_PULLUPEN_bm; + 2ba: 83 8b std Z+19, r24 ; 0x13 + return CM_I2C_OK; +} + 2bc: 80 e0 ldi r24, 0x00 ; 0 + 2be: 90 e0 ldi r25, 0x00 ; 0 + 2c0: 08 95 ret + +000002c2 : + + + +int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ + 2c2: ef 92 push r14 + 2c4: ff 92 push r15 + 2c6: 0f 93 push r16 + 2c8: 1f 93 push r17 + 2ca: cf 93 push r28 + 2cc: 8c 01 movw r16, r24 + 2ce: 7b 01 movw r14, r22 + 2d0: c4 2f mov r28, r20 + + //if(i2c_inst == NULL) return CM_I2C_NOK; + + // Check if device responds! + if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; + 2d2: 84 2f mov r24, r20 + 2d4: 88 0f add r24, r24 + 2d6: c5 df rcall .-118 ; 0x262 + 2d8: 00 97 sbiw r24, 0x00 ; 0 + 2da: 49 f4 brne .+18 ; 0x2ee + + // add device info if device responds! + inst->i2c_transfer_inst = i2c_inst; + 2dc: f8 01 movw r30, r16 + 2de: e0 82 st Z, r14 + 2e0: f1 82 std Z+1, r15 ; 0x01 + inst->dev_addr = (dev_addr << 1) & 0b11111110; + 2e2: 4c 2f mov r20, r28 + 2e4: 50 e0 ldi r21, 0x00 ; 0 + 2e6: 44 0f add r20, r20 + 2e8: 55 1f adc r21, r21 + 2ea: 42 83 std Z+2, r20 ; 0x02 + + return CM_I2C_OK; + 2ec: 02 c0 rjmp .+4 ; 0x2f2 +int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ + + //if(i2c_inst == NULL) return CM_I2C_NOK; + + // Check if device responds! + if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; + 2ee: 8e ef ldi r24, 0xFE ; 254 + 2f0: 9f ef ldi r25, 0xFF ; 255 + // add device info if device responds! + inst->i2c_transfer_inst = i2c_inst; + inst->dev_addr = (dev_addr << 1) & 0b11111110; + + return CM_I2C_OK; +} + 2f2: cf 91 pop r28 + 2f4: 1f 91 pop r17 + 2f6: 0f 91 pop r16 + 2f8: ff 90 pop r15 + 2fa: ef 90 pop r14 + 2fc: 08 95 ret + +000002fe : + + +int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ + 2fe: 0f 93 push r16 + + if(inst == NULL) return CM_I2C_NOK; + 300: 00 97 sbiw r24, 0x00 ; 0 + 302: 81 f0 breq .+32 ; 0x324 + 304: fc 01 movw r30, r24 + + // Check if device responds! + //if(i2c_IsDeviceReady(inst->dev_addr) != CM_I2C_OK)return CM_I2C_NO_DEVICE; + + switch(set_get){ + 306: 00 23 and r16, r16 + 308: 19 f0 breq .+6 ; 0x310 + 30a: 01 30 cpi r16, 0x01 ; 1 + 30c: 31 f0 breq .+12 ; 0x31a + 30e: 0d c0 rjmp .+26 ; 0x32a + + case I2C_CM_GET: + //HAL_I2C_Master_Receive(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); + i2c_read(inst->dev_addr, data, len); + 310: 82 81 ldd r24, Z+2 ; 0x02 + 312: 61 df rcall .-318 ; 0x1d6 + break; + + + } + + return CM_I2C_OK; + 314: 80 e0 ldi r24, 0x00 ; 0 + 316: 90 e0 ldi r25, 0x00 ; 0 + switch(set_get){ + + case I2C_CM_GET: + //HAL_I2C_Master_Receive(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); + i2c_read(inst->dev_addr, data, len); + break; + 318: 0a c0 rjmp .+20 ; 0x32e + + case I2C_CM_SET: + //HAL_I2C_Master_Transmit(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); + i2c_write(inst->dev_addr, data, len); + 31a: 82 81 ldd r24, Z+2 ; 0x02 + 31c: 13 df rcall .-474 ; 0x144 + break; + + + } + + return CM_I2C_OK; + 31e: 80 e0 ldi r24, 0x00 ; 0 + 320: 90 e0 ldi r25, 0x00 ; 0 + break; + + case I2C_CM_SET: + //HAL_I2C_Master_Transmit(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); + i2c_write(inst->dev_addr, data, len); + break; + 322: 05 c0 rjmp .+10 ; 0x32e +} + + +int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ + + if(inst == NULL) return CM_I2C_NOK; + 324: 8f ef ldi r24, 0xFF ; 255 + 326: 9f ef ldi r25, 0xFF ; 255 + 328: 02 c0 rjmp .+4 ; 0x32e + break; + + + } + + return CM_I2C_OK; + 32a: 80 e0 ldi r24, 0x00 ; 0 + 32c: 90 e0 ldi r25, 0x00 ; 0 + +} + 32e: 0f 91 pop r16 + 330: 08 95 ret + +00000332 <__vector_22>: #define BAUD_RATE 9600 static void *s_inst = NULL; get_UART_Event_fpt uart_rx_evt_fpt = NULL; ISR(USART0_RXC_vect) { - b2: 1f 92 push r1 - b4: 0f 92 push r0 - b6: 0f b6 in r0, 0x3f ; 63 - b8: 0f 92 push r0 - ba: 11 24 eor r1, r1 - bc: 2f 93 push r18 - be: 3f 93 push r19 - c0: 4f 93 push r20 - c2: 5f 93 push r21 - c4: 6f 93 push r22 - c6: 7f 93 push r23 - c8: 8f 93 push r24 - ca: 9f 93 push r25 - cc: af 93 push r26 - ce: bf 93 push r27 - d0: ef 93 push r30 - d2: ff 93 push r31 + 332: 1f 92 push r1 + 334: 0f 92 push r0 + 336: 0f b6 in r0, 0x3f ; 63 + 338: 0f 92 push r0 + 33a: 11 24 eor r1, r1 + 33c: 2f 93 push r18 + 33e: 3f 93 push r19 + 340: 4f 93 push r20 + 342: 5f 93 push r21 + 344: 6f 93 push r22 + 346: 7f 93 push r23 + 348: 8f 93 push r24 + 34a: 9f 93 push r25 + 34c: af 93 push r26 + 34e: bf 93 push r27 + 350: ef 93 push r30 + 352: ff 93 push r31 // Read received data if(uart_rx_evt_fpt != NULL) uart_rx_evt_fpt(USART0.RXDATAL); - d4: e0 91 1a 3f lds r30, 0x3F1A ; 0x803f1a <__data_end> - d8: f0 91 1b 3f lds r31, 0x3F1B ; 0x803f1b <__data_end+0x1> - dc: 30 97 sbiw r30, 0x00 ; 0 - de: 19 f0 breq .+6 ; 0xe6 <__vector_22+0x34> - e0: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> - e4: 09 95 icall + 354: e0 91 08 3f lds r30, 0x3F08 ; 0x803f08 <__data_end> + 358: f0 91 09 3f lds r31, 0x3F09 ; 0x803f09 <__data_end+0x1> + 35c: 30 97 sbiw r30, 0x00 ; 0 + 35e: 19 f0 breq .+6 ; 0x366 <__vector_22+0x34> + 360: 80 91 00 08 lds r24, 0x0800 ; 0x800800 + 364: 09 95 icall //cm_uart_send(USART0.RXDATAL); } - e6: ff 91 pop r31 - e8: ef 91 pop r30 - ea: bf 91 pop r27 - ec: af 91 pop r26 - ee: 9f 91 pop r25 - f0: 8f 91 pop r24 - f2: 7f 91 pop r23 - f4: 6f 91 pop r22 - f6: 5f 91 pop r21 - f8: 4f 91 pop r20 - fa: 3f 91 pop r19 - fc: 2f 91 pop r18 - fe: 0f 90 pop r0 - 100: 0f be out 0x3f, r0 ; 63 - 102: 0f 90 pop r0 - 104: 1f 90 pop r1 - 106: 18 95 reti + 366: ff 91 pop r31 + 368: ef 91 pop r30 + 36a: bf 91 pop r27 + 36c: af 91 pop r26 + 36e: 9f 91 pop r25 + 370: 8f 91 pop r24 + 372: 7f 91 pop r23 + 374: 6f 91 pop r22 + 376: 5f 91 pop r21 + 378: 4f 91 pop r20 + 37a: 3f 91 pop r19 + 37c: 2f 91 pop r18 + 37e: 0f 90 pop r0 + 380: 0f be out 0x3f, r0 ; 63 + 382: 0f 90 pop r0 + 384: 1f 90 pop r1 + 386: 18 95 reti -00000108
: - -int main(void) -{ +00000388 : + + +void cm_uart_init(void *rtx_inst, get_UART_Event_fpt uart_rx_evt_fp){ + 388: cf 93 push r28 + 38a: df 93 push r29 + 38c: 1f 92 push r1 + 38e: cd b7 in r28, 0x3d ; 61 + 390: de b7 in r29, 0x3e ; 62 + 392: ac 01 movw r20, r24 + //For interrupt-driven USART operation, global interrupts must be disabled during the initialization + cli(); + 394: f8 94 cli + + // Calculate and set baud rate register (3.33 MHz / (16 * 9600) - 1) + uint16_t baud = 1388;//(F_CPU / (16 * BAUD_RATE)) - 1; + USART0.BAUD = baud; + 396: e0 e0 ldi r30, 0x00 ; 0 + 398: f8 e0 ldi r31, 0x08 ; 8 + 39a: 2c e6 ldi r18, 0x6C ; 108 + 39c: 35 e0 ldi r19, 0x05 ; 5 + 39e: 20 87 std Z+8, r18 ; 0x08 + 3a0: 31 87 std Z+9, r19 ; 0x09 - cm_EEPROM_read(0x00,data,1); - 108: 41 e0 ldi r20, 0x01 ; 1 - 10a: 6d e1 ldi r22, 0x1D ; 29 - 10c: 7f e3 ldi r23, 0x3F ; 63 - 10e: 80 e0 ldi r24, 0x00 ; 0 - 110: 90 e0 ldi r25, 0x00 ; 0 - 112: c7 df rcall .-114 ; 0xa2 + // Configure USART0 for 8-bit data, no parity, 1 stop bit + USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | // Asynchronous mode + 3a2: 93 e0 ldi r25, 0x03 ; 3 + 3a4: 97 83 std Z+7, r25 ; 0x07 + USART_CHSIZE_8BIT_gc | // 8-bit character size + USART_PMODE_DISABLED_gc; // No parity + + // Enable receiver, transmitter, and receive complete interrupt + USART0.CTRLB = USART_RXEN_bm | // Enable receiver + 3a6: 90 ec ldi r25, 0xC0 ; 192 + 3a8: 96 83 std Z+6, r25 ; 0x06 + USART_TXEN_bm; // Enable transmitter + + if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ + 3aa: 61 15 cp r22, r1 + 3ac: 71 05 cpc r23, r1 + 3ae: 11 f4 brne .+4 ; 0x3b4 + 3b0: 45 2b or r20, r21 + 3b2: 39 f0 breq .+14 ; 0x3c2 + // Enable RX interrupt + USART0.CTRLA = USART_RXCIE_bm; // Enable receive interrupt + 3b4: 80 e8 ldi r24, 0x80 ; 128 + 3b6: 80 93 05 08 sts 0x0805, r24 ; 0x800805 + + s_inst = rtx_inst; + uart_rx_evt_fpt = uart_rx_evt_fp; + 3ba: 60 93 08 3f sts 0x3F08, r22 ; 0x803f08 <__data_end> + 3be: 70 93 09 3f sts 0x3F09, r23 ; 0x803f09 <__data_end+0x1> + } + + + // Clear any existing receive complete interrupt flag by reading RXDATAL + if (USART0.STATUS & USART_RXCIF_bm) { + 3c2: 80 91 04 08 lds r24, 0x0804 ; 0x800804 + 3c6: 88 23 and r24, r24 + 3c8: 24 f4 brge .+8 ; 0x3d2 + volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag + 3ca: 80 91 00 08 lds r24, 0x0800 ; 0x800800 + 3ce: 89 83 std Y+1, r24 ; 0x01 + (void)dummy; // Silence unused variable warning + 3d0: 89 81 ldd r24, Y+1 ; 0x01 + } + + PORTA.DIRSET = (1 << 6); // Set PA1 (TX) as output + 3d2: e0 e0 ldi r30, 0x00 ; 0 + 3d4: f4 e0 ldi r31, 0x04 ; 4 + 3d6: 80 e4 ldi r24, 0x40 ; 64 + 3d8: 81 83 std Z+1, r24 ; 0x01 + PORTA.DIRCLR = (1 << 7); // Set PA2 (RX) as input + 3da: 80 e8 ldi r24, 0x80 ; 128 + 3dc: 82 83 std Z+2, r24 ; 0x02 + // Enable global interrupts + sei(); + 3de: 78 94 sei + + +} + 3e0: 0f 90 pop r0 + 3e2: df 91 pop r29 + 3e4: cf 91 pop r28 + 3e6: 08 95 ret + +000003e8 : + +int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ + + static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; + + switch (state) + 3e8: e0 91 43 3f lds r30, 0x3F43 ; 0x803f43 + 3ec: e2 30 cpi r30, 0x02 ; 2 + 3ee: 29 f1 breq .+74 ; 0x43a <__LOCK_REGION_LENGTH__+0x3a> + 3f0: 28 f4 brcc .+10 ; 0x3fc + 3f2: ee 23 and r30, r30 + 3f4: 41 f0 breq .+16 ; 0x406 <__LOCK_REGION_LENGTH__+0x6> + 3f6: e1 30 cpi r30, 0x01 ; 1 + 3f8: 91 f0 breq .+36 ; 0x41e <__LOCK_REGION_LENGTH__+0x1e> + 3fa: 40 c0 rjmp .+128 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c> + 3fc: e3 30 cpi r30, 0x03 ; 3 + 3fe: 59 f1 breq .+86 ; 0x456 <__LOCK_REGION_LENGTH__+0x56> + 400: e4 30 cpi r30, 0x04 ; 4 + 402: b9 f1 breq .+110 ; 0x472 <__LOCK_REGION_LENGTH__+0x72> + 404: 3b c0 rjmp .+118 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c> + { + case CM_MSGSYNC_STATE_INIT: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; + 406: f0 e0 ldi r31, 0x00 ; 0 + 408: ee 53 subi r30, 0x3E ; 62 + 40a: f1 47 sbci r31, 0x71 ; 113 + 40c: 20 81 ld r18, Z + 40e: 91 e0 ldi r25, 0x01 ; 1 + 410: 28 13 cpse r18, r24 + 412: 90 e0 ldi r25, 0x00 ; 0 + 414: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 418: 81 e0 ldi r24, 0x01 ; 1 + 41a: 90 e0 ldi r25, 0x00 ; 0 + + switch (state) + { + case CM_MSGSYNC_STATE_INIT: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; + break; + 41c: 08 95 ret + + case CM_MSGSYNC_STATE_2: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; + 41e: f0 e0 ldi r31, 0x00 ; 0 + 420: ee 53 subi r30, 0x3E ; 62 + 422: f1 47 sbci r31, 0x71 ; 113 + 424: 90 81 ld r25, Z + 426: 89 13 cpse r24, r25 + 428: 02 c0 rjmp .+4 ; 0x42e <__LOCK_REGION_LENGTH__+0x2e> + 42a: 82 e0 ldi r24, 0x02 ; 2 + 42c: 01 c0 rjmp .+2 ; 0x430 <__LOCK_REGION_LENGTH__+0x30> + 42e: 80 e0 ldi r24, 0x00 ; 0 + 430: 80 93 43 3f sts 0x3F43, r24 ; 0x803f43 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 434: 81 e0 ldi r24, 0x01 ; 1 + 436: 90 e0 ldi r25, 0x00 ; 0 + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; + break; + + case CM_MSGSYNC_STATE_2: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; + break; + 438: 08 95 ret + + case CM_MSGSYNC_STATE_3: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; + 43a: f0 e0 ldi r31, 0x00 ; 0 + 43c: ee 53 subi r30, 0x3E ; 62 + 43e: f1 47 sbci r31, 0x71 ; 113 + 440: 90 81 ld r25, Z + 442: 89 13 cpse r24, r25 + 444: 02 c0 rjmp .+4 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a> + 446: 83 e0 ldi r24, 0x03 ; 3 + 448: 01 c0 rjmp .+2 ; 0x44c <__LOCK_REGION_LENGTH__+0x4c> + 44a: 80 e0 ldi r24, 0x00 ; 0 + 44c: 80 93 43 3f sts 0x3F43, r24 ; 0x803f43 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 450: 81 e0 ldi r24, 0x01 ; 1 + 452: 90 e0 ldi r25, 0x00 ; 0 + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; + break; + + case CM_MSGSYNC_STATE_3: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; + break; + 454: 08 95 ret + + case CM_MSGSYNC_STATE_4: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; + 456: f0 e0 ldi r31, 0x00 ; 0 + 458: ee 53 subi r30, 0x3E ; 62 + 45a: f1 47 sbci r31, 0x71 ; 113 + 45c: 90 81 ld r25, Z + 45e: 89 13 cpse r24, r25 + 460: 02 c0 rjmp .+4 ; 0x466 <__LOCK_REGION_LENGTH__+0x66> + 462: 84 e0 ldi r24, 0x04 ; 4 + 464: 01 c0 rjmp .+2 ; 0x468 <__LOCK_REGION_LENGTH__+0x68> + 466: 80 e0 ldi r24, 0x00 ; 0 + 468: 80 93 43 3f sts 0x3F43, r24 ; 0x803f43 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 46c: 81 e0 ldi r24, 0x01 ; 1 + 46e: 90 e0 ldi r25, 0x00 ; 0 + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; + break; + + case CM_MSGSYNC_STATE_4: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; + break; + 470: 08 95 ret + + case CM_MSGSYNC_STATE_5: + state = CM_MSGSYNC_STATE_INIT; + 472: 10 92 43 3f sts 0x3F43, r1 ; 0x803f43 + return 0; + 476: 80 e0 ldi r24, 0x00 ; 0 + 478: 90 e0 ldi r25, 0x00 ; 0 + 47a: 08 95 ret + break; + + default: + state = CM_MSGSYNC_STATE_INIT; + 47c: 10 92 43 3f sts 0x3F43, r1 ; 0x803f43 + break; + } + + return 1; + 480: 81 e0 ldi r24, 0x01 ; 1 + 482: 90 e0 ldi r25, 0x00 ; 0 + + +} + 484: 08 95 ret + +00000486 : + + static cm_msg_decode_states_t state = CM_MSG_WAIT_FOR_STARTCODE; + static cm_data_msg_t msg; + static uint8_t data_bytes_idx = 0; + + switch (state) + 486: 90 91 42 3f lds r25, 0x3F42 ; 0x803f42 + 48a: 93 30 cpi r25, 0x03 ; 3 + 48c: d1 f0 breq .+52 ; 0x4c2 + 48e: 28 f4 brcc .+10 ; 0x49a + 490: 99 23 and r25, r25 + 492: 41 f0 breq .+16 ; 0x4a4 + 494: 91 30 cpi r25, 0x01 ; 1 + 496: 79 f0 breq .+30 ; 0x4b6 + 498: 47 c0 rjmp .+142 ; 0x528 + 49a: 94 30 cpi r25, 0x04 ; 4 + 49c: d1 f0 breq .+52 ; 0x4d2 + 49e: 95 30 cpi r25, 0x05 ; 5 + 4a0: 29 f1 breq .+74 ; 0x4ec + 4a2: 42 c0 rjmp .+132 ; 0x528 + { + case CM_MSG_WAIT_FOR_STARTCODE: + if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; + 4a4: a1 df rcall .-190 ; 0x3e8 + 4a6: 89 2b or r24, r25 + 4a8: 19 f4 brne .+6 ; 0x4b0 + 4aa: 81 e0 ldi r24, 0x01 ; 1 + 4ac: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + data_bytes_idx = 0; + 4b0: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + break; + 4b4: 39 c0 rjmp .+114 ; 0x528 + + case CM_MSG_DECODE_STATE_GET_SIZE_BYTE: + msg.msg_data_size = rx_byte; + 4b6: 80 93 0a 3f sts 0x3F0A, r24 ; 0x803f0a + state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; + 4ba: 83 e0 ldi r24, 0x03 ; 3 + 4bc: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + + break; + 4c0: 33 c0 rjmp .+102 ; 0x528 + + case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: + msg.msg_data_crc = (rx_byte << 8) & 0xff00; + 4c2: ea e0 ldi r30, 0x0A ; 10 + 4c4: ff e3 ldi r31, 0x3F ; 63 + 4c6: 11 82 std Z+1, r1 ; 0x01 + 4c8: 82 83 std Z+2, r24 ; 0x02 + state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; + 4ca: 84 e0 ldi r24, 0x04 ; 4 + 4cc: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + break; + 4d0: 2b c0 rjmp .+86 ; 0x528 + + case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: + msg.msg_data_crc |= rx_byte & 0xff; + 4d2: ea e0 ldi r30, 0x0A ; 10 + 4d4: ff e3 ldi r31, 0x3F ; 63 + 4d6: 21 81 ldd r18, Z+1 ; 0x01 + 4d8: 32 81 ldd r19, Z+2 ; 0x02 + 4da: a9 01 movw r20, r18 + 4dc: 48 2b or r20, r24 + 4de: ca 01 movw r24, r20 + 4e0: 81 83 std Z+1, r24 ; 0x01 + 4e2: 92 83 std Z+2, r25 ; 0x02 + state = CM_MSG_DECODE_STATE_GET_DATA; + 4e4: 85 e0 ldi r24, 0x05 ; 5 + 4e6: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + break; + 4ea: 1e c0 rjmp .+60 ; 0x528 + + case CM_MSG_DECODE_STATE_GET_DATA: + msg.msg_data[data_bytes_idx] = rx_byte; + 4ec: 90 91 41 3f lds r25, 0x3F41 ; 0x803f41 + 4f0: e9 2f mov r30, r25 + 4f2: f0 e0 ldi r31, 0x00 ; 0 + 4f4: e6 5f subi r30, 0xF6 ; 246 + 4f6: f0 4c sbci r31, 0xC0 ; 192 + 4f8: 83 83 std Z+3, r24 ; 0x03 + data_bytes_idx++; + 4fa: 81 e0 ldi r24, 0x01 ; 1 + 4fc: 89 0f add r24, r25 + 4fe: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + if(data_bytes_idx >= msg.msg_data_size){ + 502: 90 91 0a 3f lds r25, 0x3F0A ; 0x803f0a + 506: 89 17 cp r24, r25 + 508: 78 f0 brcs .+30 ; 0x528 + // calculate CRC.. + + // Run function pointer msg evt.. + s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); + 50a: e0 91 46 3f lds r30, 0x3F46 ; 0x803f46 + 50e: f0 91 47 3f lds r31, 0x3F47 ; 0x803f47 + 512: 6d e0 ldi r22, 0x0D ; 13 + 514: 7f e3 ldi r23, 0x3F ; 63 + 516: 80 91 44 3f lds r24, 0x3F44 ; 0x803f44 + 51a: 90 91 45 3f lds r25, 0x3F45 ; 0x803f45 + 51e: 09 95 icall + state = CM_MSG_WAIT_FOR_STARTCODE; + 520: 10 92 42 3f sts 0x3F42, r1 ; 0x803f42 + data_bytes_idx = 0; + 524: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + + } + break; + } + return 0; +} + 528: 80 e0 ldi r24, 0x00 ; 0 + 52a: 90 e0 ldi r25, 0x00 ; 0 + 52c: 08 95 ret + +0000052e : + +void cm_MsgCompleteEvt_Register(void *msg_cmplete_evt_inst, Get_msgComplete_Event_fpt msg_cmplete_evt_fp){ + + if((msg_cmplete_evt_inst == NULL) || (msg_cmplete_evt_fp == NULL))return; + 52e: 00 97 sbiw r24, 0x00 ; 0 + 530: 59 f0 breq .+22 ; 0x548 + 532: 61 15 cp r22, r1 + 534: 71 05 cpc r23, r1 + 536: 41 f0 breq .+16 ; 0x548 + + s_msg_cmplete_evt_inst = msg_cmplete_evt_inst; + 538: 80 93 44 3f sts 0x3F44, r24 ; 0x803f44 + 53c: 90 93 45 3f sts 0x3F45, r25 ; 0x803f45 + s_msg_cmplete_evt_fpt = msg_cmplete_evt_fp; + 540: 60 93 46 3f sts 0x3F46, r22 ; 0x803f46 + 544: 70 93 47 3f sts 0x3F47, r23 ; 0x803f47 + 548: 08 95 ret + +0000054a : + storno_pll_param_msg temp_msg; + uint8_t *msg_ptr = (void*)&temp_msg; + +static uint8_t isStructValid(storno_xtal_app_t *inst){ + + if(inst->si5351_dev == NULL) return 1; + 54a: fc 01 movw r30, r24 + 54c: 22 81 ldd r18, Z+2 ; 0x02 + 54e: 33 81 ldd r19, Z+3 ; 0x03 + 550: 23 2b or r18, r19 + 552: 21 f0 breq .+8 ; 0x55c + if(inst == NULL)return 1; + 554: 89 2b or r24, r25 + 556: 21 f4 brne .+8 ; 0x560 + 558: 81 e0 ldi r24, 0x01 ; 1 + 55a: 08 95 ret + storno_pll_param_msg temp_msg; + uint8_t *msg_ptr = (void*)&temp_msg; + +static uint8_t isStructValid(storno_xtal_app_t *inst){ + + if(inst->si5351_dev == NULL) return 1; + 55c: 81 e0 ldi r24, 0x01 ; 1 + 55e: 08 95 ret + if(inst == NULL)return 1; + + return 0; + 560: 80 e0 ldi r24, 0x00 ; 0 +} + 562: 08 95 ret + +00000564 : + } + + +} + +static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ + 564: 9f 92 push r9 + 566: af 92 push r10 + 568: bf 92 push r11 + 56a: cf 92 push r12 + 56c: df 92 push r13 + 56e: ef 92 push r14 + 570: ff 92 push r15 + 572: 0f 93 push r16 + 574: 1f 93 push r17 + 576: cf 93 push r28 + 578: df 93 push r29 + 57a: ec 01 movw r28, r24 + 57c: 94 2e mov r9, r20 + + cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_ptr->MSNx_P1, inst->pll_param_ptr->MSNx_P2, inst->pll_param_ptr->MSNx_P3); + 57e: ec 81 ldd r30, Y+4 ; 0x04 + 580: fd 81 ldd r31, Y+5 ; 0x05 + 582: a1 84 ldd r10, Z+9 ; 0x09 + 584: b2 84 ldd r11, Z+10 ; 0x0a + 586: c3 84 ldd r12, Z+11 ; 0x0b + 588: d4 84 ldd r13, Z+12 ; 0x0c + 58a: e5 80 ldd r14, Z+5 ; 0x05 + 58c: f6 80 ldd r15, Z+6 ; 0x06 + 58e: 07 81 ldd r16, Z+7 ; 0x07 + 590: 10 85 ldd r17, Z+8 ; 0x08 + 592: 21 81 ldd r18, Z+1 ; 0x01 + 594: 32 81 ldd r19, Z+2 ; 0x02 + 596: 43 81 ldd r20, Z+3 ; 0x03 + 598: 54 81 ldd r21, Z+4 ; 0x04 + 59a: 8a 81 ldd r24, Y+2 ; 0x02 + 59c: 9b 81 ldd r25, Y+3 ; 0x03 + 59e: 4a d2 rcall .+1172 ; 0xa34 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 114: 2a e6 ldi r18, 0x6A ; 106 - 116: 84 e0 ldi r24, 0x04 ; 4 - 118: 91 e0 ldi r25, 0x01 ; 1 - 11a: 21 50 subi r18, 0x01 ; 1 - 11c: 80 40 sbci r24, 0x00 ; 0 - 11e: 90 40 sbci r25, 0x00 ; 0 - 120: e1 f7 brne .-8 ; 0x11a - 122: 00 c0 rjmp .+0 ; 0x124 + 5a0: 81 e4 ldi r24, 0x41 ; 65 + 5a2: 93 e0 ldi r25, 0x03 ; 3 + 5a4: 01 97 sbiw r24, 0x01 ; 1 + 5a6: f1 f7 brne .-4 ; 0x5a4 + 5a8: 00 00 nop + _delay_ms(1); + cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_ptr->MSx_P1, inst->pll_param_ptr->MSx_P2, inst->pll_param_ptr->MSx_P3); + 5aa: ec 81 ldd r30, Y+4 ; 0x04 + 5ac: fd 81 ldd r31, Y+5 ; 0x05 + 5ae: a5 88 ldd r10, Z+21 ; 0x15 + 5b0: b6 88 ldd r11, Z+22 ; 0x16 + 5b2: c7 88 ldd r12, Z+23 ; 0x17 + 5b4: d0 8c ldd r13, Z+24 ; 0x18 + 5b6: e1 88 ldd r14, Z+17 ; 0x11 + 5b8: f2 88 ldd r15, Z+18 ; 0x12 + 5ba: 03 89 ldd r16, Z+19 ; 0x13 + 5bc: 14 89 ldd r17, Z+20 ; 0x14 + 5be: 25 85 ldd r18, Z+13 ; 0x0d + 5c0: 36 85 ldd r19, Z+14 ; 0x0e + 5c2: 47 85 ldd r20, Z+15 ; 0x0f + 5c4: 50 89 ldd r21, Z+16 ; 0x10 + 5c6: 69 2d mov r22, r9 + 5c8: 8a 81 ldd r24, Y+2 ; 0x02 + 5ca: 9b 81 ldd r25, Y+3 ; 0x03 + 5cc: 3c d1 rcall .+632 ; 0x846 + 5ce: 81 e4 ldi r24, 0x41 ; 65 + 5d0: 93 e0 ldi r25, 0x03 ; 3 + 5d2: 01 97 sbiw r24, 0x01 ; 1 + 5d4: f1 f7 brne .-4 ; 0x5d2 + 5d6: 00 00 nop + _delay_ms(1); + cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); + 5d8: 40 e0 ldi r20, 0x00 ; 0 + 5da: 69 2d mov r22, r9 + 5dc: 8a 81 ldd r24, Y+2 ; 0x02 + 5de: 9b 81 ldd r25, Y+3 ; 0x03 + 5e0: b8 d1 rcall .+880 ; 0x952 - _delay_ms(100); - cm_EEPROM_write(0x00,data_set,1); - 124: 41 e0 ldi r20, 0x01 ; 1 - 126: 60 e0 ldi r22, 0x00 ; 0 - 128: 7f e3 ldi r23, 0x3F ; 63 - 12a: 80 e0 ldi r24, 0x00 ; 0 - 12c: 90 e0 ldi r25, 0x00 ; 0 - 12e: 9e df rcall .-196 ; 0x6c +} + 5e2: df 91 pop r29 + 5e4: cf 91 pop r28 + 5e6: 1f 91 pop r17 + 5e8: 0f 91 pop r16 + 5ea: ff 90 pop r15 + 5ec: ef 90 pop r14 + 5ee: df 90 pop r13 + 5f0: cf 90 pop r12 + 5f2: bf 90 pop r11 + 5f4: af 90 pop r10 + 5f6: 9f 90 pop r9 + 5f8: 08 95 ret + +000005fa : + +static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ + 5fa: cf 93 push r28 + 5fc: df 93 push r29 + 5fe: ec 01 movw r28, r24 + + cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); + 600: 60 e0 ldi r22, 0x00 ; 0 + 602: 8a 81 ldd r24, Y+2 ; 0x02 + 604: 9b 81 ldd r25, Y+3 ; 0x03 + 606: d3 d1 rcall .+934 ; 0x9ae + 608: 81 e4 ldi r24, 0x41 ; 65 + 60a: 93 e0 ldi r25, 0x03 ; 3 + 60c: 01 97 sbiw r24, 0x01 ; 1 + 60e: f1 f7 brne .-4 ; 0x60c + 610: 00 00 nop + _delay_ms(1); + + inst->pll_param_ptr = &temp_msg; + 612: 88 e4 ldi r24, 0x48 ; 72 + 614: 9f e3 ldi r25, 0x3F ; 63 + 616: 8c 83 std Y+4, r24 ; 0x04 + 618: 9d 83 std Y+5, r25 ; 0x05 + cm_EEPROM_read(PLLA_SETTINGS_EEPROM_ADDR,msg_ptr,sizeof(storno_pll_param_msg)); + 61a: 60 91 06 3f lds r22, 0x3F06 ; 0x803f06 + 61e: 70 91 07 3f lds r23, 0x3F07 ; 0x803f07 + 622: 49 e1 ldi r20, 0x19 ; 25 + 624: 80 e0 ldi r24, 0x00 ; 0 + 626: 90 e0 ldi r25, 0x00 ; 0 + 628: 3f dd rcall .-1410 ; 0xa8 + + cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); + 62a: 40 e0 ldi r20, 0x00 ; 0 + 62c: 60 e0 ldi r22, 0x00 ; 0 + 62e: ce 01 movw r24, r28 + 630: 99 df rcall .-206 ; 0x564 + cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_CLK_POWER_UP); + 632: 40 e0 ldi r20, 0x00 ; 0 + 634: 60 e0 ldi r22, 0x00 ; 0 + 636: 8a 81 ldd r24, Y+2 ; 0x02 + 638: 9b 81 ldd r25, Y+3 ; 0x03 + 63a: 8b d1 rcall .+790 ; 0x952 + 63c: 81 e4 ldi r24, 0x41 ; 65 + 63e: 93 e0 ldi r25, 0x03 ; 3 + 640: 01 97 sbiw r24, 0x01 ; 1 + 642: f1 f7 brne .-4 ; 0x640 + 644: 00 00 nop + //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); + + //inst->pll_param_ptr = NULL; + + +} + 646: df 91 pop r29 + 648: cf 91 pop r28 + 64a: 08 95 ret + +0000064c : + if(inst == NULL)return 1; + + return 0; +} + +static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ + 64c: cf 93 push r28 + 64e: df 93 push r29 + 650: ec 01 movw r28, r24 + + // Check Struct + if(isStructValid(inst) != 0)return; + 652: 7b df rcall .-266 ; 0x54a + 654: 81 11 cpse r24, r1 + 656: 32 c0 rjmp .+100 ; 0x6bc + + // We will only do this once, aka when transisioning from RX to TX and TX to RX.. + if(inst->state_next == inst->state_now)return; + 658: 89 81 ldd r24, Y+1 ; 0x01 + 65a: 98 81 ld r25, Y + 65c: 89 17 cp r24, r25 + 65e: 71 f1 breq .+92 ; 0x6bc + + switch(inst->state_next){ + 660: 81 30 cpi r24, 0x01 ; 1 + 662: 19 f0 breq .+6 ; 0x66a + 664: 82 30 cpi r24, 0x02 ; 2 + 666: b1 f0 breq .+44 ; 0x694 + 668: 29 c0 rjmp .+82 ; 0x6bc + 66a: 81 e4 ldi r24, 0x41 ; 65 + 66c: 93 e0 ldi r25, 0x03 ; 3 + 66e: 01 97 sbiw r24, 0x01 ; 1 + 670: f1 f7 brne .-4 ; 0x66e + 672: 00 00 nop + + case STORNO_APP_RX_MODE: + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX + 674: 40 e0 ldi r20, 0x00 ; 0 + 676: 60 e0 ldi r22, 0x00 ; 0 + 678: 8a 81 ldd r24, Y+2 ; 0x02 + 67a: 9b 81 ldd r25, Y+3 ; 0x03 + 67c: 4a d1 rcall .+660 ; 0x912 + 67e: 81 e4 ldi r24, 0x41 ; 65 + 680: 93 e0 ldi r25, 0x03 ; 3 + 682: 01 97 sbiw r24, 0x01 ; 1 + 684: f1 f7 brne .-4 ; 0x682 + 686: 00 00 nop + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX + 688: 41 e0 ldi r20, 0x01 ; 1 + 68a: 61 e0 ldi r22, 0x01 ; 1 + 68c: 8a 81 ldd r24, Y+2 ; 0x02 + 68e: 9b 81 ldd r25, Y+3 ; 0x03 + 690: 40 d1 rcall .+640 ; 0x912 + + break; + 692: 14 c0 rjmp .+40 ; 0x6bc + 694: 81 e4 ldi r24, 0x41 ; 65 + 696: 93 e0 ldi r25, 0x03 ; 3 + 698: 01 97 sbiw r24, 0x01 ; 1 + 69a: f1 f7 brne .-4 ; 0x698 + 69c: 00 00 nop + + case STORNO_APP_TX_MODE: + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX + 69e: 41 e0 ldi r20, 0x01 ; 1 + 6a0: 60 e0 ldi r22, 0x00 ; 0 + 6a2: 8a 81 ldd r24, Y+2 ; 0x02 + 6a4: 9b 81 ldd r25, Y+3 ; 0x03 + 6a6: 35 d1 rcall .+618 ; 0x912 + 6a8: 81 e4 ldi r24, 0x41 ; 65 + 6aa: 93 e0 ldi r25, 0x03 ; 3 + 6ac: 01 97 sbiw r24, 0x01 ; 1 + 6ae: f1 f7 brne .-4 ; 0x6ac + 6b0: 00 00 nop + _delay_ms(1); + cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX + 6b2: 40 e0 ldi r20, 0x00 ; 0 + 6b4: 61 e0 ldi r22, 0x01 ; 1 + 6b6: 8a 81 ldd r24, Y+2 ; 0x02 + 6b8: 9b 81 ldd r25, Y+3 ; 0x03 + 6ba: 2b d1 rcall .+598 ; 0x912 + break; + + } + + +} + 6bc: df 91 pop r29 + 6be: cf 91 pop r28 + 6c0: 08 95 ret + +000006c2 : + //inst->pll_param_ptr = NULL; + + +} + +void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ + 6c2: cf 93 push r28 + 6c4: df 93 push r29 + 6c6: ec 01 movw r28, r24 + + // Check Struct + if(isStructValid(inst) != 0)return; + 6c8: 40 df rcall .-384 ; 0x54a + 6ca: 81 11 cpse r24, r1 + 6cc: 24 c0 rjmp .+72 ; 0x716 + + switch (inst->state_next) + 6ce: 89 81 ldd r24, Y+1 ; 0x01 + 6d0: 81 30 cpi r24, 0x01 ; 1 + 6d2: 51 f0 breq .+20 ; 0x6e8 + 6d4: 18 f0 brcs .+6 ; 0x6dc + 6d6: 82 30 cpi r24, 0x02 ; 2 + 6d8: 99 f0 breq .+38 ; 0x700 + 6da: 1d c0 rjmp .+58 ; 0x716 + { + case STORNO_APP_PROGRAM_OSC: + // Read PLL parameters from EEPROM and Program PLL values here: + inst->state_now = inst->state_next; + 6dc: 88 83 st Y, r24 + + cqm6xx_app_loadPLLParam(inst); + 6de: ce 01 movw r24, r28 + 6e0: 8c df rcall .-232 ; 0x5fa + + + // if ok, then go to RX mode: + inst->state_next = STORNO_APP_RX_MODE; + 6e2: 81 e0 ldi r24, 0x01 ; 1 + 6e4: 89 83 std Y+1, r24 ; 0x01 + break; + 6e6: 17 c0 rjmp .+46 ; 0x716 + + + case STORNO_APP_RX_MODE: + // If we just came from another state, then Enable RX osc here.. + cqm6xx_app_updateOsc(inst); + 6e8: ce 01 movw r24, r28 + 6ea: b0 df rcall .-160 ; 0x64c + + // Update state now.. + inst->state_now = inst->state_next; + 6ec: 89 81 ldd r24, Y+1 ; 0x01 + 6ee: 88 83 st Y, r24 + + + // If PTT is hold, then disable RX osc, and go to STORNO_APP_TX_MODE, to enable tx osc. + if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_SET) inst->state_next = STORNO_APP_TX_MODE; + 6f0: 63 e0 ldi r22, 0x03 ; 3 + 6f2: 80 e0 ldi r24, 0x00 ; 0 + 6f4: fc dc rcall .-1544 ; 0xee + 6f6: 01 97 sbiw r24, 0x01 ; 1 + 6f8: 71 f4 brne .+28 ; 0x716 + 6fa: 82 e0 ldi r24, 0x02 ; 2 + 6fc: 89 83 std Y+1, r24 ; 0x01 + 6fe: 0b c0 rjmp .+22 ; 0x716 + + break; + + case STORNO_APP_TX_MODE: + // If we just came from another state, then Enable TX osc here.. + cqm6xx_app_updateOsc(inst); + 700: ce 01 movw r24, r28 + 702: a4 df rcall .-184 ; 0x64c + + // Update state now.. + inst->state_now = inst->state_next; + 704: 89 81 ldd r24, Y+1 ; 0x01 + 706: 88 83 st Y, r24 + + // If PTT is released, then disable TX osc, and go to STORNO_APP_RX_MODE, to enable rx osc. + if(gpio_get_level(GPIO_PORTA,GPIO_PIN_PTT) == GPIO_LEVEL_RESET) inst->state_next = STORNO_APP_RX_MODE; + 708: 63 e0 ldi r22, 0x03 ; 3 + 70a: 80 e0 ldi r24, 0x00 ; 0 + 70c: f0 dc rcall .-1568 ; 0xee + 70e: 89 2b or r24, r25 + 710: 11 f4 brne .+4 ; 0x716 + 712: 81 e0 ldi r24, 0x01 ; 1 + 714: 89 83 std Y+1, r24 ; 0x01 + default: + break; + } + + +} + 716: df 91 pop r29 + 718: cf 91 pop r28 + 71a: 08 95 ret + +0000071c : + +void programPLL_Parameters(storno_xtal_app_t *inst){ + + //Burn settings into eeprom here: + switch(inst->pll_param_ptr->PLL_Ident){ + 71c: fc 01 movw r30, r24 + 71e: 64 81 ldd r22, Z+4 ; 0x04 + 720: 75 81 ldd r23, Z+5 ; 0x05 + 722: fb 01 movw r30, r22 + 724: 80 81 ld r24, Z + 726: 88 23 and r24, r24 + 728: 19 f0 breq .+6 ; 0x730 + 72a: 81 30 cpi r24, 0x01 ; 1 + 72c: 31 f0 breq .+12 ; 0x73a + 72e: 08 95 ret + + case MSG_PLLA_PARAM: + cm_EEPROM_write(PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); + 730: 49 e1 ldi r20, 0x19 ; 25 + 732: 80 e0 ldi r24, 0x00 ; 0 + 734: 90 e0 ldi r25, 0x00 ; 0 + 736: 9a dc rcall .-1740 ; 0x6c + break; + 738: 08 95 ret + + case MSG_PLLB_PARAM: + cm_EEPROM_write(PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); + 73a: 49 e1 ldi r20, 0x19 ; 25 + 73c: 80 e2 ldi r24, 0x20 ; 32 + 73e: 90 e0 ldi r25, 0x00 ; 0 + 740: 95 dc rcall .-1750 ; 0x6c + 742: 08 95 ret + +00000744 : + +} + +int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ + + inst->pll_param_ptr = rxData; + 744: fc 01 movw r30, r24 + 746: 64 83 std Z+4, r22 ; 0x04 + 748: 75 83 std Z+5, r23 ; 0x05 + + programPLL_Parameters(inst); + 74a: e8 df rcall .-48 ; 0x71c + + return 0; + +} + 74c: 80 e0 ldi r24, 0x00 ; 0 + 74e: 90 e0 ldi r25, 0x00 ; 0 + 750: 08 95 ret + +00000752 : + +void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ + 752: cf 93 push r28 + 754: df 93 push r29 + + if(si5351_dev == NULL) return; + 756: 61 15 cp r22, r1 + 758: 71 05 cpc r23, r1 + 75a: 71 f0 breq .+28 ; 0x778 + if(inst == NULL)return; + 75c: 00 97 sbiw r24, 0x00 ; 0 + 75e: 61 f0 breq .+24 ; 0x778 + 760: ec 01 movw r28, r24 + + inst->state_next = STORNO_APP_PROGRAM_OSC; + 762: 19 82 std Y+1, r1 ; 0x01 + inst->state_now = STORNO_APP_PROGRAM_OSC; + 764: 18 82 st Y, r1 + + inst->si5351_dev = si5351_dev; + 766: 6a 83 std Y+2, r22 ; 0x02 + 768: 7b 83 std Y+3, r23 ; 0x03 + + //cm_uart_init(inst,(get_UART_Event_fpt)uart_rx_event); + cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); + 76a: 62 ea ldi r22, 0xA2 ; 162 + 76c: 73 e0 ldi r23, 0x03 ; 3 + 76e: df de rcall .-578 ; 0x52e + cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); + 770: 63 e4 ldi r22, 0x43 ; 67 + 772: 72 e0 ldi r23, 0x02 ; 2 + 774: ce 01 movw r24, r28 + 776: 08 de rcall .-1008 ; 0x388 + + 778: df 91 pop r29 + 77a: cf 91 pop r28 + 77c: 08 95 ret + +0000077e
: + uint8_t data_set[25] = {0x55,56}; + //cm_EEPROM_write(0x00,data_set,1); + uint8_t data[25] = {0}; + +int main(void) +{ + 77e: cf 93 push r28 + 780: df 93 push r29 + 782: cd b7 in r28, 0x3d ; 61 + 784: de b7 in r29, 0x3e ; 62 + 786: cb 55 subi r28, 0x5B ; 91 + 788: d1 09 sbc r29, r1 + 78a: cd bf out 0x3d, r28 ; 61 + 78c: de bf out 0x3e, r29 ; 62 + /* Replace with your application code */ + + // Init Periphials + cm_i2c_init(NULL); + 78e: 80 e0 ldi r24, 0x00 ; 0 + 790: 90 e0 ldi r25, 0x00 ; 0 + 792: 7d dd rcall .-1286 ; 0x28e + + // Add devices + cm_i2c_device_t si5351_i2c; + cm_i2c_addDev(&si5351_i2c,NULL,0x60); + 794: 40 e6 ldi r20, 0x60 ; 96 + 796: 60 e0 ldi r22, 0x00 ; 0 + 798: 70 e0 ldi r23, 0x00 ; 0 + 79a: ce 01 movw r24, r28 + 79c: 01 96 adiw r24, 0x01 ; 1 + 79e: 91 dd rcall .-1246 ; 0x2c2 + + // Init Devices: + si5351_driver si5351_dev; + cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); + 7a0: 4f e7 ldi r20, 0x7F ; 127 + 7a2: 51 e0 ldi r21, 0x01 ; 1 + 7a4: be 01 movw r22, r28 + 7a6: 6f 5f subi r22, 0xFF ; 255 + 7a8: 7f 4f sbci r23, 0xFF ; 255 + 7aa: ce 01 movw r24, r28 + 7ac: 04 96 adiw r24, 0x04 ; 4 + 7ae: a0 d1 rcall .+832 ; 0xaf0 + + cqm6xx_app_init(&storno_xtal_app, &si5351_dev); + 7b0: be 01 movw r22, r28 + 7b2: 6c 5f subi r22, 0xFC ; 252 + 7b4: 7f 4f sbci r23, 0xFF ; 255 + 7b6: 81 e6 ldi r24, 0x61 ; 97 + 7b8: 9f e3 ldi r25, 0x3F ; 63 + 7ba: cb df rcall .-106 ; 0x752 + while (1) { - //cqm6xx_app_statemachine(&storno_xtal_app); - if(PORTA.IN == 0x0d){ - 130: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> - 134: 8d 30 cpi r24, 0x0D ; 13 - 136: 59 f4 brne .+22 ; 0x14e - - static volatile uint8_t counter = 0; - - counter++; - 138: 80 91 1c 3f lds r24, 0x3F1C ; 0x803f1c - 13c: 8f 5f subi r24, 0xFF ; 255 - 13e: 80 93 1c 3f sts 0x3F1C, r24 ; 0x803f1c - - if (counter >= 50) - 142: 80 91 1c 3f lds r24, 0x3F1C ; 0x803f1c - 146: 82 33 cpi r24, 0x32 ; 50 - 148: 10 f0 brcs .+4 ; 0x14e - { - counter = 0; - 14a: 10 92 1c 3f sts 0x3F1C, r1 ; 0x803f1c - 14e: 2a e6 ldi r18, 0x6A ; 106 - 150: 84 e0 ldi r24, 0x04 ; 4 - 152: 91 e0 ldi r25, 0x01 ; 1 - 154: 21 50 subi r18, 0x01 ; 1 - 156: 80 40 sbci r24, 0x00 ; 0 - 158: 90 40 sbci r25, 0x00 ; 0 - 15a: e1 f7 brne .-8 ; 0x154 - 15c: 00 c0 rjmp .+0 ; 0x15e - 15e: e8 cf rjmp .-48 ; 0x130 + cqm6xx_app_statemachine(&storno_xtal_app); + 7bc: 81 e6 ldi r24, 0x61 ; 97 + 7be: 9f e3 ldi r25, 0x3F ; 63 + 7c0: 80 df rcall .-256 ; 0x6c2 + 7c2: 2a e6 ldi r18, 0x6A ; 106 + 7c4: 84 e0 ldi r24, 0x04 ; 4 + 7c6: 91 e0 ldi r25, 0x01 ; 1 + 7c8: 21 50 subi r18, 0x01 ; 1 + 7ca: 80 40 sbci r24, 0x00 ; 0 + 7cc: 90 40 sbci r25, 0x00 ; 0 + 7ce: e1 f7 brne .-8 ; 0x7c8 + 7d0: 00 c0 rjmp .+0 ; 0x7d2 + 7d2: f4 cf rjmp .-24 ; 0x7bc -00000160 : - 160: 03 d0 rcall .+6 ; 0x168 - 162: 80 81 ld r24, Z - 164: 99 27 eor r25, r25 - 166: 08 95 ret +000007d4 : -00000168 : - 168: fc 01 movw r30, r24 - 16a: e0 50 subi r30, 0x00 ; 0 - 16c: fc 4e sbci r31, 0xEC ; 236 - 16e: 08 95 ret + // Read Device Status register: + readRegister(inst,0x00, (uint8_t *) &inst->device_data.deviceStatus, sizeof(si5351_deviceStat_t)); -00000170 : - 170: 26 2f mov r18, r22 + return inst->device_data.deviceStatus.REVID; +} + 7d4: 8f 92 push r8 + 7d6: 9f 92 push r9 + 7d8: af 92 push r10 + 7da: bf 92 push r11 + 7dc: cf 92 push r12 + 7de: df 92 push r13 + 7e0: ef 92 push r14 + 7e2: ff 92 push r15 + 7e4: 0f 93 push r16 + 7e6: 1f 93 push r17 + 7e8: cf 93 push r28 + 7ea: df 93 push r29 + 7ec: ec 01 movw r28, r24 + 7ee: 86 2e mov r8, r22 + 7f0: 5a 01 movw r10, r20 + 7f2: 68 01 movw r12, r16 + 7f4: 79 01 movw r14, r18 + 7f6: c8 01 movw r24, r16 + 7f8: 01 96 adiw r24, 0x01 ; 1 + 7fa: 1b d2 rcall .+1078 ; 0xc32 + 7fc: 98 2e mov r9, r24 + 7fe: 19 2f mov r17, r25 + 800: fc 01 movw r30, r24 + 802: 81 92 st Z+, r8 + 804: cf 01 movw r24, r30 + 806: a6 01 movw r20, r12 + 808: b5 01 movw r22, r10 + 80a: 34 d3 rcall .+1640 ; 0xe74 + 80c: ea 81 ldd r30, Y+2 ; 0x02 + 80e: fb 81 ldd r31, Y+3 ; 0x03 + 810: a7 01 movw r20, r14 + 812: 96 01 movw r18, r12 + 814: 2f 5f subi r18, 0xFF ; 255 + 816: 3f 4f sbci r19, 0xFF ; 255 + 818: 4f 4f sbci r20, 0xFF ; 255 + 81a: 5f 4f sbci r21, 0xFF ; 255 + 81c: 01 e0 ldi r16, 0x01 ; 1 + 81e: 69 2d mov r22, r9 + 820: 71 2f mov r23, r17 + 822: 88 81 ld r24, Y + 824: 99 81 ldd r25, Y+1 ; 0x01 + 826: 09 95 icall + 828: 80 e0 ldi r24, 0x00 ; 0 + 82a: 90 e0 ldi r25, 0x00 ; 0 + 82c: df 91 pop r29 + 82e: cf 91 pop r28 + 830: 1f 91 pop r17 + 832: 0f 91 pop r16 + 834: ff 90 pop r15 + 836: ef 90 pop r14 + 838: df 90 pop r13 + 83a: cf 90 pop r12 + 83c: bf 90 pop r11 + 83e: af 90 pop r10 + 840: 9f 90 pop r9 + 842: 8f 90 pop r8 + 844: 08 95 ret -00000172 : - 172: af 93 push r26 - 174: bf 93 push r27 - 176: e0 e0 ldi r30, 0x00 ; 0 - 178: f0 e1 ldi r31, 0x10 ; 16 - 17a: 32 81 ldd r19, Z+2 ; 0x02 - 17c: 31 fd sbrc r19, 1 - 17e: fd cf rjmp .-6 ; 0x17a - 180: dc 01 movw r26, r24 - 182: a0 50 subi r26, 0x00 ; 0 - 184: bc 4e sbci r27, 0xEC ; 236 - 186: 2c 93 st X, r18 - 188: 2d e9 ldi r18, 0x9D ; 157 - 18a: 24 bf out 0x34, r18 ; 52 - 18c: 23 e0 ldi r18, 0x03 ; 3 - 18e: 20 83 st Z, r18 - 190: 01 96 adiw r24, 0x01 ; 1 - 192: bf 91 pop r27 - 194: af 91 pop r26 - 196: 08 95 ret +00000846 : + 846: af 92 push r10 + 848: bf 92 push r11 + 84a: cf 92 push r12 + 84c: df 92 push r13 + 84e: ef 92 push r14 + 850: ff 92 push r15 + 852: 0f 93 push r16 + 854: 1f 93 push r17 + 856: fc 01 movw r30, r24 + 858: 66 23 and r22, r22 + 85a: 19 f0 breq .+6 ; 0x862 + 85c: 61 30 cpi r22, 0x01 ; 1 + 85e: 41 f1 breq .+80 ; 0x8b0 + 860: 4d c0 rjmp .+154 ; 0x8fc + 862: 43 70 andi r20, 0x03 ; 3 + 864: 86 a1 ldd r24, Z+38 ; 0x26 + 866: 8c 7f andi r24, 0xFC ; 252 + 868: 48 2b or r20, r24 + 86a: 46 a3 std Z+38, r20 ; 0x26 + 86c: 37 a3 std Z+39, r19 ; 0x27 + 86e: 20 a7 std Z+40, r18 ; 0x28 + 870: f2 a6 std Z+42, r15 ; 0x2a + 872: e3 a6 std Z+43, r14 ; 0x2b + 874: d6 01 movw r26, r12 + 876: c5 01 movw r24, r10 + 878: 07 2e mov r0, r23 + 87a: 7c e0 ldi r23, 0x0C ; 12 + 87c: b6 95 lsr r27 + 87e: a7 95 ror r26 + 880: 97 95 ror r25 + 882: 87 95 ror r24 + 884: 7a 95 dec r23 + 886: d1 f7 brne .-12 ; 0x87c + 888: 70 2d mov r23, r0 + 88a: 83 70 andi r24, 0x03 ; 3 + 88c: 82 95 swap r24 + 88e: 80 7f andi r24, 0xF0 ; 240 + 890: 03 70 andi r16, 0x03 ; 3 + 892: 80 2b or r24, r16 + 894: 81 a7 std Z+41, r24 ; 0x29 + 896: b4 a2 std Z+36, r11 ; 0x24 + 898: a5 a2 std Z+37, r10 ; 0x25 + 89a: af 01 movw r20, r30 + 89c: 4c 5d subi r20, 0xDC ; 220 + 89e: 5f 4f sbci r21, 0xFF ; 255 + 8a0: 08 e0 ldi r16, 0x08 ; 8 + 8a2: 10 e0 ldi r17, 0x00 ; 0 + 8a4: 20 e0 ldi r18, 0x00 ; 0 + 8a6: 30 e0 ldi r19, 0x00 ; 0 + 8a8: 6a e2 ldi r22, 0x2A ; 42 + 8aa: cf 01 movw r24, r30 + 8ac: 93 df rcall .-218 ; 0x7d4 + 8ae: 26 c0 rjmp .+76 ; 0x8fc + 8b0: 43 70 andi r20, 0x03 ; 3 + 8b2: 86 a5 ldd r24, Z+46 ; 0x2e + 8b4: 8c 7f andi r24, 0xFC ; 252 + 8b6: 48 2b or r20, r24 + 8b8: 46 a7 std Z+46, r20 ; 0x2e + 8ba: 37 a7 std Z+47, r19 ; 0x2f + 8bc: 20 ab std Z+48, r18 ; 0x30 + 8be: f2 aa std Z+50, r15 ; 0x32 + 8c0: e3 aa std Z+51, r14 ; 0x33 + 8c2: d6 01 movw r26, r12 + 8c4: c5 01 movw r24, r10 + 8c6: 07 2e mov r0, r23 + 8c8: 7c e0 ldi r23, 0x0C ; 12 + 8ca: b6 95 lsr r27 + 8cc: a7 95 ror r26 + 8ce: 97 95 ror r25 + 8d0: 87 95 ror r24 + 8d2: 7a 95 dec r23 + 8d4: d1 f7 brne .-12 ; 0x8ca + 8d6: 70 2d mov r23, r0 + 8d8: 83 70 andi r24, 0x03 ; 3 + 8da: 82 95 swap r24 + 8dc: 80 7f andi r24, 0xF0 ; 240 + 8de: 03 70 andi r16, 0x03 ; 3 + 8e0: 80 2b or r24, r16 + 8e2: 81 ab std Z+49, r24 ; 0x31 + 8e4: b4 a6 std Z+44, r11 ; 0x2c + 8e6: a5 a6 std Z+45, r10 ; 0x2d + 8e8: af 01 movw r20, r30 + 8ea: 44 5d subi r20, 0xD4 ; 212 + 8ec: 5f 4f sbci r21, 0xFF ; 255 + 8ee: 08 e0 ldi r16, 0x08 ; 8 + 8f0: 10 e0 ldi r17, 0x00 ; 0 + 8f2: 20 e0 ldi r18, 0x00 ; 0 + 8f4: 30 e0 ldi r19, 0x00 ; 0 + 8f6: 62 e3 ldi r22, 0x32 ; 50 + 8f8: cf 01 movw r24, r30 + 8fa: 6c df rcall .-296 ; 0x7d4 + 8fc: 80 e0 ldi r24, 0x00 ; 0 + 8fe: 90 e0 ldi r25, 0x00 ; 0 + 900: 1f 91 pop r17 + 902: 0f 91 pop r16 + 904: ff 90 pop r15 + 906: ef 90 pop r14 + 908: df 90 pop r13 + 90a: cf 90 pop r12 + 90c: bf 90 pop r11 + 90e: af 90 pop r10 + 910: 08 95 ret -00000198 <_exit>: - 198: f8 94 cli +00000912 : + 912: 0f 93 push r16 + 914: 1f 93 push r17 + 916: 66 23 and r22, r22 + 918: 19 f0 breq .+6 ; 0x920 + 91a: 61 30 cpi r22, 0x01 ; 1 + 91c: 39 f0 breq .+14 ; 0x92c + 91e: 0b c0 rjmp .+22 ; 0x936 + 920: fc 01 movw r30, r24 + 922: 27 81 ldd r18, Z+7 ; 0x07 + 924: 40 fb bst r20, 0 + 926: 20 f9 bld r18, 0 + 928: 27 83 std Z+7, r18 ; 0x07 + 92a: 05 c0 rjmp .+10 ; 0x936 + 92c: fc 01 movw r30, r24 + 92e: 27 81 ldd r18, Z+7 ; 0x07 + 930: 40 fb bst r20, 0 + 932: 21 f9 bld r18, 1 + 934: 27 83 std Z+7, r18 ; 0x07 + 936: ac 01 movw r20, r24 + 938: 49 5f subi r20, 0xF9 ; 249 + 93a: 5f 4f sbci r21, 0xFF ; 255 + 93c: 01 e0 ldi r16, 0x01 ; 1 + 93e: 10 e0 ldi r17, 0x00 ; 0 + 940: 20 e0 ldi r18, 0x00 ; 0 + 942: 30 e0 ldi r19, 0x00 ; 0 + 944: 63 e0 ldi r22, 0x03 ; 3 + 946: 46 df rcall .-372 ; 0x7d4 + 948: 80 e0 ldi r24, 0x00 ; 0 + 94a: 90 e0 ldi r25, 0x00 ; 0 + 94c: 1f 91 pop r17 + 94e: 0f 91 pop r16 + 950: 08 95 ret -0000019a <__stop_program>: - 19a: ff cf rjmp .-2 ; 0x19a <__stop_program> +00000952 : + 952: 0f 93 push r16 + 954: 1f 93 push r17 + 956: 66 23 and r22, r22 + 958: 19 f0 breq .+6 ; 0x960 + 95a: 61 30 cpi r22, 0x01 ; 1 + 95c: a1 f0 breq .+40 ; 0x986 + 95e: 22 c0 rjmp .+68 ; 0x9a4 + 960: fc 01 movw r30, r24 + 962: 22 85 ldd r18, Z+10 ; 0x0a + 964: 40 fb bst r20, 0 + 966: 27 f9 bld r18, 7 + 968: 33 85 ldd r19, Z+11 ; 0x0b + 96a: 3f 7d andi r19, 0xDF ; 223 + 96c: 33 87 std Z+11, r19 ; 0x0b + 96e: 2f 64 ori r18, 0x4F ; 79 + 970: 22 87 std Z+10, r18 ; 0x0a + 972: ac 01 movw r20, r24 + 974: 46 5f subi r20, 0xF6 ; 246 + 976: 5f 4f sbci r21, 0xFF ; 255 + 978: 01 e0 ldi r16, 0x01 ; 1 + 97a: 10 e0 ldi r17, 0x00 ; 0 + 97c: 20 e0 ldi r18, 0x00 ; 0 + 97e: 30 e0 ldi r19, 0x00 ; 0 + 980: 60 e1 ldi r22, 0x10 ; 16 + 982: 28 df rcall .-432 ; 0x7d4 + 984: 0f c0 rjmp .+30 ; 0x9a4 + 986: fc 01 movw r30, r24 + 988: 23 85 ldd r18, Z+11 ; 0x0b + 98a: 40 fb bst r20, 0 + 98c: 27 f9 bld r18, 7 + 98e: 2f 66 ori r18, 0x6F ; 111 + 990: 23 87 std Z+11, r18 ; 0x0b + 992: ac 01 movw r20, r24 + 994: 45 5f subi r20, 0xF5 ; 245 + 996: 5f 4f sbci r21, 0xFF ; 255 + 998: 01 e0 ldi r16, 0x01 ; 1 + 99a: 10 e0 ldi r17, 0x00 ; 0 + 99c: 20 e0 ldi r18, 0x00 ; 0 + 99e: 30 e0 ldi r19, 0x00 ; 0 + 9a0: 61 e1 ldi r22, 0x11 ; 17 + 9a2: 18 df rcall .-464 ; 0x7d4 + 9a4: 80 e0 ldi r24, 0x00 ; 0 + 9a6: 90 e0 ldi r25, 0x00 ; 0 + 9a8: 1f 91 pop r17 + 9aa: 0f 91 pop r16 + 9ac: 08 95 ret + +000009ae : + 9ae: 0f 93 push r16 + 9b0: 1f 93 push r17 + 9b2: 66 23 and r22, r22 + 9b4: 19 f0 breq .+6 ; 0x9bc + 9b6: 61 30 cpi r22, 0x01 ; 1 + 9b8: 39 f0 breq .+14 ; 0x9c8 + 9ba: 0a c0 rjmp .+20 ; 0x9d0 + 9bc: fc 01 movw r30, r24 + 9be: 21 85 ldd r18, Z+9 ; 0x09 + 9c0: 2b 7f andi r18, 0xFB ; 251 + 9c2: 27 7f andi r18, 0xF7 ; 247 + 9c4: 21 87 std Z+9, r18 ; 0x09 + 9c6: 04 c0 rjmp .+8 ; 0x9d0 + 9c8: fc 01 movw r30, r24 + 9ca: 21 85 ldd r18, Z+9 ; 0x09 + 9cc: 24 60 ori r18, 0x04 ; 4 + 9ce: 21 87 std Z+9, r18 ; 0x09 + 9d0: ac 01 movw r20, r24 + 9d2: 47 5f subi r20, 0xF7 ; 247 + 9d4: 5f 4f sbci r21, 0xFF ; 255 + 9d6: 01 e0 ldi r16, 0x01 ; 1 + 9d8: 10 e0 ldi r17, 0x00 ; 0 + 9da: 20 e0 ldi r18, 0x00 ; 0 + 9dc: 30 e0 ldi r19, 0x00 ; 0 + 9de: 60 ef ldi r22, 0xF0 ; 240 + 9e0: f9 de rcall .-526 ; 0x7d4 + 9e2: 80 e0 ldi r24, 0x00 ; 0 + 9e4: 90 e0 ldi r25, 0x00 ; 0 + 9e6: 1f 91 pop r17 + 9e8: 0f 91 pop r16 + 9ea: 08 95 ret + +000009ec : + 9ec: 0f 93 push r16 + 9ee: 1f 93 push r17 + 9f0: 31 e0 ldi r19, 0x01 ; 1 + 9f2: 61 11 cpse r22, r1 + 9f4: 01 c0 rjmp .+2 ; 0x9f8 + 9f6: 30 e0 ldi r19, 0x00 ; 0 + 9f8: fc 01 movw r30, r24 + 9fa: e9 5a subi r30, 0xA9 ; 169 + 9fc: ff 4f sbci r31, 0xFF ; 255 + 9fe: 20 81 ld r18, Z + a00: 30 fb bst r19, 0 + a02: 25 f9 bld r18, 5 + a04: 20 83 st Z, r18 + a06: 31 e0 ldi r19, 0x01 ; 1 + a08: 41 11 cpse r20, r1 + a0a: 01 c0 rjmp .+2 ; 0xa0e + a0c: 30 e0 ldi r19, 0x00 ; 0 + a0e: ac 01 movw r20, r24 + a10: 49 5a subi r20, 0xA9 ; 169 + a12: 5f 4f sbci r21, 0xFF ; 255 + a14: fa 01 movw r30, r20 + a16: 20 81 ld r18, Z + a18: 30 fb bst r19, 0 + a1a: 27 f9 bld r18, 7 + a1c: 20 83 st Z, r18 + a1e: 01 e0 ldi r16, 0x01 ; 1 + a20: 10 e0 ldi r17, 0x00 ; 0 + a22: 20 e0 ldi r18, 0x00 ; 0 + a24: 30 e0 ldi r19, 0x00 ; 0 + a26: 61 eb ldi r22, 0xB1 ; 177 + a28: d5 de rcall .-598 ; 0x7d4 + a2a: 80 e0 ldi r24, 0x00 ; 0 + a2c: 90 e0 ldi r25, 0x00 ; 0 + a2e: 1f 91 pop r17 + a30: 0f 91 pop r16 + a32: 08 95 ret + +00000a34 : + a34: af 92 push r10 + a36: bf 92 push r11 + a38: cf 92 push r12 + a3a: df 92 push r13 + a3c: ef 92 push r14 + a3e: ff 92 push r15 + a40: 0f 93 push r16 + a42: 1f 93 push r17 + a44: cf 93 push r28 + a46: df 93 push r29 + a48: ec 01 movw r28, r24 + a4a: 66 23 and r22, r22 + a4c: 19 f0 breq .+6 ; 0xa54 + a4e: 61 30 cpi r22, 0x01 ; 1 + a50: 01 f1 breq .+64 ; 0xa92 + a52: 3d c0 rjmp .+122 ; 0xace + a54: 42 70 andi r20, 0x02 ; 2 + a56: 8e 89 ldd r24, Y+22 ; 0x16 + a58: 8c 7f andi r24, 0xFC ; 252 + a5a: 48 2b or r20, r24 + a5c: 4e 8b std Y+22, r20 ; 0x16 + a5e: 3f 8b std Y+23, r19 ; 0x17 + a60: 28 8f std Y+24, r18 ; 0x18 + a62: d8 01 movw r26, r16 + a64: c7 01 movw r24, r14 + a66: 88 27 eor r24, r24 + a68: 99 27 eor r25, r25 + a6a: af 70 andi r26, 0x0F ; 15 + a6c: bb 27 eor r27, r27 + a6e: fa 8e std Y+26, r15 ; 0x1a + a70: eb 8e std Y+27, r14 ; 0x1b + a72: 8a 2f mov r24, r26 + a74: 8f 70 andi r24, 0x0F ; 15 + a76: 89 8f std Y+25, r24 ; 0x19 + a78: bc 8a std Y+20, r11 ; 0x14 + a7a: ad 8a std Y+21, r10 ; 0x15 + a7c: 08 e0 ldi r16, 0x08 ; 8 + a7e: 10 e0 ldi r17, 0x00 ; 0 + a80: 20 e0 ldi r18, 0x00 ; 0 + a82: 30 e0 ldi r19, 0x00 ; 0 + a84: ae 01 movw r20, r28 + a86: 4c 5e subi r20, 0xEC ; 236 + a88: 5f 4f sbci r21, 0xFF ; 255 + a8a: 6a e1 ldi r22, 0x1A ; 26 + a8c: ce 01 movw r24, r28 + a8e: a2 de rcall .-700 ; 0x7d4 + a90: 1e c0 rjmp .+60 ; 0xace + a92: 42 70 andi r20, 0x02 ; 2 + a94: 8e 8d ldd r24, Y+30 ; 0x1e + a96: 8c 7f andi r24, 0xFC ; 252 + a98: 48 2b or r20, r24 + a9a: 4e 8f std Y+30, r20 ; 0x1e + a9c: 3f 8f std Y+31, r19 ; 0x1f + a9e: 28 a3 std Y+32, r18 ; 0x20 + aa0: d8 01 movw r26, r16 + aa2: c7 01 movw r24, r14 + aa4: 88 27 eor r24, r24 + aa6: 99 27 eor r25, r25 + aa8: af 70 andi r26, 0x0F ; 15 + aaa: bb 27 eor r27, r27 + aac: fa a2 std Y+34, r15 ; 0x22 + aae: eb a2 std Y+35, r14 ; 0x23 + ab0: 8a 2f mov r24, r26 + ab2: 8f 70 andi r24, 0x0F ; 15 + ab4: 89 a3 std Y+33, r24 ; 0x21 + ab6: bc 8e std Y+28, r11 ; 0x1c + ab8: ad 8e std Y+29, r10 ; 0x1d + aba: 08 e0 ldi r16, 0x08 ; 8 + abc: 10 e0 ldi r17, 0x00 ; 0 + abe: 20 e0 ldi r18, 0x00 ; 0 + ac0: 30 e0 ldi r19, 0x00 ; 0 + ac2: ae 01 movw r20, r28 + ac4: 44 5e subi r20, 0xE4 ; 228 + ac6: 5f 4f sbci r21, 0xFF ; 255 + ac8: 62 e2 ldi r22, 0x22 ; 34 + aca: ce 01 movw r24, r28 + acc: 83 de rcall .-762 ; 0x7d4 + ace: 41 e0 ldi r20, 0x01 ; 1 + ad0: 61 e0 ldi r22, 0x01 ; 1 + ad2: ce 01 movw r24, r28 + ad4: 8b df rcall .-234 ; 0x9ec + ad6: 80 e0 ldi r24, 0x00 ; 0 + ad8: 90 e0 ldi r25, 0x00 ; 0 + ada: df 91 pop r29 + adc: cf 91 pop r28 + ade: 1f 91 pop r17 + ae0: 0f 91 pop r16 + ae2: ff 90 pop r15 + ae4: ef 90 pop r14 + ae6: df 90 pop r13 + ae8: cf 90 pop r12 + aea: bf 90 pop r11 + aec: af 90 pop r10 + aee: 08 95 ret + +00000af0 : + +int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ + af0: ef 92 push r14 + af2: ff 92 push r15 + af4: 0f 93 push r16 + af6: 1f 93 push r17 + af8: cf 93 push r28 + afa: df 93 push r29 + afc: 1f 92 push r1 + afe: cd b7 in r28, 0x3d ; 61 + b00: de b7 in r29, 0x3e ; 62 + + if(inst == NULL)return -1; + b02: 00 97 sbiw r24, 0x00 ; 0 + b04: 09 f4 brne .+2 ; 0xb08 + b06: 85 c0 rjmp .+266 ; 0xc12 + if(i2c_transfer_inst == NULL)return -1; + b08: 61 15 cp r22, r1 + b0a: 71 05 cpc r23, r1 + b0c: 09 f4 brne .+2 ; 0xb10 + b0e: 84 c0 rjmp .+264 ; 0xc18 + if(i2c_transfer_evt == NULL)return -1; + b10: 41 15 cp r20, r1 + b12: 51 05 cpc r21, r1 + b14: 09 f4 brne .+2 ; 0xb18 + b16: 83 c0 rjmp .+262 ; 0xc1e + b18: 7c 01 movw r14, r24 + + inst->i2c_transfer_inst = i2c_transfer_inst; + b1a: dc 01 movw r26, r24 + b1c: 6d 93 st X+, r22 + b1e: 7c 93 st X, r23 + b20: 11 97 sbiw r26, 0x01 ; 1 + inst->i2c_transfer_evt = i2c_transfer_evt; + b22: 12 96 adiw r26, 0x02 ; 2 + b24: 4d 93 st X+, r20 + b26: 5c 93 st X, r21 + b28: 13 97 sbiw r26, 0x03 ; 3 + + int ret = 0; + + memset(&(inst->device_data),0x00,sizeof(si5351_data)); + b2a: fc 01 movw r30, r24 + b2c: 34 96 adiw r30, 0x04 ; 4 + b2e: 84 e5 ldi r24, 0x54 ; 84 + b30: df 01 movw r26, r30 + b32: 1d 92 st X+, r1 + b34: 8a 95 dec r24 + b36: e9 f7 brne .-6 ; 0xb32 + + /* Disable all outputs setting CLKx_DIS high */ + uint8_t temp = 0xff; + b38: 8f ef ldi r24, 0xFF ; 255 + b3a: 89 83 std Y+1, r24 ; 0x01 + writeRegister(inst,SI5351_REG_OUTPUT_ENABLE_CONTROL,&temp,1); + b3c: 01 e0 ldi r16, 0x01 ; 1 + b3e: 10 e0 ldi r17, 0x00 ; 0 + b40: 20 e0 ldi r18, 0x00 ; 0 + b42: 30 e0 ldi r19, 0x00 ; 0 + b44: ae 01 movw r20, r28 + b46: 4f 5f subi r20, 0xFF ; 255 + b48: 5f 4f sbci r21, 0xFF ; 255 + b4a: 63 e0 ldi r22, 0x03 ; 3 + b4c: c7 01 movw r24, r14 + b4e: 42 de rcall .-892 ; 0x7d4 + + /* Power down all output drivers */ + temp = 0x80; + b50: 80 e8 ldi r24, 0x80 ; 128 + b52: 89 83 std Y+1, r24 ; 0x01 + writeRegister(inst,SI5351_REG_CLK_0_CONTROL,&temp,1); + b54: 01 e0 ldi r16, 0x01 ; 1 + b56: 10 e0 ldi r17, 0x00 ; 0 + b58: 20 e0 ldi r18, 0x00 ; 0 + b5a: 30 e0 ldi r19, 0x00 ; 0 + b5c: ae 01 movw r20, r28 + b5e: 4f 5f subi r20, 0xFF ; 255 + b60: 5f 4f sbci r21, 0xFF ; 255 + b62: 60 e1 ldi r22, 0x10 ; 16 + b64: c7 01 movw r24, r14 + b66: 36 de rcall .-916 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_1_CONTROL,&temp,1); + b68: 01 e0 ldi r16, 0x01 ; 1 + b6a: 10 e0 ldi r17, 0x00 ; 0 + b6c: 20 e0 ldi r18, 0x00 ; 0 + b6e: 30 e0 ldi r19, 0x00 ; 0 + b70: ae 01 movw r20, r28 + b72: 4f 5f subi r20, 0xFF ; 255 + b74: 5f 4f sbci r21, 0xFF ; 255 + b76: 61 e1 ldi r22, 0x11 ; 17 + b78: c7 01 movw r24, r14 + b7a: 2c de rcall .-936 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_2_CONTROL,&temp,1); + b7c: 01 e0 ldi r16, 0x01 ; 1 + b7e: 10 e0 ldi r17, 0x00 ; 0 + b80: 20 e0 ldi r18, 0x00 ; 0 + b82: 30 e0 ldi r19, 0x00 ; 0 + b84: ae 01 movw r20, r28 + b86: 4f 5f subi r20, 0xFF ; 255 + b88: 5f 4f sbci r21, 0xFF ; 255 + b8a: 62 e1 ldi r22, 0x12 ; 18 + b8c: c7 01 movw r24, r14 + b8e: 22 de rcall .-956 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_3_CONTROL,&temp,1); + b90: 01 e0 ldi r16, 0x01 ; 1 + b92: 10 e0 ldi r17, 0x00 ; 0 + b94: 20 e0 ldi r18, 0x00 ; 0 + b96: 30 e0 ldi r19, 0x00 ; 0 + b98: ae 01 movw r20, r28 + b9a: 4f 5f subi r20, 0xFF ; 255 + b9c: 5f 4f sbci r21, 0xFF ; 255 + b9e: 63 e1 ldi r22, 0x13 ; 19 + ba0: c7 01 movw r24, r14 + ba2: 18 de rcall .-976 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_4_CONTROL,&temp,1); + ba4: 01 e0 ldi r16, 0x01 ; 1 + ba6: 10 e0 ldi r17, 0x00 ; 0 + ba8: 20 e0 ldi r18, 0x00 ; 0 + baa: 30 e0 ldi r19, 0x00 ; 0 + bac: ae 01 movw r20, r28 + bae: 4f 5f subi r20, 0xFF ; 255 + bb0: 5f 4f sbci r21, 0xFF ; 255 + bb2: 64 e1 ldi r22, 0x14 ; 20 + bb4: c7 01 movw r24, r14 + bb6: 0e de rcall .-996 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_5_CONTROL,&temp,1); + bb8: 01 e0 ldi r16, 0x01 ; 1 + bba: 10 e0 ldi r17, 0x00 ; 0 + bbc: 20 e0 ldi r18, 0x00 ; 0 + bbe: 30 e0 ldi r19, 0x00 ; 0 + bc0: ae 01 movw r20, r28 + bc2: 4f 5f subi r20, 0xFF ; 255 + bc4: 5f 4f sbci r21, 0xFF ; 255 + bc6: 65 e1 ldi r22, 0x15 ; 21 + bc8: c7 01 movw r24, r14 + bca: 04 de rcall .-1016 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_6_CONTROL,&temp,1); + bcc: 01 e0 ldi r16, 0x01 ; 1 + bce: 10 e0 ldi r17, 0x00 ; 0 + bd0: 20 e0 ldi r18, 0x00 ; 0 + bd2: 30 e0 ldi r19, 0x00 ; 0 + bd4: ae 01 movw r20, r28 + bd6: 4f 5f subi r20, 0xFF ; 255 + bd8: 5f 4f sbci r21, 0xFF ; 255 + bda: 66 e1 ldi r22, 0x16 ; 22 + bdc: c7 01 movw r24, r14 + bde: fa dd rcall .-1036 ; 0x7d4 + writeRegister(inst,SI5351_REG_CLK_7_CONTROL,&temp,1); + be0: 01 e0 ldi r16, 0x01 ; 1 + be2: 10 e0 ldi r17, 0x00 ; 0 + be4: 20 e0 ldi r18, 0x00 ; 0 + be6: 30 e0 ldi r19, 0x00 ; 0 + be8: ae 01 movw r20, r28 + bea: 4f 5f subi r20, 0xFF ; 255 + bec: 5f 4f sbci r21, 0xFF ; 255 + bee: 67 e1 ldi r22, 0x17 ; 23 + bf0: c7 01 movw r24, r14 + bf2: f0 dd rcall .-1056 ; 0x7d4 + + temp = SI5351_CRYSTAL_LOAD_10PF; + bf4: 80 ec ldi r24, 0xC0 ; 192 + bf6: 89 83 std Y+1, r24 ; 0x01 + + writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); + bf8: 01 e0 ldi r16, 0x01 ; 1 + bfa: 10 e0 ldi r17, 0x00 ; 0 + bfc: 20 e0 ldi r18, 0x00 ; 0 + bfe: 30 e0 ldi r19, 0x00 ; 0 + c00: ae 01 movw r20, r28 + c02: 4f 5f subi r20, 0xFF ; 255 + c04: 5f 4f sbci r21, 0xFF ; 255 + c06: 67 eb ldi r22, 0xB7 ; 183 + c08: c7 01 movw r24, r14 + c0a: e4 dd rcall .-1080 ; 0x7d4 + return ret; + c0c: 80 e0 ldi r24, 0x00 ; 0 + c0e: 90 e0 ldi r25, 0x00 ; 0 + c10: 08 c0 rjmp .+16 ; 0xc22 + return inst->device_data.deviceStatus.REVID; +} + +int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ + + if(inst == NULL)return -1; + c12: 8f ef ldi r24, 0xFF ; 255 + c14: 9f ef ldi r25, 0xFF ; 255 + c16: 05 c0 rjmp .+10 ; 0xc22 + if(i2c_transfer_inst == NULL)return -1; + c18: 8f ef ldi r24, 0xFF ; 255 + c1a: 9f ef ldi r25, 0xFF ; 255 + c1c: 02 c0 rjmp .+4 ; 0xc22 + if(i2c_transfer_evt == NULL)return -1; + c1e: 8f ef ldi r24, 0xFF ; 255 + c20: 9f ef ldi r25, 0xFF ; 255 + writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); + return ret; + + + +} + c22: 0f 90 pop r0 + c24: df 91 pop r29 + c26: cf 91 pop r28 + c28: 1f 91 pop r17 + c2a: 0f 91 pop r16 + c2c: ff 90 pop r15 + c2e: ef 90 pop r14 + c30: 08 95 ret + +00000c32 : + c32: 0f 93 push r16 + c34: 1f 93 push r17 + c36: cf 93 push r28 + c38: df 93 push r29 + c3a: 82 30 cpi r24, 0x02 ; 2 + c3c: 91 05 cpc r25, r1 + c3e: 10 f4 brcc .+4 ; 0xc44 + c40: 82 e0 ldi r24, 0x02 ; 2 + c42: 90 e0 ldi r25, 0x00 ; 0 + c44: e0 91 69 3f lds r30, 0x3F69 ; 0x803f69 <__flp> + c48: f0 91 6a 3f lds r31, 0x3F6A ; 0x803f6a <__flp+0x1> + c4c: 20 e0 ldi r18, 0x00 ; 0 + c4e: 30 e0 ldi r19, 0x00 ; 0 + c50: a0 e0 ldi r26, 0x00 ; 0 + c52: b0 e0 ldi r27, 0x00 ; 0 + c54: 30 97 sbiw r30, 0x00 ; 0 + c56: 19 f1 breq .+70 ; 0xc9e + c58: 40 81 ld r20, Z + c5a: 51 81 ldd r21, Z+1 ; 0x01 + c5c: 02 81 ldd r16, Z+2 ; 0x02 + c5e: 13 81 ldd r17, Z+3 ; 0x03 + c60: 48 17 cp r20, r24 + c62: 59 07 cpc r21, r25 + c64: c8 f0 brcs .+50 ; 0xc98 + c66: 84 17 cp r24, r20 + c68: 95 07 cpc r25, r21 + c6a: 69 f4 brne .+26 ; 0xc86 + c6c: 10 97 sbiw r26, 0x00 ; 0 + c6e: 31 f0 breq .+12 ; 0xc7c + c70: 12 96 adiw r26, 0x02 ; 2 + c72: 0c 93 st X, r16 + c74: 12 97 sbiw r26, 0x02 ; 2 + c76: 13 96 adiw r26, 0x03 ; 3 + c78: 1c 93 st X, r17 + c7a: 27 c0 rjmp .+78 ; 0xcca + c7c: 00 93 69 3f sts 0x3F69, r16 ; 0x803f69 <__flp> + c80: 10 93 6a 3f sts 0x3F6A, r17 ; 0x803f6a <__flp+0x1> + c84: 22 c0 rjmp .+68 ; 0xcca + c86: 21 15 cp r18, r1 + c88: 31 05 cpc r19, r1 + c8a: 19 f0 breq .+6 ; 0xc92 + c8c: 42 17 cp r20, r18 + c8e: 53 07 cpc r21, r19 + c90: 18 f4 brcc .+6 ; 0xc98 + c92: 9a 01 movw r18, r20 + c94: bd 01 movw r22, r26 + c96: ef 01 movw r28, r30 + c98: df 01 movw r26, r30 + c9a: f8 01 movw r30, r16 + c9c: db cf rjmp .-74 ; 0xc54 + c9e: 21 15 cp r18, r1 + ca0: 31 05 cpc r19, r1 + ca2: f9 f0 breq .+62 ; 0xce2 + ca4: 28 1b sub r18, r24 + ca6: 39 0b sbc r19, r25 + ca8: 24 30 cpi r18, 0x04 ; 4 + caa: 31 05 cpc r19, r1 + cac: 80 f4 brcc .+32 ; 0xcce + cae: 8a 81 ldd r24, Y+2 ; 0x02 + cb0: 9b 81 ldd r25, Y+3 ; 0x03 + cb2: 61 15 cp r22, r1 + cb4: 71 05 cpc r23, r1 + cb6: 21 f0 breq .+8 ; 0xcc0 + cb8: fb 01 movw r30, r22 + cba: 82 83 std Z+2, r24 ; 0x02 + cbc: 93 83 std Z+3, r25 ; 0x03 + cbe: 04 c0 rjmp .+8 ; 0xcc8 + cc0: 80 93 69 3f sts 0x3F69, r24 ; 0x803f69 <__flp> + cc4: 90 93 6a 3f sts 0x3F6A, r25 ; 0x803f6a <__flp+0x1> + cc8: fe 01 movw r30, r28 + cca: 32 96 adiw r30, 0x02 ; 2 + ccc: 44 c0 rjmp .+136 ; 0xd56 + cce: fe 01 movw r30, r28 + cd0: e2 0f add r30, r18 + cd2: f3 1f adc r31, r19 + cd4: 81 93 st Z+, r24 + cd6: 91 93 st Z+, r25 + cd8: 22 50 subi r18, 0x02 ; 2 + cda: 31 09 sbc r19, r1 + cdc: 28 83 st Y, r18 + cde: 39 83 std Y+1, r19 ; 0x01 + ce0: 3a c0 rjmp .+116 ; 0xd56 + ce2: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + ce6: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + cea: 23 2b or r18, r19 + cec: 41 f4 brne .+16 ; 0xcfe + cee: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> + cf2: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> + cf6: 20 93 67 3f sts 0x3F67, r18 ; 0x803f67 <__brkval> + cfa: 30 93 68 3f sts 0x3F68, r19 ; 0x803f68 <__brkval+0x1> + cfe: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> + d02: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> + d06: 21 15 cp r18, r1 + d08: 31 05 cpc r19, r1 + d0a: 41 f4 brne .+16 ; 0xd1c + d0c: 2d b7 in r18, 0x3d ; 61 + d0e: 3e b7 in r19, 0x3e ; 62 + d10: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> + d14: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> + d18: 24 1b sub r18, r20 + d1a: 35 0b sbc r19, r21 + d1c: e0 91 67 3f lds r30, 0x3F67 ; 0x803f67 <__brkval> + d20: f0 91 68 3f lds r31, 0x3F68 ; 0x803f68 <__brkval+0x1> + d24: e2 17 cp r30, r18 + d26: f3 07 cpc r31, r19 + d28: a0 f4 brcc .+40 ; 0xd52 + d2a: 2e 1b sub r18, r30 + d2c: 3f 0b sbc r19, r31 + d2e: 28 17 cp r18, r24 + d30: 39 07 cpc r19, r25 + d32: 78 f0 brcs .+30 ; 0xd52 + d34: ac 01 movw r20, r24 + d36: 4e 5f subi r20, 0xFE ; 254 + d38: 5f 4f sbci r21, 0xFF ; 255 + d3a: 24 17 cp r18, r20 + d3c: 35 07 cpc r19, r21 + d3e: 48 f0 brcs .+18 ; 0xd52 + d40: 4e 0f add r20, r30 + d42: 5f 1f adc r21, r31 + d44: 40 93 67 3f sts 0x3F67, r20 ; 0x803f67 <__brkval> + d48: 50 93 68 3f sts 0x3F68, r21 ; 0x803f68 <__brkval+0x1> + d4c: 81 93 st Z+, r24 + d4e: 91 93 st Z+, r25 + d50: 02 c0 rjmp .+4 ; 0xd56 + d52: e0 e0 ldi r30, 0x00 ; 0 + d54: f0 e0 ldi r31, 0x00 ; 0 + d56: cf 01 movw r24, r30 + d58: df 91 pop r29 + d5a: cf 91 pop r28 + d5c: 1f 91 pop r17 + d5e: 0f 91 pop r16 + d60: 08 95 ret + +00000d62 : + d62: cf 93 push r28 + d64: df 93 push r29 + d66: 00 97 sbiw r24, 0x00 ; 0 + d68: 09 f4 brne .+2 ; 0xd6c + d6a: 81 c0 rjmp .+258 ; 0xe6e + d6c: fc 01 movw r30, r24 + d6e: 32 97 sbiw r30, 0x02 ; 2 + d70: 12 82 std Z+2, r1 ; 0x02 + d72: 13 82 std Z+3, r1 ; 0x03 + d74: a0 91 69 3f lds r26, 0x3F69 ; 0x803f69 <__flp> + d78: b0 91 6a 3f lds r27, 0x3F6A ; 0x803f6a <__flp+0x1> + d7c: 10 97 sbiw r26, 0x00 ; 0 + d7e: 81 f4 brne .+32 ; 0xda0 + d80: 20 81 ld r18, Z + d82: 31 81 ldd r19, Z+1 ; 0x01 + d84: 82 0f add r24, r18 + d86: 93 1f adc r25, r19 + d88: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + d8c: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + d90: 28 17 cp r18, r24 + d92: 39 07 cpc r19, r25 + d94: 51 f5 brne .+84 ; 0xdea + d96: e0 93 67 3f sts 0x3F67, r30 ; 0x803f67 <__brkval> + d9a: f0 93 68 3f sts 0x3F68, r31 ; 0x803f68 <__brkval+0x1> + d9e: 67 c0 rjmp .+206 ; 0xe6e + da0: ed 01 movw r28, r26 + da2: 20 e0 ldi r18, 0x00 ; 0 + da4: 30 e0 ldi r19, 0x00 ; 0 + da6: ce 17 cp r28, r30 + da8: df 07 cpc r29, r31 + daa: 40 f4 brcc .+16 ; 0xdbc + dac: 4a 81 ldd r20, Y+2 ; 0x02 + dae: 5b 81 ldd r21, Y+3 ; 0x03 + db0: 9e 01 movw r18, r28 + db2: 41 15 cp r20, r1 + db4: 51 05 cpc r21, r1 + db6: f1 f0 breq .+60 ; 0xdf4 + db8: ea 01 movw r28, r20 + dba: f5 cf rjmp .-22 ; 0xda6 + dbc: c2 83 std Z+2, r28 ; 0x02 + dbe: d3 83 std Z+3, r29 ; 0x03 + dc0: 40 81 ld r20, Z + dc2: 51 81 ldd r21, Z+1 ; 0x01 + dc4: 84 0f add r24, r20 + dc6: 95 1f adc r25, r21 + dc8: c8 17 cp r28, r24 + dca: d9 07 cpc r29, r25 + dcc: 59 f4 brne .+22 ; 0xde4 + dce: 88 81 ld r24, Y + dd0: 99 81 ldd r25, Y+1 ; 0x01 + dd2: 84 0f add r24, r20 + dd4: 95 1f adc r25, r21 + dd6: 02 96 adiw r24, 0x02 ; 2 + dd8: 80 83 st Z, r24 + dda: 91 83 std Z+1, r25 ; 0x01 + ddc: 8a 81 ldd r24, Y+2 ; 0x02 + dde: 9b 81 ldd r25, Y+3 ; 0x03 + de0: 82 83 std Z+2, r24 ; 0x02 + de2: 93 83 std Z+3, r25 ; 0x03 + de4: 21 15 cp r18, r1 + de6: 31 05 cpc r19, r1 + de8: 29 f4 brne .+10 ; 0xdf4 + dea: e0 93 69 3f sts 0x3F69, r30 ; 0x803f69 <__flp> + dee: f0 93 6a 3f sts 0x3F6A, r31 ; 0x803f6a <__flp+0x1> + df2: 3d c0 rjmp .+122 ; 0xe6e + df4: e9 01 movw r28, r18 + df6: ea 83 std Y+2, r30 ; 0x02 + df8: fb 83 std Y+3, r31 ; 0x03 + dfa: 49 91 ld r20, Y+ + dfc: 59 91 ld r21, Y+ + dfe: c4 0f add r28, r20 + e00: d5 1f adc r29, r21 + e02: ec 17 cp r30, r28 + e04: fd 07 cpc r31, r29 + e06: 61 f4 brne .+24 ; 0xe20 + e08: 80 81 ld r24, Z + e0a: 91 81 ldd r25, Z+1 ; 0x01 + e0c: 84 0f add r24, r20 + e0e: 95 1f adc r25, r21 + e10: 02 96 adiw r24, 0x02 ; 2 + e12: e9 01 movw r28, r18 + e14: 88 83 st Y, r24 + e16: 99 83 std Y+1, r25 ; 0x01 + e18: 82 81 ldd r24, Z+2 ; 0x02 + e1a: 93 81 ldd r25, Z+3 ; 0x03 + e1c: 8a 83 std Y+2, r24 ; 0x02 + e1e: 9b 83 std Y+3, r25 ; 0x03 + e20: e0 e0 ldi r30, 0x00 ; 0 + e22: f0 e0 ldi r31, 0x00 ; 0 + e24: 12 96 adiw r26, 0x02 ; 2 + e26: 8d 91 ld r24, X+ + e28: 9c 91 ld r25, X + e2a: 13 97 sbiw r26, 0x03 ; 3 + e2c: 00 97 sbiw r24, 0x00 ; 0 + e2e: 19 f0 breq .+6 ; 0xe36 + e30: fd 01 movw r30, r26 + e32: dc 01 movw r26, r24 + e34: f7 cf rjmp .-18 ; 0xe24 + e36: 8d 91 ld r24, X+ + e38: 9c 91 ld r25, X + e3a: 11 97 sbiw r26, 0x01 ; 1 + e3c: 9d 01 movw r18, r26 + e3e: 2e 5f subi r18, 0xFE ; 254 + e40: 3f 4f sbci r19, 0xFF ; 255 + e42: 82 0f add r24, r18 + e44: 93 1f adc r25, r19 + e46: 20 91 67 3f lds r18, 0x3F67 ; 0x803f67 <__brkval> + e4a: 30 91 68 3f lds r19, 0x3F68 ; 0x803f68 <__brkval+0x1> + e4e: 28 17 cp r18, r24 + e50: 39 07 cpc r19, r25 + e52: 69 f4 brne .+26 ; 0xe6e + e54: 30 97 sbiw r30, 0x00 ; 0 + e56: 29 f4 brne .+10 ; 0xe62 + e58: 10 92 69 3f sts 0x3F69, r1 ; 0x803f69 <__flp> + e5c: 10 92 6a 3f sts 0x3F6A, r1 ; 0x803f6a <__flp+0x1> + e60: 02 c0 rjmp .+4 ; 0xe66 + e62: 12 82 std Z+2, r1 ; 0x02 + e64: 13 82 std Z+3, r1 ; 0x03 + e66: a0 93 67 3f sts 0x3F67, r26 ; 0x803f67 <__brkval> + e6a: b0 93 68 3f sts 0x3F68, r27 ; 0x803f68 <__brkval+0x1> + e6e: df 91 pop r29 + e70: cf 91 pop r28 + e72: 08 95 ret + +00000e74 : + e74: fb 01 movw r30, r22 + e76: dc 01 movw r26, r24 + e78: 02 c0 rjmp .+4 ; 0xe7e + e7a: 01 90 ld r0, Z+ + e7c: 0d 92 st X+, r0 + e7e: 41 50 subi r20, 0x01 ; 1 + e80: 50 40 sbci r21, 0x00 ; 0 + e82: d8 f7 brcc .-10 ; 0xe7a + e84: 08 95 ret + +00000e86 : + e86: 03 d0 rcall .+6 ; 0xe8e + e88: 80 81 ld r24, Z + e8a: 99 27 eor r25, r25 + e8c: 08 95 ret + +00000e8e : + e8e: fc 01 movw r30, r24 + e90: e0 50 subi r30, 0x00 ; 0 + e92: fc 4e sbci r31, 0xEC ; 236 + e94: 08 95 ret + +00000e96 : + e96: 26 2f mov r18, r22 + +00000e98 : + e98: af 93 push r26 + e9a: bf 93 push r27 + e9c: e0 e0 ldi r30, 0x00 ; 0 + e9e: f0 e1 ldi r31, 0x10 ; 16 + ea0: 32 81 ldd r19, Z+2 ; 0x02 + ea2: 31 fd sbrc r19, 1 + ea4: fd cf rjmp .-6 ; 0xea0 + ea6: dc 01 movw r26, r24 + ea8: a0 50 subi r26, 0x00 ; 0 + eaa: bc 4e sbci r27, 0xEC ; 236 + eac: 2c 93 st X, r18 + eae: 2d e9 ldi r18, 0x9D ; 157 + eb0: 24 bf out 0x34, r18 ; 52 + eb2: 23 e0 ldi r18, 0x03 ; 3 + eb4: 20 83 st Z, r18 + eb6: 01 96 adiw r24, 0x01 ; 1 + eb8: bf 91 pop r27 + eba: af 91 pop r26 + ebc: 08 95 ret + +00000ebe <_exit>: + ebe: f8 94 cli + +00000ec0 <__stop_program>: + ec0: ff cf rjmp .-2 ; 0xec0 <__stop_program> diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map index e7edfb6..4d67400 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map @@ -43,7 +43,7 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o (exit) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - main.o (__do_copy_data) + cqm6xx_app.o (__do_copy_data) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) avr_uart_driver/avr_uart.o (__do_clear_bss) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -58,6 +58,7 @@ C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/ Allocating common symbols Common symbol size file +temp_msg 0x19 cqm6xx_app.o storno_xtal_app 0x6 main.o __brkval 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) __flp 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -74,58 +75,18 @@ Discarded input sections .bss 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .text.gpio_set_level 0x00000000 0x34 avr_gpio_driver/avr_gpio.o - .text.gpio_get_level - 0x00000000 0x24 avr_gpio_driver/avr_gpio.o .text.gpio_init 0x00000000 0x34 avr_gpio_driver/avr_gpio.o - .debug_info 0x00000000 0x320 avr_gpio_driver/avr_gpio.o - .debug_abbrev 0x00000000 0x107 avr_gpio_driver/avr_gpio.o - .debug_loc 0x00000000 0xae avr_gpio_driver/avr_gpio.o - .debug_aranges - 0x00000000 0x30 avr_gpio_driver/avr_gpio.o - .debug_ranges 0x00000000 0x20 avr_gpio_driver/avr_gpio.o - .debug_line 0x00000000 0x196 avr_gpio_driver/avr_gpio.o - .debug_str 0x00000000 0x315 avr_gpio_driver/avr_gpio.o - .comment 0x00000000 0x31 avr_gpio_driver/avr_gpio.o - .debug_frame 0x00000000 0x44 avr_gpio_driver/avr_gpio.o .text 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .data 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .bss 0x00000000 0x0 avr_i2c_driver/avr_i2c.o - .text.i2c_reset - 0x00000000 0x10 avr_i2c_driver/avr_i2c.o - .text.i2c_write_devAddr - 0x00000000 0x22 avr_i2c_driver/avr_i2c.o .text.i2c_byte_write 0x00000000 0x48 avr_i2c_driver/avr_i2c.o .text.i2c_byte_read 0x00000000 0x34 avr_i2c_driver/avr_i2c.o - .text.i2c_write - 0x00000000 0x92 avr_i2c_driver/avr_i2c.o - .text.i2c_read - 0x00000000 0x8c avr_i2c_driver/avr_i2c.o - .text.i2c_IsDeviceReady - 0x00000000 0x2c avr_i2c_driver/avr_i2c.o - .text.cm_i2c_init - 0x00000000 0x34 avr_i2c_driver/avr_i2c.o - .text.cm_i2c_addDev - 0x00000000 0x3c avr_i2c_driver/avr_i2c.o - .text.cm_i2c_transfer - 0x00000000 0x34 avr_i2c_driver/avr_i2c.o - .debug_info 0x00000000 0x6da avr_i2c_driver/avr_i2c.o - .debug_abbrev 0x00000000 0x1bb avr_i2c_driver/avr_i2c.o - .debug_loc 0x00000000 0x73d avr_i2c_driver/avr_i2c.o - .debug_aranges - 0x00000000 0x68 avr_i2c_driver/avr_i2c.o - .debug_ranges 0x00000000 0x58 avr_i2c_driver/avr_i2c.o - .debug_line 0x00000000 0x3ff avr_i2c_driver/avr_i2c.o - .debug_str 0x00000000 0x506 avr_i2c_driver/avr_i2c.o - .comment 0x00000000 0x31 avr_i2c_driver/avr_i2c.o - .debug_frame 0x00000000 0x118 avr_i2c_driver/avr_i2c.o .text 0x00000000 0x0 avr_uart_driver/avr_uart.o .data 0x00000000 0x0 avr_uart_driver/avr_uart.o .bss 0x00000000 0x0 avr_uart_driver/avr_uart.o - .text.cm_uart_init - 0x00000000 0x60 avr_uart_driver/avr_uart.o .text.cm_uart_send 0x00000000 0xe avr_uart_driver/avr_uart.o .text.cm_uart_receive @@ -135,101 +96,26 @@ Discarded input sections .text 0x00000000 0x0 cm_msg/cm_msg.o .data 0x00000000 0x0 cm_msg/cm_msg.o .bss 0x00000000 0x0 cm_msg/cm_msg.o - .text.cm_msgSync_Byte_DecodeSC - 0x00000000 0x9e cm_msg/cm_msg.o - .text.cm_msg_DecodeMsg_Byte - 0x00000000 0xa8 cm_msg/cm_msg.o - .text.cm_MsgCompleteEvt_Register - 0x00000000 0x1c cm_msg/cm_msg.o - .bss.msg.1844 0x00000000 0x37 cm_msg/cm_msg.o - .bss.data_bytes_idx.1845 - 0x00000000 0x1 cm_msg/cm_msg.o - .bss.state.1843 - 0x00000000 0x1 cm_msg/cm_msg.o - .bss.state.1832 - 0x00000000 0x1 cm_msg/cm_msg.o - .bss.s_msg_cmplete_evt_inst - 0x00000000 0x2 cm_msg/cm_msg.o - .bss.s_msg_cmplete_evt_fpt - 0x00000000 0x2 cm_msg/cm_msg.o - .rodata.startCode - 0x00000000 0x5 cm_msg/cm_msg.o - .debug_info 0x00000000 0x2b4 cm_msg/cm_msg.o - .debug_abbrev 0x00000000 0x14b cm_msg/cm_msg.o - .debug_loc 0x00000000 0x179 cm_msg/cm_msg.o - .debug_aranges - 0x00000000 0x30 cm_msg/cm_msg.o - .debug_ranges 0x00000000 0x20 cm_msg/cm_msg.o - .debug_line 0x00000000 0x21a cm_msg/cm_msg.o - .debug_str 0x00000000 0x3fa cm_msg/cm_msg.o - .comment 0x00000000 0x31 cm_msg/cm_msg.o - .debug_frame 0x00000000 0x44 cm_msg/cm_msg.o .text 0x00000000 0x0 cqm6xx_app.o .data 0x00000000 0x0 cqm6xx_app.o .bss 0x00000000 0x0 cqm6xx_app.o - .text.isStructValid - 0x00000000 0x1a cqm6xx_app.o - .text.uart_rx_event - 0x00000000 0xc cqm6xx_app.o - .text.cqm6xx_app_updateOsc - 0x00000000 0x76 cqm6xx_app.o - .text.cqm6xx_app_statemachine - 0x00000000 0x56 cqm6xx_app.o - .text.programPLL_Parameters - 0x00000000 0x6 cqm6xx_app.o - .text.cqm6xx_app_init - 0x00000000 0x2c cqm6xx_app.o - .debug_info 0x00000000 0x615 cqm6xx_app.o - .debug_abbrev 0x00000000 0x1df cqm6xx_app.o - .debug_loc 0x00000000 0x309 cqm6xx_app.o - .debug_aranges - 0x00000000 0x48 cqm6xx_app.o - .debug_ranges 0x00000000 0x38 cqm6xx_app.o - .debug_line 0x00000000 0x31d cqm6xx_app.o - .debug_str 0x00000000 0x4d7 cqm6xx_app.o - .comment 0x00000000 0x31 cqm6xx_app.o - .debug_frame 0x00000000 0x98 cqm6xx_app.o .text 0x00000000 0x0 main.o .data 0x00000000 0x0 main.o .bss 0x00000000 0x0 main.o - COMMON 0x00000000 0x6 main.o + .bss.data 0x00000000 0x19 main.o + .data.data_set + 0x00000000 0x19 main.o .text 0x00000000 0x0 si5351_driver/si5351_driver.o .data 0x00000000 0x0 si5351_driver/si5351_driver.o .bss 0x00000000 0x0 si5351_driver/si5351_driver.o .text.readRegister 0x00000000 0x80 si5351_driver/si5351_driver.o - .text.writeRegister - 0x00000000 0x78 si5351_driver/si5351_driver.o - .text.cm_setOutputMultiSynthRaw - 0x00000000 0xcc si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynth 0x00000000 0x116 si5351_driver/si5351_driver.o - .text.cm_setOutputEnable - 0x00000000 0x40 si5351_driver/si5351_driver.o - .text.cm_setCLKControl - 0x00000000 0x5c si5351_driver/si5351_driver.o - .text.cm_setInputSource - 0x00000000 0x3e si5351_driver/si5351_driver.o - .text.cm_resetPLLs - 0x00000000 0x48 si5351_driver/si5351_driver.o - .text.cm_setPllParamRaw - 0x00000000 0xbc si5351_driver/si5351_driver.o .text.cm_setPLLParameters 0x00000000 0x2ce si5351_driver/si5351_driver.o .text.cm_si5351_getRevisionNumber 0x00000000 0x2a si5351_driver/si5351_driver.o - .text.cm_si5351_init - 0x00000000 0x142 si5351_driver/si5351_driver.o - .debug_info 0x00000000 0x16d1 si5351_driver/si5351_driver.o - .debug_abbrev 0x00000000 0x24a si5351_driver/si5351_driver.o - .debug_loc 0x00000000 0x10c3 si5351_driver/si5351_driver.o - .debug_aranges - 0x00000000 0x78 si5351_driver/si5351_driver.o - .debug_ranges 0x00000000 0x68 si5351_driver/si5351_driver.o - .debug_line 0x00000000 0x55f si5351_driver/si5351_driver.o - .debug_str 0x00000000 0xfc0 si5351_driver/si5351_driver.o - .comment 0x00000000 0x31 si5351_driver/si5351_driver.o - .debug_frame 0x00000000 0x28c si5351_driver/si5351_driver.o .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) @@ -390,17 +276,10 @@ Discarded input sections .text.libgcc.fixed 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - .data 0x00000000 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - .text.avr-libc - 0x00000000 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - .comment 0x00000000 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - COMMON 0x00000000 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) - .text.avr-libc - 0x00000000 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) .text 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) .data 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) .bss 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) @@ -543,7 +422,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0x19c +.text 0x00000000 0xec2 *(.vectors) .vectors 0x00000000 0x34 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o 0x00000000 __vector_default @@ -630,29 +509,117 @@ END GROUP 0x0000006c . = ALIGN (0x2) *(.text.*) .text.cm_EEPROM_write - 0x0000006c 0x36 avr_eeprom_driver/avr_eeprom_driver.o + 0x0000006c 0x3c avr_eeprom_driver/avr_eeprom_driver.o 0x0000006c cm_EEPROM_write .text.cm_EEPROM_read - 0x000000a2 0x10 avr_eeprom_driver/avr_eeprom_driver.o - 0x000000a2 cm_EEPROM_read + 0x000000a8 0x46 avr_eeprom_driver/avr_eeprom_driver.o + 0x000000a8 cm_EEPROM_read + .text.gpio_get_level + 0x000000ee 0x24 avr_gpio_driver/avr_gpio.o + 0x000000ee gpio_get_level + .text.i2c_reset + 0x00000112 0x10 avr_i2c_driver/avr_i2c.o + .text.i2c_write_devAddr + 0x00000122 0x22 avr_i2c_driver/avr_i2c.o + 0x00000122 i2c_write_devAddr + .text.i2c_write + 0x00000144 0x92 avr_i2c_driver/avr_i2c.o + 0x00000144 i2c_write + .text.i2c_read + 0x000001d6 0x8c avr_i2c_driver/avr_i2c.o + 0x000001d6 i2c_read + .text.i2c_IsDeviceReady + 0x00000262 0x2c avr_i2c_driver/avr_i2c.o + 0x00000262 i2c_IsDeviceReady + .text.cm_i2c_init + 0x0000028e 0x34 avr_i2c_driver/avr_i2c.o + 0x0000028e cm_i2c_init + .text.cm_i2c_addDev + 0x000002c2 0x3c avr_i2c_driver/avr_i2c.o + 0x000002c2 cm_i2c_addDev + .text.cm_i2c_transfer + 0x000002fe 0x34 avr_i2c_driver/avr_i2c.o + 0x000002fe cm_i2c_transfer .text.__vector_22 - 0x000000b2 0x56 avr_uart_driver/avr_uart.o - 0x000000b2 __vector_22 - .text.main 0x00000108 0x58 main.o - 0x00000108 main + 0x00000332 0x56 avr_uart_driver/avr_uart.o + 0x00000332 __vector_22 + .text.cm_uart_init + 0x00000388 0x60 avr_uart_driver/avr_uart.o + 0x00000388 cm_uart_init + .text.cm_msgSync_Byte_DecodeSC + 0x000003e8 0x9e cm_msg/cm_msg.o + 0x000003e8 cm_msgSync_Byte_DecodeSC + .text.cm_msg_DecodeMsg_Byte + 0x00000486 0xa8 cm_msg/cm_msg.o + 0x00000486 cm_msg_DecodeMsg_Byte + .text.cm_MsgCompleteEvt_Register + 0x0000052e 0x1c cm_msg/cm_msg.o + 0x0000052e cm_MsgCompleteEvt_Register + .text.isStructValid + 0x0000054a 0x1a cqm6xx_app.o + .text.cqm_setPLLParam + 0x00000564 0x96 cqm6xx_app.o + .text.cqm6xx_app_loadPLLParam + 0x000005fa 0x52 cqm6xx_app.o + .text.cqm6xx_app_updateOsc + 0x0000064c 0x76 cqm6xx_app.o + .text.cqm6xx_app_statemachine + 0x000006c2 0x5a cqm6xx_app.o + 0x000006c2 cqm6xx_app_statemachine + .text.programPLL_Parameters + 0x0000071c 0x28 cqm6xx_app.o + 0x0000071c programPLL_Parameters + .text.uart_rx_event + 0x00000744 0xe cqm6xx_app.o + 0x00000744 uart_rx_event + .text.cqm6xx_app_init + 0x00000752 0x2c cqm6xx_app.o + 0x00000752 cqm6xx_app_init + .text.main 0x0000077e 0x56 main.o + 0x0000077e main + .text.writeRegister + 0x000007d4 0x72 si5351_driver/si5351_driver.o + .text.cm_setOutputMultiSynthRaw + 0x00000846 0xcc si5351_driver/si5351_driver.o + 0x00000846 cm_setOutputMultiSynthRaw + .text.cm_setOutputEnable + 0x00000912 0x40 si5351_driver/si5351_driver.o + 0x00000912 cm_setOutputEnable + .text.cm_setCLKControl + 0x00000952 0x5c si5351_driver/si5351_driver.o + 0x00000952 cm_setCLKControl + .text.cm_setInputSource + 0x000009ae 0x3e si5351_driver/si5351_driver.o + 0x000009ae cm_setInputSource + .text.cm_resetPLLs + 0x000009ec 0x48 si5351_driver/si5351_driver.o + 0x000009ec cm_resetPLLs + .text.cm_setPllParamRaw + 0x00000a34 0xbc si5351_driver/si5351_driver.o + 0x00000a34 cm_setPllParamRaw + .text.cm_si5351_init + 0x00000af0 0x142 si5351_driver/si5351_driver.o + 0x00000af0 cm_si5351_init .text.avr-libc - 0x00000160 0x10 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - 0x00000160 eeprom_read_byte - 0x00000168 eeprom_mapen + 0x00000c32 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00000c32 malloc + 0x00000d62 free .text.avr-libc - 0x00000170 0x28 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) - 0x00000170 eeprom_write_byte - 0x00000172 eeprom_write_r18 - 0x00000198 . = ALIGN (0x2) + 0x00000e74 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) + 0x00000e74 memcpy + .text.avr-libc + 0x00000e86 0x10 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x00000e86 eeprom_read_byte + 0x00000e8e eeprom_mapen + .text.avr-libc + 0x00000e96 0x28 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000e96 eeprom_write_byte + 0x00000e98 eeprom_write_r18 + 0x00000ebe . = ALIGN (0x2) *(.fini9) - .fini9 0x00000198 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) - 0x00000198 _exit - 0x00000198 exit + .fini9 0x00000ebe 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + 0x00000ebe _exit + 0x00000ebe exit *(.fini9) *(.fini8) *(.fini8) @@ -671,50 +638,70 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000198 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + .fini0 0x00000ebe 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) *(.fini0) - 0x0000019c _etext = . + 0x00000ec2 _etext = . -.rodata +.rodata 0x00008ec2 0x5 load address 0x00000ec2 *(.rodata) *(.rodata*) + .rodata.startCode + 0x00008ec2 0x5 cm_msg/cm_msg.o *(.gnu.linkonce.r*) -.data 0x00803f00 0x1a load address 0x0000019c +.data 0x00803f00 0x8 load address 0x00000ec7 0x00803f00 PROVIDE (__data_start, .) *(.data) + .data 0x00803f00 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00803f00 __malloc_heap_end + 0x00803f02 __malloc_heap_start + 0x00803f04 __malloc_margin *(.data*) - .data.data_set - 0x00803f00 0x19 main.o - 0x00803f00 data_set + .data.msg_ptr 0x00803f06 0x2 cqm6xx_app.o + 0x00803f06 msg_ptr *(.gnu.linkonce.d*) - 0x00803f1a . = ALIGN (0x2) - *fill* 0x00803f19 0x1 - 0x00803f1a _edata = . - 0x00803f1a PROVIDE (__data_end, .) + 0x00803f08 . = ALIGN (0x2) + 0x00803f08 _edata = . + 0x00803f08 PROVIDE (__data_end, .) -.bss 0x00803f1a 0x1c - 0x00803f1a PROVIDE (__bss_start, .) +.bss 0x00803f08 0x63 + 0x00803f08 PROVIDE (__bss_start, .) *(.bss) *(.bss*) .bss.uart_rx_evt_fpt - 0x00803f1a 0x2 avr_uart_driver/avr_uart.o - 0x00803f1a uart_rx_evt_fpt - .bss.counter.3520 - 0x00803f1c 0x1 main.o - .bss.data 0x00803f1d 0x19 main.o - 0x00803f1d data + 0x00803f08 0x2 avr_uart_driver/avr_uart.o + 0x00803f08 uart_rx_evt_fpt + .bss.msg.1844 0x00803f0a 0x37 cm_msg/cm_msg.o + .bss.data_bytes_idx.1845 + 0x00803f41 0x1 cm_msg/cm_msg.o + .bss.state.1843 + 0x00803f42 0x1 cm_msg/cm_msg.o + .bss.state.1832 + 0x00803f43 0x1 cm_msg/cm_msg.o + .bss.s_msg_cmplete_evt_inst + 0x00803f44 0x2 cm_msg/cm_msg.o + 0x00803f44 s_msg_cmplete_evt_inst + .bss.s_msg_cmplete_evt_fpt + 0x00803f46 0x2 cm_msg/cm_msg.o + 0x00803f46 s_msg_cmplete_evt_fpt *(COMMON) - 0x00803f36 PROVIDE (__bss_end, .) - 0x0000019c __data_load_start = LOADADDR (.data) - 0x000001b6 __data_load_end = (__data_load_start + SIZEOF (.data)) + COMMON 0x00803f48 0x19 cqm6xx_app.o + 0x00803f48 temp_msg + COMMON 0x00803f61 0x6 main.o + 0x00803f61 storno_xtal_app + COMMON 0x00803f67 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00803f67 __brkval + 0x00803f69 __flp + 0x00803f6b PROVIDE (__bss_end, .) + 0x00000ec7 __data_load_start = LOADADDR (.data) + 0x00000ecf __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00803f36 0x0 +.noinit 0x00803f6b 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00803f36 _end = . - 0x00803f36 PROVIDE (__heap_start, .) + 0x00803f6b _end = . + 0x00803f6b PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -757,8 +744,14 @@ END GROUP *(.comment) .comment 0x00000000 0x30 avr_eeprom_driver/avr_eeprom_driver.o 0x31 (size before relaxing) + .comment 0x00000030 0x31 avr_gpio_driver/avr_gpio.o + .comment 0x00000030 0x31 avr_i2c_driver/avr_i2c.o .comment 0x00000030 0x31 avr_uart_driver/avr_uart.o + .comment 0x00000030 0x31 cm_msg/cm_msg.o + .comment 0x00000030 0x31 cqm6xx_app.o .comment 0x00000030 0x31 main.o + .comment 0x00000030 0x31 si5351_driver/si5351_driver.o + .comment 0x00000030 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .note.gnu.avr.deviceinfo 0x00000000 0x3c @@ -780,70 +773,115 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0xc8 +.debug_aranges 0x00000000 0x260 *(.debug_aranges) .debug_aranges 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o .debug_aranges - 0x00000028 0x40 avr_uart_driver/avr_uart.o + 0x00000028 0x30 avr_gpio_driver/avr_gpio.o .debug_aranges - 0x00000068 0x20 main.o + 0x00000058 0x68 avr_i2c_driver/avr_i2c.o .debug_aranges - 0x00000088 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x000000c0 0x40 avr_uart_driver/avr_uart.o .debug_aranges - 0x000000a8 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000100 0x30 cm_msg/cm_msg.o + .debug_aranges + 0x00000130 0x58 cqm6xx_app.o + .debug_aranges + 0x00000188 0x20 main.o + .debug_aranges + 0x000001a8 0x78 si5351_driver/si5351_driver.o + .debug_aranges + 0x00000220 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_aranges + 0x00000240 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x1e3d +.debug_info 0x00000000 0x539c *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x11d6 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_info 0x000011d6 0x16d avr_eeprom_driver/avr_eeprom_driver.o - .debug_info 0x00001343 0x4fc avr_uart_driver/avr_uart.o - .debug_info 0x0000183f 0x4a4 main.o - .debug_info 0x00001ce3 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_info 0x00001d90 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_info 0x000011d6 0x16b avr_eeprom_driver/avr_eeprom_driver.o + .debug_info 0x00001341 0x320 avr_gpio_driver/avr_gpio.o + .debug_info 0x00001661 0x6da avr_i2c_driver/avr_i2c.o + .debug_info 0x00001d3b 0x4fc avr_uart_driver/avr_uart.o + .debug_info 0x00002237 0x2b4 cm_msg/cm_msg.o + .debug_info 0x000024eb 0x989 cqm6xx_app.o + .debug_info 0x00002e74 0xd18 main.o + .debug_info 0x00003b8c 0x16b6 si5351_driver/si5351_driver.o + .debug_info 0x00005242 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_info 0x000052ef 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_abbrev 0x00000000 0x1565 +.debug_abbrev 0x00000000 0x1d9f *(.debug_abbrev) .debug_abbrev 0x00000000 0x10de C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_abbrev 0x000010de 0xac avr_eeprom_driver/avr_eeprom_driver.o - .debug_abbrev 0x0000118a 0x1e0 avr_uart_driver/avr_uart.o - .debug_abbrev 0x0000136a 0x1d3 main.o - .debug_abbrev 0x0000153d 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_abbrev 0x00001551 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_abbrev 0x000010de 0xa0 avr_eeprom_driver/avr_eeprom_driver.o + .debug_abbrev 0x0000117e 0x107 avr_gpio_driver/avr_gpio.o + .debug_abbrev 0x00001285 0x1bb avr_i2c_driver/avr_i2c.o + .debug_abbrev 0x00001440 0x1e0 avr_uart_driver/avr_uart.o + .debug_abbrev 0x00001620 0x14b cm_msg/cm_msg.o + .debug_abbrev 0x0000176b 0x1e1 cqm6xx_app.o + .debug_abbrev 0x0000194c 0x1ec main.o + .debug_abbrev 0x00001b38 0x23f si5351_driver/si5351_driver.o + .debug_abbrev 0x00001d77 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_abbrev 0x00001d8b 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_line 0x00000000 0x7d0 +.debug_line 0x00000000 0x18a4 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x136 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_line 0x00000136 0x166 avr_eeprom_driver/avr_eeprom_driver.o - .debug_line 0x0000029c 0x21b avr_uart_driver/avr_uart.o - .debug_line 0x000004b7 0x1d9 main.o - .debug_line 0x00000690 0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_line 0x0000070c 0xc4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_line 0x00000136 0x186 avr_eeprom_driver/avr_eeprom_driver.o + .debug_line 0x000002bc 0x196 avr_gpio_driver/avr_gpio.o + .debug_line 0x00000452 0x3ff avr_i2c_driver/avr_i2c.o + .debug_line 0x00000851 0x21b avr_uart_driver/avr_uart.o + .debug_line 0x00000a6c 0x21a cm_msg/cm_msg.o + .debug_line 0x00000c86 0x3f6 cqm6xx_app.o + .debug_line 0x0000107c 0x18f main.o + .debug_line 0x0000120b 0x559 si5351_driver/si5351_driver.o + .debug_line 0x00001764 0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_line 0x000017e0 0xc4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_frame 0x00000000 0x140 +.debug_frame 0x00000000 0x694 *(.debug_frame) - .debug_frame 0x00000000 0x60 avr_eeprom_driver/avr_eeprom_driver.o - .debug_frame 0x00000060 0xbc avr_uart_driver/avr_uart.o - .debug_frame 0x0000011c 0x24 main.o + .debug_frame 0x00000000 0x7c avr_eeprom_driver/avr_eeprom_driver.o + .debug_frame 0x0000007c 0x44 avr_gpio_driver/avr_gpio.o + .debug_frame 0x000000c0 0x118 avr_i2c_driver/avr_i2c.o + .debug_frame 0x000001d8 0xbc avr_uart_driver/avr_uart.o + .debug_frame 0x00000294 0x44 cm_msg/cm_msg.o + .debug_frame 0x000002d8 0xfc cqm6xx_app.o + .debug_frame 0x000003d4 0x34 main.o + .debug_frame 0x00000408 0x28c si5351_driver/si5351_driver.o -.debug_str 0x00000000 0xe53 +.debug_str 0x00000000 0x227c *(.debug_str) .debug_str 0x00000000 0x7a9 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_str 0x000007a9 0x1e2 avr_eeprom_driver/avr_eeprom_driver.o - 0x21b (size before relaxing) - .debug_str 0x0000098b 0x353 avr_uart_driver/avr_uart.o - 0x4f4 (size before relaxing) - .debug_str 0x00000cde 0x175 main.o - 0x3e5 (size before relaxing) + .debug_str 0x000007a9 0x1d9 avr_eeprom_driver/avr_eeprom_driver.o + 0x21f (size before relaxing) + .debug_str 0x00000982 0x16e avr_gpio_driver/avr_gpio.o + 0x319 (size before relaxing) + .debug_str 0x00000af0 0x2ab avr_i2c_driver/avr_i2c.o + 0x506 (size before relaxing) + .debug_str 0x00000d9b 0x283 avr_uart_driver/avr_uart.o + 0x4f8 (size before relaxing) + .debug_str 0x0000101e 0x23a cm_msg/cm_msg.o + 0x3fe (size before relaxing) + .debug_str 0x00001258 0x3c1 cqm6xx_app.o + 0x624 (size before relaxing) + .debug_str 0x00001619 0x908 main.o + 0xc65 (size before relaxing) + .debug_str 0x00001f21 0x35b si5351_driver/si5351_driver.o + 0xfbf (size before relaxing) -.debug_loc 0x00000000 0x349 +.debug_loc 0x00000000 0x23ef *(.debug_loc) - .debug_loc 0x00000000 0x1c6 avr_eeprom_driver/avr_eeprom_driver.o - .debug_loc 0x000001c6 0x13b avr_uart_driver/avr_uart.o - .debug_loc 0x00000301 0x48 main.o + .debug_loc 0x00000000 0x24e avr_eeprom_driver/avr_eeprom_driver.o + .debug_loc 0x0000024e 0xae avr_gpio_driver/avr_gpio.o + .debug_loc 0x000002fc 0x73d avr_i2c_driver/avr_i2c.o + .debug_loc 0x00000a39 0x13b avr_uart_driver/avr_uart.o + .debug_loc 0x00000b74 0x179 cm_msg/cm_msg.o + .debug_loc 0x00000ced 0x5f7 cqm6xx_app.o + .debug_loc 0x000012e4 0x48 main.o + .debug_loc 0x0000132c 0x10c3 si5351_driver/si5351_driver.o .debug_macinfo *(.debug_macinfo) @@ -863,11 +901,16 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x58 +.debug_ranges 0x00000000 0x1a0 *(.debug_ranges) .debug_ranges 0x00000000 0x18 avr_eeprom_driver/avr_eeprom_driver.o - .debug_ranges 0x00000018 0x30 avr_uart_driver/avr_uart.o - .debug_ranges 0x00000048 0x10 main.o + .debug_ranges 0x00000018 0x20 avr_gpio_driver/avr_gpio.o + .debug_ranges 0x00000038 0x58 avr_i2c_driver/avr_i2c.o + .debug_ranges 0x00000090 0x30 avr_uart_driver/avr_uart.o + .debug_ranges 0x000000c0 0x20 cm_msg/cm_msg.o + .debug_ranges 0x000000e0 0x48 cqm6xx_app.o + .debug_ranges 0x00000128 0x10 main.o + .debug_ranges 0x00000138 0x68 si5351_driver/si5351_driver.o .debug_macro *(.debug_macro) diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec index 09ef998..0b57597 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec @@ -1,30 +1,241 @@ S022000073746F726E6F5F6371703678785F6469676974616C5F7874616C2E737265633F S113000019C033C032C031C030C02FC02EC02DC083 S11300102CC02BC02AC029C028C027C026C025C098 -S113002024C023C022C021C020C01FC042C01DC0A4 +S113002024C023C022C021C020C01FC082C11DC063 S11300301CC01BC011241FBECFEFCDBFDFE3DEBF4A -S11300401FE3A0E0BFE3ECE9F1E002C005900D92EC -S1130050AA31B107D9F72FE3AAE1BFE301C01D928A -S1130060A633B207E1F750D097C0CACFEF92FF9200 +S11300401FE3A0E0BFE3E7ECFEE002C005900D92E1 +S1130050A830B107D9F72FE3A8E0BFE301C01D9290 +S1130060AB36B207E1F78BD32AC7CACFEF92FF9220 S11300700F931F93CF93DF937C018B01D42FC0E0A8 -S113008007C0F801EC0FF11D6081C70171D0CF5F8B -S1130090CD17B8F3DF91CF911F910F91FF90EF909F -S11300A00895CF93DF93EB015BD08883DF91CF91E9 -S11300B008951F920F920FB60F9211242F933F931E -S11300C04F935F936F937F938F939F93AF93BF935C -S11300D0EF93FF93E0911A3FF0911B3F309719F093 -S11300E0809100080995FF91EF91BF91AF919F9185 -S11300F08F917F916F915F914F913F912F910F90CD -S11301000FBE0F901F90189541E06DE17FE380E0F2 -S113011090E0C7DF2AE684E091E0215080409040DF -S1130120E1F700C041E060E07FE380E090E09EDF23 -S1130130809108048D3059F480911C3F8F5F809327 -S11301401C3F80911C3F823310F010921C3F2AE622 -S113015084E091E0215080409040E1F700C0E8CF76 -S113016003D0808199270895FC01E050FC4E089546 -S1130170262FAF93BF93E0E0F0E1328131FDFDCF54 -S1130180DC01A050BC4E2C932DE924BF23E0208336 -S10F01900196BF91AF910895F894FFCF41 -S113019C55000000000000000000000000000000FA -S10D01AC0000000000000000000045 +S11300800AC08C2F90E0F801E80FF91F60818E0DF3 +S11300909F1D01D7CF5FCD17A0F3DF91CF911F91A3 +S11300A00F91FF90EF900895CF92DF92EF92FF921D +S11300B00F931F93CF93DF936C017B01D42FC0E088 +S11300C00BC08C2F90E08701080F191F8C0D9D1D0C +S11300D0DAD6F8018083CF5FCD1798F3DF91CF9103 +S11300E01F910F91FF90EF90DF90CF9008958111B1 +S11300F00DC02091080430E002C0359527956A951B +S1130100E2F781E020FF80E090E0089580E090E055 +S11301100895E0E1F8E084818860848381E0858348 +S113012008958093170880911508807CE1F39091DD +S11301301508892F807194FF04C083E0809314080C +S113014081E00895CF92DF92EF92FF92CF93DF93F5 +S1130150EB0169017A01232B242B252B81F1E1DFAB +S1130160811130C09E012F5F3F4F88818093180812 +S11301708091150886FFFCCF8091150884FF06C086 +S113018083E08093140881E090E01EC080911508FC +S11301908C7021F0BEDF81E090E016C080911508DC +S11301A084FD07C081E0C81AD108E108F108E9011B +S11301B0C9F683E08093140880E090E005C08FEFD7 +S11301C09FEF02C08FEF9FEFDF91CF91FF90EF90F1 +S11301D0DF90CF900895CF92DF92EF92FF92CF936A +S11301E0DF93EB0169017A01232B242B252B69F181 +S11301F0816097DF8823C9F02BC080911508807C2B +S1130200E1F3CE0101962091180828834115510588 +S11302106105710521F424E02093140803C022E051 +S1130220209314086A017B01EC01B701A601415037 +S1130230510961097109CD28CE28CF28F1F683E050 +S11302408093140880E090E005C081E090E002C053 +S11302508FEF9FEFDF91CF91FF90EF90DF90CF90E2 +S11302600895809317088091150886FFFCCF80912C +S1130270150884FF06C083E08093140881E090E0B1 +S1130280089583E08093140880E090E00895E0E00E +S1130290F4E080818B7F80838081877F8083A0E1ED +S11302A0B8E08BE016968C93169781E013968C93A6 +S11302B0139715968C9388E0828B838B80E090E073 +S11302C00895EF92FF920F931F93CF938C017B01BC +S11302D0C42F842F880FC5DF009749F4F801E0820A +S11302E0F1824C2F50E0440F551F428302C08EEF21 +S11302F09FEFCF911F910F91FF90EF9008950F936F +S1130300009781F0FC01002319F0013031F00DC099 +S1130310828161DF80E090E00AC0828113DF80E0A7 +S113032090E005C08FEF9FEF02C080E090E00F9156 +S113033008951F920F920FB60F9211242F933F939B +S11303404F935F936F937F938F939F93AF93BF93D9 +S1130350EF93FF93E091083FF091093F309719F034 +S1130360809100080995FF91EF91BF91AF919F9102 +S11303708F917F916F915F914F913F912F910F904A +S11303800FBE0F901F901895CF93DF931F92CDB798 +S1130390DEB7AC01F894E0E0F8E02CE635E0208725 +S11303A0318793E0978390EC96836115710511F47E +S11303B0452B39F080E8809305086093083F7093DB +S11303C0093F80910408882324F4809100088983DC +S11303D08981E0E0F4E080E4818380E8828378949A +S11303E00F90DF91CF910895E091433FE23029F1DE +S11303F028F4EE2341F0E13091F040C0E33059F1AC +S1130400E430B9F13BC0F0E0EE53F147208191E0D4 +S1130410281390E09093433F81E090E00895F0E04A +S1130420EE53F1479081891302C082E001C080E05D +S11304308093433F81E090E00895F0E0EE53F1476C +S11304409081891302C083E001C080E08093433F20 +S113045081E090E00895F0E0EE53F1479081891334 +S113046002C084E001C080E08093433F81E090E0DB +S113047008951092433F80E090E008951092433F26 +S113048081E090E008959091423F9330D1F028F4B8 +S1130490992341F0913079F047C09430D1F09530F0 +S11304A029F142C0A1DF892B19F481E08093423FF6 +S11304B01092413F39C080930A3F83E08093423FCA +S11304C033C0EAE0FFE31182828384E08093423FF9 +S11304D02BC0EAE0FFE321813281A901482BCA0144 +S11304E08183928385E08093423F1EC09091413F77 +S11304F0E92FF0E0E65FF04C838381E0890F80937D +S1130500413F90910A3F891778F0E091463FF0917E +S1130510473F6DE07FE38091443F9091453F0995CB +S11305201092423F1092413F80E090E0089500977E +S113053059F06115710541F08093443F9093453F14 +S11305406093463F7093473F0895FC0122813381B5 +S1130550232B21F0892B21F481E0089581E0089573 +S113056080E008959F92AF92BF92CF92DF92EF9274 +S1130570FF920F931F93CF93DF93EC01942EEC81A2 +S1130580FD81A184B284C384D484E580F68007818C +S1130590108521813281438154818A819B814AD291 +S11305A081E493E00197F1F70000EC81FD81A588D7 +S11305B0B688C788D08CE188F28803891489258598 +S11305C0368547855089692D8A819B813CD181E498 +S11305D093E00197F1F7000040E0692D8A819B8147 +S11305E0B8D1DF91CF911F910F91FF90EF90DF90E1 +S11305F0CF90BF90AF909F900895CF93DF93EC017D +S113060060E08A819B81D3D181E493E00197F1F783 +S1130610000088E49FE38C839D836091063F709182 +S1130620073F49E180E090E03FDD40E060E0CE013B +S113063099DF40E060E08A819B818BD181E493E083 +S11306400197F1F70000DF91CF910895CF93DF93E5 +S1130650EC017BDF811132C089819881891771F1A6 +S1130660813019F08230B1F029C081E493E0019720 +S1130670F1F7000040E060E08A819B814AD181E487 +S113068093E00197F1F7000041E061E08A819B81EA +S113069040D114C081E493E00197F1F7000041E0F8 +S11306A060E08A819B8135D181E493E00197F1F781 +S11306B0000040E061E08A819B812BD1DF91CF91E2 +S11306C00895CF93DF93EC0140DF811124C0898129 +S11306D0813051F018F0823099F01DC08883CE012A +S11306E08CDF81E0898317C0CE01B0DF89818883E4 +S11306F063E080E0FCDC019771F482E089830BC045 +S1130700CE01A4DF8981888363E080E0F0DC892B5B +S113071011F481E08983DF91CF910895FC01648114 +S11307207581FB018081882319F0813031F00895AF +S113073049E180E090E09ADC089549E180E290E0AC +S113074095DC0895FC0164837583E8DF80E090E024 +S11307500895CF93DF936115710571F0009761F0EF +S1130760EC01198218826A837B8362EA73E0DFDE1C +S113077063E472E0CE0108DEDF91CF910895CF9358 +S1130780DF93CDB7DEB7CB55D109CDBFDEBF80E057 +S113079090E07DDD40E660E070E0CE01019691DD01 +S11307A04FE751E0BE016F5F7F4FCE010496A0D1A9 +S11307B0BE016C5F7F4F81E69FE3CBDF81E69FE361 +S11307C080DF2AE684E091E0215080409040E1F708 +S11307D000C0F4CF8F929F92AF92BF92CF92DF92DC +S11307E0EF92FF920F931F93CF93DF93EC01862E2A +S11307F05A0168017901C80101961BD2982E192F5C +S1130800FC018192CF01A601B50134D3EA81FB81B9 +S1130810A70196012F5F3F4F4F4F5F4F01E0692DB6 +S1130820712F88819981099580E090E0DF91CF91C3 +S11308301F910F91FF90EF90DF90CF90BF90AF90FA +S11308409F908F900895AF92BF92CF92DF92EF92D4 +S1130850FF920F931F93FC01662319F0613041F15D +S11308604DC0437086A18C7F482B46A337A320A795 +S1130870F2A6E3A6D601C501072E7CE0B695A7959E +S1130880979587957A95D1F7702D83708295807F9F +S11308900370802B81A7B4A2A5A2AF014C5D5F4F6A +S11308A008E010E020E030E06AE2CF0193DF26C0E8 +S11308B0437086A58C7F482B46A737A720ABF2AAA6 +S11308C0E3AAD601C501072E7CE0B695A7959795B6 +S11308D087957A95D1F7702D83708295807F037008 +S11308E0802B81ABB4A6A5A6AF01445D5F4F08E0A1 +S11308F010E020E030E062E3CF016CDF80E090E0C4 +S11309001F910F91FF90EF90DF90CF90BF90AF9029 +S113091008950F931F93662319F0613039F00BC0CB +S1130920FC01278140FB20F9278305C0FC012781B6 +S113093040FB21F92783AC01495F5F4F01E010E0E0 +S113094020E030E063E046DF80E090E01F910F910B +S113095008950F931F93662319F06130A1F022C00C +S1130960FC01228540FB27F933853F7D33872F64C3 +S11309702287AC01465F5F4F01E010E020E030E0E9 +S113098060E128DF0FC0FC01238540FB27F92F66B7 +S11309902387AC01455F5F4F01E010E020E030E0C9 +S11309A061E118DF80E090E01F910F9108950F93AB +S11309B01F93662319F0613039F00AC0FC012185C8 +S11309C02B7F277F218704C0FC0121852460218798 +S11309D0AC01475F5F4F01E010E020E030E060EFE2 +S11309E0F9DE80E090E01F910F9108950F931F931B +S11309F031E0611101C030E0FC01E95AFF4F208170 +S1130A0030FB25F9208331E0411101C030E0AC0115 +S1130A10495A5F4FFA01208130FB27F9208301E016 +S1130A2010E020E030E061EBD5DE80E090E01F9143 +S1130A300F910895AF92BF92CF92DF92EF92FF92FF +S1130A400F931F93CF93DF93EC01662319F061306A +S1130A5001F13DC042708E898C7F482B4E8B3F8BB9 +S1130A60288FD801C70188279927AF70BB27FA8E32 +S1130A70EB8E8A2F8F70898FBC8AAD8A08E010E0D4 +S1130A8020E030E0AE014C5E5F4F6AE1CE01A2DEB1 +S1130A901EC042708E8D8C7F482B4E8F3F8F28A3B3 +S1130AA0D801C70188279927AF70BB27FAA2EBA208 +S1130AB08A2F8F7089A3BC8EAD8E08E010E020E0F1 +S1130AC030E0AE01445E5F4F62E2CE0183DE41E07E +S1130AD061E0CE018BDF80E090E0DF91CF911F9148 +S1130AE00F91FF90EF90DF90CF90BF90AF9008955B +S1130AF0EF92FF920F931F93CF93DF931F92CDB783 +S1130B00DEB7009709F485C06115710509F484C046 +S1130B104115510509F483C07C01DC016D937C937C +S1130B20119712964D935C931397FC01349684E5C8 +S1130B30DF011D928A95E9F78FEF898301E010E0C8 +S1130B4020E030E0AE014F5F5F4F63E0C70142DE5B +S1130B5080E8898301E010E020E030E0AE014F5FDF +S1130B605F4F60E1C70136DE01E010E020E030E0D5 +S1130B70AE014F5F5F4F61E1C7012CDE01E010E081 +S1130B8020E030E0AE014F5F5F4F62E1C70122DE3B +S1130B9001E010E020E030E0AE014F5F5F4F63E121 +S1130BA0C70118DE01E010E020E030E0AE014F5F45 +S1130BB05F4F64E1C7010EDE01E010E020E030E0A9 +S1130BC0AE014F5F5F4F65E1C70104DE01E010E055 +S1130BD020E030E0AE014F5F5F4F66E1C701FADD10 +S1130BE001E010E020E030E0AE014F5F5F4F67E1CD +S1130BF0C701F0DD80EC898301E010E020E030E003 +S1130C00AE014F5F5F4F67EBC701E4DD80E090E02A +S1130C1008C08FEF9FEF05C08FEF9FEF02C08FEFEB +S1130C209FEF0F90DF91CF911F910F91FF90EF9065 +S1130C3008950F931F93CF93DF938230910510F49F +S1130C4082E090E0E091693FF0916A3F20E030E07B +S1130C50A0E0B0E0309719F1408151810281138105 +S1130C6048175907C8F08417950769F4109731F0AD +S1130C7012960C93129713961C9327C00093693F06 +S1130C8010936A3F22C02115310519F0421753070A +S1130C9018F49A01BD01EF01DF01F801DBCF211542 +S1130CA03105F9F0281B390B2430310580F48A8191 +S1130CB09B816115710521F0FB018283938304C03C +S1130CC08093693F90936A3FFE01329644C0FE01CF +S1130CD0E20FF31F819391932250310928833983C2 +S1130CE03AC02091673F3091683F232B41F4209113 +S1130CF0023F3091033F2093673F3093683F209138 +S1130D00003F3091013F2115310541F42DB73EB725 +S1130D104091043F5091053F241B350BE091673F00 +S1130D20F091683FE217F307A0F42E1B3F0B28173E +S1130D30390778F0AC014E5F5F4F2417350748F050 +S1130D404E0F5F1F4093673F5093683F8193919389 +S1130D5002C0E0E0F0E0CF01DF91CF911F910F914D +S1130D600895CF93DF93009709F481C0FC01329773 +S1130D7012821382A091693FB0916A3F109781F467 +S1130D8020813181820F931F2091673F3091683F0A +S1130D902817390751F5E093673FF093683F67C020 +S1130DA0ED0120E030E0CE17DF0740F44A815B819B +S1130DB09E0141155105F1F0EA01F5CFC283D383B9 +S1130DC040815181840F951FC817D90759F4888130 +S1130DD09981840F951F0296808391838A819B81D8 +S1130DE0828393832115310529F4E093693FF093BD +S1130DF06A3F3DC0E901EA83FB8349915991C40FDD +S1130E00D51FEC17FD0761F480819181840F951F34 +S1130E100296E90188839983828193818A839B83E3 +S1130E20E0E0F0E012968D919C911397009719F0F1 +S1130E30FD01DC01F7CF8D919C9111979D012E5FEF +S1130E403F4F820F931F2091673F3091683F2817CF +S1130E50390769F4309729F41092693F10926A3F78 +S1130E6002C012821382A093673FB093683FDF9160 +S1130E70CF910895FB01DC0102C001900D92415015 +S1130E805040D8F7089503D0808199270895FC0134 +S1130E90E050FC4E0895262FAF93BF93E0E0F0E1BD +S1130EA0328131FDFDCFDC01A050BC4E2C932DE9E5 +S1130EB024BF23E020830196BF91AF910895F89455 +S1050EC0FFCF5E +S1080EC24F5A31434DBD +S10B0EC700006B3F2000483FCE S9030000FC diff --git a/storno_cqp6xx_digital_xtal/avr_eeprom_driver b/storno_cqp6xx_digital_xtal/avr_eeprom_driver index 31508be..5786c77 160000 --- a/storno_cqp6xx_digital_xtal/avr_eeprom_driver +++ b/storno_cqp6xx_digital_xtal/avr_eeprom_driver @@ -1 +1 @@ -Subproject commit 31508bec9dd34319737e697f753fc4a87c6823ab +Subproject commit 5786c777ac4afc7fbbdb18f5a1ece4d06b79ac87 diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.c b/storno_cqp6xx_digital_xtal/cqm6xx_app.c index 9381d91..304db8a 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.c +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.c @@ -16,6 +16,9 @@ #define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 #define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) + storno_pll_param_msg temp_msg; + uint8_t *msg_ptr = (void*)&temp_msg; + static uint8_t isStructValid(storno_xtal_app_t *inst){ if(inst->si5351_dev == NULL) return 1; @@ -71,25 +74,23 @@ static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351 static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ - /*cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); + cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); _delay_ms(1); - - storno_pll_param_msg temp_msg; - uint8_t *msg_ptr = (void*)&temp_msg; - - cm_EEPROM_read(PLLA_SETTINGS_EEPROM_ADDR,msg_ptr,sizeof(storno_pll_param_msg)); + inst->pll_param_ptr = &temp_msg; + cm_EEPROM_read(PLLA_SETTINGS_EEPROM_ADDR,msg_ptr,sizeof(storno_pll_param_msg)); + cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_CLK_POWER_UP); _delay_ms(1); - cm_EEPROM_read(PLLB_SETTINGS_EEPROM_ADDR,msg_ptr,sizeof(storno_pll_param_msg)); - inst->pll_param_ptr = &temp_msg; - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); + //cm_EEPROM_read(PLLB_SETTINGS_EEPROM_ADDR,msg_ptr,sizeof(storno_pll_param_msg)); + //inst->pll_param_ptr = &temp_msg; + //cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); + //cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); - inst->pll_param_ptr = NULL;*/ + //inst->pll_param_ptr = NULL; } @@ -155,11 +156,11 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ switch(inst->pll_param_ptr->PLL_Ident){ case MSG_PLLA_PARAM: - //cm_EEPROM_write(PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); + cm_EEPROM_write(PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); break; case MSG_PLLB_PARAM: - //cm_EEPROM_write(PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); + cm_EEPROM_write(PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)(inst->pll_param_ptr), sizeof(storno_pll_param_msg)); break; } @@ -167,7 +168,7 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ // Send status back maybe.. //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; + //inst->state_next = STORNO_APP_PROGRAM_OSC; } @@ -175,7 +176,7 @@ int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ inst->pll_param_ptr = rxData; - //programPLL_Parameters(inst); + programPLL_Parameters(inst); return 0; diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.h b/storno_cqp6xx_digital_xtal/cqm6xx_app.h index 128eddb..6d057bd 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.h +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.h @@ -51,7 +51,7 @@ typedef struct { void *si5351_dev; storno_pll_param_msg *pll_param_ptr; - + storno_pll_param_msg pll_param_data; diff --git a/storno_cqp6xx_digital_xtal/main.c b/storno_cqp6xx_digital_xtal/main.c index 36ec947..b3ba210 100644 --- a/storno_cqp6xx_digital_xtal/main.c +++ b/storno_cqp6xx_digital_xtal/main.c @@ -15,33 +15,26 @@ storno_xtal_app_t storno_xtal_app; - uint8_t data_set[25] = {0x55}; + uint8_t data_set[25] = {0x55,56}; //cm_EEPROM_write(0x00,data_set,1); uint8_t data[25] = {0}; int main(void) { - - - cm_EEPROM_read(0x00,data,1); - - _delay_ms(100); - - cm_EEPROM_write(0x00,data_set,1); /* Replace with your application code */ // Init Periphials - //cm_i2c_init(NULL); + cm_i2c_init(NULL); // Add devices - //cm_i2c_device_t si5351_i2c; - //cm_i2c_addDev(&si5351_i2c,NULL,0x60); + cm_i2c_device_t si5351_i2c; + cm_i2c_addDev(&si5351_i2c,NULL,0x60); // Init Devices: - //si5351_driver si5351_dev; - //cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); + si5351_driver si5351_dev; + cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - //cqm6xx_app_init(&storno_xtal_app, &si5351_dev); + cqm6xx_app_init(&storno_xtal_app, &si5351_dev); @@ -49,22 +42,7 @@ int main(void) while (1) { - //cqm6xx_app_statemachine(&storno_xtal_app); - if(PORTA.IN == 0x0d){ - - static volatile uint8_t counter = 0; - - counter++; - - if (counter >= 50) - { - counter = 0; - } - - } - - - + cqm6xx_app_statemachine(&storno_xtal_app); _delay_ms(100); } }