From cfe3d87612e433ce65a7313bd3333a755b080821 Mon Sep 17 00:00:00 2001 From: "Christian L. V. Madsen" Date: Fri, 11 Apr 2025 19:31:57 +0200 Subject: [PATCH] using light driver of SI5351 because it gives me more space in memory.. I dont wanna write to eeprom in ISR.. --- .vs/storno_cqp6xx_digital_xtal/v14/.atsuo | Bin 107520 -> 107520 bytes storno_cqp6xx_digital_xtal/Debug/Makefile | 19 +- .../avr_eeprom_driver/avr_eeprom_driver.o | Bin 6216 -> 6144 bytes .../Debug/avr_gpio_driver/avr_gpio.o | Bin 6256 -> 6444 bytes .../Debug/avr_i2c_driver/avr_i2c.o | Bin 18432 -> 17616 bytes .../Debug/avr_uart_driver/avr_uart.o | Bin 9972 -> 9952 bytes .../Debug/cm_msg/cm_msg.o | Bin 9092 -> 9368 bytes storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o | Bin 18096 -> 17420 bytes storno_cqp6xx_digital_xtal/Debug/main.o | Bin 12192 -> 11228 bytes .../Debug/si5351_driver/si5351_driver.o | Bin 41540 -> 32024 bytes .../Debug/storno_cqp6xx_digital_xtal.elf | Bin 68008 -> 62780 bytes .../Debug/storno_cqp6xx_digital_xtal.hex | 497 +- .../Debug/storno_cqp6xx_digital_xtal.lss | 4546 ++++++++--------- .../Debug/storno_cqp6xx_digital_xtal.map | 487 +- .../Debug/storno_cqp6xx_digital_xtal.srec | 497 +- storno_cqp6xx_digital_xtal/cqm6xx_app.c | 63 +- storno_cqp6xx_digital_xtal/cqm6xx_app.h | 11 +- storno_cqp6xx_digital_xtal/si5351_driver | 2 +- .../storno_cqp6xx_digital_xtal.cproj | 7 +- 19 files changed, 2886 insertions(+), 3243 deletions(-) diff --git a/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo b/.vs/storno_cqp6xx_digital_xtal/v14/.atsuo index 68435d21b0aa0eae05d76f421ef546228d12ecb4..d2540d2c13c19aa2a5de05828f425d949181938c 100644 GIT binary patch delta 4294 zcmc&$3s98T72fmj!xa`-TwW^Tf?!qzT<}G$;L0lqMp(tj#1{xn)WnFoprFWV#BmZe zut&YEQl+b7V;>p9uTo9ofLcRSHQ3roTWw?7v2AR%CZm%K6Q$=Y`@@RZNu9~`!ngOH z$G!i(=XI~MQ|Ii|HB1lnQ>j#H!o!}P9_l>fgm>&CrJ<@bb;lq42qA=c!brj}LO5YO!Aw{{;5A~XA3+Er@Q21yAK5$3V7g}l5fOv{!ULj>)LRKZ zAovpu1dpQkCzR+>gvkU`qupdrr@;(@jWCmtLC7Rz5%{pmp*sb;y~UBJ8&rBn>dj5&7`Y1kZE=x_v}os z19LpiVdh{Ce1;U+fh-@)fq^9ZMh=YiF2V~vy#wceD-LY5&y#2S-2e@n8m$IPoDv6o z^!#b4cPF$ zu?}WnWpIIkEzPN==ovU&Gz4xgW7bnI1nGF+G*788=!o1V83DT^YqXqzcd&X?f!;`A^k=)@eWC1<?1-)aRP~> z%VT&EE!T{{U~pAF{`tExXs%lFNZ*h&!ZkftAM7(9W@2T=M;ec9y!9L%X@v&fGAFdM z1zkN6WB(rpZXIiuWOI}S^jwUT{h(v?&c-66Y>dAPuC-Z)Fp~NC$Yn=y5$L&6C^Lo> z5OG?i690M~ekr#n*#cbVtp952=p&wZHv25%&tXC|H|)4wjqQK1%5S9?Yq9;yc=bG$ z1FwXcuszHMoqaK((ScLk1qd;fsmiaXo%~|$j=!h>?!xML=c#onx&Ta5RoSYEboXV` zUy5o9jUEZ8Uj#p_erP?gEpbKbJMY^QzayRIS#rbv3UGzw`s7HFGS)TG_Bb0t@(gJ- zHn`MXB*A-%&*_w#u|3=%B~6pt z-8OK&crE~VZ_0JWS&jEzEC>LJw$CpVmNHjsCL$TDU-DE1f3Ctt0yXT(j|=AbdxMCb zgk6LKRPf`JQq6Any$za){t>}Vc-UClhPLOh%&D71j3p9w+h+v;2MWJc`W5EVx1-ZsE66$g+T=?^5z6;g zTm?NpYx+5>43fJ_YK@X4ltOZpWb3<}LT2$vw9Pb!E~wCaPwJV8QdZC%A;Ji9_d1=X zwMGMKda;Sp0PtKL6f(KkurWz}=27NmbZ$D2Ns=F%XedXEr(s>~d@QO>2;eK2!42?I z?L@R~j>cHYNcus6aWsJq1N=V;OSeo?t9yI6jvekl!9^ux`RdvqaL1$Q(O2E|6**^l_V*j?OP5 z@b|(Zw!RE`cw@a@o?G*_+P|C}&+gNz{*4_6SBja@5Q5GoEw-SY~2F+ z*nG-@Jx!ZnyO{7M_{>Q;VG|{#5FkD?LJ%JL+yZYurm+;icW@yL`mymI_5y62vWAZ> zAKtfEi=Q4dJ+>*mZdK`uSCh(?JR*U9Qf|FDMM?3jdIYr%W$y=&~+yUts6_Q;&QqCw_78$==$Jl+tpOqZ`hj!@ya9aG>jIz*1(m$)8RMh znv{Mb9nPwSI~>d+2|(|wdQ!`^auln7Cbqr;yW4i_U@d*k9Pl}aIgxM~-Lcl8Z0JOSCsY=S zrKJ$a5pEU>>tUTZV1!|9;dYpz8QhD3;@vtJCTb_ZdU0t!{8hXV4|~MuF);aP6pRp8 z{J`Q_@?;z=P&0pvIP(lmh&l{0!Z;qLvC-RBF9LsQfX5cK-Kd8^NvwVi*0=SP09m^~ z1vr5P%?cJR&x1pdxI|dTfkwRN1e0gegKyU?x-3wFElqmy@iK@M&PDK&c$fmi_N9Pe Q**0uXPH3|}3tfx;0}u)I8UO$Q delta 3983 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 E0!`E0bpQYW diff --git a/storno_cqp6xx_digital_xtal/Debug/avr_gpio_driver/avr_gpio.o b/storno_cqp6xx_digital_xtal/Debug/avr_gpio_driver/avr_gpio.o index 98f8529b12189603039bca73f4fe1add9a1cbcc7..039c5d86aa5563480478e04be4a3cd9b0798220a 100644 GIT binary patch delta 1218 zcmZ9LT}TvB6oBs;ch()<**|A@)=GEWsU1aZGq%7D3L!JgC@G7;><1zfq9TcWh*cu6 zz;HVR3i%Q}Mj_ja)Pq7nL4gmwNI_~4^blF}P?69%>us63aL@VfIrpA>&Y8K(n;vW) zv*1;}&TQCe!}9RL*n*fD2~H&X?_fW4mf-8L>JnY&A@@j5rRd9=KT;R}F}&nnyqx6s4jW#1&cuUwd2Ex;>yp$fIZq z$x8C4%YWi+Unexz9>BfJ=H-(G{!>^uioo4QzvtI2}mCTl^GA>%Twm&|AR8)lg~2#xJDnSG?& zT-+g>0TF~l5CM4V5W}nxI&Ye@5{OPnq)3u)Wvzp7U}U4Q|5Q& zB7=(|?u{DeZqZl`hG=rz3wmMYwk49~Hic{o&gYzWc zA;cW@1Eus3n_{;2eu$n1;Ne&j@;DfClxJbQ7faFK_>va!2!4yD)J0W@TUcY--V^jF xehb`XCgD7uH60knJjus6Z8}O%6)u@6c!65nfgji$cjDvJ#tW3v-$6wc#~%cZxO@Nr delta 1093 zcmY+DO=uHA6vyXnvT4$MZL&#r5t1g|w!2y-X+gBL2t7!tR*E1czBL z#EP1TIpWXA%GJR}!op3}5398gY65b;fLDO06bMoExZLX2YXKiAp@0{IErb8LyzYL` ztyf%Egj^R}b}$o|#Yz7N^x|XxTx}^Z0^s1g);4e|4IKxP{+bq?WNj`)8dgH3PLp!^ zX?lV}glLV>RES$?jY~a)W8wTiXSm5p{MV@vXRr}Alp^5g@D1ggzzdOnWfX8NG7fS4 z6*)o=?Th9ijWf}FcmRa36d@oXL=QfQTHwLgwCmtbbOLfXrdhNeWAhQfTgY)t3l18dUY8yG|t%$vn`77lmbIgO1 z+ll)m^X(^?<&CE#dr3bdnOi?EneUmBoF%>r;;d+sEza`>F&{2T=5V(qbGSQ_Ib20D zU%Dch!`+qa;F#`yO??QQ+AIAz{|XnAmbyu43-~Z;!8v@Jv_asHq^&N{Q3rD=OYNW# z1sqOUa33$FY&eZosxR?H%2wY{x&`b>>i9FI`8p_HU0~d3SBF$S#2X`qrhL?J+~`to zl9+YHRT2-!@Ck`4B(CE|O2;pT<}1g@0;rhna0ok18;0>D)djq6+RAzy*UT<8q|+b7 UJ@MYuppIWnTb-mPF7wsD0rYXID*ylh diff --git a/storno_cqp6xx_digital_xtal/Debug/avr_i2c_driver/avr_i2c.o b/storno_cqp6xx_digital_xtal/Debug/avr_i2c_driver/avr_i2c.o index c575c41d55e43599c465164d3ad4cbdc61eb386c..98525c8c229ad7fa8b11b3349bc59c826bece47e 100644 GIT binary patch literal 17616 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 P$zDbw&XJIrWbFMn-`6_j diff --git a/storno_cqp6xx_digital_xtal/Debug/avr_uart_driver/avr_uart.o b/storno_cqp6xx_digital_xtal/Debug/avr_uart_driver/avr_uart.o index 62225ae5e540e6eee65f8efed90427f6031fdfeb..2e9a1003c895124516aa1b1cea24a50871d3b5c3 100644 GIT binary patch delta 2123 zcmZ9MZETZO6vyv2x3Vm7EwOQA0&$dq4*k;(G1H_liEx2XD4BZF8A`oJN$Rvv> z;8tcb7qevbFlUTlAmPJ|8n9vP1BuLp_>xREe2K;Ybuh)Kh&ly~p#RgIMdMAMbAI>S zbN}Z)xA#7CZJD;Am>y4+H2Z2t^wr*!a=M1qDfR<>si!M@&d>#lzC3y2{E4^p_5GR5 z^-R^b^_f_IT|Z?;`i6ddrEg=P%dY2|mSXnhUa~tAq|^>Py(ydXMawofuQia&Wacux zmy&(Gm-qGU+P`GzLh4M)In0Xtlf!?bCK*oW@PB8a=g!QhypUw6bd~ONmTXt^Eg{|` z-nY=FX;-76qUpSx0`1LH+B98GSewhCw5yVua;=ap8--PdO*>4*Lk`n$*{D0$YT#^e zHpjpmr&3xgyTJv_53+-ZEKEh710@_Zl^a^U5QGHlLDtkR*1+U{HNMD(|F5B;QJnWl z`nSCMHH|H4)pcZgy3!4cd$pr|T}MZAEA8~$)Z3}cyHzLXD{oYL=tkB~yZq@Y->Vvf zr~OfH0t@vihw9=Lqj~6eKPLzBzpHLQ-^f+!9{9WQnBWKCEASY3N>#z%F5F0wK=d|_ zu0aIbpiH+?Hh2eTELIA?Y}{CaIPDDt!zSL;i>MANbxWh!e2sflkgS9_X__BKVT|aQCMHM75eW=9M?pR3txhNPxvh6 zP6_X$LxsWeTTq^nNEiy=3m=67tMke~rgMcs8uBe^&mI zoU2e?WS>{Av!yqL&+<*HD|!akaI~m~FJqB~$jzc)D1mt~JQ_EJTN$1h*hAHk8dO*x z35NL1_%hc?Nt6`S6d4pN>KV;@>h<1%!#nGNSK@miw zvR8b@nR&0`!n}gJn4!p`tA$ypNjMCCP`DVpR=5=WsBk5ClW-OI39WjvqIaP4lngY2 zyM^xq?-p(WCx!X$_X|G+9u$5UOv0Vu5#a>*O=j7KV`NCW)%|njA;p)F1751_-wAE8zBBjdZ@&*bO$wA?T{F@mO^3z zk!>_<#r1M>m$9vf-9_um;`TOto@eM-nV()S^XM9S8zY*R29S7aqg%o6&wn)b-$U|s3xCIY5mfcPxa}v z)j*f6G94}Wi>tJ4D(%WxZbm?e(8JI?CE5nG zPvd1hXTUs^s}ur{!}vBZO>&u|c38`|Vw(;s^@>ZWfbe@-sY>AuSl=)+E0m%_Wo71X z*ypegaTb_I$$TEnV`IJ(achKUfu9g=gU@>5F4Wv4yb$^qgp1+dEBqI@Pq-27I~YT{ zDqyTN=&`EVOYVo+MktpIpyf2oFT0gmA-oi2o)jKNiXFm0^{Vg%8m$Vh4xx8IG$)aH zMEHAT8x#Hl?OEX&$b3zBEwZ@~!_~Q3x$p$t8w`d$@N5^&EwtN&f1u65bfy*lzlf#< zd{uY>=SC#w>;i{`FQ8URcnrRG2yekS7YSnvt5w1Y_^cD2K3;XGVBYl1_kin!`5ZP0^Eh}bu@A53d|{r?Qf5@;!YhTj*c#z#@Z-X9 z@H(wBPCzX>8^q86eqMMkc&jj9LfeHO0QU*=m)|AKm&9)26<`u>1Md}n6#TAmJL;?V zrNcA(lv&p5kgy5;SHe7-CD>gt**koYV-a*XI3xxR zhzR>>U(CkmABF6s2}oS%@wE0AI^sTq_eG7Z&rrT5<#`)nopi9q_Dsipx|q&_+^FlP zQrp&RX^!2hyQt5uM~Z#Wyhx*V3cr}^j!eu*=`1aQTuR-LjkFhX6MYW(CY^^oL4jmS zAE)_{?bMM>d3=~=f_5iu&yP{1F4D(ITQ|@#*rTLtQ+fr}K^~%&kUg{wGD1VOsZawp N?k5=S)Pq4f&p#m7I(Gm7 diff --git a/storno_cqp6xx_digital_xtal/Debug/cm_msg/cm_msg.o b/storno_cqp6xx_digital_xtal/Debug/cm_msg/cm_msg.o index 0c18454ff62ef438222c2f5f51e756878453df5d..3595b8894c71a19b8b65fb0c0164af1d35f577ee 100644 GIT binary patch delta 3340 zcmaKudu&ui6vk)n?!9!kRJM<$?7DPcWUEktwkSk_D1tmJVn}>dBM%X%0)ip}QFhy+ zi48)_DDeSC(dcR-Y8Fj2QJbhl4aOHf{!uq1Bx=;u1PzH2{Jz<<_5S4~bI)(ioS8ZM z-E*hiz3}nHgDGcGawwC{kEmfYU5`A9u7-!o`)25o!SbL{s<%8?u6bC0rmOAQ}pRx zy9pPmVIEsKNDY_EBjx(OzW&M~m2tYaqxU7fXv!zLw|{^CgLWl;$gz2*ODFVer5^pE z)|1V&z>?`3wNg#kQ$@YCMz1s44REB?cuXjz@3n>)*q?HAk9j36!s}+-2SES1yh9l+FaAI+w=60A)uhHyt zW9BMvoVm=a4LWMCW6Exu+2qB|39l(s;O=Ne^M}{zG&m+V=B0cf)S`4C78;A^`cM$h zK*&+pJQ(x>Dip3_lyme3HvCUi{bOU`} z?V1L>X;vOv(Ht80Tw=|tt*ch7-m&%edsg(U**>*>){KkQ#(UNgW|%o+&o}o)dh_!U zUW4w`R*H;AlUraT!qZ_J&;#&qgB>sa8)4(Z8(VjQ@&P}g@y%xP1(+%cED`9U%XUuBYHR#otO+Mc4W4`pD{iO0r zc^Ei#l?1F3V9r@3z@tilN0k5{MvPSg%tWmc;I&|@gv4+?lVh{0z&{ymRms~dlxl+` zh;NZ?DtbT`Q?4MjN26qwtd*i-)fg)0Nz7dE7~w^}c&no9$z-eXdCFQ{K>4Z%P{!&3 z>*<%|C}~Iz*bEK}@ASp&B8$HdOm(T&L-aS}fi{2+UWlSrY7aUy;=Q&Poe7cmqX(%m z+5vPj;}4QWxo60Y=I+MT=lu$-N7s=2a>tx(+@^=kO-=o|(^wQo=foICsg!UWoD;st zF-|n&e5p+?x?C5`j_75vmofJi=kWvB-VrXEPovHHXLBmLFrR{dJoaJCli*2Y$-j+^ zGbh5|NoICvGlf|u3nYf6cZ2YY`0+c1x4{kyvjPs0Ma097!c~d`8nNJ2^TzmOp2fpr z(|C}_3A1uzK4wacxde8Sk6D%U^QaCVGmd^1-W(raAiDi7-p-YvH-D zKMK!-JtfQv8xdy3{4Km3)AwTqF3dus)bwu# z&k?4KR|@Y0FBWETEfp?+SCXw*czW7#8NIbxinv@NwbY;4g)r1b-*|H24SM z!{C#`ETWD-Igp!A;r1d2F~OUd90u13^9!kWOgu3eMYSN2)x}azBJW_ZrKQpQ(-QIK zV?~WN4atmq6v0J1(Upw2U08dW)rJfBOi lUdZJ1p!pPoSrg4)nVj?dMAMSZ=@Vu_w$+^ delta 2954 zcmYk8d2G~06vtAiW&F^ zXxE?_*oofTXAHcC%zzm>=u-AUV}xB^oNg};VqD%2yTt75>2WM+K|gBmxbd{5YcKj! zdG6-hXKu7ZJ3NaSDBWuey>>&FWj1NEnJ4UL);7z{zWK4FV@zdmz1R(613tr6#i7f} zE54}hlJ|XMM{R>s_)}Q@rk0a7^gJwqCGF#GT@>xg`2AJ3&X!qQfml5|t#KlKvm*%f z47kjWtH?|UM67HKR>(`i5;+)%%B5gT1_Cpv*N;I&ghTUtBZqZLS*a_S;QVCe&Vr*8 z3&Q2b`a)s9!4`gh&}YI<4vTVD-)53;6Q_I?;gIYI#qLsdb2tQJG&}-hr{`ASxoxE# zy0O*-yrcL&hf6RF3-+tV$Z6}V4+k-}dt)tPN5ZLAUzev^&#m0!H5_q7%Oe7VzCv$j z>y0(xV5T|jS}7Y*D@zI^Qc~C~_ZGHGTV#P9FNY!zXWlFP!AfsYyo`Amp}C;QW;0t(GAVxrnI)oE2UNPQRz$Rm6!~n zJB7w1Ah`|scF0oYR>(@_wU9A%zgHi|B-K6>aBwU~i=Ssf3!*zk1_`)&1s}K{Or7==WU+ENB(FmsX2iP=I1c9S zembCyGA4a(1Mfa?+Jp(OJas_}bU&(`jdw#qdTk2Ei1KW3&WE|oZQxx~<1D7V1_N3f zI@w}>vkXcQf%r>YfnK28PA8@ZjTs{I(ODn4taOs~aF39&mOfjQnZa&l+IK6{-a}rl z>D>#3Pr&v9I#aqH@@4egW{1E`DebS)uA3cEX3)3Dl@hD$DBh0^%b;4Md8d`0$}Ki2 zwrW>u5+-8koR|k0S6&U7Qr>9gSXILL)5tefZFZeBR!_6VvZlHwnnlPj)eC6Ol2N4Z z%5&9o(;cuh;2;)fV?wVZCmPr*MaA$4}T?hE5Ct2+m*LK?o(z3 z9470l9&u2O+@JyrGP0(oAKz zzD0Q^bEAp5{#-Oa)b$QIfqMg1Qb1d^}A57EhU0RS;whz(C%-*Ry z{#-c@`863Y!uB0H{o{~ll~a&E=kc$~Jo)c={1<<)T)Yg%zjcEAuQGqUeij6L$RXwJ z;F3J9P~HoBeI7R|<8P-KoyTL8`^_|b1+FQ^OjSOH1-In!ZOU2L7m{&%N3M^#sO3em z8k?2-V>d;aOI8|>%f|09IV*3+nu?k<24~)p3$cbYQ`4W_ACg%rYBh?zxzc;=|F%ESs=$8<;t!on=#{yb?T8 zc`dj>nU^0=*2_;(=EY_z<9BW5D98D+oUaNiW~nl7utJ$9<#&WZ=YTtu7lJ#LJHQVq zuLo~degOQWGK;5Mc@KCGIgOytLU~pvSUoQ)9{?Xx?gziF{3iIA@^SESWfsOKWc>(z zrR<0OjB*5gPMJ^doVU_ke*;QrRlSS<>9*CU9Vo*MZt!BMF+Unf#S;OZBrA*JZr~(h zpOnYqu3abx<4w-v6>=(`vYqlw`+XY$(rNOWUh diff --git a/storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o b/storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o index 0c4c947dcd76930862180c3eb0f8cc5a3f8d266e..f51da2e2215bfa153674a9441bdda2f4ba5f0d16 100644 GIT binary patch literal 17420 zcmche3v^V~xySdJNkRf4KzJA)lHutyF##W_yh0Kl8c0k6B8?s=$s`#&d6=0XQY$22 zc|`(=SV}={X^X&By!M6EDt9gKwYBY4Tie@q*&3`~SF0`bYI|E{>HYur`S#470k5vE zb?;v5%=ztafBW0t{`TYSoSAGWuUPCjjxxznH7b!)>goAPy@kRnwZg?}s>)X{4!kyS z*6HaU=vH5J&J^LA(p}U&?E>e_X=h52b7m?ob#me0?Sty2lEL8M_UrCyQ-97CxY9bE!e8=hT?xw9XJ=)^Po<1kr&97W>>bS$Y>ZRKy7L3im zJL)A}@;XZxCrTE{ec@nzT-Q+d;I>Wb#iNX6f zJ+$fArsG?79Nd5Kv4hVX{KDz|uT#El%f2l~w>-V2@8I4;hYy`NwByaaZ#;4e`dc2_ za%{`-9Xk%~KlIq4XAbq8+NJGm+p%xQ(H&3k=sUFc=;5O$j$XKZ^7j1gc{?W_nRMjB zBa@GGW2Cg*zI}a1`=0LWJG%GS;bSL`ZG2Cj~zJn__1e? zdC^;O%8OrOMAgX;oo_z)kQ1m|P^nHP#^I?frF?odrRjy1ZI)i@-RERbE*n->Annyru-wmj!#|UeL9*y)Sn-z zOviu0(@=n~&>dfdPv10Y#6OW$Gbj5mT!9XF8u?U)hL@Xiv(7nQZmO3{_j1#`T$Y!c z;pK*VxtU&Wl$X26%Z>GN7kfU8_i~qbWfQz^`wN~&gVM30d*RhN9rI$9F8bHp0-el- z{%e03@4@w~7Vp7aFDE^if3NP3&ue=DyX~8n=H(W8xv65gY#RzaPts2sOf|9YA z07(UU^wJiyf>d65Yl@E6_qyTNoTfk1^=F3u9O5~VRue#7v9q!}#f~Ysbzf@1P@j&m z*M?U;J?}(ZODd*M{#jh4TXnovGe-Uv@}a&r@Hxy`gowQd%BD$AVaT|Tv_d*M>nThC zWiz(f^hFJ)sx#VQ73Uh1<#+-j40EhTXvsuSA~~<2e56;PRe_^u+9YRk4|2Je8PRAK zT!rD=2gw+x$tfD+G@{kG{7I1)Q(l~qzhLVZtFguoZD?J1?s+&b*~3TEjED1#hn~ap zI1`v8%Ry(-u9U*XI@E-D|GQ4pnC#mI9CyIEeZUD0IKF$;nCvwJ&SwUkx&h}_2-Zur zn^3LatLD2KN}pIu_rpakG{hP@7;2pEg7cmpO3y0{WPiZtydUq)d!{!RP{DbRW0}!3 z;4}|7d9BfA<@}YpBEb-Hml&^AmpIONY){?@FVSWucnvlrhwc?@f?jYMOk>G|+vLJd zVsJ+(WKD9~x==lLxQKLAThY;j5RA!a8F0b_4n|)b^lj9AU*Sc6J@mdqJx&l$#EJGR ztE#WpE48K%t^3fXvF^(ZoZmcc&9D_cTlSQr%F>TfndN!JQM;WgaB`OCM$)VlnWsDt z_I4)Q^9r`Y$~Ux?7OsURXLh2(vnds{c~%(X#Fdo{-M-|Z+mG$R8@hdF==2EeLG2kR zGcmG8pf`=3kP)EX3QNz9W$#o=kwIT;DW1omcAI*p(eoLT9cWNbdFN$V^ycRv-JjSI z>r~Dg+^Hr_3^%S*&VTYDWVWpzdzJnauk>Tx=L@|_ooOAhQN`izGntj0Ouf?)O`eO0 zDWCB($rC8M|XIOuY*ZgkA{9!L3x?p_3^#+m}9#uYjXvJ-CThK5Q* z7g!CUR^FA$pXo)%hwS)-d!F+XY*R@dPfXOr@*9RlbzxjL{i5t7-O18u`ZC>zeDLS+B2%WpWByD69Gpx86yl)(>Wn>RHIRF z)GY?7+jx#{stbO#{hqi|@(7$q^|p^uHEpujpJIkk?fipa45haHkIj{Ywd6P(`KNT( zsQ+V5eac4u?_%PeR!t{-YHNIi&Oe<}W1X5emNJxgPEX{M*SBBo+z_8Hsf*vQdZ&GC zp|R*wMR6UUDvq-$PxY(}1zzV8n-R|dO!(VDr>o_DT<*8Y{nGfpB!d5kTNE3pPnDx( zpYuV^P=(i&^uj4DyrNKruB&TkbvruSn>&N8(Yn@fLuY$KOSr?0#=08A?RD1_7S+Yt z+anDv!Ejq$aBb%t{ZY`|)>V)suM4*|M7kP7ie|5fhOe4^Rk7RH8D1Oe^hBuZHg|;E z&k=S7J7Y;gIK)4Cv?10Ch2USSQBe(dwqCt%og3`vC~V+6)@ZB|uW<@nI4D+Gi!QVM zfC@rk{6G%l#~d9%4ts^yG8p^yIW0r1ckXmO`2Gowe|=Vla{O6YnfUZ)rQy?;h4}i@ z^rugk8i`MrQhz8*QHFs~VrwpIPS6^Y^=AN|eyx{h>%HsHI3y^{!KafoQZtPYAt#%C z9pWc9X!l-LS=q?>bS6z#zAel1i6+uS&Yl>L$&QwLlCip1j_zl=uIu$VjS{>*b29vj zDjEI^-E*&0e@$luN!f+v*+>zE%#9;xz}5Krk}=puP0t_ zy-$u6t2zEk-NOtW$a}NKL2`$dJ6U;Jho3%+y^wpQp4_J$8KvWU1wXyMEw5SPR#j9i za;r+JOO~saP_Pk80W&NbidA;SI=W)zZNd6TNHvFI?#hztTDN>{s4eC;b;LN0sfOxR zL99!4S7$gDDho9QyCSigP%IX1YmSzeb5*Elczq~#cSi`Imz-xhs+LqOt8}X>t7}VC zO>JfMib}Vns>-ci?Jln@E4S8(8*U4u!B%&9w7ImswIdRWh052)-0DzsI2wb;HOsW! z(ux~l?&k7pcV!jT^{O>>>1!mSeXS1OWj9zW4Mt<_oo(%IMU@YXeh1LOO0}8E$^xP1*GA(p8JJ-1(P62dFPn{B(I*E?CT^)@uT^U6Ojg#1! zJJk}*A?%rE0IjJct*(m&Biu3(5$T++XHAW&>dGaUsBUFVsj7C{yRfUS4a<}*FGuNe zS5HHDCu4vchXA+Prk@B?JU9$li3&$+Vx3(Lu~orHxY3>&)it$lZKb=Yva+_KvZSoM z+MBW!<*Ujo-0Je0@>-=`WH6SL*K#eHfatmHDN@bSFssc9S)@JKh`QcF3S-%@E1oxc z$m4F5x`D^sroP&wT39_t_6J91M=cisfQL}{Fv6&?HAK4^I zD=JHG^jLMSD?=m{rYri#zRFbX#C9uP$099lZ;N%dN7QPpg2kPoJB?9#ut=4gGteD~ zuYCr>+V@1_U&EapJb5&Ro5NgATvK)bOHo+}vm&uj^==Z01Z4x{2rBM}7$v0-Mtl%N zumeOWuD8{!>8#_^8pIi`Eu_?v($eb!7niK6cIUX5GA^d7TWgMM?(D*=3un2-*IYB_ z5^wT)?-4&j!UKE5^z4A|YdApRh!Iab$d=^z_xnn6(hlIX#KW#hJlvve8_Tx)OLEe8 zq?P1k^rn~O47op}Bqwv{kdmCNzRZ%Gp}Vq5a)#|5T9T8!e^^P*@B`T@{wFJJ@NgW! zWfBj`u)B+Pchl~E+C7kN`^5va?N`85#+`@i^VPRhG(s(&($t?nie~_Ro))d-mm|Ir z`JsXLQfj^tpgv#L&$IFY@B%A;3E2C-pTa+XR2(n!@~oR^HPxRqb%W@0Onf}7TFH+i zsw;Vpi;qWEEBRIY#e$alRs3~=AR5s#lpp7Sji@px16ywU!9 zDfx`V;OO$PlIL8^#f-izrTluyb3W!Go;RkHH>Kq7Ny%HMGW=!Zx;0hqQrGpM!h`Da zB^pXgtMonA+TnJFnl-Nvb+${!+Ak6(1_+Z5mFGE%dLsKMXDcP2#k>-0b4@J z7URp+;loR}rMPo$80Ma2c(U+J+@}i9!F@U|ztp{yJP992+zSkIP8yxLmVB|rT1S?} zD$3a)((SnX`6RyVgFpDLl&hC3oE*TN{`*7ky*D9>itz_mM^aYh=-X6m0Z$Y)5&0(sKjM zc)* z55k9t@K+&^3O@nnGn)FP(79jude|Qj#!Y=mcqw!q7QO?_`O3Oe;oJ9xN1^UZ!W_!q z3fH2ocZBP}?+Z7AGjY+*uTYo2N+1t{rwhLYo+bP=c%kqEXtz>02X{WlSoiDDVXVp9 z(N3rE2jF$WW8wb>;mcvCUwA(F5u=a$5{x$eU;XieSCa1(f$FxNs*m~E{U-VE*&-U&V=ydQj0_#5C~kP)}%(cj;Yx!EI~5@x$^k`afO z;s0sTXMFxHa{Q5@J{0|#(4UFd`Lx5as}x=gzDt<>IzUFddrM zO%`_u#~_bc{CVN6@W0#Q z9l`~e7kw7*75*XOzu)4o3qJ-w4_o}C@T-u2$6{pTdn}sP43qj7Qrthu`rHC$`2^7+ zPZs8$%stoa)w6|%;=aJ*QsK*Rue4a7TVQ`FWUk1`4Z^hFC5$kryM<~0K8v>r=itu$ z*X++<5oTYGSp2v!`|@3jzbDMLp0oG|!k9+tWs83LH;c~- zb8AhDRQ>U=ayN& zKM-c$U$K}!B&H7M=_!lf6b?Xs+TwSGXF`q_kh(6}kBLJ&Mc{0UM+!4;eCEZUiNd(4 zD=gM$ISeT0+gy>87YcK}EwgyJFz4GUi`NJrhn&w;({8&k`>W4#Xp6i-GRr=0w{F#Gtn#ixaDgPhMiV<%0R zK8&<@jBp*~0gI;#(+;0i=2>=~Fn!?PGnA8;2-BY`i))1$|648A=SkG1Kl(f=tk08R zJ}dbwH0|p1B;+%o-zReNfH40~eAwcH!nDI@r?K;t@O0GuSBrlrOq(xT{BvR2(dSb5 zPzW7;E(Nav|F`JyS^0r5{o!+$?aqhJXyF^c`4&$T=2_wji)RbhLO$2xg~DvNLYVDV z3Fm=tu~?sJ;RF5Q^WON=B}{)lFHAe#!qn&Up89NSkEO%0zTc$IQwa+zvG37Ld#PtvWbL|x2GIRJ!$}#^rC+AQO-}?;FM@bn?*`j%~eg4!A{_YHh-dQ%ra!c)c*kZKE*z$Y&F6GB&-! zjB~#*WALCbWB4c;{!ak&*+gdDZwWI7Cxq+4&j>TlFO#Le{~=8OebA;LVF~XOECkX2~E6nkqDaFPP6P$~S`Rgg1lhg|~wFE`U1y;F$1U@Ot6>;ElqMfcgBQ{t` zKcSp!k?&u~Yru1aJHdRfLiu)ZnebP^Hwd2q^O;DU7r?88UkBF-zYne#=HFH=!rXuO zOk~{vxKo&GpZ#>$K_vFg>;nO?*@yKWB|40|*&jGZ&7OP@<)X8ZEbEB#$?VU)md-9R z1CI0nF0)rZ0XBBNMaDQX9mi$%?H_}U&P!zUi|G|y@jbjSdUtCqSg#84qXzHZVkpKR z))eaR&kO6LQB~L(iUbQOEwsJ|N__E^T%PnDm{pYg^_5j%*-ZK-%ThW2kAy4*%ZC1b z$}4K*4+QW7tfqE!M{}^gz7szcvWp|_4M}hy7X7on8v_mlLBp_AG!pA{yV zcDeti;aVsKFHKWQ&tH+VEF0HNxNLhp$gjs`lCf6-fo-pLx_1r;K+e6-*o%N|duNg7 zUT2cA*9?JeZyoG$zYE}E9E`pDz_z_v$Z-9bWbAE(z_xc1_5vsjKt5E;*xyHSu?~G^ z`U5iDLrr2C(?MLey+Is=xy}Q)Xvg^XL$GacsV{NvLXj@x{W)B=y$)=$j7vim1t8~EWbB;*n>s*s1Fa`l!7vM7f@g16}1F`xt?A>J+AM&Q`DuC_ZJ$PuGgJHW|Bd|GG6+f2ku61?PR66rcE+>E`V&(qtJWDWN@cXOlzQI z`?qc`#sl&IE`D8Z`pZX;)jd@;&-=a#Vx3G|yj#;lJ&>=|6A(;+d=f6&8;Ofk(zaJN MRVn_Px=9BA2OwburvLx| literal 18096 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 diff --git a/storno_cqp6xx_digital_xtal/Debug/main.o b/storno_cqp6xx_digital_xtal/Debug/main.o index 660bb9f89d09ba7b1f02e7a6d47087ba5672d73e..c372dad2ea3afb177d8709756a9282416a177da9 100644 GIT binary patch literal 11228 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 diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.elf b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.elf index ceb5be1a7bcd1ae6018f63200e46533d907c5a77..2269b8e2bc1bb0f112deac7ecd4890f5caf588b5 100644 GIT binary patch literal 62780 zcmdSC34B!5**|{I+*vZoWU?phgvAvh3#(QQ*??$BViH`@A&>yk05J&))@njfR)G)! zwJL7ax)rspTYWWcZMD{l`&NXY)~zm4sam!A`+mhgeg z;bQ(TfmubJGR+IpxtJ#PrvgJdFaE8@MH!|I?wiKTOQGMh3j_f<4 z@9@6E`VQ?oq;G8Bn7+|{qxy3DM)qC)+u?n~`iAzUjUD;$?vMWR$i6rBK9cvw&HazO zA^L`Iy=~e(zWtw%eB(OsZ@u+xzpKx)C3)-3`FHzX`F!BH3m}``a*Q|ZWg1qf0*@coR+S%q`uCc1osyBxoz8; zZD((L{qwHYD-TQ9*4e+MANSszg#P_s^k34|dEvXCZt2NNSeMs%?&aUQ`?~u(dovTd zAhUbxzOD3z<#{phvAkw+fnc6(UA?V6`TIZrZRRuX{qB$5>pp&YUsqZ|-<^36cC-m3TxA~);AGze6(PE_bZP|@znLe7njmj$U6njqcqc#gE0Kd8_l*raZjQ+EH=f z3(>#o<5iV;HT`8Nb4HeQyZSaEl4g5L>9uxr4SX%EF@pz0e!)O;->R>R)@! z_>)fQN!T`WYs%J?dsDWijm_&V>aFe#^)BnZxOa2!&fZpH)Be(wLzPp0oqyTh!X?E9&fVC#)Sa_JFdtu1m)D&93gwcUE<;xLny!*tVsoxM*ws#{-8S zxN=PKKu`Y4fr7r?eDU$+`Nba})z{O%d6Iu%OaGSM;v%+#gl+35rww%Wi@sIpDGt^( zQDLk}2kV}su+;{Zy0y4S)fp+JZ%fbgqTc*x4Er!E`tI7dZrtDlUC=ST zD0OR5(b0XKy$MCMGreeH-#h)^zLByw~ATgo)BH#Te~ljDI@x} z^b{4nn>Wz^PH3RA8+~qFN@s6T(UzWsqIEed2Ksx-P)p@S=k#CvMrTh6@X{jxw$!c4 zrt;X@aoPYQT|Cg)3yI#+qItb#h;w-n`XTD*Yq6@Ux69h`?m+&IR|ZCP<#&zAd0^lp zF)DxX!07yw2GaVb_s{DOK3m-1(7(Rxr(OPM6Z(pQc%GfE5$jpDh=grBx9-~d$X2Is zJ7enm;_?Z1u6}s+?$s}^eRuVjtCKDncFFjzG=Z$+dez5kN zwJGZcU3SE}W7eIxZtl9~@l5~mGt>JO_31OTcTqoluk zMCSHQ`@a$bBmMeq`#(?U+atC{Au2MChhK})T@$;;jPoCu-DmCaA2^}!ebLp`mA~@i zK?AGue~a2oUA0*RLL;lI_TMjL-q+^ISnP#w^ZK6>tM|Pa4C9~eSvM{X?Py)M zQ}%>yj^C_R|ADpA=S$%8;8lZGo!$N8?#27t``!EI|E&#v9J_au2%Z`7{PsQTukWha zRFp8VuZoK-&J8yjW z#!ElC`gP*#)?Bsb_B9W!*?i*_x7>QmgSTw>+ZAtKw;%Fru3fWh&HWoT+;a6Tci!^w zEvxo#k$To`xN5`g8y?!Q`IakgzxDP9Zy&yX#QKrz2W=X9+pyb)-!|el_9Ury^HrN~ z-~7<#&9`5%>(*Tl?&^H=ins54`|kctn|E&h`Hc_UxN+AtyMD3jkzEgqme9qh1=his zJx3HSC@&nW$uzPa;_+533^aPQZ!yMb*{Sq3ZX#zUmTa#pmX&?Ygqdzir+4p1dv3(jTW*ztwZ2 zYSEj~repik*P^ubX3gPy1Agg*gy^ga)&5E#GR5h{QV_EM{FH)Jbqu4v~Id&(}RPZe6$Gp-b<)RQcX8kk#kZ=PyJV{5^aBQ{tw*i81K> z*Pjws?p34H^)deIzZUdACQjYk`A#f8Z~tSWa&NS31F(`9Y(B7Q zG1vlN6JoGNU}IyjCSXHiu!X=EPf8~4_{+XPLL~2 zbIq$(Do$^SjN7a7dpxNa>$mjx_pHVIy{?FTk>g*K?>ec=)s@jTE9W%d;{&U6 zw)vV5r0ysfNZ%glP2Z8ReOT{deOB+nWd(?CS05 z9bHr4KfL?s?qm9LdoC@??^#ncW?b=s+#VNbyC}C8Snrym+#U1i;@n{Ioh{k;0{rRb}%+)vTxQvRZ3{&bZD!A zHrjRd_4g0-?-ow0RHHZBUKjdf;g0lG8LO^CyzWB0Qg?J6$n7fVT7^#Ncu5N<{i7cm z2cU6L-v@$GeJW?4Z~B1~y3XjjRlov+6pYtzY!-3AO9-Z@Dv9|ll zZmy=*cmK4TrAgm@S5@@YG+5fd;o#CqR+Ab-aZ2U549Znv&0 za`nj)qda$^Jd6t0IeUbwkL#M^nwse^f1a?-e!8=Z`@^qAf6dob3EK|M+l93}Z0|4Z zD)`sGcJC3_)jU*nRPXqA$38NqKetVakNUP{Gux(~iiUJYmv=e9Mjf`B8eGj$EMdhrPU2 zgiCJhEvpk`g2Og+bTltrIVryo0RG0}a#=5?SyGc_wSb?2>mL2YL;lf*%Q`K?k<+mC z1&CaSF`jclyR4Pjj{G3_LR+za#{$0zU_YK$;JE?^7RTUu51u^lcni;C@f>X{9;Eyu z=CX>1JNi#X`chzz;yF)BeE&_A=k(D|{;_TqrHLlGS=Ny#oAXDVF6++|96hs8G1Tq+HG*(idyjU~HzIun zFt^{b?r?R9Db40!ZLgQ^o}(`79H$fdm=; zuq`)`l(S7F03@}|MEpR~R+>m6kn}DSNdl6w-bB1WGJ7O46nDfY6-d@LQ^o@%`&tu8 z29k55nJW{>pj%BO9mwEaX0A@F(;D(?6X^mn^fxB54#=?Io5*?~!=E&f4M0XbXCiBX zjND@)eWKIKeceR<0A$qrCh|uhqdzl|$AFAcgO#qYKLHt=C>xeWo&a)4riuI+$e|-l zyYa$DPj6c&v&IK~zY!hh% zl6Ss|v;xWRHjx!T3O1X_Bp`*oCUQKGi91Z>I3SaLY9d8ICSPYFsVM1`n@uDg$kbn$ zNCuE;_nJr=kfZ<0L~?-~^LrB+1>{G6GLg|hj(yrhRslKg6%*+Oa{TKi(g~#KLlfBw zWcoi%q!&oB+r{RhTf*f)N>WT@8<5f=CbAt!*&!yf14wzkiCh6>#*a+oN+2_5n8;N? zW}RdrKLt`T*F>%ca>8O0Sr6pIRukC(q>@uxxD;JLW_O#&4M3_cGm$mvomTbbCej6@ z=BFmI7RX6An#d|3wYQnbB|z#pp@ywr3Z(u)6Il&p&hJd56UfPbGLd0uW2ZcABEx~4 z`jUx^0CL)16B!BQ^uL+NdT2i51BvL-FCn$ln)`_1Zu0A2E?) zAQy017p~=*=qW$`vqW_JsRVN2ZWEaWb$~7vqfF=|Kx@P}6DkI@Rur00 z8K8AystH+Xoz{9$Y(fIi263VZxd3exb4+M7pv%NO6B+|(lQ_qO#sb!H6t~Vhcpl#w-6G{NIUEFO#en30K116LR=nC;$ z6G{SfrTCKx1pr+oo-v_ZKtC0GOlTCKtHs+URAY5o*N6{HC^wkH@LZblf6#q1# zv4E}<-r>)SHkO(9_~f6Y>FiMsOP+wwM6uS+UH7{D7VlD@-U6 z(DP!I2_*q~L2NXk0H7Deb`wel^pd#Fgo1!x7PpyD3ZPfSuS_Tv(5vEM6G{X0SMj(B zr32a{o;9HiK(C2CCX@+iuXxLZvHMZ;%#6eNwh#0463GQ*a|Su=IyB^wj2=RJ{aZYx*5y|2qQ1o z25T7BkS=RI4`fvpEW=42s{q9g|6L8$W)-;pdsSdR3cYs8`Oxc89?QD$vJQH2`7UIN zl`sh|+@GsS@w&XOGvzmieJ*KKk;+2FG~kqV-gd8O!gI> znwq$snqJjxT4F!hziKu;@i!FSquGqaWTw8R+04Yt$nMo_R^m%!_h~je@gC;w*KAIr zi>dqV{fLum%pl9tjUdTr5|PpLS)OM=Cq2!KuiK1rK(PO~(~?lB$uptBN`4e~VcDbb zaA$u4c`Y;O2+Cwr#_Vk?bg`huwuI`%=$e!+J(h&n00! zqm&*iUHpPp^5b1l=JT2D5nO3UN;w8ZEL6VaOC60k;K$_SvU<`{F4aG_VR&HwnC27; z&m-OcxBbJO6hM|$^O4!*KFDb05l0}&&f1QSmBRk&e#&N6m`i1Ub??@!NM(O@Kdo6; zD*LPZ8O_=$?62-;HS11ge|0~nSx+katNVG)dQ;h7-7jd?mxBK4eo=D?sqC-rmo)27 zWq)fWc>>{RwwcfV$HQrTbK`|WcPC-&E*3`dM`xX&*@ZG>L?07uUR|wYqBqB)}1;Y74Lpg zv!2w=%=?mNy{R_Ymo@84-9z>j%_gM&gsNWEtUq-%*}rNwF*TX&9?d4DZe!lpG#f~5 zV(MPaCa3zDx=*t~6{CL7C7hSWq*zH`qan##+Vjk}-?IwwNk1O68pq!B{0gGppF)e} zeVDqe^w;rFsh@cEGIg@-B9AbW_W%-I-V1QIt@Ns}p07L!=*8X;aLfBHDoS_{N21Gn zoRrKEv!O!-1$z$1Abyf4$Dt|6mdReF76AW*dsc?{h8o67Y4Gw-N}o&VyJ>YSH5~@; zvgAZBS+NjV6KQCAd{&-9sI1eOwKbe|I#aw0d&MH0<7dlNMox%IMu&z$%NYXmJl%X>koLZonu! zJP1WJF+wc%d@2?fjAES6p|KmKF&g5rvyAhTVPiManA}!mh%8D!D5WXMPkW{Gmz2Jf zb@(8CIT{Nk6y#6>PfKY^@-yKO*KVi6o6NgqBFSF^Q<7LH+z(c{XwgrGFpwF9WXvwU4pjDpmz*9|LtR*vt`h zW*=vRzkwY#4O)1*GOPr|BglhB2G(WG%tZfC^Vl6hdA->VloQq$w;N92K8j5*tDRYj1-$5)RU27GlF_D zQfy{WPezK(3hK#7vDraA87Vd=s3)T-(v3lu|78S8Mw5sPvd{7#3OYqkMvQW*%RSk< z3}EmCR?lRw(q;wAOjcNFlv@wE^et$bpzlWJjF|wez_Sodb&vD5p>YQPjAr2;A69c6 z*$J8z!K2XD+)j*Q_0!K;Z(-x`T3REYz$g_%HM<_e9NlgUgtAl4gCGEQ4!I zf~t%u(ic{SoIs~)siffVSgL874Fqec<7mw$2R|fxjAnx>pg;1Sk79A=^8XfvmA90O zspeQ2kE{XEYHlj>J`B<9I{{!gNCljo0*$Wh<+$6~Yk+&Rn{oG9S;c@0BFe)euD`5Yv3vkQ=zZ{>)~!HG1%(S{#&csW@W zL3q%1a986Ryq*Sg*c)9N1%_fViNFX!alX9b=D2koh@pR?!4VfhvJ%*^(UR>1t7oL) zPcY|L_Td)KATP26aVY~o3L6+9TojuHTk21a%a22Hn4BYKaZC`4F=GClzSqbx!xYUG zHMD$6{Jc5pZE6nE!_n7JCZ&_QJhuGu(Oql^))Cn#k{THC9Va<3-mkUuu?YeCUm6&_ zQ|;g{VZt{Bdkj03<-$7#I)T|4 zB(wWLCc56jUG2lZ0u^8!0;G^cYss>;h`><@eJ~eht>CXx8L-E2cLiU?-41?$yBqsE zs1;fKzL?IHGoQKk0Jef#Wv=P89Gs84I~W4uvFy*7D|ad+Q^c=HkCtOUn-SlCk~Mt? zQd4uNVRSx}b)YGwy@S`S#8~>}v5Sj3nf*da%#_)gm9I_7>_?&&RrZ<8ekKMTmA!%v zdhF@Qp1!1gktI%e0_h$*0YF*}wVlWe9=ixY#-q@=1Q{}qhvF>VfIW5+ja%7bB;}V2 zTICB_(sDB_=Um59EoWr)iBC>40x6ciKtwOh63z#+64J8P+}5Be%#^@E(o=nULFw$l zR5j!n+VC?YT4)&z54o0diBt}xgswb*iO*$q=Y-qrq72n$6X3h^cN1dpLv1#C2LGW= zsXjvUxV*B-*eO4QE#H^0ZTU`Od3|?ceesR25BG1a1YzgM+55UIgi0MzjREyEW=!SXMHSH67Yv3z&Rf_;X&%eMsx z+VgG9KJ_%nBuuxDewihBh|rIijU{-H3XfHs@c)6_@vJ}B7?(dCBaL0eV!Ot;{YR3U zuDH>bJ%VnQtwW;n#9jC`Xx|8EuzY`n4dEmdXQ8q9mP;2sP=c+0GZ^;_X3&{uok^Ko zWJ6(?**6_`m#+qQ+cyt)x33jPyR*PFPj5$gb` z0IN+6X};`lrGN*skP;XIN)2iB#Y$cUFGYr&1O(rW2+DPOhI~yT(Z#w-@l#|dHWBJ| z$`8;_#6F0oO3|Sd9R_F8sCp@c&ch`}tOA!l4!8M8vobCRI2qmWDj=C+p~%k^jj)=* zRX*{1G+scwz{6K1yyVD}-Dy#2hjh7%|^xt2iLXYnFtcbIDQj z%W!E9urznW-<&tm{KNq{h^irTkQ}f-qpUNCCb~FE41SJPI8%thD59$2nX-n5h+`O% z1@Z$mz6+be`TluWRiRrzsZ)We$_0J_F0n8KJ+g8)Aq@)vuv?MP&%~w6aZgVMbTbk& zZUDCg1?8u)nR>KG?P~{JowDpzRt7&!y8v>mMA<;BjC%mFp}k^c#YY1&RX3l9w00Ms zj&@fv0Xz;S zH&NL5WFzAMfVGgmnF;tP1ASqkm}q6VPyx*FNKA&T01}wN5XK5~Guz5l=%MQGVOAYK zMp9LG6|3$8)&P^YA@?CjbNn!BV56IbKn*x@Rfe1y%Z;NAL00K`hTuUIqIs&ScZ?oP znU(x^w#|Oog-5=W8(PoJ^IZ_Q9+T6Ip5^r%5!m!oN9{;4u^kF#Dld@3{ z7kx}k5P~h5Z*Y&{8iDmQLJnC8a-?ekID&HxB-x2>06&uPtHj049X@lq44KpK1phn| za|w>RAKcgAMh}2ng!EC50yzt74l8ReCgQ=B#!39o1l2P$CI0k$nkO?LGJIUY+mkh;t(M}vE!$92`NYl0_NpDlu7(_f|ut| zF#JrBS3(dB7mK`ngTQe2#LJsurC@36vbGO~2DRZx0Lhb>>EWi2mV%7`;l-OeypOEm z@bLh5Uq1Emz$GBL@8H2z4kv2kg52pCYfvzZ}}U{y*T3HOnawa_8kBul+n_R`Jc~L{}^BYMrndRDgvHNQ&J~ ztt-@u#Vg#aIgcinu>hCmBU!k-2uSh+1lCAEcnI8+17NKJ+ys6@V4VVN0{>v4)+@k8 z;3EPX6d(v(M5P-Qz_43(Cd%R7v<+Uul`Wg;inP2{3fa=~X)IZ<$|Wt&p_U%WTLmrOrvT~OhXn3dfb{JvT7EzQ(zhYB{GbA)Z|5+}ZxkSX zJBMZ;Qh@Sp5q*33F6CR_ZS?IA%=J4dq?&CFWqz-6NmpK^W{-Cl*%e&~x z9~GbsZDo}`Udi>Ba6d5?%a-J~sOHH%k^b>Z8v2XMCH2-aDo-gxvWS1Bq1_6Qh87Tz zhvWF^8CLS7Q2?G%63X(|tmWr^tt`KAAuXRyy)SV%(LJ-7z{?7dmTzFBUQvKFG>gEi z3Q&3n6WNmoeclB3-or6l_!iUDJ{pHBzPDNAe#MF8jZE7w9b;Hs$%%CRbqRPO@ACbI z#eYM|+rG!iy{R~N@{cI|H!19fgP!E;8R54SfZQJ6G#24)CGYhePHXQd4rAJFbmhG@ z%GdWlqp$B${|8FK@_kJC4;3ep&t=VgL{7%Xl{}ux2NVGFuH=1`_?QE%un~7x@-70O zNC_cJa~Cy!sx;cZVN5=tICt{7bp9VwSe52v7Vk3!$kLS2yU&%p*B7AqFBFH;45Rdy z6HyAZrLPBJmh^G^?*5mOz!12V65j}<1ce)iCm>R!heB=VJZw!VSF#3O3K6X3ln3di ztr51Tl%wc~TO)7{YsiP_jaQ7J_Mz?saT3-WX^kvWqTs*}p|ol$N)jA=aq^J1o|XcF zBO-#8_8Mc8EI3TL#@J~qs4ysBf5t{W?J(v|5$uep*tBw{rV4f$*BEcwJf@}zwqw^A zU)l<4P8V!`ID=0615+~uYuGg=HLaHQo+;m6!>7b4vevSMsy1}x!D+jxJX;3HHD-vF zn#%lxL>J38(mh06&a!b@cMlVnsCJ#!#o!JXAyhsK<7SqTG79kCO8prlHd>sCoL=F{ zxerg@by(zhqR(wSL$9O62+!~eELeOzxABamFv92KxsAs;xAF1Z#^apZ_;_yPan5aI z#e1A{8z0YYJkGg|kLNZX=iJ7}a~qFyZsX&*jVJot#xwqRFs~LTp8S>Y$}i7t{PNt! zFVAiK#<`7WYCUAU(>+H&#}e?|#`7a)V+nX}<2hDw!pF6==Xe!BmyhQ*o+1_-0rT

5FmS}V(%(F6AK=3^XT@)pFmLrHfR_1ER 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 F{|1=b7cBq) literal 68008 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%0A;L!S8HLn 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 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> - 2c: 5c c1 rjmp .+696 ; 0x2e6 <__vector_22> + 2c: 94 c1 rjmp .+808 ; 0x356 <__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> @@ -78,7 +78,7 @@ Disassembly of section .text: 48: 1d 92 st X+, r1 0000004a <.do_clear_bss_start>: - 4a: ac 36 cpi r26, 0x6C ; 108 + 4a: aa 38 cpi r26, 0x8A ; 138 4c: b2 07 cpc r27, r18 4e: e1 f7 brne .-8 ; 0x48 <.do_clear_bss_loop> @@ -86,7 +86,7 @@ Disassembly of section .text: 50: 1f e3 ldi r17, 0x3F ; 63 52: a0 e0 ldi r26, 0x00 ; 0 54: bf e3 ldi r27, 0x3F ; 63 - 56: e2 ed ldi r30, 0xD2 ; 210 + 56: e6 e6 ldi r30, 0x66 ; 102 58: ff e0 ldi r31, 0x0F ; 15 5a: 02 c0 rjmp .+4 ; 0x60 <__do_copy_data+0x10> 5c: 05 90 lpm r0, Z+ @@ -94,8 +94,8 @@ Disassembly of section .text: 60: a6 30 cpi r26, 0x06 ; 6 62: b1 07 cpc r27, r17 64: d9 f7 brne .-10 ; 0x5c <__do_copy_data+0xc> - 66: b8 d3 rcall .+1904 ; 0x7d8

- 68: b2 c7 rjmp .+3940 ; 0xfce <_exit> + 66: f0 d3 rcall .+2016 ; 0x848
+ 68: 7c c7 rjmp .+3832 ; 0xf62 <_exit> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> @@ -117,2771 +117,2567 @@ void cm_EEPROM_write(uint8_t *address, uint8_t *data, uint8_t length) { for (uint8_t i = 0; i < length; i++) { 78: 44 23 and r20, r20 - 7a: 91 f0 breq .+36 ; 0xa0 <__EEPROM_REGION_LENGTH__+0x20> - 7c: eb 01 movw r28, r22 - 7e: 8c 01 movw r16, r24 - 80: 41 50 subi r20, 0x01 ; 1 - 82: e4 2e mov r14, r20 - 84: f1 2c mov r15, r1 - 86: 8f ef ldi r24, 0xFF ; 255 - 88: e8 1a sub r14, r24 - 8a: f8 0a sbc r15, r24 - 8c: e6 0e add r14, r22 - 8e: f7 1e adc r15, r23 + 7a: a1 f0 breq .+40 ; 0xa4 <__EEPROM_REGION_LENGTH__+0x24> + 7c: 8b 01 movw r16, r22 + 7e: c8 2f mov r28, r24 + 80: d9 2f mov r29, r25 + 82: 41 50 subi r20, 0x01 ; 1 + 84: e4 2e mov r14, r20 + 86: f1 2c mov r15, r1 + 88: 8f ef ldi r24, 0xFF ; 255 + 8a: e8 1a sub r14, r24 + 8c: f8 0a sbc r15, r24 + 8e: e6 0e add r14, r22 + 90: f7 1e adc r15, r23 // Write data to address + i.. eeprom_write_byte(address+i,data[i]); - 90: 69 91 ld r22, Y+ - 92: c8 01 movw r24, r16 - 94: 88 d7 rcall .+3856 ; 0xfa6 - 96: 0f 5f subi r16, 0xFF ; 255 - 98: 1f 4f sbci r17, 0xFF ; 255 + 92: f8 01 movw r30, r16 + 94: 61 91 ld r22, Z+ + 96: 8f 01 movw r16, r30 + 98: ce 01 movw r24, r28 + 9a: 4f d7 rcall .+3742 ; 0xf3a + 9c: 21 96 adiw r28, 0x01 ; 1 #include void cm_EEPROM_write(uint8_t *address, uint8_t *data, uint8_t length) { for (uint8_t i = 0; i < length; i++) { - 9a: ce 15 cp r28, r14 - 9c: df 05 cpc r29, r15 - 9e: c1 f7 brne .-16 ; 0x90 <__EEPROM_REGION_LENGTH__+0x10> + 9e: 0e 15 cp r16, r14 + a0: 1f 05 cpc r17, r15 + a2: b9 f7 brne .-18 ; 0x92 <__EEPROM_REGION_LENGTH__+0x12> // Write data to address + i.. eeprom_write_byte(address+i,data[i]); } } - a0: df 91 pop r29 - a2: cf 91 pop r28 - a4: 1f 91 pop r17 - a6: 0f 91 pop r16 - a8: ff 90 pop r15 - aa: ef 90 pop r14 - ac: 08 95 ret + a4: df 91 pop r29 + a6: cf 91 pop r28 + a8: 1f 91 pop r17 + aa: 0f 91 pop r16 + ac: ff 90 pop r15 + ae: ef 90 pop r14 + b0: 08 95 ret -000000ae : +000000b2 : void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { - ae: ef 92 push r14 - b0: ff 92 push r15 - b2: 0f 93 push r16 - b4: 1f 93 push r17 - b6: cf 93 push r28 - b8: df 93 push r29 + b2: ef 92 push r14 + b4: ff 92 push r15 + b6: 0f 93 push r16 + b8: 1f 93 push r17 + ba: cf 93 push r28 + bc: df 93 push r29 for (uint8_t i = 0; i < length; i++) { - ba: 44 23 and r20, r20 - bc: 91 f0 breq .+36 ; 0xe2 - be: 8c 01 movw r16, r24 - c0: eb 01 movw r28, r22 - c2: 41 50 subi r20, 0x01 ; 1 - c4: e4 2e mov r14, r20 - c6: f1 2c mov r15, r1 - c8: 8f ef ldi r24, 0xFF ; 255 - ca: e8 1a sub r14, r24 - cc: f8 0a sbc r15, r24 - ce: e6 0e add r14, r22 - d0: f7 1e adc r15, r23 + be: 44 23 and r20, r20 + c0: a1 f0 breq .+40 ; 0xea + c2: c8 2f mov r28, r24 + c4: d9 2f mov r29, r25 + c6: 8b 01 movw r16, r22 + c8: 41 50 subi r20, 0x01 ; 1 + ca: e4 2e mov r14, r20 + cc: f1 2c mov r15, r1 + ce: 8f ef ldi r24, 0xFF ; 255 + d0: e8 1a sub r14, r24 + d2: f8 0a sbc r15, r24 + d4: e6 0e add r14, r22 + d6: f7 1e adc r15, r23 data[i] = eeprom_read_byte(address+i); - d2: c8 01 movw r24, r16 - d4: 60 d7 rcall .+3776 ; 0xf96 - d6: 89 93 st Y+, r24 - d8: 0f 5f subi r16, 0xFF ; 255 - da: 1f 4f sbci r17, 0xFF ; 255 + d8: ce 01 movw r24, r28 + da: 27 d7 rcall .+3662 ; 0xf2a + dc: f8 01 movw r30, r16 + de: 81 93 st Z+, r24 + e0: 8f 01 movw r16, r30 + e2: 21 96 adiw r28, 0x01 ; 1 void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { for (uint8_t i = 0; i < length; i++) { - dc: ce 15 cp r28, r14 - de: df 05 cpc r29, r15 - e0: c1 f7 brne .-16 ; 0xd2 + e4: ee 15 cp r30, r14 + e6: ff 05 cpc r31, r15 + e8: b9 f7 brne .-18 ; 0xd8 data[i] = eeprom_read_byte(address+i); } } - e2: df 91 pop r29 - e4: cf 91 pop r28 - e6: 1f 91 pop r17 - e8: 0f 91 pop r16 - ea: ff 90 pop r15 - ec: ef 90 pop r14 - ee: 08 95 ret + ea: df 91 pop r29 + ec: cf 91 pop r28 + ee: 1f 91 pop r17 + f0: 0f 91 pop r16 + f2: ff 90 pop r15 + f4: ef 90 pop r14 + f6: 08 95 ret -000000f0 : +000000f8 : return 0; } int gpio_get_level(avr_gpio_ports port, uint8_t pin){ switch (port) - f0: 81 11 cpse r24, r1 - f2: 0b c0 rjmp .+22 ; 0x10a <__DATA_REGION_LENGTH__+0xa> + f8: 81 11 cpse r24, r1 + fa: 0b c0 rjmp .+22 ; 0x112 <__DATA_REGION_LENGTH__+0x12> { case GPIO_PORTA: return (PORTA.IN & (1 << pin)) ? 1 : 0; - f4: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> - f8: 90 e0 ldi r25, 0x00 ; 0 - fa: 02 c0 rjmp .+4 ; 0x100 <__DATA_REGION_LENGTH__> - fc: 95 95 asr r25 - fe: 87 95 ror r24 - 100: 6a 95 dec r22 - 102: e2 f7 brpl .-8 ; 0xfc - 104: 81 70 andi r24, 0x01 ; 1 - 106: 99 27 eor r25, r25 - 108: 08 95 ret + fc: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> + 100: 90 e0 ldi r25, 0x00 ; 0 + 102: 02 c0 rjmp .+4 ; 0x108 <__DATA_REGION_LENGTH__+0x8> + 104: 95 95 asr r25 + 106: 87 95 ror r24 + 108: 6a 95 dec r22 + 10a: e2 f7 brpl .-8 ; 0x104 <__DATA_REGION_LENGTH__+0x4> + 10c: 81 70 andi r24, 0x01 ; 1 + 10e: 99 27 eor r25, r25 + 110: 08 95 ret break; default: break; } return 0; - 10a: 80 e0 ldi r24, 0x00 ; 0 - 10c: 90 e0 ldi r25, 0x00 ; 0 + 112: 80 e0 ldi r24, 0x00 ; 0 + 114: 90 e0 ldi r25, 0x00 ; 0 } - 10e: 08 95 ret + 116: 08 95 ret -00000110 : - while (!(TWI0.MSTATUS & TWI_WIF_bm)); +00000118 : + *data = TWI0.MDATA; - if (TWI0.MSTATUS & TWI_RXACK_bm) { - // NACK received - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - return 1; // Error: NACK received - 110: 20 91 15 08 lds r18, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 114: 20 7c andi r18, 0xC0 ; 192 - 116: e1 f3 breq .-8 ; 0x110 - 118: 20 91 15 08 lds r18, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 11c: 24 fd sbrc r18, 4 - 11e: 1f c0 rjmp .+62 ; 0x15e - 120: fc 01 movw r30, r24 - 122: 81 91 ld r24, Z+ - 124: 80 93 18 08 sts 0x0818, r24 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> - 128: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 12c: 86 ff sbrs r24, 6 - 12e: fc cf rjmp .-8 ; 0x128 - 130: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 134: 84 fd sbrc r24, 4 - 136: 24 c0 rjmp .+72 ; 0x180 - 138: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 13c: 8c 70 andi r24, 0x0C ; 12 - 13e: a9 f4 brne .+42 ; 0x16a - 140: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 144: 84 fd sbrc r24, 4 - 146: 05 c0 rjmp .+10 ; 0x152 - 148: 41 50 subi r20, 0x01 ; 1 - 14a: 51 09 sbc r21, r1 - 14c: 61 09 sbc r22, r1 - 14e: 71 09 sbc r23, r1 - 150: 41 f7 brne .-48 ; 0x122 - 152: 83 e0 ldi r24, 0x03 ; 3 - 154: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 158: 80 e0 ldi r24, 0x00 ; 0 - 15a: 90 e0 ldi r25, 0x00 ; 0 - 15c: 08 95 ret - 15e: 83 e0 ldi r24, 0x03 ; 3 - 160: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 164: 8f ef ldi r24, 0xFF ; 255 - 166: 9f ef ldi r25, 0xFF ; 255 - 168: 08 95 ret - 16a: 80 91 14 08 lds r24, 0x0814 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 16e: 88 60 ori r24, 0x08 ; 8 - 170: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 174: 81 e0 ldi r24, 0x01 ; 1 - 176: 80 93 15 08 sts 0x0815, r24 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 17a: 81 e0 ldi r24, 0x01 ; 1 - 17c: 90 e0 ldi r25, 0x00 ; 0 - 17e: 08 95 ret - 180: 83 e0 ldi r24, 0x03 ; 3 - 182: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 186: 81 e0 ldi r24, 0x01 ; 1 - 188: 90 e0 ldi r25, 0x00 ; 0 - 18a: 08 95 ret + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + return 0; // Success +} + 118: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> + 11c: e0 e1 ldi r30, 0x10 ; 16 + 11e: f8 e0 ldi r31, 0x08 ; 8 + 120: 85 81 ldd r24, Z+5 ; 0x05 + 122: 80 7c andi r24, 0xC0 ; 192 + 124: e9 f3 breq .-6 ; 0x120 + 126: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 12a: 89 2f mov r24, r25 + 12c: 80 71 andi r24, 0x10 ; 16 + 12e: 94 ff sbrs r25, 4 + 130: 04 c0 rjmp .+8 ; 0x13a + 132: 83 e0 ldi r24, 0x03 ; 3 + 134: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 138: 81 e0 ldi r24, 0x01 ; 1 + 13a: 08 95 ret -0000018c : - 18c: b6 2f mov r27, r22 - 18e: a7 2f mov r26, r23 - 190: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 194: 93 70 andi r25, 0x03 ; 3 - 196: 91 30 cpi r25, 0x01 ; 1 - 198: d9 f7 brne .-10 ; 0x190 - 19a: 21 15 cp r18, r1 - 19c: 31 05 cpc r19, r1 - 19e: 41 05 cpc r20, r1 - 1a0: 51 05 cpc r21, r1 - 1a2: 69 f1 breq .+90 ; 0x1fe - 1a4: 81 60 ori r24, 0x01 ; 1 - 1a6: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> - 1aa: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1ae: 80 7c andi r24, 0xC0 ; 192 - 1b0: e1 f3 breq .-8 ; 0x1aa - 1b2: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1b6: 84 fd sbrc r24, 4 - 1b8: 1c c0 rjmp .+56 ; 0x1f2 - 1ba: ba 01 movw r22, r20 - 1bc: a9 01 movw r20, r18 - 1be: 41 50 subi r20, 0x01 ; 1 - 1c0: 51 09 sbc r21, r1 - 1c2: 61 09 sbc r22, r1 - 1c4: 71 09 sbc r23, r1 - 1c6: eb 2f mov r30, r27 - 1c8: fa 2f mov r31, r26 - 1ca: 92 e0 ldi r25, 0x02 ; 2 - 1cc: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 1d0: 80 7c andi r24, 0xC0 ; 192 - 1d2: e1 f3 breq .-8 ; 0x1cc - 1d4: 80 91 18 08 lds r24, 0x0818 ; 0x800818 <__RODATA_PM_OFFSET__+0x7f8818> - 1d8: 81 93 st Z+, r24 - 1da: 41 15 cp r20, r1 - 1dc: 51 05 cpc r21, r1 - 1de: 61 05 cpc r22, r1 - 1e0: 71 05 cpc r23, r1 - 1e2: 81 f0 breq .+32 ; 0x204 - 1e4: 90 93 14 08 sts 0x0814, r25 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 1e8: 41 50 subi r20, 0x01 ; 1 - 1ea: 51 09 sbc r21, r1 - 1ec: 61 09 sbc r22, r1 - 1ee: 71 09 sbc r23, r1 - 1f0: ed cf rjmp .-38 ; 0x1cc - 1f2: 83 e0 ldi r24, 0x03 ; 3 - 1f4: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 1f8: 8f ef ldi r24, 0xFF ; 255 - 1fa: 9f ef ldi r25, 0xFF ; 255 - 1fc: 08 95 ret - 1fe: 81 e0 ldi r24, 0x01 ; 1 - 200: 90 e0 ldi r25, 0x00 ; 0 - 202: 08 95 ret - 204: 84 e0 ldi r24, 0x04 ; 4 - 206: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 20a: 83 e0 ldi r24, 0x03 ; 3 - 20c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - 210: 80 e0 ldi r24, 0x00 ; 0 - 212: 90 e0 ldi r25, 0x00 ; 0 - 214: 08 95 ret +0000013c : -00000216 : +int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ + 13c: cf 92 push r12 + 13e: df 92 push r13 + 140: ef 92 push r14 + 142: ff 92 push r15 + 144: cf 93 push r28 + 146: df 93 push r29 + 148: d6 2f mov r29, r22 + 14a: c7 2f mov r28, r23 + 14c: 69 01 movw r12, r18 + 14e: 7a 01 movw r14, r20 + + // Wait for the bus to become idle or we already own it + while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); + 150: e0 e1 ldi r30, 0x10 ; 16 + 152: f8 e0 ldi r31, 0x08 ; 8 + 154: 95 81 ldd r25, Z+5 ; 0x05 + 156: 93 70 andi r25, 0x03 ; 3 + 158: 91 30 cpi r25, 0x01 ; 1 + 15a: e1 f7 brne .-8 ; 0x154 + + // Check length + if(len == 0) return CM_I2C_NOK; + 15c: c1 14 cp r12, r1 + 15e: d1 04 cpc r13, r1 + 160: e1 04 cpc r14, r1 + 162: f1 04 cpc r15, r1 + 164: 89 f1 breq .+98 ; 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; + 166: d8 df rcall .-80 ; 0x118 + 168: 81 11 cpse r24, r1 + 16a: 31 c0 rjmp .+98 ; 0x1ce + 16c: ad 2f mov r26, r29 + 16e: bc 2f mov r27, r28 + + do + { + // Prepare and send new data. + TWI0.MDATA = *dp++; + 170: e0 e1 ldi r30, 0x10 ; 16 + 172: f8 e0 ldi r31, 0x08 ; 8 + 174: 8d 91 ld r24, X+ + 176: 80 87 std Z+8, r24 ; 0x08 + + while (!(TWI0.MSTATUS & TWI_WIF_bm)); + 178: 85 81 ldd r24, Z+5 ; 0x05 + 17a: 86 ff sbrs r24, 6 + 17c: fd cf rjmp .-6 ; 0x178 + + if (TWI0.MSTATUS & TWI_RXACK_bm) { + 17e: 85 81 ldd r24, Z+5 ; 0x05 + 180: 84 ff sbrs r24, 4 + 182: 06 c0 rjmp .+12 ; 0x190 + // NACK received + TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition + 184: 83 e0 ldi r24, 0x03 ; 3 + 186: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + return 1; // Error: NACK received + 18a: 81 e0 ldi r24, 0x01 ; 1 + 18c: 90 e0 ldi r25, 0x00 ; 0 + 18e: 21 c0 rjmp .+66 ; 0x1d2 + } + + // Check for bus error and reset if it happens.. + if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { + 190: 85 81 ldd r24, Z+5 ; 0x05 + 192: 8c 70 andi r24, 0x0C ; 12 + 194: 51 f0 breq .+20 ; 0x1aa + return 0; } +static void i2c_reset() +{ + TWI0.MCTRLB |= TWI_FLUSH_bm; + 196: e0 e1 ldi r30, 0x10 ; 16 + 198: f8 e0 ldi r31, 0x08 ; 8 + 19a: 84 81 ldd r24, Z+4 ; 0x04 + 19c: 88 60 ori r24, 0x08 ; 8 + 19e: 84 83 std Z+4, r24 ; 0x04 + TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; + 1a0: 81 e0 ldi r24, 0x01 ; 1 + 1a2: 85 83 std Z+5, r24 ; 0x05 + } + + // Check for bus error and reset if it happens.. + if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { + i2c_reset(); + return 1; + 1a4: 81 e0 ldi r24, 0x01 ; 1 + 1a6: 90 e0 ldi r25, 0x00 ; 0 + 1a8: 14 c0 rjmp .+40 ; 0x1d2 + } -int cm_i2c_init(void *i2c_inst){ + if (TWI0.MSTATUS & TWI_RXACK_bm) + 1aa: 85 81 ldd r24, Z+5 ; 0x05 + 1ac: 84 fd sbrc r24, 4 + 1ae: 06 c0 rjmp .+12 ; 0x1bc + break; + + }while(--len); + 1b0: 81 e0 ldi r24, 0x01 ; 1 + 1b2: c8 1a sub r12, r24 + 1b4: d1 08 sbc r13, r1 + 1b6: e1 08 sbc r14, r1 + 1b8: f1 08 sbc r15, r1 + 1ba: e1 f6 brne .-72 ; 0x174 + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 1bc: 83 e0 ldi r24, 0x03 ; 3 + 1be: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + + + return CM_I2C_OK; + 1c2: 80 e0 ldi r24, 0x00 ; 0 + 1c4: 90 e0 ldi r25, 0x00 ; 0 + 1c6: 05 c0 rjmp .+10 ; 0x1d2 + + // Wait for the bus to become idle or we already own it + while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); + + // Check length + if(len == 0) return CM_I2C_NOK; + 1c8: 8f ef ldi r24, 0xFF ; 255 + 1ca: 9f ef ldi r25, 0xFF ; 255 + 1cc: 02 c0 rjmp .+4 ; 0x1d2 + + // 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; + 1ce: 8f ef ldi r24, 0xFF ; 255 + 1d0: 9f ef ldi r25, 0xFF ; 255 + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + - PORTA.DIR &= ~(1 << 2); // Clear bit 2 (PA2) - 216: e0 e0 ldi r30, 0x00 ; 0 - 218: f4 e0 ldi r31, 0x04 ; 4 - 21a: 80 81 ld r24, Z - 21c: 8b 7f andi r24, 0xFB ; 251 - 21e: 80 83 st Z, r24 - PORTA.DIR &= ~(1 << 3); // Clear bit 3 (PA3) - 220: 80 81 ld r24, Z - 222: 87 7f andi r24, 0xF7 ; 247 - 224: 80 83 st Z, r24 - - // Set the baud rate for 100kHz with a typical rise time of 300 ns - TWI0.MBAUD = 11; - 226: a0 e1 ldi r26, 0x10 ; 16 - 228: b8 e0 ldi r27, 0x08 ; 8 - 22a: 8b e0 ldi r24, 0x0B ; 11 - 22c: 16 96 adiw r26, 0x06 ; 6 - 22e: 8c 93 st X, r24 - 230: 16 97 sbiw r26, 0x06 ; 6 - - // Enable the TWI master and set it to enable operation - TWI0.MCTRLA = TWI_ENABLE_bm; - 232: 81 e0 ldi r24, 0x01 ; 1 - 234: 13 96 adiw r26, 0x03 ; 3 - 236: 8c 93 st X, r24 - 238: 13 97 sbiw r26, 0x03 ; 3 - - /* Set bus state idle */ - TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; - 23a: 15 96 adiw r26, 0x05 ; 5 - 23c: 8c 93 st X, r24 - - // Enable the internal pull-ups for PA2 (SDA) and PA3 (SCL) - PORTA.PIN2CTRL = PORT_PULLUPEN_bm; - 23e: 88 e0 ldi r24, 0x08 ; 8 - 240: 82 8b std Z+18, r24 ; 0x12 - PORTA.PIN3CTRL = PORT_PULLUPEN_bm; - 242: 83 8b std Z+19, r24 ; 0x13 return CM_I2C_OK; } - 244: 80 e0 ldi r24, 0x00 ; 0 - 246: 90 e0 ldi r25, 0x00 ; 0 - 248: 08 95 ret + 1d2: df 91 pop r29 + 1d4: cf 91 pop r28 + 1d6: ff 90 pop r15 + 1d8: ef 90 pop r14 + 1da: df 90 pop r13 + 1dc: cf 90 pop r12 + 1de: 08 95 ret -0000024a : +000001e0 : +int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ + 1e0: cf 92 push r12 + 1e2: df 92 push r13 + 1e4: ef 92 push r14 + 1e6: ff 92 push r15 + 1e8: cf 93 push r28 + 1ea: df 93 push r29 + + // Wait for the bus to become idle or we already own it + while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); + 1ec: e0 e1 ldi r30, 0x10 ; 16 + 1ee: f8 e0 ldi r31, 0x08 ; 8 + 1f0: 95 81 ldd r25, Z+5 ; 0x05 + 1f2: 93 70 andi r25, 0x03 ; 3 + 1f4: 91 30 cpi r25, 0x01 ; 1 + 1f6: e1 f7 brne .-8 ; 0x1f0 + + uint8_t *dp = data; + if (len == 0) + 1f8: 21 15 cp r18, r1 + 1fa: 31 05 cpc r19, r1 + 1fc: 41 05 cpc r20, r1 + 1fe: 51 05 cpc r21, r1 + 200: 11 f1 breq .+68 ; 0x246 + 202: 69 01 movw r12, r18 + 204: 7a 01 movw r14, r20 + 206: c7 2f mov r28, r23 + 208: d6 2f mov r29, r22 + return 1; -int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ - 24a: fc 01 movw r30, r24 + // 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; + 20a: 81 60 ori r24, 0x01 ; 1 + 20c: 85 df rcall .-246 ; 0x118 + 20e: 88 23 and r24, r24 + 210: 01 f1 breq .+64 ; 0x252 + 212: 1c c0 rjmp .+56 ; 0x24c - //if(i2c_inst == NULL) return CM_I2C_NOK; + while (len--) { + + while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); + 214: 85 81 ldd r24, Z+5 ; 0x05 + 216: 80 7c andi r24, 0xC0 ; 192 + 218: e9 f3 breq .-6 ; 0x214 + + *dp++ = TWI0.MDATA; + 21a: 80 85 ldd r24, Z+8 ; 0x08 + 21c: 8d 93 st X+, r24 + if (len == 0) { + 21e: 41 15 cp r20, r1 + 220: 51 05 cpc r21, r1 + 222: 61 05 cpc r22, r1 + 224: 71 05 cpc r23, r1 + 226: 49 f4 brne .+18 ; 0x23a + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + 228: e0 e1 ldi r30, 0x10 ; 16 + 22a: f8 e0 ldi r31, 0x08 ; 8 + 22c: 84 e0 ldi r24, 0x04 ; 4 + 22e: 84 83 std Z+4, r24 ; 0x04 + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + } + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 230: 83 e0 ldi r24, 0x03 ; 3 + 232: 84 83 std Z+4, r24 ; 0x04 - // Check if device responds! - if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; - 24c: 84 2f mov r24, r20 - 24e: 88 0f add r24, r24 + return 0; + 234: 80 e0 ldi r24, 0x00 ; 0 + 236: 90 e0 ldi r25, 0x00 ; 0 + 238: 18 c0 rjmp .+48 ; 0x26a + + *dp++ = TWI0.MDATA; + if (len == 0) { + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + } else { + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + 23a: 94 83 std Z+4, r25 ; 0x04 + 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--) { + 23c: 41 50 subi r20, 0x01 ; 1 + 23e: 51 09 sbc r21, r1 + 240: 61 09 sbc r22, r1 + 242: 71 09 sbc r23, r1 + 244: e7 cf rjmp .-50 ; 0x214 + while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); + + uint8_t *dp = data; + + if (len == 0) + return 1; + 246: 81 e0 ldi r24, 0x01 ; 1 + 248: 90 e0 ldi r25, 0x00 ; 0 + 24a: 0f c0 rjmp .+30 ; 0x26a + + // 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; + 24c: 8f ef ldi r24, 0xFF ; 255 + 24e: 9f ef ldi r25, 0xFF ; 255 + 250: 0c c0 rjmp .+24 ; 0x26a + + while (len--) { + 252: b7 01 movw r22, r14 + 254: a6 01 movw r20, r12 + 256: 41 50 subi r20, 0x01 ; 1 + 258: 51 09 sbc r21, r1 + 25a: 61 09 sbc r22, r1 + 25c: 71 09 sbc r23, r1 + 25e: ad 2f mov r26, r29 + 260: bc 2f mov r27, r28 + + while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); + 262: e0 e1 ldi r30, 0x10 ; 16 + 264: f8 e0 ldi r31, 0x08 ; 8 + + *dp++ = TWI0.MDATA; + if (len == 0) { + TWI0.MCTRLB = TWI_ACKACT_NACK_gc; + } else { + TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; + 266: 92 e0 ldi r25, 0x02 ; 2 + 268: d5 cf rjmp .-86 ; 0x214 + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + + return 0; + + } + 26a: df 91 pop r29 + 26c: cf 91 pop r28 + 26e: ff 90 pop r15 + 270: ef 90 pop r14 + 272: df 90 pop r13 + 274: cf 90 pop r12 + 276: 08 95 ret + +00000278 : int i2c_IsDeviceReady(uint8_t dev_addr){ // Wait for the bus to become idle or we already own it while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); - 250: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 254: 93 70 andi r25, 0x03 ; 3 - 256: 91 30 cpi r25, 0x01 ; 1 - 258: d9 f7 brne .-10 ; 0x250 + 278: e0 e1 ldi r30, 0x10 ; 16 + 27a: f8 e0 ldi r31, 0x08 ; 8 + 27c: 95 81 ldd r25, Z+5 ; 0x05 + 27e: 93 70 andi r25, 0x03 ; 3 + 280: 91 30 cpi r25, 0x01 ; 1 + 282: e1 f7 brne .-8 ; 0x27c TWI0.MADDR = dev_addr | 0; - 25a: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> + 284: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> // Wait for acknowledgment while (!(TWI0.MSTATUS & TWI_WIF_bm)); - 25e: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 262: 96 ff sbrs r25, 6 - 264: fc cf rjmp .-8 ; 0x25e + 288: e0 e1 ldi r30, 0x10 ; 16 + 28a: f8 e0 ldi r31, 0x08 ; 8 + 28c: 85 81 ldd r24, Z+5 ; 0x05 + 28e: 86 ff sbrs r24, 6 + 290: fd cf rjmp .-6 ; 0x28c if (TWI0.MSTATUS & TWI_RXACK_bm) { - 266: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 26a: 84 ff sbrs r24, 4 - 26c: 06 c0 rjmp .+12 ; 0x27a + 292: 80 91 15 08 lds r24, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> + 296: 84 ff sbrs r24, 4 + 298: 06 c0 rjmp .+12 ; 0x2a6 // NACK received TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - 26e: 83 e0 ldi r24, 0x03 ; 3 - 270: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + 29a: 83 e0 ldi r24, 0x03 ; 3 + 29c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + return 1; // Error: NACK received + 2a0: 81 e0 ldi r24, 0x01 ; 1 + 2a2: 90 e0 ldi r25, 0x00 ; 0 + 2a4: 08 95 ret + } + + // Send stop condition + TWI0.MCTRLB = TWI_MCMD_STOP_gc; + 2a6: 83 e0 ldi r24, 0x03 ; 3 + 2a8: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> + return CM_I2C_OK; // Success + 2ac: 80 e0 ldi r24, 0x00 ; 0 + 2ae: 90 e0 ldi r25, 0x00 ; 0 + +} + 2b0: 08 95 ret + +000002b2 : + + +int cm_i2c_init(void *i2c_inst){ + + PORTA.DIR &= ~(1 << 2); // Clear bit 2 (PA2) + 2b2: e0 e0 ldi r30, 0x00 ; 0 + 2b4: f4 e0 ldi r31, 0x04 ; 4 + 2b6: 80 81 ld r24, Z + 2b8: 8b 7f andi r24, 0xFB ; 251 + 2ba: 80 83 st Z, r24 + PORTA.DIR &= ~(1 << 3); // Clear bit 3 (PA3) + 2bc: 80 81 ld r24, Z + 2be: 87 7f andi r24, 0xF7 ; 247 + 2c0: 80 83 st Z, r24 + + // Set the baud rate for 100kHz with a typical rise time of 300 ns + TWI0.MBAUD = 11; + 2c2: a0 e1 ldi r26, 0x10 ; 16 + 2c4: b8 e0 ldi r27, 0x08 ; 8 + 2c6: 8b e0 ldi r24, 0x0B ; 11 + 2c8: 16 96 adiw r26, 0x06 ; 6 + 2ca: 8c 93 st X, r24 + 2cc: 16 97 sbiw r26, 0x06 ; 6 + + // Enable the TWI master and set it to enable operation + TWI0.MCTRLA = TWI_ENABLE_bm; + 2ce: 81 e0 ldi r24, 0x01 ; 1 + 2d0: 13 96 adiw r26, 0x03 ; 3 + 2d2: 8c 93 st X, r24 + 2d4: 13 97 sbiw r26, 0x03 ; 3 + + /* Set bus state idle */ + TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; + 2d6: 15 96 adiw r26, 0x05 ; 5 + 2d8: 8c 93 st X, r24 + + // Enable the internal pull-ups for PA2 (SDA) and PA3 (SCL) + PORTA.PIN2CTRL = PORT_PULLUPEN_bm; + 2da: 88 e0 ldi r24, 0x08 ; 8 + 2dc: 82 8b std Z+18, r24 ; 0x12 + PORTA.PIN3CTRL = PORT_PULLUPEN_bm; + 2de: 83 8b std Z+19, r24 ; 0x13 + return CM_I2C_OK; +} + 2e0: 80 e0 ldi r24, 0x00 ; 0 + 2e2: 90 e0 ldi r25, 0x00 ; 0 + 2e4: 08 95 ret + +000002e6 : + + + +int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ + 2e6: ef 92 push r14 + 2e8: ff 92 push r15 + 2ea: 0f 93 push r16 + 2ec: 1f 93 push r17 + 2ee: cf 93 push r28 + 2f0: 8c 01 movw r16, r24 + 2f2: 7b 01 movw r14, r22 + 2f4: 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; + 2f6: 84 2f mov r24, r20 + 2f8: 88 0f add r24, r24 + 2fa: be df rcall .-132 ; 0x278 + 2fc: 00 97 sbiw r24, 0x00 ; 0 + 2fe: 49 f4 brne .+18 ; 0x312 + + // add device info if device responds! + inst->i2c_transfer_inst = i2c_inst; + 300: f8 01 movw r30, r16 + 302: e0 82 st Z, r14 + 304: f1 82 std Z+1, r15 ; 0x01 + inst->dev_addr = (dev_addr << 1) & 0b11111110; + 306: 4c 2f mov r20, r28 + 308: 50 e0 ldi r21, 0x00 ; 0 + 30a: 44 0f add r20, r20 + 30c: 55 1f adc r21, r21 + 30e: 42 83 std Z+2, r20 ; 0x02 + + return CM_I2C_OK; + 310: 02 c0 rjmp .+4 ; 0x316 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; - 274: 8e ef ldi r24, 0xFE ; 254 - 276: 9f ef ldi r25, 0xFF ; 255 - 278: 08 95 ret - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - return 1; // Error: NACK received - } - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - 27a: 83 e0 ldi r24, 0x03 ; 3 - 27c: 80 93 14 08 sts 0x0814, r24 ; 0x800814 <__RODATA_PM_OFFSET__+0x7f8814> - - // Check if device responds! - if(i2c_IsDeviceReady((dev_addr << 1)) != CM_I2C_OK)return CM_I2C_NO_DEVICE; - + 312: 8e ef ldi r24, 0xFE ; 254 + 314: 9f ef ldi r25, 0xFF ; 255 // add device info if device responds! inst->i2c_transfer_inst = i2c_inst; - 280: 60 83 st Z, r22 - 282: 71 83 std Z+1, r23 ; 0x01 inst->dev_addr = (dev_addr << 1) & 0b11111110; - 284: 50 e0 ldi r21, 0x00 ; 0 - 286: 44 0f add r20, r20 - 288: 55 1f adc r21, r21 - 28a: 42 83 std Z+2, r20 ; 0x02 return CM_I2C_OK; - 28c: 80 e0 ldi r24, 0x00 ; 0 - 28e: 90 e0 ldi r25, 0x00 ; 0 } - 290: 08 95 ret + 316: cf 91 pop r28 + 318: 1f 91 pop r17 + 31a: 0f 91 pop r16 + 31c: ff 90 pop r15 + 31e: ef 90 pop r14 + 320: 08 95 ret -00000292 : +00000322 : int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ - 292: 0f 93 push r16 + 322: 0f 93 push r16 if(inst == NULL) return CM_I2C_NOK; - 294: 00 97 sbiw r24, 0x00 ; 0 - 296: 21 f1 breq .+72 ; 0x2e0 - 298: db 01 movw r26, r22 - 29a: fc 01 movw r30, r24 + 324: 00 97 sbiw r24, 0x00 ; 0 + 326: 81 f0 breq .+32 ; 0x348 + 328: 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){ - 29c: 00 23 and r16, r16 - 29e: d1 f0 breq .+52 ; 0x2d4 - 2a0: 01 30 cpi r16, 0x01 ; 1 - 2a2: 21 f0 breq .+8 ; 0x2ac - break; + 32a: 00 23 and r16, r16 + 32c: 19 f0 breq .+6 ; 0x334 + 32e: 01 30 cpi r16, 0x01 ; 1 + 330: 31 f0 breq .+12 ; 0x33e + 332: 0d c0 rjmp .+26 ; 0x34e - - } - - return CM_I2C_OK; - 2a4: 80 e0 ldi r24, 0x00 ; 0 - 2a6: 90 e0 ldi r25, 0x00 ; 0 - -} - 2a8: 0f 91 pop r16 - 2aa: 08 95 ret -} - -int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ - - // Wait for the bus to become idle or we already own it - while ((TWI0.MSTATUS & TWI_BUSSTATE_gm) != TWI_BUSSTATE_IDLE_gc); - 2ac: 90 91 15 08 lds r25, 0x0815 ; 0x800815 <__RODATA_PM_OFFSET__+0x7f8815> - 2b0: 93 70 andi r25, 0x03 ; 3 - 2b2: 91 30 cpi r25, 0x01 ; 1 - 2b4: d9 f7 brne .-10 ; 0x2ac - - // Check length - if(len == 0) return CM_I2C_NOK; - 2b6: 21 15 cp r18, r1 - 2b8: 31 05 cpc r19, r1 - 2ba: 41 05 cpc r20, r1 - 2bc: 51 05 cpc r21, r1 - 2be: 91 f3 breq .-28 ; 0x2a4 + 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; - - 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); - 2c0: 82 81 ldd r24, Z+2 ; 0x02 - -#ifdef AVR_ATTINY_402 - -uint8_t i2c_write_devAddr(uint8_t dev_addr){ - - TWI0.MADDR = dev_addr; - 2c2: 80 93 17 08 sts 0x0817, r24 ; 0x800817 <__RODATA_PM_OFFSET__+0x7f8817> - 2c6: ba 01 movw r22, r20 - 2c8: a9 01 movw r20, r18 - 2ca: cd 01 movw r24, r26 - 2cc: 21 df rcall .-446 ; 0x110 + 334: 82 81 ldd r24, Z+2 ; 0x02 + 336: 54 df rcall .-344 ; 0x1e0 break; } return CM_I2C_OK; - 2ce: 80 e0 ldi r24, 0x00 ; 0 - 2d0: 90 e0 ldi r25, 0x00 ; 0 - 2d2: ea cf rjmp .-44 ; 0x2a8 - + 338: 80 e0 ldi r24, 0x00 ; 0 + 33a: 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); - 2d4: 82 81 ldd r24, Z+2 ; 0x02 - 2d6: 5a df rcall .-332 ; 0x18c + break; + 33c: 0a c0 rjmp .+20 ; 0x352 + + 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); + 33e: 82 81 ldd r24, Z+2 ; 0x02 + 340: fd de rcall .-518 ; 0x13c break; } return CM_I2C_OK; - 2d8: 80 e0 ldi r24, 0x00 ; 0 - 2da: 90 e0 ldi r25, 0x00 ; 0 + 342: 80 e0 ldi r24, 0x00 ; 0 + 344: 90 e0 ldi r25, 0x00 ; 0 + break; -} - 2dc: 0f 91 pop r16 - 2de: 08 95 ret + 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; + 346: 05 c0 rjmp .+10 ; 0x352 } 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; - 2e0: 8f ef ldi r24, 0xFF ; 255 - 2e2: 9f ef ldi r25, 0xFF ; 255 - 2e4: e1 cf rjmp .-62 ; 0x2a8 + 348: 8f ef ldi r24, 0xFF ; 255 + 34a: 9f ef ldi r25, 0xFF ; 255 + 34c: 02 c0 rjmp .+4 ; 0x352 + break; -000002e6 <__vector_22>: + + } + + return CM_I2C_OK; + 34e: 80 e0 ldi r24, 0x00 ; 0 + 350: 90 e0 ldi r25, 0x00 ; 0 + +} + 352: 0f 91 pop r16 + 354: 08 95 ret + +00000356 <__vector_22>: #define BAUD_RATE 9600 static void *s_inst = NULL; get_UART_Event_fpt uart_rx_evt_fpt = NULL; ISR(USART0_RXC_vect) { - 2e6: 1f 92 push r1 - 2e8: 0f 92 push r0 - 2ea: 0f b6 in r0, 0x3f ; 63 - 2ec: 0f 92 push r0 - 2ee: 11 24 eor r1, r1 - 2f0: 2f 93 push r18 - 2f2: 3f 93 push r19 - 2f4: 4f 93 push r20 - 2f6: 5f 93 push r21 - 2f8: 6f 93 push r22 - 2fa: 7f 93 push r23 - 2fc: 8f 93 push r24 - 2fe: 9f 93 push r25 - 300: af 93 push r26 - 302: bf 93 push r27 - 304: ef 93 push r30 - 306: ff 93 push r31 - 308: cf 93 push r28 - 30a: df 93 push r29 - 30c: 1f 92 push r1 - 30e: cd b7 in r28, 0x3d ; 61 - 310: de b7 in r29, 0x3e ; 62 - // Read received data - if(uart_rx_evt_fpt != NULL){ - 312: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> - 316: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> - uart_rx_evt_fpt(USART0.RXDATAL); - 31a: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> -static void *s_inst = NULL; - get_UART_Event_fpt uart_rx_evt_fpt = NULL; - -ISR(USART0_RXC_vect) { - // Read received data - if(uart_rx_evt_fpt != NULL){ - 31e: 30 97 sbiw r30, 0x00 ; 0 - 320: a9 f0 breq .+42 ; 0x34c <__vector_22+0x66> - uart_rx_evt_fpt(USART0.RXDATAL); - 322: 09 95 icall - // Dummy read!! - volatile uint8_t dummy = USART0.RXDATAL; - - } - -} - 324: 0f 90 pop r0 - 326: df 91 pop r29 - 328: cf 91 pop r28 - 32a: ff 91 pop r31 - 32c: ef 91 pop r30 - 32e: bf 91 pop r27 - 330: af 91 pop r26 - 332: 9f 91 pop r25 - 334: 8f 91 pop r24 - 336: 7f 91 pop r23 - 338: 6f 91 pop r22 - 33a: 5f 91 pop r21 - 33c: 4f 91 pop r20 - 33e: 3f 91 pop r19 - 340: 2f 91 pop r18 - 342: 0f 90 pop r0 - 344: 0f be out 0x3f, r0 ; 63 - 346: 0f 90 pop r0 - 348: 1f 90 pop r1 - 34a: 18 95 reti + 356: 1f 92 push r1 + 358: 0f 92 push r0 + 35a: 0f b6 in r0, 0x3f ; 63 + 35c: 0f 92 push r0 + 35e: 11 24 eor r1, r1 + 360: 2f 93 push r18 + 362: 3f 93 push r19 + 364: 4f 93 push r20 + 366: 5f 93 push r21 + 368: 6f 93 push r22 + 36a: 7f 93 push r23 + 36c: 8f 93 push r24 + 36e: 9f 93 push r25 + 370: af 93 push r26 + 372: bf 93 push r27 + 374: ef 93 push r30 + 376: ff 93 push r31 + 378: cf 93 push r28 + 37a: df 93 push r29 + 37c: 1f 92 push r1 + 37e: cd b7 in r28, 0x3d ; 61 + 380: de b7 in r29, 0x3e ; 62 // Read received data if(uart_rx_evt_fpt != NULL){ + 382: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> + 386: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> + 38a: 30 97 sbiw r30, 0x00 ; 0 + 38c: 21 f0 breq .+8 ; 0x396 <__vector_22+0x40> uart_rx_evt_fpt(USART0.RXDATAL); + 38e: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 392: 09 95 icall + 394: 03 c0 rjmp .+6 ; 0x39c <__vector_22+0x46> } else { // Dummy read!! volatile uint8_t dummy = USART0.RXDATAL; - 34c: 89 83 std Y+1, r24 ; 0x01 + 396: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 39a: 89 83 std Y+1, r24 ; 0x01 } } - 34e: ea cf rjmp .-44 ; 0x324 <__vector_22+0x3e> + 39c: 0f 90 pop r0 + 39e: df 91 pop r29 + 3a0: cf 91 pop r28 + 3a2: ff 91 pop r31 + 3a4: ef 91 pop r30 + 3a6: bf 91 pop r27 + 3a8: af 91 pop r26 + 3aa: 9f 91 pop r25 + 3ac: 8f 91 pop r24 + 3ae: 7f 91 pop r23 + 3b0: 6f 91 pop r22 + 3b2: 5f 91 pop r21 + 3b4: 4f 91 pop r20 + 3b6: 3f 91 pop r19 + 3b8: 2f 91 pop r18 + 3ba: 0f 90 pop r0 + 3bc: 0f be out 0x3f, r0 ; 63 + 3be: 0f 90 pop r0 + 3c0: 1f 90 pop r1 + 3c2: 18 95 reti -00000350 : +000003c4 : void cm_uart_init(void *rtx_inst, get_UART_Event_fpt uart_rx_evt_fp){ - 350: cf 93 push r28 - 352: df 93 push r29 - 354: 1f 92 push r1 - 356: cd b7 in r28, 0x3d ; 61 - 358: de b7 in r29, 0x3e ; 62 - 35a: ac 01 movw r20, r24 + 3c4: cf 93 push r28 + 3c6: df 93 push r29 + 3c8: 1f 92 push r1 + 3ca: cd b7 in r28, 0x3d ; 61 + 3cc: de b7 in r29, 0x3e ; 62 + 3ce: ac 01 movw r20, r24 //For interrupt-driven USART operation, global interrupts must be disabled during the initialization cli(); - 35c: f8 94 cli + 3d0: 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; - 35e: 2c e6 ldi r18, 0x6C ; 108 - 360: 35 e0 ldi r19, 0x05 ; 5 - 362: 20 93 08 08 sts 0x0808, r18 ; 0x800808 <__RODATA_PM_OFFSET__+0x7f8808> - 366: 30 93 09 08 sts 0x0809, r19 ; 0x800809 <__RODATA_PM_OFFSET__+0x7f8809> + 3d2: e0 e0 ldi r30, 0x00 ; 0 + 3d4: f8 e0 ldi r31, 0x08 ; 8 + 3d6: 2c e6 ldi r18, 0x6C ; 108 + 3d8: 35 e0 ldi r19, 0x05 ; 5 + 3da: 20 87 std Z+8, r18 ; 0x08 + 3dc: 31 87 std Z+9, r19 ; 0x09 // Configure USART0 for 8-bit data, no parity, 1 stop bit USART0.CTRLC = USART_CMODE_ASYNCHRONOUS_gc | // Asynchronous mode - 36a: 93 e0 ldi r25, 0x03 ; 3 - 36c: 90 93 07 08 sts 0x0807, r25 ; 0x800807 <__RODATA_PM_OFFSET__+0x7f8807> + 3de: 93 e0 ldi r25, 0x03 ; 3 + 3e0: 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 - 370: 90 ec ldi r25, 0xC0 ; 192 - 372: 90 93 06 08 sts 0x0806, r25 ; 0x800806 <__RODATA_PM_OFFSET__+0x7f8806> + 3e2: 90 ec ldi r25, 0xC0 ; 192 + 3e4: 96 83 std Z+6, r25 ; 0x06 USART_TXEN_bm; // Enable transmitter if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 376: 61 15 cp r22, r1 - 378: 71 05 cpc r23, r1 - 37a: d1 f0 breq .+52 ; 0x3b0 + 3e6: 61 15 cp r22, r1 + 3e8: 71 05 cpc r23, r1 + 3ea: 11 f4 brne .+4 ; 0x3f0 + 3ec: 45 2b or r20, r21 + 3ee: 39 f0 breq .+14 ; 0x3fe // Enable RX interrupt USART0.CTRLA = USART_RXCIE_bm; // Enable receive interrupt - 37c: 80 e8 ldi r24, 0x80 ; 128 - 37e: 80 93 05 08 sts 0x0805, r24 ; 0x800805 <__RODATA_PM_OFFSET__+0x7f8805> + 3f0: 80 e8 ldi r24, 0x80 ; 128 + 3f2: 80 93 05 08 sts 0x0805, r24 ; 0x800805 <__RODATA_PM_OFFSET__+0x7f8805> s_inst = rtx_inst; uart_rx_evt_fpt = uart_rx_evt_fp; - 382: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> - 386: 70 93 07 3f sts 0x3F07, r23 ; 0x803f07 <__data_end+0x1> + 3f6: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> + 3fa: 70 93 07 3f sts 0x3F07, r23 ; 0x803f07 <__data_end+0x1> } // Clear any existing receive complete interrupt flag by reading RXDATAL if (USART0.STATUS & USART_RXCIF_bm) { - 38a: 80 91 04 08 lds r24, 0x0804 ; 0x800804 <__RODATA_PM_OFFSET__+0x7f8804> - 38e: 87 ff sbrs r24, 7 - 390: 04 c0 rjmp .+8 ; 0x39a + 3fe: 80 91 04 08 lds r24, 0x0804 ; 0x800804 <__RODATA_PM_OFFSET__+0x7f8804> + 402: 88 23 and r24, r24 + 404: 24 f4 brge .+8 ; 0x40e <__LOCK_REGION_LENGTH__+0xe> volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag - 392: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> - 396: 89 83 std Y+1, r24 ; 0x01 + 406: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + 40a: 89 83 std Y+1, r24 ; 0x01 (void)dummy; // Silence unused variable warning - 398: 89 81 ldd r24, Y+1 ; 0x01 + 40c: 89 81 ldd r24, Y+1 ; 0x01 } PORTA.DIRSET = (1 << 6); // Set PA1 (TX) as output - 39a: 80 e4 ldi r24, 0x40 ; 64 - 39c: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7f8401> + 40e: e0 e0 ldi r30, 0x00 ; 0 + 410: f4 e0 ldi r31, 0x04 ; 4 + 412: 80 e4 ldi r24, 0x40 ; 64 + 414: 81 83 std Z+1, r24 ; 0x01 PORTA.DIRCLR = (1 << 7); // Set PA2 (RX) as input - 3a0: 80 e8 ldi r24, 0x80 ; 128 - 3a2: 80 93 02 04 sts 0x0402, r24 ; 0x800402 <__RODATA_PM_OFFSET__+0x7f8402> + 416: 80 e8 ldi r24, 0x80 ; 128 + 418: 82 83 std Z+2, r24 ; 0x02 // Enable global interrupts sei(); - 3a6: 78 94 sei + 41a: 78 94 sei } - 3a8: 0f 90 pop r0 - 3aa: df 91 pop r29 - 3ac: cf 91 pop r28 - 3ae: 08 95 ret + 41c: 0f 90 pop r0 + 41e: df 91 pop r29 + 420: cf 91 pop r28 + 422: 08 95 ret - // Enable receiver, transmitter, and receive complete interrupt - USART0.CTRLB = USART_RXEN_bm | // Enable receiver - USART_TXEN_bm; // Enable transmitter - - if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 3b0: 45 2b or r20, r21 - 3b2: 21 f7 brne .-56 ; 0x37c - 3b4: ea cf rjmp .-44 ; 0x38a - -000003b6 : +00000424 : int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; switch (state) - 3b6: 90 91 41 3f lds r25, 0x3F41 ; 0x803f41 - 3ba: 92 30 cpi r25, 0x02 ; 2 - 3bc: 41 f1 breq .+80 ; 0x40e <__LOCK_REGION_LENGTH__+0xe> - 3be: 60 f4 brcc .+24 ; 0x3d8 - 3c0: 99 23 and r25, r25 - 3c2: e1 f0 breq .+56 ; 0x3fc - 3c4: 91 30 cpi r25, 0x01 ; 1 - 3c6: 89 f4 brne .+34 ; 0x3ea + 424: 90 91 41 3f lds r25, 0x3F41 ; 0x803f41 + 428: 92 30 cpi r25, 0x02 ; 2 + 42a: f1 f0 breq .+60 ; 0x468 + 42c: 28 f4 brcc .+10 ; 0x438 + 42e: 99 23 and r25, r25 + 430: 41 f0 breq .+16 ; 0x442 + 432: 91 30 cpi r25, 0x01 ; 1 + 434: 79 f0 breq .+30 ; 0x454 + 436: 31 c0 rjmp .+98 ; 0x49a + 438: 93 30 cpi r25, 0x03 ; 3 + 43a: 01 f1 breq .+64 ; 0x47c + 43c: 94 30 cpi r25, 0x04 ; 4 + 43e: 41 f1 breq .+80 ; 0x490 + 440: 2c c0 rjmp .+88 ; 0x49a + { case CM_MSGSYNC_STATE_INIT: 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; - 3c8: 8a 35 cpi r24, 0x5A ; 90 - 3ca: 29 f1 breq .+74 ; 0x416 <__LOCK_REGION_LENGTH__+0x16> - case CM_MSGSYNC_STATE_3: - 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; - 3cc: 80 e0 ldi r24, 0x00 ; 0 - 3ce: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + 442: 91 e0 ldi r25, 0x01 ; 1 + 444: 8f 34 cpi r24, 0x4F ; 79 + 446: 09 f0 breq .+2 ; 0x44a + 448: 90 e0 ldi r25, 0x00 ; 0 + 44a: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 default: state = CM_MSGSYNC_STATE_INIT; break; } return 1; - 3d2: 81 e0 ldi r24, 0x01 ; 1 - 3d4: 90 e0 ldi r25, 0x00 ; 0 + 44e: 81 e0 ldi r24, 0x01 ; 1 + 450: 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; + 452: 08 95 ret + + case CM_MSGSYNC_STATE_2: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; + 454: 8a 35 cpi r24, 0x5A ; 90 + 456: 11 f0 breq .+4 ; 0x45c + 458: 80 e0 ldi r24, 0x00 ; 0 + 45a: 01 c0 rjmp .+2 ; 0x45e + 45c: 82 e0 ldi r24, 0x02 ; 2 + 45e: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 462: 81 e0 ldi r24, 0x01 ; 1 + 464: 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; + 466: 08 95 ret + + case CM_MSGSYNC_STATE_3: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; + 468: 81 33 cpi r24, 0x31 ; 49 + 46a: 11 f0 breq .+4 ; 0x470 + 46c: 80 e0 ldi r24, 0x00 ; 0 + 46e: 01 c0 rjmp .+2 ; 0x472 + 470: 83 e0 ldi r24, 0x03 ; 3 + 472: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 476: 81 e0 ldi r24, 0x01 ; 1 + 478: 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; + 47a: 08 95 ret + + case CM_MSGSYNC_STATE_4: + state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; + 47c: 83 34 cpi r24, 0x43 ; 67 + 47e: 11 f0 breq .+4 ; 0x484 + 480: 80 e0 ldi r24, 0x00 ; 0 + 482: 01 c0 rjmp .+2 ; 0x486 + 484: 84 e0 ldi r24, 0x04 ; 4 + 486: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 + default: + state = CM_MSGSYNC_STATE_INIT; + break; + } + + return 1; + 48a: 81 e0 ldi r24, 0x01 ; 1 + 48c: 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; - 3d6: 08 95 ret - -int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ - - static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; - - switch (state) - 3d8: 93 30 cpi r25, 0x03 ; 3 - 3da: 61 f0 breq .+24 ; 0x3f4 - 3dc: 94 30 cpi r25, 0x04 ; 4 - 3de: 29 f4 brne .+10 ; 0x3ea - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - break; + 48e: 08 95 ret case CM_MSGSYNC_STATE_5: state = CM_MSGSYNC_STATE_INIT; - 3e0: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + 490: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 return 0; - 3e4: 80 e0 ldi r24, 0x00 ; 0 - 3e6: 90 e0 ldi r25, 0x00 ; 0 - 3e8: 08 95 ret + 494: 80 e0 ldi r24, 0x00 ; 0 + 496: 90 e0 ldi r25, 0x00 ; 0 + 498: 08 95 ret break; default: state = CM_MSGSYNC_STATE_INIT; - 3ea: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 + 49a: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 break; } return 1; - 3ee: 81 e0 ldi r24, 0x01 ; 1 - 3f0: 90 e0 ldi r25, 0x00 ; 0 + 49e: 81 e0 ldi r24, 0x01 ; 1 + 4a0: 90 e0 ldi r25, 0x00 ; 0 } - 3f2: 08 95 ret - case CM_MSGSYNC_STATE_3: - 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; - 3f4: 83 34 cpi r24, 0x43 ; 67 - 3f6: 51 f7 brne .-44 ; 0x3cc - 3f8: 84 e0 ldi r24, 0x04 ; 4 - 3fa: e9 cf rjmp .-46 ; 0x3ce - static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; - - switch (state) - { - case CM_MSGSYNC_STATE_INIT: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; - 3fc: 91 e0 ldi r25, 0x01 ; 1 - 3fe: 8f 34 cpi r24, 0x4F ; 79 - 400: 09 f0 breq .+2 ; 0x404 <__LOCK_REGION_LENGTH__+0x4> - 402: 90 e0 ldi r25, 0x00 ; 0 - 404: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 408: 81 e0 ldi r24, 0x01 ; 1 - 40a: 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; - 40c: 08 95 ret - case CM_MSGSYNC_STATE_2: - 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; - 40e: 81 33 cpi r24, 0x31 ; 49 - 410: e9 f6 brne .-70 ; 0x3cc - 412: 83 e0 ldi r24, 0x03 ; 3 - 414: dc cf rjmp .-72 ; 0x3ce - case CM_MSGSYNC_STATE_INIT: - 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; - 416: 82 e0 ldi r24, 0x02 ; 2 - 418: da cf rjmp .-76 ; 0x3ce + 4a2: 08 95 ret -0000041a : +000004a4 : 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) - 41a: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 - 41e: 93 30 cpi r25, 0x03 ; 3 - 420: 09 f4 brne .+2 ; 0x424 - 422: 4b c0 rjmp .+150 ; 0x4ba - 424: 68 f4 brcc .+26 ; 0x440 - 426: 99 23 and r25, r25 - 428: 09 f4 brne .+2 ; 0x42c - 42a: 40 c0 rjmp .+128 ; 0x4ac - 42c: 91 30 cpi r25, 0x01 ; 1 - 42e: 29 f4 brne .+10 ; 0x43a + 4a4: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 + 4a8: 93 30 cpi r25, 0x03 ; 3 + 4aa: d1 f0 breq .+52 ; 0x4e0 + 4ac: 28 f4 brcc .+10 ; 0x4b8 + 4ae: 99 23 and r25, r25 + 4b0: 41 f0 breq .+16 ; 0x4c2 + 4b2: 91 30 cpi r25, 0x01 ; 1 + 4b4: 79 f0 breq .+30 ; 0x4d4 + 4b6: 47 c0 rjmp .+142 ; 0x546 + 4b8: 94 30 cpi r25, 0x04 ; 4 + 4ba: d1 f0 breq .+52 ; 0x4f0 + 4bc: 95 30 cpi r25, 0x05 ; 5 + 4be: 29 f1 breq .+74 ; 0x50a + 4c0: 42 c0 rjmp .+132 ; 0x546 + { + case CM_MSG_WAIT_FOR_STARTCODE: if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; + 4c2: b0 df rcall .-160 ; 0x424 + 4c4: 89 2b or r24, r25 + 4c6: 19 f4 brne .+6 ; 0x4ce + 4c8: 81 e0 ldi r24, 0x01 ; 1 + 4ca: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 data_bytes_idx = 0; + 4ce: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f break; + 4d2: 39 c0 rjmp .+114 ; 0x546 case CM_MSG_DECODE_STATE_GET_SIZE_BYTE: msg.msg_data_size = rx_byte; - 430: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 + 4d4: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; - 434: 83 e0 ldi r24, 0x03 ; 3 - 436: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - } + 4d8: 83 e0 ldi r24, 0x03 ; 3 + 4da: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + break; - } - return 0; -} - 43a: 80 e0 ldi r24, 0x00 ; 0 - 43c: 90 e0 ldi r25, 0x00 ; 0 - 43e: 08 95 ret - - 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) - 440: 94 30 cpi r25, 0x04 ; 4 - 442: 19 f1 breq .+70 ; 0x48a - 444: 95 30 cpi r25, 0x05 ; 5 - 446: c9 f7 brne .-14 ; 0x43a + 4de: 33 c0 rjmp .+102 ; 0x546 + + case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: + msg.msg_data_crc = (rx_byte << 8) & 0xff00; + 4e0: e8 e0 ldi r30, 0x08 ; 8 + 4e2: ff e3 ldi r31, 0x3F ; 63 + 4e4: 11 82 std Z+1, r1 ; 0x01 + 4e6: 82 83 std Z+2, r24 ; 0x02 + state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; + 4e8: 84 e0 ldi r24, 0x04 ; 4 + 4ea: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 + break; + 4ee: 2b c0 rjmp .+86 ; 0x546 + + case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: msg.msg_data_crc |= rx_byte & 0xff; + 4f0: e8 e0 ldi r30, 0x08 ; 8 + 4f2: ff e3 ldi r31, 0x3F ; 63 + 4f4: 21 81 ldd r18, Z+1 ; 0x01 + 4f6: 32 81 ldd r19, Z+2 ; 0x02 + 4f8: a9 01 movw r20, r18 + 4fa: 48 2b or r20, r24 + 4fc: ca 01 movw r24, r20 + 4fe: 81 83 std Z+1, r24 ; 0x01 + 500: 92 83 std Z+2, r25 ; 0x02 state = CM_MSG_DECODE_STATE_GET_DATA; + 502: 85 e0 ldi r24, 0x05 ; 5 + 504: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 break; + 508: 1e c0 rjmp .+60 ; 0x546 case CM_MSG_DECODE_STATE_GET_DATA: msg.msg_data[data_bytes_idx] = rx_byte; - 448: 90 91 3f 3f lds r25, 0x3F3F ; 0x803f3f - 44c: e9 2f mov r30, r25 - 44e: f0 e0 ldi r31, 0x00 ; 0 - 450: e8 5f subi r30, 0xF8 ; 248 - 452: f0 4c sbci r31, 0xC0 ; 192 - 454: 83 83 std Z+3, r24 ; 0x03 + 50a: 90 91 3f 3f lds r25, 0x3F3F ; 0x803f3f + 50e: e9 2f mov r30, r25 + 510: f0 e0 ldi r31, 0x00 ; 0 + 512: e8 5f subi r30, 0xF8 ; 248 + 514: f0 4c sbci r31, 0xC0 ; 192 + 516: 83 83 std Z+3, r24 ; 0x03 data_bytes_idx++; - 456: 81 e0 ldi r24, 0x01 ; 1 - 458: 89 0f add r24, r25 - 45a: 80 93 3f 3f sts 0x3F3F, r24 ; 0x803f3f + 518: 81 e0 ldi r24, 0x01 ; 1 + 51a: 89 0f add r24, r25 + 51c: 80 93 3f 3f sts 0x3F3F, r24 ; 0x803f3f if(data_bytes_idx >= msg.msg_data_size){ - 45e: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 - 462: 89 17 cp r24, r25 - 464: 50 f3 brcs .-44 ; 0x43a + 520: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 + 524: 89 17 cp r24, r25 + 526: 78 f0 brcs .+30 ; 0x546 // calculate CRC.. // Run function pointer msg evt.. s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); - 466: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 - 46a: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 - 46e: 6b e0 ldi r22, 0x0B ; 11 - 470: 7f e3 ldi r23, 0x3F ; 63 - 472: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 - 476: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 - 47a: 09 95 icall + 528: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 + 52c: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 + 530: 6b e0 ldi r22, 0x0B ; 11 + 532: 7f e3 ldi r23, 0x3F ; 63 + 534: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 + 538: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 + 53c: 09 95 icall state = CM_MSG_WAIT_FOR_STARTCODE; - 47c: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 + 53e: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 data_bytes_idx = 0; - 480: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f + 542: 10 92 3f 3f sts 0x3F3F, r1 ; 0x803f3f } break; } return 0; } - 484: 80 e0 ldi r24, 0x00 ; 0 - 486: 90 e0 ldi r25, 0x00 ; 0 - 488: 08 95 ret - msg.msg_data_crc = (rx_byte << 8) & 0xff00; - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - break; - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: - msg.msg_data_crc |= rx_byte & 0xff; - 48a: 20 91 09 3f lds r18, 0x3F09 ; 0x803f09 - 48e: 30 91 0a 3f lds r19, 0x3F0A ; 0x803f0a - 492: a9 01 movw r20, r18 - 494: 48 2b or r20, r24 - 496: ca 01 movw r24, r20 - 498: 80 93 09 3f sts 0x3F09, r24 ; 0x803f09 - 49c: 90 93 0a 3f sts 0x3F0A, r25 ; 0x803f0a - state = CM_MSG_DECODE_STATE_GET_DATA; - 4a0: 85 e0 ldi r24, 0x05 ; 5 - 4a2: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - } - break; - } - return 0; -} - 4a6: 80 e0 ldi r24, 0x00 ; 0 - 4a8: 90 e0 ldi r25, 0x00 ; 0 - 4aa: 08 95 ret - static uint8_t data_bytes_idx = 0; - - switch (state) - { - case CM_MSG_WAIT_FOR_STARTCODE: - if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; - 4ac: 84 df rcall .-248 ; 0x3b6 - 4ae: 89 2b or r24, r25 - 4b0: 39 f7 brne .-50 ; 0x480 - 4b2: 81 e0 ldi r24, 0x01 ; 1 - 4b4: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - 4b8: e3 cf rjmp .-58 ; 0x480 - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; - - break; - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: - msg.msg_data_crc = (rx_byte << 8) & 0xff00; - 4ba: 10 92 09 3f sts 0x3F09, r1 ; 0x803f09 - 4be: 80 93 0a 3f sts 0x3F0A, r24 ; 0x803f0a - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - 4c2: 84 e0 ldi r24, 0x04 ; 4 - 4c4: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - } - break; - } - return 0; -} - 4c8: 80 e0 ldi r24, 0x00 ; 0 - 4ca: 90 e0 ldi r25, 0x00 ; 0 - 4cc: 08 95 ret + 546: 80 e0 ldi r24, 0x00 ; 0 + 548: 90 e0 ldi r25, 0x00 ; 0 + 54a: 08 95 ret -000004ce : +0000054c : 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; - 4ce: 00 97 sbiw r24, 0x00 ; 0 - 4d0: 59 f0 breq .+22 ; 0x4e8 - 4d2: 61 15 cp r22, r1 - 4d4: 71 05 cpc r23, r1 - 4d6: 41 f0 breq .+16 ; 0x4e8 + 54c: 00 97 sbiw r24, 0x00 ; 0 + 54e: 59 f0 breq .+22 ; 0x566 + 550: 61 15 cp r22, r1 + 552: 71 05 cpc r23, r1 + 554: 41 f0 breq .+16 ; 0x566 s_msg_cmplete_evt_inst = msg_cmplete_evt_inst; - 4d8: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 - 4dc: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 + 556: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 + 55a: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 s_msg_cmplete_evt_fpt = msg_cmplete_evt_fp; - 4e0: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 - 4e4: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 - 4e8: 08 95 ret + 55e: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 + 562: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 + 566: 08 95 ret -000004ea : - if(inst == NULL)return 1; - - return 0; -} - -static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ - 4ea: cf 93 push r28 - 4ec: df 93 push r29 - 4ee: fc 01 movw r30, r24 -#define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 -#define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) - -static uint8_t isStructValid(storno_xtal_app_t *inst){ - - if(inst->si5351_dev == NULL) return 1; - 4f0: 82 81 ldd r24, Z+2 ; 0x02 - 4f2: 93 81 ldd r25, Z+3 ; 0x03 - 4f4: 00 97 sbiw r24, 0x00 ; 0 - 4f6: a9 f0 breq .+42 ; 0x522 - if(inst == NULL)return 1; - 4f8: 30 97 sbiw r30, 0x00 ; 0 - 4fa: 99 f0 breq .+38 ; 0x522 - - // Check Struct - if(isStructValid(inst) != 0)return; - - // 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; - 4fc: 21 81 ldd r18, Z+1 ; 0x01 - 4fe: 30 81 ld r19, Z - 500: 23 17 cp r18, r19 - 502: 79 f0 breq .+30 ; 0x522 - 504: ef 01 movw r28, r30 - - switch(inst->state_next){ - 506: 21 30 cpi r18, 0x01 ; 1 - 508: 79 f0 breq .+30 ; 0x528 - 50a: 22 30 cpi r18, 0x02 ; 2 - 50c: 51 f4 brne .+20 ; 0x522 - - break; - - case STORNO_APP_TX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - 50e: 41 e0 ldi r20, 0x01 ; 1 - 510: 60 e0 ldi r22, 0x00 ; 0 - 512: d9 d2 rcall .+1458 ; 0xac6 - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 514: 40 e0 ldi r20, 0x00 ; 0 - 516: 61 e0 ldi r22, 0x01 ; 1 - 518: 8a 81 ldd r24, Y+2 ; 0x02 - 51a: 9b 81 ldd r25, Y+3 ; 0x03 - break; - - } +00000568 : + // Send status back maybe.. + //Force state machine to load new settings from eeprom: + inst->state_next = STORNO_APP_PROGRAM_OSC; } - 51c: df 91 pop r29 - 51e: cf 91 pop r28 - - case STORNO_APP_TX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 520: d2 c2 rjmp .+1444 ; 0xac6 - break; - - } - - -} - 522: df 91 pop r29 - 524: cf 91 pop r28 - 526: 08 95 ret - - switch(inst->state_next){ - - case STORNO_APP_RX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_ENABLE); // RX - 528: 40 e0 ldi r20, 0x00 ; 0 - 52a: 60 e0 ldi r22, 0x00 ; 0 - 52c: cc d2 rcall .+1432 ; 0xac6 - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_DISABLE); // TX - 52e: 41 e0 ldi r20, 0x01 ; 1 - - case STORNO_APP_TX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 530: 61 e0 ldi r22, 0x01 ; 1 - 532: 8a 81 ldd r24, Y+2 ; 0x02 - 534: 9b 81 ldd r25, Y+3 ; 0x03 - break; - - } - - -} - 536: df 91 pop r29 - 538: cf 91 pop r28 - - case STORNO_APP_TX_MODE: - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_0,SI5351_OUTPUT_DISABLE); // RX - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_OUTPUT_ENABLE); // TX - 53a: c5 c2 rjmp .+1418 ; 0xac6 - -0000053c : - } - - -} - -static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ - 53c: 9f 92 push r9 - 53e: af 92 push r10 - 540: bf 92 push r11 - 542: cf 92 push r12 - 544: df 92 push r13 - 546: ef 92 push r14 - 548: ff 92 push r15 - 54a: 0f 93 push r16 - 54c: 1f 93 push r17 - 54e: cf 93 push r28 - 550: df 93 push r29 - 552: ec 01 movw r28, r24 - 554: 94 2e mov r9, r20 - - cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_data.MSNx_P1, inst->pll_param_data.MSNx_P2, inst->pll_param_data.MSNx_P3); - 556: ad 84 ldd r10, Y+13 ; 0x0d - 558: be 84 ldd r11, Y+14 ; 0x0e - 55a: cf 84 ldd r12, Y+15 ; 0x0f - 55c: d8 88 ldd r13, Y+16 ; 0x10 - 55e: e9 84 ldd r14, Y+9 ; 0x09 - 560: fa 84 ldd r15, Y+10 ; 0x0a - 562: 0b 85 ldd r16, Y+11 ; 0x0b - 564: 1c 85 ldd r17, Y+12 ; 0x0c - 566: 2d 81 ldd r18, Y+5 ; 0x05 - 568: 3e 81 ldd r19, Y+6 ; 0x06 - 56a: 4f 81 ldd r20, Y+7 ; 0x07 - 56c: 58 85 ldd r21, Y+8 ; 0x08 - 56e: 8a 81 ldd r24, Y+2 ; 0x02 - 570: 9b 81 ldd r25, Y+3 ; 0x03 - 572: 9a d1 rcall .+820 ; 0x8a8 - //_delay_ms(1); - cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_data.MSx_P1, inst->pll_param_data.MSx_P2, inst->pll_param_data.MSx_P3); - 574: a9 8c ldd r10, Y+25 ; 0x19 - 576: ba 8c ldd r11, Y+26 ; 0x1a - 578: cb 8c ldd r12, Y+27 ; 0x1b - 57a: dc 8c ldd r13, Y+28 ; 0x1c - 57c: ed 88 ldd r14, Y+21 ; 0x15 - 57e: fe 88 ldd r15, Y+22 ; 0x16 - 580: 0f 89 ldd r16, Y+23 ; 0x17 - 582: 18 8d ldd r17, Y+24 ; 0x18 - 584: 29 89 ldd r18, Y+17 ; 0x11 - 586: 3a 89 ldd r19, Y+18 ; 0x12 - 588: 4b 89 ldd r20, Y+19 ; 0x13 - 58a: 5c 89 ldd r21, Y+20 ; 0x14 - 58c: 69 2d mov r22, r9 - 58e: 8a 81 ldd r24, Y+2 ; 0x02 - 590: 9b 81 ldd r25, Y+3 ; 0x03 - 592: 05 d2 rcall .+1034 ; 0x99e - //_delay_ms(1); - cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); - 594: 40 e0 ldi r20, 0x00 ; 0 - 596: 69 2d mov r22, r9 + 568: cf 93 push r28 + 56a: df 93 push r29 + 56c: fc 01 movw r30, r24 + 56e: 82 81 ldd r24, Z+2 ; 0x02 + 570: 93 81 ldd r25, Z+3 ; 0x03 + 572: 00 97 sbiw r24, 0x00 ; 0 + 574: e9 f0 breq .+58 ; 0x5b0 + 576: 30 97 sbiw r30, 0x00 ; 0 + 578: d9 f0 breq .+54 ; 0x5b0 + 57a: 21 81 ldd r18, Z+1 ; 0x01 + 57c: 30 81 ld r19, Z + 57e: 23 17 cp r18, r19 + 580: b9 f0 breq .+46 ; 0x5b0 + 582: ef 01 movw r28, r30 + 584: 21 30 cpi r18, 0x01 ; 1 + 586: 19 f0 breq .+6 ; 0x58e + 588: 22 30 cpi r18, 0x02 ; 2 + 58a: 51 f0 breq .+20 ; 0x5a0 + 58c: 11 c0 rjmp .+34 ; 0x5b0 + 58e: 40 e0 ldi r20, 0x00 ; 0 + 590: 60 e0 ldi r22, 0x00 ; 0 + 592: 0e d2 rcall .+1052 ; 0x9b0 + 594: 41 e0 ldi r20, 0x01 ; 1 + 596: 61 e0 ldi r22, 0x01 ; 1 598: 8a 81 ldd r24, Y+2 ; 0x02 59a: 9b 81 ldd r25, Y+3 ; 0x03 - - -} - 59c: df 91 pop r29 - 59e: cf 91 pop r28 - 5a0: 1f 91 pop r17 - 5a2: 0f 91 pop r16 - 5a4: ff 90 pop r15 - 5a6: ef 90 pop r14 - 5a8: df 90 pop r13 - 5aa: cf 90 pop r12 - 5ac: bf 90 pop r11 - 5ae: af 90 pop r10 - 5b0: 9f 90 pop r9 - - cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_data.MSNx_P1, inst->pll_param_data.MSNx_P2, inst->pll_param_data.MSNx_P3); - //_delay_ms(1); - cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_data.MSx_P1, inst->pll_param_data.MSx_P2, inst->pll_param_data.MSx_P3); - //_delay_ms(1); - cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); - 5b2: b6 c2 rjmp .+1388 ; 0xb20 + 59c: 09 d2 rcall .+1042 ; 0x9b0 + 59e: 08 c0 rjmp .+16 ; 0x5b0 + 5a0: 41 e0 ldi r20, 0x01 ; 1 + 5a2: 60 e0 ldi r22, 0x00 ; 0 + 5a4: 05 d2 rcall .+1034 ; 0x9b0 + 5a6: 40 e0 ldi r20, 0x00 ; 0 + 5a8: 61 e0 ldi r22, 0x01 ; 1 + 5aa: 8a 81 ldd r24, Y+2 ; 0x02 + 5ac: 9b 81 ldd r25, Y+3 ; 0x03 + 5ae: 00 d2 rcall .+1024 ; 0x9b0 + 5b0: df 91 pop r29 + 5b2: cf 91 pop r28 + 5b4: 08 95 ret -000005b4 : +000005b6 : + 5b6: 9f 92 push r9 + 5b8: af 92 push r10 + 5ba: bf 92 push r11 + 5bc: cf 92 push r12 + 5be: df 92 push r13 + 5c0: ef 92 push r14 + 5c2: ff 92 push r15 + 5c4: 0f 93 push r16 + 5c6: 1f 93 push r17 + 5c8: cf 93 push r28 + 5ca: df 93 push r29 + 5cc: ec 01 movw r28, r24 + 5ce: 94 2e mov r9, r20 + 5d0: ad 84 ldd r10, Y+13 ; 0x0d + 5d2: be 84 ldd r11, Y+14 ; 0x0e + 5d4: cf 84 ldd r12, Y+15 ; 0x0f + 5d6: d8 88 ldd r13, Y+16 ; 0x10 + 5d8: e9 84 ldd r14, Y+9 ; 0x09 + 5da: fa 84 ldd r15, Y+10 ; 0x0a + 5dc: 0b 85 ldd r16, Y+11 ; 0x0b + 5de: 1c 85 ldd r17, Y+12 ; 0x0c + 5e0: 2d 81 ldd r18, Y+5 ; 0x05 + 5e2: 3e 81 ldd r19, Y+6 ; 0x06 + 5e4: 4f 81 ldd r20, Y+7 ; 0x07 + 5e6: 58 85 ldd r21, Y+8 ; 0x08 + 5e8: 8a 81 ldd r24, Y+2 ; 0x02 + 5ea: 9b 81 ldd r25, Y+3 ; 0x03 + 5ec: 7d d2 rcall .+1274 ; 0xae8 + 5ee: a9 8c ldd r10, Y+25 ; 0x19 + 5f0: ba 8c ldd r11, Y+26 ; 0x1a + 5f2: cb 8c ldd r12, Y+27 ; 0x1b + 5f4: dc 8c ldd r13, Y+28 ; 0x1c + 5f6: ed 88 ldd r14, Y+21 ; 0x15 + 5f8: fe 88 ldd r15, Y+22 ; 0x16 + 5fa: 0f 89 ldd r16, Y+23 ; 0x17 + 5fc: 18 8d ldd r17, Y+24 ; 0x18 + 5fe: 29 89 ldd r18, Y+17 ; 0x11 + 600: 3a 89 ldd r19, Y+18 ; 0x12 + 602: 4b 89 ldd r20, Y+19 ; 0x13 + 604: 5c 89 ldd r21, Y+20 ; 0x14 + 606: 69 2d mov r22, r9 + 608: 8a 81 ldd r24, Y+2 ; 0x02 + 60a: 9b 81 ldd r25, Y+3 ; 0x03 + 60c: 7b d1 rcall .+758 ; 0x904 + 60e: 40 e0 ldi r20, 0x00 ; 0 + 610: 69 2d mov r22, r9 + 612: 8a 81 ldd r24, Y+2 ; 0x02 + 614: 9b 81 ldd r25, Y+3 ; 0x03 + 616: f3 d1 rcall .+998 ; 0x9fe + 618: df 91 pop r29 + 61a: cf 91 pop r28 + 61c: 1f 91 pop r17 + 61e: 0f 91 pop r16 + 620: ff 90 pop r15 + 622: ef 90 pop r14 + 624: df 90 pop r13 + 626: cf 90 pop r12 + 628: bf 90 pop r11 + 62a: af 90 pop r10 + 62c: 9f 90 pop r9 + 62e: 08 95 ret - - -} +00000630 : + 630: fb 01 movw r30, r22 + 632: 20 81 ld r18, Z + 634: 22 23 and r18, r18 + 636: 19 f0 breq .+6 ; 0x63e + 638: 21 30 cpi r18, 0x01 ; 1 + 63a: 51 f0 breq .+20 ; 0x650 + 63c: 11 c0 rjmp .+34 ; 0x660 + 63e: dc 01 movw r26, r24 + 640: 14 96 adiw r26, 0x04 ; 4 + 642: 8e e1 ldi r24, 0x1E ; 30 + 644: fb 01 movw r30, r22 + 646: 01 90 ld r0, Z+ + 648: 0d 92 st X+, r0 + 64a: 8a 95 dec r24 + 64c: e1 f7 brne .-8 ; 0x646 + 64e: 08 c0 rjmp .+16 ; 0x660 + 650: dc 01 movw r26, r24 + 652: 92 96 adiw r26, 0x22 ; 34 + 654: 8e e1 ldi r24, 0x1E ; 30 + 656: fb 01 movw r30, r22 + 658: 01 90 ld r0, Z+ + 65a: 0d 92 st X+, r0 + 65c: 8a 95 dec r24 + 65e: e1 f7 brne .-8 ; 0x658 + 660: 80 e0 ldi r24, 0x00 ; 0 + 662: 90 e0 ldi r25, 0x00 ; 0 + 664: 08 95 ret -void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ - 5b4: 0f 93 push r16 - 5b6: 1f 93 push r17 - 5b8: cf 93 push r28 - 5ba: df 93 push r29 -#define PLLA_SETTINGS_EEPROM_ADDR 0x00 // addr 0 -#define PLLB_SETTINGS_EEPROM_ADDR 0x20 // addr 32 (64 bytes total memory) - -static uint8_t isStructValid(storno_xtal_app_t *inst){ - - if(inst->si5351_dev == NULL) return 1; - 5bc: fc 01 movw r30, r24 - 5be: 22 81 ldd r18, Z+2 ; 0x02 - 5c0: 33 81 ldd r19, Z+3 ; 0x03 - 5c2: 23 2b or r18, r19 - 5c4: a9 f0 breq .+42 ; 0x5f0 - if(inst == NULL)return 1; - 5c6: 00 97 sbiw r24, 0x00 ; 0 - 5c8: 99 f0 breq .+38 ; 0x5f0 - 5ca: ec 01 movw r28, r24 -void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ - - // Check Struct - if(isStructValid(inst) != 0)return; - - switch (inst->state_next) - 5cc: 81 81 ldd r24, Z+1 ; 0x01 - 5ce: 81 30 cpi r24, 0x01 ; 1 - 5d0: 09 f4 brne .+2 ; 0x5d4 - 5d2: 42 c0 rjmp .+132 ; 0x658 - 5d4: 90 f0 brcs .+36 ; 0x5fa - 5d6: 82 30 cpi r24, 0x02 ; 2 - 5d8: 59 f4 brne .+22 ; 0x5f0 - - break; - - case STORNO_APP_TX_MODE: - // If we just came from another state, then Enable TX osc here.. - cqm6xx_app_updateOsc(inst); - 5da: ce 01 movw r24, r28 - 5dc: 86 df rcall .-244 ; 0x4ea - - // Update state now.. - inst->state_now = inst->state_next; - 5de: 89 81 ldd r24, Y+1 ; 0x01 - 5e0: 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; - 5e2: 63 e0 ldi r22, 0x03 ; 3 - 5e4: 80 e0 ldi r24, 0x00 ; 0 - 5e6: 84 dd rcall .-1272 ; 0xf0 - 5e8: 89 2b or r24, r25 - 5ea: 11 f4 brne .+4 ; 0x5f0 - 5ec: 81 e0 ldi r24, 0x01 ; 1 - 5ee: 89 83 std Y+1, r24 ; 0x01 - default: - break; - } - - -} - 5f0: df 91 pop r29 - 5f2: cf 91 pop r28 - 5f4: 1f 91 pop r17 - 5f6: 0f 91 pop r16 - 5f8: 08 95 ret - - switch (inst->state_next) - { - case STORNO_APP_PROGRAM_OSC: - // Read PLL parameters from EEPROM and Program PLL values here: - inst->state_now = inst->state_next; - 5fa: 18 82 st Y, r1 - -} -static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ - - // Read settings for PLLA first - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 5fc: 8e 01 movw r16, r28 - 5fe: 0c 5f subi r16, 0xFC ; 252 - 600: 1f 4f sbci r17, 0xFF ; 255 - 602: 4e e1 ldi r20, 0x1E ; 30 - 604: b8 01 movw r22, r16 - 606: 80 e0 ldi r24, 0x00 ; 0 - 608: 90 e0 ldi r25, 0x00 ; 0 - 60a: 51 dd rcall .-1374 ; 0xae - //_delay_ms(1); - cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); - 60c: 60 e0 ldi r22, 0x00 ; 0 - 60e: 8a 81 ldd r24, Y+2 ; 0x02 - 610: 9b 81 ldd r25, Y+3 ; 0x03 - 612: dc d2 rcall .+1464 ; 0xbcc - //_delay_ms(1); - - - cqm_setPLLParam(inst, SI5351_PLL_A, SI5351_OUTPUT_0); - 614: 40 e0 ldi r20, 0x00 ; 0 - 616: 60 e0 ldi r22, 0x00 ; 0 - 618: ce 01 movw r24, r28 - 61a: 90 df rcall .-224 ; 0x53c - //_delay_ms(1); - - - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 61c: 4e e1 ldi r20, 0x1E ; 30 - 61e: b8 01 movw r22, r16 - 620: 80 e2 ldi r24, 0x20 ; 32 - 622: 90 e0 ldi r25, 0x00 ; 0 - 624: 44 dd rcall .-1400 ; 0xae - //_delay_ms(1); - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); - 626: 41 e0 ldi r20, 0x01 ; 1 - 628: 61 e0 ldi r22, 0x01 ; 1 - 62a: ce 01 movw r24, r28 - 62c: 87 df rcall .-242 ; 0x53c - - - // Set third output to crystal freq for calibration! - cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_2); - 62e: 42 e0 ldi r20, 0x02 ; 2 - 630: 61 e0 ldi r22, 0x01 ; 1 - 632: ce 01 movw r24, r28 - 634: 83 df rcall .-250 ; 0x53c - cm_setCLKControl(inst->si5351_dev, SI5351_OUTPUT_2,SI5351_CLK_POWER_UP); - 636: 40 e0 ldi r20, 0x00 ; 0 - 638: 62 e0 ldi r22, 0x02 ; 2 - 63a: 8a 81 ldd r24, Y+2 ; 0x02 - 63c: 9b 81 ldd r25, Y+3 ; 0x03 - 63e: 70 d2 rcall .+1248 ; 0xb20 - //_delay_ms(1); - cm_setOutputEnable(inst->si5351_dev,SI5351_OUTPUT_2,SI5351_OUTPUT_ENABLE); - 640: 40 e0 ldi r20, 0x00 ; 0 - 642: 62 e0 ldi r22, 0x02 ; 2 - 644: 8a 81 ldd r24, Y+2 ; 0x02 - 646: 9b 81 ldd r25, Y+3 ; 0x03 - 648: 3e d2 rcall .+1148 ; 0xac6 - - cqm6xx_app_loadPLLParam(inst); - - - // if ok, then go to RX mode: - inst->state_next = STORNO_APP_RX_MODE; - 64a: 81 e0 ldi r24, 0x01 ; 1 - 64c: 89 83 std Y+1, r24 ; 0x01 - default: - break; - } - - -} - 64e: df 91 pop r29 - 650: cf 91 pop r28 - 652: 1f 91 pop r17 - 654: 0f 91 pop r16 - 656: 08 95 ret - break; - - - case STORNO_APP_RX_MODE: - // If we just came from another state, then Enable RX osc here.. - cqm6xx_app_updateOsc(inst); - 658: ce 01 movw r24, r28 - 65a: 47 df rcall .-370 ; 0x4ea - - // Update state now.. - inst->state_now = inst->state_next; - 65c: 89 81 ldd r24, Y+1 ; 0x01 - 65e: 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; - 660: 63 e0 ldi r22, 0x03 ; 3 - 662: 80 e0 ldi r24, 0x00 ; 0 - 664: 45 dd rcall .-1398 ; 0xf0 - 666: 01 97 sbiw r24, 0x01 ; 1 - 668: 19 f6 brne .-122 ; 0x5f0 - 66a: 82 e0 ldi r24, 0x02 ; 2 - 66c: 89 83 std Y+1, r24 ; 0x01 - 66e: c0 cf rjmp .-128 ; 0x5f0 - -00000670 : - } - - -} - -void programPLL_Parameters(storno_xtal_app_t *inst){ - 670: cf 93 push r28 - 672: df 93 push r29 - 674: ec 01 movw r28, r24 - - uint8_t *data_ptr = (void *)&inst->pll_param_data; - - //Burn settings into eeprom here: - switch(inst->pll_param_data.PLL_Ident){ - 676: 8c 81 ldd r24, Y+4 ; 0x04 - 678: 81 30 cpi r24, 0x01 ; 1 - 67a: 31 f1 breq .+76 ; 0x6c8 - 67c: d0 f0 brcs .+52 ; 0x6b2 - 67e: 8e 3f cpi r24, 0xFE ; 254 - 680: 69 f0 breq .+26 ; 0x69c - 682: 8f 3f cpi r24, 0xFF ; 255 - 684: 39 f4 brne .+14 ; 0x694 - case MSG_GET_PLLA_PARAM: - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - break; - - case MSG_GET_PLLB_PARAM: - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 686: 4e e1 ldi r20, 0x1E ; 30 - 688: be 01 movw r22, r28 - 68a: 6c 5f subi r22, 0xFC ; 252 - 68c: 7f 4f sbci r23, 0xFF ; 255 - 68e: 80 e2 ldi r24, 0x20 ; 32 - 690: 90 e0 ldi r25, 0x00 ; 0 - 692: 0d dd rcall .-1510 ; 0xae - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 694: 19 82 std Y+1, r1 ; 0x01 - -} - 696: df 91 pop r29 - 698: cf 91 pop r28 - 69a: 08 95 ret - case MSG_PLLB_PARAM: - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - break; - - case MSG_GET_PLLA_PARAM: - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 69c: 4e e1 ldi r20, 0x1E ; 30 - 69e: be 01 movw r22, r28 - 6a0: 6c 5f subi r22, 0xFC ; 252 - 6a2: 7f 4f sbci r23, 0xFF ; 255 - 6a4: 80 e0 ldi r24, 0x00 ; 0 - 6a6: 90 e0 ldi r25, 0x00 ; 0 - 6a8: 02 dd rcall .-1532 ; 0xae - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 6aa: 19 82 std Y+1, r1 ; 0x01 - -} - 6ac: df 91 pop r29 - 6ae: cf 91 pop r28 - 6b0: 08 95 ret - - //Burn settings into eeprom here: - switch(inst->pll_param_data.PLL_Ident){ - - case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); +00000666 : + 666: 0f 93 push r16 + 668: 1f 93 push r17 + 66a: cf 93 push r28 + 66c: df 93 push r29 + 66e: fc 01 movw r30, r24 + 670: 22 81 ldd r18, Z+2 ; 0x02 + 672: 33 81 ldd r19, Z+3 ; 0x03 + 674: 23 2b or r18, r19 + 676: 09 f4 brne .+2 ; 0x67a + 678: 4d c0 rjmp .+154 ; 0x714 + 67a: 00 97 sbiw r24, 0x00 ; 0 + 67c: 09 f4 brne .+2 ; 0x680 + 67e: 4a c0 rjmp .+148 ; 0x714 + 680: ec 01 movw r28, r24 + 682: 81 81 ldd r24, Z+1 ; 0x01 + 684: 81 30 cpi r24, 0x01 ; 1 + 686: 79 f1 breq .+94 ; 0x6e6 + 688: 18 f0 brcs .+6 ; 0x690 + 68a: 82 30 cpi r24, 0x02 ; 2 + 68c: c1 f1 breq .+112 ; 0x6fe + 68e: 42 c0 rjmp .+132 ; 0x714 + 690: 10 82 st Z, r1 + 692: 8f 01 movw r16, r30 + 694: 0c 5f subi r16, 0xFC ; 252 + 696: 1f 4f sbci r17, 0xFF ; 255 + 698: 4e e1 ldi r20, 0x1E ; 30 + 69a: b8 01 movw r22, r16 + 69c: 80 e0 ldi r24, 0x00 ; 0 + 69e: 90 e0 ldi r25, 0x00 ; 0 + 6a0: 08 dd rcall .-1520 ; 0xb2 + 6a2: 60 e0 ldi r22, 0x00 ; 0 + 6a4: 8a 81 ldd r24, Y+2 ; 0x02 + 6a6: 9b 81 ldd r25, Y+3 ; 0x03 + 6a8: de d1 rcall .+956 ; 0xa66 + 6aa: 40 e0 ldi r20, 0x00 ; 0 + 6ac: 60 e0 ldi r22, 0x00 ; 0 + 6ae: ce 01 movw r24, r28 + 6b0: 82 df rcall .-252 ; 0x5b6 6b2: 4e e1 ldi r20, 0x1E ; 30 - 6b4: be 01 movw r22, r28 - 6b6: 6c 5f subi r22, 0xFC ; 252 - 6b8: 7f 4f sbci r23, 0xFF ; 255 - 6ba: 80 e0 ldi r24, 0x00 ; 0 - 6bc: 90 e0 ldi r25, 0x00 ; 0 - 6be: d6 dc rcall .-1620 ; 0x6c - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 6c0: 19 82 std Y+1, r1 ; 0x01 - -} - 6c2: df 91 pop r29 - 6c4: cf 91 pop r28 - 6c6: 08 95 ret - case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - break; - - case MSG_PLLB_PARAM: - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 6c8: 4e e1 ldi r20, 0x1E ; 30 - 6ca: be 01 movw r22, r28 - 6cc: 6c 5f subi r22, 0xFC ; 252 - 6ce: 7f 4f sbci r23, 0xFF ; 255 - 6d0: 80 e2 ldi r24, 0x20 ; 32 - 6d2: 90 e0 ldi r25, 0x00 ; 0 - 6d4: cb dc rcall .-1642 ; 0x6c - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 6d6: 19 82 std Y+1, r1 ; 0x01 - -} - 6d8: df 91 pop r29 - 6da: cf 91 pop r28 - 6dc: 08 95 ret + 6b4: b8 01 movw r22, r16 + 6b6: 80 e2 ldi r24, 0x20 ; 32 + 6b8: 90 e0 ldi r25, 0x00 ; 0 + 6ba: fb dc rcall .-1546 ; 0xb2 + 6bc: 41 e0 ldi r20, 0x01 ; 1 + 6be: 61 e0 ldi r22, 0x01 ; 1 + 6c0: ce 01 movw r24, r28 + 6c2: 79 df rcall .-270 ; 0x5b6 + 6c4: 42 e0 ldi r20, 0x02 ; 2 + 6c6: 61 e0 ldi r22, 0x01 ; 1 + 6c8: ce 01 movw r24, r28 + 6ca: 75 df rcall .-278 ; 0x5b6 + 6cc: 40 e0 ldi r20, 0x00 ; 0 + 6ce: 62 e0 ldi r22, 0x02 ; 2 + 6d0: 8a 81 ldd r24, Y+2 ; 0x02 + 6d2: 9b 81 ldd r25, Y+3 ; 0x03 + 6d4: 94 d1 rcall .+808 ; 0x9fe + 6d6: 40 e0 ldi r20, 0x00 ; 0 + 6d8: 62 e0 ldi r22, 0x02 ; 2 + 6da: 8a 81 ldd r24, Y+2 ; 0x02 + 6dc: 9b 81 ldd r25, Y+3 ; 0x03 + 6de: 68 d1 rcall .+720 ; 0x9b0 + 6e0: 81 e0 ldi r24, 0x01 ; 1 + 6e2: 89 83 std Y+1, r24 ; 0x01 + 6e4: 17 c0 rjmp .+46 ; 0x714 + 6e6: cf 01 movw r24, r30 + 6e8: 3f df rcall .-386 ; 0x568 + 6ea: 89 81 ldd r24, Y+1 ; 0x01 + 6ec: 88 83 st Y, r24 + 6ee: 63 e0 ldi r22, 0x03 ; 3 + 6f0: 80 e0 ldi r24, 0x00 ; 0 + 6f2: 02 dd rcall .-1532 ; 0xf8 + 6f4: 01 97 sbiw r24, 0x01 ; 1 + 6f6: 71 f4 brne .+28 ; 0x714 + 6f8: 82 e0 ldi r24, 0x02 ; 2 + 6fa: 89 83 std Y+1, r24 ; 0x01 + 6fc: 0b c0 rjmp .+22 ; 0x714 + 6fe: cf 01 movw r24, r30 + 700: 33 df rcall .-410 ; 0x568 + 702: 89 81 ldd r24, Y+1 ; 0x01 + 704: 88 83 st Y, r24 + 706: 63 e0 ldi r22, 0x03 ; 3 + 708: 80 e0 ldi r24, 0x00 ; 0 + 70a: f6 dc rcall .-1556 ; 0xf8 + 70c: 89 2b or r24, r25 + 70e: 11 f4 brne .+4 ; 0x714 + 710: 81 e0 ldi r24, 0x01 ; 1 + 712: 89 83 std Y+1, r24 ; 0x01 + 714: df 91 pop r29 + 716: cf 91 pop r28 + 718: 1f 91 pop r17 + 71a: 0f 91 pop r16 + 71c: 08 95 ret -000006de : -} - -int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ - - - memcpy(&inst->pll_param_data,rxData,sizeof(storno_pll_param_msg)); - 6de: dc 01 movw r26, r24 - 6e0: 14 96 adiw r26, 0x04 ; 4 - 6e2: 2e e1 ldi r18, 0x1E ; 30 - 6e4: fb 01 movw r30, r22 - 6e6: 01 90 ld r0, Z+ - 6e8: 0d 92 st X+, r0 - 6ea: 2a 95 dec r18 - 6ec: e1 f7 brne .-8 ; 0x6e6 - - programPLL_Parameters(inst); - 6ee: c0 df rcall .-128 ; 0x670 +0000071e : return 0; } - 6f0: 80 e0 ldi r24, 0x00 ; 0 - 6f2: 90 e0 ldi r25, 0x00 ; 0 - 6f4: 08 95 ret - -000006f6 : void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ - 6f6: 0f 93 push r16 - 6f8: 1f 93 push r17 - 6fa: cf 93 push r28 - 6fc: df 93 push r29 + 71e: 0f 93 push r16 + 720: 1f 93 push r17 + 722: cf 93 push r28 + 724: df 93 push r29 if(si5351_dev == NULL) return; - 6fe: 61 15 cp r22, r1 - 700: 71 05 cpc r23, r1 - 702: 11 f1 breq .+68 ; 0x748 + 726: 61 15 cp r22, r1 + 728: 71 05 cpc r23, r1 + 72a: 09 f4 brne .+2 ; 0x72e + 72c: 88 c0 rjmp .+272 ; 0x83e if(inst == NULL)return; - 704: 00 97 sbiw r24, 0x00 ; 0 - 706: 01 f1 breq .+64 ; 0x748 - 708: ec 01 movw r28, r24 + 72e: 00 97 sbiw r24, 0x00 ; 0 + 730: 09 f4 brne .+2 ; 0x734 + 732: 85 c0 rjmp .+266 ; 0x83e + 734: ec 01 movw r28, r24 inst->state_next = STORNO_APP_PROGRAM_OSC; - 70a: 19 82 std Y+1, r1 ; 0x01 + 736: 19 82 std Y+1, r1 ; 0x01 inst->state_now = STORNO_APP_PROGRAM_OSC; - 70c: 18 82 st Y, r1 + 738: 18 82 st Y, r1 inst->si5351_dev = si5351_dev; - 70e: 6a 83 std Y+2, r22 ; 0x02 - 710: 7b 83 std Y+3, r23 ; 0x03 + 73a: 6a 83 std Y+2, r22 ; 0x02 + 73c: 7b 83 std Y+3, r23 ; 0x03 cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); - 712: 6f e6 ldi r22, 0x6F ; 111 - 714: 73 e0 ldi r23, 0x03 ; 3 - 716: db de rcall .-586 ; 0x4ce + 73e: 68 e1 ldi r22, 0x18 ; 24 + 740: 73 e0 ldi r23, 0x03 ; 3 + 742: 04 df rcall .-504 ; 0x54c cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); - 718: 6d e0 ldi r22, 0x0D ; 13 - 71a: 72 e0 ldi r23, 0x02 ; 2 - 71c: ce 01 movw r24, r28 - 71e: 18 de rcall .-976 ; 0x350 + 744: 62 e5 ldi r22, 0x52 ; 82 + 746: 72 e0 ldi r23, 0x02 ; 2 + 748: ce 01 movw r24, r28 + 74a: 3c de rcall .-904 ; 0x3c4 } static int isEEPROMValid(storno_xtal_app_t *inst){ - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); - 720: 8e 01 movw r16, r28 - 722: 0c 5f subi r16, 0xFC ; 252 - 724: 1f 4f sbci r17, 0xFF ; 255 - 726: 4e e1 ldi r20, 0x1E ; 30 - 728: b8 01 movw r22, r16 - 72a: 80 e0 ldi r24, 0x00 ; 0 - 72c: 90 e0 ldi r25, 0x00 ; 0 - 72e: bf dc rcall .-1666 ; 0xae - 730: f8 01 movw r30, r16 - 732: 9e 01 movw r18, r28 - 734: 2e 5d subi r18, 0xDE ; 222 - 736: 3f 4f sbci r19, 0xFF ; 255 - 738: 03 c0 rjmp .+6 ; 0x740 + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pllb_param_data,sizeof(storno_pll_param_msg)); + 74c: 8e 01 movw r16, r28 + 74e: 0e 5d subi r16, 0xDE ; 222 + 750: 1f 4f sbci r17, 0xFF ; 255 + 752: 4e e1 ldi r20, 0x1E ; 30 + 754: b8 01 movw r22, r16 + 756: 80 e0 ldi r24, 0x00 ; 0 + 758: 90 e0 ldi r25, 0x00 ; 0 + 75a: ab dc rcall .-1706 ; 0xb2 - uint8_t *ptr = (void*)&inst->pll_param_data; + uint8_t *ptr = (void*)&inst->pllb_param_data; for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) - 73a: e2 17 cp r30, r18 - 73c: f3 07 cpc r31, r19 - 73e: 49 f0 breq .+18 ; 0x752 { if ((*ptr != 0xff) && (*ptr != 0x00)) - 740: 91 91 ld r25, Z+ - 742: 91 50 subi r25, 0x01 ; 1 - 744: 9e 3f cpi r25, 0xFE ; 254 - 746: c8 f7 brcc .-14 ; 0x73a - if(!isEEPROMValid(inst)){ - // If settings are somehow unvalid, then write default settings.. - writeDefaultSettingsEEprom(inst); - } + 75c: 8a a1 ldd r24, Y+34 ; 0x22 + 75e: 81 50 subi r24, 0x01 ; 1 + 760: 8e 3f cpi r24, 0xFE ; 254 + 762: 08 f0 brcs .+2 ; 0x766 + 764: 66 c0 rjmp .+204 ; 0x832 + 766: 6b c0 rjmp .+214 ; 0x83e + 768: 91 91 ld r25, Z+ + 76a: 91 50 subi r25, 0x01 ; 1 + 76c: 9e 3f cpi r25, 0xFE ; 254 + 76e: 08 f4 brcc .+2 ; 0x772 + 770: 66 c0 rjmp .+204 ; 0x83e - 748: df 91 pop r29 - 74a: cf 91 pop r28 - 74c: 1f 91 pop r17 - 74e: 0f 91 pop r16 - 750: 08 95 ret -} + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pllb_param_data,sizeof(storno_pll_param_msg)); + + uint8_t *ptr = (void*)&inst->pllb_param_data; + + for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) + 772: 2e 17 cp r18, r30 + 774: 3f 07 cpc r19, r31 + 776: c1 f7 brne .-16 ; 0x768 static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ - inst->pll_param_data.PLL_Ident = 0; - 752: 1c 82 std Y+4, r1 ; 0x04 - inst->pll_param_data.MSNx_P1 = 3395; - 754: 83 e4 ldi r24, 0x43 ; 67 - 756: 9d e0 ldi r25, 0x0D ; 13 - 758: a0 e0 ldi r26, 0x00 ; 0 - 75a: b0 e0 ldi r27, 0x00 ; 0 - 75c: 8d 83 std Y+5, r24 ; 0x05 - 75e: 9e 83 std Y+6, r25 ; 0x06 - 760: af 83 std Y+7, r26 ; 0x07 - 762: b8 87 std Y+8, r27 ; 0x08 - inst->pll_param_data.MSNx_P2 = 11510; - 764: 86 ef ldi r24, 0xF6 ; 246 - 766: 9c e2 ldi r25, 0x2C ; 44 - 768: a0 e0 ldi r26, 0x00 ; 0 - 76a: b0 e0 ldi r27, 0x00 ; 0 - 76c: 89 87 std Y+9, r24 ; 0x09 - 76e: 9a 87 std Y+10, r25 ; 0x0a - 770: ab 87 std Y+11, r26 ; 0x0b - 772: bc 87 std Y+12, r27 ; 0x0c - inst->pll_param_data.MSNx_P3 = 1067099; - 774: 8b e5 ldi r24, 0x5B ; 91 - 776: 98 e4 ldi r25, 0x48 ; 72 - 778: a0 e1 ldi r26, 0x10 ; 16 - 77a: b0 e0 ldi r27, 0x00 ; 0 - 77c: 8d 87 std Y+13, r24 ; 0x0d - 77e: 9e 87 std Y+14, r25 ; 0x0e - 780: af 87 std Y+15, r26 ; 0x0f - 782: b8 8b std Y+16, r27 ; 0x10 + //inst->pllb_param_data.PLL_Ident = inst->plla_param_data.PLL_Ident = 0; + inst->pllb_param_data.MSNx_P1 = inst->plla_param_data.MSNx_P1 = 3395; + 778: 83 e4 ldi r24, 0x43 ; 67 + 77a: 9d e0 ldi r25, 0x0D ; 13 + 77c: a0 e0 ldi r26, 0x00 ; 0 + 77e: b0 e0 ldi r27, 0x00 ; 0 + 780: 8d 83 std Y+5, r24 ; 0x05 + 782: 9e 83 std Y+6, r25 ; 0x06 + 784: af 83 std Y+7, r26 ; 0x07 + 786: b8 87 std Y+8, r27 ; 0x08 + 788: 8b a3 std Y+35, r24 ; 0x23 + 78a: 9c a3 std Y+36, r25 ; 0x24 + 78c: ad a3 std Y+37, r26 ; 0x25 + 78e: be a3 std Y+38, r27 ; 0x26 + inst->pllb_param_data.MSNx_P2 = inst->plla_param_data.MSNx_P2 = 11510; + 790: 86 ef ldi r24, 0xF6 ; 246 + 792: 9c e2 ldi r25, 0x2C ; 44 + 794: a0 e0 ldi r26, 0x00 ; 0 + 796: b0 e0 ldi r27, 0x00 ; 0 + 798: 89 87 std Y+9, r24 ; 0x09 + 79a: 9a 87 std Y+10, r25 ; 0x0a + 79c: ab 87 std Y+11, r26 ; 0x0b + 79e: bc 87 std Y+12, r27 ; 0x0c + 7a0: 8f a3 std Y+39, r24 ; 0x27 + 7a2: 98 a7 std Y+40, r25 ; 0x28 + 7a4: a9 a7 std Y+41, r26 ; 0x29 + 7a6: ba a7 std Y+42, r27 ; 0x2a + inst->pllb_param_data.MSNx_P3 = inst->plla_param_data.MSNx_P3 = 1067099; + 7a8: 8b e5 ldi r24, 0x5B ; 91 + 7aa: 98 e4 ldi r25, 0x48 ; 72 + 7ac: a0 e1 ldi r26, 0x10 ; 16 + 7ae: b0 e0 ldi r27, 0x00 ; 0 + 7b0: 8d 87 std Y+13, r24 ; 0x0d + 7b2: 9e 87 std Y+14, r25 ; 0x0e + 7b4: af 87 std Y+15, r26 ; 0x0f + 7b6: b8 8b std Y+16, r27 ; 0x10 + 7b8: 8b a7 std Y+43, r24 ; 0x2b + 7ba: 9c a7 std Y+44, r25 ; 0x2c + 7bc: ad a7 std Y+45, r26 ; 0x2d + 7be: be a7 std Y+46, r27 ; 0x2e - inst->pll_param_data.MSx_P1 = 18; - 784: 82 e1 ldi r24, 0x12 ; 18 - 786: 90 e0 ldi r25, 0x00 ; 0 - 788: a0 e0 ldi r26, 0x00 ; 0 - 78a: b0 e0 ldi r27, 0x00 ; 0 - 78c: 89 8b std Y+17, r24 ; 0x11 - 78e: 9a 8b std Y+18, r25 ; 0x12 - 790: ab 8b std Y+19, r26 ; 0x13 - 792: bc 8b std Y+20, r27 ; 0x14 - inst->pll_param_data.MSx_P2 = 0; - 794: 1d 8a std Y+21, r1 ; 0x15 - 796: 1e 8a std Y+22, r1 ; 0x16 - 798: 1f 8a std Y+23, r1 ; 0x17 - 79a: 18 8e std Y+24, r1 ; 0x18 - inst->pll_param_data.MSx_P3 = 1; - 79c: 81 e0 ldi r24, 0x01 ; 1 - 79e: 90 e0 ldi r25, 0x00 ; 0 - 7a0: a0 e0 ldi r26, 0x00 ; 0 - 7a2: b0 e0 ldi r27, 0x00 ; 0 - 7a4: 89 8f std Y+25, r24 ; 0x19 - 7a6: 9a 8f std Y+26, r25 ; 0x1a - 7a8: ab 8f std Y+27, r26 ; 0x1b - 7aa: bc 8f std Y+28, r27 ; 0x1c - inst->pll_param_data.XtalFreq = 25000000; - 7ac: 80 e4 ldi r24, 0x40 ; 64 - 7ae: 98 e7 ldi r25, 0x78 ; 120 - 7b0: ad e7 ldi r26, 0x7D ; 125 - 7b2: b1 e0 ldi r27, 0x01 ; 1 - 7b4: 8e 8f std Y+30, r24 ; 0x1e - 7b6: 9f 8f std Y+31, r25 ; 0x1f - 7b8: a8 a3 std Y+32, r26 ; 0x20 - 7ba: b9 a3 std Y+33, r27 ; 0x21 - - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7bc: 4e e1 ldi r20, 0x1E ; 30 - 7be: b8 01 movw r22, r16 - 7c0: 80 e0 ldi r24, 0x00 ; 0 + inst->pllb_param_data.MSx_P1 = inst->plla_param_data.MSx_P1 = 18; + 7c0: 82 e1 ldi r24, 0x12 ; 18 7c2: 90 e0 ldi r25, 0x00 ; 0 - 7c4: 53 dc rcall .-1882 ; 0x6c + 7c4: a0 e0 ldi r26, 0x00 ; 0 + 7c6: b0 e0 ldi r27, 0x00 ; 0 + 7c8: 89 8b std Y+17, r24 ; 0x11 + 7ca: 9a 8b std Y+18, r25 ; 0x12 + 7cc: ab 8b std Y+19, r26 ; 0x13 + 7ce: bc 8b std Y+20, r27 ; 0x14 + 7d0: 8f a7 std Y+47, r24 ; 0x2f + 7d2: 98 ab std Y+48, r25 ; 0x30 + 7d4: a9 ab std Y+49, r26 ; 0x31 + 7d6: ba ab std Y+50, r27 ; 0x32 + inst->pllb_param_data.MSx_P2 = inst->plla_param_data.MSx_P2 = 0; + 7d8: 1d 8a std Y+21, r1 ; 0x15 + 7da: 1e 8a std Y+22, r1 ; 0x16 + 7dc: 1f 8a std Y+23, r1 ; 0x17 + 7de: 18 8e std Y+24, r1 ; 0x18 + 7e0: 1b aa std Y+51, r1 ; 0x33 + 7e2: 1c aa std Y+52, r1 ; 0x34 + 7e4: 1d aa std Y+53, r1 ; 0x35 + 7e6: 1e aa std Y+54, r1 ; 0x36 + inst->pllb_param_data.MSx_P3 = inst->plla_param_data.MSx_P3 = 1; + 7e8: 81 e0 ldi r24, 0x01 ; 1 + 7ea: 90 e0 ldi r25, 0x00 ; 0 + 7ec: a0 e0 ldi r26, 0x00 ; 0 + 7ee: b0 e0 ldi r27, 0x00 ; 0 + 7f0: 89 8f std Y+25, r24 ; 0x19 + 7f2: 9a 8f std Y+26, r25 ; 0x1a + 7f4: ab 8f std Y+27, r26 ; 0x1b + 7f6: bc 8f std Y+28, r27 ; 0x1c + 7f8: 8f ab std Y+55, r24 ; 0x37 + 7fa: 98 af std Y+56, r25 ; 0x38 + 7fc: a9 af std Y+57, r26 ; 0x39 + 7fe: ba af std Y+58, r27 ; 0x3a + inst->pllb_param_data.XtalFreq = inst->plla_param_data.XtalFreq = 25000000; + 800: 80 e4 ldi r24, 0x40 ; 64 + 802: 98 e7 ldi r25, 0x78 ; 120 + 804: ad e7 ldi r26, 0x7D ; 125 + 806: b1 e0 ldi r27, 0x01 ; 1 + 808: 8e 8f std Y+30, r24 ; 0x1e + 80a: 9f 8f std Y+31, r25 ; 0x1f + 80c: a8 a3 std Y+32, r26 ; 0x20 + 80e: b9 a3 std Y+33, r27 ; 0x21 + 810: 8c af std Y+60, r24 ; 0x3c + 812: 9d af std Y+61, r25 ; 0x3d + 814: ae af std Y+62, r26 ; 0x3e + 816: bf af std Y+63, r27 ; 0x3f + + cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->plla_param_data), sizeof(storno_pll_param_msg)); + 818: be 01 movw r22, r28 + 81a: 6c 5f subi r22, 0xFC ; 252 + 81c: 7f 4f sbci r23, 0xFF ; 255 + 81e: 4e e1 ldi r20, 0x1E ; 30 + 820: 80 e0 ldi r24, 0x00 ; 0 + 822: 90 e0 ldi r25, 0x00 ; 0 + 824: 23 dc rcall .-1978 ; 0x6c //_delay_ms(1); - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7c6: 4e e1 ldi r20, 0x1E ; 30 - 7c8: b8 01 movw r22, r16 - 7ca: 80 e2 ldi r24, 0x20 ; 32 - 7cc: 90 e0 ldi r25, 0x00 ; 0 + cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pllb_param_data), sizeof(storno_pll_param_msg)); + 826: 4e e1 ldi r20, 0x1E ; 30 + 828: b8 01 movw r22, r16 + 82a: 80 e2 ldi r24, 0x20 ; 32 + 82c: 90 e0 ldi r25, 0x00 ; 0 + 82e: 1e dc rcall .-1988 ; 0x6c + 830: 06 c0 rjmp .+12 ; 0x83e + { + if ((*ptr != 0xff) && (*ptr != 0x00)) + { + return 1; + } + ptr++; + 832: fe 01 movw r30, r28 + 834: b3 96 adiw r30, 0x23 ; 35 + 836: 9e 01 movw r18, r28 + 838: 20 5c subi r18, 0xC0 ; 192 + 83a: 3f 4f sbci r19, 0xFF ; 255 + 83c: 95 cf rjmp .-214 ; 0x768 if(!isEEPROMValid(inst)){ // If settings are somehow unvalid, then write default settings.. writeDefaultSettingsEEprom(inst); } - 7ce: df 91 pop r29 - 7d0: cf 91 pop r28 - 7d2: 1f 91 pop r17 - 7d4: 0f 91 pop r16 - inst->pll_param_data.MSx_P3 = 1; - inst->pll_param_data.XtalFreq = 25000000; - - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - //_delay_ms(1); - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); - 7d6: 4a cc rjmp .-1900 ; 0x6c + 83e: df 91 pop r29 + 840: cf 91 pop r28 + 842: 1f 91 pop r17 + 844: 0f 91 pop r16 + 846: 08 95 ret -000007d8
: +00000848
: #include "avr_eeprom_driver/avr_eeprom_driver.h" storno_xtal_app_t storno_xtal_app; int main(void) { - 7d8: cf 93 push r28 - 7da: df 93 push r29 - 7dc: cd b7 in r28, 0x3d ; 61 - 7de: de b7 in r29, 0x3e ; 62 - 7e0: cb 55 subi r28, 0x5B ; 91 - 7e2: d1 09 sbc r29, r1 - 7e4: cd bf out 0x3d, r28 ; 61 - 7e6: de bf out 0x3e, r29 ; 62 + 848: cf 93 push r28 + 84a: df 93 push r29 + 84c: cd b7 in r28, 0x3d ; 61 + 84e: de b7 in r29, 0x3e ; 62 + 850: a2 97 sbiw r28, 0x22 ; 34 + 852: cd bf out 0x3d, r28 ; 61 + 854: de bf out 0x3e, r29 ; 62 /* Replace with your application code */ // Init Periphials cm_i2c_init(NULL); - 7e8: 80 e0 ldi r24, 0x00 ; 0 - 7ea: 90 e0 ldi r25, 0x00 ; 0 - 7ec: 14 dd rcall .-1496 ; 0x216 + 856: 80 e0 ldi r24, 0x00 ; 0 + 858: 90 e0 ldi r25, 0x00 ; 0 + 85a: 2b dd rcall .-1450 ; 0x2b2 // Add devices cm_i2c_device_t si5351_i2c; cm_i2c_addDev(&si5351_i2c,NULL,0x60); - 7ee: 40 e6 ldi r20, 0x60 ; 96 - 7f0: 60 e0 ldi r22, 0x00 ; 0 - 7f2: 70 e0 ldi r23, 0x00 ; 0 - 7f4: ce 01 movw r24, r28 - 7f6: 87 5a subi r24, 0xA7 ; 167 - 7f8: 9f 4f sbci r25, 0xFF ; 255 - 7fa: 27 dd rcall .-1458 ; 0x24a + 85c: 40 e6 ldi r20, 0x60 ; 96 + 85e: 60 e0 ldi r22, 0x00 ; 0 + 860: 70 e0 ldi r23, 0x00 ; 0 + 862: ce 01 movw r24, r28 + 864: 01 96 adiw r24, 0x01 ; 1 + 866: 3f dd rcall .-1410 ; 0x2e6 // Init Devices: si5351_driver si5351_dev; cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - 7fc: 49 e4 ldi r20, 0x49 ; 73 - 7fe: 51 e0 ldi r21, 0x01 ; 1 - 800: be 01 movw r22, r28 - 802: 67 5a subi r22, 0xA7 ; 167 - 804: 7f 4f sbci r23, 0xFF ; 255 - 806: ce 01 movw r24, r28 - 808: 01 96 adiw r24, 0x01 ; 1 - 80a: 05 d2 rcall .+1034 ; 0xc16 + 868: 41 e9 ldi r20, 0x91 ; 145 + 86a: 51 e0 ldi r21, 0x01 ; 1 + 86c: be 01 movw r22, r28 + 86e: 6f 5f subi r22, 0xFF ; 255 + 870: 7f 4f sbci r23, 0xFF ; 255 + 872: ce 01 movw r24, r28 + 874: 04 96 adiw r24, 0x04 ; 4 + 876: 82 d1 rcall .+772 ; 0xb7c cqm6xx_app_init(&storno_xtal_app, &si5351_dev); - 80c: be 01 movw r22, r28 - 80e: 6f 5f subi r22, 0xFF ; 255 - 810: 7f 4f sbci r23, 0xFF ; 255 - 812: 86 e4 ldi r24, 0x46 ; 70 - 814: 9f e3 ldi r25, 0x3F ; 63 - 816: 6f df rcall .-290 ; 0x6f6 + 878: be 01 movw r22, r28 + 87a: 6c 5f subi r22, 0xFC ; 252 + 87c: 7f 4f sbci r23, 0xFF ; 255 + 87e: 86 e4 ldi r24, 0x46 ; 70 + 880: 9f e3 ldi r25, 0x3F ; 63 + 882: 4d df rcall .-358 ; 0x71e while (1) { cqm6xx_app_statemachine(&storno_xtal_app); - 818: 86 e4 ldi r24, 0x46 ; 70 - 81a: 9f e3 ldi r25, 0x3F ; 63 - 81c: cb de rcall .-618 ; 0x5b4 - 81e: fc cf rjmp .-8 ; 0x818 + 884: 86 e4 ldi r24, 0x46 ; 70 + 886: 9f e3 ldi r25, 0x3F ; 63 + 888: ee de rcall .-548 ; 0x666 + 88a: fc cf rjmp .-8 ; 0x884 -00000820 : +0000088c : // Read Device Status register: readRegister(inst,0x00, (uint8_t *) &inst->device_data.deviceStatus, sizeof(si5351_deviceStat_t)); return inst->device_data.deviceStatus.REVID; } - 820: 4f 92 push r4 - 822: 5f 92 push r5 - 824: 6f 92 push r6 - 826: 7f 92 push r7 - 828: 9f 92 push r9 - 82a: af 92 push r10 - 82c: bf 92 push r11 - 82e: cf 92 push r12 - 830: df 92 push r13 - 832: ef 92 push r14 - 834: ff 92 push r15 - 836: 0f 93 push r16 - 838: 1f 93 push r17 - 83a: cf 93 push r28 - 83c: df 93 push r29 - 83e: ec 01 movw r28, r24 - 840: 6b 01 movw r12, r22 - 842: 94 2e mov r9, r20 - 844: 59 01 movw r10, r18 - 846: 27 01 movw r4, r14 - 848: 38 01 movw r6, r16 - 84a: c7 01 movw r24, r14 - 84c: 01 96 adiw r24, 0x01 ; 1 - 84e: 79 d2 rcall .+1266 ; 0xd42 - 850: f8 2e mov r15, r24 - 852: 19 2f mov r17, r25 - 854: dc 01 movw r26, r24 - 856: 9d 92 st X+, r9 - 858: cd 01 movw r24, r26 - 85a: a2 01 movw r20, r4 - 85c: b5 01 movw r22, r10 - 85e: 92 d3 rcall .+1828 ; 0xf84 - 860: a3 01 movw r20, r6 - 862: 92 01 movw r18, r4 - 864: 2f 5f subi r18, 0xFF ; 255 - 866: 3f 4f sbci r19, 0xFF ; 255 - 868: 4f 4f sbci r20, 0xFF ; 255 - 86a: 5f 4f sbci r21, 0xFF ; 255 - 86c: d6 01 movw r26, r12 - 86e: ed 91 ld r30, X+ - 870: fc 91 ld r31, X - 872: 01 e0 ldi r16, 0x01 ; 1 - 874: 6f 2d mov r22, r15 - 876: 71 2f mov r23, r17 - 878: 88 81 ld r24, Y - 87a: 99 81 ldd r25, Y+1 ; 0x01 - 87c: 09 95 icall - 87e: 8f 2d mov r24, r15 - 880: 91 2f mov r25, r17 - 882: f7 d2 rcall .+1518 ; 0xe72 - 884: 80 e0 ldi r24, 0x00 ; 0 - 886: 90 e0 ldi r25, 0x00 ; 0 - 888: df 91 pop r29 - 88a: cf 91 pop r28 - 88c: 1f 91 pop r17 - 88e: 0f 91 pop r16 - 890: ff 90 pop r15 - 892: ef 90 pop r14 - 894: df 90 pop r13 - 896: cf 90 pop r12 - 898: bf 90 pop r11 - 89a: af 90 pop r10 - 89c: 9f 90 pop r9 - 89e: 7f 90 pop r7 - 8a0: 6f 90 pop r6 - 8a2: 5f 90 pop r5 - 8a4: 4f 90 pop r4 - 8a6: 08 95 ret + 88c: 8f 92 push r8 + 88e: 9f 92 push r9 + 890: af 92 push r10 + 892: bf 92 push r11 + 894: cf 92 push r12 + 896: df 92 push r13 + 898: ef 92 push r14 + 89a: ff 92 push r15 + 89c: 0f 93 push r16 + 89e: 1f 93 push r17 + 8a0: cf 93 push r28 + 8a2: df 93 push r29 + 8a4: ec 01 movw r28, r24 + 8a6: 86 2e mov r8, r22 + 8a8: 5a 01 movw r10, r20 + 8aa: 68 01 movw r12, r16 + 8ac: 79 01 movw r14, r18 + 8ae: c8 01 movw r24, r16 + 8b0: 01 96 adiw r24, 0x01 ; 1 + 8b2: 11 d2 rcall .+1058 ; 0xcd6 + 8b4: 98 2e mov r9, r24 + 8b6: 19 2f mov r17, r25 + 8b8: fc 01 movw r30, r24 + 8ba: 81 92 st Z+, r8 + 8bc: cf 01 movw r24, r30 + 8be: a6 01 movw r20, r12 + 8c0: b5 01 movw r22, r10 + 8c2: 2a d3 rcall .+1620 ; 0xf18 + 8c4: a7 01 movw r20, r14 + 8c6: 96 01 movw r18, r12 + 8c8: 2f 5f subi r18, 0xFF ; 255 + 8ca: 3f 4f sbci r19, 0xFF ; 255 + 8cc: 4f 4f sbci r20, 0xFF ; 255 + 8ce: 5f 4f sbci r21, 0xFF ; 255 + 8d0: ea 81 ldd r30, Y+2 ; 0x02 + 8d2: fb 81 ldd r31, Y+3 ; 0x03 + 8d4: 01 e0 ldi r16, 0x01 ; 1 + 8d6: 69 2d mov r22, r9 + 8d8: 71 2f mov r23, r17 + 8da: 88 81 ld r24, Y + 8dc: 99 81 ldd r25, Y+1 ; 0x01 + 8de: 09 95 icall + 8e0: 89 2d mov r24, r9 + 8e2: 91 2f mov r25, r17 + 8e4: 90 d2 rcall .+1312 ; 0xe06 + 8e6: 80 e0 ldi r24, 0x00 ; 0 + 8e8: 90 e0 ldi r25, 0x00 ; 0 + 8ea: df 91 pop r29 + 8ec: cf 91 pop r28 + 8ee: 1f 91 pop r17 + 8f0: 0f 91 pop r16 + 8f2: ff 90 pop r15 + 8f4: ef 90 pop r14 + 8f6: df 90 pop r13 + 8f8: cf 90 pop r12 + 8fa: bf 90 pop r11 + 8fc: af 90 pop r10 + 8fe: 9f 90 pop r9 + 900: 8f 90 pop r8 + 902: 08 95 ret -000008a8 : - 8a8: af 92 push r10 - 8aa: bf 92 push r11 - 8ac: cf 92 push r12 - 8ae: df 92 push r13 - 8b0: ef 92 push r14 - 8b2: ff 92 push r15 - 8b4: 0f 93 push r16 - 8b6: 1f 93 push r17 - 8b8: cf 93 push r28 - 8ba: df 93 push r29 - 8bc: ec 01 movw r28, r24 - 8be: 66 23 and r22, r22 - 8c0: 09 f4 brne .+2 ; 0x8c4 - 8c2: 48 c0 rjmp .+144 ; 0x954 - 8c4: 61 30 cpi r22, 0x01 ; 1 - 8c6: 09 f1 breq .+66 ; 0x90a - 8c8: 6c 01 movw r12, r24 - 8ca: 82 e0 ldi r24, 0x02 ; 2 - 8cc: c8 0e add r12, r24 - 8ce: d1 1c adc r13, r1 - 8d0: 9e 01 movw r18, r28 - 8d2: 29 5a subi r18, 0xA9 ; 169 - 8d4: 3f 4f sbci r19, 0xFF ; 255 - 8d6: f9 01 movw r30, r18 - 8d8: 80 81 ld r24, Z - 8da: 80 62 ori r24, 0x20 ; 32 - 8dc: 80 68 ori r24, 0x80 ; 128 - 8de: 80 83 st Z, r24 - 8e0: e1 2c mov r14, r1 - 8e2: f1 2c mov r15, r1 - 8e4: 87 01 movw r16, r14 - 8e6: e3 94 inc r14 - 8e8: 41 eb ldi r20, 0xB1 ; 177 - 8ea: b6 01 movw r22, r12 - 8ec: ce 01 movw r24, r28 - 8ee: 98 df rcall .-208 ; 0x820 - 8f0: 80 e0 ldi r24, 0x00 ; 0 - 8f2: 90 e0 ldi r25, 0x00 ; 0 - 8f4: df 91 pop r29 - 8f6: cf 91 pop r28 - 8f8: 1f 91 pop r17 - 8fa: 0f 91 pop r16 - 8fc: ff 90 pop r15 - 8fe: ef 90 pop r14 - 900: df 90 pop r13 - 902: cf 90 pop r12 - 904: bf 90 pop r11 - 906: af 90 pop r10 - 908: 08 95 ret - 90a: 42 70 andi r20, 0x02 ; 2 - 90c: 8e 8d ldd r24, Y+30 ; 0x1e - 90e: 8c 7f andi r24, 0xFC ; 252 - 910: 48 2b or r20, r24 - 912: 4e 8f std Y+30, r20 ; 0x1e - 914: 3f 8f std Y+31, r19 ; 0x1f - 916: 28 a3 std Y+32, r18 ; 0x20 - 918: d8 01 movw r26, r16 - 91a: c7 01 movw r24, r14 - 91c: 88 27 eor r24, r24 - 91e: 99 27 eor r25, r25 - 920: af 70 andi r26, 0x0F ; 15 - 922: bb 27 eor r27, r27 - 924: fa a2 std Y+34, r15 ; 0x22 - 926: eb a2 std Y+35, r14 ; 0x23 - 928: 8a 2f mov r24, r26 - 92a: 8f 70 andi r24, 0x0F ; 15 - 92c: 89 a3 std Y+33, r24 ; 0x21 - 92e: bc 8e std Y+28, r11 ; 0x1c - 930: ad 8e std Y+29, r10 ; 0x1d - 932: 6e 01 movw r12, r28 - 934: f2 e0 ldi r31, 0x02 ; 2 - 936: cf 0e add r12, r31 - 938: d1 1c adc r13, r1 - 93a: 18 e0 ldi r17, 0x08 ; 8 - 93c: e1 2e mov r14, r17 - 93e: f1 2c mov r15, r1 - 940: 00 e0 ldi r16, 0x00 ; 0 - 942: 10 e0 ldi r17, 0x00 ; 0 - 944: 9e 01 movw r18, r28 - 946: 24 5e subi r18, 0xE4 ; 228 - 948: 3f 4f sbci r19, 0xFF ; 255 - 94a: 42 e2 ldi r20, 0x22 ; 34 - 94c: b6 01 movw r22, r12 - 94e: ce 01 movw r24, r28 - 950: 67 df rcall .-306 ; 0x820 - 952: be cf rjmp .-132 ; 0x8d0 - 954: 42 70 andi r20, 0x02 ; 2 - 956: 8e 89 ldd r24, Y+22 ; 0x16 - 958: 8c 7f andi r24, 0xFC ; 252 - 95a: 48 2b or r20, r24 - 95c: 4e 8b std Y+22, r20 ; 0x16 - 95e: 3f 8b std Y+23, r19 ; 0x17 - 960: 28 8f std Y+24, r18 ; 0x18 - 962: d8 01 movw r26, r16 - 964: c7 01 movw r24, r14 - 966: 88 27 eor r24, r24 - 968: 99 27 eor r25, r25 - 96a: af 70 andi r26, 0x0F ; 15 - 96c: bb 27 eor r27, r27 - 96e: fa 8e std Y+26, r15 ; 0x1a - 970: eb 8e std Y+27, r14 ; 0x1b - 972: 8a 2f mov r24, r26 - 974: 8f 70 andi r24, 0x0F ; 15 - 976: 89 8f std Y+25, r24 ; 0x19 - 978: bc 8a std Y+20, r11 ; 0x14 - 97a: ad 8a std Y+21, r10 ; 0x15 - 97c: 6e 01 movw r12, r28 - 97e: e2 e0 ldi r30, 0x02 ; 2 - 980: ce 0e add r12, r30 - 982: d1 1c adc r13, r1 - 984: 18 e0 ldi r17, 0x08 ; 8 - 986: e1 2e mov r14, r17 - 988: f1 2c mov r15, r1 - 98a: 00 e0 ldi r16, 0x00 ; 0 - 98c: 10 e0 ldi r17, 0x00 ; 0 - 98e: 9e 01 movw r18, r28 - 990: 2c 5e subi r18, 0xEC ; 236 - 992: 3f 4f sbci r19, 0xFF ; 255 - 994: 4a e1 ldi r20, 0x1A ; 26 - 996: b6 01 movw r22, r12 - 998: ce 01 movw r24, r28 - 99a: 42 df rcall .-380 ; 0x820 - 99c: 99 cf rjmp .-206 ; 0x8d0 +00000904 : + 904: af 92 push r10 + 906: bf 92 push r11 + 908: cf 92 push r12 + 90a: df 92 push r13 + 90c: ef 92 push r14 + 90e: ff 92 push r15 + 910: 0f 93 push r16 + 912: 1f 93 push r17 + 914: fc 01 movw r30, r24 + 916: 43 70 andi r20, 0x03 ; 3 + 918: 56 89 ldd r21, Z+22 ; 0x16 + 91a: 50 78 andi r21, 0x80 ; 128 + 91c: 37 8b std Z+23, r19 ; 0x17 + 91e: 20 8f std Z+24, r18 ; 0x18 + 920: f2 8e std Z+26, r15 ; 0x1a + 922: e3 8e std Z+27, r14 ; 0x1b + 924: d6 01 movw r26, r12 + 926: c5 01 movw r24, r10 + 928: 07 2e mov r0, r23 + 92a: 7c e0 ldi r23, 0x0C ; 12 + 92c: b6 95 lsr r27 + 92e: a7 95 ror r26 + 930: 97 95 ror r25 + 932: 87 95 ror r24 + 934: 7a 95 dec r23 + 936: d1 f7 brne .-12 ; 0x92c + 938: 70 2d mov r23, r0 + 93a: 83 70 andi r24, 0x03 ; 3 + 93c: 82 95 swap r24 + 93e: 80 7f andi r24, 0xF0 ; 240 + 940: 03 70 andi r16, 0x03 ; 3 + 942: 80 2b or r24, r16 + 944: 81 8f std Z+25, r24 ; 0x19 + 946: b4 8a std Z+20, r11 ; 0x14 + 948: a5 8a std Z+21, r10 ; 0x15 + 94a: 45 2b or r20, r21 + 94c: 46 8b std Z+22, r20 ; 0x16 + 94e: 61 30 cpi r22, 0x01 ; 1 + 950: 79 f0 breq .+30 ; 0x970 + 952: 18 f0 brcs .+6 ; 0x95a + 954: 62 30 cpi r22, 0x02 ; 2 + 956: b9 f0 breq .+46 ; 0x986 + 958: 20 c0 rjmp .+64 ; 0x99a + 95a: af 01 movw r20, r30 + 95c: 4c 5e subi r20, 0xEC ; 236 + 95e: 5f 4f sbci r21, 0xFF ; 255 + 960: 08 e0 ldi r16, 0x08 ; 8 + 962: 10 e0 ldi r17, 0x00 ; 0 + 964: 20 e0 ldi r18, 0x00 ; 0 + 966: 30 e0 ldi r19, 0x00 ; 0 + 968: 6a e2 ldi r22, 0x2A ; 42 + 96a: cf 01 movw r24, r30 + 96c: 8f df rcall .-226 ; 0x88c + 96e: 15 c0 rjmp .+42 ; 0x99a + 970: af 01 movw r20, r30 + 972: 4c 5e subi r20, 0xEC ; 236 + 974: 5f 4f sbci r21, 0xFF ; 255 + 976: 08 e0 ldi r16, 0x08 ; 8 + 978: 10 e0 ldi r17, 0x00 ; 0 + 97a: 20 e0 ldi r18, 0x00 ; 0 + 97c: 30 e0 ldi r19, 0x00 ; 0 + 97e: 62 e3 ldi r22, 0x32 ; 50 + 980: cf 01 movw r24, r30 + 982: 84 df rcall .-248 ; 0x88c + 984: 0a c0 rjmp .+20 ; 0x99a + 986: af 01 movw r20, r30 + 988: 4c 5e subi r20, 0xEC ; 236 + 98a: 5f 4f sbci r21, 0xFF ; 255 + 98c: 08 e0 ldi r16, 0x08 ; 8 + 98e: 10 e0 ldi r17, 0x00 ; 0 + 990: 20 e0 ldi r18, 0x00 ; 0 + 992: 30 e0 ldi r19, 0x00 ; 0 + 994: 6a e3 ldi r22, 0x3A ; 58 + 996: cf 01 movw r24, r30 + 998: 79 df rcall .-270 ; 0x88c + 99a: 80 e0 ldi r24, 0x00 ; 0 + 99c: 90 e0 ldi r25, 0x00 ; 0 + 99e: 1f 91 pop r17 + 9a0: 0f 91 pop r16 + 9a2: ff 90 pop r15 + 9a4: ef 90 pop r14 + 9a6: df 90 pop r13 + 9a8: cf 90 pop r12 + 9aa: bf 90 pop r11 + 9ac: af 90 pop r10 + 9ae: 08 95 ret -0000099e : - 99e: af 92 push r10 - 9a0: bf 92 push r11 - 9a2: cf 92 push r12 - 9a4: df 92 push r13 - 9a6: ef 92 push r14 - 9a8: ff 92 push r15 - 9aa: 0f 93 push r16 - 9ac: 1f 93 push r17 - 9ae: fc 01 movw r30, r24 - 9b0: 61 30 cpi r22, 0x01 ; 1 - 9b2: 09 f4 brne .+2 ; 0x9b6 - 9b4: 5f c0 rjmp .+190 ; 0xa74 - 9b6: a8 f1 brcs .+106 ; 0xa22 - 9b8: 62 30 cpi r22, 0x02 ; 2 - 9ba: 41 f5 brne .+80 ; 0xa0c - 9bc: 43 70 andi r20, 0x03 ; 3 - 9be: 56 a9 ldd r21, Z+54 ; 0x36 - 9c0: 50 78 andi r21, 0x80 ; 128 - 9c2: 37 ab std Z+55, r19 ; 0x37 - 9c4: 20 af std Z+56, r18 ; 0x38 - 9c6: f2 ae std Z+58, r15 ; 0x3a - 9c8: e3 ae std Z+59, r14 ; 0x3b - 9ca: d6 01 movw r26, r12 - 9cc: c5 01 movw r24, r10 - 9ce: 2c e0 ldi r18, 0x0C ; 12 - 9d0: b6 95 lsr r27 - 9d2: a7 95 ror r26 - 9d4: 97 95 ror r25 - 9d6: 87 95 ror r24 - 9d8: 2a 95 dec r18 - 9da: d1 f7 brne .-12 ; 0x9d0 - 9dc: 83 70 andi r24, 0x03 ; 3 - 9de: 82 95 swap r24 - 9e0: 80 7f andi r24, 0xF0 ; 240 - 9e2: 03 70 andi r16, 0x03 ; 3 - 9e4: 08 2b or r16, r24 - 9e6: 01 af std Z+57, r16 ; 0x39 - 9e8: b4 aa std Z+52, r11 ; 0x34 - 9ea: a5 aa std Z+53, r10 ; 0x35 - 9ec: 45 2b or r20, r21 - 9ee: 46 ab std Z+54, r20 ; 0x36 - 9f0: 9f 01 movw r18, r30 - 9f2: 2c 5c subi r18, 0xCC ; 204 - 9f4: 3f 4f sbci r19, 0xFF ; 255 - 9f6: bf 01 movw r22, r30 - 9f8: 6e 5f subi r22, 0xFE ; 254 - 9fa: 7f 4f sbci r23, 0xFF ; 255 - 9fc: 18 e0 ldi r17, 0x08 ; 8 - 9fe: e1 2e mov r14, r17 - a00: f1 2c mov r15, r1 - a02: 00 e0 ldi r16, 0x00 ; 0 - a04: 10 e0 ldi r17, 0x00 ; 0 - a06: 4a e3 ldi r20, 0x3A ; 58 - a08: cf 01 movw r24, r30 - a0a: 0a df rcall .-492 ; 0x820 - a0c: 80 e0 ldi r24, 0x00 ; 0 - a0e: 90 e0 ldi r25, 0x00 ; 0 - a10: 1f 91 pop r17 - a12: 0f 91 pop r16 - a14: ff 90 pop r15 - a16: ef 90 pop r14 - a18: df 90 pop r13 - a1a: cf 90 pop r12 - a1c: bf 90 pop r11 - a1e: af 90 pop r10 - a20: 08 95 ret - a22: 43 70 andi r20, 0x03 ; 3 - a24: 56 a1 ldd r21, Z+38 ; 0x26 - a26: 50 78 andi r21, 0x80 ; 128 - a28: 37 a3 std Z+39, r19 ; 0x27 - a2a: 20 a7 std Z+40, r18 ; 0x28 - a2c: f2 a6 std Z+42, r15 ; 0x2a - a2e: e3 a6 std Z+43, r14 ; 0x2b - a30: d6 01 movw r26, r12 - a32: c5 01 movw r24, r10 - a34: 1c e0 ldi r17, 0x0C ; 12 - a36: b6 95 lsr r27 - a38: a7 95 ror r26 - a3a: 97 95 ror r25 - a3c: 87 95 ror r24 - a3e: 1a 95 dec r17 - a40: d1 f7 brne .-12 ; 0xa36 - a42: 83 70 andi r24, 0x03 ; 3 - a44: 82 95 swap r24 - a46: 80 7f andi r24, 0xF0 ; 240 - a48: 03 70 andi r16, 0x03 ; 3 - a4a: 80 2b or r24, r16 - a4c: 81 a7 std Z+41, r24 ; 0x29 - a4e: b4 a2 std Z+36, r11 ; 0x24 - a50: a5 a2 std Z+37, r10 ; 0x25 - a52: 45 2b or r20, r21 - a54: 46 a3 std Z+38, r20 ; 0x26 - a56: 9f 01 movw r18, r30 - a58: 2c 5d subi r18, 0xDC ; 220 - a5a: 3f 4f sbci r19, 0xFF ; 255 - a5c: bf 01 movw r22, r30 - a5e: 6e 5f subi r22, 0xFE ; 254 - a60: 7f 4f sbci r23, 0xFF ; 255 - a62: 18 e0 ldi r17, 0x08 ; 8 - a64: e1 2e mov r14, r17 - a66: f1 2c mov r15, r1 - a68: 00 e0 ldi r16, 0x00 ; 0 - a6a: 10 e0 ldi r17, 0x00 ; 0 - a6c: 4a e2 ldi r20, 0x2A ; 42 - a6e: cf 01 movw r24, r30 - a70: d7 de rcall .-594 ; 0x820 - a72: cc cf rjmp .-104 ; 0xa0c - a74: 43 70 andi r20, 0x03 ; 3 - a76: 56 a5 ldd r21, Z+46 ; 0x2e - a78: 50 78 andi r21, 0x80 ; 128 - a7a: 37 a7 std Z+47, r19 ; 0x2f - a7c: 20 ab std Z+48, r18 ; 0x30 - a7e: f2 aa std Z+50, r15 ; 0x32 - a80: e3 aa std Z+51, r14 ; 0x33 - a82: d6 01 movw r26, r12 - a84: c5 01 movw r24, r10 - a86: 6c e0 ldi r22, 0x0C ; 12 - a88: b6 95 lsr r27 - a8a: a7 95 ror r26 - a8c: 97 95 ror r25 - a8e: 87 95 ror r24 - a90: 6a 95 dec r22 - a92: d1 f7 brne .-12 ; 0xa88 - a94: 83 70 andi r24, 0x03 ; 3 - a96: 82 95 swap r24 - a98: 80 7f andi r24, 0xF0 ; 240 - a9a: 03 70 andi r16, 0x03 ; 3 - a9c: 80 2b or r24, r16 - a9e: 81 ab std Z+49, r24 ; 0x31 - aa0: b4 a6 std Z+44, r11 ; 0x2c - aa2: a5 a6 std Z+45, r10 ; 0x2d - aa4: 45 2b or r20, r21 - aa6: 46 a7 std Z+46, r20 ; 0x2e - aa8: 9f 01 movw r18, r30 - aaa: 24 5d subi r18, 0xD4 ; 212 - aac: 3f 4f sbci r19, 0xFF ; 255 - aae: bf 01 movw r22, r30 - ab0: 6e 5f subi r22, 0xFE ; 254 - ab2: 7f 4f sbci r23, 0xFF ; 255 - ab4: 18 e0 ldi r17, 0x08 ; 8 - ab6: e1 2e mov r14, r17 - ab8: f1 2c mov r15, r1 - aba: 00 e0 ldi r16, 0x00 ; 0 - abc: 10 e0 ldi r17, 0x00 ; 0 - abe: 42 e3 ldi r20, 0x32 ; 50 - ac0: cf 01 movw r24, r30 - ac2: ae de rcall .-676 ; 0x820 - ac4: a3 cf rjmp .-186 ; 0xa0c +000009b0 : + 9b0: 0f 93 push r16 + 9b2: 1f 93 push r17 + 9b4: 61 30 cpi r22, 0x01 ; 1 + 9b6: 51 f0 breq .+20 ; 0x9cc + 9b8: 18 f0 brcs .+6 ; 0x9c0 + 9ba: 62 30 cpi r22, 0x02 ; 2 + 9bc: 69 f0 breq .+26 ; 0x9d8 + 9be: 11 c0 rjmp .+34 ; 0x9e2 + 9c0: fc 01 movw r30, r24 + 9c2: 27 81 ldd r18, Z+7 ; 0x07 + 9c4: 40 fb bst r20, 0 + 9c6: 20 f9 bld r18, 0 + 9c8: 27 83 std Z+7, r18 ; 0x07 + 9ca: 0b c0 rjmp .+22 ; 0x9e2 + 9cc: fc 01 movw r30, r24 + 9ce: 27 81 ldd r18, Z+7 ; 0x07 + 9d0: 40 fb bst r20, 0 + 9d2: 21 f9 bld r18, 1 + 9d4: 27 83 std Z+7, r18 ; 0x07 + 9d6: 05 c0 rjmp .+10 ; 0x9e2 + 9d8: fc 01 movw r30, r24 + 9da: 27 81 ldd r18, Z+7 ; 0x07 + 9dc: 40 fb bst r20, 0 + 9de: 22 f9 bld r18, 2 + 9e0: 27 83 std Z+7, r18 ; 0x07 + 9e2: ac 01 movw r20, r24 + 9e4: 49 5f subi r20, 0xF9 ; 249 + 9e6: 5f 4f sbci r21, 0xFF ; 255 + 9e8: 01 e0 ldi r16, 0x01 ; 1 + 9ea: 10 e0 ldi r17, 0x00 ; 0 + 9ec: 20 e0 ldi r18, 0x00 ; 0 + 9ee: 30 e0 ldi r19, 0x00 ; 0 + 9f0: 63 e0 ldi r22, 0x03 ; 3 + 9f2: 4c df rcall .-360 ; 0x88c + 9f4: 80 e0 ldi r24, 0x00 ; 0 + 9f6: 90 e0 ldi r25, 0x00 ; 0 + 9f8: 1f 91 pop r17 + 9fa: 0f 91 pop r16 + 9fc: 08 95 ret -00000ac6 : - ac6: ef 92 push r14 - ac8: ff 92 push r15 - aca: 0f 93 push r16 - acc: 1f 93 push r17 - ace: 61 30 cpi r22, 0x01 ; 1 - ad0: 09 f1 breq .+66 ; 0xb14 - ad2: d0 f0 brcs .+52 ; 0xb08 - ad4: 62 30 cpi r22, 0x02 ; 2 - ad6: 29 f4 brne .+10 ; 0xae2 - ad8: fc 01 movw r30, r24 - ada: 27 81 ldd r18, Z+7 ; 0x07 - adc: 40 fb bst r20, 0 - ade: 22 f9 bld r18, 2 - ae0: 27 83 std Z+7, r18 ; 0x07 - ae2: 9c 01 movw r18, r24 - ae4: 29 5f subi r18, 0xF9 ; 249 - ae6: 3f 4f sbci r19, 0xFF ; 255 - ae8: bc 01 movw r22, r24 - aea: 6e 5f subi r22, 0xFE ; 254 - aec: 7f 4f sbci r23, 0xFF ; 255 - aee: e1 2c mov r14, r1 - af0: f1 2c mov r15, r1 - af2: 87 01 movw r16, r14 - af4: e3 94 inc r14 - af6: 43 e0 ldi r20, 0x03 ; 3 - af8: 93 de rcall .-730 ; 0x820 - afa: 80 e0 ldi r24, 0x00 ; 0 - afc: 90 e0 ldi r25, 0x00 ; 0 - afe: 1f 91 pop r17 - b00: 0f 91 pop r16 - b02: ff 90 pop r15 - b04: ef 90 pop r14 - b06: 08 95 ret - b08: fc 01 movw r30, r24 - b0a: 27 81 ldd r18, Z+7 ; 0x07 - b0c: 40 fb bst r20, 0 - b0e: 20 f9 bld r18, 0 - b10: 27 83 std Z+7, r18 ; 0x07 - b12: e7 cf rjmp .-50 ; 0xae2 - b14: fc 01 movw r30, r24 - b16: 27 81 ldd r18, Z+7 ; 0x07 - b18: 40 fb bst r20, 0 - b1a: 21 f9 bld r18, 1 - b1c: 27 83 std Z+7, r18 ; 0x07 - b1e: e1 cf rjmp .-62 ; 0xae2 +000009fe : + 9fe: 0f 93 push r16 + a00: 1f 93 push r17 + a02: fc 01 movw r30, r24 + a04: 92 85 ldd r25, Z+10 ; 0x0a + a06: 40 fb bst r20, 0 + a08: 97 f9 bld r25, 7 + a0a: 90 79 andi r25, 0x90 ; 144 + a0c: 9f 64 ori r25, 0x4F ; 79 + a0e: 92 87 std Z+10, r25 ; 0x0a + a10: 61 30 cpi r22, 0x01 ; 1 + a12: 79 f0 breq .+30 ; 0xa32 + a14: 18 f0 brcs .+6 ; 0xa1c + a16: 62 30 cpi r22, 0x02 ; 2 + a18: b9 f0 breq .+46 ; 0xa48 + a1a: 20 c0 rjmp .+64 ; 0xa5c + a1c: af 01 movw r20, r30 + a1e: 46 5f subi r20, 0xF6 ; 246 + a20: 5f 4f sbci r21, 0xFF ; 255 + a22: 01 e0 ldi r16, 0x01 ; 1 + a24: 10 e0 ldi r17, 0x00 ; 0 + a26: 20 e0 ldi r18, 0x00 ; 0 + a28: 30 e0 ldi r19, 0x00 ; 0 + a2a: 60 e1 ldi r22, 0x10 ; 16 + a2c: cf 01 movw r24, r30 + a2e: 2e df rcall .-420 ; 0x88c + a30: 15 c0 rjmp .+42 ; 0xa5c + a32: af 01 movw r20, r30 + a34: 46 5f subi r20, 0xF6 ; 246 + a36: 5f 4f sbci r21, 0xFF ; 255 + a38: 01 e0 ldi r16, 0x01 ; 1 + a3a: 10 e0 ldi r17, 0x00 ; 0 + a3c: 20 e0 ldi r18, 0x00 ; 0 + a3e: 30 e0 ldi r19, 0x00 ; 0 + a40: 61 e1 ldi r22, 0x11 ; 17 + a42: cf 01 movw r24, r30 + a44: 23 df rcall .-442 ; 0x88c + a46: 0a c0 rjmp .+20 ; 0xa5c + a48: af 01 movw r20, r30 + a4a: 46 5f subi r20, 0xF6 ; 246 + a4c: 5f 4f sbci r21, 0xFF ; 255 + a4e: 01 e0 ldi r16, 0x01 ; 1 + a50: 10 e0 ldi r17, 0x00 ; 0 + a52: 20 e0 ldi r18, 0x00 ; 0 + a54: 30 e0 ldi r19, 0x00 ; 0 + a56: 62 e1 ldi r22, 0x12 ; 18 + a58: cf 01 movw r24, r30 + a5a: 18 df rcall .-464 ; 0x88c + a5c: 80 e0 ldi r24, 0x00 ; 0 + a5e: 90 e0 ldi r25, 0x00 ; 0 + a60: 1f 91 pop r17 + a62: 0f 91 pop r16 + a64: 08 95 ret -00000b20 : - b20: ef 92 push r14 - b22: ff 92 push r15 - b24: 0f 93 push r16 - b26: 1f 93 push r17 - b28: 61 30 cpi r22, 0x01 ; 1 - b2a: b9 f1 breq .+110 ; 0xb9a - b2c: e0 f0 brcs .+56 ; 0xb66 - b2e: 62 30 cpi r22, 0x02 ; 2 - b30: 99 f4 brne .+38 ; 0xb58 - b32: fc 01 movw r30, r24 - b34: 24 85 ldd r18, Z+12 ; 0x0c - b36: 40 fb bst r20, 0 - b38: 27 f9 bld r18, 7 - b3a: 23 79 andi r18, 0x93 ; 147 - b3c: 23 66 ori r18, 0x63 ; 99 - b3e: 24 87 std Z+12, r18 ; 0x0c - b40: 9c 01 movw r18, r24 - b42: 24 5f subi r18, 0xF4 ; 244 - b44: 3f 4f sbci r19, 0xFF ; 255 - b46: bc 01 movw r22, r24 - b48: 6e 5f subi r22, 0xFE ; 254 - b4a: 7f 4f sbci r23, 0xFF ; 255 - b4c: e1 2c mov r14, r1 - b4e: f1 2c mov r15, r1 - b50: 87 01 movw r16, r14 - b52: e3 94 inc r14 - b54: 42 e1 ldi r20, 0x12 ; 18 - b56: 64 de rcall .-824 ; 0x820 - b58: 80 e0 ldi r24, 0x00 ; 0 - b5a: 90 e0 ldi r25, 0x00 ; 0 - b5c: 1f 91 pop r17 - b5e: 0f 91 pop r16 - b60: ff 90 pop r15 - b62: ef 90 pop r14 - b64: 08 95 ret - b66: fc 01 movw r30, r24 - b68: 22 85 ldd r18, Z+10 ; 0x0a - b6a: 40 fb bst r20, 0 - b6c: 27 f9 bld r18, 7 - b6e: 20 79 andi r18, 0x90 ; 144 - b70: 2f 64 ori r18, 0x4F ; 79 - b72: 22 87 std Z+10, r18 ; 0x0a - b74: 9c 01 movw r18, r24 - b76: 26 5f subi r18, 0xF6 ; 246 - b78: 3f 4f sbci r19, 0xFF ; 255 - b7a: bc 01 movw r22, r24 - b7c: 6e 5f subi r22, 0xFE ; 254 - b7e: 7f 4f sbci r23, 0xFF ; 255 - b80: e1 2c mov r14, r1 - b82: f1 2c mov r15, r1 - b84: 87 01 movw r16, r14 - b86: e3 94 inc r14 - b88: 40 e1 ldi r20, 0x10 ; 16 - b8a: 4a de rcall .-876 ; 0x820 - b8c: 80 e0 ldi r24, 0x00 ; 0 - b8e: 90 e0 ldi r25, 0x00 ; 0 - b90: 1f 91 pop r17 - b92: 0f 91 pop r16 - b94: ff 90 pop r15 - b96: ef 90 pop r14 - b98: 08 95 ret - b9a: fc 01 movw r30, r24 - b9c: 23 85 ldd r18, Z+11 ; 0x0b - b9e: 40 fb bst r20, 0 - ba0: 27 f9 bld r18, 7 - ba2: 2f 66 ori r18, 0x6F ; 111 - ba4: 23 87 std Z+11, r18 ; 0x0b - ba6: 9c 01 movw r18, r24 - ba8: 25 5f subi r18, 0xF5 ; 245 - baa: 3f 4f sbci r19, 0xFF ; 255 - bac: bc 01 movw r22, r24 - bae: 6e 5f subi r22, 0xFE ; 254 - bb0: 7f 4f sbci r23, 0xFF ; 255 - bb2: e1 2c mov r14, r1 - bb4: f1 2c mov r15, r1 - bb6: 87 01 movw r16, r14 - bb8: e3 94 inc r14 - bba: 41 e1 ldi r20, 0x11 ; 17 - bbc: 31 de rcall .-926 ; 0x820 - bbe: 80 e0 ldi r24, 0x00 ; 0 - bc0: 90 e0 ldi r25, 0x00 ; 0 - bc2: 1f 91 pop r17 - bc4: 0f 91 pop r16 - bc6: ff 90 pop r15 - bc8: ef 90 pop r14 - bca: 08 95 ret +00000a66 : + a66: 0f 93 push r16 + a68: 1f 93 push r17 + a6a: 66 23 and r22, r22 + a6c: 19 f0 breq .+6 ; 0xa74 + a6e: 61 30 cpi r22, 0x01 ; 1 + a70: 39 f0 breq .+14 ; 0xa80 + a72: 0a c0 rjmp .+20 ; 0xa88 + a74: fc 01 movw r30, r24 + a76: 21 85 ldd r18, Z+9 ; 0x09 + a78: 2b 7f andi r18, 0xFB ; 251 + a7a: 27 7f andi r18, 0xF7 ; 247 + a7c: 21 87 std Z+9, r18 ; 0x09 + a7e: 04 c0 rjmp .+8 ; 0xa88 + a80: fc 01 movw r30, r24 + a82: 21 85 ldd r18, Z+9 ; 0x09 + a84: 24 60 ori r18, 0x04 ; 4 + a86: 21 87 std Z+9, r18 ; 0x09 + a88: ac 01 movw r20, r24 + a8a: 47 5f subi r20, 0xF7 ; 247 + a8c: 5f 4f sbci r21, 0xFF ; 255 + a8e: 01 e0 ldi r16, 0x01 ; 1 + a90: 10 e0 ldi r17, 0x00 ; 0 + a92: 20 e0 ldi r18, 0x00 ; 0 + a94: 30 e0 ldi r19, 0x00 ; 0 + a96: 60 ef ldi r22, 0xF0 ; 240 + a98: f9 de rcall .-526 ; 0x88c + a9a: 80 e0 ldi r24, 0x00 ; 0 + a9c: 90 e0 ldi r25, 0x00 ; 0 + a9e: 1f 91 pop r17 + aa0: 0f 91 pop r16 + aa2: 08 95 ret -00000bcc : - bcc: ef 92 push r14 - bce: ff 92 push r15 - bd0: 0f 93 push r16 - bd2: 1f 93 push r17 - bd4: 66 23 and r22, r22 - bd6: c9 f0 breq .+50 ; 0xc0a - bd8: 61 30 cpi r22, 0x01 ; 1 - bda: 21 f4 brne .+8 ; 0xbe4 - bdc: fc 01 movw r30, r24 - bde: 21 85 ldd r18, Z+9 ; 0x09 - be0: 24 60 ori r18, 0x04 ; 4 - be2: 21 87 std Z+9, r18 ; 0x09 - be4: 9c 01 movw r18, r24 - be6: 27 5f subi r18, 0xF7 ; 247 - be8: 3f 4f sbci r19, 0xFF ; 255 - bea: bc 01 movw r22, r24 - bec: 6e 5f subi r22, 0xFE ; 254 - bee: 7f 4f sbci r23, 0xFF ; 255 - bf0: e1 2c mov r14, r1 - bf2: f1 2c mov r15, r1 - bf4: 87 01 movw r16, r14 - bf6: e3 94 inc r14 - bf8: 40 ef ldi r20, 0xF0 ; 240 - bfa: 12 de rcall .-988 ; 0x820 - bfc: 80 e0 ldi r24, 0x00 ; 0 - bfe: 90 e0 ldi r25, 0x00 ; 0 - c00: 1f 91 pop r17 - c02: 0f 91 pop r16 - c04: ff 90 pop r15 - c06: ef 90 pop r14 - c08: 08 95 ret - c0a: fc 01 movw r30, r24 - c0c: 21 85 ldd r18, Z+9 ; 0x09 - c0e: 2b 7f andi r18, 0xFB ; 251 - c10: 27 7f andi r18, 0xF7 ; 247 - c12: 21 87 std Z+9, r18 ; 0x09 - c14: e7 cf rjmp .-50 ; 0xbe4 +00000aa4 : + aa4: 0f 93 push r16 + aa6: 1f 93 push r17 + aa8: 31 e0 ldi r19, 0x01 ; 1 + aaa: 61 11 cpse r22, r1 + aac: 01 c0 rjmp .+2 ; 0xab0 + aae: 30 e0 ldi r19, 0x00 ; 0 + ab0: fc 01 movw r30, r24 + ab2: 26 8d ldd r18, Z+30 ; 0x1e + ab4: 30 fb bst r19, 0 + ab6: 25 f9 bld r18, 5 + ab8: 26 8f std Z+30, r18 ; 0x1e + aba: 31 e0 ldi r19, 0x01 ; 1 + abc: 41 11 cpse r20, r1 + abe: 01 c0 rjmp .+2 ; 0xac2 + ac0: 30 e0 ldi r19, 0x00 ; 0 + ac2: fc 01 movw r30, r24 + ac4: 26 8d ldd r18, Z+30 ; 0x1e + ac6: 30 fb bst r19, 0 + ac8: 27 f9 bld r18, 7 + aca: 26 8f std Z+30, r18 ; 0x1e + acc: ac 01 movw r20, r24 + ace: 42 5e subi r20, 0xE2 ; 226 + ad0: 5f 4f sbci r21, 0xFF ; 255 + ad2: 01 e0 ldi r16, 0x01 ; 1 + ad4: 10 e0 ldi r17, 0x00 ; 0 + ad6: 20 e0 ldi r18, 0x00 ; 0 + ad8: 30 e0 ldi r19, 0x00 ; 0 + ada: 61 eb ldi r22, 0xB1 ; 177 + adc: d7 de rcall .-594 ; 0x88c + ade: 80 e0 ldi r24, 0x00 ; 0 + ae0: 90 e0 ldi r25, 0x00 ; 0 + ae2: 1f 91 pop r17 + ae4: 0f 91 pop r16 + ae6: 08 95 ret -00000c16 : +00000ae8 : + ae8: af 92 push r10 + aea: bf 92 push r11 + aec: cf 92 push r12 + aee: df 92 push r13 + 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: ec 01 movw r28, r24 + afe: 42 70 andi r20, 0x02 ; 2 + b00: 8e 85 ldd r24, Y+14 ; 0x0e + b02: 8c 7f andi r24, 0xFC ; 252 + b04: 48 2b or r20, r24 + b06: 4e 87 std Y+14, r20 ; 0x0e + b08: 3f 87 std Y+15, r19 ; 0x0f + b0a: 28 8b std Y+16, r18 ; 0x10 + b0c: d8 01 movw r26, r16 + b0e: c7 01 movw r24, r14 + b10: 88 27 eor r24, r24 + b12: 99 27 eor r25, r25 + b14: af 70 andi r26, 0x0F ; 15 + b16: bb 27 eor r27, r27 + b18: fa 8a std Y+18, r15 ; 0x12 + b1a: eb 8a std Y+19, r14 ; 0x13 + b1c: 8a 2f mov r24, r26 + b1e: 8f 70 andi r24, 0x0F ; 15 + b20: 89 8b std Y+17, r24 ; 0x11 + b22: bc 86 std Y+12, r11 ; 0x0c + b24: ad 86 std Y+13, r10 ; 0x0d + b26: 66 23 and r22, r22 + b28: 19 f0 breq .+6 ; 0xb30 + b2a: 61 30 cpi r22, 0x01 ; 1 + b2c: 61 f0 breq .+24 ; 0xb46 + b2e: 15 c0 rjmp .+42 ; 0xb5a + b30: 08 e0 ldi r16, 0x08 ; 8 + b32: 10 e0 ldi r17, 0x00 ; 0 + b34: 20 e0 ldi r18, 0x00 ; 0 + b36: 30 e0 ldi r19, 0x00 ; 0 + b38: ae 01 movw r20, r28 + b3a: 44 5f subi r20, 0xF4 ; 244 + b3c: 5f 4f sbci r21, 0xFF ; 255 + b3e: 6a e1 ldi r22, 0x1A ; 26 + b40: ce 01 movw r24, r28 + b42: a4 de rcall .-696 ; 0x88c + b44: 0a c0 rjmp .+20 ; 0xb5a + b46: 08 e0 ldi r16, 0x08 ; 8 + b48: 10 e0 ldi r17, 0x00 ; 0 + b4a: 20 e0 ldi r18, 0x00 ; 0 + b4c: 30 e0 ldi r19, 0x00 ; 0 + b4e: ae 01 movw r20, r28 + b50: 44 5f subi r20, 0xF4 ; 244 + b52: 5f 4f sbci r21, 0xFF ; 255 + b54: 62 e2 ldi r22, 0x22 ; 34 + b56: ce 01 movw r24, r28 + b58: 99 de rcall .-718 ; 0x88c + b5a: 41 e0 ldi r20, 0x01 ; 1 + b5c: 61 e0 ldi r22, 0x01 ; 1 + b5e: ce 01 movw r24, r28 + b60: a1 df rcall .-190 ; 0xaa4 + b62: 80 e0 ldi r24, 0x00 ; 0 + b64: 90 e0 ldi r25, 0x00 ; 0 + b66: df 91 pop r29 + b68: cf 91 pop r28 + b6a: 1f 91 pop r17 + b6c: 0f 91 pop r16 + b6e: ff 90 pop r15 + b70: ef 90 pop r14 + b72: df 90 pop r13 + b74: cf 90 pop r12 + b76: bf 90 pop r11 + b78: af 90 pop r10 + b7a: 08 95 ret + +00000b7c : int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ - c16: af 92 push r10 - c18: bf 92 push r11 - c1a: cf 92 push r12 - c1c: df 92 push r13 - c1e: ef 92 push r14 - c20: ff 92 push r15 - c22: 0f 93 push r16 - c24: 1f 93 push r17 - c26: cf 93 push r28 - c28: df 93 push r29 - c2a: 1f 92 push r1 - c2c: cd b7 in r28, 0x3d ; 61 - c2e: de b7 in r29, 0x3e ; 62 + b7c: ef 92 push r14 + b7e: ff 92 push r15 + b80: 0f 93 push r16 + b82: 1f 93 push r17 + b84: cf 93 push r28 + b86: df 93 push r29 + b88: 1f 92 push r1 + b8a: cd b7 in r28, 0x3d ; 61 + b8c: de b7 in r29, 0x3e ; 62 if(inst == NULL)return -1; - c30: 00 97 sbiw r24, 0x00 ; 0 - c32: 09 f4 brne .+2 ; 0xc36 - c34: 83 c0 rjmp .+262 ; 0xd3c + b8e: 00 97 sbiw r24, 0x00 ; 0 + b90: 09 f4 brne .+2 ; 0xb94 + b92: 91 c0 rjmp .+290 ; 0xcb6 if(i2c_transfer_inst == NULL)return -1; - c36: 61 15 cp r22, r1 - c38: 71 05 cpc r23, r1 - c3a: 09 f4 brne .+2 ; 0xc3e - c3c: 7f c0 rjmp .+254 ; 0xd3c + b94: 61 15 cp r22, r1 + b96: 71 05 cpc r23, r1 + b98: 09 f4 brne .+2 ; 0xb9c + b9a: 90 c0 rjmp .+288 ; 0xcbc if(i2c_transfer_evt == NULL)return -1; - c3e: 41 15 cp r20, r1 - c40: 51 05 cpc r21, r1 - c42: 09 f4 brne .+2 ; 0xc46 - c44: 7b c0 rjmp .+246 ; 0xd3c - c46: 6c 01 movw r12, r24 + b9c: 41 15 cp r20, r1 + b9e: 51 05 cpc r21, r1 + ba0: 09 f4 brne .+2 ; 0xba4 + ba2: 8f c0 rjmp .+286 ; 0xcc2 + ba4: 7c 01 movw r14, r24 inst->i2c_transfer_inst = i2c_transfer_inst; - c48: dc 01 movw r26, r24 - c4a: 6d 93 st X+, r22 - c4c: 7c 93 st X, r23 - c4e: 11 97 sbiw r26, 0x01 ; 1 + ba6: dc 01 movw r26, r24 + ba8: 6d 93 st X+, r22 + baa: 7c 93 st X, r23 + bac: 11 97 sbiw r26, 0x01 ; 1 inst->i2c_transfer_evt = i2c_transfer_evt; - c50: 12 96 adiw r26, 0x02 ; 2 - c52: 4d 93 st X+, r20 - c54: 5c 93 st X, r21 - c56: 13 97 sbiw r26, 0x03 ; 3 + bae: 12 96 adiw r26, 0x02 ; 2 + bb0: 4d 93 st X+, r20 + bb2: 5c 93 st X, r21 + bb4: 13 97 sbiw r26, 0x03 ; 3 int ret = 0; memset(&(inst->device_data),0x00,sizeof(si5351_data)); - c58: fc 01 movw r30, r24 - c5a: 34 96 adiw r30, 0x04 ; 4 - c5c: 84 e5 ldi r24, 0x54 ; 84 - c5e: df 01 movw r26, r30 - c60: 1d 92 st X+, r1 - c62: 8a 95 dec r24 - c64: e9 f7 brne .-6 ; 0xc60 + bb6: fc 01 movw r30, r24 + bb8: 34 96 adiw r30, 0x04 ; 4 + bba: 8b e1 ldi r24, 0x1B ; 27 + bbc: df 01 movw r26, r30 + bbe: 1d 92 st X+, r1 + bc0: 8a 95 dec r24 + bc2: e9 f7 brne .-6 ; 0xbbe /* Disable all outputs setting CLKx_DIS high */ uint8_t temp = 0xff; - c66: 8f ef ldi r24, 0xFF ; 255 - c68: 89 83 std Y+1, r24 ; 0x01 - c6a: 56 01 movw r10, r12 - c6c: b2 e0 ldi r27, 0x02 ; 2 - c6e: ab 0e add r10, r27 - c70: b1 1c adc r11, r1 + bc4: 8f ef ldi r24, 0xFF ; 255 + bc6: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_OUTPUT_ENABLE_CONTROL,&temp,1); - c72: e1 2c mov r14, r1 - c74: f1 2c mov r15, r1 - c76: 87 01 movw r16, r14 - c78: e3 94 inc r14 - c7a: 9e 01 movw r18, r28 - c7c: 2f 5f subi r18, 0xFF ; 255 - c7e: 3f 4f sbci r19, 0xFF ; 255 - c80: 43 e0 ldi r20, 0x03 ; 3 - c82: b5 01 movw r22, r10 - c84: c6 01 movw r24, r12 - c86: cc dd rcall .-1128 ; 0x820 + bc8: 01 e0 ldi r16, 0x01 ; 1 + bca: 10 e0 ldi r17, 0x00 ; 0 + bcc: 20 e0 ldi r18, 0x00 ; 0 + bce: 30 e0 ldi r19, 0x00 ; 0 + bd0: ae 01 movw r20, r28 + bd2: 4f 5f subi r20, 0xFF ; 255 + bd4: 5f 4f sbci r21, 0xFF ; 255 + bd6: 63 e0 ldi r22, 0x03 ; 3 + bd8: c7 01 movw r24, r14 + bda: 58 de rcall .-848 ; 0x88c /* Power down all output drivers */ temp = 0x80; - c88: 80 e8 ldi r24, 0x80 ; 128 - c8a: 89 83 std Y+1, r24 ; 0x01 + bdc: 80 e8 ldi r24, 0x80 ; 128 + bde: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_CLK_0_CONTROL,&temp,1); - c8c: 9e 01 movw r18, r28 - c8e: 2f 5f subi r18, 0xFF ; 255 - c90: 3f 4f sbci r19, 0xFF ; 255 - c92: 40 e1 ldi r20, 0x10 ; 16 - c94: b5 01 movw r22, r10 - c96: c6 01 movw r24, r12 - c98: c3 dd rcall .-1146 ; 0x820 + 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: 60 e1 ldi r22, 0x10 ; 16 + bf0: c7 01 movw r24, r14 + bf2: 4c de rcall .-872 ; 0x88c writeRegister(inst,SI5351_REG_CLK_1_CONTROL,&temp,1); - c9a: 9e 01 movw r18, r28 - c9c: 2f 5f subi r18, 0xFF ; 255 - c9e: 3f 4f sbci r19, 0xFF ; 255 - ca0: 41 e1 ldi r20, 0x11 ; 17 - ca2: b5 01 movw r22, r10 - ca4: c6 01 movw r24, r12 - ca6: bc dd rcall .-1160 ; 0x820 + bf4: 01 e0 ldi r16, 0x01 ; 1 + bf6: 10 e0 ldi r17, 0x00 ; 0 + bf8: 20 e0 ldi r18, 0x00 ; 0 + bfa: 30 e0 ldi r19, 0x00 ; 0 + bfc: ae 01 movw r20, r28 + bfe: 4f 5f subi r20, 0xFF ; 255 + c00: 5f 4f sbci r21, 0xFF ; 255 + c02: 61 e1 ldi r22, 0x11 ; 17 + c04: c7 01 movw r24, r14 + c06: 42 de rcall .-892 ; 0x88c writeRegister(inst,SI5351_REG_CLK_2_CONTROL,&temp,1); - ca8: 9e 01 movw r18, r28 - caa: 2f 5f subi r18, 0xFF ; 255 - cac: 3f 4f sbci r19, 0xFF ; 255 - cae: 42 e1 ldi r20, 0x12 ; 18 - cb0: b5 01 movw r22, r10 - cb2: c6 01 movw r24, r12 - cb4: b5 dd rcall .-1174 ; 0x820 + c08: 01 e0 ldi r16, 0x01 ; 1 + c0a: 10 e0 ldi r17, 0x00 ; 0 + c0c: 20 e0 ldi r18, 0x00 ; 0 + c0e: 30 e0 ldi r19, 0x00 ; 0 + c10: ae 01 movw r20, r28 + c12: 4f 5f subi r20, 0xFF ; 255 + c14: 5f 4f sbci r21, 0xFF ; 255 + c16: 62 e1 ldi r22, 0x12 ; 18 + c18: c7 01 movw r24, r14 + c1a: 38 de rcall .-912 ; 0x88c writeRegister(inst,SI5351_REG_CLK_3_CONTROL,&temp,1); - cb6: 9e 01 movw r18, r28 - cb8: 2f 5f subi r18, 0xFF ; 255 - cba: 3f 4f sbci r19, 0xFF ; 255 - cbc: 43 e1 ldi r20, 0x13 ; 19 - cbe: b5 01 movw r22, r10 - cc0: c6 01 movw r24, r12 - cc2: ae dd rcall .-1188 ; 0x820 + c1c: 01 e0 ldi r16, 0x01 ; 1 + c1e: 10 e0 ldi r17, 0x00 ; 0 + c20: 20 e0 ldi r18, 0x00 ; 0 + c22: 30 e0 ldi r19, 0x00 ; 0 + c24: ae 01 movw r20, r28 + c26: 4f 5f subi r20, 0xFF ; 255 + c28: 5f 4f sbci r21, 0xFF ; 255 + c2a: 63 e1 ldi r22, 0x13 ; 19 + c2c: c7 01 movw r24, r14 + c2e: 2e de rcall .-932 ; 0x88c writeRegister(inst,SI5351_REG_CLK_4_CONTROL,&temp,1); - cc4: 9e 01 movw r18, r28 - cc6: 2f 5f subi r18, 0xFF ; 255 - cc8: 3f 4f sbci r19, 0xFF ; 255 - cca: 44 e1 ldi r20, 0x14 ; 20 - ccc: b5 01 movw r22, r10 - cce: c6 01 movw r24, r12 - cd0: a7 dd rcall .-1202 ; 0x820 + c30: 01 e0 ldi r16, 0x01 ; 1 + c32: 10 e0 ldi r17, 0x00 ; 0 + c34: 20 e0 ldi r18, 0x00 ; 0 + c36: 30 e0 ldi r19, 0x00 ; 0 + c38: ae 01 movw r20, r28 + c3a: 4f 5f subi r20, 0xFF ; 255 + c3c: 5f 4f sbci r21, 0xFF ; 255 + c3e: 64 e1 ldi r22, 0x14 ; 20 + c40: c7 01 movw r24, r14 + c42: 24 de rcall .-952 ; 0x88c writeRegister(inst,SI5351_REG_CLK_5_CONTROL,&temp,1); - cd2: 9e 01 movw r18, r28 - cd4: 2f 5f subi r18, 0xFF ; 255 - cd6: 3f 4f sbci r19, 0xFF ; 255 - cd8: 45 e1 ldi r20, 0x15 ; 21 - cda: b5 01 movw r22, r10 - cdc: c6 01 movw r24, r12 - cde: a0 dd rcall .-1216 ; 0x820 + c44: 01 e0 ldi r16, 0x01 ; 1 + c46: 10 e0 ldi r17, 0x00 ; 0 + c48: 20 e0 ldi r18, 0x00 ; 0 + c4a: 30 e0 ldi r19, 0x00 ; 0 + c4c: ae 01 movw r20, r28 + c4e: 4f 5f subi r20, 0xFF ; 255 + c50: 5f 4f sbci r21, 0xFF ; 255 + c52: 65 e1 ldi r22, 0x15 ; 21 + c54: c7 01 movw r24, r14 + c56: 1a de rcall .-972 ; 0x88c writeRegister(inst,SI5351_REG_CLK_6_CONTROL,&temp,1); - ce0: 9e 01 movw r18, r28 - ce2: 2f 5f subi r18, 0xFF ; 255 - ce4: 3f 4f sbci r19, 0xFF ; 255 - ce6: 46 e1 ldi r20, 0x16 ; 22 - ce8: b5 01 movw r22, r10 - cea: c6 01 movw r24, r12 - cec: 99 dd rcall .-1230 ; 0x820 + c58: 01 e0 ldi r16, 0x01 ; 1 + c5a: 10 e0 ldi r17, 0x00 ; 0 + c5c: 20 e0 ldi r18, 0x00 ; 0 + c5e: 30 e0 ldi r19, 0x00 ; 0 + c60: ae 01 movw r20, r28 + c62: 4f 5f subi r20, 0xFF ; 255 + c64: 5f 4f sbci r21, 0xFF ; 255 + c66: 66 e1 ldi r22, 0x16 ; 22 + c68: c7 01 movw r24, r14 + c6a: 10 de rcall .-992 ; 0x88c writeRegister(inst,SI5351_REG_CLK_7_CONTROL,&temp,1); - cee: 9e 01 movw r18, r28 - cf0: 2f 5f subi r18, 0xFF ; 255 - cf2: 3f 4f sbci r19, 0xFF ; 255 - cf4: 47 e1 ldi r20, 0x17 ; 23 - cf6: b5 01 movw r22, r10 - cf8: c6 01 movw r24, r12 - cfa: 92 dd rcall .-1244 ; 0x820 + c6c: 01 e0 ldi r16, 0x01 ; 1 + c6e: 10 e0 ldi r17, 0x00 ; 0 + c70: 20 e0 ldi r18, 0x00 ; 0 + c72: 30 e0 ldi r19, 0x00 ; 0 + c74: ae 01 movw r20, r28 + c76: 4f 5f subi r20, 0xFF ; 255 + c78: 5f 4f sbci r21, 0xFF ; 255 + c7a: 67 e1 ldi r22, 0x17 ; 23 + c7c: c7 01 movw r24, r14 + c7e: 06 de rcall .-1012 ; 0x88c temp = SI5351_CRYSTAL_LOAD_10PF; - cfc: 80 ec ldi r24, 0xC0 ; 192 - cfe: 89 83 std Y+1, r24 ; 0x01 + c80: 80 ec ldi r24, 0xC0 ; 192 + c82: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); - d00: 9e 01 movw r18, r28 - d02: 2f 5f subi r18, 0xFF ; 255 - d04: 3f 4f sbci r19, 0xFF ; 255 - d06: 47 eb ldi r20, 0xB7 ; 183 - d08: b5 01 movw r22, r10 - d0a: c6 01 movw r24, r12 - d0c: 89 dd rcall .-1262 ; 0x820 + c84: 01 e0 ldi r16, 0x01 ; 1 + c86: 10 e0 ldi r17, 0x00 ; 0 + c88: 20 e0 ldi r18, 0x00 ; 0 + c8a: 30 e0 ldi r19, 0x00 ; 0 + c8c: ae 01 movw r20, r28 + c8e: 4f 5f subi r20, 0xFF ; 255 + c90: 5f 4f sbci r21, 0xFF ; 255 + c92: 67 eb ldi r22, 0xB7 ; 183 + c94: c7 01 movw r24, r14 + c96: fa dd rcall .-1036 ; 0x88c // Enable xtal clk.. temp = 0b01000000; - d0e: 80 e4 ldi r24, 0x40 ; 64 - d10: 89 83 std Y+1, r24 ; 0x01 + c98: 80 e4 ldi r24, 0x40 ; 64 + c9a: 89 83 std Y+1, r24 ; 0x01 writeRegister(inst,SI5351_REG_FANOUT_ENABLE,&temp,1); - d12: 9e 01 movw r18, r28 - d14: 2f 5f subi r18, 0xFF ; 255 - d16: 3f 4f sbci r19, 0xFF ; 255 - d18: 4b eb ldi r20, 0xBB ; 187 - d1a: b5 01 movw r22, r10 - d1c: c6 01 movw r24, r12 - d1e: 80 dd rcall .-1280 ; 0x820 + c9c: 01 e0 ldi r16, 0x01 ; 1 + c9e: 10 e0 ldi r17, 0x00 ; 0 + ca0: 20 e0 ldi r18, 0x00 ; 0 + ca2: 30 e0 ldi r19, 0x00 ; 0 + ca4: ae 01 movw r20, r28 + ca6: 4f 5f subi r20, 0xFF ; 255 + ca8: 5f 4f sbci r21, 0xFF ; 255 + caa: 6b eb ldi r22, 0xBB ; 187 + cac: c7 01 movw r24, r14 + cae: ee dd rcall .-1060 ; 0x88c return ret; - d20: 80 e0 ldi r24, 0x00 ; 0 - d22: 90 e0 ldi r25, 0x00 ; 0 - - - -} - d24: 0f 90 pop r0 - d26: df 91 pop r29 - d28: cf 91 pop r28 - d2a: 1f 91 pop r17 - d2c: 0f 91 pop r16 - d2e: ff 90 pop r15 - d30: ef 90 pop r14 - d32: df 90 pop r13 - d34: cf 90 pop r12 - d36: bf 90 pop r11 - d38: af 90 pop r10 - d3a: 08 95 ret + cb0: 80 e0 ldi r24, 0x00 ; 0 + cb2: 90 e0 ldi r25, 0x00 ; 0 + cb4: 08 c0 rjmp .+16 ; 0xcc6 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; - d3c: 8f ef ldi r24, 0xFF ; 255 - d3e: 9f ef ldi r25, 0xFF ; 255 - d40: f1 cf rjmp .-30 ; 0xd24 + cb6: 8f ef ldi r24, 0xFF ; 255 + cb8: 9f ef ldi r25, 0xFF ; 255 + cba: 05 c0 rjmp .+10 ; 0xcc6 + if(i2c_transfer_inst == NULL)return -1; + cbc: 8f ef ldi r24, 0xFF ; 255 + cbe: 9f ef ldi r25, 0xFF ; 255 + cc0: 02 c0 rjmp .+4 ; 0xcc6 + if(i2c_transfer_evt == NULL)return -1; + cc2: 8f ef ldi r24, 0xFF ; 255 + cc4: 9f ef ldi r25, 0xFF ; 255 + writeRegister(inst,SI5351_REG_FANOUT_ENABLE,&temp,1); + return ret; -00000d42 : - d42: 0f 93 push r16 - d44: 1f 93 push r17 - d46: cf 93 push r28 - d48: df 93 push r29 - d4a: 82 30 cpi r24, 0x02 ; 2 - d4c: 91 05 cpc r25, r1 - d4e: 10 f4 brcc .+4 ; 0xd54 - d50: 82 e0 ldi r24, 0x02 ; 2 - d52: 90 e0 ldi r25, 0x00 ; 0 - d54: e0 91 6a 3f lds r30, 0x3F6A ; 0x803f6a <__flp> - d58: f0 91 6b 3f lds r31, 0x3F6B ; 0x803f6b <__flp+0x1> - d5c: 20 e0 ldi r18, 0x00 ; 0 - d5e: 30 e0 ldi r19, 0x00 ; 0 - d60: a0 e0 ldi r26, 0x00 ; 0 - d62: b0 e0 ldi r27, 0x00 ; 0 - d64: 30 97 sbiw r30, 0x00 ; 0 - d66: 19 f1 breq .+70 ; 0xdae - d68: 40 81 ld r20, Z - d6a: 51 81 ldd r21, Z+1 ; 0x01 - d6c: 02 81 ldd r16, Z+2 ; 0x02 - d6e: 13 81 ldd r17, Z+3 ; 0x03 - d70: 48 17 cp r20, r24 - d72: 59 07 cpc r21, r25 - d74: c8 f0 brcs .+50 ; 0xda8 - d76: 84 17 cp r24, r20 - d78: 95 07 cpc r25, r21 - d7a: 69 f4 brne .+26 ; 0xd96 - d7c: 10 97 sbiw r26, 0x00 ; 0 - d7e: 31 f0 breq .+12 ; 0xd8c - d80: 12 96 adiw r26, 0x02 ; 2 - d82: 0c 93 st X, r16 - d84: 12 97 sbiw r26, 0x02 ; 2 - d86: 13 96 adiw r26, 0x03 ; 3 - d88: 1c 93 st X, r17 - d8a: 27 c0 rjmp .+78 ; 0xdda - d8c: 00 93 6a 3f sts 0x3F6A, r16 ; 0x803f6a <__flp> - d90: 10 93 6b 3f sts 0x3F6B, r17 ; 0x803f6b <__flp+0x1> - d94: 22 c0 rjmp .+68 ; 0xdda - d96: 21 15 cp r18, r1 - d98: 31 05 cpc r19, r1 - d9a: 19 f0 breq .+6 ; 0xda2 - d9c: 42 17 cp r20, r18 - d9e: 53 07 cpc r21, r19 - da0: 18 f4 brcc .+6 ; 0xda8 - da2: 9a 01 movw r18, r20 - da4: bd 01 movw r22, r26 - da6: ef 01 movw r28, r30 - da8: df 01 movw r26, r30 - daa: f8 01 movw r30, r16 - dac: db cf rjmp .-74 ; 0xd64 - dae: 21 15 cp r18, r1 - db0: 31 05 cpc r19, r1 - db2: f9 f0 breq .+62 ; 0xdf2 - db4: 28 1b sub r18, r24 - db6: 39 0b sbc r19, r25 - db8: 24 30 cpi r18, 0x04 ; 4 - dba: 31 05 cpc r19, r1 - dbc: 80 f4 brcc .+32 ; 0xdde - dbe: 8a 81 ldd r24, Y+2 ; 0x02 - dc0: 9b 81 ldd r25, Y+3 ; 0x03 - dc2: 61 15 cp r22, r1 - dc4: 71 05 cpc r23, r1 - dc6: 21 f0 breq .+8 ; 0xdd0 - dc8: fb 01 movw r30, r22 - dca: 82 83 std Z+2, r24 ; 0x02 - dcc: 93 83 std Z+3, r25 ; 0x03 - dce: 04 c0 rjmp .+8 ; 0xdd8 - dd0: 80 93 6a 3f sts 0x3F6A, r24 ; 0x803f6a <__flp> - dd4: 90 93 6b 3f sts 0x3F6B, r25 ; 0x803f6b <__flp+0x1> - dd8: fe 01 movw r30, r28 - dda: 32 96 adiw r30, 0x02 ; 2 - ddc: 44 c0 rjmp .+136 ; 0xe66 - dde: fe 01 movw r30, r28 - de0: e2 0f add r30, r18 - de2: f3 1f adc r31, r19 - de4: 81 93 st Z+, r24 - de6: 91 93 st Z+, r25 - de8: 22 50 subi r18, 0x02 ; 2 - dea: 31 09 sbc r19, r1 - dec: 28 83 st Y, r18 - dee: 39 83 std Y+1, r19 ; 0x01 - df0: 3a c0 rjmp .+116 ; 0xe66 - df2: 20 91 68 3f lds r18, 0x3F68 ; 0x803f68 <__brkval> - df6: 30 91 69 3f lds r19, 0x3F69 ; 0x803f69 <__brkval+0x1> - dfa: 23 2b or r18, r19 - dfc: 41 f4 brne .+16 ; 0xe0e - dfe: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> - e02: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> - e06: 20 93 68 3f sts 0x3F68, r18 ; 0x803f68 <__brkval> - e0a: 30 93 69 3f sts 0x3F69, r19 ; 0x803f69 <__brkval+0x1> - e0e: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> - e12: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> - e16: 21 15 cp r18, r1 - e18: 31 05 cpc r19, r1 - e1a: 41 f4 brne .+16 ; 0xe2c - e1c: 2d b7 in r18, 0x3d ; 61 - e1e: 3e b7 in r19, 0x3e ; 62 - e20: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> - e24: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> - e28: 24 1b sub r18, r20 - e2a: 35 0b sbc r19, r21 - e2c: e0 91 68 3f lds r30, 0x3F68 ; 0x803f68 <__brkval> - e30: f0 91 69 3f lds r31, 0x3F69 ; 0x803f69 <__brkval+0x1> - e34: e2 17 cp r30, r18 - e36: f3 07 cpc r31, r19 - e38: a0 f4 brcc .+40 ; 0xe62 - e3a: 2e 1b sub r18, r30 - e3c: 3f 0b sbc r19, r31 - e3e: 28 17 cp r18, r24 - e40: 39 07 cpc r19, r25 - e42: 78 f0 brcs .+30 ; 0xe62 - e44: ac 01 movw r20, r24 - e46: 4e 5f subi r20, 0xFE ; 254 - e48: 5f 4f sbci r21, 0xFF ; 255 - e4a: 24 17 cp r18, r20 - e4c: 35 07 cpc r19, r21 - e4e: 48 f0 brcs .+18 ; 0xe62 - e50: 4e 0f add r20, r30 - e52: 5f 1f adc r21, r31 - e54: 40 93 68 3f sts 0x3F68, r20 ; 0x803f68 <__brkval> - e58: 50 93 69 3f sts 0x3F69, r21 ; 0x803f69 <__brkval+0x1> - e5c: 81 93 st Z+, r24 - e5e: 91 93 st Z+, r25 - e60: 02 c0 rjmp .+4 ; 0xe66 - e62: e0 e0 ldi r30, 0x00 ; 0 - e64: f0 e0 ldi r31, 0x00 ; 0 - e66: cf 01 movw r24, r30 - e68: df 91 pop r29 - e6a: cf 91 pop r28 - e6c: 1f 91 pop r17 - e6e: 0f 91 pop r16 - e70: 08 95 ret -00000e72 : - e72: cf 93 push r28 - e74: df 93 push r29 - e76: 00 97 sbiw r24, 0x00 ; 0 - e78: 09 f4 brne .+2 ; 0xe7c - e7a: 81 c0 rjmp .+258 ; 0xf7e - e7c: fc 01 movw r30, r24 - e7e: 32 97 sbiw r30, 0x02 ; 2 - e80: 12 82 std Z+2, r1 ; 0x02 - e82: 13 82 std Z+3, r1 ; 0x03 - e84: a0 91 6a 3f lds r26, 0x3F6A ; 0x803f6a <__flp> - e88: b0 91 6b 3f lds r27, 0x3F6B ; 0x803f6b <__flp+0x1> - e8c: 10 97 sbiw r26, 0x00 ; 0 - e8e: 81 f4 brne .+32 ; 0xeb0 - e90: 20 81 ld r18, Z - e92: 31 81 ldd r19, Z+1 ; 0x01 - e94: 82 0f add r24, r18 - e96: 93 1f adc r25, r19 - e98: 20 91 68 3f lds r18, 0x3F68 ; 0x803f68 <__brkval> - e9c: 30 91 69 3f lds r19, 0x3F69 ; 0x803f69 <__brkval+0x1> - ea0: 28 17 cp r18, r24 - ea2: 39 07 cpc r19, r25 - ea4: 51 f5 brne .+84 ; 0xefa - ea6: e0 93 68 3f sts 0x3F68, r30 ; 0x803f68 <__brkval> - eaa: f0 93 69 3f sts 0x3F69, r31 ; 0x803f69 <__brkval+0x1> - eae: 67 c0 rjmp .+206 ; 0xf7e - eb0: ed 01 movw r28, r26 - eb2: 20 e0 ldi r18, 0x00 ; 0 - eb4: 30 e0 ldi r19, 0x00 ; 0 - eb6: ce 17 cp r28, r30 - eb8: df 07 cpc r29, r31 - eba: 40 f4 brcc .+16 ; 0xecc - ebc: 4a 81 ldd r20, Y+2 ; 0x02 - ebe: 5b 81 ldd r21, Y+3 ; 0x03 - ec0: 9e 01 movw r18, r28 - ec2: 41 15 cp r20, r1 - ec4: 51 05 cpc r21, r1 - ec6: f1 f0 breq .+60 ; 0xf04 - ec8: ea 01 movw r28, r20 - eca: f5 cf rjmp .-22 ; 0xeb6 - ecc: c2 83 std Z+2, r28 ; 0x02 - ece: d3 83 std Z+3, r29 ; 0x03 - ed0: 40 81 ld r20, Z - ed2: 51 81 ldd r21, Z+1 ; 0x01 - ed4: 84 0f add r24, r20 - ed6: 95 1f adc r25, r21 - ed8: c8 17 cp r28, r24 - eda: d9 07 cpc r29, r25 - edc: 59 f4 brne .+22 ; 0xef4 - ede: 88 81 ld r24, Y - ee0: 99 81 ldd r25, Y+1 ; 0x01 - ee2: 84 0f add r24, r20 - ee4: 95 1f adc r25, r21 - ee6: 02 96 adiw r24, 0x02 ; 2 - ee8: 80 83 st Z, r24 - eea: 91 83 std Z+1, r25 ; 0x01 - eec: 8a 81 ldd r24, Y+2 ; 0x02 - eee: 9b 81 ldd r25, Y+3 ; 0x03 - ef0: 82 83 std Z+2, r24 ; 0x02 - ef2: 93 83 std Z+3, r25 ; 0x03 - ef4: 21 15 cp r18, r1 - ef6: 31 05 cpc r19, r1 - ef8: 29 f4 brne .+10 ; 0xf04 - efa: e0 93 6a 3f sts 0x3F6A, r30 ; 0x803f6a <__flp> - efe: f0 93 6b 3f sts 0x3F6B, r31 ; 0x803f6b <__flp+0x1> - f02: 3d c0 rjmp .+122 ; 0xf7e - f04: e9 01 movw r28, r18 - f06: ea 83 std Y+2, r30 ; 0x02 - f08: fb 83 std Y+3, r31 ; 0x03 - f0a: 49 91 ld r20, Y+ - f0c: 59 91 ld r21, Y+ - f0e: c4 0f add r28, r20 - f10: d5 1f adc r29, r21 - f12: ec 17 cp r30, r28 - f14: fd 07 cpc r31, r29 - f16: 61 f4 brne .+24 ; 0xf30 - f18: 80 81 ld r24, Z - f1a: 91 81 ldd r25, Z+1 ; 0x01 - f1c: 84 0f add r24, r20 - f1e: 95 1f adc r25, r21 - f20: 02 96 adiw r24, 0x02 ; 2 - f22: e9 01 movw r28, r18 - f24: 88 83 st Y, r24 - f26: 99 83 std Y+1, r25 ; 0x01 - f28: 82 81 ldd r24, Z+2 ; 0x02 - f2a: 93 81 ldd r25, Z+3 ; 0x03 - f2c: 8a 83 std Y+2, r24 ; 0x02 - f2e: 9b 83 std Y+3, r25 ; 0x03 - f30: e0 e0 ldi r30, 0x00 ; 0 - f32: f0 e0 ldi r31, 0x00 ; 0 - f34: 12 96 adiw r26, 0x02 ; 2 - f36: 8d 91 ld r24, X+ - f38: 9c 91 ld r25, X - f3a: 13 97 sbiw r26, 0x03 ; 3 - f3c: 00 97 sbiw r24, 0x00 ; 0 - f3e: 19 f0 breq .+6 ; 0xf46 - f40: fd 01 movw r30, r26 - f42: dc 01 movw r26, r24 - f44: f7 cf rjmp .-18 ; 0xf34 - f46: 8d 91 ld r24, X+ - f48: 9c 91 ld r25, X - f4a: 11 97 sbiw r26, 0x01 ; 1 - f4c: 9d 01 movw r18, r26 - f4e: 2e 5f subi r18, 0xFE ; 254 - f50: 3f 4f sbci r19, 0xFF ; 255 - f52: 82 0f add r24, r18 - f54: 93 1f adc r25, r19 - f56: 20 91 68 3f lds r18, 0x3F68 ; 0x803f68 <__brkval> - f5a: 30 91 69 3f lds r19, 0x3F69 ; 0x803f69 <__brkval+0x1> - f5e: 28 17 cp r18, r24 - f60: 39 07 cpc r19, r25 - f62: 69 f4 brne .+26 ; 0xf7e - f64: 30 97 sbiw r30, 0x00 ; 0 - f66: 29 f4 brne .+10 ; 0xf72 - f68: 10 92 6a 3f sts 0x3F6A, r1 ; 0x803f6a <__flp> - f6c: 10 92 6b 3f sts 0x3F6B, r1 ; 0x803f6b <__flp+0x1> - f70: 02 c0 rjmp .+4 ; 0xf76 - f72: 12 82 std Z+2, r1 ; 0x02 - f74: 13 82 std Z+3, r1 ; 0x03 - f76: a0 93 68 3f sts 0x3F68, r26 ; 0x803f68 <__brkval> - f7a: b0 93 69 3f sts 0x3F69, r27 ; 0x803f69 <__brkval+0x1> - f7e: df 91 pop r29 - f80: cf 91 pop r28 - f82: 08 95 ret -00000f84 : - f84: fb 01 movw r30, r22 - f86: dc 01 movw r26, r24 - f88: 02 c0 rjmp .+4 ; 0xf8e - f8a: 01 90 ld r0, Z+ - f8c: 0d 92 st X+, r0 - f8e: 41 50 subi r20, 0x01 ; 1 - f90: 50 40 sbci r21, 0x00 ; 0 - f92: d8 f7 brcc .-10 ; 0xf8a - f94: 08 95 ret +} + cc6: 0f 90 pop r0 + cc8: df 91 pop r29 + cca: cf 91 pop r28 + ccc: 1f 91 pop r17 + cce: 0f 91 pop r16 + cd0: ff 90 pop r15 + cd2: ef 90 pop r14 + cd4: 08 95 ret -00000f96 : - f96: 03 d0 rcall .+6 ; 0xf9e - f98: 80 81 ld r24, Z - f9a: 99 27 eor r25, r25 - f9c: 08 95 ret +00000cd6 : + cd6: 0f 93 push r16 + cd8: 1f 93 push r17 + cda: cf 93 push r28 + cdc: df 93 push r29 + cde: 82 30 cpi r24, 0x02 ; 2 + ce0: 91 05 cpc r25, r1 + ce2: 10 f4 brcc .+4 ; 0xce8 + ce4: 82 e0 ldi r24, 0x02 ; 2 + ce6: 90 e0 ldi r25, 0x00 ; 0 + ce8: e0 91 88 3f lds r30, 0x3F88 ; 0x803f88 <__flp> + cec: f0 91 89 3f lds r31, 0x3F89 ; 0x803f89 <__flp+0x1> + cf0: 20 e0 ldi r18, 0x00 ; 0 + cf2: 30 e0 ldi r19, 0x00 ; 0 + cf4: a0 e0 ldi r26, 0x00 ; 0 + cf6: b0 e0 ldi r27, 0x00 ; 0 + cf8: 30 97 sbiw r30, 0x00 ; 0 + cfa: 19 f1 breq .+70 ; 0xd42 + cfc: 40 81 ld r20, Z + cfe: 51 81 ldd r21, Z+1 ; 0x01 + d00: 02 81 ldd r16, Z+2 ; 0x02 + d02: 13 81 ldd r17, Z+3 ; 0x03 + d04: 48 17 cp r20, r24 + d06: 59 07 cpc r21, r25 + d08: c8 f0 brcs .+50 ; 0xd3c + d0a: 84 17 cp r24, r20 + d0c: 95 07 cpc r25, r21 + d0e: 69 f4 brne .+26 ; 0xd2a + d10: 10 97 sbiw r26, 0x00 ; 0 + d12: 31 f0 breq .+12 ; 0xd20 + d14: 12 96 adiw r26, 0x02 ; 2 + d16: 0c 93 st X, r16 + d18: 12 97 sbiw r26, 0x02 ; 2 + d1a: 13 96 adiw r26, 0x03 ; 3 + d1c: 1c 93 st X, r17 + d1e: 27 c0 rjmp .+78 ; 0xd6e + d20: 00 93 88 3f sts 0x3F88, r16 ; 0x803f88 <__flp> + d24: 10 93 89 3f sts 0x3F89, r17 ; 0x803f89 <__flp+0x1> + d28: 22 c0 rjmp .+68 ; 0xd6e + d2a: 21 15 cp r18, r1 + d2c: 31 05 cpc r19, r1 + d2e: 19 f0 breq .+6 ; 0xd36 + d30: 42 17 cp r20, r18 + d32: 53 07 cpc r21, r19 + d34: 18 f4 brcc .+6 ; 0xd3c + d36: 9a 01 movw r18, r20 + d38: bd 01 movw r22, r26 + d3a: ef 01 movw r28, r30 + d3c: df 01 movw r26, r30 + d3e: f8 01 movw r30, r16 + d40: db cf rjmp .-74 ; 0xcf8 + d42: 21 15 cp r18, r1 + d44: 31 05 cpc r19, r1 + d46: f9 f0 breq .+62 ; 0xd86 + d48: 28 1b sub r18, r24 + d4a: 39 0b sbc r19, r25 + d4c: 24 30 cpi r18, 0x04 ; 4 + d4e: 31 05 cpc r19, r1 + d50: 80 f4 brcc .+32 ; 0xd72 + d52: 8a 81 ldd r24, Y+2 ; 0x02 + d54: 9b 81 ldd r25, Y+3 ; 0x03 + d56: 61 15 cp r22, r1 + d58: 71 05 cpc r23, r1 + d5a: 21 f0 breq .+8 ; 0xd64 + d5c: fb 01 movw r30, r22 + d5e: 82 83 std Z+2, r24 ; 0x02 + d60: 93 83 std Z+3, r25 ; 0x03 + d62: 04 c0 rjmp .+8 ; 0xd6c + d64: 80 93 88 3f sts 0x3F88, r24 ; 0x803f88 <__flp> + d68: 90 93 89 3f sts 0x3F89, r25 ; 0x803f89 <__flp+0x1> + d6c: fe 01 movw r30, r28 + d6e: 32 96 adiw r30, 0x02 ; 2 + d70: 44 c0 rjmp .+136 ; 0xdfa + d72: fe 01 movw r30, r28 + d74: e2 0f add r30, r18 + d76: f3 1f adc r31, r19 + d78: 81 93 st Z+, r24 + d7a: 91 93 st Z+, r25 + d7c: 22 50 subi r18, 0x02 ; 2 + d7e: 31 09 sbc r19, r1 + d80: 28 83 st Y, r18 + d82: 39 83 std Y+1, r19 ; 0x01 + d84: 3a c0 rjmp .+116 ; 0xdfa + d86: 20 91 86 3f lds r18, 0x3F86 ; 0x803f86 <__brkval> + d8a: 30 91 87 3f lds r19, 0x3F87 ; 0x803f87 <__brkval+0x1> + d8e: 23 2b or r18, r19 + d90: 41 f4 brne .+16 ; 0xda2 + d92: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> + d96: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> + d9a: 20 93 86 3f sts 0x3F86, r18 ; 0x803f86 <__brkval> + d9e: 30 93 87 3f sts 0x3F87, r19 ; 0x803f87 <__brkval+0x1> + da2: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> + da6: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> + daa: 21 15 cp r18, r1 + dac: 31 05 cpc r19, r1 + dae: 41 f4 brne .+16 ; 0xdc0 + db0: 2d b7 in r18, 0x3d ; 61 + db2: 3e b7 in r19, 0x3e ; 62 + db4: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> + db8: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> + dbc: 24 1b sub r18, r20 + dbe: 35 0b sbc r19, r21 + dc0: e0 91 86 3f lds r30, 0x3F86 ; 0x803f86 <__brkval> + dc4: f0 91 87 3f lds r31, 0x3F87 ; 0x803f87 <__brkval+0x1> + dc8: e2 17 cp r30, r18 + dca: f3 07 cpc r31, r19 + dcc: a0 f4 brcc .+40 ; 0xdf6 + dce: 2e 1b sub r18, r30 + dd0: 3f 0b sbc r19, r31 + dd2: 28 17 cp r18, r24 + dd4: 39 07 cpc r19, r25 + dd6: 78 f0 brcs .+30 ; 0xdf6 + dd8: ac 01 movw r20, r24 + dda: 4e 5f subi r20, 0xFE ; 254 + ddc: 5f 4f sbci r21, 0xFF ; 255 + dde: 24 17 cp r18, r20 + de0: 35 07 cpc r19, r21 + de2: 48 f0 brcs .+18 ; 0xdf6 + de4: 4e 0f add r20, r30 + de6: 5f 1f adc r21, r31 + de8: 40 93 86 3f sts 0x3F86, r20 ; 0x803f86 <__brkval> + dec: 50 93 87 3f sts 0x3F87, r21 ; 0x803f87 <__brkval+0x1> + df0: 81 93 st Z+, r24 + df2: 91 93 st Z+, r25 + df4: 02 c0 rjmp .+4 ; 0xdfa + df6: e0 e0 ldi r30, 0x00 ; 0 + df8: f0 e0 ldi r31, 0x00 ; 0 + dfa: cf 01 movw r24, r30 + dfc: df 91 pop r29 + dfe: cf 91 pop r28 + e00: 1f 91 pop r17 + e02: 0f 91 pop r16 + e04: 08 95 ret -00000f9e : - f9e: fc 01 movw r30, r24 - fa0: e0 50 subi r30, 0x00 ; 0 - fa2: fc 4e sbci r31, 0xEC ; 236 - fa4: 08 95 ret +00000e06 : + e06: cf 93 push r28 + e08: df 93 push r29 + e0a: 00 97 sbiw r24, 0x00 ; 0 + e0c: 09 f4 brne .+2 ; 0xe10 + e0e: 81 c0 rjmp .+258 ; 0xf12 + e10: fc 01 movw r30, r24 + e12: 32 97 sbiw r30, 0x02 ; 2 + e14: 12 82 std Z+2, r1 ; 0x02 + e16: 13 82 std Z+3, r1 ; 0x03 + e18: a0 91 88 3f lds r26, 0x3F88 ; 0x803f88 <__flp> + e1c: b0 91 89 3f lds r27, 0x3F89 ; 0x803f89 <__flp+0x1> + e20: 10 97 sbiw r26, 0x00 ; 0 + e22: 81 f4 brne .+32 ; 0xe44 + e24: 20 81 ld r18, Z + e26: 31 81 ldd r19, Z+1 ; 0x01 + e28: 82 0f add r24, r18 + e2a: 93 1f adc r25, r19 + e2c: 20 91 86 3f lds r18, 0x3F86 ; 0x803f86 <__brkval> + e30: 30 91 87 3f lds r19, 0x3F87 ; 0x803f87 <__brkval+0x1> + e34: 28 17 cp r18, r24 + e36: 39 07 cpc r19, r25 + e38: 51 f5 brne .+84 ; 0xe8e + e3a: e0 93 86 3f sts 0x3F86, r30 ; 0x803f86 <__brkval> + e3e: f0 93 87 3f sts 0x3F87, r31 ; 0x803f87 <__brkval+0x1> + e42: 67 c0 rjmp .+206 ; 0xf12 + e44: ed 01 movw r28, r26 + e46: 20 e0 ldi r18, 0x00 ; 0 + e48: 30 e0 ldi r19, 0x00 ; 0 + e4a: ce 17 cp r28, r30 + e4c: df 07 cpc r29, r31 + e4e: 40 f4 brcc .+16 ; 0xe60 + e50: 4a 81 ldd r20, Y+2 ; 0x02 + e52: 5b 81 ldd r21, Y+3 ; 0x03 + e54: 9e 01 movw r18, r28 + e56: 41 15 cp r20, r1 + e58: 51 05 cpc r21, r1 + e5a: f1 f0 breq .+60 ; 0xe98 + e5c: ea 01 movw r28, r20 + e5e: f5 cf rjmp .-22 ; 0xe4a + e60: c2 83 std Z+2, r28 ; 0x02 + e62: d3 83 std Z+3, r29 ; 0x03 + e64: 40 81 ld r20, Z + e66: 51 81 ldd r21, Z+1 ; 0x01 + e68: 84 0f add r24, r20 + e6a: 95 1f adc r25, r21 + e6c: c8 17 cp r28, r24 + e6e: d9 07 cpc r29, r25 + e70: 59 f4 brne .+22 ; 0xe88 + e72: 88 81 ld r24, Y + e74: 99 81 ldd r25, Y+1 ; 0x01 + e76: 84 0f add r24, r20 + e78: 95 1f adc r25, r21 + e7a: 02 96 adiw r24, 0x02 ; 2 + e7c: 80 83 st Z, r24 + e7e: 91 83 std Z+1, r25 ; 0x01 + e80: 8a 81 ldd r24, Y+2 ; 0x02 + e82: 9b 81 ldd r25, Y+3 ; 0x03 + e84: 82 83 std Z+2, r24 ; 0x02 + e86: 93 83 std Z+3, r25 ; 0x03 + e88: 21 15 cp r18, r1 + e8a: 31 05 cpc r19, r1 + e8c: 29 f4 brne .+10 ; 0xe98 + e8e: e0 93 88 3f sts 0x3F88, r30 ; 0x803f88 <__flp> + e92: f0 93 89 3f sts 0x3F89, r31 ; 0x803f89 <__flp+0x1> + e96: 3d c0 rjmp .+122 ; 0xf12 + e98: e9 01 movw r28, r18 + e9a: ea 83 std Y+2, r30 ; 0x02 + e9c: fb 83 std Y+3, r31 ; 0x03 + e9e: 49 91 ld r20, Y+ + ea0: 59 91 ld r21, Y+ + ea2: c4 0f add r28, r20 + ea4: d5 1f adc r29, r21 + ea6: ec 17 cp r30, r28 + ea8: fd 07 cpc r31, r29 + eaa: 61 f4 brne .+24 ; 0xec4 + eac: 80 81 ld r24, Z + eae: 91 81 ldd r25, Z+1 ; 0x01 + eb0: 84 0f add r24, r20 + eb2: 95 1f adc r25, r21 + eb4: 02 96 adiw r24, 0x02 ; 2 + eb6: e9 01 movw r28, r18 + eb8: 88 83 st Y, r24 + eba: 99 83 std Y+1, r25 ; 0x01 + ebc: 82 81 ldd r24, Z+2 ; 0x02 + ebe: 93 81 ldd r25, Z+3 ; 0x03 + ec0: 8a 83 std Y+2, r24 ; 0x02 + ec2: 9b 83 std Y+3, r25 ; 0x03 + ec4: e0 e0 ldi r30, 0x00 ; 0 + ec6: f0 e0 ldi r31, 0x00 ; 0 + ec8: 12 96 adiw r26, 0x02 ; 2 + eca: 8d 91 ld r24, X+ + ecc: 9c 91 ld r25, X + ece: 13 97 sbiw r26, 0x03 ; 3 + ed0: 00 97 sbiw r24, 0x00 ; 0 + ed2: 19 f0 breq .+6 ; 0xeda + ed4: fd 01 movw r30, r26 + ed6: dc 01 movw r26, r24 + ed8: f7 cf rjmp .-18 ; 0xec8 + eda: 8d 91 ld r24, X+ + edc: 9c 91 ld r25, X + ede: 11 97 sbiw r26, 0x01 ; 1 + ee0: 9d 01 movw r18, r26 + ee2: 2e 5f subi r18, 0xFE ; 254 + ee4: 3f 4f sbci r19, 0xFF ; 255 + ee6: 82 0f add r24, r18 + ee8: 93 1f adc r25, r19 + eea: 20 91 86 3f lds r18, 0x3F86 ; 0x803f86 <__brkval> + eee: 30 91 87 3f lds r19, 0x3F87 ; 0x803f87 <__brkval+0x1> + ef2: 28 17 cp r18, r24 + ef4: 39 07 cpc r19, r25 + ef6: 69 f4 brne .+26 ; 0xf12 + ef8: 30 97 sbiw r30, 0x00 ; 0 + efa: 29 f4 brne .+10 ; 0xf06 + efc: 10 92 88 3f sts 0x3F88, r1 ; 0x803f88 <__flp> + f00: 10 92 89 3f sts 0x3F89, r1 ; 0x803f89 <__flp+0x1> + f04: 02 c0 rjmp .+4 ; 0xf0a + f06: 12 82 std Z+2, r1 ; 0x02 + f08: 13 82 std Z+3, r1 ; 0x03 + f0a: a0 93 86 3f sts 0x3F86, r26 ; 0x803f86 <__brkval> + f0e: b0 93 87 3f sts 0x3F87, r27 ; 0x803f87 <__brkval+0x1> + f12: df 91 pop r29 + f14: cf 91 pop r28 + f16: 08 95 ret -00000fa6 : - fa6: 26 2f mov r18, r22 +00000f18 : + f18: fb 01 movw r30, r22 + f1a: dc 01 movw r26, r24 + f1c: 02 c0 rjmp .+4 ; 0xf22 + f1e: 01 90 ld r0, Z+ + f20: 0d 92 st X+, r0 + f22: 41 50 subi r20, 0x01 ; 1 + f24: 50 40 sbci r21, 0x00 ; 0 + f26: d8 f7 brcc .-10 ; 0xf1e + f28: 08 95 ret -00000fa8 : - fa8: af 93 push r26 - faa: bf 93 push r27 - fac: e0 e0 ldi r30, 0x00 ; 0 - fae: f0 e1 ldi r31, 0x10 ; 16 - fb0: 32 81 ldd r19, Z+2 ; 0x02 - fb2: 31 fd sbrc r19, 1 - fb4: fd cf rjmp .-6 ; 0xfb0 - fb6: dc 01 movw r26, r24 - fb8: a0 50 subi r26, 0x00 ; 0 - fba: bc 4e sbci r27, 0xEC ; 236 - fbc: 2c 93 st X, r18 - fbe: 2d e9 ldi r18, 0x9D ; 157 - fc0: 24 bf out 0x34, r18 ; 52 - fc2: 23 e0 ldi r18, 0x03 ; 3 - fc4: 20 83 st Z, r18 - fc6: 01 96 adiw r24, 0x01 ; 1 - fc8: bf 91 pop r27 - fca: af 91 pop r26 - fcc: 08 95 ret +00000f2a : + f2a: 03 d0 rcall .+6 ; 0xf32 + f2c: 80 81 ld r24, Z + f2e: 99 27 eor r25, r25 + f30: 08 95 ret -00000fce <_exit>: - fce: f8 94 cli +00000f32 : + f32: fc 01 movw r30, r24 + f34: e0 50 subi r30, 0x00 ; 0 + f36: fc 4e sbci r31, 0xEC ; 236 + f38: 08 95 ret -00000fd0 <__stop_program>: - fd0: ff cf rjmp .-2 ; 0xfd0 <__stop_program> +00000f3a : + f3a: 26 2f mov r18, r22 + +00000f3c : + f3c: af 93 push r26 + f3e: bf 93 push r27 + f40: e0 e0 ldi r30, 0x00 ; 0 + f42: f0 e1 ldi r31, 0x10 ; 16 + f44: 32 81 ldd r19, Z+2 ; 0x02 + f46: 31 fd sbrc r19, 1 + f48: fd cf rjmp .-6 ; 0xf44 + f4a: dc 01 movw r26, r24 + f4c: a0 50 subi r26, 0x00 ; 0 + f4e: bc 4e sbci r27, 0xEC ; 236 + f50: 2c 93 st X, r18 + f52: 2d e9 ldi r18, 0x9D ; 157 + f54: 24 bf out 0x34, r18 ; 52 + f56: 23 e0 ldi r18, 0x03 ; 3 + f58: 20 83 st Z, r18 + f5a: 01 96 adiw r24, 0x01 ; 1 + f5c: bf 91 pop r27 + f5e: af 91 pop r26 + f60: 08 95 ret + +00000f62 <_exit>: + f62: f8 94 cli + +00000f64 <__stop_program>: + f64: ff cf rjmp .-2 ; 0xf64 <__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 1fa0d75..f975b14 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map @@ -1,45 +1,5 @@ Archive member included to satisfy reference by file (symbol) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) - si5351_driver/si5351_driver.o (__subsf3) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) (__addsf3x) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) - si5351_driver/si5351_driver.o (__divsf3) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3x.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) (__divsf3x) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fixunssfsi.o) - si5351_driver/si5351_driver.o (__fixunssfsi) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floatsisf.o) - si5351_driver/si5351_driver.o (__floatunsisf) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) - si5351_driver/si5351_driver.o (floor) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_inf.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_inf) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mintl.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) (__fp_mintl) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mpack.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) (__fp_mpack) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_nan.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_nan) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscA.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_pscA) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscB.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_pscB) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_round.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) (__fp_round) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_split3.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_split3) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_trunc.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) (__fp_trunc) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_zero.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) (__fp_zero) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) - si5351_driver/si5351_driver.o (__mulsf3) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3x.o) - e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) (__mulsf3x) -e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - si5351_driver/si5351_driver.o (__udivmodsi4) e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o (exit) e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) @@ -58,7 +18,7 @@ e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib Allocating common symbols Common symbol size file -storno_xtal_app 0x22 main.o +storno_xtal_app 0x40 main.o __brkval 0x2 e:/cm_programs/microchip_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 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -73,162 +33,43 @@ Discarded input sections .data 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .bss 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .text.gpio_set_level - 0x00000000 0x28 avr_gpio_driver/avr_gpio.o + 0x00000000 0x34 avr_gpio_driver/avr_gpio.o .text.gpio_init - 0x00000000 0x28 avr_gpio_driver/avr_gpio.o + 0x00000000 0x34 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_write_devAddr - 0x00000000 0x22 avr_i2c_driver/avr_i2c.o .text.i2c_byte_write - 0x00000000 0x3e avr_i2c_driver/avr_i2c.o + 0x00000000 0x4c avr_i2c_driver/avr_i2c.o .text.i2c_byte_read - 0x00000000 0x34 avr_i2c_driver/avr_i2c.o - .text.i2c_write - 0x00000000 0x28 avr_i2c_driver/avr_i2c.o - .text.i2c_IsDeviceReady 0x00000000 0x36 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_send - 0x00000000 0xe avr_uart_driver/avr_uart.o + 0x00000000 0x10 avr_uart_driver/avr_uart.o .text.cm_uart_receive 0x00000000 0x12 avr_uart_driver/avr_uart.o .text.cm_uart_receive_busyWait - 0x00000000 0xe avr_uart_driver/avr_uart.o + 0x00000000 0x10 avr_uart_driver/avr_uart.o .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 0x00000000 0x0 cqm6xx_app.o .data 0x00000000 0x0 cqm6xx_app.o .bss 0x00000000 0x0 cqm6xx_app.o + .text.programPLL_Parameters + 0x00000000 0x5e cqm6xx_app.o .text 0x00000000 0x0 main.o .data 0x00000000 0x0 main.o .bss 0x00000000 0x0 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.cm_setPLLParameters - 0x00000000 0x2f6 si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynth - 0x00000000 0x11c si5351_driver/si5351_driver.o - .text.cm_resetPLLs - 0x00000000 0x50 si5351_driver/si5351_driver.o + 0x00000000 0xf4 si5351_driver/si5351_driver.o .text.cm_si5351_getRevisionNumber 0x00000000 0x68 si5351_driver/si5351_driver.o - .text 0x00000000 0x0 e:/cm_programs/microchip_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 e:/cm_programs/microchip_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 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) - .text.avr-libc.fplib - 0x00000000 0xe e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) - .text.avr-libc.fplib - 0x00000000 0xcc e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3x.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) - .text.avr-libc.fplib - 0x00000000 0x8 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3x.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3x.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3x.o) - .text.avr-libc.fplib - 0x00000000 0xdc e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(divsf3x.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fixunssfsi.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fixunssfsi.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fixunssfsi.o) - .text.avr-libc.fplib - 0x00000000 0x5e e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fixunssfsi.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floatsisf.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floatsisf.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floatsisf.o) - .text.avr-libc.fplib - 0x00000000 0x7a e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floatsisf.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) - .text.avr-libc.fplib - 0x00000000 0x2e e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(floor.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_inf.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_inf.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_inf.o) - .text.avr-libc.fplib - 0x00000000 0xc e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_inf.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mintl.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mintl.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mintl.o) - .text.avr-libc.fplib - 0x00000000 0x36 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mintl.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mpack.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mpack.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mpack.o) - .text.avr-libc.fplib - 0x00000000 0x1c e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_mpack.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_nan.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_nan.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_nan.o) - .text.avr-libc.fplib - 0x00000000 0x6 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_nan.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscA.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscA.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscA.o) - .text.avr-libc.fplib - 0x00000000 0xe e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscA.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscB.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscB.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscB.o) - .text.avr-libc.fplib - 0x00000000 0xe e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_pscB.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_round.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_round.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_round.o) - .text.avr-libc.fplib - 0x00000000 0x22 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_round.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_split3.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_split3.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_split3.o) - .text.avr-libc.fplib - 0x00000000 0x44 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_split3.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_trunc.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_trunc.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_trunc.o) - .text.avr-libc.fplib - 0x00000000 0x30 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_trunc.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_zero.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_zero.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_zero.o) - .text.avr-libc.fplib - 0x00000000 0xe e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(fp_zero.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) - .text.avr-libc.fplib - 0x00000000 0x8 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3x.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3x.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3x.o) - .text.avr-libc.fplib - 0x00000000 0xd2 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(mulsf3x.o) - .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.mul - 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.div - 0x00000000 0x44 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.prologue - 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.builtins - 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.fmul - 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) - .text.libgcc.fixed - 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_udivmodsi4.o) .text 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) .data 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) .bss 0x00000000 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) @@ -424,7 +265,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0xfd2 +.text 0x00000000 0xf66 *(.vectors) .vectors 0x00000000 0x34 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o 0x00000000 __vector_default @@ -511,102 +352,108 @@ END GROUP 0x0000006c . = ALIGN (0x2) *(.text.*) .text.cm_EEPROM_write - 0x0000006c 0x42 avr_eeprom_driver/avr_eeprom_driver.o + 0x0000006c 0x46 avr_eeprom_driver/avr_eeprom_driver.o 0x0000006c cm_EEPROM_write .text.cm_EEPROM_read - 0x000000ae 0x42 avr_eeprom_driver/avr_eeprom_driver.o - 0x000000ae cm_EEPROM_read + 0x000000b2 0x46 avr_eeprom_driver/avr_eeprom_driver.o + 0x000000b2 cm_EEPROM_read .text.gpio_get_level - 0x000000f0 0x20 avr_gpio_driver/avr_gpio.o - 0x000000f0 gpio_get_level - .text.i2c_write.part.0 - 0x00000110 0x7c avr_i2c_driver/avr_i2c.o + 0x000000f8 0x20 avr_gpio_driver/avr_gpio.o + 0x000000f8 gpio_get_level + .text.i2c_write_devAddr + 0x00000118 0x24 avr_i2c_driver/avr_i2c.o + 0x00000118 i2c_write_devAddr + .text.i2c_write + 0x0000013c 0xa4 avr_i2c_driver/avr_i2c.o + 0x0000013c i2c_write .text.i2c_read - 0x0000018c 0x8a avr_i2c_driver/avr_i2c.o - 0x0000018c i2c_read + 0x000001e0 0x98 avr_i2c_driver/avr_i2c.o + 0x000001e0 i2c_read + .text.i2c_IsDeviceReady + 0x00000278 0x3a avr_i2c_driver/avr_i2c.o + 0x00000278 i2c_IsDeviceReady .text.cm_i2c_init - 0x00000216 0x34 avr_i2c_driver/avr_i2c.o - 0x00000216 cm_i2c_init + 0x000002b2 0x34 avr_i2c_driver/avr_i2c.o + 0x000002b2 cm_i2c_init .text.cm_i2c_addDev - 0x0000024a 0x48 avr_i2c_driver/avr_i2c.o - 0x0000024a cm_i2c_addDev + 0x000002e6 0x3c avr_i2c_driver/avr_i2c.o + 0x000002e6 cm_i2c_addDev .text.cm_i2c_transfer - 0x00000292 0x54 avr_i2c_driver/avr_i2c.o - 0x00000292 cm_i2c_transfer + 0x00000322 0x34 avr_i2c_driver/avr_i2c.o + 0x00000322 cm_i2c_transfer .text.__vector_22 - 0x000002e6 0x6a avr_uart_driver/avr_uart.o - 0x000002e6 __vector_22 + 0x00000356 0x6e avr_uart_driver/avr_uart.o + 0x00000356 __vector_22 .text.cm_uart_init - 0x00000350 0x66 avr_uart_driver/avr_uart.o - 0x00000350 cm_uart_init + 0x000003c4 0x60 avr_uart_driver/avr_uart.o + 0x000003c4 cm_uart_init .text.cm_msgSync_Byte_DecodeSC - 0x000003b6 0x64 cm_msg/cm_msg.o - 0x000003b6 cm_msgSync_Byte_DecodeSC + 0x00000424 0x80 cm_msg/cm_msg.o + 0x00000424 cm_msgSync_Byte_DecodeSC .text.cm_msg_DecodeMsg_Byte - 0x0000041a 0xb4 cm_msg/cm_msg.o - 0x0000041a cm_msg_DecodeMsg_Byte + 0x000004a4 0xa8 cm_msg/cm_msg.o + 0x000004a4 cm_msg_DecodeMsg_Byte .text.cm_MsgCompleteEvt_Register - 0x000004ce 0x1c cm_msg/cm_msg.o - 0x000004ce cm_MsgCompleteEvt_Register + 0x0000054c 0x1c cm_msg/cm_msg.o + 0x0000054c cm_MsgCompleteEvt_Register .text.cqm6xx_app_updateOsc - 0x000004ea 0x52 cqm6xx_app.o + 0x00000568 0x4e cqm6xx_app.o .text.cqm_setPLLParam - 0x0000053c 0x78 cqm6xx_app.o - .text.cqm6xx_app_statemachine - 0x000005b4 0xbc cqm6xx_app.o - 0x000005b4 cqm6xx_app_statemachine - .text.programPLL_Parameters - 0x00000670 0x6e cqm6xx_app.o - 0x00000670 programPLL_Parameters + 0x000005b6 0x7a cqm6xx_app.o .text.uart_rx_event - 0x000006de 0x18 cqm6xx_app.o - 0x000006de uart_rx_event + 0x00000630 0x36 cqm6xx_app.o + 0x00000630 uart_rx_event + .text.cqm6xx_app_statemachine + 0x00000666 0xb8 cqm6xx_app.o + 0x00000666 cqm6xx_app_statemachine .text.cqm6xx_app_init - 0x000006f6 0xe2 cqm6xx_app.o - 0x000006f6 cqm6xx_app_init - .text.startup.main - 0x000007d8 0x48 main.o - 0x000007d8 main - .text.writeRegister.isra.1 - 0x00000820 0x88 si5351_driver/si5351_driver.o - .text.cm_setPllParamRaw - 0x000008a8 0xf6 si5351_driver/si5351_driver.o - 0x000008a8 cm_setPllParamRaw + 0x0000071e 0x12a cqm6xx_app.o + 0x0000071e cqm6xx_app_init + .text.main 0x00000848 0x44 main.o + 0x00000848 main + .text.writeRegister + 0x0000088c 0x78 si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynthRaw - 0x0000099e 0x128 si5351_driver/si5351_driver.o - 0x0000099e cm_setOutputMultiSynthRaw + 0x00000904 0xac si5351_driver/si5351_driver.o + 0x00000904 cm_setOutputMultiSynthRaw .text.cm_setOutputEnable - 0x00000ac6 0x5a si5351_driver/si5351_driver.o - 0x00000ac6 cm_setOutputEnable + 0x000009b0 0x4e si5351_driver/si5351_driver.o + 0x000009b0 cm_setOutputEnable .text.cm_setCLKControl - 0x00000b20 0xac si5351_driver/si5351_driver.o - 0x00000b20 cm_setCLKControl + 0x000009fe 0x68 si5351_driver/si5351_driver.o + 0x000009fe cm_setCLKControl .text.cm_setInputSource - 0x00000bcc 0x4a si5351_driver/si5351_driver.o - 0x00000bcc cm_setInputSource + 0x00000a66 0x3e si5351_driver/si5351_driver.o + 0x00000a66 cm_setInputSource + .text.cm_resetPLLs + 0x00000aa4 0x44 si5351_driver/si5351_driver.o + 0x00000aa4 cm_resetPLLs + .text.cm_setPllParamRaw + 0x00000ae8 0x94 si5351_driver/si5351_driver.o + 0x00000ae8 cm_setPllParamRaw .text.cm_si5351_init - 0x00000c16 0x12c si5351_driver/si5351_driver.o - 0x00000c16 cm_si5351_init + 0x00000b7c 0x15a si5351_driver/si5351_driver.o + 0x00000b7c cm_si5351_init .text.avr-libc - 0x00000d42 0x242 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00000d42 malloc - 0x00000e72 free + 0x00000cd6 0x242 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00000cd6 malloc + 0x00000e06 free .text.avr-libc - 0x00000f84 0x12 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) - 0x00000f84 memcpy + 0x00000f18 0x12 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) + 0x00000f18 memcpy .text.avr-libc - 0x00000f96 0x10 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - 0x00000f96 eeprom_read_byte - 0x00000f9e eeprom_mapen + 0x00000f2a 0x10 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x00000f2a eeprom_read_byte + 0x00000f32 eeprom_mapen .text.avr-libc - 0x00000fa6 0x28 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) - 0x00000fa6 eeprom_write_byte - 0x00000fa8 eeprom_write_r18 - 0x00000fce . = ALIGN (0x2) + 0x00000f3a 0x28 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000f3a eeprom_write_byte + 0x00000f3c eeprom_write_r18 + 0x00000f62 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000fce 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) - 0x00000fce _exit - 0x00000fce exit + .fini9 0x00000f62 0x0 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + 0x00000f62 _exit + 0x00000f62 exit *(.fini9) *(.fini8) *(.fini8) @@ -625,16 +472,16 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000fce 0x4 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + .fini0 0x00000f62 0x4 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) *(.fini0) - 0x00000fd2 _etext = . + 0x00000f66 _etext = . .rodata *(.rodata) *(.rodata*) *(.gnu.linkonce.r*) -.data 0x00803f00 0x6 load address 0x00000fd2 +.data 0x00803f00 0x6 load address 0x00000f66 0x00803f00 PROVIDE (__data_start, .) *(.data) .data 0x00803f00 0x6 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) @@ -647,7 +494,7 @@ END GROUP 0x00803f06 _edata = . 0x00803f06 PROVIDE (__data_end, .) -.bss 0x00803f06 0x66 +.bss 0x00803f06 0x84 0x00803f06 PROVIDE (__bss_start, .) *(.bss) *(.bss*) @@ -668,21 +515,21 @@ END GROUP 0x00803f44 0x2 cm_msg/cm_msg.o 0x00803f44 s_msg_cmplete_evt_fpt *(COMMON) - COMMON 0x00803f46 0x22 main.o + COMMON 0x00803f46 0x40 main.o 0x00803f46 storno_xtal_app - COMMON 0x00803f68 0x4 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00803f68 __brkval - 0x00803f6a __flp - 0x00803f6c PROVIDE (__bss_end, .) - 0x00000fd2 __data_load_start = LOADADDR (.data) - 0x00000fd8 __data_load_end = (__data_load_start + SIZEOF (.data)) + COMMON 0x00803f86 0x4 e:/cm_programs/microchip_studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + 0x00803f86 __brkval + 0x00803f88 __flp + 0x00803f8a PROVIDE (__bss_end, .) + 0x00000f66 __data_load_start = LOADADDR (.data) + 0x00000f6c __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00803f6c 0x0 +.noinit 0x00803f8a 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00803f6c _end = . - 0x00803f6c PROVIDE (__heap_start, .) + 0x00803f8a _end = . + 0x00803f8a PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -754,86 +601,86 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x248 +.debug_aranges 0x00000000 0x238 *(.debug_aranges) .debug_aranges 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o .debug_aranges 0x00000028 0x30 avr_gpio_driver/avr_gpio.o .debug_aranges - 0x00000058 0x68 avr_i2c_driver/avr_i2c.o + 0x00000058 0x60 avr_i2c_driver/avr_i2c.o .debug_aranges - 0x000000c0 0x40 avr_uart_driver/avr_uart.o + 0x000000b8 0x40 avr_uart_driver/avr_uart.o .debug_aranges - 0x00000100 0x30 cm_msg/cm_msg.o + 0x000000f8 0x30 cm_msg/cm_msg.o .debug_aranges - 0x00000130 0x48 cqm6xx_app.o + 0x00000128 0x48 cqm6xx_app.o .debug_aranges - 0x00000178 0x20 main.o + 0x00000170 0x20 main.o .debug_aranges - 0x00000198 0x70 si5351_driver/si5351_driver.o + 0x00000190 0x68 si5351_driver/si5351_driver.o .debug_aranges - 0x00000208 0x20 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x000001f8 0x20 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) .debug_aranges - 0x00000228 0x20 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000218 0x20 E:/cm_programs/microchip_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 0x58ba +.debug_info 0x00000000 0x4ff6 *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x11d6 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o .debug_info 0x000011d6 0x183 avr_eeprom_driver/avr_eeprom_driver.o .debug_info 0x00001359 0x320 avr_gpio_driver/avr_gpio.o - .debug_info 0x00001679 0x85f avr_i2c_driver/avr_i2c.o - .debug_info 0x00001ed8 0x519 avr_uart_driver/avr_uart.o - .debug_info 0x000023f1 0x2b8 cm_msg/cm_msg.o - .debug_info 0x000026a9 0x9a4 cqm6xx_app.o - .debug_info 0x0000304d 0xc80 main.o - .debug_info 0x00003ccd 0x1a93 si5351_driver/si5351_driver.o - .debug_info 0x00005760 0xad E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_info 0x0000580d 0xad E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_info 0x00001679 0x6c8 avr_i2c_driver/avr_i2c.o + .debug_info 0x00001d41 0x519 avr_uart_driver/avr_uart.o + .debug_info 0x0000225a 0x2b4 cm_msg/cm_msg.o + .debug_info 0x0000250e 0x9bd cqm6xx_app.o + .debug_info 0x00002ecb 0xb13 main.o + .debug_info 0x000039de 0x14be si5351_driver/si5351_driver.o + .debug_info 0x00004e9c 0xad E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_info 0x00004f49 0xad E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_abbrev 0x00000000 0x1e89 +.debug_abbrev 0x00000000 0x1d79 *(.debug_abbrev) .debug_abbrev 0x00000000 0x10de E:/cm_programs/microchip_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 0x107 avr_gpio_driver/avr_gpio.o - .debug_abbrev 0x00001291 0x256 avr_i2c_driver/avr_i2c.o - .debug_abbrev 0x000014e7 0x1e2 avr_uart_driver/avr_uart.o - .debug_abbrev 0x000016c9 0x15c cm_msg/cm_msg.o - .debug_abbrev 0x00001825 0x1fd cqm6xx_app.o - .debug_abbrev 0x00001a22 0x169 main.o - .debug_abbrev 0x00001b8b 0x2d6 si5351_driver/si5351_driver.o - .debug_abbrev 0x00001e61 0x14 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_abbrev 0x00001e75 0x14 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_abbrev 0x00001291 0x1b6 avr_i2c_driver/avr_i2c.o + .debug_abbrev 0x00001447 0x1e2 avr_uart_driver/avr_uart.o + .debug_abbrev 0x00001629 0x15a cm_msg/cm_msg.o + .debug_abbrev 0x00001783 0x213 cqm6xx_app.o + .debug_abbrev 0x00001996 0x169 main.o + .debug_abbrev 0x00001aff 0x252 si5351_driver/si5351_driver.o + .debug_abbrev 0x00001d51 0x14 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_abbrev 0x00001d65 0x14 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_line 0x00000000 0x1854 +.debug_line 0x00000000 0x1678 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x136 E:/cm_programs/microchip_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 0x1a0 avr_gpio_driver/avr_gpio.o - .debug_line 0x0000043c 0x44e avr_i2c_driver/avr_i2c.o - .debug_line 0x0000088a 0x221 avr_uart_driver/avr_uart.o - .debug_line 0x00000aab 0x1e2 cm_msg/cm_msg.o - .debug_line 0x00000c8d 0x3a7 cqm6xx_app.o - .debug_line 0x00001034 0x110 main.o - .debug_line 0x00001144 0x5d0 si5351_driver/si5351_driver.o - .debug_line 0x00001714 0x7c E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) - .debug_line 0x00001790 0xc4 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .debug_line 0x0000029c 0x18e avr_gpio_driver/avr_gpio.o + .debug_line 0x0000042a 0x441 avr_i2c_driver/avr_i2c.o + .debug_line 0x0000086b 0x223 avr_uart_driver/avr_uart.o + .debug_line 0x00000a8e 0x216 cm_msg/cm_msg.o + .debug_line 0x00000ca4 0x377 cqm6xx_app.o + .debug_line 0x0000101b 0x110 main.o + .debug_line 0x0000112b 0x40d si5351_driver/si5351_driver.o + .debug_line 0x00001538 0x7c E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_line 0x000015b4 0xc4 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_frame 0x00000000 0x62c +.debug_frame 0x00000000 0x5d8 *(.debug_frame) .debug_frame 0x00000000 0x74 avr_eeprom_driver/avr_eeprom_driver.o .debug_frame 0x00000074 0x44 avr_gpio_driver/avr_gpio.o - .debug_frame 0x000000b8 0xbc avr_i2c_driver/avr_i2c.o - .debug_frame 0x00000174 0xcc avr_uart_driver/avr_uart.o - .debug_frame 0x00000240 0x44 cm_msg/cm_msg.o - .debug_frame 0x00000284 0xec cqm6xx_app.o - .debug_frame 0x00000370 0x34 main.o - .debug_frame 0x000003a4 0x288 si5351_driver/si5351_driver.o + .debug_frame 0x000000b8 0x108 avr_i2c_driver/avr_i2c.o + .debug_frame 0x000001c0 0xcc avr_uart_driver/avr_uart.o + .debug_frame 0x0000028c 0x44 cm_msg/cm_msg.o + .debug_frame 0x000002d0 0xec cqm6xx_app.o + .debug_frame 0x000003bc 0x34 main.o + .debug_frame 0x000003f0 0x1e8 si5351_driver/si5351_driver.o -.debug_str 0x00000000 0x22b9 +.debug_str 0x00000000 0x2145 *(.debug_str) .debug_str 0x00000000 0x7a9 E:/cm_programs/microchip_studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o .debug_str 0x000007a9 0x1d2 avr_eeprom_driver/avr_eeprom_driver.o @@ -846,23 +693,23 @@ END GROUP 0x4f1 (size before relaxing) .debug_str 0x00001017 0x23a cm_msg/cm_msg.o 0x3f7 (size before relaxing) - .debug_str 0x00001251 0x3dd cqm6xx_app.o - 0x639 (size before relaxing) - .debug_str 0x0000162e 0x8ff main.o - 0xc25 (size before relaxing) - .debug_str 0x00001f2d 0x38c si5351_driver/si5351_driver.o - 0xff2 (size before relaxing) + .debug_str 0x00001251 0x401 cqm6xx_app.o + 0x664 (size before relaxing) + .debug_str 0x00001652 0x787 main.o + 0xae1 (size before relaxing) + .debug_str 0x00001dd9 0x36c si5351_driver/si5351_driver.o + 0xe51 (size before relaxing) -.debug_loc 0x00000000 0x257b +.debug_loc 0x00000000 0x1f43 *(.debug_loc) - .debug_loc 0x00000000 0x26b avr_eeprom_driver/avr_eeprom_driver.o - .debug_loc 0x0000026b 0x7c avr_gpio_driver/avr_gpio.o - .debug_loc 0x000002e7 0x665 avr_i2c_driver/avr_i2c.o - .debug_loc 0x0000094c 0x16e avr_uart_driver/avr_uart.o - .debug_loc 0x00000aba 0x158 cm_msg/cm_msg.o - .debug_loc 0x00000c12 0x622 cqm6xx_app.o - .debug_loc 0x00001234 0x48 main.o - .debug_loc 0x0000127c 0x12ff si5351_driver/si5351_driver.o + .debug_loc 0x00000000 0x24b avr_eeprom_driver/avr_eeprom_driver.o + .debug_loc 0x0000024b 0xae avr_gpio_driver/avr_gpio.o + .debug_loc 0x000002f9 0x70d avr_i2c_driver/avr_i2c.o + .debug_loc 0x00000a06 0x16e avr_uart_driver/avr_uart.o + .debug_loc 0x00000b74 0x179 cm_msg/cm_msg.o + .debug_loc 0x00000ced 0x4a9 cqm6xx_app.o + .debug_loc 0x00001196 0x47 main.o + .debug_loc 0x000011dd 0xd66 si5351_driver/si5351_driver.o .debug_macinfo *(.debug_macinfo) @@ -882,16 +729,16 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x230 +.debug_ranges 0x00000000 0x1c0 *(.debug_ranges) .debug_ranges 0x00000000 0x18 avr_eeprom_driver/avr_eeprom_driver.o .debug_ranges 0x00000018 0x20 avr_gpio_driver/avr_gpio.o - .debug_ranges 0x00000038 0xd0 avr_i2c_driver/avr_i2c.o - .debug_ranges 0x00000108 0x30 avr_uart_driver/avr_uart.o - .debug_ranges 0x00000138 0x20 cm_msg/cm_msg.o - .debug_ranges 0x00000158 0x50 cqm6xx_app.o - .debug_ranges 0x000001a8 0x10 main.o - .debug_ranges 0x000001b8 0x78 si5351_driver/si5351_driver.o + .debug_ranges 0x00000038 0x50 avr_i2c_driver/avr_i2c.o + .debug_ranges 0x00000088 0x30 avr_uart_driver/avr_uart.o + .debug_ranges 0x000000b8 0x20 cm_msg/cm_msg.o + .debug_ranges 0x000000d8 0x68 cqm6xx_app.o + .debug_ranges 0x00000140 0x10 main.o + .debug_ranges 0x00000150 0x70 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 49f9f94..160bdac 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec @@ -1,257 +1,250 @@ S022000073746F726E6F5F6371703678785F6469676974616C5F7874616C2E737265633F S113000019C033C032C031C030C02FC02EC02DC083 S11300102CC02BC02AC029C028C027C026C025C098 -S113002024C023C022C021C020C01FC05CC11DC089 +S113002024C023C022C021C020C01FC094C11DC051 S11300301CC01BC011241FBECFEFCDBFDFE3DEBF4A -S11300402FE3A6E0BFE301C01D92AC36B207E1F78F -S11300501FE3A0E0BFE3E2EDFFE002C005900D92D4 -S1130060A630B107D9F7B8D3B2C7CACFEF92FF927F -S11300700F931F93CF93DF93442391F0EB018C01F3 -S11300804150E42EF12C8FEFE81AF80AE60EF71E21 -S11300906991C80188D70F5F1F4FCE15DF05C1F7DF -S11300A0DF91CF911F910F91FF90EF900895EF9200 -S11300B0FF920F931F93CF93DF93442391F08C010E -S11300C0EB014150E42EF12C8FEFE81AF80AE60E0A -S11300D0F71EC80160D789930F5F1F4FCE15DF0548 -S11300E0C1F7DF91CF911F910F91FF90EF90089589 -S11300F081110BC08091080490E002C0959587950A -S11301006A95E2F781709927089580E090E0089558 -S113011020911508207CE1F32091150824FD1FC0CF -S1130120FC018191809318088091150886FFFCCF0B -S11301308091150884FD24C0809115088C70A9F461 -S11301408091150884FD05C0415051096109710968 -S113015041F783E08093140880E090E0089583E001 -S1130160809314088FEF9FEF08958091140888609E -S11301708093140881E08093150881E090E008954D -S113018083E08093140881E090E00895B62FA72FB0 -S11301909091150893709130D9F7211531054105D7 -S11301A0510569F181608093170880911508807C5E -S11301B0E1F38091150884FD1CC0BA01A9014150E6 -S11301C0510961097109EB2FFA2F92E0809115080A -S11301D0807CE1F3809118088193411551056105F4 -S11301E0710581F090931408415051096109710916 -S11301F0EDCF83E0809314088FEF9FEF089581E0A3 -S113020090E0089584E08093140883E080931408B8 -S113021080E090E00895E0E0F4E080818B7F8083CB -S11302208081877F8083A0E1B8E08BE016968C9371 -S1130230169781E013968C93139715968C9388E008 -S1130240828B838B80E090E00895FC01842F880FDB -S11302509091150893709130D9F780931708909175 -S1130260150896FFFCCF8091150884FF06C083E033 -S1130270809314088EEF9FEF089583E08093140811 -S11302806083718350E0440F551F428380E090E007 -S113029008950F93009721F1DB01FC010023D1F0B5 -S11302A0013021F080E090E00F91089590911508BD -S11302B093709130D9F7211531054105510591F31A -S11302C0828180931708BA01A901CD0121DF80E062 -S11302D090E0EACF82815ADF80E090E00F910895A8 -S11302E08FEF9FEFE1CF1F920F920FB60F92112461 -S11302F02F933F934F935F936F937F938F939F932A -S1130300AF93BF93EF93FF93CF93DF931F92CDB738 -S1130310DEB7E091063FF091073F809100083097E7 -S1130320A9F009950F90DF91CF91FF91EF91BF91C3 -S1130330AF919F918F917F916F915F914F913F9179 -S11303402F910F900FBE0F901F9018958983EACFBD -S1130350CF93DF931F92CDB7DEB7AC01F8942CE6B0 -S113036035E0209308083093090893E09093070838 -S113037090EC9093060861157105D1F080E88093A4 -S113038005086093063F7093073F8091040887FF38 -S113039004C0809100088983898180E480930104EA -S11303A080E88093020478940F90DF91CF910895B0 -S11303B0452B21F7EACF9091413F923041F160F40F -S11303C09923E1F0913089F48A3529F180E0809312 -S11303D0413F81E090E00895933061F0943029F436 -S11303E01092413F80E090E008951092413F81E0F7 -S11303F090E00895833451F784E0E9CF91E08F349D -S113040009F090E09093413F81E090E008958133BA -S1130410E9F683E0DCCF82E0DACF9091403F93307D -S113042009F44BC068F4992309F440C0913029F4CD -S11304308093083F83E08093403F80E090E00895FC -S1130440943019F19530C9F790913F3FE92FF0E0CE -S1130450E85FF04C838381E0890F80933F3F909164 -S1130460083F891750F3E091443FF091453F6BE01A -S11304707FE38091423F9091433F09951092403F22 -S113048010923F3F80E090E008952091093F309121 -S11304900A3FA901482BCA018093093F90930A3F60 -S11304A085E08093403F80E090E0089584DF892BCD -S11304B039F781E08093403FE3CF1092093F809366 -S11304C00A3F84E08093403F80E090E008950097E5 -S11304D059F06115710541F08093423F9093433F79 -S11304E06093443F7093453F0895CF93DF93FC019D -S11304F0828193810097A9F0309799F0218130810E -S1130500231779F0EF01213079F0223051F441E0E2 -S113051060E0D9D240E061E08A819B81DF91CF9194 -S1130520D2C2DF91CF91089540E060E0CCD241E0A7 -S113053061E08A819B81DF91CF91C5C29F92AF9286 -S1130540BF92CF92DF92EF92FF920F931F93CF93BC -S1130550DF93EC01942EAD84BE84CF84D888E984E3 -S1130560FA840B851C852D813E814F8158858A81B3 -S11305709B819AD1A98CBA8CCB8CDC8CED88FE88BB -S11305800F89188D29893A894B895C89692D8A815B -S11305909B8105D240E0692D8A819B81DF91CF91B7 -S11305A01F910F91FF90EF90DF90CF90BF90AF908D -S11305B09F90B6C20F931F93CF93DF93FC012281C8 -S11305C03381232BA9F0009799F0EC0181818130CC -S11305D009F442C090F0823059F4CE0186DF89815B -S11305E0888363E080E084DD892B11F481E08983D2 -S11305F0DF91CF911F910F91089518828E010C5FA6 -S11306001F4F4EE1B80180E090E051DD60E08A8147 -S11306109B81DCD240E060E0CE0190DF4EE1B80186 -S113062080E290E044DD41E061E0CE0187DF42E01A -S113063061E0CE0183DF40E062E08A819B8170D279 -S113064040E062E08A819B813ED281E08983DF9130 -S1130650CF911F910F910895CE0147DF898188833F -S113066063E080E045DD019719F682E08983C0CF1D -S1130670CF93DF93EC018C81813031F1D0F08E3F48 -S113068069F08F3F39F44EE1BE016C5F7F4F80E229 -S113069090E00DDD1982DF91CF9108954EE1BE0106 -S11306A06C5F7F4F80E090E002DD1982DF91CF9193 -S11306B008954EE1BE016C5F7F4F80E090E0D6DC90 -S11306C01982DF91CF9108954EE1BE016C5F7F4F97 -S11306D080E290E0CBDC1982DF91CF910895DC01B8 -S11306E014962EE1FB0101900D922A95E1F7C0DFEB -S11306F080E090E008950F931F93CF93DF936115EB -S1130700710511F1009701F1EC01198218826A83D5 -S11307107B836FE673E0DBDE6DE072E0CE0118DE12 -S11307208E010C5F1F4F4EE1B80180E090E0BFDC0A -S1130730F8019E012E5D3F4F03C0E217F30749F015 -S1130740919191509E3FC8F7DF91CF911F910F91E6 -S113075008951C8283E49DE0A0E0B0E08D839E8335 -S1130760AF83B88786EF9CE2A0E0B0E089879A87E0 -S1130770AB87BC878BE598E4A0E1B0E08D879E87CA -S1130780AF87B88B82E190E0A0E0B0E0898B9A8BD0 -S1130790AB8BBC8B1D8A1E8A1F8A188E81E090E069 -S11307A0A0E0B0E0898F9A8FAB8FBC8F80E498E78C -S11307B0ADE7B1E08E8F9F8FA8A3B9A34EE1B80136 -S11307C080E090E053DC4EE1B80180E290E0DF91FC -S11307D0CF911F910F914ACCCF93DF93CDB7DEB762 -S11307E0CB55D109CDBFDEBF80E090E014DD40E6FB -S11307F060E070E0CE01875A9F4F27DD49E451E065 -S1130800BE01675A7F4FCE01019605D2BE016F5FCC -S11308107F4F86E49FE36FDF86E49FE3CBDEFCCF6C -S11308204F925F926F927F929F92AF92BF92CF92BC -S1130830DF92EF92FF920F931F93CF93DF93EC011C -S11308406B01942E590127013801C701019679D211 -S1130850F82E192FDC019D92CD01A201B50192D38E -S1130860A30192012F5F3F4F4F4F5F4FD601ED9190 -S1130870FC9101E06F2D712F8881998109958F2D4D -S1130880912FF7D280E090E0DF91CF911F910F91EB -S1130890FF90EF90DF90CF90BF90AF909F907F90AC -S11308A06F905F904F900895AF92BF92CF92DF9276 -S11308B0EF92FF920F931F93CF93DF93EC01662384 -S11308C009F448C0613009F16C0182E0C80ED11C02 -S11308D09E01295A3F4FF90180818062806880839C -S11308E0E12CF12C8701E39441EBB601CE0198DFB2 -S11308F080E090E0DF91CF911F910F91FF90EF90F6 -S1130900DF90CF90BF90AF90089542708E8D8C7F12 -S1130910482B4E8F3F8F28A3D801C70188279927DA -S1130920AF70BB27FAA2EBA28A2F8F7089A3BC8E6B -S1130930AD8E6E01F2E0CF0ED11C18E0E12EF12C49 -S113094000E010E09E01245E3F4F42E2B601CE017A -S113095067DFBECF42708E898C7F482B4E8B3F8BD6 -S1130960288FD801C70188279927AF70BB27FA8E33 -S1130970EB8E8A2F8F70898FBC8AAD8A6E01E2E07C -S1130980CE0ED11C18E0E12EF12C00E010E09E0107 -S11309902C5E3F4F4AE1B601CE0142DF99CFAF92C0 -S11309A0BF92CF92DF92EF92FF920F931F93FC01BD -S11309B0613009F45FC0A8F1623041F5437056A973 -S11309C0507837AB20AFF2AEE3AED601C5012CE0D0 -S11309D0B695A795979587952A95D1F783708295B3 -S11309E0807F0370082B01AFB4AAA5AA452B46ABA0 -S11309F09F012C5C3F4FBF016E5F7F4F18E0E12EDB -S1130A00F12C00E010E04AE3CF010ADF80E090E03F -S1130A101F910F91FF90EF90DF90CF90BF90AF9018 -S1130A200895437056A1507837A320A7F2A6E3A6F1 -S1130A30D601C5011CE0B695A795979587951A959B -S1130A40D1F783708295807F0370802B81A7B4A235 -S1130A50A5A2452B46A39F012C5D3F4FBF016E5FAE -S1130A607F4F18E0E12EF12C00E010E04AE2CF01C4 -S1130A70D7DECCCF437056A5507837A720ABF2AA67 -S1130A80E3AAD601C5016CE0B695A795979587951D -S1130A906A95D1F783708295807F0370802B81AB38 -S1130AA0B4A6A5A6452B46A79F01245D3F4FBF01D1 -S1130AB06E5F7F4F18E0E12EF12C00E010E042E37E -S1130AC0CF01AEDEA3CFEF92FF920F931F9361305D -S1130AD009F1D0F0623029F4FC01278140FB22F9AE -S1130AE027839C01295F3F4FBC016E5F7F4FE12C40 -S1130AF0F12C8701E39443E093DE80E090E01F91C2 -S1130B000F91FF90EF900895FC01278140FB20F99D -S1130B102783E7CFFC01278140FB21F92783E1CF1D -S1130B20EF92FF920F931F936130B9F1E0F06230BE -S1130B3099F4FC01248540FB27F923792366248753 -S1130B409C01245F3F4FBC016E5F7F4FE12CF12C71 -S1130B508701E39442E164DE80E090E01F910F910D -S1130B60FF90EF900895FC01228540FB27F920793E -S1130B702F6422879C01265F3F4FBC016E5F7F4F2D -S1130B80E12CF12C8701E39440E14ADE80E090E01F -S1130B901F910F91FF90EF900895FC01238540FB76 -S1130BA027F92F6623879C01255F3F4FBC016E5FA9 -S1130BB07F4FE12CF12C8701E39441E131DE80E0A9 -S1130BC090E01F910F91FF90EF900895EF92FF92A4 -S1130BD00F931F936623C9F0613021F4FC01218532 -S1130BE0246021879C01275F3F4FBC016E5F7F4FCC -S1130BF0E12CF12C8701E39440EF12DE80E090E0D9 -S1130C001F910F91FF90EF900895FC0121852B7F98 -S1130C10277F2187E7CFAF92BF92CF92DF92EF92E7 -S1130C20FF920F931F93CF93DF931F92CDB7DEB73D -S1130C30009709F483C06115710509F47FC041155B -S1130C40510509F47BC06C01DC016D937C93119711 -S1130C5012964D935C931397FC01349684E5DF015F -S1130C601D928A95E9F78FEF89835601B2E0AB0EA6 -S1130C70B11CE12CF12C8701E3949E012F5F3F4FBF -S1130C8043E0B501C601CCDD80E889839E012F5F76 -S1130C903F4F40E1B501C601C3DD9E012F5F3F4FC9 -S1130CA041E1B501C601BCDD9E012F5F3F4F42E12A -S1130CB0B501C601B5DD9E012F5F3F4F43E1B5018C -S1130CC0C601AEDD9E012F5F3F4F44E1B501C60171 -S1130CD0A7DD9E012F5F3F4F45E1B501C601A0DDB1 -S1130CE09E012F5F3F4F46E1B501C60199DD9E018C -S1130CF02F5F3F4F47E1B501C60192DD80EC898348 -S1130D009E012F5F3F4F47EBB501C60189DD80E4AB -S1130D1089839E012F5F3F4F4BEBB501C60180DDF8 -S1130D2080E090E00F90DF91CF911F910F91FF90A1 -S1130D30EF90DF90CF90BF90AF9008958FEF9FEF2B -S1130D40F1CF0F931F93CF93DF938230910510F46B -S1130D5082E090E0E0916A3FF0916B3F20E030E068 -S1130D60A0E0B0E0309719F14081518102811381F4 -S1130D7048175907C8F08417950769F4109731F09C -S1130D8012960C93129713961C9327C000936A3FF4 -S1130D9010936B3F22C02115310519F042175307F8 -S1130DA018F49A01BD01EF01DF01F801DBCF211531 -S1130DB03105F9F0281B390B2430310580F48A8180 -S1130DC09B816115710521F0FB018283938304C02B -S1130DD080936A3F90936B3FFE01329644C0FE01BC -S1130DE0E20FF31F819391932250310928833983B1 -S1130DF03AC02091683F3091693F232B41F4209100 -S1130E00023F3091033F2093683F3093693F209124 -S1130E10003F3091013F2115310541F42DB73EB714 -S1130E204091043F5091053F241B350BE091683FEE -S1130E30F091693FE217F307A0F42E1B3F0B28172C -S1130E40390778F0AC014E5F5F4F2417350748F03F -S1130E504E0F5F1F4093683F5093693F8193919376 -S1130E6002C0E0E0F0E0CF01DF91CF911F910F913C -S1130E700895CF93DF93009709F481C0FC01329762 -S1130E8012821382A0916A3FB0916B3F109781F454 -S1130E9020813181820F931F2091683F3091693FF7 -S1130EA02817390751F5E093683FF093693F67C00D -S1130EB0ED0120E030E0CE17DF0740F44A815B818A -S1130EC09E0141155105F1F0EA01F5CFC283D383A8 -S1130ED040815181840F951FC817D90759F488811F -S1130EE09981840F951F0296808391838A819B81C7 -S1130EF0828393832115310529F4E0936A3FF093AB -S1130F006B3F3DC0E901EA83FB8349915991C40FCA -S1130F10D51FEC17FD0761F480819181840F951F23 -S1130F200296E90188839983828193818A839B83D2 -S1130F30E0E0F0E012968D919C911397009719F0E0 -S1130F40FD01DC01F7CF8D919C9111979D012E5FDE -S1130F503F4F820F931F2091683F3091693F2817BC -S1130F60390769F4309729F410926A3F10926B3F65 -S1130F7002C012821382A093683FB093693FDF914D -S1130F80CF910895FB01DC0102C001900D92415004 -S1130F905040D8F7089503D0808199270895FC0123 -S1130FA0E050FC4E0895262FAF93BF93E0E0F0E1AC -S1130FB0328131FDFDCFDC01A050BC4E2C932DE9D4 -S1130FC024BF23E020830196BF91AF910895F89444 -S1050FD0FFCF4D -S1090FD200006C3F20004A +S11300402FE3A6E0BFE301C01D92AA38B207E1F78F +S11300501FE3A0E0BFE3E6E6FFE002C005900D92D7 +S1130060A630B107D9F7F0D37CC7CACFEF92FF927D +S11300700F931F93CF93DF934423A1F08B01C82FD9 +S1130080D92F4150E42EF12C8FEFE81AF80AE60E2E +S1130090F71EF80161918F01CE014FD721960E15FD +S11300A01F05B9F7DF91CF911F910F91FF90EF904A +S11300B00895EF92FF920F931F93CF93DF934423FE +S11300C0A1F0C82FD92F8B014150E42EF12C8FEFD2 +S11300D0E81AF80AE60EF71ECE0127D7F801819335 +S11300E08F012196EE15FF05B9F7DF91CF911F918E +S11300F00F91FF90EF90089581110BC08091080437 +S113010090E002C0959587956A95E2F781709927EA +S1130110089580E090E0089580931708E0E1F8E006 +S11301208581807CE9F390911508892F807194FF73 +S113013004C083E08093140881E00895CF92DF9295 +S1130140EF92FF92CF93DF93D62FC72F69017A01E5 +S1130150E0E1F8E0958193709130E1F7C114D104A6 +S1130160E104F10489F1D8DF811131C0AD2FBC2F36 +S1130170E0E1F8E08D918087858186FFFDCF858160 +S113018084FF06C083E08093140881E090E021C0DE +S113019085818C7051F0E0E1F8E08481886084838B +S11301A081E0858381E090E014C0858184FD06C0F0 +S11301B081E0C81AD108E108F108E1F683E08093F0 +S11301C0140880E090E005C08FEF9FEF02C08FEF2E +S11301D09FEFDF91CF91FF90EF90DF90CF90089544 +S11301E0CF92DF92EF92FF92CF93DF93E0E1F8E0BA +S11301F0958193709130E1F7211531054105510541 +S113020011F169017A01C72FD62F816085DF882318 +S113021001F11CC08581807CE9F380858D934115B3 +S113022051056105710549F4E0E1F8E084E0848357 +S113023083E0848380E090E018C0948341505109A6 +S113024061097109E7CF81E090E00FC08FEF9FEF64 +S11302500CC0B701A6014150510961097109AD2FC4 +S1130260BC2FE0E1F8E092E0D5CFDF91CF91FF9091 +S1130270EF90DF90CF900895E0E1F8E095819370DE +S11302809130E1F780931708E0E1F8E0858186FF7B +S1130290FDCF8091150884FF06C083E08093140885 +S11302A081E090E0089583E08093140880E090E07A +S11302B00895E0E0F4E080818B7F80838081877FF4 +S11302C08083A0E1B8E08BE016968C93169781E0CA +S11302D013968C93139715968C9388E0828B838B5B +S11302E080E090E00895EF92FF920F931F93CF93D5 +S11302F08C017B01C42F842F880FBEDF009749F443 +S1130300F801E082F1824C2F50E0440F551F4283E4 +S113031002C08EEF9FEFCF911F910F91FF90EF904E +S113032008950F93009781F0FC01002319F0013028 +S113033031F00DC0828154DF80E090E00AC08281F8 +S1130340FDDE80E090E005C08FEF9FEF02C080E00B +S113035090E00F9108951F920F920FB60F921124FF +S11303602F933F934F935F936F937F938F939F93B9 +S1130370AF93BF93EF93FF93CF93DF931F92CDB7C8 +S1130380DEB7E091063FF091073F309721F080916E +S11303900008099503C08091000889830F90DF91BC +S11303A0CF91FF91EF91BF91AF919F918F917F91E9 +S11303B06F915F914F913F912F910F900FBE0F90CE +S11303C01F901895CF93DF931F92CDB7DEB7AC0182 +S11303D0F894E0E0F8E02CE635E02087318793E0FC +S11303E0978390EC96836115710511F4452B39F0D0 +S11303F080E8809305086093063F7093073F8091DF +S11304000408882324F48091000889838981E0E02A +S1130410F4E080E4818380E8828378940F90DF9114 +S1130420CF9108959091413F9230F1F028F49923AF +S113043041F0913079F031C0933001F1943041F1C1 +S11304402CC091E08F3409F090E09093413F81E01B +S113045090E008958A3511F080E001C082E0809335 +S1130460413F81E090E00895813311F080E001C0C4 +S113047083E08093413F81E090E00895833411F05C +S113048080E001C084E08093413F81E090E00895E2 +S11304901092413F80E090E008951092413F81E046 +S11304A090E008959091403F9330D1F028F499233F +S11304B041F0913079F047C09430D1F0953029F172 +S11304C042C0B0DF892B19F481E08093403F109241 +S11304D03F3F39C08093083F83E08093403F33C05F +S11304E0E8E0FFE31182828384E08093403F2BC0E5 +S11304F0E8E0FFE321813281A901482BCA0181830D +S1130500928385E08093403F1EC090913F3FE92F46 +S1130510F0E0E85FF04C838381E0890F80933F3FF4 +S11305209091083F891778F0E091443FF091453F5E +S11305306BE07FE38091423F9091433F0995109295 +S1130540403F10923F3F80E090E00895009759F0BB +S11305506115710541F08093423F9093433F60934E +S1130560443F7093453F0895CF93DF93FC0182810C +S113057093810097E9F03097D9F0218130812317D6 +S1130580B9F0EF01213019F0223051F011C040E0F0 +S113059060E00ED241E061E08A819B8109D208C00B +S11305A041E060E005D240E061E08A819B8100D2B5 +S11305B0DF91CF9108959F92AF92BF92CF92DF9235 +S11305C0EF92FF920F931F93CF93DF93EC01942E3E +S11305D0AD84BE84CF84D888E984FA840B851C85D5 +S11305E02D813E814F8158858A819B817DD2A98C42 +S11305F0BA8CCB8CDC8CED88FE880F89188D298908 +S11306003A894B895C89692D8A819B817BD140E041 +S1130610692D8A819B81F3D1DF91CF911F910F9135 +S1130620FF90EF90DF90CF90BF90AF909F90089590 +S1130630FB012081222319F0213051F011C0DC018B +S113064014968EE1FB0101900D928A95E1F708C0A2 +S1130650DC0192968EE1FB0101900D928A95E1F7FF +S113066080E090E008950F931F93CF93DF93FC01F4 +S113067022813381232B09F44DC0009709F44AC029 +S1130680EC018181813079F118F08230C1F142C0EE +S113069010828F010C5F1F4F4EE1B80180E090E0A3 +S11306A008DD60E08A819B81DED140E060E0CE011C +S11306B082DF4EE1B80180E290E0FBDC41E061E0E2 +S11306C0CE0179DF42E061E0CE0175DF40E062E017 +S11306D08A819B8194D140E062E08A819B8168D1C8 +S11306E081E0898317C0CF013FDF8981888363E07C +S11306F080E002DD019771F482E089830BC0CF01B1 +S113070033DF8981888363E080E0F6DC892B11F490 +S113071081E08983DF91CF911F910F9108950F9309 +S11307201F93CF93DF936115710509F488C0009777 +S113073009F485C0EC01198218826A837B8368E11D +S113074073E004DF62E572E0CE013CDE8E010E5DF3 +S11307501F4F4EE1B80180E090E0ABDC8AA18150EC +S11307608E3F08F066C06BC0919191509E3F08F493 +S113077066C02E173F07C1F783E49DE0A0E0B0E018 +S11307808D839E83AF83B8878BA39CA3ADA3BEA3A5 +S113079086EF9CE2A0E0B0E089879A87AB87BC87AC +S11307A08FA398A7A9A7BAA78BE598E4A0E1B0E026 +S11307B08D879E87AF87B88B8BA79CA7ADA7BEA755 +S11307C082E190E0A0E0B0E0898B9A8BAB8BBC8B8C +S11307D08FA798ABA9ABBAAB1D8A1E8A1F8A188E45 +S11307E01BAA1CAA1DAA1EAA81E090E0A0E0B0E00A +S11307F0898F9A8FAB8FBC8F8FAB98AFA9AFBAAFED +S113080080E498E7ADE7B1E08E8F9F8FA8A3B9A3EA +S11308108CAF9DAFAEAFBFAFBE016C5F7F4F4EE1FB +S113082080E090E023DC4EE1B80180E290E01EDC41 +S113083006C0FE01B3969E01205C3F4F95CFDF9129 +S1130840CF911F910F910895CF93DF93CDB7DEB76A +S1130850A297CDBFDEBF80E090E02BDD40E660E0F4 +S113086070E0CE0101963FDD41E951E0BE016F5FCA +S11308707F4FCE01049682D1BE016C5F7F4F86E428 +S11308809FE34DDF86E49FE3EEDEFCCF8F929F92E1 +S1130890AF92BF92CF92DF92EF92FF920F931F938A +S11308A0CF93DF93EC01862E5A0168017901C801C8 +S11308B0019611D2982E192FFC018192CF01A60125 +S11308C0B5012AD3A70196012F5F3F4F4F4F5F4FCA +S11308D0EA81FB8101E0692D712F88819981099555 +S11308E0892D912F90D280E090E0DF91CF911F91DC +S11308F00F91FF90EF90DF90CF90BF90AF909F90BB +S11309008F900895AF92BF92CF92DF92EF92FF92B1 +S11309100F931F93FC01437056895078378B208FB7 +S1130920F28EE38ED601C501072E7CE0B695A7951D +S1130930979587957A95D1F7702D83708295807FEE +S11309400370802B818FB48AA58A452B468B613036 +S113095079F018F06230B9F020C0AF014C5E5F4FFF +S113096008E010E020E030E06AE2CF018FDF15C03C +S1130970AF014C5E5F4F08E010E020E030E062E33E +S1130980CF0184DF0AC0AF014C5E5F4F08E010E086 +S113099020E030E06AE3CF0179DF80E090E01F914E +S11309A00F91FF90EF90DF90CF90BF90AF9008959C +S11309B00F931F93613051F018F0623069F011C049 +S11309C0FC01278140FB20F927830BC0FC01278110 +S11309D040FB21F9278305C0FC01278140FB22F954 +S11309E02783AC01495F5F4F01E010E020E030E075 +S11309F063E04CDF80E090E01F910F9108950F9326 +S1130A001F93FC01928540FB97F990799F6492872C +S1130A10613079F018F06230B9F020C0AF01465F60 +S1130A205F4F01E010E020E030E060E1CF012EDF15 +S1130A3015C0AF01465F5F4F01E010E020E030E0F9 +S1130A4061E1CF0123DF0AC0AF01465F5F4F01E0E0 +S1130A5010E020E030E062E1CF0118DF80E090E0B8 +S1130A601F910F9108950F931F93662319F061301E +S1130A7039F00AC0FC0121852B7F277F218704C020 +S1130A80FC01218524602187AC01475F5F4F01E0B1 +S1130A9010E020E030E060EFF9DE80E090E01F91AC +S1130AA00F9108950F931F9331E0611101C030E05D +S1130AB0FC01268D30FB25F9268F31E0411101C060 +S1130AC030E0FC01268D30FB27F9268FAC01425E15 +S1130AD05F4F01E010E020E030E061EBD7DE80E022 +S1130AE090E01F910F910895AF92BF92CF92DF9241 +S1130AF0EF92FF920F931F93CF93DF93EC01427019 +S1130B008E858C7F482B4E873F87288BD801C70161 +S1130B1088279927AF70BB27FA8AEB8A8A2F8F70B0 +S1130B20898BBC86AD86662319F0613061F015C0EF +S1130B3008E010E020E030E0AE01445F5F4F6AE17E +S1130B40CE01A4DE0AC008E010E020E030E0AE01EF +S1130B50445F5F4F62E2CE0199DE41E061E0CE0185 +S1130B60A1DF80E090E0DF91CF911F910F91FF9082 +S1130B70EF90DF90CF90BF90AF900895EF92FF92E7 +S1130B800F931F93CF93DF931F92CDB7DEB70097D8 +S1130B9009F491C06115710509F490C0411551051E +S1130BA009F48FC07C01DC016D937C93119712963C +S1130BB04D935C931397FC0134968BE1DF011D92F6 +S1130BC08A95E9F78FEF898301E010E020E030E0B7 +S1130BD0AE014F5F5F4F63E0C70158DE80E8898351 +S1130BE001E010E020E030E0AE014F5F5F4F60E1D4 +S1130BF0C7014CDE01E010E020E030E0AE014F5FC1 +S1130C005F4F61E1C70142DE01E010E020E030E027 +S1130C10AE014F5F5F4F62E1C70138DE01E010E0D3 +S1130C2020E030E0AE014F5F5F4F63E1C7012EDE8D +S1130C3001E010E020E030E0AE014F5F5F4F64E17F +S1130C40C70124DE01E010E020E030E0AE014F5F98 +S1130C505F4F65E1C7011ADE01E010E020E030E0FB +S1130C60AE014F5F5F4F66E1C70110DE01E010E0A7 +S1130C7020E030E0AE014F5F5F4F67E1C70106DE61 +S1130C8080EC898301E010E020E030E0AE014F5FAA +S1130C905F4F67EBC701FADD80E4898301E010E070 +S1130CA020E030E0AE014F5F5F4F6BEBC701EEDD3C +S1130CB080E090E008C08FEF9FEF05C08FEF9FEFBB +S1130CC002C08FEF9FEF0F90DF91CF911F910F9193 +S1130CD0FF90EF9008950F931F93CF93DF9382308B +S1130CE0910510F482E090E0E091883FF091893F13 +S1130CF020E030E0A0E0B0E0309719F1408151816C +S1130D000281138148175907C8F08417950769F4BD +S1130D10109731F012960C93129713961C9327C0D8 +S1130D200093883F1093893F22C02115310519F0A3 +S1130D304217530718F49A01BD01EF01DF01F801CE +S1130D40DBCF21153105F9F0281B390B243031058F +S1130D5080F48A819B816115710521F0FB018283F6 +S1130D60938304C08093883F9093893FFE01329619 +S1130D7044C0FE01E20FF31F819391932250310985 +S1130D80288339833AC02091863F3091873F232BB3 +S1130D9041F42091023F3091033F2093863F3093EA +S1130DA0873F2091003F3091013F2115310541F4E7 +S1130DB02DB73EB74091043F5091053F241B350B9E +S1130DC0E091863FF091873FE217F307A0F42E1BD2 +S1130DD03F0B2817390778F0AC014E5F5F4F24179B +S1130DE0350748F04E0F5F1F4093863F5093873F6F +S1130DF08193919302C0E0E0F0E0CF01DF91CF91C5 +S1130E001F910F910895CF93DF93009709F481C048 +S1130E10FC01329712821382A091883FB091893FDE +S1130E20109781F420813181820F931F2091863F96 +S1130E303091873F2817390751F5E093863FF093A7 +S1130E40873F67C0ED0120E030E0CE17DF0740F4B4 +S1130E504A815B819E0141155105F1F0EA01F5CF0C +S1130E60C283D38340815181840F951FC817D9074A +S1130E7059F488819981840F951F02968083918308 +S1130E808A819B81828393832115310529F4E09320 +S1130E90883FF093893F3DC0E901EA83FB83499190 +S1130EA05991C40FD51FEC17FD0761F4808191811E +S1130EB0840F951F0296E901888399838281938127 +S1130EC08A839B83E0E0F0E012968D919C911397C6 +S1130ED0009719F0FD01DC01F7CF8D919C911197DA +S1130EE09D012E5F3F4F820F931F2091863F3091CB +S1130EF0873F2817390769F4309729F41092883FFF +S1130F001092893F02C012821382A093863FB0934D +S1130F10873FDF91CF910895FB01DC0102C001906E +S1130F200D9241505040D8F7089503D080819927FD +S1130F300895FC01E050FC4E0895262FAF93BF9313 +S1130F40E0E0F0E1328131FDFDCFDC01A050BC4E88 +S1130F502C932DE924BF23E020830196BF91AF9108 +S1090F600895F894FFCF90 +S1090F6600008A3F200098 S9030000FC diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.c b/storno_cqp6xx_digital_xtal/cqm6xx_app.c index 357a245..55f82ce 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.c +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.c @@ -60,9 +60,9 @@ static void cqm6xx_app_updateOsc(storno_xtal_app_t *inst){ static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351_Outputs output){ - cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_data.MSNx_P1, inst->pll_param_data.MSNx_P2, inst->pll_param_data.MSNx_P3); + cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->plla_param_data.MSNx_P1, inst->plla_param_data.MSNx_P2, inst->plla_param_data.MSNx_P3); //_delay_ms(1); - cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_data.MSx_P1, inst->pll_param_data.MSx_P2, inst->pll_param_data.MSx_P3); + cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->plla_param_data.MSx_P1, inst->plla_param_data.MSx_P2, inst->plla_param_data.MSx_P3); //_delay_ms(1); cm_setCLKControl(inst->si5351_dev,output,SI5351_CLK_POWER_UP); @@ -71,7 +71,7 @@ static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351 static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ // Read settings for PLLA first - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->plla_param_data,sizeof(storno_pll_param_msg)); //_delay_ms(1); cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); //_delay_ms(1); @@ -81,7 +81,7 @@ static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ //_delay_ms(1); - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->plla_param_data,sizeof(storno_pll_param_msg)); //_delay_ms(1); cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); @@ -153,25 +153,25 @@ void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ void programPLL_Parameters(storno_xtal_app_t *inst){ - uint8_t *data_ptr = (void *)&inst->pll_param_data; + //uint8_t *data_ptr = (void *)&inst->plla_param_data; //Burn settings into eeprom here: - switch(inst->pll_param_data.PLL_Ident){ + switch(inst->plla_param_data.header.PLL_Ident){ case MSG_PLLA_PARAM: - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->plla_param_data), sizeof(storno_pll_param_msg)); break; case MSG_PLLB_PARAM: - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pllb_param_data), sizeof(storno_pll_param_msg)); break; case MSG_GET_PLLA_PARAM: - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->plla_param_data,sizeof(storno_pll_param_msg)); break; case MSG_GET_PLLB_PARAM: - cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + cm_EEPROM_read((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pllb_param_data,sizeof(storno_pll_param_msg)); break; default: @@ -180,7 +180,7 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ } - if((inst->pll_param_data.PLL_Ident == MSG_GET_PLLA_PARAM) && (inst->pll_param_data.PLL_Ident == MSG_GET_PLLB_PARAM)){ + /*if((inst->plla_param_data.PLL_Ident == MSG_GET_PLLA_PARAM) && (inst->plla_param_data.PLL_Ident == MSG_GET_PLLB_PARAM)){ cm_uart_send('O'); cm_uart_send('Z'); @@ -192,7 +192,7 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ for(uint8_t idx = 0; idx < sizeof(storno_pll_param_msg);idx++){ cm_uart_send(data_ptr[idx]); } - } + }*/ // Send status back maybe.. @@ -204,28 +204,28 @@ void programPLL_Parameters(storno_xtal_app_t *inst){ static int writeDefaultSettingsEEprom(storno_xtal_app_t *inst){ - inst->pll_param_data.PLL_Ident = 0; - inst->pll_param_data.MSNx_P1 = 3395; - inst->pll_param_data.MSNx_P2 = 11510; - inst->pll_param_data.MSNx_P3 = 1067099; + //inst->pllb_param_data.PLL_Ident = inst->plla_param_data.PLL_Ident = 0; + inst->pllb_param_data.MSNx_P1 = inst->plla_param_data.MSNx_P1 = 3395; + inst->pllb_param_data.MSNx_P2 = inst->plla_param_data.MSNx_P2 = 11510; + inst->pllb_param_data.MSNx_P3 = inst->plla_param_data.MSNx_P3 = 1067099; - inst->pll_param_data.MSx_P1 = 18; - inst->pll_param_data.MSx_P2 = 0; - inst->pll_param_data.MSx_P3 = 1; - inst->pll_param_data.XtalFreq = 25000000; + inst->pllb_param_data.MSx_P1 = inst->plla_param_data.MSx_P1 = 18; + inst->pllb_param_data.MSx_P2 = inst->plla_param_data.MSx_P2 = 0; + inst->pllb_param_data.MSx_P3 = inst->plla_param_data.MSx_P3 = 1; + inst->pllb_param_data.XtalFreq = inst->plla_param_data.XtalFreq = 25000000; - cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + cm_EEPROM_write((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->plla_param_data), sizeof(storno_pll_param_msg)); //_delay_ms(1); - cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pll_param_data), sizeof(storno_pll_param_msg)); + cm_EEPROM_write((uint8_t*)PLLB_SETTINGS_EEPROM_ADDR,(uint8_t*)&(inst->pllb_param_data), sizeof(storno_pll_param_msg)); return 0; } static int isEEPROMValid(storno_xtal_app_t *inst){ - cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pll_param_data,sizeof(storno_pll_param_msg)); + cm_EEPROM_read((uint8_t*)PLLA_SETTINGS_EEPROM_ADDR,(uint8_t *)&inst->pllb_param_data,sizeof(storno_pll_param_msg)); - uint8_t *ptr = (void*)&inst->pll_param_data; + uint8_t *ptr = (void*)&inst->pllb_param_data; for (uint32_t idx = 0; idx < sizeof(storno_pll_param_msg); idx++ ) { @@ -243,10 +243,19 @@ static int isEEPROMValid(storno_xtal_app_t *inst){ int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ + storno_pll_param_msg_header *msg = rxData; - memcpy(&inst->pll_param_data,rxData,sizeof(storno_pll_param_msg)); - - programPLL_Parameters(inst); + switch (msg->PLL_Ident){ + + case MSG_PLLA_PARAM: + memcpy(&inst->plla_param_data,rxData,sizeof(storno_pll_param_msg)); + break; + + case MSG_PLLB_PARAM: + memcpy(&inst->pllb_param_data,rxData,sizeof(storno_pll_param_msg)); + break; + + } return 0; diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.h b/storno_cqp6xx_digital_xtal/cqm6xx_app.h index ef8b08e..eee3a76 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.h +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.h @@ -19,10 +19,16 @@ enum{ MSG_GET_PLLB_PARAM = 255, }; + + typedef struct { + + uint8_t PLL_Ident; + + }__attribute__((packed))storno_pll_param_msg_header; typedef struct { - uint8_t PLL_Ident; + storno_pll_param_msg_header header; uint32_t MSNx_P1; uint32_t MSNx_P2; @@ -54,7 +60,8 @@ typedef struct { storno_app_states state_next; void *si5351_dev; - storno_pll_param_msg pll_param_data; + storno_pll_param_msg plla_param_data; + storno_pll_param_msg pllb_param_data; diff --git a/storno_cqp6xx_digital_xtal/si5351_driver b/storno_cqp6xx_digital_xtal/si5351_driver index 78e4f5f..a01bd85 160000 --- a/storno_cqp6xx_digital_xtal/si5351_driver +++ b/storno_cqp6xx_digital_xtal/si5351_driver @@ -1 +1 @@ -Subproject commit 78e4f5f73e53641c116b802b28a80ddd2da17ca3 +Subproject commit a01bd85b6fc4faee724427b3d27d1ffcdfa63d23 diff --git a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj index c629999..276f558 100644 --- a/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj +++ b/storno_cqp6xx_digital_xtal/storno_cqp6xx_digital_xtal.cproj @@ -121,7 +121,7 @@ %24(PackRepoDir)\atmel\ATtiny_DFP\1.10.348\include\ - Optimize more (-O2) + Optimize (-O1) True True Default (-g2) @@ -189,10 +189,10 @@ compile - + compile - + compile @@ -206,7 +206,6 @@ -