From dcc252a2e25d5eaf87a53cc4c932234af47e620f Mon Sep 17 00:00:00 2001 From: Jake <jake.read@cba.mit.edu> Date: Thu, 2 Nov 2017 22:00:03 -0400 Subject: [PATCH] more better --- .../Debug/atxmega-a4u-wakeup.elf | Bin 55900 -> 52108 bytes .../Debug/atxmega-a4u-wakeup.hex | 278 +- .../Debug/atxmega-a4u-wakeup.lss | 2259 ++++++++--------- .../Debug/atxmega-a4u-wakeup.map | 249 +- .../Debug/atxmega-a4u-wakeup.srec | 278 +- .../atxmega-a4u-wakeup/Debug/main.d | 12 +- .../atxmega-a4u-wakeup/Debug/main.o | Bin 22792 -> 16264 bytes .../atxmega-a4u-wakeup/Debug/ringbuffer.d | 5 +- .../atxmega-a4u-wakeup/Debug/ringbuffer.o | Bin 7628 -> 8700 bytes .../atxmega-a4u-wakeup/Debug/tinyport.d | 9 + .../atxmega-a4u-wakeup/Debug/tinyport.o | Bin 17772 -> 14000 bytes .../atxmega-a4u-wakeup/main.c | 96 +- .../atxmega-a4u-wakeup/ringbuffer.c | 77 +- .../atxmega-a4u-wakeup/ringbuffer.h | 34 +- .../atxmega-a4u-wakeup/tinyport.c | 133 +- .../atxmega-a4u-wakeup/tinyport.h | 47 +- 16 files changed, 1661 insertions(+), 1816 deletions(-) diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.elf index 89887a1997380b99591a908483561754bd7a01da..e7de41090e970ecf6a311ab762e94297d1a7d7f9 100644 GIT binary patch delta 14369 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 delta 17829 zcmeB~&U|MJ^8^K^E!QV1DY^P_GcbTKD+2=q69WSSBLf4&BW?x;289N&I2!{40}O-Y zK==hW0|T2v0~j+fFfi~;>?{;o#mF<|AtTQe6-J&Z5==Z({Fx>TFg_Claod=9rtD>c zNP+lYKvEr(Cost|zkBj~@<t|Ep+$z9*dKo9o1(_ZGi50&&lCoR$?uqC>KPttJaBoC z@TBZP!>bt&_@>NYZkWuWFkv#M0^gML%nXkdUN}4f%f5!mvMEfM%np%-=zRv#I}@sx zM`6NbUWhD2FG%(^OqNSw!enl+?1NVy9yB$!=Oi>WS4?S`$e}P{BFIWsmWGKu3KJ%R zj9_Kaf8O<Q+5^Ra28Rg_55F@UU|@K4{`}<oljSF!-F|QTKF0j`dVjtt<}8_w4HLN( zCQJkwU4}&$|AhM!&rjr-9LQ?QgRqN_WpV&Z5|Tg|On^;c!bFf4;VNJPa1}5&!d1Wo z;3{D50SoBWpPzJp()&sOCxM)w%~-?O@nFIOz9}s%Zx}nZFMhbrc#M&8+CtflvOUdn zo7Xk(ZwASAG|z1A)YkkU)g;~2qd!-l<G?vaz9}-S4G$(fU^)OILEid5;r)dB6V6ZI znEHpYsc}K$#>N%=8)b7QJ2m>pJ2eM9NO(~2pryWXYU8rT?TsGdk?dLQ)$AM}gqk>} z@=unZ{D;vQtZ51VM%kW;{_)OGEi8?qjcSeNjSk|0>`Cm!>>MA2o8%|*PXt-h_&~XF zQlq9Y<AH_;98=d%+CK^8z5kOy=7BsI!<fzZMNde-5AI3#6-_&vPBq<b`qL!a%-5Xo zu;2m6{d`ljnfse(v?KF7+h?^)x5>20ww+@H`4432f3OetPgp<sJzIYL9Y&#PZzukl zC_G(kTF=DxW{#;KOW!cQYW&^U*Vx|tqVZ?rgvQ?14rR#?jRuAv1P{zJul&;Zptqgp zz&vx!FCdfort~nf9!O~HZ=BJ}Hzk(2r?t^Q@I&K+o_3I(98(*g{$^}w26^ufV{>bp z_{tAy%7Gt1p(|WJt!JX}^u`3?X+4vZ+c~C!1;JuH^&m0fHb}^#I*OxFvaz#uRx96> zQsy6w4b2et1m;FTmIDb7KoM)h0<s$9U6_X;YGRoak>ok1O2UG<$zUR@z?Y^66COO6 zD4_6RqTpnH4r5jU1%b(elifM&Sp^g(OctEn%^@qvr(iIVUqM;h@r%MlCIy3u%nAyV z`4kK$^G`m=p~%Xo@L?kV<mVj9tb7Uqlldp}b84##C~TN0s30)C@ry#EVPg~jWO;>& z5K}b7E!hLVKA6m>@L@9l<U~$?Rsn?%lLaSl<qS7QsL1?cFkSPDz$5_$fk}c2Ob3LT zgqs#j=2O@(nO_0qO^&HQru;w8z#uf)p38W0373Ox4Y+*t*I-~^0Tp=+K1>V@XBZe5 zB$yc(Y$i|SmaY$BW?;x;U|=`|r43jh{CQBChZVxFg3@4P7#J8{pz&?MHg%Z5Yzkvz zU`T-}W?*30#m2y3z`(%pij9H63{+6FGcX7+FlfV-lz<K3G=~{rzz(r^9y<d=4g&)N z7sup2ZaG~U4hDuG1_p*a4h9A;xMl{13JwMa69xu`H5?2K4h#$oZ#WnjWHztlj?$<% z<pEU^I%*6IER5bV3=BNNvJ4D&<&ZQpFfeRoW?*1qWb2h<U|{A`U|?Xbvj#bck)vCV zfq{jIH8Zb-fr*J-Q<{N+iG?*(nt_4&EJ$rr5=a>fy9!8xgEat5vCD(xze+POu!J<# zGcYi)g1pXVD#O6Q%EG|(fPsO5-C6-;E>k&3yD|g20f@^C<ubCz$TKjout2#??Dim| zSfN~Ib}^7*HYk^cfkQ)vfq{jcshxp=fs;>$fq@a^b{1VG8Ab*MuKI1#py1<@W?*3C zx(#w4*Bf~T24*fTSx{JW>dC=0_%m67G?d9RFwEuJEXTlbgMsaoGy?-W%Qn`Hj4(Iv zV1>E)2FQ^+p<G6GGms;9LAgxq+oTv6Sa!3PgZ$5=%*^f#vThGlnuR?Mq<Sxu%gU|} z^3pyimyLnL4HWGASwRkBOI2WC5McSlx|@lCfgNn=7pOu8_EwNFU!hz^NT_~;a+%nD zWEmLhS-wO0%<NGhH~fHdS=ci`+@DY`D|;D;`wPltV{ZX*e?z(K?2|y;KTs|Q`vMU6 zFO<v4eg?$-2jz0H-vV*}gSqug%G~TPKzs%^NXYT9e*<wDp<G^e7LaF|pj<w7ArO}t z%H?O^&;vy;3)@~s1_rh)c?Jdv7Ctr`76t}x7tbID76GV22KGi!d<a6hjO+;@V}#i1 zA(k?+vx9<I7%I)o?H?M#z#;<WvaqiKsTPHDS=sl1Tqp+RvavgZj24G-*||Oa7+55r zJP!8BAW2Cmmy<mmWRet=%f()w2$GhD^10cUfVeVHE;J})p<G_}JWzbfLAlVNkcV>l z+08*-P=Im;*aJZ}DMGn|>{CE`m7rW9_O&33lwtlCW?u*Lk_uE>gxwvaS{2F_WtRs9 zvKo{t#$E!FRflrL893}gR%x&uXJTMrTPe-Jz`?@Bb&iFBft?LxDi0SVkfF(w7s_R1 zSCC_<XJFxj@|oB#f!xFo<ubD`1DPrS<+89xfw+QDE-U*vkYXVymyLZ9NLCoiWoO{v z2H7ma<-x)LDwz(;GBEHsC@?T^u=1#}GBEHam8LPU@~W}cGcYhIGw>adV_;zA1C>Ke z%1nIQWf>S)`5`=JK06RkARJs2u`uv6fy9|XX0ZyJvobL7Gd*NsVBnFLWnkcAlexyq zz`*At$H2fQ3u1!I{vgf3z$SNx6=V|=-)wmX1~z$+8BEG7d@JguK<#b_mzB>!hJk@i z5yE5RvjZtr(gAB^=i3NUsSM$9^7ViWRe`AF=1T+dR3SVbJ};0yH3*NFfu9K!6Z}k| zJi!cdC7b43u(NGh85jiWk4rHyFfC(b)?s5{5M-1EaX?I=tDv%Q1(?|(&%nU61{46o zj0JKG3`}boLFGKlTxkXd5ymB;qEn913DnU5)u5o-lX;Q?Gvfkw1_sg3tPBh+%#b>j z(Y}|Bfk6z^_h4aQIN>DD!pu+)u5Bf_*+8YO$`?;bF*XK<h89r$BUQ!3z;KtFf#EP4 z1A{bM#$?9K$&Acg3pk|N(k3&egV+vi(u^sLCen;aj26<22}}(P3^Hv@3=FTh85pEy zK(({5BWvG)s=b~ug^9yKnlXuqvjJwp5||0wpe8t@n6Q8o;eZ4z4mbqUeg&$%1x5P? z6z%oWSRC*GYJ$uUCI*J@+zbpdpdbV>7-SjuOEEAo1~P(z8Pq%hRn(0391IL{=Af!7 z@DVEmg9ifxgZyp<1_s7pa4P6w1jmCFGXsMUGXn!-xBv$Og90cX@<8>EI7~tj6b)?* z3=E2(SeOSgnn6m3nSp_Yhk?PA11T6kGiJa7fvJa)K?Y=kAP)lrgAyYnsEW-5>t$eI z0H*{cMrM#;0g9k3W1u_(Lp@^&sQU?)*#=5N_FN1M$|VI1j3pqSJY`^DkOE194Bvp{ z0;V1YX~r}rjsS%8c`VY72<dlNq@5W+`Hz7CWI8V=!hbN+y%E}Vut>Wiq`k37hajZ0 zut<ZQUJtRn6N@~O+gD(bc1D<f9E&uP)1P6HhB>{Shk=2W3)AOFZdbt~t;V1NixpVT zgoGKR6$67T<1J7cZD$0fPf*iYnvsElF`0{jL1qdw1A`nWoyami1F7k*X9Ot#wX2_j z6t#mCF|jZ(XhRfz0x9Ze1j&Qi+#8t~7#LTB)D*D54f+RCGno-24{DFsfKvE*keYi4 zbGFGdFfdMM1j&Qi>h3HI42+*aYU+Jh;RYQ7DVog)QUGee3$ZdVFp7h6-!4|DgH#zk zgMt|t=YtA6kpDp#oWgy%85rbzK{*aAcbAocK?WoV^=l+ZW-%kkR8Z5OnT>&gu@Gdk zMm-zUXtk08Lk31kP@-pKW#&+5U{EV5Fk)bof{K6!XVgjxj2RfEp&~pGH6{#<GEfmN zg$4$729RAopnT8B$_#RYx~(h&1EVjJhz29$H8}<b5Uyv_)?j3;m1bZ7VK!Y2M#lT{ z3=AO5rmw-scvOyo0fgC1H5eH$N-;2iFq@?YBjZdt1_lsjGtppVlv7|}0AV%@hFT_2 zhoT77tAcbW7ArtH6!7fNz`&5g4((9XLwgiV#PukcaQ7&fnAkzJJS(VX=3wSI3>xGD z)$+`|ASRPC13RdaXNFbs?4U}XnZF(sET9HBsFr7j*YX^QTAo?>3IhWJ2U8uW|G;=0 z6uM%JjGsZhhN2_}MzNEiFy>~Q4w7JH1o1#o4C>LH14Z*9Mg|6+La-#L1~p`7VBiJm zV*{xyX0K;p;G4w8z%Y%Cfgzibfq}mnq?8BbD*jFolNZDkxW&N008_@uE%<_gfnhg0 z$YP;9P*;+PfuWg^fk7BrNite6h;%{4MHjI#FcdK%B$;{`7#PGr27>g1%6~{9eUy=b zK^$Z-)DQ*<#ww5lWEeqy0rgD5Dg7@a1A`>U12P~FTxMrr-~rb(G9Y*U2Dyowu^*&Q zgApVG(x<@AzyRu*GMY0%^=g3hdUG%^NY#TiYk`z9W-v%IZUt#I25SXr1NC#k)~3L; z8iTYJb1*P4$S^V<P+(vHVHO=m8Air=3JeS&%wo*Qkje>4h0<E^Zmo(EBo!_I`5KDf zb1>AS^lK?kh0LISEptc{yju(Ik}&hJ{Q-3mL0uANc$b8uQJ$fmff?Q>;Q;kXn1!It zY9<a)mxLMKC1D43NtoeX5)M$8gc;r?;Q)0>nBiR#4p5hb8Qvvf_w-|6hIdIgKwT1M zNSCCZNtu%a)F)wv_enTFT@q$^mxKe<C1HklNjN~gGiG>~gagziVTN}}I6%EKW_Xu` z1Jos9hIdIgKwT1Mc$b7@iZsao@IDC#s87PI4E4V-2dGQJ4DXU~fVw2i@Gc1ls7t~O z?~-tUx+KhqE(s^7OTw(d2I}=gx+Kh8TzyOo3>=^?2{XJ)QqKYEGBd;bBpeE$aSM2t zgagziVTN}}I6z$zW_Xu`1Jos97KC;>SUEsl5@vXpgagziVMcUGI6++!W)Ut9CI$ws z9A(J3LOlbsIM*pA1_o|%Wd;TY?#GG@42;|oiVO@)+`Y;S49wj8N(>C_3|s{u3DC#| zvm)0Qkow<BAoX!d3=9t3=M@<k8n|~WGB6xq;ObL?7|p<}#U;ngz`(7m2vT_gl(V>> zD1l67Qe<FYX5fleW~he@hcFv+If0bwfF1Epfq_AR+e8U8D8*F?H_n<X2c%{@*kTt& z1_l9c7iEyjMn$m7WpF3Da7_cL`~kK&N|Awqh1*?;fq{ejoDu^A4|0dBo`Hjf=Mgis zN5;YnVuCtNpt70;R#t;MWGpBhG8TAIjnpAy5&p~!>X6N4hIPnTWhSveJ7lb~ASTFc zP=}0FZU(4ls9X=}k+C9rWKs+atO}s=h)EgJA!9}9kg+Pg01bvILpo%v$`Br;L&l2I zA!9}9kg+0l$Uy0kp9xeVFxP{6WUQJiSwQao$;`kY0Ir%DxxwujQ1J&E;+xIEz`)qg z%D^B9>RK{#gM6aO$-p28@(Lq2$SctxE~s<K$PIG*L=bm{6eux)xO+idQ122V`;wD^ zK?u~y=BWoYo4B|b7=*!vDI3HZMmtsp1`$tCF)13v&cGnW$-ofC%D^B7ts5Ba7)0~f z85q<#85l}H;yjQZ8KjTK=)fRe2bC2=mtl}#k_5Lm7-bpfu`|>&aB)C;37}S%6v$Ds zAU8RI#xJG8jS)smM#jsa78OX+5+unW3sMZy3947X6$GfGDR+XEfguZ`aWN>_+A=co zurV;mfHc}dG=kKD`~||ylN9Qi89{wqIYu@HhDi{eYe70485vz+IvpW8LFz!dKp1Rg zDjNfXoD~}b!!D3UNycZO9Oeq|&Vbb%VPjwbd&(7L$RjQW26<!`FxI=R0+|A`o(nuh zhinU@7ua|skOYG?<8)B|s$pb&0drUl$V^3VP_wlL6w3@s;8q!<FC!>eK!d<u+zbqi zi$F053Ibn{`busF24!%q8(_e|P|vWQn}I<d6r4&N3=CSJgyv_%&cFZ;%d;SxRlGo> z${Y*~MeGa=s*wI?Jg5cC7{kuMpvE8`1R7oDM5GRI3qu~{^EeI$h76FASu;RJ-eF^4 z_{z<|Aa{w4fq@g$!dI^cDRJavU|`Syw>25_z;!>!?Vv$xa2P&>xjzr&enlPz22HU0 z^FW0KbS!{D7GxhNYCssQjT_`2kWJ7;s|B*2F^xfzu?|%DPGJODP!Ads2P=03HAg_9 zGzDafJIEGr$W8%;EMppj5+kUA%h=8c(g7Mk&*x!aVB8GT)eh3Ng9jRx+c+2)_JKU! z(FW?8gVN<Yuzyc+FfjOWGBBuL<6vNj=47a65P!tMzyNY9EORmSFo-dxfr3E^+~Q{J zX9QWt0SaMW1_nk@W&|gxevp-}ybKJ2;Na*7IkcLWfkE^a2Ll5rO#gE*fQ(}P%$UX? z&cun$njl6)1_o_JONtG|0kvg8m_<yR5ggy(F^70<MsSM|)GB0=)n)`Y^FU2K76ola zaKjDMcw<r8EaY)mt)7{Wo7;-pnwwFWfq|Eoftdru@f5b;VqoCoWnkt*aQXQexVb%r z85jig7$M^7JPKfaf~;_b3=BdhNE~53274ZaVg?2gJw}9pr*L~cBaa}X5TgUvbSEB= z6GUYh4TV7>5!{hrv&C2$425O57#PI48A0L<3=$?#5lJuulyN(o7#Rf_4TV7_NOv_c zGB9yX1Qkp&olT4kAPEKrS!9br205^StgIJiV30#NpNWluK_1}&CN2gB1&{+k;))>a zKnx{>r@#h*+|IzD%nA=YkRlbBn-~~W!B#^97On&2Ry7l524;@Q>0WY^FXa1%Ajbt8 zYFx0R#svo~E;zwvgJTI68(av7FfedWzE~*j!-MKWUK13j@<Bot<RE^8-x(MLkmG`Z zK@buUllAiDwV{D3itwbE9yH?MQ7H~q&oy~szQ|;UA`Tfzgu6fiB!#ewiEDCyk^E$~ z!WAaSK|pMB1bHzHDGh>52c<%2h=aJo$id_(Yy(bfBCHIc<P7%&C;-HeQja*ocM_oR zW?+z<tY0KqFNNw6X=Jk@8A1l30-W+7Ng5t9a^R2wB{k#_23fCwEWp5^h=?}^1|_IH z0o>Ny>X2LmPQt<r49ZAh$;QB-f{0K^+5@K#n77p=7#JAT5jjI+^2I`7MNlFJxj++P zB`Ec4ft||5z@WYPUeR%8_SK+96+_zOHD%eXF{LG$Ig<~Tt<+}7P0Y;GO9riANlDE~ ztklZ@Eodn&Ny*GB(aT_9W?;z7uP`*SNHi&({HxrEkzulKg?had10ypNCkq23Gb1NH zHVaq{Gba}VBLfo)BQpyp6O_fs$-}_N!UPum3#zFYIYk&47#SH@nLy*N%oi9ys=2^6 zaDh}ZKV{(LV_;-qWL{p+#wo<W$jLD|qE0#eJy;0?10$%01M3G@PoH7J%peJnI~gbv znVeTG2A-^DZes+QW&$>ihk=n(59(~tC>wJZ4oT4P8gm~G$$2cG_8AUI(105AG_a%@ zrlp{fH0D`gSxiZAK+IzVIb8`fFvh$Ho5FU`R0G3ehRJKovL~BX$xe=|QiuT!un03V zateUG35f<sbPIt+I2ah2dBKs(2#QkXYA{*D$p)4Mk<3sw3j-r3A2f)-4iW{qryexo z!7R<l%na7Z1WFCej8H8S42+zh;X_bj0F7=itAkP-$WWL%h*KmOp!zvM!$2U_paBhL zBSvO6P*ULp4P`Qhfs?%u$din}`M4Mu85tQF7$)y7TR-_&jn<?Jxq6$V(#)I^-OM~Y zkoy=ISeZbb0%k5yG(!?Mvi~7gGlBhyOhQ5mLL$V$-s2R5`XAKMV3q+TY={bwxh#{r zYt7j}4Q*zN$^LbsdNv??G1Bt^u!R`HM<!3MGp=W40<}h&&oD4D=Yqpfj1v?=Okg%M zG;Bc*X9tUbLKkES$Pr9nl`^0l%FF_m%?3p)JVZgwMCP~P><-F6Tp%Uz$N_~H^KXWF zkYONM7EWXbf*OC!lfg+2ViPC^VRnN83RZ#$AjLPR=?BhYo9n@DI?n)hAS@;FfL+4D zz{tr34bwLq46+Q+tOc<E<aI`nE{G>4cQ;7tfLsciIs+{}0S_C)7NIaOFgWtD%wcxq zW1Y+5$j9cyD>L~|oq{H)qy=e$VT2+Eh7hPAXz)F6^2GXJR#4uDus|6d!UE-L2n&>j zAuLdK1+ly*%hXG-g7ReEWXFd1dXW2mFflNIvK?sEiX$IO56DTqASd;)I`XmivpMo{ z%wc!r<DAO@>fkdlfYd`B!T@Ucg7~0Z1!|*$To2-dat~;=iz6S)1dw?XLG!2#5WS$h zBESG%1yj%P|NsC0j0{ZmDm)6zpvgJVa+(fi1_n@004>jP<YVaq8PE-KP!GsKy&wnm zgB&!0!;z0`BBvuC_Z%)qKAyRt9u3GrApM{e4_Z9~<Ac(<5NPou0|Ns{9^!#|h>s8g zn0%0rK=Po34qAVM93L>lL1`7#PlWLyh9k@ZB}mX39R;Z6ptJ^BtK+B(4<1K8wmBf* z&1HjG2<jMsQVhbv&7T?%N(p8p=B4DPr7^^VtIhb_;>ic+C`?{;jGNEMf+0S>EH$|# zzbM|wa`K}&*&G3$e&)_0K|Ygx<|=Zh<d-Jpq=GBn$yIZ8S>xkNatk&uo2$;q6d%9& z)Vy3qsrYzsnUt9qpIBA|wIR7OIVZJvve^P>j?&D$5@VzIlF1bdYPix8vr`Kale1Gx zCjVI=E#vGQ5FZ@i8=s!c;Nlq+>>9!lA77H0oLwBBk~~>|p#eACZ5Ec3(-#KvmK4O7 zRCoplF}S$-_)OlsP_G`Y!qSK#z}M3`zPO~QG`WN!Ik6xyIkTjap(rW7yeP9Im7ydt zGslo2BQ-I_5F}WXnwSEj^HR$h(uz`38T9n@_4JD}^U{+_)6!Cl^pZic8HvRyi6w~) zxrsSB`CyTv)Z)|<hR|TgppbZ%pviWN+$J+G7M<L(D21=2Aig-YB&Z^|B(bElc=Gc_ zvYRCr?_sQmh=)MMp?aM?f<2>L<1L&#LqPrqH6)~%LE~_f6qrE_87PMZ!~hN4F*8h3 zU<EOhpfYSA1}I-MG4!y((htZSZD!DlUdZT+HZwyo14t1I!)L~f`7mXm8CuZfFB=0W z>z@Gi-@#HS;woRjV?H1Wgg6gqI)47-m8;Arx2~0{&za1aI~hL6fociJT2Pe+ayc`I z5dn2M3y4t!<*<SnB~T6<h*1XRu!9&CP!0!(Q3d62f*7Ewy?T(@Tp(5*REitKXn=Bf zK#V3RhZn?XfpYjjj5a8TAH)FVSdeJ~AO@(A1aSmGo(Ex&z!9i&W)R~Tm{UJVfd#~R z0On0nU<ENi0}&w2Y#_!Hs0=%Z@eIo005L#gg&<{|AjT`G3>S#;2Fl?EG2THrJRrsg zD2Ers_yk%o0WyK_6Eg$D7pN3Ji17`|5dbkj<vd6k+%q5nBTz$*VUhwfh+zWduz(nT zP!21I5dh_|ffzwh4m*eu0^-y&Oj6(gvBE$+hDi#XAVvg~!v$hQK{?zYMhuk017gHM zIlLf70+hoCVkAL1{2)dOlp_FQfRZbcU+Nja33vfi2{VYX2+CmrG4?<?tRTidD2ENi zH~{6agBXXP91alU2$aJKVjP2VxIl~(P!2bUaf*e30i6DLK&&%RDP9l*w8jSHN<I+d z0#t?{#JB|I2!I%%$`+&y9x)&RK2~Tc0AdJ0IV>QC7L>yZVt|(ZFf-IoQeXqI^q^Ag zAcg^y!vSI#K{=cth6$9z1!9;%Iou$I1(d@BVpu^rydZ`Rl*0#NfJTBrF6IX@99TgU zHVlRPiy7(nd>kQCfAAb}dFW@Zqh4$5HxF=jwHtRTiLD2ENim;>dogBbIm91aj; z0hGfDVk`o2;u$6>aDiA$Ks<&?3fv&ZGAM@!#8?64@PZhtpd3CBV-1wU4`Qr?as)sO zP-_S5m&vtj73xt-HIUpZsA6Ui;|-L<0%EYSL1K>;#NdE(*gy;}D2E-y0F6U~EZ_h! z_@FYJAcg>x!v$gpfjFQ%#tmYLfOrg(6nH=k(3%{O3A`YN1XP9(#E^n=_(2RAC`SOq z05#b_df-t65{Q7RU<NUwpd1zuBL>2$S6~IP;vhT)HV`8L%3%jFlAs(85Chb#1K9!U z;(`iJa62)V4b-who)rLz>;Q|#OlFLo%osPBF@7>5NCad6D8$oXl~p}M0UHBD1skGL z1F=_t`H<=d#0CwVvoSy_JrH{Xl04WQ&^hxtSj0hA?gNWM^n=)-<|rFO-eku7$*b0I zf%|}0KwUS6G!O-nMR6o}vGyBiKrn+C@1PtO5ChbJ1%(P|6AsulAOrp&SqWl;6hW<o z*Qg*d70|>8%x@~}kd`jGLQw11h#ivnm_ZB^D2D~aFoSYfK@1BhhYiHAf^yhF4A4+N z$eA1<h8<Lf(+*_61C+-FVmLuL+#m+1-3-zMYRZEB26BoYJ0iM3>^We5)MUo!$&4U2 zNE0Xk5ls@1u0XIVNIC(rLGuJ`3^9`#>tiP~f;cd3@WcUb^@Ef$GNgd0DeRyfPVpcL zrZxqZkdV|Sfz(a_t4#z^Fttf2YA1meBuoPNAEqJ!t|Ek;fgu;{U`VO~vHQS$NU8*} zLAqcu2M!ws1_qGWGO#*`J`fw!*FcX^keCDqBpA6ss~tfc8IH-`YfsgKx)ySvsWMOv z4q_-kIV>OssB-~|5qN3?Dc67+1u_Z5&H?iwP6e?+n$Ti|gMlFsG;P6<8N$K95DQ^~ zya8S(0-7NL83gkmhz*)CVq<_93Q`EdpgA4Tv=0-5Aw2A0V(4l?jwk>-3=%dVHmECv z>adD>4hDuABxN8rsE33egdnkX(2!vUF+ht3K_SBeVr+uSu!0y{pd2<31JscMDFZEF z0eJzuRbmgq!g@v!=NVW4;#m+Iqzl!dpot%lN>~tq*r16ZbZ>)nf>tDg>|_QpK0sZ= z0%CyXdO$Mp=zNpH!NBkhY&#^Fz-&%XQh~UJjgx@^qzlzGAX|QdBQXs`!4x3!5@^%` z)PVru5a!A9>%{6o1rewn4{HB{FsSJW!k~5-2!mQIAPlPPK^Rm!g7knehz+V?z#+&0 z88HAAwIDeV2C+fqAP9rXIS>Yw0x<Ok><q%-+ycrmpxgk$G8`ax8G-bJQZ*>SfG{YL zfW$x;#0JGY2!s3#!W^8FCvq!KUck+|nPt5Q^JI<<3+fNTEMfpHH~#n^w3f&RG$H^N zXJoj+z`)=E+A;~+gTuhc@C1$j5sm*BwwH#1fkB9Yk%5g7RX=E84-|HwK?)%T#(D-h zGzD5{d{Z>O6B^%-k%3{sf3RyA1Q<U4Peqe2MB~?@@aq{FIvE)lK%ovATLHOv3W@?o zh6QN+HE8@Dj0_B*g$p1j2rw`*oMA-lDgv2zl@YS{6efQMv@JuS0W@sSAXv}9%<urs zz_)1ppJ;qmCe$DmMB~e%@ijqfd|(zbFf-^P$=53|Ffv#o34r*nNPLiwLP5)OI6(0U z!i)?_Nb(@{`Am@N7#gPxWoYtEObiSm&@=^#qDct(dIpdI^AQ4I{wk1*IT;uX7$Fvd z7P%rP!hLA!L92y884c!uYiRP1(D?7*{Cd!;Z$^e+Z~+LP9W)3H4>BeOX=c<o)@4SG z0!uW$8yY{58L^`clqRBJ@}Not6awim0cbWWM&s8rBPXJd|0kk32(-RONTC6g#ux+` zm>HI%>EDdT-w#>`3+lUpbb#XI8kz!7w;egiK^<>U83+sFU(5^)eDDxrW?*JP4H14c zzBCJD#{+1f5)=Z;5P5x&{opv)XF&upC`8O43gGfiVE$yg?NRleU?x}wtaTa-q(K21 zxCEIEDwC1jzKVr`!GH-oa>^jU#K^D{O+Tnti>w~hEoES61Y01$z`}4JRee3fYZe9u z(8^*^xhTlM%<vvn0mC0OJ}0Qwf(I58gEVMI0!TA7w$)h~7(f*WEO3p{<Uw6agahjt z89+<4!OjDZ2Qz|KA|VtoG9<Br_RzqR0~13o$N^9dpuh!nK9SXTqFFc%jSuQwf@&Dh zXsu8P10w^d>xgW?Hjo97J)_`K_!61{_tE&TSrM@fDq?<4uH30yk8GkW8v}y~6J*gi zDAGWyfIyWbXm}hH$tG;53C<CX?+fZ!AmxZiHU{{1R*-&B4-Qm$f(EBS{B$;kIB@?R z774{@1~#DayV3a5(fEte_!}ly?ozG?)ytqUZIG2W;3JlxQs?9U$7ni0ohIZU`3X{w z6v$HSs6n8H#s~F)koAN6FvtR4Xd1%M_(^Dd&;mDP{Z;Icp(j|7wXriWAW9(?hRJC9 z=Ytk^BiEH{*-?|hPId-{|MrlCs=)B^|3NeZ&Y|&dfw~azNM>RHt&2i-;9E5H8TG8F zF8qn6fQ<t+NCi0%Tb)5sCW|JoiN>$xU|;~PFavo(fr*j9jDvwe0G{)i8R~7&G<c%% z!_fH2pmp7#*?w?N|M(x&%7<A1$`(y%>if|6vrzf<49idj7(nfQ<RAkz&5`+_<ypvl z&?+rtK4`5L=ok%<j|CW*7~Z3q{~Lv0&&a?IZli;ggG%I&|K&JQgIo(dY65DFLF7Tp zwpidn$ixtcral&ppNYmVMdsTuFfufPmTrRf0zjLn9mon87#XH=GBAJ^Wr3Qipg5n! z$-n^GS;92AaNqvP3HvW{6(z+(Cq*V398jN}azKa!HY>Ba^gt~m2W-M+^2dXR*r78| zn>QVDVC0IA2hF9#r{<+h<~p)bEIvLZKR!9Xpb{($nr#8i$xOa@WSRilj7j|Dg@=VV zS0A0h#GIE}K3U?#m&x2GMVb7#Co7#)Vg(&$!Zx|^r10dJlLD-uqf2-u7oJpRdci$; z+DSDg37*OOPO7m+@Gvk~On!M%nQa0u14EI+WT8_^Y)pO(3{!L_Tb)v3n^wiZ;K?&N z>68-NgEj_+9W0Z(PARd?=w@J8q&#`kDJ3?m^$ZMicqiXFrNnk^4+8@S<7B4OO055` tF)(ZaTW)h&fcL>(28ITHP~0&v*iVi;EiI97mVsd&I94IC4(gwPSO9KYD~$jE diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex index 8733084..6c7246a 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.hex @@ -4,8 +4,8 @@ :100030000C9424010C9424010C9424010C942401AC :100040000C9424010C9424010C9424010C9424019C :100050000C9424010C9424010C9424010C9424018C -:100060000C9424010C94AA010C94E1010C94240139 -:100070000C9418020C944F020C9424010C9424014B +:100060000C9424010C94C0010C9424010C942401E0 +:100070000C94F5010C9424010C9424010C9424019B :100080000C9424010C9424010C9424010C9424015C :100090000C9424010C9424010C9424010C9424014C :1000A0000C9424010C9424010C9424010C9424013C @@ -20,8 +20,8 @@ :100130000C9424010C9424010C9424010C942401AB :100140000C9424010C9424010C9424010C9424019B :100150000C9424010C9424010C9424010C9424018B -:100160000C9486020C94BD020C9424010C9424017E -:100170000C94F4020C9424010C9424010C9424019A +:100160000C942A020C9424010C9424010C945F0238 +:100170000C9424010C9424010C9424010C9424016B :100180000C9424010C9424010C9424010C9424015B :100190000C9424010C9424010C9424010C9424014B :1001A0000C9424010C9424010C9424010C9424013B @@ -31,153 +31,127 @@ :1001E0000C9424010C9424010C9424010C942401FB :1001F0000C9424010C9424010C94240111241FBE9E :10020000CFEFCDBFDFE3DEBF00E00CBF18BE19BEED -:100210001ABE1BBE10E2A0E0B0E2EEE4FBE000E09C +:100210001ABE1BBE10E2A0E0B0E2E8EAF9E000E09E :100220000BBF02C007900D92A630B107D9F71BBED5 -:1002300020E2A6E0B0E201C01D92A231B207E1F7D0 -:100240000E9426010C94A5050C940000E0E5F0E066 -:1002500088E1858380E18083818184FFFDCF88ED03 -:1002600084BF84E08093400000E128E044E060E443 -:1002700076E080EA98E00E949803809308209093AB -:1002800009200E94CF0300E220E840E460E476E029 -:1002900080EB98E00E9498038093062090930720BB -:1002A0000E94CF0300E128E044E060E676E080EAC7 -:1002B00099E00E94980380930C2090930D200E9457 -:1002C000CF0300E220E840E460E676E080EB99E0CE -:1002D0000E94980380930A2090930B200E94CF03E2 -:1002E000E0EAF0E082818760828378948091082040 -:1002F000909109200E94050480910C2090910D207E -:100300000E9405042FE78AE196E02150804090404A -:10031000E1F700C00000EACFCF93DF931F92CDB783 -:10032000DEB7BE016F5F7F4F0E9437046981809105 -:100330000A2090910B200E9476042FE78AE196E034 -:10034000215080409040E1F700C000000F90DF9105 -:10035000CF9108951F920F920FB60F92112408B6F5 -:100360000F9218BE09B60F9219BE0BB60F921BBEA4 -:100370002F933F934F935F936F937F938F939F93AD -:10038000AF93BF93EF93FF93809108209091092042 -:100390000E940E04FF91EF91BF91AF919F918F91B9 -:1003A0007F916F915F914F913F912F910F900BBE75 -:1003B0000F9009BE0F9008BE0F900FBE0F901F90B8 -:1003C00018951F920F920FB60F92112408B60F9234 -:1003D00018BE09B60F9219BE0BB60F921BBE2F9313 -:1003E0003F934F935F936F937F938F939F93AF93BD -:1003F000BF93EF93FF9380910820909109200E9472 -:100400005604FF91EF91BF91AF919F918F917F9192 -:100410006F915F914F913F912F910F900BBE0F9075 -:1004200009BE0F9008BE0F900FBE0F901F90189539 -:100430001F920F920FB60F92112408B60F9218BE9A -:1004400009B60F9219BE0BB60F921BBE2F933F93A6 -:100450004F935F936F937F938F939F93AF93BF93CC -:10046000EF93FF9380910620909107200E940E0445 -:10047000FF91EF91BF91AF919F918F917F916F917C -:100480005F914F913F912F910F900BBE0F9009BE3E -:100490000F9008BE0F900FBE0F901F9018951F92DF -:1004A0000F920FB60F92112408B60F9218BE09B61C -:1004B0000F9219BE0BB60F921BBE2F933F934F9313 -:1004C0005F936F937F938F939F93AF93BF93EF93BC -:1004D000FF9380910620909107200E945604FF917F -:1004E000EF91BF91AF919F918F917F916F915F91AC -:1004F0004F913F912F910F900BBE0F9009BE0F901F -:1005000008BE0F900FBE0F901F9018951F920F926C -:100510000FB60F92112408B60F9218BE09B60F92AB -:1005200019BE0BB60F921BBE2F933F934F935F9351 -:100530006F937F938F939F93AF93BF93EF93FF93AB -:1005400080910C2090910D200E940E04FF91EF915C -:10055000BF91AF919F918F917F916F915F914F91DB -:100560003F912F910F900BBE0F9009BE0F9008BEC8 -:100570000F900FBE0F901F9018951F920F920FB6FD -:100580000F92112408B60F9218BE09B60F9219BE29 -:100590000BB60F921BBE2F933F934F935F936F93B6 -:1005A0007F938F939F93AF93BF93EF93FF9380912C -:1005B0000C2090910D200E945604FF91EF91BF9165 -:1005C000AF919F918F917F916F915F914F913F91EB -:1005D0002F910F900BBE0F9009BE0F9008BE0F9089 -:1005E0000FBE0F901F9018951F920F920FB60F928B -:1005F000112408B60F9218BE09B60F9219BE0BB699 -:100600000F921BBE2F933F934F935F936F937F93F4 -:100610008F939F93AF93BF93EF93FF9380910A20A3 -:1006200090910B200E945604FF91EF91BF91AF91E2 -:100630009F918F917F916F915F914F913F912F91FA -:100640000F900BBE0F9009BE0F9008BE0F900FBE0B -:100650000F901F901895CF92DF92EF92FF92CF9359 -:10066000DF936B017C0188E090E00E948404EC0140 -:10067000892BD1F0D701C6010196A11DB11D8C8334 -:100680009D83AE83BF830E94840488839983892BD2 -:1006900029F01A821B828C2F9D2F08C0CE010E9448 -:1006A0001C0580E090E002C080E090E0DF91CF91F7 -:1006B000FF90EF90DF90CF900895FC018281A081A0 -:1006C000B181A80FB11D6C9342814F5F428350E00E -:1006D00060E070E084819581A681B7814817590751 -:1006E0006A077B0708F0128208950F931F93FC019D -:1006F0004381A081B181A40FB11D8C914F5F4383D1 -:1007000050E060E070E00481158126813781401758 -:1007100051076207730708F013821F910F91089524 -:10072000FC0181E023819281291301C080E00895BA -:10073000AF92BF92CF92DF92FF920F931F93CF930E -:10074000DF935C016B01F42E122F8EE090E00E948B -:100750008404EC01A882B982CA82DB82FC821D83F8 -:100760000E8360E170E080E090E00E942B038F83B5 -:10077000988760E170E080E090E00E942B03898719 -:100780009A871B861C861D86CE01DF91CF911F9113 -:100790000F91FF90DF90CF90BF90AF900895FC0134 -:1007A000A081B1818BE916968C93A081B1811796B7 -:1007B0001C92A081B18113968C911397806113963E -:1007C0008C93A081B18188E114968C93A081B18132 -:1007D00083E015968C93A281B381858115968C93C5 -:1007E000A281B381858111968C93A281B38184818A -:1007F00012968C93A281B381848116968C93A281E8 -:10080000B381868111968C930895DC011296ED9147 -:10081000FC91139716968C9187830895CF93DF935D -:10082000EC01EA81FB818E818783E881F9819081E7 -:100830008D85882319F0813031F011C09E3779F40D -:1008400081E08D870CC09E3729F41D86CE010E9461 -:100850008C0105C060818F8198850E945D038C8525 -:10086000813011F081E08C87DF91CF91089581E58F -:10087000FB01808380E00895FC0183858617A9F041 -:10088000662351F0A081B18113968C9113978160FA -:1008900013968C9363870895A081B18113968C91F0 -:1008A00013978C7F13968C93138608950F931F9341 -:1008B000CF93DF93EC01EA81FB818E8187830881EE -:1008C000198189859A850E947503F801808389853D -:1008D0009A850E949003811104C060E0CE010E94BD -:1008E0003C04DF91CF911F910F910895CF93DF9337 -:1008F000EC0189859A850E945D0361E0CE010E942A -:100900003C04DF91CF9108950F931F93CF93DF9312 -:100910008230910510F482E090E0E0911020F09197 -:10092000112020E030E0A0E0B0E0309719F14081E4 -:1009300051810281138148175907C8F08417950720 -:1009400069F4109731F012960C93129713961C933A -:1009500027C0009310201093112022C021153105CB -:1009600019F04217530718F49A01BD01EF01DF0196 -:10097000F801DBCF21153105F9F0281B390B2430A4 -:10098000310580F48A819B816115710521F0FB019D -:100990008283938304C08093102090931120FE01E2 -:1009A000329644C0FE01E20FF31F819391932250CF -:1009B0003109288339833AC020910E2030910F20CD -:1009C000232B41F4209102203091032020930E200C -:1009D00030930F2020910020309101202115310506 -:1009E00041F42DB73EB74091042050910520241BBF -:1009F000350BE0910E20F0910F20E217F307A0F4E1 -:100A00002E1B3F0B2817390778F0AC014E5F5F4F64 -:100A10002417350748F04E0F5F1F40930E20509368 -:100A20000F208193919302C0E0E0F0E0CF01DF91CD -:100A3000CF911F910F910895CF93DF93009709F401 -:100A400081C0FC01329712821382A0911020B091D4 -:100A50001120109781F420813181820F931F209102 -:100A60000E2030910F202817390751F5E0930E2002 -:100A7000F0930F2067C0ED0120E030E0CE17DF07D4 -:100A800040F44A815B819E0141155105F1F0EA0174 -:100A9000F5CFC283D38340815181840F951FC8173E -:100AA000D90759F488819981840F951F0296808314 -:100AB00091838A819B81828393832115310529F457 -:100AC000E0931020F09311203DC0E901EA83FB83FD -:100AD00049915991C40FD51FEC17FD0761F480812E -:100AE0009181840F951F0296E90188839983828101 -:100AF00093818A839B83E0E0F0E012968D919C9134 -:100B00001397009719F0FD01DC01F7CF8D919C91AF -:100B100011979D012E5F3F4F820F931F20910E2052 -:100B200030910F202817390769F4309729F4109273 -:100B300010201092112002C012821382A0930E2066 -:0E0B4000B0930F20DF91CF910895F894FFCF6E -:060B4E000000122020004F +:1002300020E2A6E0B0E201C01D92A637B207E1F7C6 +:100240000E9426010C94D2040C940000CF93DF93FB +:10025000CDB7DEB76C97CDBFDEBFE0E5F0E088E15B +:10026000858380E18083818184FFFDCF88ED84BF19 +:1002700084E0809340006894EE24E4F808E024E0F1 +:1002800040E456E060EA78E0CE0102960E94FA026D +:100290008BE1FE013296A1E2B0E201900D928A95C7 +:1002A000E1F781E290E20E942F036894EE24E5F8E2 +:1002B00000E820E440E456E060EB78E0CE010296EE +:1002C0000E94FA028BE1FE013296A6E0B0E20190B4 +:1002D0000D928A95E1F786E090E20E942F036894E0 +:1002E000EE24E4F808E024E040E656E060EA79E035 +:1002F000CE0102960E94FA028BE1FE013296A7E53A +:10030000B0E201900D928A95E1F787E590E20E94B4 +:100310002F036894EE24E5F800E820E440E656E078 +:1003200060EB79E0CE0102960E94FA028BE1FE01B9 +:100330003296ACE3B0E201900D928A95E1F78CE33E +:1003400090E20E942F03E0EAF0E0828187608283DE +:10035000789481E290E20E949403BE016F5F7F4F28 +:1003600086E090E20E948303882399F387E590E278 +:100370000E94940369818CE390E20E948C03E9CF90 +:100380001F920F920FB60F92112408B60F9218BE4B +:1003900009B60F9219BE0BB60F921BBE2F933F9357 +:1003A0004F935F936F937F938F939F93AF93BF937D +:1003B000EF93FF9381E290E20E946503FF91EF913A +:1003C000BF91AF919F918F917F916F915F914F916D +:1003D0003F912F910F900BBE0F9009BE0F9008BE5A +:1003E0000F900FBE0F901F9018951F920F920FB68F +:1003F0000F92112408B60F9218BE09B60F9219BEBB +:100400000BB60F921BBE2F933F934F935F936F9347 +:100410007F938F939F93AF93BF93EF93FF9386E068 +:1004200090E20E946503FF91EF91BF91AF919F9180 +:100430008F917F916F915F914F913F912F910F908D +:100440000BBE0F9009BE0F9008BE0F900FBE0F900D +:100450001F9018951F920F920FB60F92112408B695 +:100460000F9218BE09B60F9219BE0BB60F921BBEA3 +:100470002F933F934F935F936F937F938F939F93AC +:10048000AF93BF93EF93FF9387E590E20E946503DC +:10049000FF91EF91BF91AF919F918F917F916F915C +:1004A0005F914F913F912F910F900BBE0F9009BE1E +:1004B0000F9008BE0F900FBE0F901F9018951F92BF +:1004C0000F920FB60F92112408B60F9218BE09B6FC +:1004D0000F9219BE0BB60F921BBE2F933F934F93F3 +:1004E0005F936F937F938F939F93AF93BF93EF939C +:1004F000FF938CE390E20E946503FF91EF91BF911F +:10050000AF919F918F917F916F915F914F913F91AB +:100510002F910F900BBE0F9009BE0F9008BE0F9049 +:100520000FBE0F901F901895009739F0FC011282B2 +:1005300013821482158281E0089580E00895CF939C +:10054000DF93EC01CB016E837F830E94B10388832C +:100550009983CE010E94940281E0DF91CF910895AA +:10056000FC01892BF1F0A081B18182819381A80FD8 +:10057000B91F6C9326813781828193810196B901DD +:100580000E949D038283938344815581841795073C +:1005900051F40196B9010E949D038483958381E003 +:1005A000089580E0089581E00895FC01892BE1F031 +:1005B00061157105D9F022813381848195812817D5 +:1005C0003907B1F0A081B181A80FB91F8C91DB016F +:1005D0008C93848195810196668177810E949D0329 +:1005E0008483958381E0089580E0089580E00895F4 +:1005F00080E00895CF92DF92EF920F93CF93DF9335 +:10060000CDB7DEB76B97CDBFDEBF6C0169837A8350 +:100610004B835C832D830E83EF82188619861A869E +:1006200060E870E0CE010C960E949F0260E870E0E6 +:10063000CE0144960E949F028BE1FE013196D601C5 +:1006400001900D928A95E1F7C6016B96CDBFDEBF92 +:10065000DF91CF910F91EF90DF90CF900895FC0143 +:10066000A081B1818BE916968C93A081B1811796F8 +:100670001C92A081B18113968C911397806113967F +:100680008C93A081B18188E114968C93A081B18173 +:1006900083E015968C93A281B381858115968C9306 +:1006A000A281B381858111968C93A281B3818481CB +:1006B00012968C93A281B381848116968C93A28129 +:1006C000B381868111968C930895FC01A281B38138 +:1006D000868117968C93A081B1816C916287818508 +:1006E000882319F0813031F008956E3759F481E094 +:1006F000818708956E3711F411860895CF010B9606 +:100700000E94B00208950B960E94D50291E08111DB +:1007100001C090E0892F0895DC01ED91FC91818169 +:1007200085FFFDCF60830895DC011296ED91FC9169 +:10073000139716968C9187830895AA1BBB1B51E1D2 +:1007400007C0AA1FBB1FA617B70710F0A61BB70B41 +:10075000881F991F5A95A9F780959095BC01CD01E6 +:1007600008950F931F93CF93DF938230910510F478 +:1007700082E090E0E0917420F091752020E030E07C +:10078000A0E0B0E0309719F14081518102811381DE +:1007900048175907C8F08417950769F4109731F086 +:1007A00012960C93129713961C9327C000937420F3 +:1007B0001093752022C02115310519F042175307F7 +:1007C00018F49A01BD01EF01DF01F801DBCF21151B +:1007D0003105F9F0281B390B2430310580F48A816A +:1007E0009B816115710521F0FB018283938304C015 +:1007F0008093742090937520FE01329644C0FE01D0 +:10080000E20FF31F8193919322503109288339839A +:100810003AC02091722030917320232B41F4209113 +:100820000220309103202093722030937320209176 +:100830000020309101202115310541F42DB73EB73C +:100840004091042050910520241B350BE09172202B +:10085000F0917320E217F307A0F42E1B3F0B28172B +:10086000390778F0AC014E5F5F4F2417350748F029 +:100870004E0F5F1F4093722050937320819391938A +:1008800002C0E0E0F0E0CF01DF91CF911F910F9126 +:100890000895CF93DF93009709F481C0FC0132974C +:1008A00012821382A0917420B0917520109781F468 +:1008B00020813181820F931F20917220309173200B +:1008C0002817390751F5E0937220F093732067C021 +:1008D000ED0120E030E0CE17DF0740F44A815B8174 +:1008E0009E0141155105F1F0EA01F5CFC283D38392 +:1008F00040815181840F951FC817D90759F4888109 +:100900009981840F951F0296808391838A819B81B0 +:10091000828393832115310529F4E0937420F093A9 +:1009200075203DC0E901EA83FB8349915991C40FC9 +:10093000D51FEC17FD0761F480819181840F951F0D +:100940000296E90188839983828193818A839B83BC +:10095000E0E0F0E012968D919C911397009719F0CA +:10096000FD01DC01F7CF8D919C9111979D012E5FC8 +:100970003F4F820F931F20917220309173202817D0 +:10098000390769F4309729F4109274201092752079 +:1009900002C012821382A0937220B0937320DF9161 +:0809A000CF910895F894FFCFF8 +:0609A80000007620200093 :00000001FF diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss index 5fbbbe0..ddadf42 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.lss @@ -3,31 +3,31 @@ atxmega-a4u-wakeup.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .text 00000b4e 00000000 00000000 00000094 2**1 + 0 .text 000009a8 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000006 00802000 00000b4e 00000be2 2**0 + 1 .data 00000006 00802000 000009a8 00000a3c 2**0 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 0000000c 00802006 00802006 00000be8 2**0 + 2 .bss 00000070 00802006 00802006 00000a42 2**0 ALLOC - 3 .comment 00000030 00000000 00000000 00000be8 2**0 + 3 .comment 00000030 00000000 00000000 00000a42 2**0 CONTENTS, READONLY - 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000c18 2**2 + 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 00000a74 2**2 CONTENTS, READONLY - 5 .debug_aranges 00000138 00000000 00000000 00000c58 2**0 + 5 .debug_aranges 00000100 00000000 00000000 00000ab4 2**0 CONTENTS, READONLY, DEBUGGING - 6 .debug_info 00004072 00000000 00000000 00000d90 2**0 + 6 .debug_info 00003c5f 00000000 00000000 00000bb4 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_abbrev 00002c94 00000000 00000000 00004e02 2**0 + 7 .debug_abbrev 00002add 00000000 00000000 00004813 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_line 00000c49 00000000 00000000 00007a96 2**0 + 8 .debug_line 00000bd5 00000000 00000000 000072f0 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_frame 000004b8 00000000 00000000 000086e0 2**2 + 9 .debug_frame 0000032c 00000000 00000000 00007ec8 2**2 CONTENTS, READONLY, DEBUGGING - 10 .debug_str 000023a2 00000000 00000000 00008b98 2**0 + 10 .debug_str 000022f6 00000000 00000000 000081f4 2**0 CONTENTS, READONLY, DEBUGGING - 11 .debug_loc 00000d9c 00000000 00000000 0000af3a 2**0 + 11 .debug_loc 0000092b 00000000 00000000 0000a4ea 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_ranges 00000108 00000000 00000000 0000bcd6 2**0 + 12 .debug_ranges 000000d0 00000000 00000000 0000ae15 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -58,11 +58,11 @@ Disassembly of section .text: 58: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 5c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 60: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> - 64: 0c 94 aa 01 jmp 0x354 ; 0x354 <__vector_25> - 68: 0c 94 e1 01 jmp 0x3c2 ; 0x3c2 <__vector_26> + 64: 0c 94 c0 01 jmp 0x380 ; 0x380 <__vector_25> + 68: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 6c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> - 70: 0c 94 18 02 jmp 0x430 ; 0x430 <__vector_28> - 74: 0c 94 4f 02 jmp 0x49e ; 0x49e <__vector_29> + 70: 0c 94 f5 01 jmp 0x3ea ; 0x3ea <__vector_28> + 74: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 78: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 7c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 80: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> @@ -121,11 +121,11 @@ Disassembly of section .text: 154: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 158: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 15c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> - 160: 0c 94 86 02 jmp 0x50c ; 0x50c <__vector_88> - 164: 0c 94 bd 02 jmp 0x57a ; 0x57a <__vector_89> + 160: 0c 94 2a 02 jmp 0x454 ; 0x454 <__vector_88> + 164: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 168: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> - 16c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> - 170: 0c 94 f4 02 jmp 0x5e8 ; 0x5e8 <__vector_92> + 16c: 0c 94 5f 02 jmp 0x4be ; 0x4be <__vector_91> + 170: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 174: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 178: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> 17c: 0c 94 24 01 jmp 0x248 ; 0x248 <__bad_interrupt> @@ -179,8 +179,8 @@ Disassembly of section .text: 214: 10 e2 ldi r17, 0x20 ; 32 216: a0 e0 ldi r26, 0x00 ; 0 218: b0 e2 ldi r27, 0x20 ; 32 - 21a: ee e4 ldi r30, 0x4E ; 78 - 21c: fb e0 ldi r31, 0x0B ; 11 + 21a: e8 ea ldi r30, 0xA8 ; 168 + 21c: f9 e0 ldi r31, 0x09 ; 9 21e: 00 e0 ldi r16, 0x00 ; 0 220: 0b bf out 0x3b, r16 ; 59 222: 02 c0 rjmp .+4 ; 0x228 <__do_copy_data+0x14> @@ -201,1213 +201,1124 @@ Disassembly of section .text: 238: 1d 92 st X+, r1 0000023a <.do_clear_bss_start>: - 23a: a2 31 cpi r26, 0x12 ; 18 + 23a: a6 37 cpi r26, 0x76 ; 118 23c: b2 07 cpc r27, r18 23e: e1 f7 brne .-8 ; 0x238 <.do_clear_bss_loop> 240: 0e 94 26 01 call 0x24c ; 0x24c <main> - 244: 0c 94 a5 05 jmp 0xb4a ; 0xb4a <_exit> + 244: 0c 94 d2 04 jmp 0x9a4 ; 0x9a4 <_exit> 00000248 <__bad_interrupt>: 248: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> 0000024c <main>: - tp_txISR(tp3); -} - -IRS(USARTD1_RXC_vect){ - tp_rxISR(tp4); -} - 24c: e0 e5 ldi r30, 0x50 ; 80 - 24e: f0 e0 ldi r31, 0x00 ; 0 - 250: 88 e1 ldi r24, 0x18 ; 24 - 252: 85 83 std Z+5, r24 ; 0x05 - 254: 80 e1 ldi r24, 0x10 ; 16 - 256: 80 83 st Z, r24 - 258: 81 81 ldd r24, Z+1 ; 0x01 - 25a: 84 ff sbrs r24, 4 - 25c: fd cf rjmp .-6 ; 0x258 <main+0xc> - 25e: 88 ed ldi r24, 0xD8 ; 216 - 260: 84 bf out 0x34, r24 ; 52 - 262: 84 e0 ldi r24, 0x04 ; 4 - 264: 80 93 40 00 sts 0x0040, r24 ; 0x800040 <__TEXT_REGION_LENGTH__+0x700040> - 268: 00 e1 ldi r16, 0x10 ; 16 - 26a: 28 e0 ldi r18, 0x08 ; 8 - 26c: 44 e0 ldi r20, 0x04 ; 4 - 26e: 60 e4 ldi r22, 0x40 ; 64 - 270: 76 e0 ldi r23, 0x06 ; 6 - 272: 80 ea ldi r24, 0xA0 ; 160 - 274: 98 e0 ldi r25, 0x08 ; 8 - 276: 0e 94 98 03 call 0x730 ; 0x730 <tp_new> - 27a: 80 93 08 20 sts 0x2008, r24 ; 0x802008 <tp1> - 27e: 90 93 09 20 sts 0x2009, r25 ; 0x802009 <tp1+0x1> - 282: 0e 94 cf 03 call 0x79e ; 0x79e <tp_init> - 286: 00 e2 ldi r16, 0x20 ; 32 - 288: 20 e8 ldi r18, 0x80 ; 128 - 28a: 40 e4 ldi r20, 0x40 ; 64 - 28c: 60 e4 ldi r22, 0x40 ; 64 - 28e: 76 e0 ldi r23, 0x06 ; 6 - 290: 80 eb ldi r24, 0xB0 ; 176 - 292: 98 e0 ldi r25, 0x08 ; 8 - 294: 0e 94 98 03 call 0x730 ; 0x730 <tp_new> - 298: 80 93 06 20 sts 0x2006, r24 ; 0x802006 <__data_end> - 29c: 90 93 07 20 sts 0x2007, r25 ; 0x802007 <__data_end+0x1> - 2a0: 0e 94 cf 03 call 0x79e ; 0x79e <tp_init> - 2a4: 00 e1 ldi r16, 0x10 ; 16 - 2a6: 28 e0 ldi r18, 0x08 ; 8 - 2a8: 44 e0 ldi r20, 0x04 ; 4 - 2aa: 60 e6 ldi r22, 0x60 ; 96 - 2ac: 76 e0 ldi r23, 0x06 ; 6 - 2ae: 80 ea ldi r24, 0xA0 ; 160 - 2b0: 99 e0 ldi r25, 0x09 ; 9 - 2b2: 0e 94 98 03 call 0x730 ; 0x730 <tp_new> - 2b6: 80 93 0c 20 sts 0x200C, r24 ; 0x80200c <tp3> - 2ba: 90 93 0d 20 sts 0x200D, r25 ; 0x80200d <tp3+0x1> - 2be: 0e 94 cf 03 call 0x79e ; 0x79e <tp_init> - 2c2: 00 e2 ldi r16, 0x20 ; 32 - 2c4: 20 e8 ldi r18, 0x80 ; 128 - 2c6: 40 e4 ldi r20, 0x40 ; 64 - 2c8: 60 e6 ldi r22, 0x60 ; 96 - 2ca: 76 e0 ldi r23, 0x06 ; 6 - 2cc: 80 eb ldi r24, 0xB0 ; 176 - 2ce: 99 e0 ldi r25, 0x09 ; 9 - 2d0: 0e 94 98 03 call 0x730 ; 0x730 <tp_new> - 2d4: 80 93 0a 20 sts 0x200A, r24 ; 0x80200a <tp4> - 2d8: 90 93 0b 20 sts 0x200B, r25 ; 0x80200b <tp4+0x1> - 2dc: 0e 94 cf 03 call 0x79e ; 0x79e <tp_init> - 2e0: e0 ea ldi r30, 0xA0 ; 160 - 2e2: f0 e0 ldi r31, 0x00 ; 0 - 2e4: 82 81 ldd r24, Z+2 ; 0x02 - 2e6: 87 60 ori r24, 0x07 ; 7 - 2e8: 82 83 std Z+2, r24 ; 0x02 - 2ea: 78 94 sei - 2ec: 80 91 08 20 lds r24, 0x2008 ; 0x802008 <tp1> - 2f0: 90 91 09 20 lds r25, 0x2009 ; 0x802009 <tp1+0x1> - 2f4: 0e 94 05 04 call 0x80a ; 0x80a <tp_statflash> - 2f8: 80 91 0c 20 lds r24, 0x200C ; 0x80200c <tp3> - 2fc: 90 91 0d 20 lds r25, 0x200D ; 0x80200d <tp3+0x1> - 300: 0e 94 05 04 call 0x80a ; 0x80a <tp_statflash> - 304: 2f e7 ldi r18, 0x7F ; 127 - 306: 8a e1 ldi r24, 0x1A ; 26 - 308: 96 e0 ldi r25, 0x06 ; 6 - 30a: 21 50 subi r18, 0x01 ; 1 - 30c: 80 40 sbci r24, 0x00 ; 0 - 30e: 90 40 sbci r25, 0x00 ; 0 - 310: e1 f7 brne .-8 ; 0x30a <main+0xbe> - 312: 00 c0 rjmp .+0 ; 0x314 <main+0xc8> - 314: 00 00 nop - 316: ea cf rjmp .-44 ; 0x2ec <main+0xa0> -00000318 <handoff>: - 318: cf 93 push r28 - 31a: df 93 push r29 - 31c: 1f 92 push r1 - 31e: cd b7 in r28, 0x3d ; 61 - 320: de b7 in r29, 0x3e ; 62 - 322: be 01 movw r22, r28 - 324: 6f 5f subi r22, 0xFF ; 255 - 326: 7f 4f sbci r23, 0xFF ; 255 - 328: 0e 94 37 04 call 0x86e ; 0x86e <tp_read> - 32c: 69 81 ldd r22, Y+1 ; 0x01 - 32e: 80 91 0a 20 lds r24, 0x200A ; 0x80200a <tp4> - 332: 90 91 0b 20 lds r25, 0x200B ; 0x80200b <tp4+0x1> - 336: 0e 94 76 04 call 0x8ec ; 0x8ec <tp_write> - 33a: 2f e7 ldi r18, 0x7F ; 127 - 33c: 8a e1 ldi r24, 0x1A ; 26 - 33e: 96 e0 ldi r25, 0x06 ; 6 - 340: 21 50 subi r18, 0x01 ; 1 - 342: 80 40 sbci r24, 0x00 ; 0 - 344: 90 40 sbci r25, 0x00 ; 0 - 346: e1 f7 brne .-8 ; 0x340 <handoff+0x28> - 348: 00 c0 rjmp .+0 ; 0x34a <handoff+0x32> - 34a: 00 00 nop - 34c: 0f 90 pop r0 - 34e: df 91 pop r29 - 350: cf 91 pop r28 - 352: 08 95 ret +/* +turns on global interrupt control +*/ +void interrupts(){ + PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; + 24c: cf 93 push r28 + 24e: df 93 push r29 + 250: cd b7 in r28, 0x3d ; 61 + 252: de b7 in r29, 0x3e ; 62 + 254: 6c 97 sbiw r28, 0x1c ; 28 + 256: cd bf out 0x3d, r28 ; 61 + 258: de bf out 0x3e, r29 ; 62 + 25a: e0 e5 ldi r30, 0x50 ; 80 + 25c: f0 e0 ldi r31, 0x00 ; 0 + 25e: 88 e1 ldi r24, 0x18 ; 24 + 260: 85 83 std Z+5, r24 ; 0x05 + 262: 80 e1 ldi r24, 0x10 ; 16 + 264: 80 83 st Z, r24 + 266: 81 81 ldd r24, Z+1 ; 0x01 + 268: 84 ff sbrs r24, 4 + 26a: fd cf rjmp .-6 ; 0x266 <main+0x1a> + 26c: 88 ed ldi r24, 0xD8 ; 216 + 26e: 84 bf out 0x34, r24 ; 52 + 270: 84 e0 ldi r24, 0x04 ; 4 + 272: 80 93 40 00 sts 0x0040, r24 ; 0x800040 <__TEXT_REGION_LENGTH__+0x700040> + 276: 68 94 set + 278: ee 24 eor r14, r14 + 27a: e4 f8 bld r14, 4 + 27c: 08 e0 ldi r16, 0x08 ; 8 + 27e: 24 e0 ldi r18, 0x04 ; 4 + 280: 40 e4 ldi r20, 0x40 ; 64 + 282: 56 e0 ldi r21, 0x06 ; 6 + 284: 60 ea ldi r22, 0xA0 ; 160 + 286: 78 e0 ldi r23, 0x08 ; 8 + 288: ce 01 movw r24, r28 + 28a: 02 96 adiw r24, 0x02 ; 2 + 28c: 0e 94 fa 02 call 0x5f4 ; 0x5f4 <tp_new> + 290: 8b e1 ldi r24, 0x1B ; 27 + 292: fe 01 movw r30, r28 + 294: 32 96 adiw r30, 0x02 ; 2 + 296: a1 e2 ldi r26, 0x21 ; 33 + 298: b0 e2 ldi r27, 0x20 ; 32 + 29a: 01 90 ld r0, Z+ + 29c: 0d 92 st X+, r0 + 29e: 8a 95 dec r24 + 2a0: e1 f7 brne .-8 ; 0x29a <main+0x4e> + 2a2: 81 e2 ldi r24, 0x21 ; 33 + 2a4: 90 e2 ldi r25, 0x20 ; 32 + 2a6: 0e 94 2f 03 call 0x65e ; 0x65e <tp_init> + 2aa: 68 94 set + 2ac: ee 24 eor r14, r14 + 2ae: e5 f8 bld r14, 5 + 2b0: 00 e8 ldi r16, 0x80 ; 128 + 2b2: 20 e4 ldi r18, 0x40 ; 64 + 2b4: 40 e4 ldi r20, 0x40 ; 64 + 2b6: 56 e0 ldi r21, 0x06 ; 6 + 2b8: 60 eb ldi r22, 0xB0 ; 176 + 2ba: 78 e0 ldi r23, 0x08 ; 8 + 2bc: ce 01 movw r24, r28 + 2be: 02 96 adiw r24, 0x02 ; 2 + 2c0: 0e 94 fa 02 call 0x5f4 ; 0x5f4 <tp_new> + 2c4: 8b e1 ldi r24, 0x1B ; 27 + 2c6: fe 01 movw r30, r28 + 2c8: 32 96 adiw r30, 0x02 ; 2 + 2ca: a6 e0 ldi r26, 0x06 ; 6 + 2cc: b0 e2 ldi r27, 0x20 ; 32 + 2ce: 01 90 ld r0, Z+ + 2d0: 0d 92 st X+, r0 + 2d2: 8a 95 dec r24 + 2d4: e1 f7 brne .-8 ; 0x2ce <main+0x82> + 2d6: 86 e0 ldi r24, 0x06 ; 6 + 2d8: 90 e2 ldi r25, 0x20 ; 32 + 2da: 0e 94 2f 03 call 0x65e ; 0x65e <tp_init> + 2de: 68 94 set + 2e0: ee 24 eor r14, r14 + 2e2: e4 f8 bld r14, 4 + 2e4: 08 e0 ldi r16, 0x08 ; 8 + 2e6: 24 e0 ldi r18, 0x04 ; 4 + 2e8: 40 e6 ldi r20, 0x60 ; 96 + 2ea: 56 e0 ldi r21, 0x06 ; 6 + 2ec: 60 ea ldi r22, 0xA0 ; 160 + 2ee: 79 e0 ldi r23, 0x09 ; 9 + 2f0: ce 01 movw r24, r28 + 2f2: 02 96 adiw r24, 0x02 ; 2 + 2f4: 0e 94 fa 02 call 0x5f4 ; 0x5f4 <tp_new> + 2f8: 8b e1 ldi r24, 0x1B ; 27 + 2fa: fe 01 movw r30, r28 + 2fc: 32 96 adiw r30, 0x02 ; 2 + 2fe: a7 e5 ldi r26, 0x57 ; 87 + 300: b0 e2 ldi r27, 0x20 ; 32 + 302: 01 90 ld r0, Z+ + 304: 0d 92 st X+, r0 + 306: 8a 95 dec r24 + 308: e1 f7 brne .-8 ; 0x302 <main+0xb6> + 30a: 87 e5 ldi r24, 0x57 ; 87 + 30c: 90 e2 ldi r25, 0x20 ; 32 + 30e: 0e 94 2f 03 call 0x65e ; 0x65e <tp_init> + 312: 68 94 set + 314: ee 24 eor r14, r14 + 316: e5 f8 bld r14, 5 + 318: 00 e8 ldi r16, 0x80 ; 128 + 31a: 20 e4 ldi r18, 0x40 ; 64 + 31c: 40 e6 ldi r20, 0x60 ; 96 + 31e: 56 e0 ldi r21, 0x06 ; 6 + 320: 60 eb ldi r22, 0xB0 ; 176 + 322: 79 e0 ldi r23, 0x09 ; 9 + 324: ce 01 movw r24, r28 + 326: 02 96 adiw r24, 0x02 ; 2 + 328: 0e 94 fa 02 call 0x5f4 ; 0x5f4 <tp_new> + 32c: 8b e1 ldi r24, 0x1B ; 27 + 32e: fe 01 movw r30, r28 + 330: 32 96 adiw r30, 0x02 ; 2 + 332: ac e3 ldi r26, 0x3C ; 60 + 334: b0 e2 ldi r27, 0x20 ; 32 + 336: 01 90 ld r0, Z+ + 338: 0d 92 st X+, r0 + 33a: 8a 95 dec r24 + 33c: e1 f7 brne .-8 ; 0x336 <main+0xea> + 33e: 8c e3 ldi r24, 0x3C ; 60 + 340: 90 e2 ldi r25, 0x20 ; 32 + 342: 0e 94 2f 03 call 0x65e ; 0x65e <tp_init> + 346: e0 ea ldi r30, 0xA0 ; 160 + 348: f0 e0 ldi r31, 0x00 ; 0 + 34a: 82 81 ldd r24, Z+2 ; 0x02 + 34c: 87 60 ori r24, 0x07 ; 7 + 34e: 82 83 std Z+2, r24 ; 0x02 + 350: 78 94 sei + 352: 81 e2 ldi r24, 0x21 ; 33 + 354: 90 e2 ldi r25, 0x20 ; 32 + 356: 0e 94 94 03 call 0x728 ; 0x728 <tp_statflash> + 35a: be 01 movw r22, r28 + 35c: 6f 5f subi r22, 0xFF ; 255 + 35e: 7f 4f sbci r23, 0xFF ; 255 + 360: 86 e0 ldi r24, 0x06 ; 6 + 362: 90 e2 ldi r25, 0x20 ; 32 + 364: 0e 94 83 03 call 0x706 ; 0x706 <tp_read> + 368: 88 23 and r24, r24 + 36a: 99 f3 breq .-26 ; 0x352 <main+0x106> + 36c: 87 e5 ldi r24, 0x57 ; 87 + 36e: 90 e2 ldi r25, 0x20 ; 32 + 370: 0e 94 94 03 call 0x728 ; 0x728 <tp_statflash> + 374: 69 81 ldd r22, Y+1 ; 0x01 + 376: 8c e3 ldi r24, 0x3C ; 60 + 378: 90 e2 ldi r25, 0x20 ; 32 + 37a: 0e 94 8c 03 call 0x718 ; 0x718 <tp_write> + 37e: e9 cf rjmp .-46 ; 0x352 <main+0x106> -00000354 <__vector_25>: - 354: 1f 92 push r1 - 356: 0f 92 push r0 - 358: 0f b6 in r0, 0x3f ; 63 - 35a: 0f 92 push r0 - 35c: 11 24 eor r1, r1 - 35e: 08 b6 in r0, 0x38 ; 56 - 360: 0f 92 push r0 - 362: 18 be out 0x38, r1 ; 56 - 364: 09 b6 in r0, 0x39 ; 57 - 366: 0f 92 push r0 - 368: 19 be out 0x39, r1 ; 57 - 36a: 0b b6 in r0, 0x3b ; 59 - 36c: 0f 92 push r0 - 36e: 1b be out 0x3b, r1 ; 59 - 370: 2f 93 push r18 - 372: 3f 93 push r19 - 374: 4f 93 push r20 - 376: 5f 93 push r21 - 378: 6f 93 push r22 - 37a: 7f 93 push r23 - 37c: 8f 93 push r24 - 37e: 9f 93 push r25 - 380: af 93 push r26 - 382: bf 93 push r27 - 384: ef 93 push r30 - 386: ff 93 push r31 - 388: 80 91 08 20 lds r24, 0x2008 ; 0x802008 <tp1> - 38c: 90 91 09 20 lds r25, 0x2009 ; 0x802009 <tp1+0x1> - 390: 0e 94 0e 04 call 0x81c ; 0x81c <tp_rxISR> - 394: ff 91 pop r31 - 396: ef 91 pop r30 - 398: bf 91 pop r27 - 39a: af 91 pop r26 - 39c: 9f 91 pop r25 - 39e: 8f 91 pop r24 - 3a0: 7f 91 pop r23 - 3a2: 6f 91 pop r22 - 3a4: 5f 91 pop r21 - 3a6: 4f 91 pop r20 - 3a8: 3f 91 pop r19 - 3aa: 2f 91 pop r18 - 3ac: 0f 90 pop r0 - 3ae: 0b be out 0x3b, r0 ; 59 - 3b0: 0f 90 pop r0 - 3b2: 09 be out 0x39, r0 ; 57 - 3b4: 0f 90 pop r0 - 3b6: 08 be out 0x38, r0 ; 56 - 3b8: 0f 90 pop r0 - 3ba: 0f be out 0x3f, r0 ; 63 - 3bc: 0f 90 pop r0 - 3be: 1f 90 pop r1 - 3c0: 18 95 reti - -000003c2 <__vector_26>: - 3c2: 1f 92 push r1 - 3c4: 0f 92 push r0 - 3c6: 0f b6 in r0, 0x3f ; 63 - 3c8: 0f 92 push r0 - 3ca: 11 24 eor r1, r1 - 3cc: 08 b6 in r0, 0x38 ; 56 - 3ce: 0f 92 push r0 - 3d0: 18 be out 0x38, r1 ; 56 - 3d2: 09 b6 in r0, 0x39 ; 57 - 3d4: 0f 92 push r0 - 3d6: 19 be out 0x39, r1 ; 57 - 3d8: 0b b6 in r0, 0x3b ; 59 - 3da: 0f 92 push r0 - 3dc: 1b be out 0x3b, r1 ; 59 - 3de: 2f 93 push r18 - 3e0: 3f 93 push r19 - 3e2: 4f 93 push r20 - 3e4: 5f 93 push r21 - 3e6: 6f 93 push r22 - 3e8: 7f 93 push r23 - 3ea: 8f 93 push r24 - 3ec: 9f 93 push r25 - 3ee: af 93 push r26 - 3f0: bf 93 push r27 - 3f2: ef 93 push r30 - 3f4: ff 93 push r31 - 3f6: 80 91 08 20 lds r24, 0x2008 ; 0x802008 <tp1> - 3fa: 90 91 09 20 lds r25, 0x2009 ; 0x802009 <tp1+0x1> - 3fe: 0e 94 56 04 call 0x8ac ; 0x8ac <tp_txISR> - 402: ff 91 pop r31 - 404: ef 91 pop r30 - 406: bf 91 pop r27 - 408: af 91 pop r26 - 40a: 9f 91 pop r25 - 40c: 8f 91 pop r24 - 40e: 7f 91 pop r23 - 410: 6f 91 pop r22 - 412: 5f 91 pop r21 - 414: 4f 91 pop r20 - 416: 3f 91 pop r19 - 418: 2f 91 pop r18 - 41a: 0f 90 pop r0 - 41c: 0b be out 0x3b, r0 ; 59 - 41e: 0f 90 pop r0 - 420: 09 be out 0x39, r0 ; 57 - 422: 0f 90 pop r0 - 424: 08 be out 0x38, r0 ; 56 - 426: 0f 90 pop r0 - 428: 0f be out 0x3f, r0 ; 63 - 42a: 0f 90 pop r0 - 42c: 1f 90 pop r1 - 42e: 18 95 reti +00000380 <__vector_25>: +} -00000430 <__vector_28>: - 430: 1f 92 push r1 - 432: 0f 92 push r0 - 434: 0f b6 in r0, 0x3f ; 63 - 436: 0f 92 push r0 - 438: 11 24 eor r1, r1 - 43a: 08 b6 in r0, 0x38 ; 56 - 43c: 0f 92 push r0 - 43e: 18 be out 0x38, r1 ; 56 - 440: 09 b6 in r0, 0x39 ; 57 - 442: 0f 92 push r0 - 444: 19 be out 0x39, r1 ; 57 - 446: 0b b6 in r0, 0x3b ; 59 - 448: 0f 92 push r0 - 44a: 1b be out 0x3b, r1 ; 59 - 44c: 2f 93 push r18 - 44e: 3f 93 push r19 - 450: 4f 93 push r20 - 452: 5f 93 push r21 - 454: 6f 93 push r22 - 456: 7f 93 push r23 - 458: 8f 93 push r24 - 45a: 9f 93 push r25 - 45c: af 93 push r26 - 45e: bf 93 push r27 - 460: ef 93 push r30 - 462: ff 93 push r31 - 464: 80 91 06 20 lds r24, 0x2006 ; 0x802006 <__data_end> - 468: 90 91 07 20 lds r25, 0x2007 ; 0x802007 <__data_end+0x1> - 46c: 0e 94 0e 04 call 0x81c ; 0x81c <tp_rxISR> - 470: ff 91 pop r31 - 472: ef 91 pop r30 - 474: bf 91 pop r27 - 476: af 91 pop r26 - 478: 9f 91 pop r25 - 47a: 8f 91 pop r24 - 47c: 7f 91 pop r23 - 47e: 6f 91 pop r22 - 480: 5f 91 pop r21 - 482: 4f 91 pop r20 - 484: 3f 91 pop r19 - 486: 2f 91 pop r18 - 488: 0f 90 pop r0 - 48a: 0b be out 0x3b, r0 ; 59 - 48c: 0f 90 pop r0 - 48e: 09 be out 0x39, r0 ; 57 - 490: 0f 90 pop r0 - 492: 08 be out 0x38, r0 ; 56 - 494: 0f 90 pop r0 - 496: 0f be out 0x3f, r0 ; 63 - 498: 0f 90 pop r0 - 49a: 1f 90 pop r1 - 49c: 18 95 reti +// hookup ISRs to port-abstracted interrupt functions -0000049e <__vector_29>: - 49e: 1f 92 push r1 - 4a0: 0f 92 push r0 - 4a2: 0f b6 in r0, 0x3f ; 63 - 4a4: 0f 92 push r0 - 4a6: 11 24 eor r1, r1 - 4a8: 08 b6 in r0, 0x38 ; 56 - 4aa: 0f 92 push r0 - 4ac: 18 be out 0x38, r1 ; 56 - 4ae: 09 b6 in r0, 0x39 ; 57 - 4b0: 0f 92 push r0 - 4b2: 19 be out 0x39, r1 ; 57 - 4b4: 0b b6 in r0, 0x3b ; 59 - 4b6: 0f 92 push r0 - 4b8: 1b be out 0x3b, r1 ; 59 - 4ba: 2f 93 push r18 - 4bc: 3f 93 push r19 - 4be: 4f 93 push r20 - 4c0: 5f 93 push r21 - 4c2: 6f 93 push r22 - 4c4: 7f 93 push r23 - 4c6: 8f 93 push r24 - 4c8: 9f 93 push r25 - 4ca: af 93 push r26 - 4cc: bf 93 push r27 - 4ce: ef 93 push r30 - 4d0: ff 93 push r31 - 4d2: 80 91 06 20 lds r24, 0x2006 ; 0x802006 <__data_end> - 4d6: 90 91 07 20 lds r25, 0x2007 ; 0x802007 <__data_end+0x1> - 4da: 0e 94 56 04 call 0x8ac ; 0x8ac <tp_txISR> - 4de: ff 91 pop r31 - 4e0: ef 91 pop r30 - 4e2: bf 91 pop r27 - 4e4: af 91 pop r26 - 4e6: 9f 91 pop r25 - 4e8: 8f 91 pop r24 - 4ea: 7f 91 pop r23 - 4ec: 6f 91 pop r22 - 4ee: 5f 91 pop r21 - 4f0: 4f 91 pop r20 - 4f2: 3f 91 pop r19 - 4f4: 2f 91 pop r18 - 4f6: 0f 90 pop r0 - 4f8: 0b be out 0x3b, r0 ; 59 - 4fa: 0f 90 pop r0 - 4fc: 09 be out 0x39, r0 ; 57 - 4fe: 0f 90 pop r0 - 500: 08 be out 0x38, r0 ; 56 - 502: 0f 90 pop r0 - 504: 0f be out 0x3f, r0 ; 63 - 506: 0f 90 pop r0 - 508: 1f 90 pop r1 - 50a: 18 95 reti +ISR(USARTC0_RXC_vect){ + 380: 1f 92 push r1 + 382: 0f 92 push r0 + 384: 0f b6 in r0, 0x3f ; 63 + 386: 0f 92 push r0 + 388: 11 24 eor r1, r1 + 38a: 08 b6 in r0, 0x38 ; 56 + 38c: 0f 92 push r0 + 38e: 18 be out 0x38, r1 ; 56 + 390: 09 b6 in r0, 0x39 ; 57 + 392: 0f 92 push r0 + 394: 19 be out 0x39, r1 ; 57 + 396: 0b b6 in r0, 0x3b ; 59 + 398: 0f 92 push r0 + 39a: 1b be out 0x3b, r1 ; 59 + 39c: 2f 93 push r18 + 39e: 3f 93 push r19 + 3a0: 4f 93 push r20 + 3a2: 5f 93 push r21 + 3a4: 6f 93 push r22 + 3a6: 7f 93 push r23 + 3a8: 8f 93 push r24 + 3aa: 9f 93 push r25 + 3ac: af 93 push r26 + 3ae: bf 93 push r27 + 3b0: ef 93 push r30 + 3b2: ff 93 push r31 + tp_rxISR(&tp1); + 3b4: 81 e2 ldi r24, 0x21 ; 33 + 3b6: 90 e2 ldi r25, 0x20 ; 32 + 3b8: 0e 94 65 03 call 0x6ca ; 0x6ca <tp_rxISR> +} + 3bc: ff 91 pop r31 + 3be: ef 91 pop r30 + 3c0: bf 91 pop r27 + 3c2: af 91 pop r26 + 3c4: 9f 91 pop r25 + 3c6: 8f 91 pop r24 + 3c8: 7f 91 pop r23 + 3ca: 6f 91 pop r22 + 3cc: 5f 91 pop r21 + 3ce: 4f 91 pop r20 + 3d0: 3f 91 pop r19 + 3d2: 2f 91 pop r18 + 3d4: 0f 90 pop r0 + 3d6: 0b be out 0x3b, r0 ; 59 + 3d8: 0f 90 pop r0 + 3da: 09 be out 0x39, r0 ; 57 + 3dc: 0f 90 pop r0 + 3de: 08 be out 0x38, r0 ; 56 + 3e0: 0f 90 pop r0 + 3e2: 0f be out 0x3f, r0 ; 63 + 3e4: 0f 90 pop r0 + 3e6: 1f 90 pop r1 + 3e8: 18 95 reti -0000050c <__vector_88>: - 50c: 1f 92 push r1 - 50e: 0f 92 push r0 - 510: 0f b6 in r0, 0x3f ; 63 - 512: 0f 92 push r0 - 514: 11 24 eor r1, r1 - 516: 08 b6 in r0, 0x38 ; 56 - 518: 0f 92 push r0 - 51a: 18 be out 0x38, r1 ; 56 - 51c: 09 b6 in r0, 0x39 ; 57 - 51e: 0f 92 push r0 - 520: 19 be out 0x39, r1 ; 57 - 522: 0b b6 in r0, 0x3b ; 59 - 524: 0f 92 push r0 - 526: 1b be out 0x3b, r1 ; 59 - 528: 2f 93 push r18 - 52a: 3f 93 push r19 - 52c: 4f 93 push r20 - 52e: 5f 93 push r21 - 530: 6f 93 push r22 - 532: 7f 93 push r23 - 534: 8f 93 push r24 - 536: 9f 93 push r25 - 538: af 93 push r26 - 53a: bf 93 push r27 - 53c: ef 93 push r30 - 53e: ff 93 push r31 - 540: 80 91 0c 20 lds r24, 0x200C ; 0x80200c <tp3> - 544: 90 91 0d 20 lds r25, 0x200D ; 0x80200d <tp3+0x1> - 548: 0e 94 0e 04 call 0x81c ; 0x81c <tp_rxISR> - 54c: ff 91 pop r31 - 54e: ef 91 pop r30 - 550: bf 91 pop r27 - 552: af 91 pop r26 - 554: 9f 91 pop r25 - 556: 8f 91 pop r24 - 558: 7f 91 pop r23 - 55a: 6f 91 pop r22 - 55c: 5f 91 pop r21 - 55e: 4f 91 pop r20 - 560: 3f 91 pop r19 - 562: 2f 91 pop r18 - 564: 0f 90 pop r0 - 566: 0b be out 0x3b, r0 ; 59 - 568: 0f 90 pop r0 - 56a: 09 be out 0x39, r0 ; 57 - 56c: 0f 90 pop r0 - 56e: 08 be out 0x38, r0 ; 56 - 570: 0f 90 pop r0 - 572: 0f be out 0x3f, r0 ; 63 - 574: 0f 90 pop r0 - 576: 1f 90 pop r1 - 578: 18 95 reti +000003ea <__vector_28>: -0000057a <__vector_89>: - 57a: 1f 92 push r1 - 57c: 0f 92 push r0 - 57e: 0f b6 in r0, 0x3f ; 63 - 580: 0f 92 push r0 - 582: 11 24 eor r1, r1 - 584: 08 b6 in r0, 0x38 ; 56 - 586: 0f 92 push r0 - 588: 18 be out 0x38, r1 ; 56 - 58a: 09 b6 in r0, 0x39 ; 57 - 58c: 0f 92 push r0 - 58e: 19 be out 0x39, r1 ; 57 - 590: 0b b6 in r0, 0x3b ; 59 - 592: 0f 92 push r0 - 594: 1b be out 0x3b, r1 ; 59 - 596: 2f 93 push r18 - 598: 3f 93 push r19 - 59a: 4f 93 push r20 - 59c: 5f 93 push r21 - 59e: 6f 93 push r22 - 5a0: 7f 93 push r23 - 5a2: 8f 93 push r24 - 5a4: 9f 93 push r25 - 5a6: af 93 push r26 - 5a8: bf 93 push r27 - 5aa: ef 93 push r30 - 5ac: ff 93 push r31 - 5ae: 80 91 0c 20 lds r24, 0x200C ; 0x80200c <tp3> - 5b2: 90 91 0d 20 lds r25, 0x200D ; 0x80200d <tp3+0x1> - 5b6: 0e 94 56 04 call 0x8ac ; 0x8ac <tp_txISR> - 5ba: ff 91 pop r31 - 5bc: ef 91 pop r30 - 5be: bf 91 pop r27 - 5c0: af 91 pop r26 - 5c2: 9f 91 pop r25 - 5c4: 8f 91 pop r24 - 5c6: 7f 91 pop r23 - 5c8: 6f 91 pop r22 - 5ca: 5f 91 pop r21 - 5cc: 4f 91 pop r20 - 5ce: 3f 91 pop r19 - 5d0: 2f 91 pop r18 - 5d2: 0f 90 pop r0 - 5d4: 0b be out 0x3b, r0 ; 59 - 5d6: 0f 90 pop r0 - 5d8: 09 be out 0x39, r0 ; 57 - 5da: 0f 90 pop r0 - 5dc: 08 be out 0x38, r0 ; 56 - 5de: 0f 90 pop r0 - 5e0: 0f be out 0x3f, r0 ; 63 - 5e2: 0f 90 pop r0 - 5e4: 1f 90 pop r1 - 5e6: 18 95 reti -000005e8 <__vector_92>: +ISR(USARTC1_RXC_vect){ + 3ea: 1f 92 push r1 + 3ec: 0f 92 push r0 + 3ee: 0f b6 in r0, 0x3f ; 63 + 3f0: 0f 92 push r0 + 3f2: 11 24 eor r1, r1 + 3f4: 08 b6 in r0, 0x38 ; 56 + 3f6: 0f 92 push r0 + 3f8: 18 be out 0x38, r1 ; 56 + 3fa: 09 b6 in r0, 0x39 ; 57 + 3fc: 0f 92 push r0 + 3fe: 19 be out 0x39, r1 ; 57 + 400: 0b b6 in r0, 0x3b ; 59 + 402: 0f 92 push r0 + 404: 1b be out 0x3b, r1 ; 59 + 406: 2f 93 push r18 + 408: 3f 93 push r19 + 40a: 4f 93 push r20 + 40c: 5f 93 push r21 + 40e: 6f 93 push r22 + 410: 7f 93 push r23 + 412: 8f 93 push r24 + 414: 9f 93 push r25 + 416: af 93 push r26 + 418: bf 93 push r27 + 41a: ef 93 push r30 + 41c: ff 93 push r31 + tp_rxISR(&tp2); + 41e: 86 e0 ldi r24, 0x06 ; 6 + 420: 90 e2 ldi r25, 0x20 ; 32 + 422: 0e 94 65 03 call 0x6ca ; 0x6ca <tp_rxISR> +} + 426: ff 91 pop r31 + 428: ef 91 pop r30 + 42a: bf 91 pop r27 + 42c: af 91 pop r26 + 42e: 9f 91 pop r25 + 430: 8f 91 pop r24 + 432: 7f 91 pop r23 + 434: 6f 91 pop r22 + 436: 5f 91 pop r21 + 438: 4f 91 pop r20 + 43a: 3f 91 pop r19 + 43c: 2f 91 pop r18 + 43e: 0f 90 pop r0 + 440: 0b be out 0x3b, r0 ; 59 + 442: 0f 90 pop r0 + 444: 09 be out 0x39, r0 ; 57 + 446: 0f 90 pop r0 + 448: 08 be out 0x38, r0 ; 56 + 44a: 0f 90 pop r0 + 44c: 0f be out 0x3f, r0 ; 63 + 44e: 0f 90 pop r0 + 450: 1f 90 pop r1 + 452: 18 95 reti -ISR(USARTD1_DRE_vect){ - 5e8: 1f 92 push r1 - 5ea: 0f 92 push r0 - 5ec: 0f b6 in r0, 0x3f ; 63 - 5ee: 0f 92 push r0 - 5f0: 11 24 eor r1, r1 - 5f2: 08 b6 in r0, 0x38 ; 56 - 5f4: 0f 92 push r0 - 5f6: 18 be out 0x38, r1 ; 56 - 5f8: 09 b6 in r0, 0x39 ; 57 - 5fa: 0f 92 push r0 - 5fc: 19 be out 0x39, r1 ; 57 - 5fe: 0b b6 in r0, 0x3b ; 59 - 600: 0f 92 push r0 - 602: 1b be out 0x3b, r1 ; 59 - 604: 2f 93 push r18 - 606: 3f 93 push r19 - 608: 4f 93 push r20 - 60a: 5f 93 push r21 - 60c: 6f 93 push r22 - 60e: 7f 93 push r23 - 610: 8f 93 push r24 - 612: 9f 93 push r25 - 614: af 93 push r26 - 616: bf 93 push r27 - 618: ef 93 push r30 - 61a: ff 93 push r31 - tp_txISR(tp4); - 61c: 80 91 0a 20 lds r24, 0x200A ; 0x80200a <tp4> - 620: 90 91 0b 20 lds r25, 0x200B ; 0x80200b <tp4+0x1> - 624: 0e 94 56 04 call 0x8ac ; 0x8ac <tp_txISR> - 628: ff 91 pop r31 - 62a: ef 91 pop r30 - 62c: bf 91 pop r27 - 62e: af 91 pop r26 - 630: 9f 91 pop r25 - 632: 8f 91 pop r24 - 634: 7f 91 pop r23 - 636: 6f 91 pop r22 - 638: 5f 91 pop r21 - 63a: 4f 91 pop r20 - 63c: 3f 91 pop r19 - 63e: 2f 91 pop r18 - 640: 0f 90 pop r0 - 642: 0b be out 0x3b, r0 ; 59 - 644: 0f 90 pop r0 - 646: 09 be out 0x39, r0 ; 57 - 648: 0f 90 pop r0 - 64a: 08 be out 0x38, r0 ; 56 - 64c: 0f 90 pop r0 - 64e: 0f be out 0x3f, r0 ; 63 - 650: 0f 90 pop r0 - 652: 1f 90 pop r1 - 654: 18 95 reti +00000454 <__vector_88>: -00000656 <rb_new>: - return rb; +ISR(USARTD0_RXC_vect){ + 454: 1f 92 push r1 + 456: 0f 92 push r0 + 458: 0f b6 in r0, 0x3f ; 63 + 45a: 0f 92 push r0 + 45c: 11 24 eor r1, r1 + 45e: 08 b6 in r0, 0x38 ; 56 + 460: 0f 92 push r0 + 462: 18 be out 0x38, r1 ; 56 + 464: 09 b6 in r0, 0x39 ; 57 + 466: 0f 92 push r0 + 468: 19 be out 0x39, r1 ; 57 + 46a: 0b b6 in r0, 0x3b ; 59 + 46c: 0f 92 push r0 + 46e: 1b be out 0x3b, r1 ; 59 + 470: 2f 93 push r18 + 472: 3f 93 push r19 + 474: 4f 93 push r20 + 476: 5f 93 push r21 + 478: 6f 93 push r22 + 47a: 7f 93 push r23 + 47c: 8f 93 push r24 + 47e: 9f 93 push r25 + 480: af 93 push r26 + 482: bf 93 push r27 + 484: ef 93 push r30 + 486: ff 93 push r31 + tp_rxISR(&tp3); + 488: 87 e5 ldi r24, 0x57 ; 87 + 48a: 90 e2 ldi r25, 0x20 ; 32 + 48c: 0e 94 65 03 call 0x6ca ; 0x6ca <tp_rxISR> } + 490: ff 91 pop r31 + 492: ef 91 pop r30 + 494: bf 91 pop r27 + 496: af 91 pop r26 + 498: 9f 91 pop r25 + 49a: 8f 91 pop r24 + 49c: 7f 91 pop r23 + 49e: 6f 91 pop r22 + 4a0: 5f 91 pop r21 + 4a2: 4f 91 pop r20 + 4a4: 3f 91 pop r19 + 4a6: 2f 91 pop r18 + 4a8: 0f 90 pop r0 + 4aa: 0b be out 0x3b, r0 ; 59 + 4ac: 0f 90 pop r0 + 4ae: 09 be out 0x39, r0 ; 57 + 4b0: 0f 90 pop r0 + 4b2: 08 be out 0x38, r0 ; 56 + 4b4: 0f 90 pop r0 + 4b6: 0f be out 0x3f, r0 ; 63 + 4b8: 0f 90 pop r0 + 4ba: 1f 90 pop r1 + 4bc: 18 95 reti -void rb_reset(ringbuffer_t rb){ - rb->head = 0; - rb->tail = 0; - 656: cf 92 push r12 - 658: df 92 push r13 - 65a: ef 92 push r14 - 65c: ff 92 push r15 - 65e: cf 93 push r28 - 660: df 93 push r29 - 662: 6b 01 movw r12, r22 - 664: 7c 01 movw r14, r24 - 666: 88 e0 ldi r24, 0x08 ; 8 - 668: 90 e0 ldi r25, 0x00 ; 0 - 66a: 0e 94 84 04 call 0x908 ; 0x908 <malloc> - 66e: ec 01 movw r28, r24 - 670: 89 2b or r24, r25 - 672: d1 f0 breq .+52 ; 0x6a8 <rb_new+0x52> - 674: d7 01 movw r26, r14 - 676: c6 01 movw r24, r12 - 678: 01 96 adiw r24, 0x01 ; 1 - 67a: a1 1d adc r26, r1 - 67c: b1 1d adc r27, r1 - 67e: 8c 83 std Y+4, r24 ; 0x04 - 680: 9d 83 std Y+5, r25 ; 0x05 - 682: ae 83 std Y+6, r26 ; 0x06 - 684: bf 83 std Y+7, r27 ; 0x07 - 686: 0e 94 84 04 call 0x908 ; 0x908 <malloc> - 68a: 88 83 st Y, r24 - 68c: 99 83 std Y+1, r25 ; 0x01 - 68e: 89 2b or r24, r25 - 690: 29 f0 breq .+10 ; 0x69c <rb_new+0x46> - 692: 1a 82 std Y+2, r1 ; 0x02 - 694: 1b 82 std Y+3, r1 ; 0x03 - 696: 8c 2f mov r24, r28 - 698: 9d 2f mov r25, r29 - 69a: 08 c0 rjmp .+16 ; 0x6ac <rb_new+0x56> - 69c: ce 01 movw r24, r28 - 69e: 0e 94 1c 05 call 0xa38 ; 0xa38 <free> - 6a2: 80 e0 ldi r24, 0x00 ; 0 - 6a4: 90 e0 ldi r25, 0x00 ; 0 - 6a6: 02 c0 rjmp .+4 ; 0x6ac <rb_new+0x56> - 6a8: 80 e0 ldi r24, 0x00 ; 0 - 6aa: 90 e0 ldi r25, 0x00 ; 0 - 6ac: df 91 pop r29 - 6ae: cf 91 pop r28 - 6b0: ff 90 pop r15 - 6b2: ef 90 pop r14 - 6b4: df 90 pop r13 - 6b6: cf 90 pop r12 - 6b8: 08 95 ret +000004be <__vector_91>: -000006ba <rb_write>: +ISR(USARTD1_RXC_vect){ + 4be: 1f 92 push r1 + 4c0: 0f 92 push r0 + 4c2: 0f b6 in r0, 0x3f ; 63 + 4c4: 0f 92 push r0 + 4c6: 11 24 eor r1, r1 + 4c8: 08 b6 in r0, 0x38 ; 56 + 4ca: 0f 92 push r0 + 4cc: 18 be out 0x38, r1 ; 56 + 4ce: 09 b6 in r0, 0x39 ; 57 + 4d0: 0f 92 push r0 + 4d2: 19 be out 0x39, r1 ; 57 + 4d4: 0b b6 in r0, 0x3b ; 59 + 4d6: 0f 92 push r0 + 4d8: 1b be out 0x3b, r1 ; 59 + 4da: 2f 93 push r18 + 4dc: 3f 93 push r19 + 4de: 4f 93 push r20 + 4e0: 5f 93 push r21 + 4e2: 6f 93 push r22 + 4e4: 7f 93 push r23 + 4e6: 8f 93 push r24 + 4e8: 9f 93 push r25 + 4ea: af 93 push r26 + 4ec: bf 93 push r27 + 4ee: ef 93 push r30 + 4f0: ff 93 push r31 + tp_rxISR(&tp4); + 4f2: 8c e3 ldi r24, 0x3C ; 60 + 4f4: 90 e2 ldi r25, 0x20 ; 32 + 4f6: 0e 94 65 03 call 0x6ca ; 0x6ca <tp_rxISR> } + 4fa: ff 91 pop r31 + 4fc: ef 91 pop r30 + 4fe: bf 91 pop r27 + 500: af 91 pop r26 + 502: 9f 91 pop r25 + 504: 8f 91 pop r24 + 506: 7f 91 pop r23 + 508: 6f 91 pop r22 + 50a: 5f 91 pop r21 + 50c: 4f 91 pop r20 + 50e: 3f 91 pop r19 + 510: 2f 91 pop r18 + 512: 0f 90 pop r0 + 514: 0b be out 0x3b, r0 ; 59 + 516: 0f 90 pop r0 + 518: 09 be out 0x39, r0 ; 57 + 51a: 0f 90 pop r0 + 51c: 08 be out 0x38, r0 ; 56 + 51e: 0f 90 pop r0 + 520: 0f be out 0x3f, r0 ; 63 + 522: 0f 90 pop r0 + 524: 1f 90 pop r1 + 526: 18 95 reti +00000528 <rb_reset>: + rb_reset(rb); + return 1; +} -void rb_write(ringbuffer_t rb, uint8_t data){ - 6ba: fc 01 movw r30, r24 - // write to head - - rb->buf[rb->head] = data; - 6bc: 82 81 ldd r24, Z+2 ; 0x02 - 6be: a0 81 ld r26, Z - 6c0: b1 81 ldd r27, Z+1 ; 0x01 - 6c2: a8 0f add r26, r24 - 6c4: b1 1d adc r27, r1 - 6c6: 6c 93 st X, r22 - - rb->head += 1; - 6c8: 42 81 ldd r20, Z+2 ; 0x02 - 6ca: 4f 5f subi r20, 0xFF ; 255 - 6cc: 42 83 std Z+2, r20 ; 0x02 - if(rb->head >= rb->size){ - 6ce: 50 e0 ldi r21, 0x00 ; 0 - 6d0: 60 e0 ldi r22, 0x00 ; 0 - 6d2: 70 e0 ldi r23, 0x00 ; 0 - 6d4: 84 81 ldd r24, Z+4 ; 0x04 - 6d6: 95 81 ldd r25, Z+5 ; 0x05 - 6d8: a6 81 ldd r26, Z+6 ; 0x06 - 6da: b7 81 ldd r27, Z+7 ; 0x07 - 6dc: 48 17 cp r20, r24 - 6de: 59 07 cpc r21, r25 - 6e0: 6a 07 cpc r22, r26 - 6e2: 7b 07 cpc r23, r27 - 6e4: 08 f0 brcs .+2 ; 0x6e8 <rb_write+0x2e> +uint8_t rb_reset(ringbuffer_t *rb){ + if(rb){ + 528: 00 97 sbiw r24, 0x00 ; 0 + 52a: 39 f0 breq .+14 ; 0x53a <rb_reset+0x12> rb->head = 0; - 6e6: 12 82 std Z+2, r1 ; 0x02 - 6e8: 08 95 ret - -000006ea <rb_read>: + 52c: fc 01 movw r30, r24 + 52e: 12 82 std Z+2, r1 ; 0x02 + 530: 13 82 std Z+3, r1 ; 0x03 + rb->tail = 0; + 532: 14 82 std Z+4, r1 ; 0x04 + 534: 15 82 std Z+5, r1 ; 0x05 + return 1; + 536: 81 e0 ldi r24, 0x01 ; 1 + 538: 08 95 ret + } else { + return 0; + 53a: 80 e0 ldi r24, 0x00 ; 0 } - // increment head and check wrap } + 53c: 08 95 ret -uint8_t rb_read(ringbuffer_t rb){ - 6ea: 0f 93 push r16 - 6ec: 1f 93 push r17 - 6ee: fc 01 movw r30, r24 - // pull data from tail - uint8_t data = rb->buf[rb->tail]; - 6f0: 43 81 ldd r20, Z+3 ; 0x03 - 6f2: a0 81 ld r26, Z - 6f4: b1 81 ldd r27, Z+1 ; 0x01 - 6f6: a4 0f add r26, r20 - 6f8: b1 1d adc r27, r1 - 6fa: 8c 91 ld r24, X - // increment tail and check wrap - rb->tail += 1; - 6fc: 4f 5f subi r20, 0xFF ; 255 - 6fe: 43 83 std Z+3, r20 ; 0x03 - if(rb->tail >= rb->size){ - 700: 50 e0 ldi r21, 0x00 ; 0 - 702: 60 e0 ldi r22, 0x00 ; 0 - 704: 70 e0 ldi r23, 0x00 ; 0 - 706: 04 81 ldd r16, Z+4 ; 0x04 - 708: 15 81 ldd r17, Z+5 ; 0x05 - 70a: 26 81 ldd r18, Z+6 ; 0x06 - 70c: 37 81 ldd r19, Z+7 ; 0x07 - 70e: 40 17 cp r20, r16 - 710: 51 07 cpc r21, r17 - 712: 62 07 cpc r22, r18 - 714: 73 07 cpc r23, r19 - 716: 08 f0 brcs .+2 ; 0x71a <rb_read+0x30> - rb->tail = 0; - 718: 13 82 std Z+3, r1 ; 0x03 +0000053e <rb_init>: +#include "ringbuffer.h" +#include <stdlib.h> +#include <avr/io.h> + +uint8_t rb_init(ringbuffer_t *rb, size_t size){ + 53e: cf 93 push r28 + 540: df 93 push r29 + 542: ec 01 movw r28, r24 + 544: cb 01 movw r24, r22 + rb->size = size; + 546: 6e 83 std Y+6, r22 ; 0x06 + 548: 7f 83 std Y+7, r23 ; 0x07 + rb->buffer = malloc(rb->size); + 54a: 0e 94 b1 03 call 0x762 ; 0x762 <malloc> + 54e: 88 83 st Y, r24 + 550: 99 83 std Y+1, r25 ; 0x01 + rb_reset(rb); + 552: ce 01 movw r24, r28 + 554: 0e 94 94 02 call 0x528 ; 0x528 <rb_reset> + return 1; +} + 558: 81 e0 ldi r24, 0x01 ; 1 + 55a: df 91 pop r29 + 55c: cf 91 pop r28 + 55e: 08 95 ret + +00000560 <rb_put>: + return 0; } - return data; } - 71a: 1f 91 pop r17 - 71c: 0f 91 pop r16 - 71e: 08 95 ret -00000720 <rb_hasdata>: -uint8_t rb_hasdata(ringbuffer_t rb){ - 720: fc 01 movw r30, r24 - 722: 81 e0 ldi r24, 0x01 ; 1 - 724: 23 81 ldd r18, Z+3 ; 0x03 - 726: 92 81 ldd r25, Z+2 ; 0x02 - 728: 29 13 cpse r18, r25 - 72a: 01 c0 rjmp .+2 ; 0x72e <rb_hasdata+0xe> - 72c: 80 e0 ldi r24, 0x00 ; 0 - if (rb->tail == rb->head){ - return 0; +uint8_t rb_put(ringbuffer_t *rb, uint8_t data){ + 560: fc 01 movw r30, r24 + if(rb){ + 562: 89 2b or r24, r25 + 564: f1 f0 breq .+60 ; 0x5a2 <rb_put+0x42> + rb->buffer[rb->head] = data; + 566: a0 81 ld r26, Z + 568: b1 81 ldd r27, Z+1 ; 0x01 + 56a: 82 81 ldd r24, Z+2 ; 0x02 + 56c: 93 81 ldd r25, Z+3 ; 0x03 + 56e: a8 0f add r26, r24 + 570: b9 1f adc r27, r25 + 572: 6c 93 st X, r22 + rb->head = (rb->head + 1) % rb->size; // for wrap around + 574: 26 81 ldd r18, Z+6 ; 0x06 + 576: 37 81 ldd r19, Z+7 ; 0x07 + 578: 82 81 ldd r24, Z+2 ; 0x02 + 57a: 93 81 ldd r25, Z+3 ; 0x03 + 57c: 01 96 adiw r24, 0x01 ; 1 + 57e: b9 01 movw r22, r18 + 580: 0e 94 9d 03 call 0x73a ; 0x73a <__udivmodhi4> + 584: 82 83 std Z+2, r24 ; 0x02 + 586: 93 83 std Z+3, r25 ; 0x03 + if(rb->head == rb->tail){ + 588: 44 81 ldd r20, Z+4 ; 0x04 + 58a: 55 81 ldd r21, Z+5 ; 0x05 + 58c: 84 17 cp r24, r20 + 58e: 95 07 cpc r25, r21 + 590: 51 f4 brne .+20 ; 0x5a6 <rb_put+0x46> + rb->tail = (rb->tail + 1) % rb->size; + 592: 01 96 adiw r24, 0x01 ; 1 + 594: b9 01 movw r22, r18 + 596: 0e 94 9d 03 call 0x73a ; 0x73a <__udivmodhi4> + 59a: 84 83 std Z+4, r24 ; 0x04 + 59c: 95 83 std Z+5, r25 ; 0x05 + } + return 1; + 59e: 81 e0 ldi r24, 0x01 ; 1 + 5a0: 08 95 ret } else { + return 0; + 5a2: 80 e0 ldi r24, 0x00 ; 0 + 5a4: 08 95 ret + rb->buffer[rb->head] = data; + rb->head = (rb->head + 1) % rb->size; // for wrap around + if(rb->head == rb->tail){ + rb->tail = (rb->tail + 1) % rb->size; + } return 1; - } - 72e: 08 95 ret - -00000730 <tp_new>: -void tp_setRxStatus(tinyport_t tp, uint8_t state){ - if(state == tp->rxstate){ - // nothing - // nothing changes? always listening + 5a6: 81 e0 ldi r24, 0x01 ; 1 } else { - tp->rxstate = state; - 730: af 92 push r10 - 732: bf 92 push r11 - 734: cf 92 push r12 - 736: df 92 push r13 - 738: ff 92 push r15 - 73a: 0f 93 push r16 - 73c: 1f 93 push r17 - 73e: cf 93 push r28 - 740: df 93 push r29 - 742: 5c 01 movw r10, r24 - 744: 6b 01 movw r12, r22 - 746: f4 2e mov r15, r20 - 748: 12 2f mov r17, r18 - 74a: 8e e0 ldi r24, 0x0E ; 14 - 74c: 90 e0 ldi r25, 0x00 ; 0 - 74e: 0e 94 84 04 call 0x908 ; 0x908 <malloc> - 752: ec 01 movw r28, r24 - 754: a8 82 st Y, r10 - 756: b9 82 std Y+1, r11 ; 0x01 - 758: ca 82 std Y+2, r12 ; 0x02 - 75a: db 82 std Y+3, r13 ; 0x03 - 75c: fc 82 std Y+4, r15 ; 0x04 - 75e: 1d 83 std Y+5, r17 ; 0x05 - 760: 0e 83 std Y+6, r16 ; 0x06 - 762: 60 e1 ldi r22, 0x10 ; 16 - 764: 70 e0 ldi r23, 0x00 ; 0 - 766: 80 e0 ldi r24, 0x00 ; 0 - 768: 90 e0 ldi r25, 0x00 ; 0 - 76a: 0e 94 2b 03 call 0x656 ; 0x656 <rb_new> - 76e: 8f 83 std Y+7, r24 ; 0x07 - 770: 98 87 std Y+8, r25 ; 0x08 - 772: 60 e1 ldi r22, 0x10 ; 16 - 774: 70 e0 ldi r23, 0x00 ; 0 - 776: 80 e0 ldi r24, 0x00 ; 0 - 778: 90 e0 ldi r25, 0x00 ; 0 - 77a: 0e 94 2b 03 call 0x656 ; 0x656 <rb_new> - 77e: 89 87 std Y+9, r24 ; 0x09 - 780: 9a 87 std Y+10, r25 ; 0x0a - 782: 1b 86 std Y+11, r1 ; 0x0b - 784: 1c 86 std Y+12, r1 ; 0x0c - 786: 1d 86 std Y+13, r1 ; 0x0d - 788: ce 01 movw r24, r28 - 78a: df 91 pop r29 - 78c: cf 91 pop r28 - 78e: 1f 91 pop r17 - 790: 0f 91 pop r16 - 792: ff 90 pop r15 - 794: df 90 pop r13 - 796: cf 90 pop r12 - 798: bf 90 pop r11 - 79a: af 90 pop r10 - 79c: 08 95 ret + return 0; + } +} + 5a8: 08 95 ret -0000079e <tp_init>: - 79e: fc 01 movw r30, r24 - 7a0: a0 81 ld r26, Z - 7a2: b1 81 ldd r27, Z+1 ; 0x01 - 7a4: 8b e9 ldi r24, 0x9B ; 155 - 7a6: 16 96 adiw r26, 0x06 ; 6 - 7a8: 8c 93 st X, r24 - 7aa: a0 81 ld r26, Z - 7ac: b1 81 ldd r27, Z+1 ; 0x01 - 7ae: 17 96 adiw r26, 0x07 ; 7 - 7b0: 1c 92 st X, r1 - 7b2: a0 81 ld r26, Z - 7b4: b1 81 ldd r27, Z+1 ; 0x01 - 7b6: 13 96 adiw r26, 0x03 ; 3 - 7b8: 8c 91 ld r24, X - 7ba: 13 97 sbiw r26, 0x03 ; 3 - 7bc: 80 61 ori r24, 0x10 ; 16 - 7be: 13 96 adiw r26, 0x03 ; 3 - 7c0: 8c 93 st X, r24 - 7c2: a0 81 ld r26, Z - 7c4: b1 81 ldd r27, Z+1 ; 0x01 - 7c6: 88 e1 ldi r24, 0x18 ; 24 - 7c8: 14 96 adiw r26, 0x04 ; 4 - 7ca: 8c 93 st X, r24 - 7cc: a0 81 ld r26, Z - 7ce: b1 81 ldd r27, Z+1 ; 0x01 - 7d0: 83 e0 ldi r24, 0x03 ; 3 - 7d2: 15 96 adiw r26, 0x05 ; 5 - 7d4: 8c 93 st X, r24 - 7d6: a2 81 ldd r26, Z+2 ; 0x02 - 7d8: b3 81 ldd r27, Z+3 ; 0x03 - 7da: 85 81 ldd r24, Z+5 ; 0x05 - 7dc: 15 96 adiw r26, 0x05 ; 5 - 7de: 8c 93 st X, r24 - 7e0: a2 81 ldd r26, Z+2 ; 0x02 - 7e2: b3 81 ldd r27, Z+3 ; 0x03 - 7e4: 85 81 ldd r24, Z+5 ; 0x05 - 7e6: 11 96 adiw r26, 0x01 ; 1 - 7e8: 8c 93 st X, r24 - 7ea: a2 81 ldd r26, Z+2 ; 0x02 - 7ec: b3 81 ldd r27, Z+3 ; 0x03 - 7ee: 84 81 ldd r24, Z+4 ; 0x04 - 7f0: 12 96 adiw r26, 0x02 ; 2 - 7f2: 8c 93 st X, r24 - 7f4: a2 81 ldd r26, Z+2 ; 0x02 - 7f6: b3 81 ldd r27, Z+3 ; 0x03 - 7f8: 84 81 ldd r24, Z+4 ; 0x04 - 7fa: 16 96 adiw r26, 0x06 ; 6 - 7fc: 8c 93 st X, r24 - 7fe: a2 81 ldd r26, Z+2 ; 0x02 - 800: b3 81 ldd r27, Z+3 ; 0x03 - 802: 86 81 ldd r24, Z+6 ; 0x06 - 804: 11 96 adiw r26, 0x01 ; 1 - 806: 8c 93 st X, r24 - 808: 08 95 ret +000005aa <rb_get>: -0000080a <tp_statflash>: - 80a: dc 01 movw r26, r24 - 80c: 12 96 adiw r26, 0x02 ; 2 - 80e: ed 91 ld r30, X+ - 810: fc 91 ld r31, X - 812: 13 97 sbiw r26, 0x03 ; 3 - 814: 16 96 adiw r26, 0x06 ; 6 - 816: 8c 91 ld r24, X - 818: 87 83 std Z+7, r24 ; 0x07 - 81a: 08 95 ret +uint8_t rb_get(ringbuffer_t *rb, uint8_t *data){ + 5aa: fc 01 movw r30, r24 + if(rb && data && !rb_empty(*rb)){ + 5ac: 89 2b or r24, r25 + 5ae: e1 f0 breq .+56 ; 0x5e8 <rb_get+0x3e> + 5b0: 61 15 cp r22, r1 + 5b2: 71 05 cpc r23, r1 + 5b4: d9 f0 breq .+54 ; 0x5ec <rb_get+0x42> + 5b6: 22 81 ldd r18, Z+2 ; 0x02 + 5b8: 33 81 ldd r19, Z+3 ; 0x03 + 5ba: 84 81 ldd r24, Z+4 ; 0x04 + 5bc: 95 81 ldd r25, Z+5 ; 0x05 + 5be: 28 17 cp r18, r24 + 5c0: 39 07 cpc r19, r25 + 5c2: b1 f0 breq .+44 ; 0x5f0 <rb_get+0x46> + *data = rb->buffer[rb->tail]; + 5c4: a0 81 ld r26, Z + 5c6: b1 81 ldd r27, Z+1 ; 0x01 + 5c8: a8 0f add r26, r24 + 5ca: b9 1f adc r27, r25 + 5cc: 8c 91 ld r24, X + 5ce: db 01 movw r26, r22 + 5d0: 8c 93 st X, r24 + rb->tail = (rb->tail + 1) % rb->size; + 5d2: 84 81 ldd r24, Z+4 ; 0x04 + 5d4: 95 81 ldd r25, Z+5 ; 0x05 + 5d6: 01 96 adiw r24, 0x01 ; 1 + 5d8: 66 81 ldd r22, Z+6 ; 0x06 + 5da: 77 81 ldd r23, Z+7 ; 0x07 + 5dc: 0e 94 9d 03 call 0x73a ; 0x73a <__udivmodhi4> + 5e0: 84 83 std Z+4, r24 ; 0x04 + 5e2: 95 83 std Z+5, r25 ; 0x05 + return 1; + 5e4: 81 e0 ldi r24, 0x01 ; 1 + 5e6: 08 95 ret + } else { + return 0; + 5e8: 80 e0 ldi r24, 0x00 ; 0 + 5ea: 08 95 ret + 5ec: 80 e0 ldi r24, 0x00 ; 0 + 5ee: 08 95 ret + 5f0: 80 e0 ldi r24, 0x00 ; 0 + } +} + 5f2: 08 95 ret -0000081c <tp_rxISR>: - 81c: cf 93 push r28 - 81e: df 93 push r29 - 820: ec 01 movw r28, r24 - 822: ea 81 ldd r30, Y+2 ; 0x02 - 824: fb 81 ldd r31, Y+3 ; 0x03 - 826: 8e 81 ldd r24, Y+6 ; 0x06 - 828: 87 83 std Z+7, r24 ; 0x07 - 82a: e8 81 ld r30, Y - 82c: f9 81 ldd r31, Y+1 ; 0x01 - 82e: 90 81 ld r25, Z - 830: 8d 85 ldd r24, Y+13 ; 0x0d - 832: 88 23 and r24, r24 - 834: 19 f0 breq .+6 ; 0x83c <tp_rxISR+0x20> - 836: 81 30 cpi r24, 0x01 ; 1 - 838: 31 f0 breq .+12 ; 0x846 <tp_rxISR+0x2a> - 83a: 11 c0 rjmp .+34 ; 0x85e <tp_rxISR+0x42> - 83c: 9e 37 cpi r25, 0x7E ; 126 - 83e: 79 f4 brne .+30 ; 0x85e <tp_rxISR+0x42> - 840: 81 e0 ldi r24, 0x01 ; 1 - 842: 8d 87 std Y+13, r24 ; 0x0d - 844: 0c c0 rjmp .+24 ; 0x85e <tp_rxISR+0x42> - 846: 9e 37 cpi r25, 0x7E ; 126 - 848: 29 f4 brne .+10 ; 0x854 <tp_rxISR+0x38> - 84a: 1d 86 std Y+13, r1 ; 0x0d - 84c: ce 01 movw r24, r28 - 84e: 0e 94 8c 01 call 0x318 ; 0x318 <handoff> - 852: 05 c0 rjmp .+10 ; 0x85e <tp_rxISR+0x42> - 854: 60 81 ld r22, Z - 856: 8f 81 ldd r24, Y+7 ; 0x07 - 858: 98 85 ldd r25, Y+8 ; 0x08 - 85a: 0e 94 5d 03 call 0x6ba ; 0x6ba <rb_write> - 85e: 8c 85 ldd r24, Y+12 ; 0x0c - 860: 81 30 cpi r24, 0x01 ; 1 - 862: 11 f0 breq .+4 ; 0x868 <tp_rxISR+0x4c> - 864: 81 e0 ldi r24, 0x01 ; 1 - 866: 8c 87 std Y+12, r24 ; 0x0c - 868: df 91 pop r29 - 86a: cf 91 pop r28 - 86c: 08 95 ret +000005f4 <tp_new>: + */ -0000086e <tp_read>: - 86e: 81 e5 ldi r24, 0x51 ; 81 - 870: fb 01 movw r30, r22 - 872: 80 83 st Z, r24 - 874: 80 e0 ldi r24, 0x00 ; 0 - 876: 08 95 ret +#include "tinyport.h" +#include <util/delay.h> -00000878 <tp_setTxStatus>: -void tp_write(tinyport_t tp, uint8_t data){ - rb_write(tp->rbtx, data); - tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available +tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm){ + 5f4: cf 92 push r12 + 5f6: df 92 push r13 + 5f8: ef 92 push r14 + 5fa: 0f 93 push r16 + 5fc: cf 93 push r28 + 5fe: df 93 push r29 + 600: cd b7 in r28, 0x3d ; 61 + 602: de b7 in r29, 0x3e ; 62 + 604: 6b 97 sbiw r28, 0x1b ; 27 + 606: cd bf out 0x3d, r28 ; 61 + 608: de bf out 0x3e, r29 ; 62 + 60a: 6c 01 movw r12, r24 + + tinyport_t tp; + + tp.uart = uart; + 60c: 69 83 std Y+1, r22 ; 0x01 + 60e: 7a 83 std Y+2, r23 ; 0x02 + tp.port = port; + 610: 4b 83 std Y+3, r20 ; 0x03 + 612: 5c 83 std Y+4, r21 ; 0x04 + + tp.pinRX_bm = pinRX_bm; + 614: 2d 83 std Y+5, r18 ; 0x05 + tp.pinTX_bm = pinTX_bm; + 616: 0e 83 std Y+6, r16 ; 0x06 + tp.pinSTAT_bm = pinSTAT_bm; + 618: ef 82 std Y+7, r14 ; 0x07 + + tp.txstate = TP_TX_STATE_EMPTY; + 61a: 18 86 std Y+8, r1 ; 0x08 + tp.rxstate = TP_RX_STATE_EMPTY; + 61c: 19 86 std Y+9, r1 ; 0x09 + tp.pstate = TP_PSTATE_OUTSIDE; + 61e: 1a 86 std Y+10, r1 ; 0x0a + + rb_init(&tp.rbrx, TP_RXBUF_SIZE); + 620: 60 e8 ldi r22, 0x80 ; 128 + 622: 70 e0 ldi r23, 0x00 ; 0 + 624: ce 01 movw r24, r28 + 626: 0c 96 adiw r24, 0x0c ; 12 + 628: 0e 94 9f 02 call 0x53e ; 0x53e <rb_init> + rb_init(&tp.rbtx, TP_TXBUF_SIZE); + 62c: 60 e8 ldi r22, 0x80 ; 128 + 62e: 70 e0 ldi r23, 0x00 ; 0 + 630: ce 01 movw r24, r28 + 632: 44 96 adiw r24, 0x14 ; 20 + 634: 0e 94 9f 02 call 0x53e ; 0x53e <rb_init> + + return tp; + 638: 8b e1 ldi r24, 0x1B ; 27 + 63a: fe 01 movw r30, r28 + 63c: 31 96 adiw r30, 0x01 ; 1 + 63e: d6 01 movw r26, r12 + 640: 01 90 ld r0, Z+ + 642: 0d 92 st X+, r0 + 644: 8a 95 dec r24 + 646: e1 f7 brne .-8 ; 0x640 <tp_new+0x4c> } + 648: c6 01 movw r24, r12 + 64a: 6b 96 adiw r28, 0x1b ; 27 + 64c: cd bf out 0x3d, r28 ; 61 + 64e: de bf out 0x3e, r29 ; 62 + 650: df 91 pop r29 + 652: cf 91 pop r28 + 654: 0f 91 pop r16 + 656: ef 90 pop r14 + 658: df 90 pop r13 + 65a: cf 90 pop r12 + 65c: 08 95 ret -void tp_setTxStatus(tinyport_t tp, uint8_t state){ - 878: fc 01 movw r30, r24 - if(state == tp->txstate){ // if already set, - 87a: 83 85 ldd r24, Z+11 ; 0x0b - 87c: 86 17 cp r24, r22 - 87e: a9 f0 breq .+42 ; 0x8aa <tp_setTxStatus+0x32> - // do nothing - } else if(state) { // if set to hi - have things to tx - 880: 66 23 and r22, r22 - 882: 51 f0 breq .+20 ; 0x898 <tp_setTxStatus+0x20> - tp->uart->CTRLA |= USART_DREINTLVL_LO_gc; // now ready for out transmit - this would happen elsewhere - when there is tx to tx - 884: a0 81 ld r26, Z - 886: b1 81 ldd r27, Z+1 ; 0x01 - 888: 13 96 adiw r26, 0x03 ; 3 - 88a: 8c 91 ld r24, X - 88c: 13 97 sbiw r26, 0x03 ; 3 - 88e: 81 60 ori r24, 0x01 ; 1 - 890: 13 96 adiw r26, 0x03 ; 3 - 892: 8c 93 st X, r24 - tp->txstate = state; - 894: 63 87 std Z+11, r22 ; 0x0b - 896: 08 95 ret - } else { // if lo - buffer is empty, donot tx - tp->uart->CTRLA = (tp->uart->CTRLA & ~ USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc; // turn off interrupt - 898: a0 81 ld r26, Z - 89a: b1 81 ldd r27, Z+1 ; 0x01 - 89c: 13 96 adiw r26, 0x03 ; 3 - 89e: 8c 91 ld r24, X - 8a0: 13 97 sbiw r26, 0x03 ; 3 - 8a2: 8c 7f andi r24, 0xFC ; 252 - 8a4: 13 96 adiw r26, 0x03 ; 3 - 8a6: 8c 93 st X, r24 - tp->txstate = state; - 8a8: 13 86 std Z+11, r1 ; 0x0b - 8aa: 08 95 ret +0000065e <tp_init>: -000008ac <tp_txISR>: - } -} - -// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970 +// mostly, start the uart port +void tp_init(tinyport_t *tp){ + 65e: fc 01 movw r30, r24 + // USART is in UART (async) mode automatically + // these registers setup the baudrate - the bitrate + // this seems a bit tricky. I am taking for granted that the clock is at 48MHz, + tp->uart->BAUDCTRLA = TP_UART_BAUDCONTROLA; + 660: a0 81 ld r26, Z + 662: b1 81 ldd r27, Z+1 ; 0x01 + 664: 8b e9 ldi r24, 0x9B ; 155 + 666: 16 96 adiw r26, 0x06 ; 6 + 668: 8c 93 st X, r24 + tp->uart->BAUDCTRLB = TP_UART_BAUDCONTROLB; + 66a: a0 81 ld r26, Z + 66c: b1 81 ldd r27, Z+1 ; 0x01 + 66e: 17 96 adiw r26, 0x07 ; 7 + 670: 1c 92 st X, r1 + + // setup for interrupt + // receive complete interrupt low level, transmit complete interupt off, transmit buffer empty interupt off + tp->uart->CTRLA |= USART_RXCINTLVL_LO_gc | USART_TXCINTLVL_OFF_gc | USART_DREINTLVL_OFF_gc; + 672: a0 81 ld r26, Z + 674: b1 81 ldd r27, Z+1 ; 0x01 + 676: 13 96 adiw r26, 0x03 ; 3 + 678: 8c 91 ld r24, X + 67a: 13 97 sbiw r26, 0x03 ; 3 + 67c: 80 61 ori r24, 0x10 ; 16 + 67e: 13 96 adiw r26, 0x03 ; 3 + 680: 8c 93 st X, r24 -void tp_txISR(tinyport_t tp){ - 8ac: 0f 93 push r16 - 8ae: 1f 93 push r17 - 8b0: cf 93 push r28 - 8b2: df 93 push r29 - 8b4: ec 01 movw r28, r24 + // enables tx and rx + tp->uart->CTRLB = USART_TXEN_bm | USART_RXEN_bm; + 682: a0 81 ld r26, Z + 684: b1 81 ldd r27, Z+1 ; 0x01 + 686: 88 e1 ldi r24, 0x18 ; 24 + 688: 14 96 adiw r26, 0x04 ; 4 + 68a: 8c 93 st X, r24 + + // setup mode + tp->uart->CTRLC = USART_CMODE_ASYNCHRONOUS_gc | USART_PMODE_DISABLED_gc | USART_CHSIZE_8BIT_gc; // 8 bit word, async, no parity bit} + 68c: a0 81 ld r26, Z + 68e: b1 81 ldd r27, Z+1 ; 0x01 + 690: 83 e0 ldi r24, 0x03 ; 3 + 692: 15 96 adiw r26, 0x05 ; 5 + 694: 8c 93 st X, r24 + + // some GPIO setup, to agree with the UART peripheral + // tx pin (pin mapping is in the 'Datasheet', registers etc are in the 'Manual') these are default pins + tp->port->OUTSET = tp->pinTX_bm; + 696: a2 81 ldd r26, Z+2 ; 0x02 + 698: b3 81 ldd r27, Z+3 ; 0x03 + 69a: 85 81 ldd r24, Z+5 ; 0x05 + 69c: 15 96 adiw r26, 0x05 ; 5 + 69e: 8c 93 st X, r24 + tp->port->DIRSET = tp->pinTX_bm; + 6a0: a2 81 ldd r26, Z+2 ; 0x02 + 6a2: b3 81 ldd r27, Z+3 ; 0x03 + 6a4: 85 81 ldd r24, Z+5 ; 0x05 + 6a6: 11 96 adiw r26, 0x01 ; 1 + 6a8: 8c 93 st X, r24 + // rx pin + tp->port->DIRCLR = tp->pinRX_bm; + 6aa: a2 81 ldd r26, Z+2 ; 0x02 + 6ac: b3 81 ldd r27, Z+3 ; 0x03 + 6ae: 84 81 ldd r24, Z+4 ; 0x04 + 6b0: 12 96 adiw r26, 0x02 ; 2 + 6b2: 8c 93 st X, r24 + tp->port->OUTCLR = tp->pinRX_bm; + 6b4: a2 81 ldd r26, Z+2 ; 0x02 + 6b6: b3 81 ldd r27, Z+3 ; 0x03 + 6b8: 84 81 ldd r24, Z+4 ; 0x04 + 6ba: 16 96 adiw r26, 0x06 ; 6 + 6bc: 8c 93 st X, r24 // stat pin tp->port->DIRSET = tp->pinSTAT_bm; + 6be: a2 81 ldd r26, Z+2 ; 0x02 + 6c0: b3 81 ldd r27, Z+3 ; 0x03 + 6c2: 86 81 ldd r24, Z+6 ; 0x06 + 6c4: 11 96 adiw r26, 0x01 ; 1 + 6c6: 8c 93 st X, r24 + 6c8: 08 95 ret + +000006ca <tp_rxISR>: } -void tp_statflash(tinyport_t tp){ - tp->port->OUTTGL = tp->pinSTAT_bm; - 8b6: ea 81 ldd r30, Y+2 ; 0x02 - 8b8: fb 81 ldd r31, Y+3 ; 0x03 - 8ba: 8e 81 ldd r24, Y+6 ; 0x06 - 8bc: 87 83 std Z+7, r24 ; 0x07 +void tp_rxISR(tinyport_t *tp){ // towards a passalong + 6ca: fc 01 movw r30, r24 + while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking) + tp->uart->DATA = data; +} -// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970 +void tp_statflash(tinyport_t *tp){ + tp->port->OUTTGL = tp->pinSTAT_bm; + 6cc: a2 81 ldd r26, Z+2 ; 0x02 + 6ce: b3 81 ldd r27, Z+3 ; 0x03 + 6d0: 86 81 ldd r24, Z+6 ; 0x06 + 6d2: 17 96 adiw r26, 0x07 ; 7 + 6d4: 8c 93 st X, r24 +} -void tp_txISR(tinyport_t tp){ +void tp_rxISR(tinyport_t *tp){ // towards a passalong tp_statflash(tp); - tp->uart->DATA = rb_read(tp->rbtx); - 8be: 08 81 ld r16, Y - 8c0: 19 81 ldd r17, Y+1 ; 0x01 - 8c2: 89 85 ldd r24, Y+9 ; 0x09 - 8c4: 9a 85 ldd r25, Y+10 ; 0x0a - 8c6: 0e 94 75 03 call 0x6ea ; 0x6ea <rb_read> - 8ca: f8 01 movw r30, r16 - 8cc: 80 83 st Z, r24 - if(!(rb_hasdata(tp->rbtx))){ // if no data left to tx, - 8ce: 89 85 ldd r24, Y+9 ; 0x09 - 8d0: 9a 85 ldd r25, Y+10 ; 0x0a - 8d2: 0e 94 90 03 call 0x720 ; 0x720 <rb_hasdata> - 8d6: 81 11 cpse r24, r1 - 8d8: 04 c0 rjmp .+8 ; 0x8e2 <tp_txISR+0x36> - tp_setTxStatus(tp, TP_TX_STATE_EMPTY); - 8da: 60 e0 ldi r22, 0x00 ; 0 - 8dc: ce 01 movw r24, r28 - 8de: 0e 94 3c 04 call 0x878 ; 0x878 <tp_setTxStatus> + + tp->bumpdata = tp->uart->DATA; + 6d6: a0 81 ld r26, Z + 6d8: b1 81 ldd r27, Z+1 ; 0x01 + 6da: 6c 91 ld r22, X + 6dc: 62 87 std Z+10, r22 ; 0x0a + + switch (tp->pstate){ + 6de: 81 85 ldd r24, Z+9 ; 0x09 + 6e0: 88 23 and r24, r24 + 6e2: 19 f0 breq .+6 ; 0x6ea <tp_rxISR+0x20> + 6e4: 81 30 cpi r24, 0x01 ; 1 + 6e6: 31 f0 breq .+12 ; 0x6f4 <tp_rxISR+0x2a> + 6e8: 08 95 ret + + case TP_PSTATE_OUTSIDE: + if(tp->bumpdata == 126){ + 6ea: 6e 37 cpi r22, 0x7E ; 126 + 6ec: 59 f4 brne .+22 ; 0x704 <tp_rxISR+0x3a> + tp->pstate = TP_PSTATE_INSIDE; + 6ee: 81 e0 ldi r24, 0x01 ; 1 + 6f0: 81 87 std Z+9, r24 ; 0x09 + 6f2: 08 95 ret + } + break; + + case TP_PSTATE_INSIDE: + if(tp->bumpdata == 126){ + 6f4: 6e 37 cpi r22, 0x7E ; 126 + 6f6: 11 f4 brne .+4 ; 0x6fc <tp_rxISR+0x32> + tp->pstate = TP_PSTATE_OUTSIDE; + 6f8: 11 86 std Z+9, r1 ; 0x09 + 6fa: 08 95 ret + 6fc: cf 01 movw r24, r30 + } else { + rb_put(&tp->rbrx, tp->bumpdata); + 6fe: 0b 96 adiw r24, 0x0b ; 11 + 700: 0e 94 b0 02 call 0x560 ; 0x560 <rb_put> + 704: 08 95 ret + +00000706 <tp_read>: + break; + } +} + +uint8_t tp_read(tinyport_t *tp, uint8_t *data){ // TODO: set at pointer, return true if non empty + if(rb_get(&tp->rbrx, data)){ + 706: 0b 96 adiw r24, 0x0b ; 11 + 708: 0e 94 d5 02 call 0x5aa ; 0x5aa <rb_get> + 70c: 91 e0 ldi r25, 0x01 ; 1 + 70e: 81 11 cpse r24, r1 + 710: 01 c0 rjmp .+2 ; 0x714 <tp_read+0xe> + 712: 90 e0 ldi r25, 0x00 ; 0 + return 1; + } else { + return 0; } } - 8e2: df 91 pop r29 - 8e4: cf 91 pop r28 - 8e6: 1f 91 pop r17 - 8e8: 0f 91 pop r16 - 8ea: 08 95 ret + 714: 89 2f mov r24, r25 + 716: 08 95 ret -000008ec <tp_write>: +00000718 <tp_write>: -void tp_write(tinyport_t tp, uint8_t data){ - 8ec: cf 93 push r28 - 8ee: df 93 push r29 - 8f0: ec 01 movw r28, r24 - rb_write(tp->rbtx, data); - 8f2: 89 85 ldd r24, Y+9 ; 0x09 - 8f4: 9a 85 ldd r25, Y+10 ; 0x0a - 8f6: 0e 94 5d 03 call 0x6ba ; 0x6ba <rb_write> - tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available - 8fa: 61 e0 ldi r22, 0x01 ; 1 - 8fc: ce 01 movw r24, r28 - 8fe: 0e 94 3c 04 call 0x878 ; 0x878 <tp_setTxStatus> +// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970 + +void tp_write(tinyport_t *tp, uint8_t data){ + while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking) + 718: dc 01 movw r26, r24 + 71a: ed 91 ld r30, X+ + 71c: fc 91 ld r31, X + 71e: 81 81 ldd r24, Z+1 ; 0x01 + 720: 85 ff sbrs r24, 5 + 722: fd cf rjmp .-6 ; 0x71e <tp_write+0x6> + tp->uart->DATA = data; + 724: 60 83 st Z, r22 + 726: 08 95 ret + +00000728 <tp_statflash>: } - 902: df 91 pop r29 - 904: cf 91 pop r28 - 906: 08 95 ret -00000908 <malloc>: - 908: 0f 93 push r16 - 90a: 1f 93 push r17 - 90c: cf 93 push r28 - 90e: df 93 push r29 - 910: 82 30 cpi r24, 0x02 ; 2 - 912: 91 05 cpc r25, r1 - 914: 10 f4 brcc .+4 ; 0x91a <malloc+0x12> - 916: 82 e0 ldi r24, 0x02 ; 2 - 918: 90 e0 ldi r25, 0x00 ; 0 - 91a: e0 91 10 20 lds r30, 0x2010 ; 0x802010 <__flp> - 91e: f0 91 11 20 lds r31, 0x2011 ; 0x802011 <__flp+0x1> - 922: 20 e0 ldi r18, 0x00 ; 0 - 924: 30 e0 ldi r19, 0x00 ; 0 - 926: a0 e0 ldi r26, 0x00 ; 0 - 928: b0 e0 ldi r27, 0x00 ; 0 - 92a: 30 97 sbiw r30, 0x00 ; 0 - 92c: 19 f1 breq .+70 ; 0x974 <malloc+0x6c> - 92e: 40 81 ld r20, Z - 930: 51 81 ldd r21, Z+1 ; 0x01 - 932: 02 81 ldd r16, Z+2 ; 0x02 - 934: 13 81 ldd r17, Z+3 ; 0x03 - 936: 48 17 cp r20, r24 - 938: 59 07 cpc r21, r25 - 93a: c8 f0 brcs .+50 ; 0x96e <malloc+0x66> - 93c: 84 17 cp r24, r20 - 93e: 95 07 cpc r25, r21 - 940: 69 f4 brne .+26 ; 0x95c <malloc+0x54> - 942: 10 97 sbiw r26, 0x00 ; 0 - 944: 31 f0 breq .+12 ; 0x952 <malloc+0x4a> - 946: 12 96 adiw r26, 0x02 ; 2 - 948: 0c 93 st X, r16 - 94a: 12 97 sbiw r26, 0x02 ; 2 - 94c: 13 96 adiw r26, 0x03 ; 3 - 94e: 1c 93 st X, r17 - 950: 27 c0 rjmp .+78 ; 0x9a0 <malloc+0x98> - 952: 00 93 10 20 sts 0x2010, r16 ; 0x802010 <__flp> - 956: 10 93 11 20 sts 0x2011, r17 ; 0x802011 <__flp+0x1> - 95a: 22 c0 rjmp .+68 ; 0x9a0 <malloc+0x98> - 95c: 21 15 cp r18, r1 - 95e: 31 05 cpc r19, r1 - 960: 19 f0 breq .+6 ; 0x968 <malloc+0x60> - 962: 42 17 cp r20, r18 - 964: 53 07 cpc r21, r19 - 966: 18 f4 brcc .+6 ; 0x96e <malloc+0x66> - 968: 9a 01 movw r18, r20 - 96a: bd 01 movw r22, r26 - 96c: ef 01 movw r28, r30 - 96e: df 01 movw r26, r30 - 970: f8 01 movw r30, r16 - 972: db cf rjmp .-74 ; 0x92a <malloc+0x22> - 974: 21 15 cp r18, r1 - 976: 31 05 cpc r19, r1 - 978: f9 f0 breq .+62 ; 0x9b8 <malloc+0xb0> - 97a: 28 1b sub r18, r24 - 97c: 39 0b sbc r19, r25 - 97e: 24 30 cpi r18, 0x04 ; 4 - 980: 31 05 cpc r19, r1 - 982: 80 f4 brcc .+32 ; 0x9a4 <malloc+0x9c> - 984: 8a 81 ldd r24, Y+2 ; 0x02 - 986: 9b 81 ldd r25, Y+3 ; 0x03 - 988: 61 15 cp r22, r1 - 98a: 71 05 cpc r23, r1 - 98c: 21 f0 breq .+8 ; 0x996 <malloc+0x8e> - 98e: fb 01 movw r30, r22 - 990: 82 83 std Z+2, r24 ; 0x02 - 992: 93 83 std Z+3, r25 ; 0x03 - 994: 04 c0 rjmp .+8 ; 0x99e <malloc+0x96> - 996: 80 93 10 20 sts 0x2010, r24 ; 0x802010 <__flp> - 99a: 90 93 11 20 sts 0x2011, r25 ; 0x802011 <__flp+0x1> - 99e: fe 01 movw r30, r28 - 9a0: 32 96 adiw r30, 0x02 ; 2 - 9a2: 44 c0 rjmp .+136 ; 0xa2c <malloc+0x124> - 9a4: fe 01 movw r30, r28 - 9a6: e2 0f add r30, r18 - 9a8: f3 1f adc r31, r19 - 9aa: 81 93 st Z+, r24 - 9ac: 91 93 st Z+, r25 - 9ae: 22 50 subi r18, 0x02 ; 2 - 9b0: 31 09 sbc r19, r1 - 9b2: 28 83 st Y, r18 - 9b4: 39 83 std Y+1, r19 ; 0x01 - 9b6: 3a c0 rjmp .+116 ; 0xa2c <malloc+0x124> - 9b8: 20 91 0e 20 lds r18, 0x200E ; 0x80200e <__brkval> - 9bc: 30 91 0f 20 lds r19, 0x200F ; 0x80200f <__brkval+0x1> - 9c0: 23 2b or r18, r19 - 9c2: 41 f4 brne .+16 ; 0x9d4 <malloc+0xcc> - 9c4: 20 91 02 20 lds r18, 0x2002 ; 0x802002 <__malloc_heap_start> - 9c8: 30 91 03 20 lds r19, 0x2003 ; 0x802003 <__malloc_heap_start+0x1> - 9cc: 20 93 0e 20 sts 0x200E, r18 ; 0x80200e <__brkval> - 9d0: 30 93 0f 20 sts 0x200F, r19 ; 0x80200f <__brkval+0x1> - 9d4: 20 91 00 20 lds r18, 0x2000 ; 0x802000 <__data_start> - 9d8: 30 91 01 20 lds r19, 0x2001 ; 0x802001 <__data_start+0x1> - 9dc: 21 15 cp r18, r1 - 9de: 31 05 cpc r19, r1 - 9e0: 41 f4 brne .+16 ; 0x9f2 <malloc+0xea> - 9e2: 2d b7 in r18, 0x3d ; 61 - 9e4: 3e b7 in r19, 0x3e ; 62 - 9e6: 40 91 04 20 lds r20, 0x2004 ; 0x802004 <__malloc_margin> - 9ea: 50 91 05 20 lds r21, 0x2005 ; 0x802005 <__malloc_margin+0x1> - 9ee: 24 1b sub r18, r20 - 9f0: 35 0b sbc r19, r21 - 9f2: e0 91 0e 20 lds r30, 0x200E ; 0x80200e <__brkval> - 9f6: f0 91 0f 20 lds r31, 0x200F ; 0x80200f <__brkval+0x1> - 9fa: e2 17 cp r30, r18 - 9fc: f3 07 cpc r31, r19 - 9fe: a0 f4 brcc .+40 ; 0xa28 <malloc+0x120> - a00: 2e 1b sub r18, r30 - a02: 3f 0b sbc r19, r31 - a04: 28 17 cp r18, r24 - a06: 39 07 cpc r19, r25 - a08: 78 f0 brcs .+30 ; 0xa28 <malloc+0x120> - a0a: ac 01 movw r20, r24 - a0c: 4e 5f subi r20, 0xFE ; 254 - a0e: 5f 4f sbci r21, 0xFF ; 255 - a10: 24 17 cp r18, r20 - a12: 35 07 cpc r19, r21 - a14: 48 f0 brcs .+18 ; 0xa28 <malloc+0x120> - a16: 4e 0f add r20, r30 - a18: 5f 1f adc r21, r31 - a1a: 40 93 0e 20 sts 0x200E, r20 ; 0x80200e <__brkval> - a1e: 50 93 0f 20 sts 0x200F, r21 ; 0x80200f <__brkval+0x1> - a22: 81 93 st Z+, r24 - a24: 91 93 st Z+, r25 - a26: 02 c0 rjmp .+4 ; 0xa2c <malloc+0x124> - a28: e0 e0 ldi r30, 0x00 ; 0 - a2a: f0 e0 ldi r31, 0x00 ; 0 - a2c: cf 01 movw r24, r30 - a2e: df 91 pop r29 - a30: cf 91 pop r28 - a32: 1f 91 pop r17 - a34: 0f 91 pop r16 - a36: 08 95 ret +void tp_statflash(tinyport_t *tp){ + tp->port->OUTTGL = tp->pinSTAT_bm; + 728: dc 01 movw r26, r24 + 72a: 12 96 adiw r26, 0x02 ; 2 + 72c: ed 91 ld r30, X+ + 72e: fc 91 ld r31, X + 730: 13 97 sbiw r26, 0x03 ; 3 + 732: 16 96 adiw r26, 0x06 ; 6 + 734: 8c 91 ld r24, X + 736: 87 83 std Z+7, r24 ; 0x07 + 738: 08 95 ret + +0000073a <__udivmodhi4>: + 73a: aa 1b sub r26, r26 + 73c: bb 1b sub r27, r27 + 73e: 51 e1 ldi r21, 0x11 ; 17 + 740: 07 c0 rjmp .+14 ; 0x750 <__udivmodhi4_ep> + +00000742 <__udivmodhi4_loop>: + 742: aa 1f adc r26, r26 + 744: bb 1f adc r27, r27 + 746: a6 17 cp r26, r22 + 748: b7 07 cpc r27, r23 + 74a: 10 f0 brcs .+4 ; 0x750 <__udivmodhi4_ep> + 74c: a6 1b sub r26, r22 + 74e: b7 0b sbc r27, r23 + +00000750 <__udivmodhi4_ep>: + 750: 88 1f adc r24, r24 + 752: 99 1f adc r25, r25 + 754: 5a 95 dec r21 + 756: a9 f7 brne .-22 ; 0x742 <__udivmodhi4_loop> + 758: 80 95 com r24 + 75a: 90 95 com r25 + 75c: bc 01 movw r22, r24 + 75e: cd 01 movw r24, r26 + 760: 08 95 ret + +00000762 <malloc>: + 762: 0f 93 push r16 + 764: 1f 93 push r17 + 766: cf 93 push r28 + 768: df 93 push r29 + 76a: 82 30 cpi r24, 0x02 ; 2 + 76c: 91 05 cpc r25, r1 + 76e: 10 f4 brcc .+4 ; 0x774 <malloc+0x12> + 770: 82 e0 ldi r24, 0x02 ; 2 + 772: 90 e0 ldi r25, 0x00 ; 0 + 774: e0 91 74 20 lds r30, 0x2074 ; 0x802074 <__flp> + 778: f0 91 75 20 lds r31, 0x2075 ; 0x802075 <__flp+0x1> + 77c: 20 e0 ldi r18, 0x00 ; 0 + 77e: 30 e0 ldi r19, 0x00 ; 0 + 780: a0 e0 ldi r26, 0x00 ; 0 + 782: b0 e0 ldi r27, 0x00 ; 0 + 784: 30 97 sbiw r30, 0x00 ; 0 + 786: 19 f1 breq .+70 ; 0x7ce <malloc+0x6c> + 788: 40 81 ld r20, Z + 78a: 51 81 ldd r21, Z+1 ; 0x01 + 78c: 02 81 ldd r16, Z+2 ; 0x02 + 78e: 13 81 ldd r17, Z+3 ; 0x03 + 790: 48 17 cp r20, r24 + 792: 59 07 cpc r21, r25 + 794: c8 f0 brcs .+50 ; 0x7c8 <malloc+0x66> + 796: 84 17 cp r24, r20 + 798: 95 07 cpc r25, r21 + 79a: 69 f4 brne .+26 ; 0x7b6 <malloc+0x54> + 79c: 10 97 sbiw r26, 0x00 ; 0 + 79e: 31 f0 breq .+12 ; 0x7ac <malloc+0x4a> + 7a0: 12 96 adiw r26, 0x02 ; 2 + 7a2: 0c 93 st X, r16 + 7a4: 12 97 sbiw r26, 0x02 ; 2 + 7a6: 13 96 adiw r26, 0x03 ; 3 + 7a8: 1c 93 st X, r17 + 7aa: 27 c0 rjmp .+78 ; 0x7fa <malloc+0x98> + 7ac: 00 93 74 20 sts 0x2074, r16 ; 0x802074 <__flp> + 7b0: 10 93 75 20 sts 0x2075, r17 ; 0x802075 <__flp+0x1> + 7b4: 22 c0 rjmp .+68 ; 0x7fa <malloc+0x98> + 7b6: 21 15 cp r18, r1 + 7b8: 31 05 cpc r19, r1 + 7ba: 19 f0 breq .+6 ; 0x7c2 <malloc+0x60> + 7bc: 42 17 cp r20, r18 + 7be: 53 07 cpc r21, r19 + 7c0: 18 f4 brcc .+6 ; 0x7c8 <malloc+0x66> + 7c2: 9a 01 movw r18, r20 + 7c4: bd 01 movw r22, r26 + 7c6: ef 01 movw r28, r30 + 7c8: df 01 movw r26, r30 + 7ca: f8 01 movw r30, r16 + 7cc: db cf rjmp .-74 ; 0x784 <malloc+0x22> + 7ce: 21 15 cp r18, r1 + 7d0: 31 05 cpc r19, r1 + 7d2: f9 f0 breq .+62 ; 0x812 <malloc+0xb0> + 7d4: 28 1b sub r18, r24 + 7d6: 39 0b sbc r19, r25 + 7d8: 24 30 cpi r18, 0x04 ; 4 + 7da: 31 05 cpc r19, r1 + 7dc: 80 f4 brcc .+32 ; 0x7fe <malloc+0x9c> + 7de: 8a 81 ldd r24, Y+2 ; 0x02 + 7e0: 9b 81 ldd r25, Y+3 ; 0x03 + 7e2: 61 15 cp r22, r1 + 7e4: 71 05 cpc r23, r1 + 7e6: 21 f0 breq .+8 ; 0x7f0 <malloc+0x8e> + 7e8: fb 01 movw r30, r22 + 7ea: 82 83 std Z+2, r24 ; 0x02 + 7ec: 93 83 std Z+3, r25 ; 0x03 + 7ee: 04 c0 rjmp .+8 ; 0x7f8 <malloc+0x96> + 7f0: 80 93 74 20 sts 0x2074, r24 ; 0x802074 <__flp> + 7f4: 90 93 75 20 sts 0x2075, r25 ; 0x802075 <__flp+0x1> + 7f8: fe 01 movw r30, r28 + 7fa: 32 96 adiw r30, 0x02 ; 2 + 7fc: 44 c0 rjmp .+136 ; 0x886 <malloc+0x124> + 7fe: fe 01 movw r30, r28 + 800: e2 0f add r30, r18 + 802: f3 1f adc r31, r19 + 804: 81 93 st Z+, r24 + 806: 91 93 st Z+, r25 + 808: 22 50 subi r18, 0x02 ; 2 + 80a: 31 09 sbc r19, r1 + 80c: 28 83 st Y, r18 + 80e: 39 83 std Y+1, r19 ; 0x01 + 810: 3a c0 rjmp .+116 ; 0x886 <malloc+0x124> + 812: 20 91 72 20 lds r18, 0x2072 ; 0x802072 <__brkval> + 816: 30 91 73 20 lds r19, 0x2073 ; 0x802073 <__brkval+0x1> + 81a: 23 2b or r18, r19 + 81c: 41 f4 brne .+16 ; 0x82e <malloc+0xcc> + 81e: 20 91 02 20 lds r18, 0x2002 ; 0x802002 <__malloc_heap_start> + 822: 30 91 03 20 lds r19, 0x2003 ; 0x802003 <__malloc_heap_start+0x1> + 826: 20 93 72 20 sts 0x2072, r18 ; 0x802072 <__brkval> + 82a: 30 93 73 20 sts 0x2073, r19 ; 0x802073 <__brkval+0x1> + 82e: 20 91 00 20 lds r18, 0x2000 ; 0x802000 <__data_start> + 832: 30 91 01 20 lds r19, 0x2001 ; 0x802001 <__data_start+0x1> + 836: 21 15 cp r18, r1 + 838: 31 05 cpc r19, r1 + 83a: 41 f4 brne .+16 ; 0x84c <malloc+0xea> + 83c: 2d b7 in r18, 0x3d ; 61 + 83e: 3e b7 in r19, 0x3e ; 62 + 840: 40 91 04 20 lds r20, 0x2004 ; 0x802004 <__malloc_margin> + 844: 50 91 05 20 lds r21, 0x2005 ; 0x802005 <__malloc_margin+0x1> + 848: 24 1b sub r18, r20 + 84a: 35 0b sbc r19, r21 + 84c: e0 91 72 20 lds r30, 0x2072 ; 0x802072 <__brkval> + 850: f0 91 73 20 lds r31, 0x2073 ; 0x802073 <__brkval+0x1> + 854: e2 17 cp r30, r18 + 856: f3 07 cpc r31, r19 + 858: a0 f4 brcc .+40 ; 0x882 <malloc+0x120> + 85a: 2e 1b sub r18, r30 + 85c: 3f 0b sbc r19, r31 + 85e: 28 17 cp r18, r24 + 860: 39 07 cpc r19, r25 + 862: 78 f0 brcs .+30 ; 0x882 <malloc+0x120> + 864: ac 01 movw r20, r24 + 866: 4e 5f subi r20, 0xFE ; 254 + 868: 5f 4f sbci r21, 0xFF ; 255 + 86a: 24 17 cp r18, r20 + 86c: 35 07 cpc r19, r21 + 86e: 48 f0 brcs .+18 ; 0x882 <malloc+0x120> + 870: 4e 0f add r20, r30 + 872: 5f 1f adc r21, r31 + 874: 40 93 72 20 sts 0x2072, r20 ; 0x802072 <__brkval> + 878: 50 93 73 20 sts 0x2073, r21 ; 0x802073 <__brkval+0x1> + 87c: 81 93 st Z+, r24 + 87e: 91 93 st Z+, r25 + 880: 02 c0 rjmp .+4 ; 0x886 <malloc+0x124> + 882: e0 e0 ldi r30, 0x00 ; 0 + 884: f0 e0 ldi r31, 0x00 ; 0 + 886: cf 01 movw r24, r30 + 888: df 91 pop r29 + 88a: cf 91 pop r28 + 88c: 1f 91 pop r17 + 88e: 0f 91 pop r16 + 890: 08 95 ret -00000a38 <free>: - a38: cf 93 push r28 - a3a: df 93 push r29 - a3c: 00 97 sbiw r24, 0x00 ; 0 - a3e: 09 f4 brne .+2 ; 0xa42 <free+0xa> - a40: 81 c0 rjmp .+258 ; 0xb44 <free+0x10c> - a42: fc 01 movw r30, r24 - a44: 32 97 sbiw r30, 0x02 ; 2 - a46: 12 82 std Z+2, r1 ; 0x02 - a48: 13 82 std Z+3, r1 ; 0x03 - a4a: a0 91 10 20 lds r26, 0x2010 ; 0x802010 <__flp> - a4e: b0 91 11 20 lds r27, 0x2011 ; 0x802011 <__flp+0x1> - a52: 10 97 sbiw r26, 0x00 ; 0 - a54: 81 f4 brne .+32 ; 0xa76 <free+0x3e> - a56: 20 81 ld r18, Z - a58: 31 81 ldd r19, Z+1 ; 0x01 - a5a: 82 0f add r24, r18 - a5c: 93 1f adc r25, r19 - a5e: 20 91 0e 20 lds r18, 0x200E ; 0x80200e <__brkval> - a62: 30 91 0f 20 lds r19, 0x200F ; 0x80200f <__brkval+0x1> - a66: 28 17 cp r18, r24 - a68: 39 07 cpc r19, r25 - a6a: 51 f5 brne .+84 ; 0xac0 <free+0x88> - a6c: e0 93 0e 20 sts 0x200E, r30 ; 0x80200e <__brkval> - a70: f0 93 0f 20 sts 0x200F, r31 ; 0x80200f <__brkval+0x1> - a74: 67 c0 rjmp .+206 ; 0xb44 <free+0x10c> - a76: ed 01 movw r28, r26 - a78: 20 e0 ldi r18, 0x00 ; 0 - a7a: 30 e0 ldi r19, 0x00 ; 0 - a7c: ce 17 cp r28, r30 - a7e: df 07 cpc r29, r31 - a80: 40 f4 brcc .+16 ; 0xa92 <free+0x5a> - a82: 4a 81 ldd r20, Y+2 ; 0x02 - a84: 5b 81 ldd r21, Y+3 ; 0x03 - a86: 9e 01 movw r18, r28 - a88: 41 15 cp r20, r1 - a8a: 51 05 cpc r21, r1 - a8c: f1 f0 breq .+60 ; 0xaca <free+0x92> - a8e: ea 01 movw r28, r20 - a90: f5 cf rjmp .-22 ; 0xa7c <free+0x44> - a92: c2 83 std Z+2, r28 ; 0x02 - a94: d3 83 std Z+3, r29 ; 0x03 - a96: 40 81 ld r20, Z - a98: 51 81 ldd r21, Z+1 ; 0x01 - a9a: 84 0f add r24, r20 - a9c: 95 1f adc r25, r21 - a9e: c8 17 cp r28, r24 - aa0: d9 07 cpc r29, r25 - aa2: 59 f4 brne .+22 ; 0xaba <free+0x82> - aa4: 88 81 ld r24, Y - aa6: 99 81 ldd r25, Y+1 ; 0x01 - aa8: 84 0f add r24, r20 - aaa: 95 1f adc r25, r21 - aac: 02 96 adiw r24, 0x02 ; 2 - aae: 80 83 st Z, r24 - ab0: 91 83 std Z+1, r25 ; 0x01 - ab2: 8a 81 ldd r24, Y+2 ; 0x02 - ab4: 9b 81 ldd r25, Y+3 ; 0x03 - ab6: 82 83 std Z+2, r24 ; 0x02 - ab8: 93 83 std Z+3, r25 ; 0x03 - aba: 21 15 cp r18, r1 - abc: 31 05 cpc r19, r1 - abe: 29 f4 brne .+10 ; 0xaca <free+0x92> - ac0: e0 93 10 20 sts 0x2010, r30 ; 0x802010 <__flp> - ac4: f0 93 11 20 sts 0x2011, r31 ; 0x802011 <__flp+0x1> - ac8: 3d c0 rjmp .+122 ; 0xb44 <free+0x10c> - aca: e9 01 movw r28, r18 - acc: ea 83 std Y+2, r30 ; 0x02 - ace: fb 83 std Y+3, r31 ; 0x03 - ad0: 49 91 ld r20, Y+ - ad2: 59 91 ld r21, Y+ - ad4: c4 0f add r28, r20 - ad6: d5 1f adc r29, r21 - ad8: ec 17 cp r30, r28 - ada: fd 07 cpc r31, r29 - adc: 61 f4 brne .+24 ; 0xaf6 <free+0xbe> - ade: 80 81 ld r24, Z - ae0: 91 81 ldd r25, Z+1 ; 0x01 - ae2: 84 0f add r24, r20 - ae4: 95 1f adc r25, r21 - ae6: 02 96 adiw r24, 0x02 ; 2 - ae8: e9 01 movw r28, r18 - aea: 88 83 st Y, r24 - aec: 99 83 std Y+1, r25 ; 0x01 - aee: 82 81 ldd r24, Z+2 ; 0x02 - af0: 93 81 ldd r25, Z+3 ; 0x03 - af2: 8a 83 std Y+2, r24 ; 0x02 - af4: 9b 83 std Y+3, r25 ; 0x03 - af6: e0 e0 ldi r30, 0x00 ; 0 - af8: f0 e0 ldi r31, 0x00 ; 0 - afa: 12 96 adiw r26, 0x02 ; 2 - afc: 8d 91 ld r24, X+ - afe: 9c 91 ld r25, X - b00: 13 97 sbiw r26, 0x03 ; 3 - b02: 00 97 sbiw r24, 0x00 ; 0 - b04: 19 f0 breq .+6 ; 0xb0c <free+0xd4> - b06: fd 01 movw r30, r26 - b08: dc 01 movw r26, r24 - b0a: f7 cf rjmp .-18 ; 0xafa <free+0xc2> - b0c: 8d 91 ld r24, X+ - b0e: 9c 91 ld r25, X - b10: 11 97 sbiw r26, 0x01 ; 1 - b12: 9d 01 movw r18, r26 - b14: 2e 5f subi r18, 0xFE ; 254 - b16: 3f 4f sbci r19, 0xFF ; 255 - b18: 82 0f add r24, r18 - b1a: 93 1f adc r25, r19 - b1c: 20 91 0e 20 lds r18, 0x200E ; 0x80200e <__brkval> - b20: 30 91 0f 20 lds r19, 0x200F ; 0x80200f <__brkval+0x1> - b24: 28 17 cp r18, r24 - b26: 39 07 cpc r19, r25 - b28: 69 f4 brne .+26 ; 0xb44 <free+0x10c> - b2a: 30 97 sbiw r30, 0x00 ; 0 - b2c: 29 f4 brne .+10 ; 0xb38 <free+0x100> - b2e: 10 92 10 20 sts 0x2010, r1 ; 0x802010 <__flp> - b32: 10 92 11 20 sts 0x2011, r1 ; 0x802011 <__flp+0x1> - b36: 02 c0 rjmp .+4 ; 0xb3c <free+0x104> - b38: 12 82 std Z+2, r1 ; 0x02 - b3a: 13 82 std Z+3, r1 ; 0x03 - b3c: a0 93 0e 20 sts 0x200E, r26 ; 0x80200e <__brkval> - b40: b0 93 0f 20 sts 0x200F, r27 ; 0x80200f <__brkval+0x1> - b44: df 91 pop r29 - b46: cf 91 pop r28 - b48: 08 95 ret +00000892 <free>: + 892: cf 93 push r28 + 894: df 93 push r29 + 896: 00 97 sbiw r24, 0x00 ; 0 + 898: 09 f4 brne .+2 ; 0x89c <free+0xa> + 89a: 81 c0 rjmp .+258 ; 0x99e <free+0x10c> + 89c: fc 01 movw r30, r24 + 89e: 32 97 sbiw r30, 0x02 ; 2 + 8a0: 12 82 std Z+2, r1 ; 0x02 + 8a2: 13 82 std Z+3, r1 ; 0x03 + 8a4: a0 91 74 20 lds r26, 0x2074 ; 0x802074 <__flp> + 8a8: b0 91 75 20 lds r27, 0x2075 ; 0x802075 <__flp+0x1> + 8ac: 10 97 sbiw r26, 0x00 ; 0 + 8ae: 81 f4 brne .+32 ; 0x8d0 <free+0x3e> + 8b0: 20 81 ld r18, Z + 8b2: 31 81 ldd r19, Z+1 ; 0x01 + 8b4: 82 0f add r24, r18 + 8b6: 93 1f adc r25, r19 + 8b8: 20 91 72 20 lds r18, 0x2072 ; 0x802072 <__brkval> + 8bc: 30 91 73 20 lds r19, 0x2073 ; 0x802073 <__brkval+0x1> + 8c0: 28 17 cp r18, r24 + 8c2: 39 07 cpc r19, r25 + 8c4: 51 f5 brne .+84 ; 0x91a <free+0x88> + 8c6: e0 93 72 20 sts 0x2072, r30 ; 0x802072 <__brkval> + 8ca: f0 93 73 20 sts 0x2073, r31 ; 0x802073 <__brkval+0x1> + 8ce: 67 c0 rjmp .+206 ; 0x99e <free+0x10c> + 8d0: ed 01 movw r28, r26 + 8d2: 20 e0 ldi r18, 0x00 ; 0 + 8d4: 30 e0 ldi r19, 0x00 ; 0 + 8d6: ce 17 cp r28, r30 + 8d8: df 07 cpc r29, r31 + 8da: 40 f4 brcc .+16 ; 0x8ec <free+0x5a> + 8dc: 4a 81 ldd r20, Y+2 ; 0x02 + 8de: 5b 81 ldd r21, Y+3 ; 0x03 + 8e0: 9e 01 movw r18, r28 + 8e2: 41 15 cp r20, r1 + 8e4: 51 05 cpc r21, r1 + 8e6: f1 f0 breq .+60 ; 0x924 <free+0x92> + 8e8: ea 01 movw r28, r20 + 8ea: f5 cf rjmp .-22 ; 0x8d6 <free+0x44> + 8ec: c2 83 std Z+2, r28 ; 0x02 + 8ee: d3 83 std Z+3, r29 ; 0x03 + 8f0: 40 81 ld r20, Z + 8f2: 51 81 ldd r21, Z+1 ; 0x01 + 8f4: 84 0f add r24, r20 + 8f6: 95 1f adc r25, r21 + 8f8: c8 17 cp r28, r24 + 8fa: d9 07 cpc r29, r25 + 8fc: 59 f4 brne .+22 ; 0x914 <free+0x82> + 8fe: 88 81 ld r24, Y + 900: 99 81 ldd r25, Y+1 ; 0x01 + 902: 84 0f add r24, r20 + 904: 95 1f adc r25, r21 + 906: 02 96 adiw r24, 0x02 ; 2 + 908: 80 83 st Z, r24 + 90a: 91 83 std Z+1, r25 ; 0x01 + 90c: 8a 81 ldd r24, Y+2 ; 0x02 + 90e: 9b 81 ldd r25, Y+3 ; 0x03 + 910: 82 83 std Z+2, r24 ; 0x02 + 912: 93 83 std Z+3, r25 ; 0x03 + 914: 21 15 cp r18, r1 + 916: 31 05 cpc r19, r1 + 918: 29 f4 brne .+10 ; 0x924 <free+0x92> + 91a: e0 93 74 20 sts 0x2074, r30 ; 0x802074 <__flp> + 91e: f0 93 75 20 sts 0x2075, r31 ; 0x802075 <__flp+0x1> + 922: 3d c0 rjmp .+122 ; 0x99e <free+0x10c> + 924: e9 01 movw r28, r18 + 926: ea 83 std Y+2, r30 ; 0x02 + 928: fb 83 std Y+3, r31 ; 0x03 + 92a: 49 91 ld r20, Y+ + 92c: 59 91 ld r21, Y+ + 92e: c4 0f add r28, r20 + 930: d5 1f adc r29, r21 + 932: ec 17 cp r30, r28 + 934: fd 07 cpc r31, r29 + 936: 61 f4 brne .+24 ; 0x950 <free+0xbe> + 938: 80 81 ld r24, Z + 93a: 91 81 ldd r25, Z+1 ; 0x01 + 93c: 84 0f add r24, r20 + 93e: 95 1f adc r25, r21 + 940: 02 96 adiw r24, 0x02 ; 2 + 942: e9 01 movw r28, r18 + 944: 88 83 st Y, r24 + 946: 99 83 std Y+1, r25 ; 0x01 + 948: 82 81 ldd r24, Z+2 ; 0x02 + 94a: 93 81 ldd r25, Z+3 ; 0x03 + 94c: 8a 83 std Y+2, r24 ; 0x02 + 94e: 9b 83 std Y+3, r25 ; 0x03 + 950: e0 e0 ldi r30, 0x00 ; 0 + 952: f0 e0 ldi r31, 0x00 ; 0 + 954: 12 96 adiw r26, 0x02 ; 2 + 956: 8d 91 ld r24, X+ + 958: 9c 91 ld r25, X + 95a: 13 97 sbiw r26, 0x03 ; 3 + 95c: 00 97 sbiw r24, 0x00 ; 0 + 95e: 19 f0 breq .+6 ; 0x966 <free+0xd4> + 960: fd 01 movw r30, r26 + 962: dc 01 movw r26, r24 + 964: f7 cf rjmp .-18 ; 0x954 <free+0xc2> + 966: 8d 91 ld r24, X+ + 968: 9c 91 ld r25, X + 96a: 11 97 sbiw r26, 0x01 ; 1 + 96c: 9d 01 movw r18, r26 + 96e: 2e 5f subi r18, 0xFE ; 254 + 970: 3f 4f sbci r19, 0xFF ; 255 + 972: 82 0f add r24, r18 + 974: 93 1f adc r25, r19 + 976: 20 91 72 20 lds r18, 0x2072 ; 0x802072 <__brkval> + 97a: 30 91 73 20 lds r19, 0x2073 ; 0x802073 <__brkval+0x1> + 97e: 28 17 cp r18, r24 + 980: 39 07 cpc r19, r25 + 982: 69 f4 brne .+26 ; 0x99e <free+0x10c> + 984: 30 97 sbiw r30, 0x00 ; 0 + 986: 29 f4 brne .+10 ; 0x992 <free+0x100> + 988: 10 92 74 20 sts 0x2074, r1 ; 0x802074 <__flp> + 98c: 10 92 75 20 sts 0x2075, r1 ; 0x802075 <__flp+0x1> + 990: 02 c0 rjmp .+4 ; 0x996 <free+0x104> + 992: 12 82 std Z+2, r1 ; 0x02 + 994: 13 82 std Z+3, r1 ; 0x03 + 996: a0 93 72 20 sts 0x2072, r26 ; 0x802072 <__brkval> + 99a: b0 93 73 20 sts 0x2073, r27 ; 0x802073 <__brkval+0x1> + 99e: df 91 pop r29 + 9a0: cf 91 pop r28 + 9a2: 08 95 ret -00000b4a <_exit>: - b4a: f8 94 cli +000009a4 <_exit>: + 9a4: f8 94 cli -00000b4c <__stop_program>: - b4c: ff cf rjmp .-2 ; 0xb4c <__stop_program> +000009a6 <__stop_program>: + 9a6: ff cf rjmp .-2 ; 0x9a6 <__stop_program> diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map index 4c23ba0..a8db062 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.map @@ -1,5 +1,7 @@ Archive member included to satisfy reference by file (symbol) +c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.o) + ringbuffer.o (__udivmodhi4) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o (exit) c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_copy_data.o) @@ -12,12 +14,12 @@ c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/.. Allocating common symbols Common symbol size file -tp2 0x2 main.o -tp1 0x2 main.o +tp2 0x1b main.o +tp1 0x1b main.o __brkval 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) -tp4 0x2 main.o +tp4 0x1b main.o __flp 0x2 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) -tp3 0x2 main.o +tp3 0x1b main.o Discarded input sections @@ -26,20 +28,19 @@ Discarded input sections .text 0x00000000 0x0 main.o .data 0x00000000 0x0 main.o .bss 0x00000000 0x0 main.o + .text.handoff 0x00000000 0x2 main.o .text.nointerrupts 0x00000000 0xc main.o .text.interrupts 0x00000000 0xc main.o - .text.fakepacket - 0x00000000 0x7a main.o - .text.IRS 0x00000000 0xe main.o .data.psize 0x00000000 0x1 main.o .bss.pcount 0x00000000 0x1 main.o .text 0x00000000 0x0 ringbuffer.o .data 0x00000000 0x0 ringbuffer.o .bss 0x00000000 0x0 ringbuffer.o - .text.rb_reset - 0x00000000 0x8 ringbuffer.o + .text.rb_empty + 0x00000000 0x34 ringbuffer.o + .text.rb_full 0x00000000 0x44 ringbuffer.o .text 0x00000000 0x0 tinyport.o .data 0x00000000 0x0 tinyport.o .bss 0x00000000 0x0 tinyport.o @@ -48,8 +49,20 @@ Discarded input sections .text.tp_statlo 0x00000000 0x12 tinyport.o .text.tp_test 0x00000000 0x3c tinyport.o - .text.tp_setRxStatus - 0x00000000 0xa tinyport.o + .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.o) + .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.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/avrxmega7\libgcc.a(_udivmodhi4.o) .text 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) .data 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) @@ -226,7 +239,7 @@ END GROUP .rela.plt *(.rela.plt) -.text 0x00000000 0xb4e +.text 0x00000000 0x9a8 *(.vectors) .vectors 0x00000000 0x1fc C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o 0x00000000 __vector_default @@ -295,7 +308,6 @@ END GROUP 0x00000248 __vector_32 0x00000248 __vector_75 0x00000248 __vector_71 - 0x00000248 __vector_91 0x00000248 __vector_34 0x00000248 __vector_62 0x00000248 __vector_77 @@ -314,6 +326,7 @@ END GROUP 0x00000248 __vector_6 0x00000248 __vector_110 0x00000248 __vector_31 + 0x00000248 __vector_92 0x00000248 __vector_35 0x00000248 __vector_78 0x00000248 __vector_74 @@ -360,6 +373,7 @@ END GROUP 0x00000248 __vector_95 0x00000248 __vector_103 0x00000248 __vector_96 + 0x00000248 __vector_89 0x00000248 __vector_108 0x00000248 __vector_4 0x00000248 __vector_44 @@ -377,6 +391,7 @@ END GROUP 0x00000248 __vector_58 0x00000248 __vector_70 0x00000248 __vector_83 + 0x00000248 __vector_29 0x00000248 __vector_60 0x00000248 __vector_121 0x00000248 __vector_40 @@ -384,6 +399,7 @@ END GROUP 0x00000248 __vector_94 0x00000248 __vector_126 0x00000248 __vector_8 + 0x00000248 __vector_26 0x00000248 __vector_48 0x00000248 __vector_124 0x00000248 __vector_116 @@ -407,71 +423,56 @@ END GROUP 0x00000248 __vector_120 0x0000024c . = ALIGN (0x2) *(.text.*) - .text.main 0x0000024c 0xcc main.o + .text.main 0x0000024c 0x134 main.o 0x0000024c main - .text.handoff 0x00000318 0x3c main.o - 0x00000318 handoff .text.__vector_25 - 0x00000354 0x6e main.o - 0x00000354 __vector_25 - .text.__vector_26 - 0x000003c2 0x6e main.o - 0x000003c2 __vector_26 + 0x00000380 0x6a main.o + 0x00000380 __vector_25 .text.__vector_28 - 0x00000430 0x6e main.o - 0x00000430 __vector_28 - .text.__vector_29 - 0x0000049e 0x6e main.o - 0x0000049e __vector_29 + 0x000003ea 0x6a main.o + 0x000003ea __vector_28 .text.__vector_88 - 0x0000050c 0x6e main.o - 0x0000050c __vector_88 - .text.__vector_89 - 0x0000057a 0x6e main.o - 0x0000057a __vector_89 - .text.__vector_92 - 0x000005e8 0x6e main.o - 0x000005e8 __vector_92 - .text.rb_new 0x00000656 0x64 ringbuffer.o - 0x00000656 rb_new - .text.rb_write - 0x000006ba 0x30 ringbuffer.o - 0x000006ba rb_write - .text.rb_read 0x000006ea 0x36 ringbuffer.o - 0x000006ea rb_read - .text.rb_hasdata - 0x00000720 0x10 ringbuffer.o - 0x00000720 rb_hasdata - .text.tp_new 0x00000730 0x6e tinyport.o - 0x00000730 tp_new - .text.tp_init 0x0000079e 0x6c tinyport.o - 0x0000079e tp_init - .text.tp_statflash - 0x0000080a 0x12 tinyport.o - 0x0000080a tp_statflash + 0x00000454 0x6a main.o + 0x00000454 __vector_88 + .text.__vector_91 + 0x000004be 0x6a main.o + 0x000004be __vector_91 + .text.rb_reset + 0x00000528 0x16 ringbuffer.o + 0x00000528 rb_reset + .text.rb_init 0x0000053e 0x22 ringbuffer.o + 0x0000053e rb_init + .text.rb_put 0x00000560 0x4a ringbuffer.o + 0x00000560 rb_put + .text.rb_get 0x000005aa 0x4a ringbuffer.o + 0x000005aa rb_get + .text.tp_new 0x000005f4 0x6a tinyport.o + 0x000005f4 tp_new + .text.tp_init 0x0000065e 0x6c tinyport.o + 0x0000065e tp_init .text.tp_rxISR - 0x0000081c 0x52 tinyport.o - 0x0000081c tp_rxISR - .text.tp_read 0x0000086e 0xa tinyport.o - 0x0000086e tp_read - .text.tp_setTxStatus - 0x00000878 0x34 tinyport.o - 0x00000878 tp_setTxStatus - .text.tp_txISR - 0x000008ac 0x40 tinyport.o - 0x000008ac tp_txISR + 0x000006ca 0x3c tinyport.o + 0x000006ca tp_rxISR + .text.tp_read 0x00000706 0x12 tinyport.o + 0x00000706 tp_read .text.tp_write - 0x000008ec 0x1c tinyport.o - 0x000008ec tp_write + 0x00000718 0x10 tinyport.o + 0x00000718 tp_write + .text.tp_statflash + 0x00000728 0x12 tinyport.o + 0x00000728 tp_statflash + .text.libgcc.div + 0x0000073a 0x28 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_udivmodhi4.o) + 0x0000073a __udivmodhi4 .text.avr-libc - 0x00000908 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) - 0x00000908 malloc - 0x00000a38 free - 0x00000b4a . = ALIGN (0x2) + 0x00000762 0x242 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) + 0x00000762 malloc + 0x00000892 free + 0x000009a4 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000b4a 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) - 0x00000b4a _exit - 0x00000b4a exit + .fini9 0x000009a4 0x0 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) + 0x000009a4 _exit + 0x000009a4 exit *(.fini9) *(.fini8) *(.fini8) @@ -490,11 +491,11 @@ END GROUP *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000b4a 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) + .fini0 0x000009a4 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/avrxmega7\libgcc.a(_exit.o) *(.fini0) - 0x00000b4e _etext = . + 0x000009a8 _etext = . -.data 0x00802000 0x6 load address 0x00000b4e +.data 0x00802000 0x6 load address 0x000009a8 0x00802000 PROVIDE (__data_start, .) *(.data) .data 0x00802000 0x6 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) @@ -509,29 +510,29 @@ END GROUP 0x00802006 _edata = . 0x00802006 PROVIDE (__data_end, .) -.bss 0x00802006 0xc +.bss 0x00802006 0x70 0x00802006 PROVIDE (__bss_start, .) *(.bss) *(.bss*) *(COMMON) - COMMON 0x00802006 0x8 main.o + COMMON 0x00802006 0x6c main.o 0x00802006 tp2 - 0x00802008 tp1 - 0x0080200a tp4 - 0x0080200c tp3 - COMMON 0x0080200e 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) - 0x0080200e __brkval - 0x00802010 __flp - 0x00802012 PROVIDE (__bss_end, .) - 0x00000b4e __data_load_start = LOADADDR (.data) - 0x00000b54 __data_load_end = (__data_load_start + SIZEOF (.data)) - -.noinit 0x00802012 0x0 + 0x00802021 tp1 + 0x0080203c tp4 + 0x00802057 tp3 + COMMON 0x00802072 0x4 c:/program files (x86)/atmel/studio/7.0/toolchain/avr8/avr8-gnu-toolchain/bin/../lib/gcc/avr/5.4.0/../../../../avr/lib/avrxmega7\libc.a(malloc.o) + 0x00802072 __brkval + 0x00802074 __flp + 0x00802076 PROVIDE (__bss_end, .) + 0x000009a8 __data_load_start = LOADADDR (.data) + 0x000009ae __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x00802076 0x0 [!provide] PROVIDE (__noinit_start, .) *(.noinit*) [!provide] PROVIDE (__noinit_end, .) - 0x00802012 _end = . - 0x00802012 PROVIDE (__heap_start, .) + 0x00802076 _end = . + 0x00802076 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -598,60 +599,60 @@ END GROUP .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x138 +.debug_aranges 0x00000000 0x100 *(.debug_aranges) .debug_aranges - 0x00000000 0x80 main.o + 0x00000000 0x58 main.o .debug_aranges - 0x00000080 0x40 ringbuffer.o + 0x00000058 0x48 ringbuffer.o .debug_aranges - 0x000000c0 0x78 tinyport.o + 0x000000a0 0x60 tinyport.o .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x4072 +.debug_info 0x00000000 0x3c5f *(.debug_info .gnu.linkonce.wi.*) .debug_info 0x00000000 0x284f C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o - .debug_info 0x0000284f 0xc39 main.o - .debug_info 0x00003488 0x281 ringbuffer.o - .debug_info 0x00003709 0x969 tinyport.o + .debug_info 0x0000284f 0x9fa main.o + .debug_info 0x00003249 0x25d ringbuffer.o + .debug_info 0x000034a6 0x7b9 tinyport.o -.debug_abbrev 0x00000000 0x2c94 +.debug_abbrev 0x00000000 0x2add *(.debug_abbrev) .debug_abbrev 0x00000000 0x262c C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o - .debug_abbrev 0x0000262c 0x246 main.o - .debug_abbrev 0x00002872 0x1a9 ringbuffer.o - .debug_abbrev 0x00002a1b 0x279 tinyport.o + .debug_abbrev 0x0000262c 0x1a3 main.o + .debug_abbrev 0x000027cf 0x136 ringbuffer.o + .debug_abbrev 0x00002905 0x1d8 tinyport.o -.debug_line 0x00000000 0xc49 +.debug_line 0x00000000 0xbd5 *(.debug_line .debug_line.* .debug_line_end) .debug_line 0x00000000 0x3b5 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o - .debug_line 0x000003b5 0x3af main.o - .debug_line 0x00000764 0x18b ringbuffer.o - .debug_line 0x000008ef 0x35a tinyport.o + .debug_line 0x000003b5 0x2b9 main.o + .debug_line 0x0000066e 0x23f ringbuffer.o + .debug_line 0x000008ad 0x328 tinyport.o -.debug_frame 0x00000000 0x4b8 +.debug_frame 0x00000000 0x32c *(.debug_frame) - .debug_frame 0x00000000 0x2f8 main.o - .debug_frame 0x000002f8 0x90 ringbuffer.o - .debug_frame 0x00000388 0x130 tinyport.o + .debug_frame 0x00000000 0x1c4 main.o + .debug_frame 0x000001c4 0xa0 ringbuffer.o + .debug_frame 0x00000264 0xc8 tinyport.o -.debug_str 0x00000000 0x23a2 +.debug_str 0x00000000 0x22f6 *(.debug_str) .debug_str 0x00000000 0x1aa8 C:/Program Files (x86)/Atmel/Studio/7.0/Packs/atmel/XMEGAA_DFP/1.1.68/gcc/dev/atxmega128a4u/avrxmega7/crtatxmega128a4u.o - .debug_str 0x00001aa8 0x5c9 main.o - 0x623 (size before relaxing) - .debug_str 0x00002071 0x5f ringbuffer.o - 0x218 (size before relaxing) - .debug_str 0x000020d0 0x2d2 tinyport.o - 0x680 (size before relaxing) - -.debug_loc 0x00000000 0xd9c + .debug_str 0x00001aa8 0x551 main.o + 0x5ab (size before relaxing) + .debug_str 0x00001ff9 0x49 ringbuffer.o + 0x207 (size before relaxing) + .debug_str 0x00002042 0x2b4 tinyport.o + 0x645 (size before relaxing) + +.debug_loc 0x00000000 0x92b *(.debug_loc) - .debug_loc 0x00000000 0x6ce main.o - .debug_loc 0x000006ce 0x1cd ringbuffer.o - .debug_loc 0x0000089b 0x501 tinyport.o + .debug_loc 0x00000000 0x373 main.o + .debug_loc 0x00000373 0x29b ringbuffer.o + .debug_loc 0x0000060e 0x31d tinyport.o .debug_macinfo *(.debug_macinfo) @@ -671,11 +672,11 @@ END GROUP .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x108 +.debug_ranges 0x00000000 0xd0 *(.debug_ranges) - .debug_ranges 0x00000000 0x70 main.o - .debug_ranges 0x00000070 0x30 ringbuffer.o - .debug_ranges 0x000000a0 0x68 tinyport.o + .debug_ranges 0x00000000 0x48 main.o + .debug_ranges 0x00000048 0x38 ringbuffer.o + .debug_ranges 0x00000080 0x50 tinyport.o .debug_macro *(.debug_macro) diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec index 4dfc915..1f16bf2 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/atxmega-a4u-wakeup.srec @@ -5,8 +5,8 @@ S11300200C9424010C9424010C9424010C942401B8 S11300300C9424010C9424010C9424010C942401A8 S11300400C9424010C9424010C9424010C94240198 S11300500C9424010C9424010C9424010C94240188 -S11300600C9424010C94AA010C94E1010C94240135 -S11300700C9418020C944F020C9424010C94240147 +S11300600C9424010C94C0010C9424010C942401DC +S11300700C94F5010C9424010C9424010C94240197 S11300800C9424010C9424010C9424010C94240158 S11300900C9424010C9424010C9424010C94240148 S11300A00C9424010C9424010C9424010C94240138 @@ -21,8 +21,8 @@ S11301200C9424010C9424010C9424010C942401B7 S11301300C9424010C9424010C9424010C942401A7 S11301400C9424010C9424010C9424010C94240197 S11301500C9424010C9424010C9424010C94240187 -S11301600C9486020C94BD020C9424010C9424017A -S11301700C94F4020C9424010C9424010C94240196 +S11301600C942A020C9424010C9424010C945F0234 +S11301700C9424010C9424010C9424010C94240167 S11301800C9424010C9424010C9424010C94240157 S11301900C9424010C9424010C9424010C94240147 S11301A00C9424010C9424010C9424010C94240137 @@ -32,153 +32,127 @@ S11301D00C9424010C9424010C9424010C94240107 S11301E00C9424010C9424010C9424010C942401F7 S11301F00C9424010C9424010C94240111241FBE9A S1130200CFEFCDBFDFE3DEBF00E00CBF18BE19BEE9 -S11302101ABE1BBE10E2A0E0B0E2EEE4FBE000E098 +S11302101ABE1BBE10E2A0E0B0E2E8EAF9E000E09A S11302200BBF02C007900D92A630B107D9F71BBED1 -S113023020E2A6E0B0E201C01D92A231B207E1F7CC -S11302400E9426010C94A5050C940000E0E5F0E062 -S113025088E1858380E18083818184FFFDCF88EDFF -S113026084BF84E08093400000E128E044E060E43F -S113027076E080EA98E00E949803809308209093A7 -S113028009200E94CF0300E220E840E460E476E025 -S113029080EB98E00E9498038093062090930720B7 -S11302A00E94CF0300E128E044E060E676E080EAC3 -S11302B099E00E94980380930C2090930D200E9453 -S11302C0CF0300E220E840E460E676E080EB99E0CA -S11302D00E94980380930A2090930B200E94CF03DE -S11302E0E0EAF0E08281876082837894809108203C -S11302F0909109200E94050480910C2090910D207A -S11303000E9405042FE78AE196E021508040904046 -S1130310E1F700C00000EACFCF93DF931F92CDB77F -S1130320DEB7BE016F5F7F4F0E9437046981809101 -S11303300A2090910B200E9476042FE78AE196E030 -S1130340215080409040E1F700C000000F90DF9101 -S1130350CF9108951F920F920FB60F92112408B6F1 -S11303600F9218BE09B60F9219BE0BB60F921BBEA0 -S11303702F933F934F935F936F937F938F939F93A9 -S1130380AF93BF93EF93FF9380910820909109203E -S11303900E940E04FF91EF91BF91AF919F918F91B5 -S11303A07F916F915F914F913F912F910F900BBE71 -S11303B00F9009BE0F9008BE0F900FBE0F901F90B4 -S11303C018951F920F920FB60F92112408B60F9230 -S11303D018BE09B60F9219BE0BB60F921BBE2F930F -S11303E03F934F935F936F937F938F939F93AF93B9 -S11303F0BF93EF93FF9380910820909109200E946E -S11304005604FF91EF91BF91AF919F918F917F918E -S11304106F915F914F913F912F910F900BBE0F9071 -S113042009BE0F9008BE0F900FBE0F901F90189535 -S11304301F920F920FB60F92112408B60F9218BE96 -S113044009B60F9219BE0BB60F921BBE2F933F93A2 -S11304504F935F936F937F938F939F93AF93BF93C8 -S1130460EF93FF9380910620909107200E940E0441 -S1130470FF91EF91BF91AF919F918F917F916F9178 -S11304805F914F913F912F910F900BBE0F9009BE3A -S11304900F9008BE0F900FBE0F901F9018951F92DB -S11304A00F920FB60F92112408B60F9218BE09B618 -S11304B00F9219BE0BB60F921BBE2F933F934F930F -S11304C05F936F937F938F939F93AF93BF93EF93B8 -S11304D0FF9380910620909107200E945604FF917B -S11304E0EF91BF91AF919F918F917F916F915F91A8 -S11304F04F913F912F910F900BBE0F9009BE0F901B -S113050008BE0F900FBE0F901F9018951F920F9268 -S11305100FB60F92112408B60F9218BE09B60F92A7 -S113052019BE0BB60F921BBE2F933F934F935F934D -S11305306F937F938F939F93AF93BF93EF93FF93A7 -S113054080910C2090910D200E940E04FF91EF9158 -S1130550BF91AF919F918F917F916F915F914F91D7 -S11305603F912F910F900BBE0F9009BE0F9008BEC4 -S11305700F900FBE0F901F9018951F920F920FB6F9 -S11305800F92112408B60F9218BE09B60F9219BE25 -S11305900BB60F921BBE2F933F934F935F936F93B2 -S11305A07F938F939F93AF93BF93EF93FF93809128 -S11305B00C2090910D200E945604FF91EF91BF9161 -S11305C0AF919F918F917F916F915F914F913F91E7 -S11305D02F910F900BBE0F9009BE0F9008BE0F9085 -S11305E00FBE0F901F9018951F920F920FB60F9287 -S11305F0112408B60F9218BE09B60F9219BE0BB695 -S11306000F921BBE2F933F934F935F936F937F93F0 -S11306108F939F93AF93BF93EF93FF9380910A209F -S113062090910B200E945604FF91EF91BF91AF91DE -S11306309F918F917F916F915F914F913F912F91F6 -S11306400F900BBE0F9009BE0F9008BE0F900FBE07 -S11306500F901F901895CF92DF92EF92FF92CF9355 -S1130660DF936B017C0188E090E00E948404EC013C -S1130670892BD1F0D701C6010196A11DB11D8C8330 -S11306809D83AE83BF830E94840488839983892BCE -S113069029F01A821B828C2F9D2F08C0CE010E9444 -S11306A01C0580E090E002C080E090E0DF91CF91F3 -S11306B0FF90EF90DF90CF900895FC018281A0819C -S11306C0B181A80FB11D6C9342814F5F428350E00A -S11306D060E070E084819581A681B781481759074D -S11306E06A077B0708F0128208950F931F93FC0199 -S11306F04381A081B181A40FB11D8C914F5F4383CD -S113070050E060E070E00481158126813781401754 -S113071051076207730708F013821F910F91089520 -S1130720FC0181E023819281291301C080E00895B6 -S1130730AF92BF92CF92DF92FF920F931F93CF930A -S1130740DF935C016B01F42E122F8EE090E00E9487 -S11307508404EC01A882B982CA82DB82FC821D83F4 -S11307600E8360E170E080E090E00E942B038F83B1 -S1130770988760E170E080E090E00E942B03898715 -S11307809A871B861C861D86CE01DF91CF911F910F -S11307900F91FF90DF90CF90BF90AF900895FC0130 -S11307A0A081B1818BE916968C93A081B1811796B3 -S11307B01C92A081B18113968C911397806113963A -S11307C08C93A081B18188E114968C93A081B1812E -S11307D083E015968C93A281B381858115968C93C1 -S11307E0A281B381858111968C93A281B381848186 -S11307F012968C93A281B381848116968C93A281E4 -S1130800B381868111968C930895DC011296ED9143 -S1130810FC91139716968C9187830895CF93DF9359 -S1130820EC01EA81FB818E818783E881F9819081E3 -S11308308D85882319F0813031F011C09E3779F409 -S113084081E08D870CC09E3729F41D86CE010E945D -S11308508C0105C060818F8198850E945D038C8521 -S1130860813011F081E08C87DF91CF91089581E58B -S1130870FB01808380E00895FC0183858617A9F03D -S1130880662351F0A081B18113968C9113978160F6 -S113089013968C9363870895A081B18113968C91EC -S11308A013978C7F13968C93138608950F931F933D -S11308B0CF93DF93EC01EA81FB818E8187830881EA -S11308C0198189859A850E947503F8018083898539 -S11308D09A850E949003811104C060E0CE010E94B9 -S11308E03C04DF91CF911F910F910895CF93DF9333 -S11308F0EC0189859A850E945D0361E0CE010E9426 -S11309003C04DF91CF9108950F931F93CF93DF930E -S11309108230910510F482E090E0E0911020F09193 -S1130920112020E030E0A0E0B0E0309719F14081E0 -S113093051810281138148175907C8F0841795071C -S113094069F4109731F012960C93129713961C9336 -S113095027C0009310201093112022C021153105C7 -S113096019F04217530718F49A01BD01EF01DF0192 -S1130970F801DBCF21153105F9F0281B390B2430A0 -S1130980310580F48A819B816115710521F0FB0199 -S11309908283938304C08093102090931120FE01DE -S11309A0329644C0FE01E20FF31F819391932250CB -S11309B03109288339833AC020910E2030910F20C9 -S11309C0232B41F4209102203091032020930E2008 -S11309D030930F2020910020309101202115310502 -S11309E041F42DB73EB74091042050910520241BBB -S11309F0350BE0910E20F0910F20E217F307A0F4DD -S1130A002E1B3F0B2817390778F0AC014E5F5F4F60 -S1130A102417350748F04E0F5F1F40930E20509364 -S1130A200F208193919302C0E0E0F0E0CF01DF91C9 -S1130A30CF911F910F910895CF93DF93009709F4FD -S1130A4081C0FC01329712821382A0911020B091D0 -S1130A501120109781F420813181820F931F2091FE -S1130A600E2030910F202817390751F5E0930E20FE -S1130A70F0930F2067C0ED0120E030E0CE17DF07D0 -S1130A8040F44A815B819E0141155105F1F0EA0170 -S1130A90F5CFC283D38340815181840F951FC8173A -S1130AA0D90759F488819981840F951F0296808310 -S1130AB091838A819B81828393832115310529F453 -S1130AC0E0931020F09311203DC0E901EA83FB83F9 -S1130AD049915991C40FD51FEC17FD0761F480812A -S1130AE09181840F951F0296E901888399838281FD -S1130AF093818A839B83E0E0F0E012968D919C9130 -S1130B001397009719F0FD01DC01F7CF8D919C91AB -S1130B1011979D012E5F3F4F820F931F20910E204E -S1130B2030910F202817390769F4309729F410926F -S1130B3010201092112002C012821382A0930E2062 -S1110B40B0930F20DF91CF910895F894FFCF6A -S1090B4E0000122020004B +S113023020E2A6E0B0E201C01D92A637B207E1F7C2 +S11302400E9426010C94D2040C940000CF93DF93F7 +S1130250CDB7DEB76C97CDBFDEBFE0E5F0E088E157 +S1130260858380E18083818184FFFDCF88ED84BF15 +S113027084E0809340006894EE24E4F808E024E0ED +S113028040E456E060EA78E0CE0102960E94FA0269 +S11302908BE1FE013296A1E2B0E201900D928A95C3 +S11302A0E1F781E290E20E942F036894EE24E5F8DE +S11302B000E820E440E456E060EB78E0CE010296EA +S11302C00E94FA028BE1FE013296A6E0B0E20190B0 +S11302D00D928A95E1F786E090E20E942F036894DC +S11302E0EE24E4F808E024E040E656E060EA79E031 +S11302F0CE0102960E94FA028BE1FE013296A7E536 +S1130300B0E201900D928A95E1F787E590E20E94B0 +S11303102F036894EE24E5F800E820E440E656E074 +S113032060EB79E0CE0102960E94FA028BE1FE01B5 +S11303303296ACE3B0E201900D928A95E1F78CE33A +S113034090E20E942F03E0EAF0E0828187608283DA +S1130350789481E290E20E949403BE016F5F7F4F24 +S113036086E090E20E948303882399F387E590E274 +S11303700E94940369818CE390E20E948C03E9CF8C +S11303801F920F920FB60F92112408B60F9218BE47 +S113039009B60F9219BE0BB60F921BBE2F933F9353 +S11303A04F935F936F937F938F939F93AF93BF9379 +S11303B0EF93FF9381E290E20E946503FF91EF9136 +S11303C0BF91AF919F918F917F916F915F914F9169 +S11303D03F912F910F900BBE0F9009BE0F9008BE56 +S11303E00F900FBE0F901F9018951F920F920FB68B +S11303F00F92112408B60F9218BE09B60F9219BEB7 +S11304000BB60F921BBE2F933F934F935F936F9343 +S11304107F938F939F93AF93BF93EF93FF9386E064 +S113042090E20E946503FF91EF91BF91AF919F917C +S11304308F917F916F915F914F913F912F910F9089 +S11304400BBE0F9009BE0F9008BE0F900FBE0F9009 +S11304501F9018951F920F920FB60F92112408B691 +S11304600F9218BE09B60F9219BE0BB60F921BBE9F +S11304702F933F934F935F936F937F938F939F93A8 +S1130480AF93BF93EF93FF9387E590E20E946503D8 +S1130490FF91EF91BF91AF919F918F917F916F9158 +S11304A05F914F913F912F910F900BBE0F9009BE1A +S11304B00F9008BE0F900FBE0F901F9018951F92BB +S11304C00F920FB60F92112408B60F9218BE09B6F8 +S11304D00F9219BE0BB60F921BBE2F933F934F93EF +S11304E05F936F937F938F939F93AF93BF93EF9398 +S11304F0FF938CE390E20E946503FF91EF91BF911B +S1130500AF919F918F917F916F915F914F913F91A7 +S11305102F910F900BBE0F9009BE0F9008BE0F9045 +S11305200FBE0F901F901895009739F0FC011282AE +S113053013821482158281E0089580E00895CF9398 +S1130540DF93EC01CB016E837F830E94B103888328 +S11305509983CE010E94940281E0DF91CF910895A6 +S1130560FC01892BF1F0A081B18182819381A80FD4 +S1130570B91F6C9326813781828193810196B901D9 +S11305800E949D0382839383448155818417950738 +S113059051F40196B9010E949D038483958381E0FF +S11305A0089580E0089581E00895FC01892BE1F02D +S11305B061157105D9F022813381848195812817D1 +S11305C03907B1F0A081B181A80FB91F8C91DB016B +S11305D08C93848195810196668177810E949D0325 +S11305E08483958381E0089580E0089580E00895F0 +S11305F080E00895CF92DF92EF920F93CF93DF9331 +S1130600CDB7DEB76B97CDBFDEBF6C0169837A834C +S11306104B835C832D830E83EF82188619861A869A +S113062060E870E0CE010C960E949F0260E870E0E2 +S1130630CE0144960E949F028BE1FE013196D601C1 +S113064001900D928A95E1F7C6016B96CDBFDEBF8E +S1130650DF91CF910F91EF90DF90CF900895FC013F +S1130660A081B1818BE916968C93A081B1811796F4 +S11306701C92A081B18113968C911397806113967B +S11306808C93A081B18188E114968C93A081B1816F +S113069083E015968C93A281B381858115968C9302 +S11306A0A281B381858111968C93A281B3818481C7 +S11306B012968C93A281B381848116968C93A28125 +S11306C0B381868111968C930895FC01A281B38134 +S11306D0868117968C93A081B1816C916287818504 +S11306E0882319F0813031F008956E3759F481E090 +S11306F0818708956E3711F411860895CF010B9602 +S11307000E94B00208950B960E94D50291E08111D7 +S113071001C090E0892F0895DC01ED91FC91818165 +S113072085FFFDCF60830895DC011296ED91FC9165 +S1130730139716968C9187830895AA1BBB1B51E1CE +S113074007C0AA1FBB1FA617B70710F0A61BB70B3D +S1130750881F991F5A95A9F780959095BC01CD01E2 +S113076008950F931F93CF93DF938230910510F474 +S113077082E090E0E0917420F091752020E030E078 +S1130780A0E0B0E0309719F14081518102811381DA +S113079048175907C8F08417950769F4109731F082 +S11307A012960C93129713961C9327C000937420EF +S11307B01093752022C02115310519F042175307F3 +S11307C018F49A01BD01EF01DF01F801DBCF211517 +S11307D03105F9F0281B390B2430310580F48A8166 +S11307E09B816115710521F0FB018283938304C011 +S11307F08093742090937520FE01329644C0FE01CC +S1130800E20FF31F81939193225031092883398396 +S11308103AC02091722030917320232B41F420910F +S11308200220309103202093722030937320209172 +S11308300020309101202115310541F42DB73EB738 +S11308404091042050910520241B350BE091722027 +S1130850F0917320E217F307A0F42E1B3F0B281727 +S1130860390778F0AC014E5F5F4F2417350748F025 +S11308704E0F5F1F40937220509373208193919386 +S113088002C0E0E0F0E0CF01DF91CF911F910F9122 +S11308900895CF93DF93009709F481C0FC01329748 +S11308A012821382A0917420B0917520109781F464 +S11308B020813181820F931F209172203091732007 +S11308C02817390751F5E0937220F093732067C01D +S11308D0ED0120E030E0CE17DF0740F44A815B8170 +S11308E09E0141155105F1F0EA01F5CFC283D3838E +S11308F040815181840F951FC817D90759F4888105 +S11309009981840F951F0296808391838A819B81AC +S1130910828393832115310529F4E0937420F093A5 +S113092075203DC0E901EA83FB8349915991C40FC5 +S1130930D51FEC17FD0761F480819181840F951F09 +S11309400296E90188839983828193818A839B83B8 +S1130950E0E0F0E012968D919C911397009719F0C6 +S1130960FD01DC01F7CF8D919C9111979D012E5FC4 +S11309703F4F820F931F20917220309173202817CC +S1130980390769F4309729F4109274201092752075 +S113099002C012821382A0937220B0937320DF915D +S10B09A0CF910895F894FFCFF4 +S10909A80000762020008F S9030000FC diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d index ba0cd99..ae35a70 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.d @@ -15,7 +15,11 @@ main.d main.o: .././main.c \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h \ - .././ringbuffer.h .././tinyport.h + .././ringbuffer.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \ + .././tinyport.h c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\io.h: @@ -51,4 +55,10 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\ .././ringbuffer.h: +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h: + .././tinyport.h: diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/main.o index 2dec92831b79c6032e0501569bfcf8b3b89a25e7..e52ec26ba24cba5fed2866b0c3f0bc8bb3a3722c 100644 GIT binary patch literal 16264 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 literal 22792 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 T7i9B1bQl<tL7G8^AcY?Qh=-%z diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d index f0efec6..e0511b2 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.d @@ -12,7 +12,8 @@ ringbuffer.d ringbuffer.o: .././ringbuffer.c .././ringbuffer.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ - c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h .././ringbuffer.h: @@ -43,3 +44,5 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h: diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/ringbuffer.o index 3a03d39dbcc451a5647012b7257d7ecdd828c2a4..d87984964eb41246709489308b70dcceb61f3fab 100644 GIT binary patch literal 8700 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 literal 7628 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 diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d index 35d6ca6..8103a16 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.d @@ -11,6 +11,9 @@ tinyport.d tinyport.o: .././tinyport.c .././tinyport.h .././ringbuffer.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\xmega.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\fuse.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h \ + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h \ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\math.h @@ -43,6 +46,12 @@ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\ c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\avr\lock.h: +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\stdlib.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stddef.h: + +c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\lib\gcc\avr\5.4.0\include\stdbool.h: + c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay.h: c:\program\ files\ (x86)\atmel\studio\7.0\toolchain\avr8\avr8-gnu-toolchain\avr\include\util\delay_basic.h: diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/Debug/tinyport.o index 6f62e848cd04b7d3cf3ec7ae0400c17907c0633c..74ba40bff7328fc3e6bdf7c76a3dd359514a9027 100644 GIT binary patch literal 14000 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 U3d+mK<`u|5!WpCogkk0Z05Oi*Q2+n{ literal 17772 zcmb<-^>JflWMqH=MuuPp1doA1$DV=VH3I{K30Q#!g9d{t!}>}4C!L>kf71U+{FCJ; zpPzhxatvcO;}<<4{k{hi9`H?JV0gp0qG@N-sixaaf0|^Q`I-|R7CdNx%JnzTXh-IE zw$EypZj)(~Z9B(!f8zOx@)P+d{-1Dv!ubjNC#;{qG4&7Qg2s)F-7m$a^-Kn_#HYzj z0@1?LdL{}_Z%7n|ig!E|fwGz(h)(O7yr^+=V{0RVB?uL3X%vF9KxTr}wKaldIi}uW z6q@#S;-87a)5WIsOl)sP7iq;1X~Pf^o8H<CGDC3s#Kx)r84mQnZ-DZ<9yBx~n-9_p z3cWXsuNr?h_BFOQzi9l~IH9q(wL_WlL!$xX2ZjUl%o)ElKIm<Sus~r13SWi;361@Y zGg?9Ho>q{`#s@v^pwQ!(+W7Q0V?%Sp15n7Rw5kcGw1Zg9t!?6rAJUW=KOn-cF#!~I z$?Y6d5n?^{ATi-Kj;XM?MYxWmQL?eKbr#sxAB+vnFm|IL!-0ec=NLh*0l5JbgB(*K zK7*-AM3U#2n##$*zywZFEa1e(17>3(m>AhWqRb$Ism_{#fq{vU1H@rrV$IAeVPIln z2l1F#SV0s-SyK{784E;$11!PB0p@|_nM0Zw7#LU$7#JA9W=k;hvHf9WU|@Ig3}Rpw zU@HgdR%QU(!Yl~oLM&w#f^wN4vcga<GrNCi2m`YSl*<B<6@_wHAzU#imkq)dhjQ83 zJ^dJ%C7?VGh@>Qx%L(C1LAhKIt~8X(4dKc_xjYcAER@R&;mSd|d=RcYl*<p{DnPjc z5UwJWD+u8#LAgQ@t}>J>4B@Ikxgrp*DwHb<;i^HoVi2x6lq=4_363cZwsu$qa4>Um z^)WF(L!5^TB?5S%TxbOFLAlTf;D>UVA(jY0xzGp@gmR$~AOz(?BS09+Wrw;*go}fT zfq@I;Iz~`JV;1K+#l*nC4HAHmj9@ksm}CZ%?8xdBxxS#PcL1wt0FwuhRcdj`G2=EF zS*0<T6RJuDuxSR!YOJ|(P}K;4)nHNS!Zi(5B@0+32bko6WhQWD<Y3`>#LU3Jn^c;{ zz`_e+GAT3gfx?1?50rJ7l$jtreh7~l!V?Gw=N=XYekPDOIK#0Be`aQ2;Afi4%)kIP zn~zmy5(@*wG*(#<6J|E6+zb{52AJ8b@*p#qlv%)LvnoJ%tPq|egvSQqDZO9@>0^iR zlp#D$2u}r~k{iNPh46SFJT(Z9mw}%Nlmz*iKqUd#)vTH;SwOD-$;`kY04}5$xf$oN zfI<L)8T(lo7z9ClMsAQlKrAR1<Pjt;$R5I6p^^dyMjn_g!eDFJ7{InL+OaY)h<Jj` z5CsuZoD2+MtPBidY#EaoGbb}L+A)B|)j1g$N<iW~X_Fb#Co@829T>zxx<ImG=rRlv zOp;)$7-hi}NFnni1!l%wtPBiNAScPfoWvjvR>5e=$atBRfk6f&X$h8;1t|vU1Yxl5 z&#Vj#awov$F9QQiqb(yN4;xgYEkq+o9Y_-hgEi`~F)+wM3Vwt}M@B|hm_|p4Mvyv? zCJ+W|Oa*DQ0+;Fx3=B{|xq@8`S9637>L*vQAq)%*^2iQgbXx^71a7+mvL%dOa&XgO z9;#tvd;xP;4ai7EkX4K|;0RX&+s)_;ra<B#%(#dh>I7eqdXSJZh+qr=>jAk4IV>6d zY}k<lQU#<Igp1f27*xR~GsZhHFfcI2urn~ILE_nj6Ol5QdO${k{0-6t!i-rnKt|qy zhLqeTD1$*AB<lz&p*0`|=P|<E1d;&<@<W*G^I)#m1j#YxfeHyWNTOqqMYayC4OCfa zfh>ZiS1pk3jA^h~ngX^DWDr=jBL_5yrl49f1>_vYGzMtEw!?LSbTV#+>1v1Rl1B;2 zjy4YDkOceIkCOr7?PyL0NZ5f~3d>bYJq%)uX`n!W+Sre3BPbVwb4WkTMo9MW2e}jE zCUBkvh3J0{29QzApBd9|T4Tt-pp9sYvmtX>#E@hd<B>QlvdA0-WR4O8qadRypD;Hw zpEO@6n;>HlqW~KN1Ct5^H@6)(sK{m(V_@d9;<o1Y6lP#xfr@i5FtD03fJE4Y8JYRG zxvjXZSs8^H7}$9km^nZkPhkr#1_lmZh-Ov@mlJ9hD@Z373s|S8Fi1H_FSiB*GoK7M z0|O7-Om2`kFVswKh#`DXGof65eg<x^+XVC&?Rg+hRp;>(7GxA+bYPqA!~-%ykQL$% zZckw*HU<VE6NoFJTwzq5Hef9xtYH6%b~Z6G3NjiBgNzaDYGPzy;+p8h#lRpAlVD(w z06BqyK@!;*u=QL}>!nyx?2|@Tr~vk(3_=A1gRCB-A;kSK1LRm448bm!mxW42a7ThQ zDj*9mFeoBC%D|w6Y!BE$u<%eeK?x5PZbpza$cw57J)XjlkWiCgU|>-1Y+_^pg#!bF z20{rupkWTxMA*;7#lWBib~hITgSH-nJ&z4fy8|C2hCm4)ikTTEDS+!!5Ff;W*PtK{ zta4xgabSfIm;-LF!}Ne#cQ6j9bON!#%D~Mv5D#PkxETZEfLj_M4h*v~K&nCnKWZ{# z^kjH`W?}fum@ywF3!~W>pd}hqfQ=z$GGi>Nt~3l?j0`DI^$d&*@h~RHh7>GnLH!l5 z8b*dhFwMZg08*QTMQsAIf&>f&n4Zj;%$SRCF1kF-G<0z`hP=s)`3QZu)n!d)%pQvB zu)7<SjEG3CxPt>VxIwXqnWh*SGGPWFF=0ZOQGseEOdS)0A(rUJt`^-)?CwHWg)0#d z8Au>y*z+{Z3z!z7I-gi)qUwT~4ziyPahV3Q59C@zQBVTv2!W;GB_2Z_n9snF1Eqy< z&^A!<ASewh<zO^qFph!20V*#8rRhn9fjV3aLX4mhncsX|42+ObL`FS5eLaR`tC)hK z{Pd#4T!pmEoYZ0kjS34h&6vcJ+|-<y;*!#o%={R0J%gB%{QR8cjKs{mn8dOo3oxOZ zo>!`iA|8{Omz-0YlFHz06%zn8)eXs1N3f~E2vY+Rle3GVmPPowx;r|?ySN3!80s17 znOVS0(@!ibVqhrA%&RQOFDlVX290_am!xFomFQ)F#-=j!D-4Y+5=~0=G8mW{7>Y9U z(vwQl(o&1`GC)e<8o@l9q|(fs65Y%^J4h6;f(N&lxfq!lIi(mFnVC4b7(i?mB$5ft zMkWQoA`lWG&dkZgz{n}az`)4J05w;Jk(mV~%FGBhmxYsqfsvV+6Qq+FDgv<&M8fQb zvpIQ?&9VTwi-CcWQwUkq2CL`+umdp^A7Nl*t^~V>6XXU4CKg6EW(H0+21Yh!Mi9l! z$O-a!CCF`@0?789VPIs=1uGE)dx8nfX6EDp+XT|Y4i<qJzzDX439M2EWEe9GST-AE zJSQ8n!EeE#&cMLP%mq@y$$~8T8*DmA609Fpaxx>x@1XF9I0j}lD0G=X7BMq|e2J>5 zjggUgb3NEe=NZ8611n-?1p5T+Vook(C-i}BVFNn^6nl&yO%N~mhlV)&1TpxBh6KBY zFoXs>28G1C1i5<ph4_T|#QXTirzbN6c>0++hXnaBloZ65q!yPzl?C|vyST=?hPnEI z6lEmlrR1ljLFEueczA+jiz<ps5=&AUJpDopeI0|n844i$08c-2u+b2kojrm*qg><7 zojgN8x^fe9a`KZIiZiQHODYReG0gUNa|0<WN-a(;Doag?H>fZ$Vkm)Hm6BMJ$WWSC z1aodsgfoh-AU1}ei6Wcj!hp<kgIezl_I7GsX)Z%XYGMjh6k$5V!=;&dB^L1|3@)BQ zA?`j51(|sv5%Ed6@G>C21QeRZsU<-b!6k_$rNvNl5bgon05ZndD87WDD5<Cdss!Qy z-{1gn$T~TOx`0B^kpaeX0!5e!NQ|L0uQ)S3FEvF0G<*#bac0QL&r4ST6Cg22AV5s? z403S<1!r)GV@PN)14y|em~?_!42c~xXzW1rA{-2j4gb&(kdKR!;xiJ9!I4mqnFlfx z?EQlHq6*L8AO=YE2f6w>1~9ldhB$&lqa?8;Ehn)!gTcir#-%8~ASu5>K_eiws5n0_ zF-J4T*~t-9(r2Y6mlVf<%EY|XlH!=u+@#c$l+=`%#FC2K)bvE%M3Yk8^2F@a(gJKk zE~!bS=?o=_nK=yZexVA^mX->pdM0`X3c9&@x?tOFjX~^u-Qw)b0^Ow2bOqhqqTF%? z-Q3*dQrpC`BCsvy3cBe=3cCJ=3cAH5DYof(rIwZox@oWg*G<kyEJEfdWtOC6rskv+ zE9j=BmF6XvWaj7T7N>$~kQgYSkog6P$=SNaB}JvlB?`J}#TofUCAy##QH+RFkQJyg zV+oBJP_?KJ3Lt201Bod}e)V^80Yx%2U4YF1rv@+qb3Qn|Ky)GE*Vh%S6Cw;rGQp94 z&K^Pje*U4sAVVQih^zo|FenFrN*IV7qFeyW1^5SrKyyM#Vo63ODCHV~5*|3ugVID^ zYB`810_C)lg81^H%#u`wqNI4RfTv%Gn~$S=Fi4vzSX)U!JSb)5<U<1n;TCA>gg66M zCLlZq$+e*H0+mq);4-QxDIRKlW?p6qB<ElWA%vfxAq4gnB<?^iGX%Q~VlgDx9MQt9 zD5(UVxgmMX6dIESnR!9ras#3r5``|F!H!Nokl1kX3_=v#2;V|oQj`P>vDEa;;*!)N zP?6;67Xo%sfTy1^j9~y~fYSh?Sb%x~*=lgCK?I;>HCO}`?5QOou%Zmnet|@82{_B6 zXtRKNkip&A*-AmfF)S$FB0edzB;MUGG(H5@Qj0g%Gt)DOH#9dk(S&4E1_1^JhX4Qn z|7T=is#oDrU|zz+zyNE)g4#o%X0Ib3OBb^vA8R*@BOhB2t0NzKFPkGDM?bqGALj%P zM?S8JoQ{0lbGRJ&c;<ro@yOkGP;(iX4{A1(!UwqpG|B;T3kZXn)sB2Db3pEy%L1L0 z07)=F=6{gQ1~s{n`Jkq^0#q%C0yV)M`B)}^%$f-D+Z>SJ=CUE%2Wp-p+XvEzjNwBN z;C}zd|HyL8pvESW05hm<io$0GPpUv0o(v2OAOC~K9BtuhKK_?uU|_IE;)BLLK{H$s zp^yI!85kI>ARMrMkenqF-<5%Z!2*fz4_^-e68!idH0J|iLGZ`_$)Le#2nTE)oXNnz zz|4T?4uQm(A(OBmCKxj_z(;<deE8rGln)>Of$~8y1ZIK>NN9kWV1gMk%>-tH2xbO; z5CzA~;M5D}GB7iMQWr8`1i=BjUkr_p9Md5GNutS1qw!_Y`0{9c@caQ>jF|yEH-N-f zVkm&}K>13DfrSAyVG0!j`=$=YVPF9BTcLbVJ`!SJW9WtQK|U2?U}u<x!slREg2Lxy zSO?{U@{te&7sECvAC!-T7<d@=L-`;IR2CcuF`yX4zW`-}VoHdCkKqOipP%75ln=^V zLJR^7-=KU@-V$OEVnEIiAoJLfG7N|h>V$%{fby9Tg9u8mE<QduAl@TBo&n78fiQwx z-NB3?N8f-bI4cs)ih#3Rz$|Cy05DyWTM%EAnhs`Hr55EwIVA<)N(tIDMysMg<uJSv z1?6O9f+|pGtq5zum%!R#ux2~FrU1!6D_i8&DabIS5*}m@xKM{x#YoLPcs0!cDhq^E zL7@f7^FnG6wig2f1B?v{M`jTQ22jcdVJ1-q22hy?5(lxh7#P6jFpDxUfF_=lKtml+ zwgxDVK-oG_aZuS|1TtS2VwV|`8c?|<qz4gqgR1v|t_)z3U|<001Em`f8{`HlkU7Q> z^&qDUff5Y^0|Uq|W=RGHkl7$TLLi4j%X66d;Peg^2MtUyf;_|kDgPN285sUBK_+uS z?5oTS;Q3S#dm0l111MKBLbEC;_!vQsf!YgF^Mjdz0aT8H*b$5j3?P4j*qfLc7(o63 zvF|Z5Fa(3jMnwh&UN#1X2q=3#BLhP!l&#GQ86E<u|H#O|Pz)7kVPRmXfU=*nGB9*N z*&(b9;QR_we}I*NVKY=biG_jT5R{$3$iVOb$_ACL@1bl^DE@=8gP0&wv><ap^PyUd z3=AN)Fe?LtC6t}dz`)=EW$$HSU<ik@LDS=DP<9;?14Aj4Eyu{f&;n(%urV-zhKWID zCa^LvEP{&nvoJ7hgtC9LGB6x~vad2SFr0_7kFhW?fWi)>7c~3%7AjuPz`*bq%C2K! zVBlnexLJ&ifk6z)Zee0zP=&IEnHU&MpzI?I3=GatwiFWs1IYg%^A(sF7!sl4uNfH_ z3ZU$Rj0_C*Q1)p?28Mnp`vVID!)z$qgpGk=4V2x*%D}J*%2s1yVAug=gW_!;l%37S zz;Fc0KETYta2m?iVPs&q17&BjGB7-XvW-|67+yfx{}~w=-a*-G85tP9LfM%t3=C|{ zkZ@QFO50F2Xt{$Blx@q(z#su-2ZH8?p=@O~1_lEtdj%^4gBg@<%D}*217$yDW?*oJ zvVB<?7($@zn=A|rQBd|11_p)%DEl}o149~=?Zn8ykPBsZF)}dJLD|+!3=Az$_Adqo zhAt>unuUR30+juOg@Iuvlntt%=0Vw^Yzz!Lpln-428Lr$_ID-*hAU7uXeq`^C>x~y z7nEJV$iTn`8W>V!V7Sk~z#sx;^RY58C_<Ss54%pzL%|zJ{_>m>3v*pzIZl3=C0F zb}K6bLk5(6iGhKk49ZStU|?v0vO)QHK9mh|!$v3@)E3<XVndrK2cT?FJ%0qmhBh6} zf!I(t-vF^?85p`47#Qw?*oq7cAoo89v1J(;4lpn<yaBNl85lr*`37RkGJxyY-ypUk z0|UrktgH+SjIs>iiFGazTakeQ<VO(@Tb6;rkCA~v3ChlAWMI$$u@xB@=7QRmAT~b( z1E?Mdhq6KCUn!LB$H2fa8N^m(U{GddV3-ABgDP$Y28MZ1HmGf~6~vZhU|7z`z_16z zR%Br4WMW{r0b+ya)fpJ>K-r+O{2hob3n?eQg4l`-46Q5-41%DMK#&3k1_n_m8^l!y zv1J(;zB4i~=z-XZ3=HR47#O@jY++Do$iUzSWrNfwfY`DO4Dw724Cx@YA_D`c3d;kr zq0Pb~C>zu^>IAW685rD|7#Jpj*dmZsj?<uQkeN$CY*_||d?p5l^&qwgr0&`bWrNJw z2V%=IFidA+U^oV1D>5)tGcqvTg|aJ{7#Lnb*&uU1g4m!&KLZ29S123QHv0);%Q7&m zXJTOBVTZ);Jy0D7Vk<H*+ybqx0kLHn7(|#E7*s%PQOL4L4JaE_ZkU7EvJ4DH%nS^+ zAhsw21E|V>9?(t~ZFS$iM(vpcD&Yi$dz+awr?rPN;^mLG@u5h%E~#GbTgXdCUw9 zGeK-<`(X))t;oQzgoS}&J%|l$dT)lZLG6N5Ahs+6LmM*#!+8)J>aS-YHh9Ss1H&sQ z8>AkzDiT!AyRk7afEF$?LfZop91IK~HmEtF4`RzQFsxx_U@!r(6&V;nVeSlNC$TXw zc!AiUMgao@gCCR)YOe-?*s_qaCl$(;Wno~*1F<C`{mUXK8<ZXzL2OwDhF}&3hISBJ z64JJs0A+*PS~H<+P&jV|u@xB@*03-z>;bVs4I%~xh67MGs7Z4K#Fk}XsAgecxDI8n zVqsvo17gF%2gH_TV0gg7!0;NxmVz$G<78l9lwx221+^@Q4b9_<NNg=ATZWZ^K@W*- z4rPPVfHe}^1<Jn1%D~`(#14eAx3VxWgd(xypzKH{28JXgHYkTOLd!-_FA~HCO|<ZW z+A#c(yap;JK;j^IP|(2Gpmr~a4Qls+`oA!?HdHUDmkEk{kT{49YO{japfuwMRRdy! z`obV_(3k+IT!XPe`3=Md<(FuvdJr2l`418Y6?Yj>aS$6+-hsqHX`mD;4q{hA*`P8X zRHlQ}fc)JD6$kkP)L#RMgV^(+;vn-@A+bSyHjo;SIiNZK#0HrIYWINHpk5}ZUj}1e zf$9ah5!_bfXJ7!aL3KGu4agi&zYN3%nFFe)L2QsYpe0K%HY=z-#?Js=|G<O92DK4E zYCz_ImQsP(Aam59YCz`bBC!pjY|wfK3naD;lnpWmR42jA34)4))>1?wv16fZka|$P z1yT=cLl#5DLE|L#NbF`PJC1>Y0kqZ&q#ncuw_W)ez*D%O`iT(~i3|)3t3m1oAd8o` zBe8cw*`Rm<w_`yGlYxQZGDutylGpAdu^&U(pfvCu#0D`K7#My-*`Tz<4r=2GLG*G% z*&t=0`U$kU2Na&lAaP-c8hs?TF_aBb52~LSq4k$HNL&OmP7sd7j)t;9^%1C!0jUS& zwPL6^$ot^-FjQ|dR2-xpRBwUQgZgCPwy_ALuL-J$7@_slW{`SONS@t;#6AFJgYxf5 zB=%V-8<fvLbr{SXaNAfE(uV`LhoS6GQ1t-}3=IE}*i4|dpC|(Z$Q)3e2Qmi~6yWx- zC<6nitt$^z11bZQp=?kY0IL5$>Oo})xNQuz3$#QVBn~PQ+@R_~@da)VL+i3Qs5q$Z z1J!dN^`JVj2uU1NhcSW*URWDg3=%$|McW{8Q25URsTYIPBcS>TRA+(WeFI2b0<><3 zfng648`Q4=sR5O3;Px=I&bk3oBMCA8Arc$ZzGsw#nDY)Q4vLFUP&UZ#zmeGgp=?l@ z$pLClN<#7i50nk66G8PK$V`ws6`|sw^rMT!HiWW4<B+yUY)2>?WDcl~1epUWhr^-b zAajzD*y&I<D4m1qKTur;vbP>2E(PNJsn$_DvyDiV7plnts+L3Jn0oOMufkQ;U( zvG+mQpgQLi5*yrBmttT5nFFe8Vdgx6ssYtquaVgAp=^+PP*^iUhYvyi1eHY~zkt%K z0<<gwHD6$55lD}M0A&0CG(5owEptHSoq`|(cw`eaKEntK9O&4Ef)GR;v|bffhJezF zf-poJlm|e08DuXgZ!3sE#`Zz+0ZPLlaTf*#1_fxI@&MH%&@>E6>k81c3d)C!(Dqme zNWC~D4THx(K%QV=V2A;UOF;ITfy#YQT!YL9t))|tge-Rf)k&~01eL7{(69xmgM|+$ zE<tQinGZ^ru<!xpPY@fV4;-G*@BxJ<D6Bxi0&)s0d_ds|VuQrN;R)>{fWi|LRv>Y3 zc!CUoh9@YjK;Z-qPiR>O3Qtg2fyx|kctXPmqz;s?L1_sbp3v|Cg(oPiK;q!=1UZU< z0WyvR4IglLLh~{xJV9XvG6Ni*phO4_Pf%Ea{2>pjN1$z|au6F701ONahe2#;INSuW zL7rk@V0aH=L;cGJDnFrqbOf=X{+b11L;bQH#D=>63WyDLGbgls0L70Lhz)g{CL;rb zJU;^ih^r4}gTmDm$_9n2HIxmiM;xJSP`|?+$_9loXlXsj9MG6wFjO2=u7cVCAaPKb z$3w+I;gkwxhcPfPWJB4YFaxy>K<YthrV%7A04Xa#E6n8uAoWWxR2&o(p!NVr9OUMi zP;rpkKx26zaZo%jg^GjR18OIL#6fuiG~NYbgWLdWGl1Bj^bTq>fY_k)c^0G>8ZQ^2 zY*5sI+6nR?1_J}bbC5VR|Na88q4D(($_6PDWMW{DhxS9op=^-25|j;!CQT?C)Sd*j z89?emeR)%;I4Jxrp=?l^^#QR(A^k+qxS6~tq`eUV6$gb+9Fz^pH=uC@kQz`}WkJP3 z{Tk5N8b}-zZe>t$P@L94*`P3Ng0ewj*a2mO@&stN4oEL3JSRcLL2<nl#D=EH)lfF5 z90j#K<e_EJA&@vUt)76gL2AxG*`R!PAH<e`q=BbUHmEFl4P}GMl8;a}D1U**o8%=R z<K%y#;vl~;GBYrM#6e|%D2NU11Ij?z;JARYL1C@|WrM;*56TAh`#^0Ed1x8v3KExs zgugeG4Qg)$LfIhiheFvPw}IlA5o9<6q#gp5jiCGpiW^ux0?Gq0HK1}BR8E4_fYK$b zP63y_P;)?O6jWw{)PUxrVD$@VYzt;i4X7>vd60pDp#fC3L(?i~3>2mYv^ND*mV(Tg z08#_3cV>X}LhYIZVuKPD0|UbXkQ!(mv;rg!RkH@fhL%ekKx&}%5xBntRdWKQ1{639 z3=C&LYM|)>-1mX10nJT;%3hFr?ts)l>nU(Q2&(1<$Q)3hg2vWBYM^EE7mzqq%?}V8 zT0Z{)se#6w1gKnvs*wS)K?NX4o{@n8UYF?=SLT)^CNbz0mlQ$h3>d2<wW5SU541Fe zK`*Jem_e^7H78LIB&r9UhJtgzD<t4N&}<WUEe!*TP(~&yKPMl}Nbu@1R9hg+h2X}3 z*L}cw$TL)^+KQ1Tt59ViixE)8Aj?W1Vkw{nLh+e-Y55F#5O!ixQc-Fd)Tt05(6TgS z<%va!dFiRJ5Q3<|B9xPvmkKkrxTJ_dFF8LqH#M&W#q6}A#9Yt}4JcI*#-Jt}Xo?b4 zrhrs~@;-=$VUQe%4eIlP*sw*)xYU8hD?nurA$8#SC+OT6$b67_p!y8N24Rq0AR1Jj zgW5=-_5z6iL79O8R5pX=(?H@N3@YD1W4ItaFn=s!fV3?^dO#Q?2ckh`Fo+FP$Hxe1 zJA&ju7$gUx!DAsv?o+^_4m8gM(gQQk2#2~BP#!}v&xH}vHU-%Q!XPt1G-#d(<R_Sa zMN}a5Imo}DvK}M{^6zvs^BNc-{X~!%APh5a5_p{kq&*4}S5Se>&4J7VnFBL#8Jc;Q z7$I$5kRA|*nYRT^-5nh2&Y`J$#t3OEgUkY9n0Y7B+&4o7GM5W-AE?;}b04@ILkd68 zJQysDkj;CHX5I!B1_n^w1~Ly+yu-``m2)6Bz~U{62~yvH%mQJM9EkpoX5IrN_koIe zn0eqaBaj9t2DK3~k(PhJ%;RQ+^jBeS|DnRbu!R$}7ZNg#2{R8|-a^d+QTMqS7%D-X zY7hq+wjd^`Jqj}$#E;-(U|@uARbqgz$N|lfg3N~5yGD<J;R74QUQp2wk^`j&dr&zK zG6;$zg(2w$%7vR}h31brrVI?Axj;}jgUS?`d7ySKvimLyL&oaR%>#{(f%L%KcfyQ; z0hH%J=7FY?Kyo1Wf#+^vni&`vEJYyW@-QKoU5RM!dtuJN@P`@VU(nPz%)BC~e?e&k zWX5E128IS$qJV}o$jn+ab;5FxIdqU75C*9M;clopkQfNN$T2V&fFwX1Xj%d>+tA$i z#F~L&10%$Jpj9+5_ko(#u(A}SZ;CAg!we+zU`!B=lsp(p<RSB#pz;`0UV_X6<tI>* TL^kh=5@aqNWHtzc%mL8=Qx+}r diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c index 6cd195a..61a8260 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/main.c @@ -38,16 +38,16 @@ int main(void){ // uart, port, rx, tx, stat tp1 = tp_new(&USARTC0, &PORTC, PIN2_bm, PIN3_bm, PIN4_bm); - tp_init(tp1); + tp_init(&tp1); tp2 = tp_new(&USARTC1, &PORTC, PIN6_bm, PIN7_bm, PIN5_bm); - tp_init(tp2); + tp_init(&tp2); tp3 = tp_new(&USARTD0, &PORTD, PIN2_bm, PIN3_bm, PIN4_bm); - tp_init(tp3); + tp_init(&tp3); tp4 = tp_new(&USARTD1, &PORTD, PIN6_bm, PIN7_bm, PIN5_bm); - tp_init(tp4); + tp_init(&tp4); // system interrupt setup (allow low level interrupts) @@ -57,19 +57,15 @@ int main(void){ sei(); while(1){ + uint8_t data; + tp_statflash(&tp1); - tp_statflash(tp1); - tp_statflash(tp3); - _delay_ms(100); - /* - // the below only works when bounded by nointerrupts() and interrupts(); - nointerrupts(); - if(tp2->rxstate){ - uint8_t data = tp_read(tp2); - tp_write(tp4, data); + if(tp_read(&tp2, &data)){ + tp_statflash(&tp3); + tp_write(&tp4, data); } - interrupts(); - */ + + // the below only works when bounded by nointerrupts() and interrupts(); } } @@ -78,23 +74,8 @@ uint8_t psize = 12; // passing 2 -> 4 -void handoff(tinyport_t tp_from){ // puts data in 'core' of system - // dirty pass - uint8_t data; - //while(tp_read(tp_from, &data)){ - tp_read(tp_from, &data); - tp_write(tp4, data); - _delay_ms(100); - //} - /* - //uint8_t data = 0x01; - pcount ++; - // would do port selection for pass - if(pcount > psize){ - tp_write(tp3, data); - pcount = 0; - } - */ +void handoff(tinyport_t *tp_from){ // puts data in 'core' of system + // } /* @@ -113,53 +94,40 @@ void interrupts(){ PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; } -void fakepacket(tinyport_t tp){ - tp_write(tp, 80); - tp_write(tp, 65); - tp_write(tp, 67); - tp_write(tp, 75); - tp_write(tp, 69); - tp_write(tp, 84); - tp_write(tp, 80); - tp_write(tp, 65); - tp_write(tp, 67); - tp_write(tp, 75); - tp_write(tp, 69); - tp_write(tp, 84); - tp_write(tp, 38); - tp_write(tp, 0x0A); // write wakes up txdref -} - // hookup ISRs to port-abstracted interrupt functions ISR(USARTC0_RXC_vect){ - tp_rxISR(tp1); + tp_rxISR(&tp1); } -ISR(USARTC0_DRE_vect){ - tp_txISR(tp1); -} ISR(USARTC1_RXC_vect){ - tp_rxISR(tp2); + tp_rxISR(&tp2); } -ISR(USARTC1_DRE_vect){ - tp_txISR(tp2); +ISR(USARTD0_RXC_vect){ + tp_rxISR(&tp3); } -ISR(USARTD0_RXC_vect){ - tp_rxISR(tp3); +ISR(USARTD1_RXC_vect){ + tp_rxISR(&tp4); } -ISR(USARTD0_DRE_vect){ - tp_txISR(tp3); + +/* +ISR(USARTC1_DRE_vect){ + tp_txISR(&tp2); } -IRS(USARTD1_RXC_vect){ - tp_rxISR(tp4); +ISR(USARTC0_DRE_vect){ + tp_txISR(&tp1); +} + +ISR(USARTD0_DRE_vect){ + tp_txISR(&tp3); } ISR(USARTD1_DRE_vect){ - tp_txISR(tp4); -} \ No newline at end of file + tp_txISR(&tp4); +} +*/ \ No newline at end of file diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c index 55885f3..effb733 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.c @@ -2,56 +2,51 @@ #include <stdlib.h> #include <avr/io.h> -ringbuffer_t rb_new (uint32_t capacity){ - ringbuffer_t rb = malloc(sizeof(struct ringbuffer_t)); - if(rb){ - rb->size = capacity + 1; // one byte is used for detecting full condition - rb->buf = malloc(rb->size); - if(rb->buf){ - rb_reset(rb); // point head to tail to beginning - uint8_t tail1 = rb->tail; - uint8_t head1 = rb->head; - } else { - free(rb); // deallocate memory block if fails to allocate b/c full - return 0; - } - } - return rb; +uint8_t rb_init(ringbuffer_t *rb, size_t size){ + rb->size = size; + rb->buffer = malloc(rb->size); + rb_reset(rb); + return 1; } -void rb_reset(ringbuffer_t rb){ - rb->head = 0; - rb->tail = 0; -} - - -void rb_write(ringbuffer_t rb, uint8_t data){ - // write to head - - rb->buf[rb->head] = data; - - rb->head += 1; - if(rb->head >= rb->size){ +uint8_t rb_reset(ringbuffer_t *rb){ + if(rb){ rb->head = 0; + rb->tail = 0; + return 1; + } else { + return 0; } - // increment head and check wrap } -uint8_t rb_read(ringbuffer_t rb){ - // pull data from tail - uint8_t data = rb->buf[rb->tail]; - // increment tail and check wrap - rb->tail += 1; - if(rb->tail >= rb->size){ - rb->tail = 0; + +uint8_t rb_put(ringbuffer_t *rb, uint8_t data){ + if(rb){ + rb->buffer[rb->head] = data; + rb->head = (rb->head + 1) % rb->size; // for wrap around + if(rb->head == rb->tail){ + rb->tail = (rb->tail + 1) % rb->size; + } + return 1; + } else { + return 0; } - return data; } -uint8_t rb_hasdata(ringbuffer_t rb){ - if (rb->tail == rb->head){ - return 0; - } else { +uint8_t rb_get(ringbuffer_t *rb, uint8_t *data){ + if(rb && data && !rb_empty(*rb)){ + *data = rb->buffer[rb->tail]; + rb->tail = (rb->tail + 1) % rb->size; return 1; + } else { + return 0; } +} + +uint8_t rb_empty(ringbuffer_t rb){ + return (rb.head == rb.tail); +} + +uint8_t rb_full(ringbuffer_t rb){ + return ((rb.head + 1) % rb.size) == rb.tail; } \ No newline at end of file diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h index ee8edba..d6d2a8f 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/ringbuffer.h @@ -4,33 +4,35 @@ /* a ringbuffer, s/o https://github.com/dhess/c-ringbuf +s/o https://embeddedartistry.com/blog/2017/4/6/circular-buffers-in-cc */ #include <avr/io.h> +#include <stdlib.h> +#include <stdint.h> +#include <stddef.h> +#include <stdbool.h> +typedef struct { + uint8_t * buffer; + size_t head; + size_t tail; + size_t size; +} ringbuffer_t; -struct ringbuffer_t { - uint8_t *buf; - uint8_t head; - uint8_t tail; - uint32_t size; -}; - -typedef struct ringbuffer_t *ringbuffer_t; // ALERT: ptr to struct? - -// makes new ringbuffer -ringbuffer_t rb_new(uint32_t capacity); +uint8_t rb_init(ringbuffer_t *rb, size_t size); // sets tail to head -void rb_reset(ringbuffer_t rb); +uint8_t rb_reset(ringbuffer_t *rb); // writes one byte to next slot -// TODO: 2nd fn for writing chunks to buffer, i-e complete packets -void rb_write(ringbuffer_t rb, uint8_t data); +uint8_t rb_put(ringbuffer_t *rb, uint8_t data); // reads one byte from buffer -uint8_t rb_read(ringbuffer_t rb); +uint8_t rb_get(ringbuffer_t *rb, uint8_t *data); + +uint8_t rb_empty(ringbuffer_t rb); -uint8_t rb_hasdata(ringbuffer_t rb); +uint8_t rb_full(ringbuffer_t rb); #endif \ No newline at end of file diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c index 462bcf4..0a8747f 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.c @@ -9,24 +9,28 @@ #include <util/delay.h> tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm){ - tinyport_t tp = malloc(sizeof(struct tinyport_t)); - tp->uart = uart; - tp->port = port; - tp->pinRX_bm = pinRX_bm; - tp->pinTX_bm = pinTX_bm; - tp->pinSTAT_bm = pinSTAT_bm; - tp->rbrx = rb_new(TP_RXBUF_SIZE); - tp->rbtx = rb_new(TP_TXBUF_SIZE); - tp->txstate = TP_TX_STATE_EMPTY; - tp->rxstate = TP_RX_STATE_EMPTY; - tp->pstate = TP_PSTATE_OUTSIDE; + tinyport_t tp; + + tp.uart = uart; + tp.port = port; + + tp.pinRX_bm = pinRX_bm; + tp.pinTX_bm = pinTX_bm; + tp.pinSTAT_bm = pinSTAT_bm; + + tp.txstate = TP_TX_STATE_EMPTY; + tp.rxstate = TP_RX_STATE_EMPTY; + tp.pstate = TP_PSTATE_OUTSIDE; + + rb_init(&tp.rbrx, TP_RXBUF_SIZE); + rb_init(&tp.rbtx, TP_TXBUF_SIZE); return tp; } // mostly, start the uart port -void tp_init(tinyport_t tp){ +void tp_init(tinyport_t *tp){ // USART is in UART (async) mode automatically // these registers setup the baudrate - the bitrate // this seems a bit tricky. I am taking for granted that the clock is at 48MHz, @@ -54,98 +58,82 @@ void tp_init(tinyport_t tp){ tp->port->DIRSET = tp->pinSTAT_bm; } -void tp_statflash(tinyport_t tp){ - tp->port->OUTTGL = tp->pinSTAT_bm; -} - -void tp_stathi(tinyport_t tp){ - tp->port->OUTSET = tp->pinSTAT_bm; -} - -void tp_statlo(tinyport_t tp){ - tp->port->OUTCLR = tp->pinSTAT_bm; -} - -void tp_test(tinyport_t tp){ - tp_stathi(tp); - while(!(tp->uart->STATUS & USART_DREIF_bm)); - tp->uart->DATA = 0xFF; - tp->uart->DATA = 0x0A; - tp_statlo(tp); -} - -void tp_rxISR(tinyport_t tp){ // towards a passalong +void tp_rxISR(tinyport_t *tp){ // towards a passalong tp_statflash(tp); - uint8_t data = tp->uart->DATA; + tp->bumpdata = tp->uart->DATA; - switch(tp->pstate){ - + switch (tp->pstate){ case TP_PSTATE_OUTSIDE: - if(data == 126){ // ~ + if(tp->bumpdata == 126){ tp->pstate = TP_PSTATE_INSIDE; - } else { - // nothing for now, in future catch port-buffer-lengths list } break; - case TP_PSTATE_INSIDE: - if(data == 126){ // ~ + if(tp->bumpdata == 126){ tp->pstate = TP_PSTATE_OUTSIDE; - handoff(tp); } else { - rb_write(tp->rbrx, tp->uart->DATA); + rb_put(&tp->rbrx, tp->bumpdata); } - // check for finish break; - default: - // heck - break; + break; } - tp_setRxStatus(tp, TP_RX_STATE_HASDATA); // get it - //handoff(tp); } -uint8_t tp_read(tinyport_t tp, uint8_t *data){ // TODO: set at pointer, return true if non empty - - *data = 81; // rb_read(tp->rbrx); - return 0; - /* - if(rb_hasdata(tp->rbrx)){ +uint8_t tp_read(tinyport_t *tp, uint8_t *data){ // TODO: set at pointer, return true if non empty + if(rb_get(&tp->rbrx, data)){ return 1; } else { - tp_setRxStatus(tp, TP_RX_STATE_EMPTY); return 0; } - */ } -void tp_setRxStatus(tinyport_t tp, uint8_t state){ - if(state == tp->rxstate){ - // nothing - // nothing changes? always listening - } else { - tp->rxstate = state; - } +// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970 + +void tp_write(tinyport_t *tp, uint8_t data){ + while(!(tp->uart->STATUS & USART_DREIF_bm)); // while not ready, wait (this is blocking) + tp->uart->DATA = data; } -// https://lost-contact.mit.edu/afs/sur5r.net/service/drivers+doc/Atmel/ATXMEGA/AVR1307/code/doxygen/usart__driver_8c.html#7fdb922f6b858bef8515e23229efd970 +void tp_statflash(tinyport_t *tp){ + tp->port->OUTTGL = tp->pinSTAT_bm; +} + +void tp_stathi(tinyport_t *tp){ + tp->port->OUTSET = tp->pinSTAT_bm; +} + +void tp_statlo(tinyport_t *tp){ + tp->port->OUTCLR = tp->pinSTAT_bm; +} -void tp_txISR(tinyport_t tp){ +void tp_test(tinyport_t *tp){ // barebones write + tp_stathi(tp); + while(!(tp->uart->STATUS & USART_DREIF_bm)); + tp->uart->DATA = 0xFF; + tp->uart->DATA = 0x0A; + tp_statlo(tp); +} + +/* + +old code, for handling tx'ing with interrupts - we want more determinism on sends, so do straightforward + +void tp_txISR(tinyport_t *tp){ tp_statflash(tp); - tp->uart->DATA = rb_read(tp->rbtx); - if(!(rb_hasdata(tp->rbtx))){ // if no data left to tx, + rb_put(&tp->rbtx, tp->uart->DATA); + if(rb_empty(tp->rbtx)){ // if no data left to tx, tp_setTxStatus(tp, TP_TX_STATE_EMPTY); } } -void tp_write(tinyport_t tp, uint8_t data){ - rb_write(tp->rbtx, data); +void tp_write(tinyport_t *tp, uint8_t data){ + rb_put(&tp->rbtx, data); tp_setTxStatus(tp, TP_TX_STATE_TRANSMIT); // available } -void tp_setTxStatus(tinyport_t tp, uint8_t state){ +void tp_setTxStatus(tinyport_t *tp, uint8_t state){ if(state == tp->txstate){ // if already set, // do nothing } else if(state) { // if set to hi - have things to tx @@ -155,4 +143,5 @@ void tp_setTxStatus(tinyport_t tp, uint8_t state){ tp->uart->CTRLA = (tp->uart->CTRLA & ~ USART_DREINTLVL_gm) | USART_DREINTLVL_OFF_gc; // turn off interrupt tp->txstate = state; } -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h index 3824b53..22ca10c 100644 --- a/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h +++ b/embedded/atxmega-a4u-wakeup/atxmega-a4u-wakeup/tinyport.h @@ -11,8 +11,8 @@ #include "ringbuffer.h" -#define TP_TXBUF_SIZE 16 -#define TP_RXBUF_SIZE 16 +#define TP_TXBUF_SIZE 128 +#define TP_RXBUF_SIZE 128 #define TP_UART_BAUDCONTROLB 0 #define TP_UART_BAUDCONTROLA 155 // 19200: 155, 1M: 2 @@ -25,36 +25,45 @@ #define TP_PSTATE_OUTSIDE 0 #define TP_PSTATE_INSIDE 1 -typedef struct tinyport_t { +typedef struct { USART_t *uart; PORT_t *port; + uint8_t pinRX_bm; uint8_t pinTX_bm; uint8_t pinSTAT_bm; - ringbuffer_t rbrx; // is pointer-to - ringbuffer_t rbtx; // is pointer-to + uint8_t txstate; uint8_t rxstate; uint8_t pstate; -}; - -typedef struct tinyport_t *tinyport_t; + + uint8_t bumpdata; + + ringbuffer_t rbrx; + ringbuffer_t rbtx; + +} tinyport_t; tinyport_t tp_new(USART_t *uart, PORT_t *port, uint8_t pinRX_bm, uint8_t pinTX_bm, uint8_t pinSTAT_bm); -void tp_init(tinyport_t tp); +void tp_init(tinyport_t *tp); + +void tp_statflash(tinyport_t *tp); +void tp_statlo(tinyport_t *tp); +void tp_stathi(tinyport_t *tp); +void tp_test(tinyport_t *tp); -void tp_statflash(tinyport_t tp); -void tp_statlo(tinyport_t tp); -void tp_stathi(tinyport_t tp); -void tp_test(tinyport_t tp); +void tp_rxISR(tinyport_t *tp); +uint8_t tp_read(tinyport_t *tp, uint8_t *data); +void tp_setRxStatus(tinyport_t *tp, uint8_t state); -void tp_rxISR(tinyport_t tp); -uint8_t tp_read(tinyport_t tp, uint8_t *data); -void tp_setRxStatus(tinyport_t, uint8_t state); +void tp_write(tinyport_t *tp, uint8_t data); -void tp_txISR(tinyport_t tp); -void tp_write(tinyport_t tp, uint8_t data); -void tp_setTxStatus(tinyport_t tp, uint8_t state); + +void tp_txISR(tinyport_t *tp); +/* +void tp_write(tinyport_t *tp, uint8_t data); +void tp_setTxStatus(tinyport_t *tp, uint8_t state); +*/ #endif /* TINYPORT_H_ */ \ No newline at end of file -- GitLab