From 56e38058a936623a81c6034051fb660e33ede5bb Mon Sep 17 00:00:00 2001 From: "Christian L. V. Madsen" Date: Sat, 23 Nov 2024 19:19:05 +0100 Subject: [PATCH] commit some uart and eeprom work has been done --- storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o | Bin 12576 -> 12364 bytes storno_cqp6xx_digital_xtal/Debug/main.d | 5 +- storno_cqp6xx_digital_xtal/Debug/main.o | Bin 12920 -> 7124 bytes .../Debug/si5351_driver/si5351_driver.o | Bin 35728 -> 38348 bytes .../Debug/storno_cqp6xx_digital_xtal.elf | Bin 56628 -> 24880 bytes .../Debug/storno_cqp6xx_digital_xtal.hex | 175 +- .../Debug/storno_cqp6xx_digital_xtal.lss | 1894 ++--------------- .../Debug/storno_cqp6xx_digital_xtal.map | 436 ++-- .../Debug/storno_cqp6xx_digital_xtal.srec | 175 +- storno_cqp6xx_digital_xtal/avr_eeprom_driver | 2 +- storno_cqp6xx_digital_xtal/avr_uart_driver | 2 +- storno_cqp6xx_digital_xtal/cm_msg | 2 +- storno_cqp6xx_digital_xtal/cqm6xx_app.c | 10 +- storno_cqp6xx_digital_xtal/main.c | 47 +- storno_cqp6xx_digital_xtal/si5351_driver | 2 +- 15 files changed, 549 insertions(+), 2201 deletions(-) diff --git a/storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o b/storno_cqp6xx_digital_xtal/Debug/cqm6xx_app.o index 0105b50753d573dd61499a4a7b86619da21af3eb..4074638480f60d8cb0c53bbbf952e22c33c3e802 100644 GIT binary patch literal 12364 zcmd^_dvIJ=eaFw;U9DwFmMzIIS$=H%c4BQLzhWFawq(f3PoO@h0c;2|Vh>@z*CNopa7rrFKjnnS6Ns_s5}`m$ghrL}qKYOrg0WuX*Xwi;tGp z%KDVlc@#ealPr^ip7j7}b(RIkv76H~~&mYqK7S-tMmobYT%=G;>To9CR% zZ#nfR=AXFh8n4 z$(-`}rZMFUlri$uPV{Sumr<@WeC1xsD_iCZIy4oS`6;}0j`wy{d3|6GU7C&z6`0qA zw{MxG>JRCZzQe|GM!Ani|Qj5IQ3@^3VOVxO(C0=Td=WJjZT@ZIxZa~epJD$_} zT_*aCGoe!+4BUD=?`1QK<-J_zrNqk(_iLYhUfmm6$hRz@Dtv6D?ykU=?Lg0ivOO50 zU*v&b`w{TG(eI#sPcwxNyirmZ)#wiN#>lH8IDZ-jUKcdA1{a6&BAwxQo=ux|3*;5P zX1pt%Ry3pqR7I1XLiyYdt?7fhMi zRB$fP;o#teGc@6-Ia<`9tq>WU$KZ`uw80de%ch#(th^7#=jB8+-^lA95J~;RdF|qY ztH1m!77YLRS1j1H5{-Fpt}b9ZJ`c~gqew$=c*2QKIKD@e(ixYqvJWxC8FZQ&oB@nd zUY-(pGv&<%`9rpTvs%asXoohmE=GEhH-eGkA=m~jZwMl02=eZIe=7Gl-0w`4@ncw; zsp}l3--FJ2&p#GeO}W)j?H~&@IC*8Y*mLlF-a$Pj?}C;$pU%@kF=ATtLSC6ocGzaG zH7}UfNRo4rK{xJaQ2QopFSyho6SWN9B4`JvVUM;{lv+~wWR~?fp+YLS(n^%iw-VFp zlvCrZsIIH@S2t822-Y~=&MbZ*T_l+A<+S{!gH zkwpau3e#3Ydm-fIb&wnB^ci^@n=7!nuqe${&T&>%?X6?Msxn2%jIiU?wyG+m4OU|d z&R0KkgO!*SR@igT@1G+tXU;zR4|!cL)NiRx@i6|T-H*whw- zVsY*wr&-r=xblPA&v|94xsJx?SE5I2G4S;pM6%%Y2?w%f-Oh%GPdLg~@n|cIFEkmL z{~0+x<%pGw|)psT%9j!$%O#{UB= zzmd-WjZ_j;@&%Wn^r=(%S;aXqm>6R~V)_1NZ3Yx*L&kyxTHn;RX7 zr}}OSH}&OGsYG-*5>NI;j%GINSL0A}w6RFu7f(hLqXV(N(Of+7e`8wF>szz&jq5iy zy91f{(OBkIsnyGZd+ty=o|4Rha5R$16$zsw?nrh>spvf;o5sf6NID&k@~^#tSR!&P zJj^l6<_7Rr2N+#wsSQ)D$Oouka82DvVNYa=l_G`V^lAg^BX60W5dK=n&!f8Iccx=p z{0~eo$J;+Wpd~)#Ooti$-;aKMwFVQmgHuNuuqjOH~@vx1t%wN6?Uvhu+6YP^HAgf_7qWtzP<1t`H`+X?y= zZ3Us}xlB#1Q#m^{X0V(1)-3|l8`G;^E;`3Eu&-yg+ttz0 z>UOnsx9n3xv7CFLrMuT{KN?Hs+`)8CxtJv!y=*MkIhsq4=Gv2y{zMG&{?T|M7f-qz zXgz7%=&>l)5VCS3X-trNW4UALnA+X7x6|$F?Cxz*J-waX`#as1t}eIxu)D9bt=*be zZaf*!v8sL9p`EFbbRw3EwI9v7-Lau~HW$kW^AoVrl*LfPi@_$`S!5822!J(bj5?xzF&_?v9PH`sktP* zt|Yy_B)y>|y|E;{sU&@y?zPS6G!FIN0S?#h{Rcuj-}k=I#_)!4Q>bwy**KVpWQVsk zlT(e^yW{D`{?Q?%MxvwJuztoyVndPjNN0yrnOtKul1OAjjYI1~jh)cKHoOfV8yIXH zG`-Tu9<|f`@!ViMmKZ>}L1;yD@l>)g8`Cjmm?jZBosLBBhGh;Ya=m(E$x%!_nL3;` zdX`e6Cu{1%T-x#I-C1`asxo73Fj<&(947tc;U<#6yiKU~Eqz$CSP6H*k8IyaJeoH@r1_@9$D-( zIe+s2<`Jf)+W(lZr8@99zL$0$k2Q9lZHGr4TX$`VE|NuoXBQI!>dFnnjQ#vDTfr{} zFC+3pgZDyr7y-)918=j^A#mZ`e&xm*q`muIDqXqJ%qSnO++f*4t)>11)cZx3{paH; z!3ut!46NYC>EN)W*`Gdhb0#u;HZ5(o*Zxb3X}f2c*0*5!GJZYE`6Tl7l~-QiSNNON z3V!c?DlhRX_EsVIRed1=@~eiD^a3>^5_(pP_TFb{aL)a%q&Y`w(Y~ij@}HA5d#V=g z{g$LTPioQL*Cfq|_O6wrs|thTwZ8E2zjT_{D3wM`J)bc3$cqu{xend~=9Q7rUoJXJ z5jRo32rq=qcvyB5;x;@+zKbmO_lr&k;yW#!evuzRoV4Wc@)?t(3;BqY4=?(l{Rh)u z?LT-6nER0*+=Vz~G5x1M3}HO}B^uQ_M6^kLw#Ag)N)~)Df}bEFAKko_+NzQ!RCJmF9u%|UI8vc z9rXVnAX_N>4&tT4Dacm~{{=WKyai?129}+Tw(k+<-SI5R^buE95a^vIP8rIFNMx=;RE2`7H&fSoD<#x`DcZn zM$CtH)*}8>vg|+43on5F--u2V>bgkQKc^`5uOj~xmg|a^t9hUW@Us!e+ z@^Uijy&b+a2(youl4UKg6g~?5o5?792F(6tS=ziq!xD5Tve)~JFx2tNz1wiwC$8iy&(92!1c`;7S+BeVG-i!tQ)q`{`cvW6h`Em#d5tjT+*6Ev zjV0$kLisxA@LvbWTfy8rjQo%#=RRWODND}1gL2OQj|z8#xnCIh82QgFIoGyX`!&KGFa3?fWFzx@Kpl?PDvSA#3Y2rN;9g+t z>=5R7@qZO4CwB>Re)U;=M3{ECZq2$rDvU_+H+{;{uq5t%a z@h3Sy;RC}|3ep8)UJ6N&1{+KaH|W#LiQ~+^@bM%&PxHcrKX#EIGJK=_iZJC|ca*cAIC;t3i*OsSnSD?zybjzT%<yU@8r&(&G3qCy-{>dLsAT$?6lQyK!W_eUg+t)u z!b`y)6J81C8l;_@!RLfI@179e0{)yZ&j8N|w}QC_S+)cG72z)Mi^2!N-zLlWay^pi z|BuKRM9$gE!W`dg!Z53@3v;Y}ICoK>W5M$+nPXio%yHr043x87^M%)v@i^=p1UsQZb(P0@gZ=0wi^JFvSqQfyZ>v{)uFpeCfUdl!1FqsWO;24`Vo(3D899jBj zj5^Xk$1R-)$?OD#Q+V=gKb$=_l8f}KFfM_;c-T;mKTCvpW30mc*{lj@@S9+m(s1#m zk0&est-?~aE@%qBQ%s#-bo=9(o%+&e>f-wT$IBYv%`kpT8cd-Hnj`)F8T`0nXD3q8 zqBMS?Neo2yguDa)bP}NB8%8dGW>&TZNw2)aUxK1M?Ve z!b8T?)ZrKD@qAj2=a=auiUX;)Qc8*96xL<$S8}wBxbu?H4&B z9gMvXA!X~`i8SZF2}bXO5ZLw3N4;N$jP>$NVd}jfY}~+7<0vYRNznOZ!2R3DZ>M#;> ztcpz@&%U<3@4(*E(4#$UBYAtTgH0Kr8bPP=jA(+vcOWp#ybg56bTfIZytl!2y&t(r zsqaCL^>Pa`?U)8*w!H&rYFmF%aSs`u0tFX6diuUqv0NcOg_%NKsH-+|iJ!t&fBK|dr!MAZC^j&63 zpnrVYOZ2`uTPdzV6O5kzyTS+&Ux(g#D{V~gM*-Wv+4!M`bBO+NPci;+Y^>&~x1e`~ nl}Rwj7|qLvv*8T*o3u&ndaR~#9H&eNyAEj^68ihy zckb@pHJ*5qY5wUQ-n+kh?(d#^?z!il_x6b+9i6v0j-yO*RIe(ul=`nVO1+NG4VuuX zmZ>G`va@`=b$rDd=i-Sq&fDWt6_4;bitGI3tCJTT_2T#(_3Vl9)8i-VoQvbl&cz8_ z>e=z1OinqcoVS(QHg$07f$>j`gPE7LO@&2fGuy7h+?Hp)dh-0q(pfp5k{OR58=pFH zOg;Nu*mPq2__4^;(JA#JZJ4-<+*{3wW1iN_&YX#gM=m>q$8yKii$|v(mi2|_-BpGe zPB|AZI1Ll^6L%c@lVb;`QqapgXY$6cELX~>y%x|8tuihyt$hxdO8NEep6gNhoC-Dq zzOq;%t9-s`Z21CZtUTJpfR=b26}rP$;kCT6WxjHUssghf#a;J!cSlt;1m@AC>F7{_ zx@O#cE2P!%0o`)Ez6D;Z%xf+5TGPGOVy`vRYc26wbG+74uQkszHn4&wh&ih^U}oDK z&uD!w6MoYya4O0J>yGBFY~irHmFvBhSh?XIZL`mtdm{(=Rs_@x9~Y_J71(++pl3nZ zE^N`eS>V@p1Uzf>y7VETj#niYh%q#r#f9=*bg?N#K&JXp5Rjs_*lT{|U&ey$0bd4WBH)FL6_5 zbBOXig~}HQ5YOSwsde;}#3=rc2Yt@>p`?Z_r0m}u#ClAk8_#^iaBbDNB**oe|EFz0UyBtFQ~q3RwPXx02Vzv7j72k|4(Nm@1S$} z`N?(YMsNJNVs+dSCe*r^lHMy}p&IvhpSf;fVRlU%j>R`pVrncL9;( z`A{|s6gV;9RHBOn2ZU*jU@wBaq84%^ojx29eaCm~bF#(Z)ACFyScQjFa23xCN#IQ4n$p z78cF4=p8-A)Ww#m(6+=TmaJ+i9dJX{{oAUw7Z5SQVhOe(U&@u28;qb_B_^HZWIjND z-+rUluaLa$h8MArum=aFxV&@P_@pyhFe{*No*pkAgP>E)Cr59-n!ImccSorlPvi2L z{|~hMft+6)N$<8rUdA$8LDtYaw%`wBaIq;qbvz%T#b&j`TCb}RsNVBMsY9}o{Zb<< z=%U|wfYwU;_o<_tLhmFzl?Z5olt09NJX~xr_#ycba*s46pKeQ!N##I zn^yOSv!l^?egv=P#ZYybtDYvx7^d6O+piWaujn+;gMDVOPh z@YgtgzTrE5XFB%9e`I%n4ZaGYEDt_O!A8-Jmon48hWKz{1n8VvwT`(fU_1;&T0xLVh8EG>qP_8VB=e_ z7yk1U?CIUSi(Fr{ha)&i=*o_!5GHp=vxierwX=J7m)qUd)7PeY`?`AecDZfc z-EPkTcTZP)hZS9JED_6csy&(E9m&yDJerMm9Ll;q(cxGo8%?uI$Fk;Gs`^A#CYwwr zl5Q#IOjgB{iQ%BW@dtgOl}lt|!-?o%kYY(LaIV`;W3ZTX#v`*klMQF1ZX!AcC}%o) zNQocealO#=m>cCrz-YZqZL&=Tv)x>35Q@4o5tW}E*(weF+81NlaGVF+w%+aP-Jx=@taUxOdwRuZsOU0Ot*U)%KXw4?x+5CNX8K2Ck#sUL5=*&Wwk-6> z+>yIdOfQ46;TWx;DM+l^tgCgkM+b7lDwgTZrgM?({%|}tSQIb4eQsZuyS=Ncud}PI zy`#sAtIm%79i47ZM{h@;(o5Tk5Jq-00c1t8jzf=6w%)hA)3_&t$s8lQc;`Fz>WwcJ zHkXiEO4{p7+N~w+4JGZ3CGAZm?ag{?wqR!%PrC;h6Fc|r3+}k?y5PpphEQ{`X*AI^ z6c1-cZfqe=Hf8RNrJCSTv_>Pj8*xa-Mx(>wRZyfV@wIC zH?J7X+RtaSRs8Y}W<-84INwc1fbn&}H(Ko=aN*~`n^#t&?R_&Q>CG!Gtn%f}D;!&x zwbY(~x>dOJpN}sLR`KH{;efR1Paj_ztm0St^J!k^JYU9?h>7mGBp;QA@%YJ1T9)NDbC^TH37Ge@5E$ zL=D#aEopP#YOvn#NSkp|gY~{FZB`tAsia+1*c{z&9U8p)xo&T_yUTSw(CLAmj-49p z*wL+PJks5CbXeoNqv@nHiu1K~77GuitGql|JbmoVnJqcmSAT{UKN>An@8SIcPX@O= z8c7aD@siFF~zi9e5Wo zBf{`k3THX$X38a8wupQa>UK+h3$f_mE1XW$w_BV6ksm~zu;lNs8Q+n+(a#w10n-L; zKQQgp_5*JPW|aGdAG9#-r#&noTz)PVWj!wHq<*f&jJ<(a_9;BNqj1V4_kTm$)svG!epKMK6x$Wadpz87^` zFmu)Yf`5eiF~O^`Ek z0KYAK>iLbxPeDEnc5p1uS*74c;045(i*drQE{3zh;;a?UYv61Y{A=KC!eRbs7tEZ| zE1X)`aKPg9Tb!tH)_{``%=5zirVYEG=Oco9fFBgjZQz`=IFDGI$AohiIA;X&8`9T= z(+@pQ3myXgws0N?=kF}ecP-8jgmV_0DZ%G~Ul&dV^zgNaHq#IFf^PwC7R-5f2~Gij zh!`>X*Qle!3_O&W;Qhd(#MqbDFxQ8P!RMZii=451pYUnJS7-*0wX{9a<%e=F=fAo3?L=YYsl zkPj0>5A8o9oC)Cjh-&~)9uUl&{V`(b`~=3H7CwFQ8Iki0oe??n(pN>!{QNXAbTa;b zKrHsZB69le7sOcawZQ*vVLzNf`PX6pGz;?&M3jFV{J9ohEchwNmsuFi{Mm;pjp=q? z%n7Xdcq8WWgBD&XnElNb-XNII|7{j-7tBXqw}txzGv|yDBW_vr^9vZRQaN0d6CV~# zdnYV>pJ3)6<`<*qQ-b-)knh5j6Ms=~7WG*RKO>lWUJ%SZ`Uk;{s9&?>Z&-5XAnGTd z--n6GXWk)R4_qghd5O8k$k$nN<{cy7X~~&uDBp##9~9gJ%=}{HIZMu5W8@E6a^@Gx znFl^AcnFv|#mJwrH&%ioH8G4MZG_(y_QLH?SB-w;ea%p=C0D}on6uAisS zPdtmy1z_s0v+zQ})Pt0O|IC3KiaGnlb8!W6_IWmWZW#kC)Eflm842PtF|d+t*;B^7 z$>E$M2*sR7=L*Sn8z=|nUTnc-)^Y>ou$kjn%=-y_N=$nyh{c{N!L&!)FR?`XO^j*# z*@;5?X&dbc5{o^wpP2S&`(=-42W?~h3C1vNV0oTcY}iWw%e-GCmbsoI7X4-)Ira&R zT`GD$FPOgtza*Gbe@*awVE&H<^0^MaixSfh{7*|uVFTCleZlm{OM>Zxe-q5Sg#U%7 z`CQ*G1g{7FjbQpd0Gp}v7T}qJcLC2A+ylH+a6d55Ciz3aA;Br&^@6!C9mMbt?R>vr z+WAL;P(OFEtoMiE_f^O{eo`-en{|k;M0OTf%zMQ zwsiyZJ(+kv@YBSykKYhX`}x~xsqE?Z1XIp4OF3in6~T<9i^SMa#_uJ;-0RDNIfW1B zksSO}6@s~U)q=V2{9Qo~_mS_(#Pq`w!HiEG=X55Dj&q5zAll|E>(~|!$CwyyCI|b- z{c5LNINW;^+w_+?;|DFyAhGyrgdAY{BxP~3#NxLxa)9Zdqm;{B_Y%_yD93T-^FSzb zcr+UxP$7H-_UaLXvi#deh+m9VXdshOp)~&d7@{;({87p3us-$_zAs(9zv#P?r}pZf zldR#zUzV&6YhL}4$?F>AUo7xftDz*;p>cR%AdNrc*xm7Dq^OO*1to^@M>3mp6;Yg@ zuth68rb3bA=qNw?+vA4#cO~ug_jp?f9#V$hV-DfDvkUuJmf<2si0blgylc^0f$O*N zTEHotS3*bYH}f*C1Gu(nDdHLL#XK8JaZ%2z3fHZ;Y<+vtX8fCC^mRaB>+9$HH)Pbu zI5+z40Jil#k2Z6ODMlZiZR?wjMLY=^_0bPTAJ2fTkKYqGpD9M)7a*{CK{R-_OfkIA zL152&4)f9voR_J>%=;X$t&iVh=u=aSzHdQb>w6yh4njtKNF{lFuK=4dfcke{qqPvz z_d^-8jU<$n2()Lxqdq=fjeYvPn*=Enc+q>+D1pqt%N8azJYA_K6J%E3FM;iK{A3yS z0Rqm;bY$k`HzlJRV)ZdNZx?|S(>D#k)_36=r9KS~_07d)^aV@w{WJ7!5nZf|KK{>6 zTi@|jNYImhh_ZyO?Ly6vI0pJR{!*-f7c7ZB+MyXWMsfwNi`?+Q;Xbv5$`vYkBHnybMG+ lnG^$AV|n@VL(JO^K@bw74@=Yk-QCvL2xl}HCFnQse*xR>1Wo_| diff --git a/storno_cqp6xx_digital_xtal/Debug/main.d b/storno_cqp6xx_digital_xtal/Debug/main.d index 2f74847..a63f4ec 100644 --- a/storno_cqp6xx_digital_xtal/Debug/main.d +++ b/storno_cqp6xx_digital_xtal/Debug/main.d @@ -21,7 +21,8 @@ main.d main.o: .././main.c .././avr_global_config.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ .././avr_i2c_driver/avr_i2c.h .././avr_i2c_driver/../avr_global_config.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \ - .././si5351_driver/include/si5351_driver.h .././cqm6xx_app.h + .././si5351_driver/include/si5351_driver.h .././cqm6xx_app.h \ + .././avr_eeprom_driver/avr_eeprom_driver.h .././avr_global_config.h: @@ -74,3 +75,5 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\ .././si5351_driver/include/si5351_driver.h: .././cqm6xx_app.h: + +.././avr_eeprom_driver/avr_eeprom_driver.h: diff --git a/storno_cqp6xx_digital_xtal/Debug/main.o b/storno_cqp6xx_digital_xtal/Debug/main.o index 6c4aa74639e46efde73cca2da36b8935dd55edfc..300cb60bb31f495a913afe635553024f961ffeaf 100644 GIT binary patch literal 7124 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 literal 35728 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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 36915f546ae5d268af77581b08f2d79e22cac1c5..ba19f0d5361ecfec8d1b2226f1bc882c5b0eb8a0 100644 GIT binary patch delta 9201 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 V>P2zb@-{r}IMYohL!OcM{{X{v#pVD2 diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex index e911fc9..7baffb7 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.hex @@ -1,154 +1,29 @@ :1000000019C033C032C031C030C02FC02EC02DC087 :100010002CC02BC02AC029C028C027C026C025C09C -:1000200024C023C022C021C020C01FC066C11DC083 +:1000200024C023C022C021C020C01FC042C01DC0A8 :100030001CC01BC011241FBECFEFCDBFDFE3DEBF4E -:100040002FE3A6E0BFE301C01D92A035B207E1F7A0 -:100050001FE3A0E0BFE3E9E6F9E002C005900D92DE -:10006000A630B107D9F74DD27BC4CACFE0E1F8E0A2 -:1000700084818860848381E0858308958093170854 -:1000800080911508807CE1F390911508892F80718B -:1000900094FF04C083E08093140881E00895CF9218 -:1000A000DF92EF92FF92CF93DF93EB0169017A0128 -:1000B000232B242B252B81F1E1DF811130C09E0100 -:1000C0002F5F3F4F8881809318088091150886FF25 -:1000D000FCCF8091150884FF06C083E0809314084C -:1000E00081E090E01EC0809115088C7021F0BEDF89 -:1000F00081E090E016C08091150884FD07C081E082 -:10010000C81AD108E108F108E901C9F683E0809333 -:10011000140880E090E005C08FEF9FEF02C08FEFE2 -:100120009FEFDF91CF91FF90EF90DF90CF900895F8 -:10013000CF92DF92EF92FF92CF93DF93EB016901B1 -:100140007A01232B242B252B69F1816097DF8823EB -:10015000C9F02BC080911508807CE1F3CE01019697 -:10016000209118082883411551056105710521F476 -:1001700024E02093140803C022E0209314086A01AD -:100180007B01EC01B701A6014150510961097109D8 -:10019000CD28CE28CF28F1F683E08093140880E0A4 -:1001A00090E005C081E090E002C08FEF9FEFDF910B -:1001B000CF91FF90EF90DF90CF9008958093170834 -:1001C0008091150886FFFCCF8091150884FF06C03A -:1001D00083E08093140881E090E0089583E08093A9 -:1001E000140880E090E00895E0E0F4E080818B7FE7 -:1001F00080838081877F8083A0E1B8E08BE01696C2 -:100200008C93169781E013968C93139715968C9385 -:1002100088E0828B838B80E090E00895EF92FF92DC -:100220000F931F93CF938C017B01C42F842F880FD2 -:10023000C5DF009749F4F801E082F1824C2F50E0CD -:10024000440F551F428302C08EEF9FEFCF911F9145 -:100250000F91FF90EF9008950F93009781F0FC01AC -:10026000002319F0013031F00DC0828161DF80E0A0 -:1002700090E00AC0828113DF80E090E005C08FEF3C -:100280009FEF02C080E090E00F910895CF93DF933D -:100290001F92CDB7DEB7AC01F894E0E0F8E02CE6B1 -:1002A00035E02087318793E0978390EC9683611542 -:1002B000710511F4452B39F080E8809305086093AF -:1002C000063F7093073F80910408882324F48091AF -:1002D000000889838981E0E0F4E080E4818380E89C -:1002E000828378940F90DF91CF91089590910408C4 -:1002F00095FFFCCF8093020808951F920F920FB6CE -:100300000F9211242F933F934F935F936F937F939B -:100310008F939F93AF93BF93EF93FF93CF93DF930D -:100320001F92CDB7DEB7E091063FF091073F3097BF -:1003300019F08091000809958091000889838981CE -:10034000D5DF0F90DF91CF91FF91EF91BF91AF91EA -:100350009F918F917F916F915F914F913F912F91DD -:100360000F900FBE0F901F901895E091413FE23023 -:1003700029F128F4EE2341F0E13091F040C0E33060 -:1003800059F1E430B9F13BC0F0E0EC59F647208177 -:1003900091E0281390E09093413F81E090E0089530 -:1003A000F0E0EC59F6479081891302C082E001C069 -:1003B00080E08093413F81E090E00895F0E0EC59C7 -:1003C000F6479081891302C083E001C080E08093EA -:1003D000413F81E090E00895F0E0EC59F6479081CC -:1003E000891302C084E001C080E08093413F81E036 -:1003F00090E008951092413F80E090E008951092BF -:10040000413F81E090E008959091403F9330C1F0EA -:1004100028F4992341F0913069F042C09430C1F042 -:10042000953001F13DC0A1DF892BD1F581E08093AA -:10043000403F36C08093093F83E08093403F30C007 -:10044000E9E0FFE31182828384E08093403F28C08B -:10045000E9E0FFE321813281282B2183328395E07B -:100460009093403F9091083FE92FF0E0E75FF04C18 -:10047000838381E0890F8093083F9091093F98170B -:1004800078F4E091443FF091453F6CE07FE3809148 -:10049000423F9091433F09951092403F1092083F90 -:1004A00080E090E00895009759F06115710541F0E2 -:1004B0008093423F9093433F6093443F7093453F06 -:1004C0000895FC0111820895FC0164837583F9DFAE -:1004D00080E090E00895CF93DF936115710571F08E -:1004E000009761F0EC01198218826A837B8364E6CD -:1004F00072E0D9DF64E072E0CE01C8DEDF91CF9117 -:100500000895CF93DF93CDB7DEB7CB55D109CDBFDB -:10051000DEBF80E090E068DE40E660E070E0CE01A3 -:1005200001967CDE4CE251E0BE016F5F7F4FCE0151 -:1005300004964BD0BE016C5F7F4F86E49FE3CBDF18 -:100540002AE684E091E0215080409040E1F700C02D -:10055000F7CF8F929F92AF92BF92CF92DF92EF929E -:10056000FF920F931F93CF93DF93EC01862E5A01D6 -:1005700068017901C8010196C9D0982E192FFC0194 -:100580008192CF01A601B501E2D1EA81FB81A701E9 -:1005900096012F5F3F4F4F4F5F4F01E0692D712F45 -:1005A000888199810995892D912F48D180E090E02B -:1005B000DF91CF911F910F91FF90EF90DF90CF903F -:1005C000BF90AF909F908F900895EF92FF920F93FE -:1005D0001F93CF93DF931F92CDB7DEB7009709F437 -:1005E00085C06115710509F484C04115510509F4F0 -:1005F00083C07C01DC016D937C93119712964D931F -:100600005C931397FC01349684E5DF011D928A9573 -:10061000E9F78FEF898301E010E020E030E0AE01E0 -:100620004F5F5F4F63E0C70194DF80E8898301E09B -:1006300010E020E030E0AE014F5F5F4F60E1C701A6 -:1006400088DF01E010E020E030E0AE014F5F5F4F57 -:1006500061E1C7017EDF01E010E020E030E0AE01A3 -:100660004F5F5F4F62E1C70174DF01E010E020E0FF -:1006700030E0AE014F5F5F4F63E1C7016ADF01E029 -:1006800010E020E030E0AE014F5F5F4F64E1C70152 -:1006900060DF01E010E020E030E0AE014F5F5F4F2F -:1006A00065E1C70156DF01E010E020E030E0AE0177 -:1006B0004F5F5F4F66E1C7014CDF01E010E020E0D3 -:1006C00030E0AE014F5F5F4F67E1C70142DF80EC72 -:1006D000898301E010E020E030E0AE014F5F5F4F22 -:1006E00067EBC70136DF80E090E008C08FEF9FEF37 -:1006F00005C08FEF9FEF02C08FEF9FEF0F90DF914C -:10070000CF911F910F91FF90EF9008950F931F933A -:10071000CF93DF938230910510F482E090E0E09176 -:100720004E3FF0914F3F20E030E0A0E0B0E0309746 -:1007300019F1408151810281138148175907C8F08E -:100740008417950769F4109731F012960C9312975D -:1007500013961C9327C000934E3F10934F3F22C027 -:100760002115310519F04217530718F49A01BD01FC -:10077000EF01DF01F801DBCF21153105F9F0281B6E -:10078000390B2430310580F48A819B816115710514 -:1007900021F0FB018283938304C080934E3F9093AA -:1007A0004F3FFE01329644C0FE01E20FF31F8193DA -:1007B000919322503109288339833AC020914C3FCC -:1007C00030914D3F232B41F42091023F3091033F64 -:1007D00020934C3F30934D3F2091003F3091013F9B -:1007E0002115310541F42DB73EB74091043F50919A -:1007F000053F241B350BE0914C3FF0914D3FE21734 -:10080000F307A0F42E1B3F0B2817390778F0AC0133 -:100810004E5F5F4F2417350748F04E0F5F1F409320 -:100820004C3F50934D3F8193919302C0E0E0F0E044 -:10083000CF01DF91CF911F910F910895CF93DF9357 -:10084000009709F481C0FC01329712821382A091B3 -:100850004E3FB0914F3F109781F420813181820F3C -:10086000931F20914C3F30914D3F2817390751F588 -:10087000E0934C3FF0934D3F67C0ED0120E030E046 -:10088000CE17DF0740F44A815B819E014115510577 -:10089000F1F0EA01F5CFC283D38340815181840F07 -:1008A000951FC817D90759F488819981840F951F1E -:1008B0000296808391838A819B8182839383211511 -:1008C000310529F4E0934E3FF0934F3F3DC0E901DD -:1008D000EA83FB8349915991C40FD51FEC17FD079B -:1008E00061F480819181840F951F0296E9018883CC -:1008F0009983828193818A839B83E0E0F0E0129662 -:100900008D919C911397009719F0FD01DC01F7CFB1 -:100910008D919C9111979D012E5F3F4F820F931FE8 -:1009200020914C3F30914D3F2817390769F430979B -:1009300029F410924E3F10924F3F02C01282138250 -:10094000A0934C3FB0934D3FDF91CF910895FB01B1 -:10095000DC0102C001900D9241505040D8F708953B -:04096000F894FFCF39 -:050964004F5A31434D24 -:060969000000503F2000D9 +:100040001FE3A0E0BFE3ECE9F1E002C005900D92F0 +:10005000AA31B107D9F72FE3AAE1BFE301C01D928E +:10006000A633B207E1F750D097C0CACFEF92FF9204 +:100070000F931F93CF93DF937C018B01D42FC0E0AC +:1000800007C0F801EC0FF11D6081C70171D0CF5F8F +:10009000CD17B8F3DF91CF911F910F91FF90EF90A3 +:1000A0000895CF93DF93EB015BD08883DF91CF91ED +:1000B00008951F920F920FB60F9211242F933F9322 +:1000C0004F935F936F937F938F939F93AF93BF9360 +:1000D000EF93FF93E0911A3FF0911B3F309719F097 +:1000E000809100080995FF91EF91BF91AF919F9189 +:1000F0008F917F916F915F914F913F912F910F90D1 +:100100000FBE0F901F90189541E06DE17FE380E0F6 +:1001100090E0C7DF2AE684E091E0215080409040E3 +:10012000E1F700C041E060E07FE380E090E09EDF27 +:10013000809108048D3059F480911C3F8F5F80932B +:100140001C3F80911C3F823310F010921C3F2AE626 +:1001500084E091E0215080409040E1F700C0E8CF7A +:1001600003D0808199270895FC01E050FC4E08954A +:10017000262FAF93BF93E0E0F0E1328131FDFDCF58 +:10018000DC01A050BC4E2C932DE924BF23E020833A +:0C0190000196BF91AF910895F894FFCF45 +:10019C0055000000000000000000000000000000FE +:0A01AC000000000000000000000049 :00000001FF diff --git a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss index 104f7ca..eed200e 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.lss @@ -3,33 +3,31 @@ storno_cqp6xx_digital_xtal.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .data 00000006 00803f00 00000969 00000a1d 2**0 + 0 .data 0000001a 00803f00 0000019c 00000230 2**0 CONTENTS, ALLOC, LOAD, DATA - 1 .text 00000964 00000000 00000000 000000b4 2**1 + 1 .text 0000019c 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 2 .rodata 00000005 00008964 00000964 00000a18 2**0 - CONTENTS, ALLOC, LOAD, READONLY, DATA - 3 .bss 0000004a 00803f06 00803f06 00000a23 2**0 + 2 .bss 0000001c 00803f1a 00803f1a 0000024a 2**0 ALLOC - 4 .comment 00000030 00000000 00000000 00000a23 2**0 + 3 .comment 00000030 00000000 00000000 0000024a 2**0 CONTENTS, READONLY - 5 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 00000a54 2**2 + 4 .note.gnu.avr.deviceinfo 0000003c 00000000 00000000 0000027c 2**2 CONTENTS, READONLY - 6 .debug_aranges 000001b8 00000000 00000000 00000a90 2**0 + 5 .debug_aranges 000000c8 00000000 00000000 000002b8 2**3 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 0000496c 00000000 00000000 00000c48 2**0 + 6 .debug_info 00001e3d 00000000 00000000 00000380 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 00001bfd 00000000 00000000 000055b4 2**0 + 7 .debug_abbrev 00001565 00000000 00000000 000021bd 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 000012f2 00000000 00000000 000071b1 2**0 + 8 .debug_line 000007d0 00000000 00000000 00003722 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000558 00000000 00000000 000084a4 2**2 + 9 .debug_frame 00000140 00000000 00000000 00003ef4 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 00002131 00000000 00000000 000089fc 2**0 + 10 .debug_str 00000e53 00000000 00000000 00004034 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00001c80 00000000 00000000 0000ab2d 2**0 + 11 .debug_loc 00000349 00000000 00000000 00004e87 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000158 00000000 00000000 0000c7ad 2**0 + 12 .debug_ranges 00000058 00000000 00000000 000051d0 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -57,7 +55,7 @@ Disassembly of section .text: 26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt> 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> - 2c: 66 c1 rjmp .+716 ; 0x2fa <__vector_22> + 2c: 42 c0 rjmp .+132 ; 0xb2 <__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> @@ -70,1703 +68,273 @@ Disassembly of section .text: 3c: df e3 ldi r29, 0x3F ; 63 3e: de bf out 0x3e, r29 ; 62 -00000040 <__do_clear_bss>: - 40: 2f e3 ldi r18, 0x3F ; 63 - 42: a6 e0 ldi r26, 0x06 ; 6 +00000040 <__do_copy_data>: + 40: 1f e3 ldi r17, 0x3F ; 63 + 42: a0 e0 ldi r26, 0x00 ; 0 44: bf e3 ldi r27, 0x3F ; 63 - 46: 01 c0 rjmp .+2 ; 0x4a <.do_clear_bss_start> + 46: ec e9 ldi r30, 0x9C ; 156 + 48: f1 e0 ldi r31, 0x01 ; 1 + 4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10> + 4c: 05 90 lpm r0, Z+ + 4e: 0d 92 st X+, r0 + 50: aa 31 cpi r26, 0x1A ; 26 + 52: b1 07 cpc r27, r17 + 54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc> -00000048 <.do_clear_bss_loop>: - 48: 1d 92 st X+, r1 +00000056 <__do_clear_bss>: + 56: 2f e3 ldi r18, 0x3F ; 63 + 58: aa e1 ldi r26, 0x1A ; 26 + 5a: bf e3 ldi r27, 0x3F ; 63 + 5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start> -0000004a <.do_clear_bss_start>: - 4a: a0 35 cpi r26, 0x50 ; 80 - 4c: b2 07 cpc r27, r18 - 4e: e1 f7 brne .-8 ; 0x48 <.do_clear_bss_loop> +0000005e <.do_clear_bss_loop>: + 5e: 1d 92 st X+, r1 -00000050 <__do_copy_data>: - 50: 1f e3 ldi r17, 0x3F ; 63 - 52: a0 e0 ldi r26, 0x00 ; 0 - 54: bf e3 ldi r27, 0x3F ; 63 - 56: e9 e6 ldi r30, 0x69 ; 105 - 58: f9 e0 ldi r31, 0x09 ; 9 - 5a: 02 c0 rjmp .+4 ; 0x60 <__do_copy_data+0x10> - 5c: 05 90 lpm r0, Z+ - 5e: 0d 92 st X+, r0 - 60: a6 30 cpi r26, 0x06 ; 6 - 62: b1 07 cpc r27, r17 - 64: d9 f7 brne .-10 ; 0x5c <__do_copy_data+0xc> - 66: 4d d2 rcall .+1178 ; 0x502
- 68: 7b c4 rjmp .+2294 ; 0x960 <_exit> +00000060 <.do_clear_bss_start>: + 60: a6 33 cpi r26, 0x36 ; 54 + 62: b2 07 cpc r27, r18 + 64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop> + 66: 50 d0 rcall .+160 ; 0x108
+ 68: 97 c0 rjmp .+302 ; 0x198 <_exit> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> -0000006c : - *data = TWI0.MDATA; - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - return 0; // Success -} - 6c: e0 e1 ldi r30, 0x10 ; 16 - 6e: f8 e0 ldi r31, 0x08 ; 8 - 70: 84 81 ldd r24, Z+4 ; 0x04 - 72: 88 60 ori r24, 0x08 ; 8 - 74: 84 83 std Z+4, r24 ; 0x04 - 76: 81 e0 ldi r24, 0x01 ; 1 - 78: 85 83 std Z+5, r24 ; 0x05 - 7a: 08 95 ret +0000006c : + */ +#include "avr_eeprom_driver.h" +#include +#include -0000007c : - 7c: 80 93 17 08 sts 0x0817, r24 ; 0x800817 - 80: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 84: 80 7c andi r24, 0xC0 ; 192 - 86: e1 f3 breq .-8 ; 0x80 <__EEPROM_REGION_LENGTH__> - 88: 90 91 15 08 lds r25, 0x0815 ; 0x800815 - 8c: 89 2f mov r24, r25 - 8e: 80 71 andi r24, 0x10 ; 16 - 90: 94 ff sbrs r25, 4 - 92: 04 c0 rjmp .+8 ; 0x9c <__EEPROM_REGION_LENGTH__+0x1c> - 94: 83 e0 ldi r24, 0x03 ; 3 - 96: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - 9a: 81 e0 ldi r24, 0x01 ; 1 - 9c: 08 95 ret - -0000009e : - -int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ - 9e: cf 92 push r12 - a0: df 92 push r13 - a2: ef 92 push r14 - a4: ff 92 push r15 - a6: cf 93 push r28 - a8: df 93 push r29 - aa: eb 01 movw r28, r22 - ac: 69 01 movw r12, r18 - ae: 7a 01 movw r14, r20 +void cm_EEPROM_write(uint8_t* address, uint8_t *data, uint8_t length) { + 6c: ef 92 push r14 + 6e: ff 92 push r15 + 70: 0f 93 push r16 + 72: 1f 93 push r17 + 74: cf 93 push r28 + 76: df 93 push r29 + 78: 7c 01 movw r14, r24 + 7a: 8b 01 movw r16, r22 + 7c: d4 2f mov r29, r20 - // Check length - if(len == 0) return CM_I2C_NOK; - b0: 23 2b or r18, r19 - b2: 24 2b or r18, r20 - b4: 25 2b or r18, r21 - b6: 81 f1 breq .+96 ; 0x118 <__DATA_REGION_LENGTH__+0x18> - // 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; - b8: e1 df rcall .-62 ; 0x7c - ba: 81 11 cpse r24, r1 - bc: 30 c0 rjmp .+96 ; 0x11e <__DATA_REGION_LENGTH__+0x1e> - - do - { - // Prepare and send new data. - TWI0.MDATA = *dp++; - be: 9e 01 movw r18, r28 - c0: 2f 5f subi r18, 0xFF ; 255 - c2: 3f 4f sbci r19, 0xFF ; 255 - c4: 88 81 ld r24, Y - c6: 80 93 18 08 sts 0x0818, r24 ; 0x800818 + for (uint8_t i = 0; i < length; i++) { + 7e: c0 e0 ldi r28, 0x00 ; 0 + 80: 07 c0 rjmp .+14 ; 0x90 <__EEPROM_REGION_LENGTH__+0x10> - while (!(TWI0.MSTATUS & TWI_WIF_bm)); - ca: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - ce: 86 ff sbrs r24, 6 - d0: fc cf rjmp .-8 ; 0xca + eeprom_write_byte(address,data[i]); + 82: f8 01 movw r30, r16 + 84: ec 0f add r30, r28 + 86: f1 1d adc r31, r1 + 88: 60 81 ld r22, Z + 8a: c7 01 movw r24, r14 + 8c: 71 d0 rcall .+226 ; 0x170 +#include + +void cm_EEPROM_write(uint8_t* address, uint8_t *data, uint8_t length) { - if (TWI0.MSTATUS & TWI_RXACK_bm) { - d2: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - d6: 84 ff sbrs r24, 4 - d8: 06 c0 rjmp .+12 ; 0xe6 - // NACK received - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - da: 83 e0 ldi r24, 0x03 ; 3 - dc: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - return 1; // Error: NACK received - e0: 81 e0 ldi r24, 0x01 ; 1 - e2: 90 e0 ldi r25, 0x00 ; 0 - e4: 1e c0 rjmp .+60 ; 0x122 <__DATA_REGION_LENGTH__+0x22> - } + + for (uint8_t i = 0; i < length; i++) { + 8e: cf 5f subi r28, 0xFF ; 255 + 90: cd 17 cp r28, r29 + 92: b8 f3 brcs .-18 ; 0x82 <__EEPROM_REGION_LENGTH__+0x2> + //NVMCTRL.CTRLA = NVMCTRL_CMD_PAGEERASEWRITE_gc; - // Check for bus error and reset if it happens.. - if (TWI0.MSTATUS & (TWI_ARBLOST_bm | TWI_BUSERR_bm)) { - e6: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - ea: 8c 70 andi r24, 0x0C ; 12 - ec: 21 f0 breq .+8 ; 0xf6 - i2c_reset(); - ee: be df rcall .-132 ; 0x6c - return 1; - f0: 81 e0 ldi r24, 0x01 ; 1 - f2: 90 e0 ldi r25, 0x00 ; 0 - f4: 16 c0 rjmp .+44 ; 0x122 <__DATA_REGION_LENGTH__+0x22> - } - - if (TWI0.MSTATUS & TWI_RXACK_bm) - f6: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - fa: 84 fd sbrc r24, 4 - fc: 07 c0 rjmp .+14 ; 0x10c <__DATA_REGION_LENGTH__+0xc> - break; - - }while(--len); - fe: 81 e0 ldi r24, 0x01 ; 1 - 100: c8 1a sub r12, r24 - 102: d1 08 sbc r13, r1 - 104: e1 08 sbc r14, r1 - 106: f1 08 sbc r15, r1 - if(i2c_write_devAddr(dev_addr) != CM_I2C_OK)return CM_I2C_NOK; - - do - { - // Prepare and send new data. - TWI0.MDATA = *dp++; - 108: e9 01 movw r28, r18 - } - - if (TWI0.MSTATUS & TWI_RXACK_bm) - break; - - }while(--len); - 10a: c9 f6 brne .-78 ; 0xbe - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - 10c: 83 e0 ldi r24, 0x03 ; 3 - 10e: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - - - return CM_I2C_OK; - 112: 80 e0 ldi r24, 0x00 ; 0 - 114: 90 e0 ldi r25, 0x00 ; 0 - 116: 05 c0 rjmp .+10 ; 0x122 <__DATA_REGION_LENGTH__+0x22> -} - -int i2c_write(uint8_t dev_addr, void *data, uint32_t len){ - - // Check length - if(len == 0) return CM_I2C_NOK; - 118: 8f ef ldi r24, 0xFF ; 255 - 11a: 9f ef ldi r25, 0xFF ; 255 - 11c: 02 c0 rjmp .+4 ; 0x122 <__DATA_REGION_LENGTH__+0x22> - - // 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; - 11e: 8f ef ldi r24, 0xFF ; 255 - 120: 9f ef ldi r25, 0xFF ; 255 - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - - - return CM_I2C_OK; -} - 122: df 91 pop r29 - 124: cf 91 pop r28 - 126: ff 90 pop r15 - 128: ef 90 pop r14 - 12a: df 90 pop r13 - 12c: cf 90 pop r12 - 12e: 08 95 ret - -00000130 : - -int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ - 130: cf 92 push r12 - 132: df 92 push r13 - 134: ef 92 push r14 - 136: ff 92 push r15 - 138: cf 93 push r28 - 13a: df 93 push r29 - 13c: eb 01 movw r28, r22 - 13e: 69 01 movw r12, r18 - 140: 7a 01 movw r14, r20 - - uint8_t *dp = data; - - if (len == 0) - 142: 23 2b or r18, r19 - 144: 24 2b or r18, r20 - 146: 25 2b or r18, r21 - 148: 69 f1 breq .+90 ; 0x1a4 - 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; - 14a: 81 60 ori r24, 0x01 ; 1 - 14c: 97 df rcall .-210 ; 0x7c - 14e: 88 23 and r24, r24 - 150: c9 f0 breq .+50 ; 0x184 - 152: 2b c0 rjmp .+86 ; 0x1aa - - while (len--) { - - while (!(TWI0.MSTATUS & (TWI_WIF_bm | TWI_RIF_bm))); - 154: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 158: 80 7c andi r24, 0xC0 ; 192 - 15a: e1 f3 breq .-8 ; 0x154 - - *dp++ = TWI0.MDATA; - 15c: ce 01 movw r24, r28 - 15e: 01 96 adiw r24, 0x01 ; 1 - 160: 20 91 18 08 lds r18, 0x0818 ; 0x800818 - 164: 28 83 st Y, r18 - if (len == 0) { - 166: 41 15 cp r20, r1 - 168: 51 05 cpc r21, r1 - 16a: 61 05 cpc r22, r1 - 16c: 71 05 cpc r23, r1 - 16e: 21 f4 brne .+8 ; 0x178 - TWI0.MCTRLB = TWI_ACKACT_NACK_gc; - 170: 24 e0 ldi r18, 0x04 ; 4 - 172: 20 93 14 08 sts 0x0814, r18 ; 0x800814 - 176: 03 c0 rjmp .+6 ; 0x17e - } else { - TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; - 178: 22 e0 ldi r18, 0x02 ; 2 - 17a: 20 93 14 08 sts 0x0814, r18 ; 0x800814 - 17e: 6a 01 movw r12, r20 - 180: 7b 01 movw r14, r22 - - - return CM_I2C_OK; -} - -int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ - 182: ec 01 movw r28, r24 - return 1; - - // Send register address to I2C device, we would like to read from.. - if(i2c_write_devAddr(dev_addr | 1) != CM_I2C_OK)return CM_I2C_NOK; - - while (len--) { - 184: b7 01 movw r22, r14 - 186: a6 01 movw r20, r12 - 188: 41 50 subi r20, 0x01 ; 1 - 18a: 51 09 sbc r21, r1 - 18c: 61 09 sbc r22, r1 - 18e: 71 09 sbc r23, r1 - 190: cd 28 or r12, r13 - 192: ce 28 or r12, r14 - 194: cf 28 or r12, r15 - 196: f1 f6 brne .-68 ; 0x154 - TWI0.MCTRLB = TWI_ACKACT_ACK_gc | TWI_MCMD_RECVTRANS_gc; - } - } - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - 198: 83 e0 ldi r24, 0x03 ; 3 - 19a: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - - return 0; - 19e: 80 e0 ldi r24, 0x00 ; 0 - 1a0: 90 e0 ldi r25, 0x00 ; 0 - 1a2: 05 c0 rjmp .+10 ; 0x1ae -int i2c_read(uint8_t dev_addr, void *data, uint32_t len){ - - uint8_t *dp = data; - - if (len == 0) - return 1; - 1a4: 81 e0 ldi r24, 0x01 ; 1 - 1a6: 90 e0 ldi r25, 0x00 ; 0 - 1a8: 02 c0 rjmp .+4 ; 0x1ae - - // 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; - 1aa: 8f ef ldi r24, 0xFF ; 255 - 1ac: 9f ef ldi r25, 0xFF ; 255 - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - - return 0; - - -} - 1ae: df 91 pop r29 - 1b0: cf 91 pop r28 - 1b2: ff 90 pop r15 - 1b4: ef 90 pop r14 - 1b6: df 90 pop r13 - 1b8: cf 90 pop r12 - 1ba: 08 95 ret - -000001bc : - -int i2c_IsDeviceReady(uint8_t dev_addr){ - - TWI0.MADDR = dev_addr | 0; - 1bc: 80 93 17 08 sts 0x0817, r24 ; 0x800817 - - // Wait for acknowledgment - while (!(TWI0.MSTATUS & TWI_WIF_bm)); - 1c0: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 1c4: 86 ff sbrs r24, 6 - 1c6: fc cf rjmp .-8 ; 0x1c0 - - if (TWI0.MSTATUS & TWI_RXACK_bm) { - 1c8: 80 91 15 08 lds r24, 0x0815 ; 0x800815 - 1cc: 84 ff sbrs r24, 4 - 1ce: 06 c0 rjmp .+12 ; 0x1dc - // NACK received - TWI0.MCTRLB = TWI_MCMD_STOP_gc; // Send stop condition - 1d0: 83 e0 ldi r24, 0x03 ; 3 - 1d2: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - return 1; // Error: NACK received - 1d6: 81 e0 ldi r24, 0x01 ; 1 - 1d8: 90 e0 ldi r25, 0x00 ; 0 - 1da: 08 95 ret + /* Wait until the write is complete */ + //while (NVMCTRL.STATUS & NVMCTRL_EEBUSY_bm); } - - // Send stop condition - TWI0.MCTRLB = TWI_MCMD_STOP_gc; - 1dc: 83 e0 ldi r24, 0x03 ; 3 - 1de: 80 93 14 08 sts 0x0814, r24 ; 0x800814 - return CM_I2C_OK; // Success - 1e2: 80 e0 ldi r24, 0x00 ; 0 - 1e4: 90 e0 ldi r25, 0x00 ; 0 - } - 1e6: 08 95 ret + 94: df 91 pop r29 + 96: cf 91 pop r28 + 98: 1f 91 pop r17 + 9a: 0f 91 pop r16 + 9c: ff 90 pop r15 + 9e: ef 90 pop r14 + a0: 08 95 ret -000001e8 : +000000a2 : -int cm_i2c_init(void *i2c_inst){ +void cm_EEPROM_read(uint8_t* address, uint8_t *data, uint8_t length) { + a2: cf 93 push r28 + a4: df 93 push r29 + a6: eb 01 movw r28, r22 - PORTA.DIR &= ~(1 << 2); // Clear bit 2 (PA2) - 1e8: e0 e0 ldi r30, 0x00 ; 0 - 1ea: f4 e0 ldi r31, 0x04 ; 4 - 1ec: 80 81 ld r24, Z - 1ee: 8b 7f andi r24, 0xFB ; 251 - 1f0: 80 83 st Z, r24 - PORTA.DIR &= ~(1 << 3); // Clear bit 3 (PA3) - 1f2: 80 81 ld r24, Z - 1f4: 87 7f andi r24, 0xF7 ; 247 - 1f6: 80 83 st Z, r24 + data[0] = eeprom_read_byte(address); + a8: 5b d0 rcall .+182 ; 0x160 + aa: 88 83 st Y, r24 - // Set the baud rate for 100kHz with a typical rise time of 300 ns - TWI0.MBAUD = 11; - 1f8: a0 e1 ldi r26, 0x10 ; 16 - 1fa: b8 e0 ldi r27, 0x08 ; 8 - 1fc: 8b e0 ldi r24, 0x0B ; 11 - 1fe: 16 96 adiw r26, 0x06 ; 6 - 200: 8c 93 st X, r24 - 202: 16 97 sbiw r26, 0x06 ; 6 - - // Enable the TWI master and set it to enable operation - TWI0.MCTRLA = TWI_ENABLE_bm; - 204: 81 e0 ldi r24, 0x01 ; 1 - 206: 13 96 adiw r26, 0x03 ; 3 - 208: 8c 93 st X, r24 - 20a: 13 97 sbiw r26, 0x03 ; 3 + // Directly read the data from NVMCTRL.DATA + data[i] = NVMCTRL.DATA; - /* Set bus state idle */ - TWI0.MSTATUS = TWI_BUSSTATE_IDLE_gc; - 20c: 15 96 adiw r26, 0x05 ; 5 - 20e: 8c 93 st X, r24 - - // Enable the internal pull-ups for PA2 (SDA) and PA3 (SCL) - PORTA.PIN2CTRL = PORT_PULLUPEN_bm; - 210: 88 e0 ldi r24, 0x08 ; 8 - 212: 82 8b std Z+18, r24 ; 0x12 - PORTA.PIN3CTRL = PORT_PULLUPEN_bm; - 214: 83 8b std Z+19, r24 ; 0x13 - return CM_I2C_OK; + }*/ } - 216: 80 e0 ldi r24, 0x00 ; 0 - 218: 90 e0 ldi r25, 0x00 ; 0 - 21a: 08 95 ret + ac: df 91 pop r29 + ae: cf 91 pop r28 + b0: 08 95 ret -0000021c : - - - -int cm_i2c_addDev(cm_i2c_device_t *inst, void *i2c_inst, uint8_t dev_addr){ - 21c: ef 92 push r14 - 21e: ff 92 push r15 - 220: 0f 93 push r16 - 222: 1f 93 push r17 - 224: cf 93 push r28 - 226: 8c 01 movw r16, r24 - 228: 7b 01 movw r14, r22 - 22a: 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; - 22c: 84 2f mov r24, r20 - 22e: 88 0f add r24, r24 - 230: c5 df rcall .-118 ; 0x1bc - 232: 00 97 sbiw r24, 0x00 ; 0 - 234: 49 f4 brne .+18 ; 0x248 - - // add device info if device responds! - inst->i2c_transfer_inst = i2c_inst; - 236: f8 01 movw r30, r16 - 238: e0 82 st Z, r14 - 23a: f1 82 std Z+1, r15 ; 0x01 - inst->dev_addr = (dev_addr << 1) & 0b11111110; - 23c: 4c 2f mov r20, r28 - 23e: 50 e0 ldi r21, 0x00 ; 0 - 240: 44 0f add r20, r20 - 242: 55 1f adc r21, r21 - 244: 42 83 std Z+2, r20 ; 0x02 - - return CM_I2C_OK; - 246: 02 c0 rjmp .+4 ; 0x24c -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; - 248: 8e ef ldi r24, 0xFE ; 254 - 24a: 9f ef ldi r25, 0xFF ; 255 - // add device info if device responds! - inst->i2c_transfer_inst = i2c_inst; - inst->dev_addr = (dev_addr << 1) & 0b11111110; - - return CM_I2C_OK; -} - 24c: cf 91 pop r28 - 24e: 1f 91 pop r17 - 250: 0f 91 pop r16 - 252: ff 90 pop r15 - 254: ef 90 pop r14 - 256: 08 95 ret - -00000258 : - - -int cm_i2c_transfer(cm_i2c_device_t *inst, uint8_t *data, uint32_t len, i2c_setget_cm_t set_get){ - 258: 0f 93 push r16 - - if(inst == NULL) return CM_I2C_NOK; - 25a: 00 97 sbiw r24, 0x00 ; 0 - 25c: 81 f0 breq .+32 ; 0x27e - 25e: 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){ - 260: 00 23 and r16, r16 - 262: 19 f0 breq .+6 ; 0x26a - 264: 01 30 cpi r16, 0x01 ; 1 - 266: 31 f0 breq .+12 ; 0x274 - 268: 0d c0 rjmp .+26 ; 0x284 - - 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); - 26a: 82 81 ldd r24, Z+2 ; 0x02 - 26c: 61 df rcall .-318 ; 0x130 - break; - - - } - - return CM_I2C_OK; - 26e: 80 e0 ldi r24, 0x00 ; 0 - 270: 90 e0 ldi r25, 0x00 ; 0 - switch(set_get){ - - case I2C_CM_GET: - //HAL_I2C_Master_Receive(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); - i2c_read(inst->dev_addr, data, len); - break; - 272: 0a c0 rjmp .+20 ; 0x288 - - 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); - 274: 82 81 ldd r24, Z+2 ; 0x02 - 276: 13 df rcall .-474 ; 0x9e - break; - - - } - - return CM_I2C_OK; - 278: 80 e0 ldi r24, 0x00 ; 0 - 27a: 90 e0 ldi r25, 0x00 ; 0 - break; - - case I2C_CM_SET: - //HAL_I2C_Master_Transmit(inst->i2c_transfer_inst, inst->dev_addr, data, len, 1); - i2c_write(inst->dev_addr, data, len); - break; - 27c: 05 c0 rjmp .+10 ; 0x288 -} - - -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; - 27e: 8f ef ldi r24, 0xFF ; 255 - 280: 9f ef ldi r25, 0xFF ; 255 - 282: 02 c0 rjmp .+4 ; 0x288 - break; - - - } - - return CM_I2C_OK; - 284: 80 e0 ldi r24, 0x00 ; 0 - 286: 90 e0 ldi r25, 0x00 ; 0 - -} - 288: 0f 91 pop r16 - 28a: 08 95 ret - -0000028c : - - -} - - -void cm_uart_init(void *rtx_inst, get_UART_Event_fpt uart_rx_evt_fp){ - 28c: cf 93 push r28 - 28e: df 93 push r29 - 290: 1f 92 push r1 - 292: cd b7 in r28, 0x3d ; 61 - 294: de b7 in r29, 0x3e ; 62 - 296: ac 01 movw r20, r24 - - //For interrupt-driven USART operation, global interrupts must be disabled during the initialization - cli(); - 298: 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; - 29a: e0 e0 ldi r30, 0x00 ; 0 - 29c: f8 e0 ldi r31, 0x08 ; 8 - 29e: 2c e6 ldi r18, 0x6C ; 108 - 2a0: 35 e0 ldi r19, 0x05 ; 5 - 2a2: 20 87 std Z+8, r18 ; 0x08 - 2a4: 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 - 2a6: 93 e0 ldi r25, 0x03 ; 3 - 2a8: 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 - 2aa: 90 ec ldi r25, 0xC0 ; 192 - 2ac: 96 83 std Z+6, r25 ; 0x06 - USART_TXEN_bm; // Enable transmitter - - if((uart_rx_evt_fp != NULL) || (rtx_inst != NULL)){ - 2ae: 61 15 cp r22, r1 - 2b0: 71 05 cpc r23, r1 - 2b2: 11 f4 brne .+4 ; 0x2b8 - 2b4: 45 2b or r20, r21 - 2b6: 39 f0 breq .+14 ; 0x2c6 - // Enable RX interrupt - USART0.CTRLA = USART_RXCIE_bm; // Enable receive interrupt - 2b8: 80 e8 ldi r24, 0x80 ; 128 - 2ba: 80 93 05 08 sts 0x0805, r24 ; 0x800805 - - s_inst = rtx_inst; - uart_rx_evt_fpt = uart_rx_evt_fp; - 2be: 60 93 06 3f sts 0x3F06, r22 ; 0x803f06 <__data_end> - 2c2: 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) { - 2c6: 80 91 04 08 lds r24, 0x0804 ; 0x800804 - 2ca: 88 23 and r24, r24 - 2cc: 24 f4 brge .+8 ; 0x2d6 - volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag - 2ce: 80 91 00 08 lds r24, 0x0800 ; 0x800800 - 2d2: 89 83 std Y+1, r24 ; 0x01 - (void)dummy; // Silence unused variable warning - 2d4: 89 81 ldd r24, Y+1 ; 0x01 - } - - PORTA.DIRSET = (1 << 6); // Set PA1 (TX) as output - 2d6: e0 e0 ldi r30, 0x00 ; 0 - 2d8: f4 e0 ldi r31, 0x04 ; 4 - 2da: 80 e4 ldi r24, 0x40 ; 64 - 2dc: 81 83 std Z+1, r24 ; 0x01 - PORTA.DIRCLR = (1 << 7); // Set PA2 (RX) as input - 2de: 80 e8 ldi r24, 0x80 ; 128 - 2e0: 82 83 std Z+2, r24 ; 0x02 - // Enable global interrupts - sei(); - 2e2: 78 94 sei - - -} - 2e4: 0f 90 pop r0 - 2e6: df 91 pop r29 - 2e8: cf 91 pop r28 - 2ea: 08 95 ret - -000002ec : - - -void cm_uart_send(uint8_t data) { - // Wait until the Data Register Empty flag (DREIF) is set, indicating it's ready for new data - while (!(USART0.STATUS & USART_DREIF_bm)); - 2ec: 90 91 04 08 lds r25, 0x0804 ; 0x800804 - 2f0: 95 ff sbrs r25, 5 - 2f2: fc cf rjmp .-8 ; 0x2ec - - // Load the data into the transmit register - USART0.TXDATAL = data; - 2f4: 80 93 02 08 sts 0x0802, r24 ; 0x800802 - 2f8: 08 95 ret - -000002fa <__vector_22>: +000000b2 <__vector_22>: #define BAUD_RATE 9600 static void *s_inst = NULL; get_UART_Event_fpt uart_rx_evt_fpt = NULL; ISR(USART0_RXC_vect) { - 2fa: 1f 92 push r1 - 2fc: 0f 92 push r0 - 2fe: 0f b6 in r0, 0x3f ; 63 - 300: 0f 92 push r0 - 302: 11 24 eor r1, r1 - 304: 2f 93 push r18 - 306: 3f 93 push r19 - 308: 4f 93 push r20 - 30a: 5f 93 push r21 - 30c: 6f 93 push r22 - 30e: 7f 93 push r23 - 310: 8f 93 push r24 - 312: 9f 93 push r25 - 314: af 93 push r26 - 316: bf 93 push r27 - 318: ef 93 push r30 - 31a: ff 93 push r31 - 31c: cf 93 push r28 - 31e: df 93 push r29 - 320: 1f 92 push r1 - 322: cd b7 in r28, 0x3d ; 61 - 324: de b7 in r29, 0x3e ; 62 + b2: 1f 92 push r1 + b4: 0f 92 push r0 + b6: 0f b6 in r0, 0x3f ; 63 + b8: 0f 92 push r0 + ba: 11 24 eor r1, r1 + bc: 2f 93 push r18 + be: 3f 93 push r19 + c0: 4f 93 push r20 + c2: 5f 93 push r21 + c4: 6f 93 push r22 + c6: 7f 93 push r23 + c8: 8f 93 push r24 + ca: 9f 93 push r25 + cc: af 93 push r26 + ce: bf 93 push r27 + d0: ef 93 push r30 + d2: ff 93 push r31 // Read received data if(uart_rx_evt_fpt != NULL) uart_rx_evt_fpt(USART0.RXDATAL); - 326: e0 91 06 3f lds r30, 0x3F06 ; 0x803f06 <__data_end> - 32a: f0 91 07 3f lds r31, 0x3F07 ; 0x803f07 <__data_end+0x1> - 32e: 30 97 sbiw r30, 0x00 ; 0 - 330: 19 f0 breq .+6 ; 0x338 <__vector_22+0x3e> - 332: 80 91 00 08 lds r24, 0x0800 ; 0x800800 - 336: 09 95 icall - volatile uint8_t dummy = USART0.RXDATAL; // Read RXDATAL to clear the flag - 338: 80 91 00 08 lds r24, 0x0800 ; 0x800800 - 33c: 89 83 std Y+1, r24 ; 0x01 - cm_uart_send(dummy); - 33e: 89 81 ldd r24, Y+1 ; 0x01 - 340: d5 df rcall .-86 ; 0x2ec - + d4: e0 91 1a 3f lds r30, 0x3F1A ; 0x803f1a <__data_end> + d8: f0 91 1b 3f lds r31, 0x3F1B ; 0x803f1b <__data_end+0x1> + dc: 30 97 sbiw r30, 0x00 ; 0 + de: 19 f0 breq .+6 ; 0xe6 <__vector_22+0x34> + e0: 80 91 00 08 lds r24, 0x0800 ; 0x800800 <__RODATA_PM_OFFSET__+0x7f8800> + e4: 09 95 icall + //cm_uart_send(USART0.RXDATAL); } - 342: 0f 90 pop r0 - 344: df 91 pop r29 - 346: cf 91 pop r28 - 348: ff 91 pop r31 - 34a: ef 91 pop r30 - 34c: bf 91 pop r27 - 34e: af 91 pop r26 - 350: 9f 91 pop r25 - 352: 8f 91 pop r24 - 354: 7f 91 pop r23 - 356: 6f 91 pop r22 - 358: 5f 91 pop r21 - 35a: 4f 91 pop r20 - 35c: 3f 91 pop r19 - 35e: 2f 91 pop r18 - 360: 0f 90 pop r0 - 362: 0f be out 0x3f, r0 ; 63 - 364: 0f 90 pop r0 - 366: 1f 90 pop r1 - 368: 18 95 reti + e6: ff 91 pop r31 + e8: ef 91 pop r30 + ea: bf 91 pop r27 + ec: af 91 pop r26 + ee: 9f 91 pop r25 + f0: 8f 91 pop r24 + f2: 7f 91 pop r23 + f4: 6f 91 pop r22 + f6: 5f 91 pop r21 + f8: 4f 91 pop r20 + fa: 3f 91 pop r19 + fc: 2f 91 pop r18 + fe: 0f 90 pop r0 + 100: 0f be out 0x3f, r0 ; 63 + 102: 0f 90 pop r0 + 104: 1f 90 pop r1 + 106: 18 95 reti -0000036a : - -int cm_msgSync_Byte_DecodeSC(uint8_t rx_byte){ - - static cm_msg_startcode_states_t state = CM_MSGSYNC_STATE_INIT; - - switch (state) - 36a: e0 91 41 3f lds r30, 0x3F41 ; 0x803f41 - 36e: e2 30 cpi r30, 0x02 ; 2 - 370: 29 f1 breq .+74 ; 0x3bc - 372: 28 f4 brcc .+10 ; 0x37e - 374: ee 23 and r30, r30 - 376: 41 f0 breq .+16 ; 0x388 - 378: e1 30 cpi r30, 0x01 ; 1 - 37a: 91 f0 breq .+36 ; 0x3a0 - 37c: 40 c0 rjmp .+128 ; 0x3fe - 37e: e3 30 cpi r30, 0x03 ; 3 - 380: 59 f1 breq .+86 ; 0x3d8 - 382: e4 30 cpi r30, 0x04 ; 4 - 384: b9 f1 breq .+110 ; 0x3f4 - 386: 3b c0 rjmp .+118 ; 0x3fe - { - case CM_MSGSYNC_STATE_INIT: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_2 : CM_MSGSYNC_STATE_INIT; - 388: f0 e0 ldi r31, 0x00 ; 0 - 38a: ec 59 subi r30, 0x9C ; 156 - 38c: f6 47 sbci r31, 0x76 ; 118 - 38e: 20 81 ld r18, Z - 390: 91 e0 ldi r25, 0x01 ; 1 - 392: 28 13 cpse r18, r24 - 394: 90 e0 ldi r25, 0x00 ; 0 - 396: 90 93 41 3f sts 0x3F41, r25 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 39a: 81 e0 ldi r24, 0x01 ; 1 - 39c: 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; - 39e: 08 95 ret +00000108
: - case CM_MSGSYNC_STATE_2: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_3 : CM_MSGSYNC_STATE_INIT; - 3a0: f0 e0 ldi r31, 0x00 ; 0 - 3a2: ec 59 subi r30, 0x9C ; 156 - 3a4: f6 47 sbci r31, 0x76 ; 118 - 3a6: 90 81 ld r25, Z - 3a8: 89 13 cpse r24, r25 - 3aa: 02 c0 rjmp .+4 ; 0x3b0 - 3ac: 82 e0 ldi r24, 0x02 ; 2 - 3ae: 01 c0 rjmp .+2 ; 0x3b2 - 3b0: 80 e0 ldi r24, 0x00 ; 0 - 3b2: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 3b6: 81 e0 ldi r24, 0x01 ; 1 - 3b8: 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; - 3ba: 08 95 ret - - case CM_MSGSYNC_STATE_3: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_4 : CM_MSGSYNC_STATE_INIT; - 3bc: f0 e0 ldi r31, 0x00 ; 0 - 3be: ec 59 subi r30, 0x9C ; 156 - 3c0: f6 47 sbci r31, 0x76 ; 118 - 3c2: 90 81 ld r25, Z - 3c4: 89 13 cpse r24, r25 - 3c6: 02 c0 rjmp .+4 ; 0x3cc - 3c8: 83 e0 ldi r24, 0x03 ; 3 - 3ca: 01 c0 rjmp .+2 ; 0x3ce - 3cc: 80 e0 ldi r24, 0x00 ; 0 - 3ce: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 3d2: 81 e0 ldi r24, 0x01 ; 1 - 3d4: 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; - 3d6: 08 95 ret - - case CM_MSGSYNC_STATE_4: - state = (rx_byte == startCode[state])? CM_MSGSYNC_STATE_5 : CM_MSGSYNC_STATE_INIT; - 3d8: f0 e0 ldi r31, 0x00 ; 0 - 3da: ec 59 subi r30, 0x9C ; 156 - 3dc: f6 47 sbci r31, 0x76 ; 118 - 3de: 90 81 ld r25, Z - 3e0: 89 13 cpse r24, r25 - 3e2: 02 c0 rjmp .+4 ; 0x3e8 - 3e4: 84 e0 ldi r24, 0x04 ; 4 - 3e6: 01 c0 rjmp .+2 ; 0x3ea - 3e8: 80 e0 ldi r24, 0x00 ; 0 - 3ea: 80 93 41 3f sts 0x3F41, r24 ; 0x803f41 - default: - state = CM_MSGSYNC_STATE_INIT; - break; - } - - return 1; - 3ee: 81 e0 ldi r24, 0x01 ; 1 - 3f0: 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; - 3f2: 08 95 ret - - case CM_MSGSYNC_STATE_5: - state = CM_MSGSYNC_STATE_INIT; - 3f4: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 - return 0; - 3f8: 80 e0 ldi r24, 0x00 ; 0 - 3fa: 90 e0 ldi r25, 0x00 ; 0 - 3fc: 08 95 ret - break; - - default: - state = CM_MSGSYNC_STATE_INIT; - 3fe: 10 92 41 3f sts 0x3F41, r1 ; 0x803f41 - break; - } - - return 1; - 402: 81 e0 ldi r24, 0x01 ; 1 - 404: 90 e0 ldi r25, 0x00 ; 0 - - -} - 406: 08 95 ret - -00000408 : - - 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) - 408: 90 91 40 3f lds r25, 0x3F40 ; 0x803f40 - 40c: 93 30 cpi r25, 0x03 ; 3 - 40e: c1 f0 breq .+48 ; 0x440 - 410: 28 f4 brcc .+10 ; 0x41c - 412: 99 23 and r25, r25 - 414: 41 f0 breq .+16 ; 0x426 - 416: 91 30 cpi r25, 0x01 ; 1 - 418: 69 f0 breq .+26 ; 0x434 - 41a: 42 c0 rjmp .+132 ; 0x4a0 - 41c: 94 30 cpi r25, 0x04 ; 4 - 41e: c1 f0 breq .+48 ; 0x450 - 420: 95 30 cpi r25, 0x05 ; 5 - 422: 01 f1 breq .+64 ; 0x464 - 424: 3d c0 rjmp .+122 ; 0x4a0 - { - case CM_MSG_WAIT_FOR_STARTCODE: - if(!cm_msgSync_Byte_DecodeSC(rx_byte)) state = CM_MSG_DECODE_STATE_GET_SIZE_BYTE; - 426: a1 df rcall .-190 ; 0x36a - 428: 89 2b or r24, r25 - 42a: d1 f5 brne .+116 ; 0x4a0 - 42c: 81 e0 ldi r24, 0x01 ; 1 - 42e: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - 432: 36 c0 rjmp .+108 ; 0x4a0 - break; - - case CM_MSG_DECODE_STATE_GET_SIZE_BYTE: - msg.msg_data_size = rx_byte; - 434: 80 93 09 3f sts 0x3F09, r24 ; 0x803f09 - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE1; - 438: 83 e0 ldi r24, 0x03 ; 3 - 43a: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - - break; - 43e: 30 c0 rjmp .+96 ; 0x4a0 - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE1: - msg.msg_data_crc = (rx_byte << 8) & 0xff00; - 440: e9 e0 ldi r30, 0x09 ; 9 - 442: ff e3 ldi r31, 0x3F ; 63 - 444: 11 82 std Z+1, r1 ; 0x01 - 446: 82 83 std Z+2, r24 ; 0x02 - state = CM_MSG_DECODE_STATE_GET_CRC_BYTE2; - 448: 84 e0 ldi r24, 0x04 ; 4 - 44a: 80 93 40 3f sts 0x3F40, r24 ; 0x803f40 - break; - 44e: 28 c0 rjmp .+80 ; 0x4a0 - - case CM_MSG_DECODE_STATE_GET_CRC_BYTE2: - msg.msg_data_crc |= rx_byte & 0xff; - 450: e9 e0 ldi r30, 0x09 ; 9 - 452: ff e3 ldi r31, 0x3F ; 63 - 454: 21 81 ldd r18, Z+1 ; 0x01 - 456: 32 81 ldd r19, Z+2 ; 0x02 - 458: 28 2b or r18, r24 - 45a: 21 83 std Z+1, r18 ; 0x01 - 45c: 32 83 std Z+2, r19 ; 0x02 - state = CM_MSG_DECODE_STATE_GET_DATA; - 45e: 95 e0 ldi r25, 0x05 ; 5 - 460: 90 93 40 3f sts 0x3F40, r25 ; 0x803f40 - - case CM_MSG_DECODE_STATE_GET_DATA: - msg.msg_data[data_bytes_idx] = rx_byte; - 464: 90 91 08 3f lds r25, 0x3F08 ; 0x803f08 - 468: e9 2f mov r30, r25 - 46a: f0 e0 ldi r31, 0x00 ; 0 - 46c: e7 5f subi r30, 0xF7 ; 247 - 46e: f0 4c sbci r31, 0xC0 ; 192 - 470: 83 83 std Z+3, r24 ; 0x03 - data_bytes_idx++; - 472: 81 e0 ldi r24, 0x01 ; 1 - 474: 89 0f add r24, r25 - 476: 80 93 08 3f sts 0x3F08, r24 ; 0x803f08 - if(data_bytes_idx > msg.msg_data_size){ - 47a: 90 91 09 3f lds r25, 0x3F09 ; 0x803f09 - 47e: 98 17 cp r25, r24 - 480: 78 f4 brcc .+30 ; 0x4a0 - // calculate CRC.. - - // Run function pointer msg evt.. - s_msg_cmplete_evt_fpt(s_msg_cmplete_evt_inst,&(msg.msg_data[0])); - 482: e0 91 44 3f lds r30, 0x3F44 ; 0x803f44 - 486: f0 91 45 3f lds r31, 0x3F45 ; 0x803f45 - 48a: 6c e0 ldi r22, 0x0C ; 12 - 48c: 7f e3 ldi r23, 0x3F ; 63 - 48e: 80 91 42 3f lds r24, 0x3F42 ; 0x803f42 - 492: 90 91 43 3f lds r25, 0x3F43 ; 0x803f43 - 496: 09 95 icall - state = CM_MSG_WAIT_FOR_STARTCODE; - 498: 10 92 40 3f sts 0x3F40, r1 ; 0x803f40 - data_bytes_idx = 0; - 49c: 10 92 08 3f sts 0x3F08, r1 ; 0x803f08 - - } - break; - } - return 0; -} - 4a0: 80 e0 ldi r24, 0x00 ; 0 - 4a2: 90 e0 ldi r25, 0x00 ; 0 - 4a4: 08 95 ret - -000004a6 : - -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; - 4a6: 00 97 sbiw r24, 0x00 ; 0 - 4a8: 59 f0 breq .+22 ; 0x4c0 - 4aa: 61 15 cp r22, r1 - 4ac: 71 05 cpc r23, r1 - 4ae: 41 f0 breq .+16 ; 0x4c0 - - s_msg_cmplete_evt_inst = msg_cmplete_evt_inst; - 4b0: 80 93 42 3f sts 0x3F42, r24 ; 0x803f42 - 4b4: 90 93 43 3f sts 0x3F43, r25 ; 0x803f43 - s_msg_cmplete_evt_fpt = msg_cmplete_evt_fp; - 4b8: 60 93 44 3f sts 0x3F44, r22 ; 0x803f44 - 4bc: 70 93 45 3f sts 0x3F45, r23 ; 0x803f45 - 4c0: 08 95 ret - -000004c2 : - } - - // Send status back maybe.. - - //Force state machine to load new settings from eeprom: - inst->state_next = STORNO_APP_PROGRAM_OSC; - 4c2: fc 01 movw r30, r24 - 4c4: 11 82 std Z+1, r1 ; 0x01 - 4c6: 08 95 ret - -000004c8 : - -} - -int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ - - inst->pll_param_ptr = rxData; - 4c8: fc 01 movw r30, r24 - 4ca: 64 83 std Z+4, r22 ; 0x04 - 4cc: 75 83 std Z+5, r23 ; 0x05 - - programPLL_Parameters(inst); - 4ce: f9 df rcall .-14 ; 0x4c2 - - return 0; - -} - 4d0: 80 e0 ldi r24, 0x00 ; 0 - 4d2: 90 e0 ldi r25, 0x00 ; 0 - 4d4: 08 95 ret - -000004d6 : - -void cqm6xx_app_init(storno_xtal_app_t *inst, void *si5351_dev){ - 4d6: cf 93 push r28 - 4d8: df 93 push r29 - - if(si5351_dev == NULL) return; - 4da: 61 15 cp r22, r1 - 4dc: 71 05 cpc r23, r1 - 4de: 71 f0 breq .+28 ; 0x4fc - if(inst == NULL)return; - 4e0: 00 97 sbiw r24, 0x00 ; 0 - 4e2: 61 f0 breq .+24 ; 0x4fc - 4e4: ec 01 movw r28, r24 - - inst->state_next = STORNO_APP_PROGRAM_OSC; - 4e6: 19 82 std Y+1, r1 ; 0x01 - inst->state_now = STORNO_APP_PROGRAM_OSC; - 4e8: 18 82 st Y, r1 - - inst->si5351_dev = si5351_dev; - 4ea: 6a 83 std Y+2, r22 ; 0x02 - 4ec: 7b 83 std Y+3, r23 ; 0x03 - - //cm_uart_init(inst,(get_UART_Event_fpt)uart_rx_event); - cm_MsgCompleteEvt_Register(inst,(Get_msgComplete_Event_fpt)uart_rx_event); - 4ee: 64 e6 ldi r22, 0x64 ; 100 - 4f0: 72 e0 ldi r23, 0x02 ; 2 - 4f2: d9 df rcall .-78 ; 0x4a6 - cm_uart_init(inst,(get_UART_Event_fpt)cm_msg_DecodeMsg_Byte); - 4f4: 64 e0 ldi r22, 0x04 ; 4 - 4f6: 72 e0 ldi r23, 0x02 ; 2 - 4f8: ce 01 movw r24, r28 - 4fa: c8 de rcall .-624 ; 0x28c - - 4fc: df 91 pop r29 - 4fe: cf 91 pop r28 - 500: 08 95 ret - -00000502
: - return; - } -} - int main(void) { - 502: cf 93 push r28 - 504: df 93 push r29 - 506: cd b7 in r28, 0x3d ; 61 - 508: de b7 in r29, 0x3e ; 62 - 50a: cb 55 subi r28, 0x5B ; 91 - 50c: d1 09 sbc r29, r1 - 50e: cd bf out 0x3d, r28 ; 61 - 510: de bf out 0x3e, r29 ; 62 - /* Replace with your application code */ + - // Init Periphials - cm_i2c_init(NULL); - 512: 80 e0 ldi r24, 0x00 ; 0 - 514: 90 e0 ldi r25, 0x00 ; 0 - 516: 68 de rcall .-816 ; 0x1e8 - - // Add devices - cm_i2c_device_t si5351_i2c; - cm_i2c_addDev(&si5351_i2c,NULL,0x60); - 518: 40 e6 ldi r20, 0x60 ; 96 - 51a: 60 e0 ldi r22, 0x00 ; 0 - 51c: 70 e0 ldi r23, 0x00 ; 0 - 51e: ce 01 movw r24, r28 - 520: 01 96 adiw r24, 0x01 ; 1 - 522: 7c de rcall .-776 ; 0x21c - - // Init Devices: - si5351_driver si5351_dev; - cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - 524: 4c e2 ldi r20, 0x2C ; 44 - 526: 51 e0 ldi r21, 0x01 ; 1 - 528: be 01 movw r22, r28 - 52a: 6f 5f subi r22, 0xFF ; 255 - 52c: 7f 4f sbci r23, 0xFF ; 255 - 52e: ce 01 movw r24, r28 - 530: 04 96 adiw r24, 0x04 ; 4 - 532: 4b d0 rcall .+150 ; 0x5ca - - cqm6xx_app_init(&storno_xtal_app, &si5351_dev); - 534: be 01 movw r22, r28 - 536: 6c 5f subi r22, 0xFC ; 252 - 538: 7f 4f sbci r23, 0xFF ; 255 - 53a: 86 e4 ldi r24, 0x46 ; 70 - 53c: 9f e3 ldi r25, 0x3F ; 63 - 53e: cb df rcall .-106 ; 0x4d6 + cm_EEPROM_read(0x00,data,1); + 108: 41 e0 ldi r20, 0x01 ; 1 + 10a: 6d e1 ldi r22, 0x1D ; 29 + 10c: 7f e3 ldi r23, 0x3F ; 63 + 10e: 80 e0 ldi r24, 0x00 ; 0 + 110: 90 e0 ldi r25, 0x00 ; 0 + 112: c7 df rcall .-114 ; 0xa2 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 540: 2a e6 ldi r18, 0x6A ; 106 - 542: 84 e0 ldi r24, 0x04 ; 4 - 544: 91 e0 ldi r25, 0x01 ; 1 - 546: 21 50 subi r18, 0x01 ; 1 - 548: 80 40 sbci r24, 0x00 ; 0 - 54a: 90 40 sbci r25, 0x00 ; 0 - 54c: e1 f7 brne .-8 ; 0x546 - 54e: 00 c0 rjmp .+0 ; 0x550 - 550: f7 cf rjmp .-18 ; 0x540 + 114: 2a e6 ldi r18, 0x6A ; 106 + 116: 84 e0 ldi r24, 0x04 ; 4 + 118: 91 e0 ldi r25, 0x01 ; 1 + 11a: 21 50 subi r18, 0x01 ; 1 + 11c: 80 40 sbci r24, 0x00 ; 0 + 11e: 90 40 sbci r25, 0x00 ; 0 + 120: e1 f7 brne .-8 ; 0x11a + 122: 00 c0 rjmp .+0 ; 0x124 + + _delay_ms(100); + + cm_EEPROM_write(0x00,data_set,1); + 124: 41 e0 ldi r20, 0x01 ; 1 + 126: 60 e0 ldi r22, 0x00 ; 0 + 128: 7f e3 ldi r23, 0x3F ; 63 + 12a: 80 e0 ldi r24, 0x00 ; 0 + 12c: 90 e0 ldi r25, 0x00 ; 0 + 12e: 9e df rcall .-196 ; 0x6c -00000552 : + while (1) + { - // Read Device Status register: - readRegister(inst,0x00, (uint8_t *) &inst->device_data.deviceStatus, sizeof(si5351_deviceStat_t)); + //cqm6xx_app_statemachine(&storno_xtal_app); + if(PORTA.IN == 0x0d){ + 130: 80 91 08 04 lds r24, 0x0408 ; 0x800408 <__RODATA_PM_OFFSET__+0x7f8408> + 134: 8d 30 cpi r24, 0x0D ; 13 + 136: 59 f4 brne .+22 ; 0x14e + + static volatile uint8_t counter = 0; + + counter++; + 138: 80 91 1c 3f lds r24, 0x3F1C ; 0x803f1c + 13c: 8f 5f subi r24, 0xFF ; 255 + 13e: 80 93 1c 3f sts 0x3F1C, r24 ; 0x803f1c + + if (counter >= 50) + 142: 80 91 1c 3f lds r24, 0x3F1C ; 0x803f1c + 146: 82 33 cpi r24, 0x32 ; 50 + 148: 10 f0 brcs .+4 ; 0x14e + { + counter = 0; + 14a: 10 92 1c 3f sts 0x3F1C, r1 ; 0x803f1c + 14e: 2a e6 ldi r18, 0x6A ; 106 + 150: 84 e0 ldi r24, 0x04 ; 4 + 152: 91 e0 ldi r25, 0x01 ; 1 + 154: 21 50 subi r18, 0x01 ; 1 + 156: 80 40 sbci r24, 0x00 ; 0 + 158: 90 40 sbci r25, 0x00 ; 0 + 15a: e1 f7 brne .-8 ; 0x154 + 15c: 00 c0 rjmp .+0 ; 0x15e + 15e: e8 cf rjmp .-48 ; 0x130 - return inst->device_data.deviceStatus.REVID; -} - 552: 8f 92 push r8 - 554: 9f 92 push r9 - 556: af 92 push r10 - 558: bf 92 push r11 - 55a: cf 92 push r12 - 55c: df 92 push r13 - 55e: ef 92 push r14 - 560: ff 92 push r15 - 562: 0f 93 push r16 - 564: 1f 93 push r17 - 566: cf 93 push r28 - 568: df 93 push r29 - 56a: ec 01 movw r28, r24 - 56c: 86 2e mov r8, r22 - 56e: 5a 01 movw r10, r20 - 570: 68 01 movw r12, r16 - 572: 79 01 movw r14, r18 - 574: c8 01 movw r24, r16 - 576: 01 96 adiw r24, 0x01 ; 1 - 578: c9 d0 rcall .+402 ; 0x70c - 57a: 98 2e mov r9, r24 - 57c: 19 2f mov r17, r25 - 57e: fc 01 movw r30, r24 - 580: 81 92 st Z+, r8 - 582: cf 01 movw r24, r30 - 584: a6 01 movw r20, r12 - 586: b5 01 movw r22, r10 - 588: e2 d1 rcall .+964 ; 0x94e - 58a: ea 81 ldd r30, Y+2 ; 0x02 - 58c: fb 81 ldd r31, Y+3 ; 0x03 - 58e: a7 01 movw r20, r14 - 590: 96 01 movw r18, r12 - 592: 2f 5f subi r18, 0xFF ; 255 - 594: 3f 4f sbci r19, 0xFF ; 255 - 596: 4f 4f sbci r20, 0xFF ; 255 - 598: 5f 4f sbci r21, 0xFF ; 255 - 59a: 01 e0 ldi r16, 0x01 ; 1 - 59c: 69 2d mov r22, r9 - 59e: 71 2f mov r23, r17 - 5a0: 88 81 ld r24, Y - 5a2: 99 81 ldd r25, Y+1 ; 0x01 - 5a4: 09 95 icall - 5a6: 89 2d mov r24, r9 - 5a8: 91 2f mov r25, r17 - 5aa: 48 d1 rcall .+656 ; 0x83c - 5ac: 80 e0 ldi r24, 0x00 ; 0 - 5ae: 90 e0 ldi r25, 0x00 ; 0 - 5b0: df 91 pop r29 - 5b2: cf 91 pop r28 - 5b4: 1f 91 pop r17 - 5b6: 0f 91 pop r16 - 5b8: ff 90 pop r15 - 5ba: ef 90 pop r14 - 5bc: df 90 pop r13 - 5be: cf 90 pop r12 - 5c0: bf 90 pop r11 - 5c2: af 90 pop r10 - 5c4: 9f 90 pop r9 - 5c6: 8f 90 pop r8 - 5c8: 08 95 ret +00000160 : + 160: 03 d0 rcall .+6 ; 0x168 + 162: 80 81 ld r24, Z + 164: 99 27 eor r25, r25 + 166: 08 95 ret -000005ca : +00000168 : + 168: fc 01 movw r30, r24 + 16a: e0 50 subi r30, 0x00 ; 0 + 16c: fc 4e sbci r31, 0xEC ; 236 + 16e: 08 95 ret -int cm_si5351_init(si5351_driver *inst, void *i2c_transfer_inst, setGet_I2C_Event_fpt i2c_transfer_evt){ - 5ca: ef 92 push r14 - 5cc: ff 92 push r15 - 5ce: 0f 93 push r16 - 5d0: 1f 93 push r17 - 5d2: cf 93 push r28 - 5d4: df 93 push r29 - 5d6: 1f 92 push r1 - 5d8: cd b7 in r28, 0x3d ; 61 - 5da: de b7 in r29, 0x3e ; 62 +00000170 : + 170: 26 2f mov r18, r22 - if(inst == NULL)return -1; - 5dc: 00 97 sbiw r24, 0x00 ; 0 - 5de: 09 f4 brne .+2 ; 0x5e2 - 5e0: 85 c0 rjmp .+266 ; 0x6ec - if(i2c_transfer_inst == NULL)return -1; - 5e2: 61 15 cp r22, r1 - 5e4: 71 05 cpc r23, r1 - 5e6: 09 f4 brne .+2 ; 0x5ea - 5e8: 84 c0 rjmp .+264 ; 0x6f2 - if(i2c_transfer_evt == NULL)return -1; - 5ea: 41 15 cp r20, r1 - 5ec: 51 05 cpc r21, r1 - 5ee: 09 f4 brne .+2 ; 0x5f2 - 5f0: 83 c0 rjmp .+262 ; 0x6f8 - 5f2: 7c 01 movw r14, r24 +00000172 : + 172: af 93 push r26 + 174: bf 93 push r27 + 176: e0 e0 ldi r30, 0x00 ; 0 + 178: f0 e1 ldi r31, 0x10 ; 16 + 17a: 32 81 ldd r19, Z+2 ; 0x02 + 17c: 31 fd sbrc r19, 1 + 17e: fd cf rjmp .-6 ; 0x17a + 180: dc 01 movw r26, r24 + 182: a0 50 subi r26, 0x00 ; 0 + 184: bc 4e sbci r27, 0xEC ; 236 + 186: 2c 93 st X, r18 + 188: 2d e9 ldi r18, 0x9D ; 157 + 18a: 24 bf out 0x34, r18 ; 52 + 18c: 23 e0 ldi r18, 0x03 ; 3 + 18e: 20 83 st Z, r18 + 190: 01 96 adiw r24, 0x01 ; 1 + 192: bf 91 pop r27 + 194: af 91 pop r26 + 196: 08 95 ret - inst->i2c_transfer_inst = i2c_transfer_inst; - 5f4: dc 01 movw r26, r24 - 5f6: 6d 93 st X+, r22 - 5f8: 7c 93 st X, r23 - 5fa: 11 97 sbiw r26, 0x01 ; 1 - inst->i2c_transfer_evt = i2c_transfer_evt; - 5fc: 12 96 adiw r26, 0x02 ; 2 - 5fe: 4d 93 st X+, r20 - 600: 5c 93 st X, r21 - 602: 13 97 sbiw r26, 0x03 ; 3 +00000198 <_exit>: + 198: f8 94 cli - int ret = 0; - - memset(&(inst->device_data),0x00,sizeof(si5351_data)); - 604: fc 01 movw r30, r24 - 606: 34 96 adiw r30, 0x04 ; 4 - 608: 84 e5 ldi r24, 0x54 ; 84 - 60a: df 01 movw r26, r30 - 60c: 1d 92 st X+, r1 - 60e: 8a 95 dec r24 - 610: e9 f7 brne .-6 ; 0x60c - - /* Disable all outputs setting CLKx_DIS high */ - uint8_t temp = 0xff; - 612: 8f ef ldi r24, 0xFF ; 255 - 614: 89 83 std Y+1, r24 ; 0x01 - writeRegister(inst,SI5351_REG_OUTPUT_ENABLE_CONTROL,&temp,1); - 616: 01 e0 ldi r16, 0x01 ; 1 - 618: 10 e0 ldi r17, 0x00 ; 0 - 61a: 20 e0 ldi r18, 0x00 ; 0 - 61c: 30 e0 ldi r19, 0x00 ; 0 - 61e: ae 01 movw r20, r28 - 620: 4f 5f subi r20, 0xFF ; 255 - 622: 5f 4f sbci r21, 0xFF ; 255 - 624: 63 e0 ldi r22, 0x03 ; 3 - 626: c7 01 movw r24, r14 - 628: 94 df rcall .-216 ; 0x552 - - /* Power down all output drivers */ - temp = 0x80; - 62a: 80 e8 ldi r24, 0x80 ; 128 - 62c: 89 83 std Y+1, r24 ; 0x01 - writeRegister(inst,SI5351_REG_CLK_0_CONTROL,&temp,1); - 62e: 01 e0 ldi r16, 0x01 ; 1 - 630: 10 e0 ldi r17, 0x00 ; 0 - 632: 20 e0 ldi r18, 0x00 ; 0 - 634: 30 e0 ldi r19, 0x00 ; 0 - 636: ae 01 movw r20, r28 - 638: 4f 5f subi r20, 0xFF ; 255 - 63a: 5f 4f sbci r21, 0xFF ; 255 - 63c: 60 e1 ldi r22, 0x10 ; 16 - 63e: c7 01 movw r24, r14 - 640: 88 df rcall .-240 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_1_CONTROL,&temp,1); - 642: 01 e0 ldi r16, 0x01 ; 1 - 644: 10 e0 ldi r17, 0x00 ; 0 - 646: 20 e0 ldi r18, 0x00 ; 0 - 648: 30 e0 ldi r19, 0x00 ; 0 - 64a: ae 01 movw r20, r28 - 64c: 4f 5f subi r20, 0xFF ; 255 - 64e: 5f 4f sbci r21, 0xFF ; 255 - 650: 61 e1 ldi r22, 0x11 ; 17 - 652: c7 01 movw r24, r14 - 654: 7e df rcall .-260 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_2_CONTROL,&temp,1); - 656: 01 e0 ldi r16, 0x01 ; 1 - 658: 10 e0 ldi r17, 0x00 ; 0 - 65a: 20 e0 ldi r18, 0x00 ; 0 - 65c: 30 e0 ldi r19, 0x00 ; 0 - 65e: ae 01 movw r20, r28 - 660: 4f 5f subi r20, 0xFF ; 255 - 662: 5f 4f sbci r21, 0xFF ; 255 - 664: 62 e1 ldi r22, 0x12 ; 18 - 666: c7 01 movw r24, r14 - 668: 74 df rcall .-280 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_3_CONTROL,&temp,1); - 66a: 01 e0 ldi r16, 0x01 ; 1 - 66c: 10 e0 ldi r17, 0x00 ; 0 - 66e: 20 e0 ldi r18, 0x00 ; 0 - 670: 30 e0 ldi r19, 0x00 ; 0 - 672: ae 01 movw r20, r28 - 674: 4f 5f subi r20, 0xFF ; 255 - 676: 5f 4f sbci r21, 0xFF ; 255 - 678: 63 e1 ldi r22, 0x13 ; 19 - 67a: c7 01 movw r24, r14 - 67c: 6a df rcall .-300 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_4_CONTROL,&temp,1); - 67e: 01 e0 ldi r16, 0x01 ; 1 - 680: 10 e0 ldi r17, 0x00 ; 0 - 682: 20 e0 ldi r18, 0x00 ; 0 - 684: 30 e0 ldi r19, 0x00 ; 0 - 686: ae 01 movw r20, r28 - 688: 4f 5f subi r20, 0xFF ; 255 - 68a: 5f 4f sbci r21, 0xFF ; 255 - 68c: 64 e1 ldi r22, 0x14 ; 20 - 68e: c7 01 movw r24, r14 - 690: 60 df rcall .-320 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_5_CONTROL,&temp,1); - 692: 01 e0 ldi r16, 0x01 ; 1 - 694: 10 e0 ldi r17, 0x00 ; 0 - 696: 20 e0 ldi r18, 0x00 ; 0 - 698: 30 e0 ldi r19, 0x00 ; 0 - 69a: ae 01 movw r20, r28 - 69c: 4f 5f subi r20, 0xFF ; 255 - 69e: 5f 4f sbci r21, 0xFF ; 255 - 6a0: 65 e1 ldi r22, 0x15 ; 21 - 6a2: c7 01 movw r24, r14 - 6a4: 56 df rcall .-340 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_6_CONTROL,&temp,1); - 6a6: 01 e0 ldi r16, 0x01 ; 1 - 6a8: 10 e0 ldi r17, 0x00 ; 0 - 6aa: 20 e0 ldi r18, 0x00 ; 0 - 6ac: 30 e0 ldi r19, 0x00 ; 0 - 6ae: ae 01 movw r20, r28 - 6b0: 4f 5f subi r20, 0xFF ; 255 - 6b2: 5f 4f sbci r21, 0xFF ; 255 - 6b4: 66 e1 ldi r22, 0x16 ; 22 - 6b6: c7 01 movw r24, r14 - 6b8: 4c df rcall .-360 ; 0x552 - writeRegister(inst,SI5351_REG_CLK_7_CONTROL,&temp,1); - 6ba: 01 e0 ldi r16, 0x01 ; 1 - 6bc: 10 e0 ldi r17, 0x00 ; 0 - 6be: 20 e0 ldi r18, 0x00 ; 0 - 6c0: 30 e0 ldi r19, 0x00 ; 0 - 6c2: ae 01 movw r20, r28 - 6c4: 4f 5f subi r20, 0xFF ; 255 - 6c6: 5f 4f sbci r21, 0xFF ; 255 - 6c8: 67 e1 ldi r22, 0x17 ; 23 - 6ca: c7 01 movw r24, r14 - 6cc: 42 df rcall .-380 ; 0x552 - - temp = SI5351_CRYSTAL_LOAD_10PF; - 6ce: 80 ec ldi r24, 0xC0 ; 192 - 6d0: 89 83 std Y+1, r24 ; 0x01 - - writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); - 6d2: 01 e0 ldi r16, 0x01 ; 1 - 6d4: 10 e0 ldi r17, 0x00 ; 0 - 6d6: 20 e0 ldi r18, 0x00 ; 0 - 6d8: 30 e0 ldi r19, 0x00 ; 0 - 6da: ae 01 movw r20, r28 - 6dc: 4f 5f subi r20, 0xFF ; 255 - 6de: 5f 4f sbci r21, 0xFF ; 255 - 6e0: 67 eb ldi r22, 0xB7 ; 183 - 6e2: c7 01 movw r24, r14 - 6e4: 36 df rcall .-404 ; 0x552 - return ret; - 6e6: 80 e0 ldi r24, 0x00 ; 0 - 6e8: 90 e0 ldi r25, 0x00 ; 0 - 6ea: 08 c0 rjmp .+16 ; 0x6fc - 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; - 6ec: 8f ef ldi r24, 0xFF ; 255 - 6ee: 9f ef ldi r25, 0xFF ; 255 - 6f0: 05 c0 rjmp .+10 ; 0x6fc - if(i2c_transfer_inst == NULL)return -1; - 6f2: 8f ef ldi r24, 0xFF ; 255 - 6f4: 9f ef ldi r25, 0xFF ; 255 - 6f6: 02 c0 rjmp .+4 ; 0x6fc - if(i2c_transfer_evt == NULL)return -1; - 6f8: 8f ef ldi r24, 0xFF ; 255 - 6fa: 9f ef ldi r25, 0xFF ; 255 - writeRegister(inst,SI5351_REG_CRYSTAL_LOAD_CAPACITANCE,&temp,1); - return ret; - - - -} - 6fc: 0f 90 pop r0 - 6fe: df 91 pop r29 - 700: cf 91 pop r28 - 702: 1f 91 pop r17 - 704: 0f 91 pop r16 - 706: ff 90 pop r15 - 708: ef 90 pop r14 - 70a: 08 95 ret - -0000070c : - 70c: 0f 93 push r16 - 70e: 1f 93 push r17 - 710: cf 93 push r28 - 712: df 93 push r29 - 714: 82 30 cpi r24, 0x02 ; 2 - 716: 91 05 cpc r25, r1 - 718: 10 f4 brcc .+4 ; 0x71e - 71a: 82 e0 ldi r24, 0x02 ; 2 - 71c: 90 e0 ldi r25, 0x00 ; 0 - 71e: e0 91 4e 3f lds r30, 0x3F4E ; 0x803f4e <__flp> - 722: f0 91 4f 3f lds r31, 0x3F4F ; 0x803f4f <__flp+0x1> - 726: 20 e0 ldi r18, 0x00 ; 0 - 728: 30 e0 ldi r19, 0x00 ; 0 - 72a: a0 e0 ldi r26, 0x00 ; 0 - 72c: b0 e0 ldi r27, 0x00 ; 0 - 72e: 30 97 sbiw r30, 0x00 ; 0 - 730: 19 f1 breq .+70 ; 0x778 - 732: 40 81 ld r20, Z - 734: 51 81 ldd r21, Z+1 ; 0x01 - 736: 02 81 ldd r16, Z+2 ; 0x02 - 738: 13 81 ldd r17, Z+3 ; 0x03 - 73a: 48 17 cp r20, r24 - 73c: 59 07 cpc r21, r25 - 73e: c8 f0 brcs .+50 ; 0x772 - 740: 84 17 cp r24, r20 - 742: 95 07 cpc r25, r21 - 744: 69 f4 brne .+26 ; 0x760 - 746: 10 97 sbiw r26, 0x00 ; 0 - 748: 31 f0 breq .+12 ; 0x756 - 74a: 12 96 adiw r26, 0x02 ; 2 - 74c: 0c 93 st X, r16 - 74e: 12 97 sbiw r26, 0x02 ; 2 - 750: 13 96 adiw r26, 0x03 ; 3 - 752: 1c 93 st X, r17 - 754: 27 c0 rjmp .+78 ; 0x7a4 - 756: 00 93 4e 3f sts 0x3F4E, r16 ; 0x803f4e <__flp> - 75a: 10 93 4f 3f sts 0x3F4F, r17 ; 0x803f4f <__flp+0x1> - 75e: 22 c0 rjmp .+68 ; 0x7a4 - 760: 21 15 cp r18, r1 - 762: 31 05 cpc r19, r1 - 764: 19 f0 breq .+6 ; 0x76c - 766: 42 17 cp r20, r18 - 768: 53 07 cpc r21, r19 - 76a: 18 f4 brcc .+6 ; 0x772 - 76c: 9a 01 movw r18, r20 - 76e: bd 01 movw r22, r26 - 770: ef 01 movw r28, r30 - 772: df 01 movw r26, r30 - 774: f8 01 movw r30, r16 - 776: db cf rjmp .-74 ; 0x72e - 778: 21 15 cp r18, r1 - 77a: 31 05 cpc r19, r1 - 77c: f9 f0 breq .+62 ; 0x7bc - 77e: 28 1b sub r18, r24 - 780: 39 0b sbc r19, r25 - 782: 24 30 cpi r18, 0x04 ; 4 - 784: 31 05 cpc r19, r1 - 786: 80 f4 brcc .+32 ; 0x7a8 - 788: 8a 81 ldd r24, Y+2 ; 0x02 - 78a: 9b 81 ldd r25, Y+3 ; 0x03 - 78c: 61 15 cp r22, r1 - 78e: 71 05 cpc r23, r1 - 790: 21 f0 breq .+8 ; 0x79a - 792: fb 01 movw r30, r22 - 794: 82 83 std Z+2, r24 ; 0x02 - 796: 93 83 std Z+3, r25 ; 0x03 - 798: 04 c0 rjmp .+8 ; 0x7a2 - 79a: 80 93 4e 3f sts 0x3F4E, r24 ; 0x803f4e <__flp> - 79e: 90 93 4f 3f sts 0x3F4F, r25 ; 0x803f4f <__flp+0x1> - 7a2: fe 01 movw r30, r28 - 7a4: 32 96 adiw r30, 0x02 ; 2 - 7a6: 44 c0 rjmp .+136 ; 0x830 - 7a8: fe 01 movw r30, r28 - 7aa: e2 0f add r30, r18 - 7ac: f3 1f adc r31, r19 - 7ae: 81 93 st Z+, r24 - 7b0: 91 93 st Z+, r25 - 7b2: 22 50 subi r18, 0x02 ; 2 - 7b4: 31 09 sbc r19, r1 - 7b6: 28 83 st Y, r18 - 7b8: 39 83 std Y+1, r19 ; 0x01 - 7ba: 3a c0 rjmp .+116 ; 0x830 - 7bc: 20 91 4c 3f lds r18, 0x3F4C ; 0x803f4c <__brkval> - 7c0: 30 91 4d 3f lds r19, 0x3F4D ; 0x803f4d <__brkval+0x1> - 7c4: 23 2b or r18, r19 - 7c6: 41 f4 brne .+16 ; 0x7d8 - 7c8: 20 91 02 3f lds r18, 0x3F02 ; 0x803f02 <__malloc_heap_start> - 7cc: 30 91 03 3f lds r19, 0x3F03 ; 0x803f03 <__malloc_heap_start+0x1> - 7d0: 20 93 4c 3f sts 0x3F4C, r18 ; 0x803f4c <__brkval> - 7d4: 30 93 4d 3f sts 0x3F4D, r19 ; 0x803f4d <__brkval+0x1> - 7d8: 20 91 00 3f lds r18, 0x3F00 ; 0x803f00 <__DATA_REGION_ORIGIN__> - 7dc: 30 91 01 3f lds r19, 0x3F01 ; 0x803f01 <__DATA_REGION_ORIGIN__+0x1> - 7e0: 21 15 cp r18, r1 - 7e2: 31 05 cpc r19, r1 - 7e4: 41 f4 brne .+16 ; 0x7f6 - 7e6: 2d b7 in r18, 0x3d ; 61 - 7e8: 3e b7 in r19, 0x3e ; 62 - 7ea: 40 91 04 3f lds r20, 0x3F04 ; 0x803f04 <__malloc_margin> - 7ee: 50 91 05 3f lds r21, 0x3F05 ; 0x803f05 <__malloc_margin+0x1> - 7f2: 24 1b sub r18, r20 - 7f4: 35 0b sbc r19, r21 - 7f6: e0 91 4c 3f lds r30, 0x3F4C ; 0x803f4c <__brkval> - 7fa: f0 91 4d 3f lds r31, 0x3F4D ; 0x803f4d <__brkval+0x1> - 7fe: e2 17 cp r30, r18 - 800: f3 07 cpc r31, r19 - 802: a0 f4 brcc .+40 ; 0x82c - 804: 2e 1b sub r18, r30 - 806: 3f 0b sbc r19, r31 - 808: 28 17 cp r18, r24 - 80a: 39 07 cpc r19, r25 - 80c: 78 f0 brcs .+30 ; 0x82c - 80e: ac 01 movw r20, r24 - 810: 4e 5f subi r20, 0xFE ; 254 - 812: 5f 4f sbci r21, 0xFF ; 255 - 814: 24 17 cp r18, r20 - 816: 35 07 cpc r19, r21 - 818: 48 f0 brcs .+18 ; 0x82c - 81a: 4e 0f add r20, r30 - 81c: 5f 1f adc r21, r31 - 81e: 40 93 4c 3f sts 0x3F4C, r20 ; 0x803f4c <__brkval> - 822: 50 93 4d 3f sts 0x3F4D, r21 ; 0x803f4d <__brkval+0x1> - 826: 81 93 st Z+, r24 - 828: 91 93 st Z+, r25 - 82a: 02 c0 rjmp .+4 ; 0x830 - 82c: e0 e0 ldi r30, 0x00 ; 0 - 82e: f0 e0 ldi r31, 0x00 ; 0 - 830: cf 01 movw r24, r30 - 832: df 91 pop r29 - 834: cf 91 pop r28 - 836: 1f 91 pop r17 - 838: 0f 91 pop r16 - 83a: 08 95 ret - -0000083c : - 83c: cf 93 push r28 - 83e: df 93 push r29 - 840: 00 97 sbiw r24, 0x00 ; 0 - 842: 09 f4 brne .+2 ; 0x846 - 844: 81 c0 rjmp .+258 ; 0x948 - 846: fc 01 movw r30, r24 - 848: 32 97 sbiw r30, 0x02 ; 2 - 84a: 12 82 std Z+2, r1 ; 0x02 - 84c: 13 82 std Z+3, r1 ; 0x03 - 84e: a0 91 4e 3f lds r26, 0x3F4E ; 0x803f4e <__flp> - 852: b0 91 4f 3f lds r27, 0x3F4F ; 0x803f4f <__flp+0x1> - 856: 10 97 sbiw r26, 0x00 ; 0 - 858: 81 f4 brne .+32 ; 0x87a - 85a: 20 81 ld r18, Z - 85c: 31 81 ldd r19, Z+1 ; 0x01 - 85e: 82 0f add r24, r18 - 860: 93 1f adc r25, r19 - 862: 20 91 4c 3f lds r18, 0x3F4C ; 0x803f4c <__brkval> - 866: 30 91 4d 3f lds r19, 0x3F4D ; 0x803f4d <__brkval+0x1> - 86a: 28 17 cp r18, r24 - 86c: 39 07 cpc r19, r25 - 86e: 51 f5 brne .+84 ; 0x8c4 - 870: e0 93 4c 3f sts 0x3F4C, r30 ; 0x803f4c <__brkval> - 874: f0 93 4d 3f sts 0x3F4D, r31 ; 0x803f4d <__brkval+0x1> - 878: 67 c0 rjmp .+206 ; 0x948 - 87a: ed 01 movw r28, r26 - 87c: 20 e0 ldi r18, 0x00 ; 0 - 87e: 30 e0 ldi r19, 0x00 ; 0 - 880: ce 17 cp r28, r30 - 882: df 07 cpc r29, r31 - 884: 40 f4 brcc .+16 ; 0x896 - 886: 4a 81 ldd r20, Y+2 ; 0x02 - 888: 5b 81 ldd r21, Y+3 ; 0x03 - 88a: 9e 01 movw r18, r28 - 88c: 41 15 cp r20, r1 - 88e: 51 05 cpc r21, r1 - 890: f1 f0 breq .+60 ; 0x8ce - 892: ea 01 movw r28, r20 - 894: f5 cf rjmp .-22 ; 0x880 - 896: c2 83 std Z+2, r28 ; 0x02 - 898: d3 83 std Z+3, r29 ; 0x03 - 89a: 40 81 ld r20, Z - 89c: 51 81 ldd r21, Z+1 ; 0x01 - 89e: 84 0f add r24, r20 - 8a0: 95 1f adc r25, r21 - 8a2: c8 17 cp r28, r24 - 8a4: d9 07 cpc r29, r25 - 8a6: 59 f4 brne .+22 ; 0x8be - 8a8: 88 81 ld r24, Y - 8aa: 99 81 ldd r25, Y+1 ; 0x01 - 8ac: 84 0f add r24, r20 - 8ae: 95 1f adc r25, r21 - 8b0: 02 96 adiw r24, 0x02 ; 2 - 8b2: 80 83 st Z, r24 - 8b4: 91 83 std Z+1, r25 ; 0x01 - 8b6: 8a 81 ldd r24, Y+2 ; 0x02 - 8b8: 9b 81 ldd r25, Y+3 ; 0x03 - 8ba: 82 83 std Z+2, r24 ; 0x02 - 8bc: 93 83 std Z+3, r25 ; 0x03 - 8be: 21 15 cp r18, r1 - 8c0: 31 05 cpc r19, r1 - 8c2: 29 f4 brne .+10 ; 0x8ce - 8c4: e0 93 4e 3f sts 0x3F4E, r30 ; 0x803f4e <__flp> - 8c8: f0 93 4f 3f sts 0x3F4F, r31 ; 0x803f4f <__flp+0x1> - 8cc: 3d c0 rjmp .+122 ; 0x948 - 8ce: e9 01 movw r28, r18 - 8d0: ea 83 std Y+2, r30 ; 0x02 - 8d2: fb 83 std Y+3, r31 ; 0x03 - 8d4: 49 91 ld r20, Y+ - 8d6: 59 91 ld r21, Y+ - 8d8: c4 0f add r28, r20 - 8da: d5 1f adc r29, r21 - 8dc: ec 17 cp r30, r28 - 8de: fd 07 cpc r31, r29 - 8e0: 61 f4 brne .+24 ; 0x8fa - 8e2: 80 81 ld r24, Z - 8e4: 91 81 ldd r25, Z+1 ; 0x01 - 8e6: 84 0f add r24, r20 - 8e8: 95 1f adc r25, r21 - 8ea: 02 96 adiw r24, 0x02 ; 2 - 8ec: e9 01 movw r28, r18 - 8ee: 88 83 st Y, r24 - 8f0: 99 83 std Y+1, r25 ; 0x01 - 8f2: 82 81 ldd r24, Z+2 ; 0x02 - 8f4: 93 81 ldd r25, Z+3 ; 0x03 - 8f6: 8a 83 std Y+2, r24 ; 0x02 - 8f8: 9b 83 std Y+3, r25 ; 0x03 - 8fa: e0 e0 ldi r30, 0x00 ; 0 - 8fc: f0 e0 ldi r31, 0x00 ; 0 - 8fe: 12 96 adiw r26, 0x02 ; 2 - 900: 8d 91 ld r24, X+ - 902: 9c 91 ld r25, X - 904: 13 97 sbiw r26, 0x03 ; 3 - 906: 00 97 sbiw r24, 0x00 ; 0 - 908: 19 f0 breq .+6 ; 0x910 - 90a: fd 01 movw r30, r26 - 90c: dc 01 movw r26, r24 - 90e: f7 cf rjmp .-18 ; 0x8fe - 910: 8d 91 ld r24, X+ - 912: 9c 91 ld r25, X - 914: 11 97 sbiw r26, 0x01 ; 1 - 916: 9d 01 movw r18, r26 - 918: 2e 5f subi r18, 0xFE ; 254 - 91a: 3f 4f sbci r19, 0xFF ; 255 - 91c: 82 0f add r24, r18 - 91e: 93 1f adc r25, r19 - 920: 20 91 4c 3f lds r18, 0x3F4C ; 0x803f4c <__brkval> - 924: 30 91 4d 3f lds r19, 0x3F4D ; 0x803f4d <__brkval+0x1> - 928: 28 17 cp r18, r24 - 92a: 39 07 cpc r19, r25 - 92c: 69 f4 brne .+26 ; 0x948 - 92e: 30 97 sbiw r30, 0x00 ; 0 - 930: 29 f4 brne .+10 ; 0x93c - 932: 10 92 4e 3f sts 0x3F4E, r1 ; 0x803f4e <__flp> - 936: 10 92 4f 3f sts 0x3F4F, r1 ; 0x803f4f <__flp+0x1> - 93a: 02 c0 rjmp .+4 ; 0x940 - 93c: 12 82 std Z+2, r1 ; 0x02 - 93e: 13 82 std Z+3, r1 ; 0x03 - 940: a0 93 4c 3f sts 0x3F4C, r26 ; 0x803f4c <__brkval> - 944: b0 93 4d 3f sts 0x3F4D, r27 ; 0x803f4d <__brkval+0x1> - 948: df 91 pop r29 - 94a: cf 91 pop r28 - 94c: 08 95 ret - -0000094e : - 94e: fb 01 movw r30, r22 - 950: dc 01 movw r26, r24 - 952: 02 c0 rjmp .+4 ; 0x958 - 954: 01 90 ld r0, Z+ - 956: 0d 92 st X+, r0 - 958: 41 50 subi r20, 0x01 ; 1 - 95a: 50 40 sbci r21, 0x00 ; 0 - 95c: d8 f7 brcc .-10 ; 0x954 - 95e: 08 95 ret - -00000960 <_exit>: - 960: f8 94 cli - -00000962 <__stop_program>: - 962: ff cf rjmp .-2 ; 0x962 <__stop_program> +0000019a <__stop_program>: + 19a: ff cf rjmp .-2 ; 0x19a <__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 55258db..e7edfb6 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.map @@ -42,14 +42,18 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. si5351_driver/si5351_driver.o (__udivmodsi4) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o (exit) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + main.o (__do_copy_data) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) avr_uart_driver/avr_uart.o (__do_clear_bss) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) si5351_driver/si5351_driver.o (malloc) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) si5351_driver/si5351_driver.o (memcpy) -c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) (__do_copy_data) +C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + avr_eeprom_driver/avr_eeprom_driver.o (eeprom_read_byte) +C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + avr_eeprom_driver/avr_eeprom_driver.o (eeprom_write_byte) Allocating common symbols Common symbol size file @@ -65,20 +69,6 @@ Discarded input sections .text 0x00000000 0x0 avr_eeprom_driver/avr_eeprom_driver.o .data 0x00000000 0x0 avr_eeprom_driver/avr_eeprom_driver.o .bss 0x00000000 0x0 avr_eeprom_driver/avr_eeprom_driver.o - .text.cm_EEPROM_write - 0x00000000 0x40 avr_eeprom_driver/avr_eeprom_driver.o - .text.cm_EEPROM_read - 0x00000000 0x34 avr_eeprom_driver/avr_eeprom_driver.o - .debug_info 0x00000000 0x2e9 avr_eeprom_driver/avr_eeprom_driver.o - .debug_abbrev 0x00000000 0x130 avr_eeprom_driver/avr_eeprom_driver.o - .debug_loc 0x00000000 0x3e avr_eeprom_driver/avr_eeprom_driver.o - .debug_aranges - 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o - .debug_ranges 0x00000000 0x18 avr_eeprom_driver/avr_eeprom_driver.o - .debug_line 0x00000000 0x1b1 avr_eeprom_driver/avr_eeprom_driver.o - .debug_str 0x00000000 0x36b avr_eeprom_driver/avr_eeprom_driver.o - .comment 0x00000000 0x31 avr_eeprom_driver/avr_eeprom_driver.o - .debug_frame 0x00000000 0x34 avr_eeprom_driver/avr_eeprom_driver.o .text 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .data 0x00000000 0x0 avr_gpio_driver/avr_gpio.o .bss 0x00000000 0x0 avr_gpio_driver/avr_gpio.o @@ -95,19 +85,49 @@ Discarded input sections 0x00000000 0x30 avr_gpio_driver/avr_gpio.o .debug_ranges 0x00000000 0x20 avr_gpio_driver/avr_gpio.o .debug_line 0x00000000 0x196 avr_gpio_driver/avr_gpio.o - .debug_str 0x00000000 0x319 avr_gpio_driver/avr_gpio.o + .debug_str 0x00000000 0x315 avr_gpio_driver/avr_gpio.o .comment 0x00000000 0x31 avr_gpio_driver/avr_gpio.o .debug_frame 0x00000000 0x44 avr_gpio_driver/avr_gpio.o .text 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .data 0x00000000 0x0 avr_i2c_driver/avr_i2c.o .bss 0x00000000 0x0 avr_i2c_driver/avr_i2c.o + .text.i2c_reset + 0x00000000 0x10 avr_i2c_driver/avr_i2c.o + .text.i2c_write_devAddr + 0x00000000 0x22 avr_i2c_driver/avr_i2c.o .text.i2c_byte_write 0x00000000 0x48 avr_i2c_driver/avr_i2c.o .text.i2c_byte_read 0x00000000 0x34 avr_i2c_driver/avr_i2c.o + .text.i2c_write + 0x00000000 0x92 avr_i2c_driver/avr_i2c.o + .text.i2c_read + 0x00000000 0x8c avr_i2c_driver/avr_i2c.o + .text.i2c_IsDeviceReady + 0x00000000 0x2c avr_i2c_driver/avr_i2c.o + .text.cm_i2c_init + 0x00000000 0x34 avr_i2c_driver/avr_i2c.o + .text.cm_i2c_addDev + 0x00000000 0x3c avr_i2c_driver/avr_i2c.o + .text.cm_i2c_transfer + 0x00000000 0x34 avr_i2c_driver/avr_i2c.o + .debug_info 0x00000000 0x6da avr_i2c_driver/avr_i2c.o + .debug_abbrev 0x00000000 0x1bb avr_i2c_driver/avr_i2c.o + .debug_loc 0x00000000 0x73d avr_i2c_driver/avr_i2c.o + .debug_aranges + 0x00000000 0x68 avr_i2c_driver/avr_i2c.o + .debug_ranges 0x00000000 0x58 avr_i2c_driver/avr_i2c.o + .debug_line 0x00000000 0x3ff avr_i2c_driver/avr_i2c.o + .debug_str 0x00000000 0x506 avr_i2c_driver/avr_i2c.o + .comment 0x00000000 0x31 avr_i2c_driver/avr_i2c.o + .debug_frame 0x00000000 0x118 avr_i2c_driver/avr_i2c.o .text 0x00000000 0x0 avr_uart_driver/avr_uart.o .data 0x00000000 0x0 avr_uart_driver/avr_uart.o .bss 0x00000000 0x0 avr_uart_driver/avr_uart.o + .text.cm_uart_init + 0x00000000 0x60 avr_uart_driver/avr_uart.o + .text.cm_uart_send + 0x00000000 0xe avr_uart_driver/avr_uart.o .text.cm_uart_receive 0x00000000 0x12 avr_uart_driver/avr_uart.o .text.cm_uart_receive_busyWait @@ -115,25 +135,73 @@ Discarded input sections .text 0x00000000 0x0 cm_msg/cm_msg.o .data 0x00000000 0x0 cm_msg/cm_msg.o .bss 0x00000000 0x0 cm_msg/cm_msg.o + .text.cm_msgSync_Byte_DecodeSC + 0x00000000 0x9e cm_msg/cm_msg.o + .text.cm_msg_DecodeMsg_Byte + 0x00000000 0xa8 cm_msg/cm_msg.o + .text.cm_MsgCompleteEvt_Register + 0x00000000 0x1c cm_msg/cm_msg.o + .bss.msg.1844 0x00000000 0x37 cm_msg/cm_msg.o + .bss.data_bytes_idx.1845 + 0x00000000 0x1 cm_msg/cm_msg.o + .bss.state.1843 + 0x00000000 0x1 cm_msg/cm_msg.o + .bss.state.1832 + 0x00000000 0x1 cm_msg/cm_msg.o + .bss.s_msg_cmplete_evt_inst + 0x00000000 0x2 cm_msg/cm_msg.o + .bss.s_msg_cmplete_evt_fpt + 0x00000000 0x2 cm_msg/cm_msg.o + .rodata.startCode + 0x00000000 0x5 cm_msg/cm_msg.o + .debug_info 0x00000000 0x2b4 cm_msg/cm_msg.o + .debug_abbrev 0x00000000 0x14b cm_msg/cm_msg.o + .debug_loc 0x00000000 0x179 cm_msg/cm_msg.o + .debug_aranges + 0x00000000 0x30 cm_msg/cm_msg.o + .debug_ranges 0x00000000 0x20 cm_msg/cm_msg.o + .debug_line 0x00000000 0x21a cm_msg/cm_msg.o + .debug_str 0x00000000 0x3fa cm_msg/cm_msg.o + .comment 0x00000000 0x31 cm_msg/cm_msg.o + .debug_frame 0x00000000 0x44 cm_msg/cm_msg.o .text 0x00000000 0x0 cqm6xx_app.o .data 0x00000000 0x0 cqm6xx_app.o .bss 0x00000000 0x0 cqm6xx_app.o .text.isStructValid 0x00000000 0x1a cqm6xx_app.o + .text.uart_rx_event + 0x00000000 0xc cqm6xx_app.o .text.cqm6xx_app_updateOsc 0x00000000 0x76 cqm6xx_app.o .text.cqm6xx_app_statemachine 0x00000000 0x56 cqm6xx_app.o + .text.programPLL_Parameters + 0x00000000 0x6 cqm6xx_app.o + .text.cqm6xx_app_init + 0x00000000 0x2c cqm6xx_app.o + .debug_info 0x00000000 0x615 cqm6xx_app.o + .debug_abbrev 0x00000000 0x1df cqm6xx_app.o + .debug_loc 0x00000000 0x309 cqm6xx_app.o + .debug_aranges + 0x00000000 0x48 cqm6xx_app.o + .debug_ranges 0x00000000 0x38 cqm6xx_app.o + .debug_line 0x00000000 0x31d cqm6xx_app.o + .debug_str 0x00000000 0x4d7 cqm6xx_app.o + .comment 0x00000000 0x31 cqm6xx_app.o + .debug_frame 0x00000000 0x98 cqm6xx_app.o .text 0x00000000 0x0 main.o .data 0x00000000 0x0 main.o .bss 0x00000000 0x0 main.o - .text.uart_test - 0x00000000 0x2 main.o + COMMON 0x00000000 0x6 main.o .text 0x00000000 0x0 si5351_driver/si5351_driver.o .data 0x00000000 0x0 si5351_driver/si5351_driver.o .bss 0x00000000 0x0 si5351_driver/si5351_driver.o .text.readRegister 0x00000000 0x80 si5351_driver/si5351_driver.o + .text.writeRegister + 0x00000000 0x78 si5351_driver/si5351_driver.o + .text.cm_setOutputMultiSynthRaw + 0x00000000 0xcc si5351_driver/si5351_driver.o .text.cm_setOutputMultiSynth 0x00000000 0x116 si5351_driver/si5351_driver.o .text.cm_setOutputEnable @@ -150,6 +218,18 @@ Discarded input sections 0x00000000 0x2ce si5351_driver/si5351_driver.o .text.cm_si5351_getRevisionNumber 0x00000000 0x2a si5351_driver/si5351_driver.o + .text.cm_si5351_init + 0x00000000 0x142 si5351_driver/si5351_driver.o + .debug_info 0x00000000 0x16d1 si5351_driver/si5351_driver.o + .debug_abbrev 0x00000000 0x24a si5351_driver/si5351_driver.o + .debug_loc 0x00000000 0x10c3 si5351_driver/si5351_driver.o + .debug_aranges + 0x00000000 0x78 si5351_driver/si5351_driver.o + .debug_ranges 0x00000000 0x68 si5351_driver/si5351_driver.o + .debug_line 0x00000000 0x55f si5351_driver/si5351_driver.o + .debug_str 0x00000000 0xfc0 si5351_driver/si5351_driver.o + .comment 0x00000000 0x31 si5351_driver/si5351_driver.o + .debug_frame 0x00000000 0x28c si5351_driver/si5351_driver.o .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libm.a(addsf3.o) @@ -277,6 +357,22 @@ Discarded input sections 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) .text.libgcc.fixed 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.libgcc.fixed + 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) @@ -294,26 +390,23 @@ Discarded input sections .text.libgcc.fixed 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + .data 0x00000000 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + .text.avr-libc + 0x00000000 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + .comment 0x00000000 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) + COMMON 0x00000000 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) - .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.mul - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.div - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.prologue - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.builtins - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.fmul - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - .text.libgcc.fixed - 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + .text.avr-libc + 0x00000000 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .text 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .data 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + .bss 0x00000000 0x0 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) Memory Configuration @@ -450,7 +543,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0x964 +.text 0x00000000 0x19c *(.vectors) .vectors 0x00000000 0x34 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o 0x00000000 __vector_default @@ -491,10 +584,10 @@ END GROUP *(.init3) *(.init3) *(.init4) - .init4 0x00000040 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) - 0x00000040 __do_clear_bss - .init4 0x00000050 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) - 0x00000050 __do_copy_data + .init4 0x00000040 0x16 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_copy_data.o) + 0x00000040 __do_copy_data + .init4 0x00000056 0x10 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_clear_bss.o) + 0x00000056 __do_clear_bss *(.init4) *(.init5) *(.init5) @@ -536,75 +629,30 @@ END GROUP 0x0000006a __vector_20 0x0000006c . = ALIGN (0x2) *(.text.*) - .text.i2c_reset - 0x0000006c 0x10 avr_i2c_driver/avr_i2c.o - .text.i2c_write_devAddr - 0x0000007c 0x22 avr_i2c_driver/avr_i2c.o - 0x0000007c i2c_write_devAddr - .text.i2c_write - 0x0000009e 0x92 avr_i2c_driver/avr_i2c.o - 0x0000009e i2c_write - .text.i2c_read - 0x00000130 0x8c avr_i2c_driver/avr_i2c.o - 0x00000130 i2c_read - .text.i2c_IsDeviceReady - 0x000001bc 0x2c avr_i2c_driver/avr_i2c.o - 0x000001bc i2c_IsDeviceReady - .text.cm_i2c_init - 0x000001e8 0x34 avr_i2c_driver/avr_i2c.o - 0x000001e8 cm_i2c_init - .text.cm_i2c_addDev - 0x0000021c 0x3c avr_i2c_driver/avr_i2c.o - 0x0000021c cm_i2c_addDev - .text.cm_i2c_transfer - 0x00000258 0x34 avr_i2c_driver/avr_i2c.o - 0x00000258 cm_i2c_transfer - .text.cm_uart_init - 0x0000028c 0x60 avr_uart_driver/avr_uart.o - 0x0000028c cm_uart_init - .text.cm_uart_send - 0x000002ec 0xe avr_uart_driver/avr_uart.o - 0x000002ec cm_uart_send + .text.cm_EEPROM_write + 0x0000006c 0x36 avr_eeprom_driver/avr_eeprom_driver.o + 0x0000006c cm_EEPROM_write + .text.cm_EEPROM_read + 0x000000a2 0x10 avr_eeprom_driver/avr_eeprom_driver.o + 0x000000a2 cm_EEPROM_read .text.__vector_22 - 0x000002fa 0x70 avr_uart_driver/avr_uart.o - 0x000002fa __vector_22 - .text.cm_msgSync_Byte_DecodeSC - 0x0000036a 0x9e cm_msg/cm_msg.o - 0x0000036a cm_msgSync_Byte_DecodeSC - .text.cm_msg_DecodeMsg_Byte - 0x00000408 0x9e cm_msg/cm_msg.o - 0x00000408 cm_msg_DecodeMsg_Byte - .text.cm_MsgCompleteEvt_Register - 0x000004a6 0x1c cm_msg/cm_msg.o - 0x000004a6 cm_MsgCompleteEvt_Register - .text.programPLL_Parameters - 0x000004c2 0x6 cqm6xx_app.o - 0x000004c2 programPLL_Parameters - .text.uart_rx_event - 0x000004c8 0xe cqm6xx_app.o - 0x000004c8 uart_rx_event - .text.cqm6xx_app_init - 0x000004d6 0x2c cqm6xx_app.o - 0x000004d6 cqm6xx_app_init - .text.main 0x00000502 0x50 main.o - 0x00000502 main - .text.writeRegister - 0x00000552 0x78 si5351_driver/si5351_driver.o - .text.cm_si5351_init - 0x000005ca 0x142 si5351_driver/si5351_driver.o - 0x000005ca cm_si5351_init + 0x000000b2 0x56 avr_uart_driver/avr_uart.o + 0x000000b2 __vector_22 + .text.main 0x00000108 0x58 main.o + 0x00000108 main .text.avr-libc - 0x0000070c 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x0000070c malloc - 0x0000083c free + 0x00000160 0x10 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + 0x00000160 eeprom_read_byte + 0x00000168 eeprom_mapen .text.avr-libc - 0x0000094e 0x12 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(memcpy.o) - 0x0000094e memcpy - 0x00000960 . = ALIGN (0x2) + 0x00000170 0x28 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) + 0x00000170 eeprom_write_byte + 0x00000172 eeprom_write_r18 + 0x00000198 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000960 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) - 0x00000960 _exit - 0x00000960 exit + .fini9 0x00000198 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + 0x00000198 _exit + 0x00000198 exit *(.fini9) *(.fini8) *(.fini8) @@ -623,66 +671,50 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000960 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) + .fini0 0x00000198 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega3/short-calls\libgcc.a(_exit.o) *(.fini0) - 0x00000964 _etext = . + 0x0000019c _etext = . -.rodata 0x00008964 0x5 load address 0x00000964 +.rodata *(.rodata) *(.rodata*) - .rodata.startCode - 0x00008964 0x5 cm_msg/cm_msg.o *(.gnu.linkonce.r*) -.data 0x00803f00 0x6 load address 0x00000969 +.data 0x00803f00 0x1a load address 0x0000019c 0x00803f00 PROVIDE (__data_start, .) *(.data) - .data 0x00803f00 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00803f00 __malloc_heap_end - 0x00803f02 __malloc_heap_start - 0x00803f04 __malloc_margin *(.data*) + .data.data_set + 0x00803f00 0x19 main.o + 0x00803f00 data_set *(.gnu.linkonce.d*) - 0x00803f06 . = ALIGN (0x2) - 0x00803f06 _edata = . - 0x00803f06 PROVIDE (__data_end, .) + 0x00803f1a . = ALIGN (0x2) + *fill* 0x00803f19 0x1 + 0x00803f1a _edata = . + 0x00803f1a PROVIDE (__data_end, .) -.bss 0x00803f06 0x4a - 0x00803f06 PROVIDE (__bss_start, .) +.bss 0x00803f1a 0x1c + 0x00803f1a PROVIDE (__bss_start, .) *(.bss) *(.bss*) .bss.uart_rx_evt_fpt - 0x00803f06 0x2 avr_uart_driver/avr_uart.o - 0x00803f06 uart_rx_evt_fpt - .bss.data_bytes_idx.1845 - 0x00803f08 0x1 cm_msg/cm_msg.o - .bss.msg.1844 0x00803f09 0x37 cm_msg/cm_msg.o - .bss.state.1843 - 0x00803f40 0x1 cm_msg/cm_msg.o - .bss.state.1832 - 0x00803f41 0x1 cm_msg/cm_msg.o - .bss.s_msg_cmplete_evt_inst - 0x00803f42 0x2 cm_msg/cm_msg.o - 0x00803f42 s_msg_cmplete_evt_inst - .bss.s_msg_cmplete_evt_fpt - 0x00803f44 0x2 cm_msg/cm_msg.o - 0x00803f44 s_msg_cmplete_evt_fpt + 0x00803f1a 0x2 avr_uart_driver/avr_uart.o + 0x00803f1a uart_rx_evt_fpt + .bss.counter.3520 + 0x00803f1c 0x1 main.o + .bss.data 0x00803f1d 0x19 main.o + 0x00803f1d data *(COMMON) - COMMON 0x00803f46 0x6 main.o - 0x00803f46 storno_xtal_app - COMMON 0x00803f4c 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) - 0x00803f4c __brkval - 0x00803f4e __flp - 0x00803f50 PROVIDE (__bss_end, .) - 0x00000969 __data_load_start = LOADADDR (.data) - 0x0000096f __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00803f36 PROVIDE (__bss_end, .) + 0x0000019c __data_load_start = LOADADDR (.data) + 0x000001b6 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00803f50 0x0 +.noinit 0x00803f36 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00803f50 _end = . - 0x00803f50 PROVIDE (__heap_start, .) + 0x00803f36 _end = . + 0x00803f36 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -723,14 +755,10 @@ END GROUP .comment 0x00000000 0x30 *(.comment) - .comment 0x00000000 0x30 avr_i2c_driver/avr_i2c.o + .comment 0x00000000 0x30 avr_eeprom_driver/avr_eeprom_driver.o 0x31 (size before relaxing) .comment 0x00000030 0x31 avr_uart_driver/avr_uart.o - .comment 0x00000030 0x31 cm_msg/cm_msg.o - .comment 0x00000030 0x31 cqm6xx_app.o .comment 0x00000030 0x31 main.o - .comment 0x00000030 0x31 si5351_driver/si5351_driver.o - .comment 0x00000030 0x31 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega3/short-calls\libc.a(malloc.o) .note.gnu.avr.deviceinfo 0x00000000 0x3c @@ -752,87 +780,70 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x1b8 +.debug_aranges 0x00000000 0xc8 *(.debug_aranges) .debug_aranges - 0x00000000 0x68 avr_i2c_driver/avr_i2c.o + 0x00000000 0x28 avr_eeprom_driver/avr_eeprom_driver.o .debug_aranges - 0x00000068 0x40 avr_uart_driver/avr_uart.o + 0x00000028 0x40 avr_uart_driver/avr_uart.o .debug_aranges - 0x000000a8 0x30 cm_msg/cm_msg.o + 0x00000068 0x20 main.o .debug_aranges - 0x000000d8 0x48 cqm6xx_app.o + 0x00000088 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) .debug_aranges - 0x00000120 0x28 main.o - .debug_aranges - 0x00000148 0x70 si5351_driver/si5351_driver.o + 0x000000a8 0x20 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x496c +.debug_info 0x00000000 0x1e3d *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x11d6 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_info 0x000011d6 0x6da avr_i2c_driver/avr_i2c.o - .debug_info 0x000018b0 0x518 avr_uart_driver/avr_uart.o - .debug_info 0x00001dc8 0x2b4 cm_msg/cm_msg.o - .debug_info 0x0000207c 0x628 cqm6xx_app.o - .debug_info 0x000026a4 0xce3 main.o - .debug_info 0x00003387 0x15e5 si5351_driver/si5351_driver.o + .debug_info 0x000011d6 0x16d avr_eeprom_driver/avr_eeprom_driver.o + .debug_info 0x00001343 0x4fc avr_uart_driver/avr_uart.o + .debug_info 0x0000183f 0x4a4 main.o + .debug_info 0x00001ce3 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_info 0x00001d90 0xad C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_abbrev 0x00000000 0x1bfd +.debug_abbrev 0x00000000 0x1565 *(.debug_abbrev) .debug_abbrev 0x00000000 0x10de C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_abbrev 0x000010de 0x1bb avr_i2c_driver/avr_i2c.o - .debug_abbrev 0x00001299 0x1ed avr_uart_driver/avr_uart.o - .debug_abbrev 0x00001486 0x14b cm_msg/cm_msg.o - .debug_abbrev 0x000015d1 0x1df cqm6xx_app.o - .debug_abbrev 0x000017b0 0x203 main.o - .debug_abbrev 0x000019b3 0x24a si5351_driver/si5351_driver.o + .debug_abbrev 0x000010de 0xac avr_eeprom_driver/avr_eeprom_driver.o + .debug_abbrev 0x0000118a 0x1e0 avr_uart_driver/avr_uart.o + .debug_abbrev 0x0000136a 0x1d3 main.o + .debug_abbrev 0x0000153d 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_abbrev 0x00001551 0x14 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_line 0x00000000 0x12f2 +.debug_line 0x00000000 0x7d0 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x136 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_line 0x00000136 0x3ff avr_i2c_driver/avr_i2c.o - .debug_line 0x00000535 0x227 avr_uart_driver/avr_uart.o - .debug_line 0x0000075c 0x208 cm_msg/cm_msg.o - .debug_line 0x00000964 0x323 cqm6xx_app.o - .debug_line 0x00000c87 0x19b main.o - .debug_line 0x00000e22 0x4d0 si5351_driver/si5351_driver.o + .debug_line 0x00000136 0x166 avr_eeprom_driver/avr_eeprom_driver.o + .debug_line 0x0000029c 0x21b avr_uart_driver/avr_uart.o + .debug_line 0x000004b7 0x1d9 main.o + .debug_line 0x00000690 0x7c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eerd_byte.o) + .debug_line 0x0000070c 0xc4 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls\libattiny402.a(eewr_byte.o) -.debug_frame 0x00000000 0x558 +.debug_frame 0x00000000 0x140 *(.debug_frame) - .debug_frame 0x00000000 0x118 avr_i2c_driver/avr_i2c.o - .debug_frame 0x00000118 0xcc avr_uart_driver/avr_uart.o - .debug_frame 0x000001e4 0x44 cm_msg/cm_msg.o - .debug_frame 0x00000228 0x98 cqm6xx_app.o - .debug_frame 0x000002c0 0x44 main.o - .debug_frame 0x00000304 0x254 si5351_driver/si5351_driver.o + .debug_frame 0x00000000 0x60 avr_eeprom_driver/avr_eeprom_driver.o + .debug_frame 0x00000060 0xbc avr_uart_driver/avr_uart.o + .debug_frame 0x0000011c 0x24 main.o -.debug_str 0x00000000 0x2131 +.debug_str 0x00000000 0xe53 *(.debug_str) .debug_str 0x00000000 0x7a9 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/ATtiny_DFP/1.10.348/gcc/dev/attiny402/avrxmega3/short-calls/crtattiny402.o - .debug_str 0x000007a9 0x4c2 avr_i2c_driver/avr_i2c.o - 0x506 (size before relaxing) - .debug_str 0x00000c6b 0x283 avr_uart_driver/avr_uart.o - 0x4f8 (size before relaxing) - .debug_str 0x00000eee 0x23a cm_msg/cm_msg.o - 0x3fe (size before relaxing) - .debug_str 0x00001128 0x2d8 cqm6xx_app.o - 0x4db (size before relaxing) - .debug_str 0x00001400 0x909 main.o - 0xc4e (size before relaxing) - .debug_str 0x00001d09 0x428 si5351_driver/si5351_driver.o - 0xf95 (size before relaxing) + .debug_str 0x000007a9 0x1e2 avr_eeprom_driver/avr_eeprom_driver.o + 0x21b (size before relaxing) + .debug_str 0x0000098b 0x353 avr_uart_driver/avr_uart.o + 0x4f4 (size before relaxing) + .debug_str 0x00000cde 0x175 main.o + 0x3e5 (size before relaxing) -.debug_loc 0x00000000 0x1c80 +.debug_loc 0x00000000 0x349 *(.debug_loc) - .debug_loc 0x00000000 0x73d avr_i2c_driver/avr_i2c.o - .debug_loc 0x0000073d 0x16e avr_uart_driver/avr_uart.o - .debug_loc 0x000008ab 0x160 cm_msg/cm_msg.o - .debug_loc 0x00000a0b 0x32d cqm6xx_app.o - .debug_loc 0x00000d38 0x48 main.o - .debug_loc 0x00000d80 0xf00 si5351_driver/si5351_driver.o + .debug_loc 0x00000000 0x1c6 avr_eeprom_driver/avr_eeprom_driver.o + .debug_loc 0x000001c6 0x13b avr_uart_driver/avr_uart.o + .debug_loc 0x00000301 0x48 main.o .debug_macinfo *(.debug_macinfo) @@ -852,14 +863,11 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x158 +.debug_ranges 0x00000000 0x58 *(.debug_ranges) - .debug_ranges 0x00000000 0x58 avr_i2c_driver/avr_i2c.o - .debug_ranges 0x00000058 0x30 avr_uart_driver/avr_uart.o - .debug_ranges 0x00000088 0x20 cm_msg/cm_msg.o - .debug_ranges 0x000000a8 0x38 cqm6xx_app.o - .debug_ranges 0x000000e0 0x18 main.o - .debug_ranges 0x000000f8 0x60 si5351_driver/si5351_driver.o + .debug_ranges 0x00000000 0x18 avr_eeprom_driver/avr_eeprom_driver.o + .debug_ranges 0x00000018 0x30 avr_uart_driver/avr_uart.o + .debug_ranges 0x00000048 0x10 main.o .debug_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 2c1ff90..09ef998 100644 --- a/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec +++ b/storno_cqp6xx_digital_xtal/Debug/storno_cqp6xx_digital_xtal.srec @@ -1,155 +1,30 @@ S022000073746F726E6F5F6371703678785F6469676974616C5F7874616C2E737265633F S113000019C033C032C031C030C02FC02EC02DC083 S11300102CC02BC02AC029C028C027C026C025C098 -S113002024C023C022C021C020C01FC066C11DC07F +S113002024C023C022C021C020C01FC042C01DC0A4 S11300301CC01BC011241FBECFEFCDBFDFE3DEBF4A -S11300402FE3A6E0BFE301C01D92A035B207E1F79C -S11300501FE3A0E0BFE3E9E6F9E002C005900D92DA -S1130060A630B107D9F74DD27BC4CACFE0E1F8E09E -S113007084818860848381E0858308958093170850 -S113008080911508807CE1F390911508892F807187 -S113009094FF04C083E08093140881E00895CF9214 -S11300A0DF92EF92FF92CF93DF93EB0169017A0124 -S11300B0232B242B252B81F1E1DF811130C09E01FC -S11300C02F5F3F4F8881809318088091150886FF21 -S11300D0FCCF8091150884FF06C083E08093140848 -S11300E081E090E01EC0809115088C7021F0BEDF85 -S11300F081E090E016C08091150884FD07C081E07E -S1130100C81AD108E108F108E901C9F683E080932F -S1130110140880E090E005C08FEF9FEF02C08FEFDE -S11301209FEFDF91CF91FF90EF90DF90CF900895F4 -S1130130CF92DF92EF92FF92CF93DF93EB016901AD -S11301407A01232B242B252B69F1816097DF8823E7 -S1130150C9F02BC080911508807CE1F3CE01019693 -S1130160209118082883411551056105710521F472 -S113017024E02093140803C022E0209314086A01A9 -S11301807B01EC01B701A6014150510961097109D4 -S1130190CD28CE28CF28F1F683E08093140880E0A0 -S11301A090E005C081E090E002C08FEF9FEFDF9107 -S11301B0CF91FF90EF90DF90CF9008958093170830 -S11301C08091150886FFFCCF8091150884FF06C036 -S11301D083E08093140881E090E0089583E08093A5 -S11301E0140880E090E00895E0E0F4E080818B7FE3 -S11301F080838081877F8083A0E1B8E08BE01696BE -S11302008C93169781E013968C93139715968C9381 -S113021088E0828B838B80E090E00895EF92FF92D8 -S11302200F931F93CF938C017B01C42F842F880FCE -S1130230C5DF009749F4F801E082F1824C2F50E0C9 -S1130240440F551F428302C08EEF9FEFCF911F9141 -S11302500F91FF90EF9008950F93009781F0FC01A8 -S1130260002319F0013031F00DC0828161DF80E09C -S113027090E00AC0828113DF80E090E005C08FEF38 -S11302809FEF02C080E090E00F910895CF93DF9339 -S11302901F92CDB7DEB7AC01F894E0E0F8E02CE6AD -S11302A035E02087318793E0978390EC968361153E -S11302B0710511F4452B39F080E8809305086093AB -S11302C0063F7093073F80910408882324F48091AB -S11302D0000889838981E0E0F4E080E4818380E898 -S11302E0828378940F90DF91CF91089590910408C0 -S11302F095FFFCCF8093020808951F920F920FB6CA -S11303000F9211242F933F934F935F936F937F9397 -S11303108F939F93AF93BF93EF93FF93CF93DF9309 -S11303201F92CDB7DEB7E091063FF091073F3097BB -S113033019F08091000809958091000889838981CA -S1130340D5DF0F90DF91CF91FF91EF91BF91AF91E6 -S11303509F918F917F916F915F914F913F912F91D9 -S11303600F900FBE0F901F901895E091413FE2301F -S113037029F128F4EE2341F0E13091F040C0E3305C -S113038059F1E430B9F13BC0F0E0EC59F647208173 -S113039091E0281390E09093413F81E090E008952C -S11303A0F0E0EC59F6479081891302C082E001C065 -S11303B080E08093413F81E090E00895F0E0EC59C3 -S11303C0F6479081891302C083E001C080E08093E6 -S11303D0413F81E090E00895F0E0EC59F6479081C8 -S11303E0891302C084E001C080E08093413F81E032 -S11303F090E008951092413F80E090E008951092BB -S1130400413F81E090E008959091403F9330C1F0E6 -S113041028F4992341F0913069F042C09430C1F03E -S1130420953001F13DC0A1DF892BD1F581E08093A6 -S1130430403F36C08093093F83E08093403F30C003 -S1130440E9E0FFE31182828384E08093403F28C087 -S1130450E9E0FFE321813281282B2183328395E077 -S11304609093403F9091083FE92FF0E0E75FF04C14 -S1130470838381E0890F8093083F9091093F981707 -S113048078F4E091443FF091453F6CE07FE3809144 -S1130490423F9091433F09951092403F1092083F8C -S11304A080E090E00895009759F06115710541F0DE -S11304B08093423F9093433F6093443F7093453F02 -S11304C00895FC0111820895FC0164837583F9DFAA -S11304D080E090E00895CF93DF936115710571F08A -S11304E0009761F0EC01198218826A837B8364E6C9 -S11304F072E0D9DF64E072E0CE01C8DEDF91CF9113 -S11305000895CF93DF93CDB7DEB7CB55D109CDBFD7 -S1130510DEBF80E090E068DE40E660E070E0CE019F -S113052001967CDE4CE251E0BE016F5F7F4FCE014D -S113053004964BD0BE016C5F7F4F86E49FE3CBDF14 -S11305402AE684E091E0215080409040E1F700C029 -S1130550F7CF8F929F92AF92BF92CF92DF92EF929A -S1130560FF920F931F93CF93DF93EC01862E5A01D2 -S113057068017901C8010196C9D0982E192FFC0190 -S11305808192CF01A601B501E2D1EA81FB81A701E5 -S113059096012F5F3F4F4F4F5F4F01E0692D712F41 -S11305A0888199810995892D912F48D180E090E027 -S11305B0DF91CF911F910F91FF90EF90DF90CF903B -S11305C0BF90AF909F908F900895EF92FF920F93FA -S11305D01F93CF93DF931F92CDB7DEB7009709F433 -S11305E085C06115710509F484C04115510509F4EC -S11305F083C07C01DC016D937C93119712964D931B -S11306005C931397FC01349684E5DF011D928A956F -S1130610E9F78FEF898301E010E020E030E0AE01DC -S11306204F5F5F4F63E0C70194DF80E8898301E097 -S113063010E020E030E0AE014F5F5F4F60E1C701A2 -S113064088DF01E010E020E030E0AE014F5F5F4F53 -S113065061E1C7017EDF01E010E020E030E0AE019F -S11306604F5F5F4F62E1C70174DF01E010E020E0FB -S113067030E0AE014F5F5F4F63E1C7016ADF01E025 -S113068010E020E030E0AE014F5F5F4F64E1C7014E -S113069060DF01E010E020E030E0AE014F5F5F4F2B -S11306A065E1C70156DF01E010E020E030E0AE0173 -S11306B04F5F5F4F66E1C7014CDF01E010E020E0CF -S11306C030E0AE014F5F5F4F67E1C70142DF80EC6E -S11306D0898301E010E020E030E0AE014F5F5F4F1E -S11306E067EBC70136DF80E090E008C08FEF9FEF33 -S11306F005C08FEF9FEF02C08FEF9FEF0F90DF9148 -S1130700CF911F910F91FF90EF9008950F931F9336 -S1130710CF93DF938230910510F482E090E0E09172 -S11307204E3FF0914F3F20E030E0A0E0B0E0309742 -S113073019F1408151810281138148175907C8F08A -S11307408417950769F4109731F012960C93129759 -S113075013961C9327C000934E3F10934F3F22C023 -S11307602115310519F04217530718F49A01BD01F8 -S1130770EF01DF01F801DBCF21153105F9F0281B6A -S1130780390B2430310580F48A819B816115710510 -S113079021F0FB018283938304C080934E3F9093A6 -S11307A04F3FFE01329644C0FE01E20FF31F8193D6 -S11307B0919322503109288339833AC020914C3FC8 -S11307C030914D3F232B41F42091023F3091033F60 -S11307D020934C3F30934D3F2091003F3091013F97 -S11307E02115310541F42DB73EB74091043F509196 -S11307F0053F241B350BE0914C3FF0914D3FE21730 -S1130800F307A0F42E1B3F0B2817390778F0AC012F -S11308104E5F5F4F2417350748F04E0F5F1F40931C -S11308204C3F50934D3F8193919302C0E0E0F0E040 -S1130830CF01DF91CF911F910F910895CF93DF9353 -S1130840009709F481C0FC01329712821382A091AF -S11308504E3FB0914F3F109781F420813181820F38 -S1130860931F20914C3F30914D3F2817390751F584 -S1130870E0934C3FF0934D3F67C0ED0120E030E042 -S1130880CE17DF0740F44A815B819E014115510573 -S1130890F1F0EA01F5CFC283D38340815181840F03 -S11308A0951FC817D90759F488819981840F951F1A -S11308B00296808391838A819B818283938321150D -S11308C0310529F4E0934E3FF0934F3F3DC0E901D9 -S11308D0EA83FB8349915991C40FD51FEC17FD0797 -S11308E061F480819181840F951F0296E9018883C8 -S11308F09983828193818A839B83E0E0F0E012965E -S11309008D919C911397009719F0FD01DC01F7CFAD -S11309108D919C9111979D012E5F3F4F820F931FE4 -S113092020914C3F30914D3F2817390769F4309797 -S113093029F410924E3F10924F3F02C0128213824C -S1130940A0934C3FB0934D3FDF91CF910895FB01AD -S1130950DC0102C001900D9241505040D8F7089537 -S1070960F894FFCF35 -S10809644F5A31434D20 -S10909690000503F2000D5 +S11300401FE3A0E0BFE3ECE9F1E002C005900D92EC +S1130050AA31B107D9F72FE3AAE1BFE301C01D928A +S1130060A633B207E1F750D097C0CACFEF92FF9200 +S11300700F931F93CF93DF937C018B01D42FC0E0A8 +S113008007C0F801EC0FF11D6081C70171D0CF5F8B +S1130090CD17B8F3DF91CF911F910F91FF90EF909F +S11300A00895CF93DF93EB015BD08883DF91CF91E9 +S11300B008951F920F920FB60F9211242F933F931E +S11300C04F935F936F937F938F939F93AF93BF935C +S11300D0EF93FF93E0911A3FF0911B3F309719F093 +S11300E0809100080995FF91EF91BF91AF919F9185 +S11300F08F917F916F915F914F913F912F910F90CD +S11301000FBE0F901F90189541E06DE17FE380E0F2 +S113011090E0C7DF2AE684E091E0215080409040DF +S1130120E1F700C041E060E07FE380E090E09EDF23 +S1130130809108048D3059F480911C3F8F5F809327 +S11301401C3F80911C3F823310F010921C3F2AE622 +S113015084E091E0215080409040E1F700C0E8CF76 +S113016003D0808199270895FC01E050FC4E089546 +S1130170262FAF93BF93E0E0F0E1328131FDFDCF54 +S1130180DC01A050BC4E2C932DE924BF23E0208336 +S10F01900196BF91AF910895F894FFCF41 +S113019C55000000000000000000000000000000FA +S10D01AC0000000000000000000045 S9030000FC diff --git a/storno_cqp6xx_digital_xtal/avr_eeprom_driver b/storno_cqp6xx_digital_xtal/avr_eeprom_driver index a659fd1..31508be 160000 --- a/storno_cqp6xx_digital_xtal/avr_eeprom_driver +++ b/storno_cqp6xx_digital_xtal/avr_eeprom_driver @@ -1 +1 @@ -Subproject commit a659fd165f91bb8d7d8d5812f2a41f3a03c6f315 +Subproject commit 31508bec9dd34319737e697f753fc4a87c6823ab diff --git a/storno_cqp6xx_digital_xtal/avr_uart_driver b/storno_cqp6xx_digital_xtal/avr_uart_driver index 291af7f..c8ee01c 160000 --- a/storno_cqp6xx_digital_xtal/avr_uart_driver +++ b/storno_cqp6xx_digital_xtal/avr_uart_driver @@ -1 +1 @@ -Subproject commit 291af7f90d04a417b12229b21093c4ac0bfd9df9 +Subproject commit c8ee01c5da53d20b01c03fff947f7493ee7e7dc7 diff --git a/storno_cqp6xx_digital_xtal/cm_msg b/storno_cqp6xx_digital_xtal/cm_msg index 253f9b8..8a8fe0f 160000 --- a/storno_cqp6xx_digital_xtal/cm_msg +++ b/storno_cqp6xx_digital_xtal/cm_msg @@ -1 +1 @@ -Subproject commit 253f9b8e208076a513ce92447c06bc55a770068d +Subproject commit 8a8fe0f12f61b6405eaca04884571b1c0100cb94 diff --git a/storno_cqp6xx_digital_xtal/cqm6xx_app.c b/storno_cqp6xx_digital_xtal/cqm6xx_app.c index a81109d..9381d91 100644 --- a/storno_cqp6xx_digital_xtal/cqm6xx_app.c +++ b/storno_cqp6xx_digital_xtal/cqm6xx_app.c @@ -62,7 +62,7 @@ static void cqm_setPLLParam(storno_xtal_app_t *inst, si5351_PLLs pll_num, si5351 cm_setPllParamRaw(inst->si5351_dev,pll_num, inst->pll_param_ptr->MSNx_P1, inst->pll_param_ptr->MSNx_P2, inst->pll_param_ptr->MSNx_P3); _delay_ms(1); - cm_setOutputMultiSynth(inst->si5351_dev,output, inst->pll_param_ptr->MSx_P1, inst->pll_param_ptr->MSx_P2, inst->pll_param_ptr->MSx_P3); + cm_setOutputMultiSynthRaw(inst->si5351_dev,output, inst->pll_param_ptr->MSx_P1, inst->pll_param_ptr->MSx_P2, inst->pll_param_ptr->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){ - cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); + /*cm_setInputSource(inst->si5351_dev, SI5351_CLK_SOURCE_XTAL); _delay_ms(1); storno_pll_param_msg temp_msg; @@ -89,7 +89,7 @@ static void cqm6xx_app_loadPLLParam(storno_xtal_app_t *inst){ cqm_setPLLParam(inst, SI5351_PLL_B, SI5351_OUTPUT_1); cm_setCLKControl(inst->si5351_dev,SI5351_OUTPUT_1,SI5351_CLK_POWER_UP); - inst->pll_param_ptr = NULL; + inst->pll_param_ptr = NULL;*/ } @@ -105,7 +105,7 @@ void cqm6xx_app_statemachine(storno_xtal_app_t *inst){ // Read PLL parameters from EEPROM and Program PLL values here: inst->state_now = inst->state_next; - //cqm6xx_app_loadPLLParam(inst); + cqm6xx_app_loadPLLParam(inst); // if ok, then go to RX mode: @@ -175,7 +175,7 @@ int uart_rx_event(storno_xtal_app_t *inst, void *rxData){ inst->pll_param_ptr = rxData; - programPLL_Parameters(inst); + //programPLL_Parameters(inst); return 0; diff --git a/storno_cqp6xx_digital_xtal/main.c b/storno_cqp6xx_digital_xtal/main.c index 7f13166..36ec947 100644 --- a/storno_cqp6xx_digital_xtal/main.c +++ b/storno_cqp6xx_digital_xtal/main.c @@ -11,32 +11,37 @@ #include "avr_i2c_driver/avr_i2c.h" #include "si5351_driver/include/si5351_driver.h" #include "cqm6xx_app.h" +#include "avr_eeprom_driver/avr_eeprom_driver.h" storno_xtal_app_t storno_xtal_app; -void uart_test(uint8_t data){ - - if(data == 'O'){ - return; - } -} - + uint8_t data_set[25] = {0x55}; + //cm_EEPROM_write(0x00,data_set,1); + uint8_t data[25] = {0}; + int main(void) { + + + cm_EEPROM_read(0x00,data,1); + + _delay_ms(100); + + cm_EEPROM_write(0x00,data_set,1); /* Replace with your application code */ // Init Periphials - cm_i2c_init(NULL); + //cm_i2c_init(NULL); // Add devices - cm_i2c_device_t si5351_i2c; - cm_i2c_addDev(&si5351_i2c,NULL,0x60); + //cm_i2c_device_t si5351_i2c; + //cm_i2c_addDev(&si5351_i2c,NULL,0x60); // Init Devices: - si5351_driver si5351_dev; - cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); + //si5351_driver si5351_dev; + //cm_si5351_init(&si5351_dev,&si5351_i2c,(setGet_I2C_Event_fpt)cm_i2c_transfer); - cqm6xx_app_init(&storno_xtal_app, &si5351_dev); + //cqm6xx_app_init(&storno_xtal_app, &si5351_dev); @@ -45,7 +50,21 @@ int main(void) { //cqm6xx_app_statemachine(&storno_xtal_app); - + if(PORTA.IN == 0x0d){ + + static volatile uint8_t counter = 0; + + counter++; + + if (counter >= 50) + { + counter = 0; + } + + } + + + _delay_ms(100); } } diff --git a/storno_cqp6xx_digital_xtal/si5351_driver b/storno_cqp6xx_digital_xtal/si5351_driver index 133056f..06a0eda 160000 --- a/storno_cqp6xx_digital_xtal/si5351_driver +++ b/storno_cqp6xx_digital_xtal/si5351_driver @@ -1 +1 @@ -Subproject commit 133056f577465b800c6417ab9b9a005133179796 +Subproject commit 06a0eda9071b77b92938f71a34a016b52e59252f