From 7c7e3f1b19f1beb4a3b582594b787938332cc8e3 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Wed, 13 Nov 2013 18:27:00 +0000 Subject: [PATCH] 20131113-192703 --- Button/Button.atsuo | Bin 18944 -> 18944 bytes Button/Button/Button.cpp | 23 +- Button/Button/Button.cppproj | 82 +- Button/Button/Can.hpp | 310 +++ Button/Button/Debug/Button.d | 6 +- Button/Button/Debug/Button.elf | Bin 38858 -> 40823 bytes Button/Button/Debug/Button.hex | 295 ++- Button/Button/Debug/Button.lss | 3904 +++++++++++++++---------------- Button/Button/Debug/Button.map | 344 +-- Button/Button/Debug/Button.srec | 295 ++- Button/Button/Debug/Makefile | 26 +- Button/Button/Debug/makedep.mk | 4 - Button/Button/Output.cpp | 5 +- Button/Button/Output.hpp | 43 + Button/Button/uart.hpp | 4 +- 15 files changed, 2916 insertions(+), 2425 deletions(-) create mode 100644 Button/Button/Can.hpp create mode 100644 Button/Button/Output.hpp diff --git a/Button/Button.atsuo b/Button/Button.atsuo index 9d403c05a417f113b7a006a2c6753dbee8a77c3c..3489e90da304f9a4b0df3636fe12de22f5d1923a 100644 GIT binary patch delta 297 zcmZpe!q_l{aYGIZn?v0i{hkM#i&!qPai}veFmM6!43|z)ze(c6xx1QyuHsfxk1@% za)Wm2%rb zKY`@T$(644oO6MqAW$*6(Y{2qfT4ilwbvSJnJ82vN0EY-~iioz|DcFg>kZ@ zQi`DqLn=cOLn%W#LkxoxkS+nje1<#*J%${HVj!GsB5GL2Q0#wAh~v-Z?Iy7dKm!~m W2k>f6@~B{3H91hnd-D+w8%6+(KxX6s delta 272 zcmZpe!q_l{aYGIZTfpna*+=egE@HXF#-YK$z`zB>llzr5HkWW;QD#wx@+Oz)2TVSq zYOwi>eh)um$z(>i5`jxR1qUzevh3XQ;S=YDP>=k{^~$1?r5w~IJ2;mL3PlRPKWb(6 zdzy6M-oAtNOze{zl&v;7{$v!Ke%$BC$4WLa-V%*#oiDi0vH@kxCOM`~erj(tIaXVF zvH=U*Bo`MBHK5g6Q0rOyfQ*@wD_!atXHNbJB&ScVbggHf3={=|$@UJjCMK{ +//////////////////// OUTPUT /////////////////////////////////////// +typedef Output outclass; +outclass o; //////////////////// LED ////////////////////////////////////////// typedef Led ledclass; ledclass l; @@ -26,12 +29,12 @@ uartclass u; ///////////////////////// SPI ///////////////////////////////////// typedef Spi spiclass; spiclass s; - -Output o; -Can c; +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; int main(void) -{ +{ l.color(l.YELLOW); u.send("Init done!\r\n"); @@ -46,12 +49,12 @@ int main(void) while(1) { u.send("Stuff!\r\n"); - o.AudioOn(); + //o.AudioOn(); c.can_send_message(&m); - _delay_ms(1); - o.AudioOff(); + //_delay_ms(1); + //o.AudioOff(); l.rainbow(5); - + _delay_ms(10000); } } \ No newline at end of file diff --git a/Button/Button/Button.cppproj b/Button/Button/Button.cppproj index d9cdf03..95a173a 100644 --- a/Button/Button/Button.cppproj +++ b/Button/Button/Button.cppproj @@ -115,52 +115,49 @@ - True - True - True - True - True - True - - - DEBUG - - - Optimize (-O1) - True - True - Default (-g2) - True - True - True - - - DEBUG - - - Optimize (-O1) - True - True - Default (-g2) - True - - - libm - - - <segmentname>=<address>, for example .boot=0xff - Default (-Wa,-g) - + True + True + True + True + True + True + + + DEBUG + + + Optimize most (-O3) + True + True + Default (-g2) + True + True + True + + + DEBUG + + + Optimize for size (-Os) + True + True + Default (-g2) + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + Default (-Wa,-g) + compile - - compile - - + compile @@ -172,10 +169,7 @@ compile - - compile - - + compile diff --git a/Button/Button/Can.hpp b/Button/Button/Can.hpp new file mode 100644 index 0000000..8f85f66 --- /dev/null +++ b/Button/Button/Can.hpp @@ -0,0 +1,310 @@ +/* + * Can.h + * + * Created: 03.11.2013 21:52:03 + * Author: netz + */ + +#include "config.h" +#include +#include "mcp2515_defs.h" + +#ifndef CAN_H_ +#define CAN_H_ + +typedef struct +{ + uint16_t id; + uint8_t rtr; + uint8_t length; + uint8_t data[8]; +} CANMessage; + +template +class Can { + public: + Can() { + init_can(); + } + uint8_t can_send_message(CANMessage *p_message) { + uint8_t status, address; + + // Status des MCP2515 auslesen + s.CSOn(); + s.send(SPI_READ_STATUS); + status = s.send(0xff); + s.send(0xff); + s.CSOff(); + + /* Statusbyte: + * + * Bit Funktion + * 2 TXB0CNTRL.TXREQ + * 4 TXB1CNTRL.TXREQ + * 6 TXB2CNTRL.TXREQ + */ + + if (bit_is_clear(status, 2)) { + address = 0x00; + } + else if (bit_is_clear(status, 4)) { + address = 0x02; + } + else if (bit_is_clear(status, 6)) { + address = 0x04; + } + else { + /* Alle Puffer sind belegt, + Nachricht kann nicht verschickt werden */ + return 0; + } + + s.CSOn(); // CS Low + s.send(SPI_WRITE_TX | address); + + // Standard ID einstellen + s.send((uint8_t) (p_message->id>>3)); + s.send((uint8_t) (p_message->id<<5)); + + // Extended ID + s.send(0x00); + s.send(0x00); + + uint8_t length = p_message->length; + + if (length > 8) { + length = 8; + } + + // Ist die Nachricht ein "Remote Transmit Request" ? + if (p_message->rtr) + { + /* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten */ + + // Nachrichten Laenge + RTR einstellen + s.send((1<data[i]); + } + } + s.CSOff(); // CS auf High + + asm volatile ("nop"); + + /* CAN Nachricht verschicken + die letzten drei Bit im RTS Kommando geben an welcher + Puffer gesendet werden soll */ + s.CSOn(); // CS wieder Low + if (address == 0x00) { + s.send(SPI_RTS | 0x01); + } else { + s.send(SPI_RTS | address); + } + s.CSOff(); // CS auf High + + return 1; + } + uint8_t can_get_message(CANMessage *p_message) { + // Status auslesen + uint8_t status = mcp2515_read_rx_status(); + + if (bit_is_set(status, 6)) + { + // Nachricht in Puffer 0 + + s.CSOn(); // CS Low + s.send(SPI_READ_RX); + } + else if (bit_is_set(status, 7)) + { + // Nachricht in Puffer 1 + + s.CSOn(); // CS Low + s.send(SPI_READ_RX | 0x04); + } + else { + /* Fehler: Keine neue Nachricht vorhanden */ + return 0xff; + } + + // Standard ID auslesen + p_message->id = (uint16_t) s.send(0xff) << 3; + p_message->id |= (uint16_t) s.send(0xff) >> 5; + + s.send(0xff); + s.send(0xff); + + // Laenge auslesen + uint8_t length = s.send(0xff) & 0x0f; + p_message->length = length; + + // Daten auslesen + for (uint8_t i=0;idata[i] = s.send(0xff); + } + + s.CSOff(); + + if (bit_is_set(status,3)) { + p_message->rtr = 1; + } else { + p_message->rtr = 0; + } + + // Interrupt Flag loeschen + if (bit_is_set(status,6)) { + mcp2515_bit_modify(CANINTF, (1< 1 uS) + * + * Sync Seg = 1TQ + * Prop Seg = (PRSEG + 1) * TQ = 1 TQ + * Phase Seg1 = (PHSEG1 + 1) * TQ = 3 TQ + * Phase Seg2 = (PHSEG2 + 1) * TQ = 3 TQ + * + * Bus speed = 1 / (Total # of TQ) * TQ + * = 1 / 8 * TQ = 125 kHz + */ + + // BRP = 7 + mcp2515_write_register( CNF1, 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�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 b+|pFKUQR4(&ZB{P|C-wRveH_=jDq+-{>xYB literal 38858 zcmeHwd3;vIx&NH^yjfoefdpg?0RoAVoj?}0u!KbssVJhNFWDfGkfd2qv6X;|U@1F_ zXho@2%e8LpwY7CgEn028YI|+3`g4i4QtP#fUaJ1o%J2J~Gc#w-OTgCN-|ut(_#K${ zJo9Yx%=0`mXU>{+RSV`gjwAFI5{redl>m9!W+AS@zC>gSSLBERqMxMi)&kfMP4G$_ zV9K)G1Ke`aC23ixv&1VJ>Awa2YS3A@QC8FY>>e-r>|XreT0V37XN`RHxwl^IdF`=( zdn~o**2DMpyz|D#J)!Qn?R|INUUq-NOCM+U-2V1`Jx=$Co!>8eAmNRVQ+u9#>-nB= z_vjnGa8h<(>mHi;n}nx7PT74fEc=$*2QGMS*Xz6f?Z>bEIQNEr4}P-ywa5BB`frcj zwfEM2-`{uJzJvP??0e_%k)F+eyy&Jcp4;-!`W@^0fBM{2Z|>;Xch%;rhHco;v*oI7 z?|l2Jt?zHWsE2dgYuFauHvOTG2MkJ!?{jqe&y%|)ZLg=@xqibb zyApo%U$-q9a^(H#Lq0C}`B~BES!YfET3q#!KNjqB{-xk(!GAsHwO(|6-|oLUk?tN? z^hWLnx&8A0+Vgt;kv!3p+7orU*01mXpU++M_V%8X-B-DfIxW$4XI(98Z-ln}d4G>{ z!v`OWZe)VQt#|Kq#&lon*{N)??fgr(vQv3M+xZ6UY=NDxc56H5e^3WI|B}}MJC!~q zW9$2+t#9vveX;s}Z1nX%dRq6Lj@J2strK##&i&N6PerO1o!d^P(~`4wUaED{C%x!g z`DHqloUQXLTPHFqw(rv|ou|h3opv4`k@0?Jz z+8^5Y`i|#zjNH+0N8+AiJAIjt^1}rKAXP7=TJk)p6H6c4p18+r?a15HX7#Mn)WgdUE55_a|D>Rv<(k@4ZJ-(h)f%YI zK=lS%VW5=;YU% z;NYVTyANi4_mhvD4eK|JDLQhA(LJR5k~~l5VCIcS);LFd-cR{p_`%)R^AZH>_>&;6wY?}UC{9Y{~?`JlS z_IjHwCW^4C%odYGqJc|A9|M<(R0EfbbOTq2!3Lfzh8uW_$TaX&xi(;RwwQ($hPTZY z(?za`2A(Y{4O|7i-Zopz5%UZ@S1d5_Jh8~Y^Tjy^KHY-P zu;2w2e5M62wBWNWc##Ev&4SOi;Kdevjs>41r~gv1uwJUi!AtJ z3yxawatp4u;2I0Awct7nuD9S77QE7e8!Widf-kY)RTkW2!K*E}*@9avxYdHcZozF9 z+-|`g7TjsUYb^Lu3%<;PFSp>e7JP*Tf5U>mX~9=o@Hz|bvf%X=yupI6vf!&N_!k_;N2Fy$AYi7;2SJ>uLa*| z!TT)uCJVmVg1=+Iw^;Cg3%=EYZ?oV77W`cczTJYqXTf(^@SPTXmj!>{f)85ozgY0y z7W@MXzQ=;^wcz_K_vasyuv4h)e@e2>YFM0gq!i!>wqRbXA ziKPa9SzKV?SHv;{zbY;^@as5F^tRa|$GOG8r#c4+7j&#{EvT(6yL?7#)#>@|Vogh9 zT}4OH)FKg$uBor>XlZM&m{SC{n$E_ix`IpUn^!e9w-;R6(zdF-wYs*xpn6SPS>DR# z&b*G6mZsW<>c-}R_O@E0^O_oKY71)HI*JNb@;84mbkf72nTRW(E?yOlA znK?6-oEynWG6iL90Z)~3h^V9 znSejSeww6vKTX($M1GNWX9>gx05=EwWb7BI{RP+;dm^%pEvQ$b{tWgnV}A$Epm~6O z9Q!hF1t9WK=a!}Fgn5t*iC16(1hIV@FXTZzgcEXN;?$AN#^raj*mv;nPH(m1aH|CUXoyOYvNfO0eH!aT@}T*^hQ^3KZ5?eQ`4lc>LSsUGH^Z>x!CuYn`#U%< zc?e}fW5ObZ-s(W5AAb_)pE0n~eG+<;hh_qoI;*-_ILX5kVMKpt2{6eS#bj~r0(>u} zNOC}Y0)0;&IT-zMohLwe#wJE1AZDgY$u~jxvrio0`~p5r9u)^kn&~<&oZk<{Q=LX6 z^p}%s^d1Ph&R9?<1vxyn0Zu)fojm3@=z*tf5!jXmS)ptxj84wF4Bl{^Hc&SOIixbJ zaRZVdd2Bhl=V?3u-tQZJk?zn($=S|Nf&00SAL!hk1i_r|D^r}8K|5^dX(=#4401B) z>r-n~=bg`D7!d7^=yG!C3jCgu0Om;i5#+_->+$1+5^sf;Ao72r%MdpP6HAW zN1;*AfQ00Yh_4jz3`mHqB+m<$Vj7UpH-u11KF@%JlmiHa^SQ;x_7YO*BFlh;{@1`e z#(-f|9!Yu-1`K!F>pMgwQi9++vw=w4i>`|dCl?k)(i-T8p$^kNGAtjzPJ_i0C3XG2dT!b#jS*9117`%usiX@!@No~|E=&kdT z)u3n8LS%ZE`+stO(J#i-s;V(=AoOC+hsGU`9+JoYc>sT#}{ z#;8~5ww)G_XH=$Vhv%sR3TUIktQ_wa(F;lpK84yNNf*L9+EXvlP8SHzC>^nvVS+Q% zpfeoLj(@fNQ9^C99gYYSq;M}NF?bjiMw0$uH9eN$ztU>M3(^3FQ`>PD%{yT6T!=X# zGVWPU`Z{x7HOUgNBmQ_h;>F+>ybNB2opwQEDwOfq7>r8-lUCdDUAp-+i^ucFPspR~ zfZe_MBkp)R;>4(5Gy5V*+J@Vaht74De$N*(X_~fSI>-($zH2)@8{T4CY8&!7tsLKA zLN6%H!(Y(513!bxxQ7^@aLN({c=VkJY&e&o%j*7Sz{?aH`XV9$br(a3Pz-k$pS79Zp+H7u^i} zU54gOgo(}ySQ{Sv2eLl`;?u`5yb0NGW*Iy68i+@O3{s7!tG~04_D%c?BI!EG(AXbE zS<>IxOJc>n=#T4UgOKkNrAs+IWp%;nGrxCM5*r##Go_C4V5H?*{PW}9ccJMypSt?T>} z)MpKc7~mAM$*cj08BK7Vw?RB=7`*Q&0qfN^vZRm^e zu5%^u*Z8!7veWS+evKTU+0HGX9W-=1YVn1ui2 zkt?eB%4gty*ZC9#2c{^S2RM6?G4Zn(f#|tx7>L=1!E1bg)0fs?cqfECt{JGG8N+2p zTvikTU@C;O2E%8B;G(w(xfZ zxK3LmLj9%gyer@ucLH$ZivdN3$-{l_c*#G7zh^4`h{t~(`D+b-#N+4j&&@jw+ue1B z=IP3NoY*}Et0Z_Bck{l+-}?7EqQt5 z{McwwEpYYX=H5;D-2L+R6#1Jhe>X^KCx7$l{J5>|DnxXAHj*T6E5U-ozoGwe+vg($ zg*$&H*Y277R1oxSWFJgwev*ve zk2r+AL7u~7iaQka&LB@3S_@|~#ZT*K(NJAyn*s}p8%1~&$pyu$M0hlz2`izZ_!1Ew zBS%I7!Eth=gP6mkn|l>FZVWbb1fw!6&mu*M(+!$4iZYxDc)@|2v*|P;CO!&?m`SUJ zGmhshp)F1+yG+9KWE(RV_Xo;wdtbztv)l3RCebDKm%2y+GChtGPH#>XqLc%csBV-< zHrF2&9M=YwR(2k$qN3bJrcRzkB+#5Qx&csQB)cpdRi`4!MrKS-^LR^>&^q~^LCVyi3McP@JrF&^`HMpeA$bt=O-K zzX#DBI++K_$(&Yj`G(o}5g}|&?)&MmiKoEHWd-;Rmu1QLF(p;}re=b1S``p;0ZgrA z?JU$T1TcL$ej3w&X#l1Ll?tZBaHK~LN;tcc>97m<$;=3u3M6Kdn0`4fQ^`~yDgz~w zeI`&c6%5Kw1%nKx0!67YkO~HATvpl-!66^7W`zg-jji)IK-6d{{w!N(b{JGzB{Snr zc8no2c;5hK2c@Yrl3mH{7zR+Lqrn>+WP*@Yy2ncpR>x5~XEHo#C5Rye5`?Uj4kU;{ znwAi%E|@*-A_QO?*kxb@fIcYUEEyP{Sonbi0bak>!9ccJ1Gjvt7tt{kVlisp}1 zGMs}FGgf(2SPFDEWhedRRLFiCsH2qSWG)9Y8Qum%IOC_dSvr}6c{0cHWDe!Y9LZA$ zgJlMX@YH#L6{~I-^v(6Fdb&bkd@Mb zj4?>l5(2cH0pe^r0_-vzH2|7X)NDEfpg(9yTtQ;`FA+yMXo;#riDcgdlpM4MWe-|| z^!>uvP?Q=2gVrF8sWLF+y96aX@C>A$3=B~XQhYd2GB5@e6BvW{4Pam>O{KAcF?eHx z3=CPNd%VD~+C=G`&1l~Wj3ER9Lsm)$0%MS-B@8b$+UgLWyHLVIa)%??IodcJD>>rM zg`!H1y7d6Ok@q~q$&vR1pr(Gp8V{a7M{Rm0(ti6;74F{wBg1_NJd{%5{@+w(4xS`F zMPmAcLsYnldJ-j)eH~CT+y-Tb+aP^!Gu#xV#z43Y(l|iQ(d6U26&{!cv*jF3)UPO> z^9fqF=4eAO?q+PsN)3TI+8|A9GO*;6j_?A@>a$X`28~;RH3ZWVM;uux9SE#JnwAih zN`yfkCV7G+LvR=5euSbXz)8USAt3Q?64T3vsSpr#5G9h`7bqD5gR(I0O{`3&t_fiZ+YV8}}8Kwu2gwB(PtkHFlD7=?#!9f?5nc6{3lvUhyzW-vLzcyn-i z4{9HdP~p8;hnJ%;OoiSm=-NPdN&K7)>4PCCCsd+7MTum;iy<$=YfyH04bt~6M;Jw^ zF%VvZG#!>BjC_Ko4cy4q8B3zRpm@#&Kv^Tq5R7{nOR`c!V1yZ@X-x)Fw#3%FK(ZQ= zqKDX$zX~!0(-KD*S?R_=APv&Agb|jAIZPhYZqgx0hg>G*y)%Tz0wExAFp23mWvCDk zH3%h=-2#*hfkD|JFvwsCC`yfi5E!H}Rfd3k!%@NmlaOvQ1Vjy`c+RV6-3oyr7{@RK zWTl2c2n^D+Rxu3cBjl5g7*xtDMyzH~H2VTHUcvK6gG#GpME;#FVT2qWrjisw8Gloeh>2!xlc)DQ@-L7LWNc*!Rn;f0sgB^1prhtFhq4JszQ z2Jd&3;iWVcs_^dC;Wc>EKE~Zo7%HwM@6v&3fM^Gb8h6i_!2AumNo*o9J!v#t!=*h@ zm!L#)UWUQJrM;mU?=TkRrjppDy}=s;WjM&%iV_}p>1Y)WqMA`6IcET6g~Jd`gB)#S zrG`K_4AQhF!$CgTeJ>oW@*#mp_EV!(I1DN#90nf@2c@Y{g`-D@!{AN(f}1>Fy9NBu zBQoLPYsQ^mw0#1yH`+2W+~sIH3f0pqQF}H^jkd&iHQH{4!n;w_Xe$EV8*L0KiMNxO z{@NH7RH6=`L~`y0Di~BlGd^Ze$xS7(K{a^OO&L_O-h~n#xB$k=F-FuKQbQ(CR!|MW zG{~Tml^Oy;HAvH%3@Z6#_r0L9dXS>o-$6@qj2To+Pz^p9R7z8!3ThSooCKo`-n5S~ z#+w6jjGeE;@i0W6LQ!Mvn}KkU*iB;k>ai*uL_LZU$(aUJFdT+vyu)yin@VECVerO4 zxn?BmA(ZgI57;Kxj6^+74cU(aCD)7w6|-hEc;88k5T&UUP6}M}GI(Qy3=&zTQ@kLt z`lOVeIZg%1pkjh#@P7N82q{g4Do8tYkPP0mFGt=?UiSPD{9TAwcto$O$h$!DM&0ua zDvxpBgWBmwP`e;Ujk<@}5HE5bg)+fmoF%WNy$QTO>PY+qC7gavwhA**AE88Y#sU=# zv!MmTOl~TP4YR?UF3K>I^>dW)z!%vj!%Wnt)R6sspk$a0DkjVZ@4J~{rZknthS}ha z4KmDRl}_=(%<30X`c(K&jzxot3A4fb?K8}jra~3wkLZ1lMT0l(V=NAiQ)4kXK?Nxl zqQe=aY#F3{;Qb(xm`-B)|Auw)ct_L#lt|96fC>i5&;mgsH5EFGDu_{j1nIB zOgcUkPP0~Aea4Ql}_=N{j3h9bk5JvzP0Q( z1k+(ggshat)a>7&Fi6vq9Ce~}6xO&~aZ0ie#hEZ3cakdefSQRwOw{-p<-kmvji0qZ zPdf|10|2nX?1Iz}0L+El?D&RVPU9{o&b>x-fktUwIBX8kt_E#({EA)9%3V%q$Ja&G z0kAy{6*1zthJG*^nRPv+Z$q)}_vP>|zk4r`KaC+w1R?YkkpCVe%pv0e_~b_@d_LFR znHl;3IOpYjbeIxJ!$_jyQohJ?U<9#O&Db`+pN@dL}*)9`;e4f{*kUlQIWq3BVVSkB&h#0D5d;tM2} zz6v`kc+Xg)B4f+0N7bpg%tmHR-he8$(q@QL^hJu7U6>0LZ}t-Pdz46a0Z^5V)id58eetyr zr|4@GuNa&M<9Rols8>*M{!fiVZB$xW7OI}{hR-*ity7d5VZ7hELHe!p0Uz@9pu|r; z53N`59=t}u_{UN8j5kPMd?Umu`bUaSc>?04ydh82n<$Z-8-XhOP^zG-4IxFjTDC@3 zYQX6BTQf+%wJm6kd~c(~Po0&I)_8NCsKXQ=mjG1R5}<@k6+_5WsZzna_GG1o$heA0 zb~UZ6QcBWJ!(+TEDt3ZOIhn!JN~wy~cc?0RM?Tu5I)k#+8KhBHLBlCZZ3q&L_PlJ6 zrr)AsFQ{acqiRAqpBIn=2OXWeij$o4c|IO)cp7U4r+g-`d^znl*nsGGADzv$zW!~M(oOp3nm z&gWPt`3XvR(wzlphx4~aA)oyD+aS&SUHW72QuI@bmma1#k2M+vasN)ZK^pOjN5D%_ z+8r*Fx9oKlqW&#=gEXQ@r3cYN3J#?ghupwUbE1rQuf_Dfzm#(&$tiSVdJV~(D;3$B zE=i;KanmIU=_CZF%hN{#cP~`=2a1iN3)c}(1OAr*ygdG#Q4GA#%i|8V1x*MNALGVh zicdc*=!E^%NwQAc7qkm!c>iQsr}_mg!pYbSL3LPLP%E5~8<|FNu2gvtBOoMB4a14v z+Y)-Q1j`94Be zzmJfx83Fg6Bngdi6Zk$tcnD?qK0@MT0KZ2`;!p5>gz(S}z$MSB#`_52;g{fu9+B@O zgw^{9$?!&hls+UmAU=Wd6jtveWP^}z6Qjt3uzDY1HV9|<#J=)gknf~g1gcm@4C&(d{X^ngzA#A;m z5T-9sRL}d#_YuO`&T!zy`1n-$K0?@kA7Kh;^9((OmoDHzzK;<0-$&qGT~D#cAO?iq z2H$|ttN2ahvm&9bZa0|H`J_~6E5U(-_y}4^K7uxgkD!Hi5Itxw!96t)JVic&7P{U^ zS&bSt^$6Nv2FV%9S#J&sXTCo`(%~7|5I$o_z)4Po#8Ae0@KHcc7J2#p68Y26v@;q% zK7S$k2Q$P@C)xPU4Oyp=^@0HF60ixH_Ax0NDXZfBb^mavBcKrB0*aoy`;1(MA1gfKygcvO?-6}iWfGgKtQ@mmkY|fb= z43&37f>aulsfA-mNyk7K&a`)Kp%?iw*#|J88+)f6?)D9xi|qCcy@dvSlT|(n=g8{! zS(WC>>hDm^xC2xfaOerP>r50G_b4hKzYbDE>mbaxM<~o|(lO*N^yg7Ujv=9|VmN0T z=Tvru@5DJ63fs894YBvTQwa2!HAvN$!FL$NDfnOD%Gv-FYF*PuX~Nj8K#jZ6!>^r_ zeLJA8X-fKS@E)b~gkczFS~_#aC{3`XD~Hd^p|pIwLS(Q3cCiAIG5tvD78zfF%t3JR z@#MtQM&hNJQjw7elgV>cFFdD$CzP~ZWDHPDclN@RLq$mQ;fm+iz3_}D4^nKL;yKa_ z&vG`FxLjoLEkIf{5C_qiP9?T#rV7PW-V0METPqY9vlY)pz3_}uJPQ@i`d)ZOE1so_ z=X<^Ij8Qx_is$KGc(N2vlj8YHFFa!v&l<(kAE_4G`EiPeH&f`KiM{Y-E1v5V&(h;~ zoGFThcMhoLisM6g&*IS^J`7{efZ48lOL+l0)ALE!9SBgJqY z6P>%+5Z_7tHB`@qpfd@8KW?wUGG)X;80Fl}10xs7qk161>vyAfV%l-;;q(;R(UEt6 zT(TC216&>#IL=EX4n{S9Cj=fwc^YjLGz#ZEQp!Nde2}W(T4P-oC>d{~5n}m%ghjz& zB9wHi$T*_N2{0j+d`x6~s>tJdC-XfIDxY^8IqnLPSUE~$%uyWGK@O3zL=o1;5;$*A z=iVTJ$2APE6^i;`uhdP7`r>iaxV4@=bRV^Ud>lt;Exh%tA`e3FV%@P`WWKD(K@$3! z)HMpuF61)HnT8*4TY#`Eh9>8Cfn3-GG}+}=B#%Co%xUo`20+A=7f!Tub{d2Xr7;@JineG(=_ZbPaj9!m|7z9G(nn*L@kn; znI)^AfG?kIb6bUsoru)Tk)%_wZq6h+VAhpfsDyYNmmTI{xf)`|>?U^=5iJ+@@6^dw!l>Axy@rL zR#Tx6M-bAG7=syJovl5GDTME~bBfd3KIE=CTT?HzyWR`!!ME6ZeRVx7-&qf(d8Pwd4L>xcyT&U(muXMG<~x1kss-&qfN@2o!v{3AAvYvGXh&iZeGf61pM z%6Ha7-aG5>_;`^Nszxn&HGZ5F`S@)bd=TM5fPf?V(5Swj;HMkD;Ka-i1#p!btrUmTg6eE-aiJlc@m~rvGr8bJy6vvq_o9s6VO%`AdNQHHYzIFWrZ52nf z4FdxB`Ds2SjmG2bQ8LJuwama68I2#*3m&ID<#3aB(%`g!&xYg+?K5<9e%ciHYG^>q zls@eIFv%y4Fnq&(!=z8iHzEdysV~q1^^Yuo=h!p6o#Q6XPa6(rjq=UH?CQIAdLK%R z@m=pB@ERReP;%@z>7{WBgIOZm=PpYw21`!9GdC?W;-$o?aZ;2?aT-7sQH&nqb&}=g z3rb+g;)$|r`T5F?nKIi7BFN^#5=*Ga_Zy8a2F+-n5OJuZ#AlhG)*qj)sEog1rgZSc z2u8sGsGQ`Bg^*XJBb*}1xioUVY!@eMMY7}N1jtfhv*7L=@pw>z*t4B;`ui~*NhWWBHm`_jlbkUqMJP=m`eNRm9!;XISi6Ukw$J-f#S;EgZ z4&_8Wl#}#OP7V&`h#y7t*&ncd^lZ~Nz+jK*6mLxTlMI0|of;#f$8>Ps;0UdQlLqKn zDlM3m>2?+mWQq>5Q}h(S5vC}vDa}n|&d0=Uh#n)%lcC-K!-oO%_+TtB_$|?R6Y>!j z8-z1-jxe$#t>nqn1dM&1`lEeQ*~Az-uPL7;vjvo~UZRfUjxXM3O8`SZM*?W~RBfIf z_8jY&F*xkU+sW!%o~wsJo@EA9<$LDQfC4`w>6t>+NSt(^uc=5Wh?_45T5&IISehzF zDW(!j20fanT2j<6&wT%=7!Dp4Ooprt?$2vCRJGPIP zDaiibCIh6tH}N3(nL05!m#XzJ^hkOuyZi|S2g~E|m=~VHSwcwMk8BS)pQR)Vd`%g! zaPspD@T8@k`nxe)v}t#=4EICpRmHmtK{db3gic<3fQjx4~+$l&9zOPb@c_E z9gR)@gY3an-`Ua8(wtx0+KP3iXl-fhsLgNiDxLVErH1kS2MyNMH&tJr-vD9<0KRmidAW!?$mQWECmeDcZyMvS9U)8Dt#td2 z$aULBgdMkE`MiwW+;Dj2P%t&j^_jx%fDu!Gt3TJq4IJ^cjKvFb!fsx!+c_c}E`o}* zx#6(eHh%W0Vb{GBI&oRuafg(1H!mC~YafcQEBy9#wcu{4Wow=}Gz+McwFcgD+lmwN zHsnz6|5V<9ccmvAazd#XQsH>S>PLvFo94iYeVp7}cgx)(NP?HI6gA-GVtQ53?9y+%1lC{>X~?r)P%39xv}{xVJdYHt>=;-b3@=fScn?%|JeUB+4-uw_wnP+@pd6 z{=mB0rAwDCTYCPIB}>jjS+;a(oz5fPQ9ue-X7q?$x}1VJ0s()gNc*poxUXBUFNAAD>b%GMaK&&+E=(2m%C#; zjn_b5NEGn*_#=~^9aYrqxsnm$nZDcCN!6Z|XZ`(ASK*Q;_yhgAG<`@+eT1&#gcJ1Q2&7m17;qSOJ`wpLxl8WV$+&J!M0@8I3=4q(+ zrjtD9pfJM*C>hq7UO2W(9jr6ESkFXZomo|kJ#5%c8+N!eQsQn7&q#^?P8{td54T(t z@a!PZ&E)w`SbnpZbY@$nN8d*JcG7oH$IWpwQWCxcm&)%Ulb0#@vd63X?9-TJY}5CL z5VKLI9J8$qz60$#w(%{tv4w4Xn{8~3pOKQdEn!AV()Pp|DakvMW~4-JPM(p{=R1)Z zDShEqyDz-Z7~2=!4oLEy_^;Z|iDJV`Y|JfOL6NbLm)vmq2ktO+=9XQjExpxoD37je ztFLbs(F+z%!deH5p$S0FU${6rQLYNA7Boz(sw!Juy{bOi)N*On8p-M9dg+-h_;~19 z%?jCzcrC<>s;Y{LqmLGB-4?Yyj(-Gv-z;JZFZe!S_Ph^aLzs=4(@> ziD;v-7^MiMu&QcOXLBPy?S0}_YGBi( z$LE@?UgNu{?HyQ@*5cEsjUA2EO^s_&YiW*FH`hh$>f1ZoI%{RUQ1%jYeR1*X+ScNU zMH8c!wl#LtN89RGHn!uds#OgQUlOfYcemHBLQMZI@0Fa~cPgHKSDRXzS7yqe&gS;U zmCf~anfx;8-xH{bwJl98=#AAGFXblS6Nx}~)L$kQ^_G^(<#t-4hf};5R#eE$&CM+B zoF-OO*VTJ*K=z7`#?|#~uY@0bpTA&r`J_Um%<-MJ4Dk~F1lfT+nt<;!R@DgK5$wN? z9KUwEx}~mh#pR-=y0fmWxK`{f}N_GRg9E9 zZ{GZKs-%a#AzS7R*%d38&QYY}s&*MHK2fAZdp%}__Ldd)08lvzyAUAEf`M$W&CM*%%`D2z zESx6lsynJr=Cu-gu0npPY_#;R5%@%N=B)AK)fbtg(betpZzN3Nfaz?SW)eI&HT@HQ zFE?FA@4Q?+Q6JPKqz0bO+JB;LFU_F{>8!_xh>brzjQI1sT8@&2>b4UZ$m0f5)1M_{ zo$QSr%zSefoHcXC0vsATYoha`P4X1J#ygQ0vn!U(ZmG>~UpBKE(|%KZV}0|odDXS6 z>f7>8uWxCsZmYX|nRfv|?`GH6bgn$k@S5Dri7?!^VFJ2l4)Am)raBPv})WPt05}W7Zi$ISx}X6PtDfkN73*K-Ho%YQ?PcXDmFC zooc}MHaQ)awU`(J{W(d3gEf%3SPo1m#&Y1~BBtj}_020g8iZUD3U6v?MqsdZJAncw zB-ZAEZhXZY@%+{xW-d5aE|r2_Eh@IB{6H2R=P$%kO{8wvP)$Q%VTVCN7X+eI0 zbxk>D$#ycOINaIc_w7|94Ss;@xJWERQot=!I#Tf!7xn6NFM3}wP0GE|?5%orJLViMIDf%*x!7xL#)4Y<%{%Iqs?-LZU9aI< za&c>8U@3>=bxCgKBpkJI27{!?%{&)w&?~P@&ZezxjV(AQyc~@nzw{#gWbr|k6czd= zp?xZ)#8>pj@#jp8nORn-gR2?eXy`CEd$I8Fmn44zh9t) zMB#o9gR5b<3bPQ!#_|6DaD_V!`$Cj>;k~q}bj};wK za5t{cK99oo_@*-7#U-4MeU5_jv9D0@9PIZh_&)5tKKb^KhF;H(BCE}!{r8wQi}pWm z+AP}7*PXpKi}nwKKCjK9{eGK8`~5bH_WNxXnSRoTyp!aJI_~HSM>LdRSD~=lONts2 zlZ-H(P3Odm=3P$9E~gFfI;*ZleFsk5&sSePCrsRbvvI;iqjNiO+DTfTotTFLBe|=Q zV8dGMx;(6A)YOph75a@A?Qej`zJU@FMf-2X{sjfUjQwE+^Q8~ZfTI0(L%kOz-($8u zz7?YN9RU2W((x$vUqv^ceP-{NMXlKL-H+I8C7pOXTYZ}*Sq`3LIoJ=H&s$>gmRP+0 zC}6PeK(R;Ed#Lm4S2pgasOwSjTfi@(#M(_d@pb}HH@`oIz;Z_xWZx^;z3E|fU^Uh5 z^h`MUbm?$^2+^=lJW=k_L59Ly?208=rxj|dZA~&*D8ZhM#y$rnwil!m9}>kTWtXBQ zJwFUL^uqn;0A|L?Xky=`;EmYtRPZg>>vX>hQH`AwGC=p*^E2>z;3#KDfR0#z0#9;Ww54(gx|rA&jeD{e9N*RAq+=V* z4je^+Y20z*g~2)4alW+-)>PZLFO-Chi-#Dsu#pVxvru9UCY|`+CbW2Q3+^9uP2Y<2 zV+!fIo>g^SM^vY&hhIAmq2?EE_rx}$_|NBDGr2vaE7QDXRgHQ5M(gR0^ZkT>`3M#z3Iif)8(x2${KBut@T zBg7m+k&O^|QdL|6PpL|nz^_y#j=(dj5>Mb+RY@T5ys9J;_^qlW5qLpWk_r4?RU!ml zRFysiUQw041mtu5Vhf&y^)}l3CluXF!tY{C$BX5=oa$W;Vagoe%Rfpf?*lG`4@#+J zyPS)5IfQ$Z)QbIt-n6KMwN5{`GJz$hBR^O#ty_cYtrB$scYKM<6>A-nHheXSP1%Pe z-7y&eyYl~F;G5BogP?9&@4t#YltK5rjTJN0S>cU!xv_$G)%*${caR$?c)Z-N@SzF0 zkz$enCy@r$3_2nF`o+7P=q?;ry)Bp!8XGUXgz)QLLg+fB{E%y`<*tzUh6$7=+u>#2 ze2${cBg`jOg64b#(S~k*>i95d{c&J(#4AJbnNw}X*_47 z9@1z}tRCXH1mQ{IWhi>n%aS@p<2iwrg-t;wr#&fin z72k*0>y0#R7kPO0MSbLA4vAE)??ZL+Oo=JXfMn z4|()PUTq`KIVxZy&qru0uSe+ZAK`lqde~>`>rKxC!1L6LeD9(3#z&stqEHWc^hRE7 zqdg{RE61eX{t>=n$mw&i-t@$S&NDCa%|v0lv3%qiheAE%(Hk#7a-Lw}NeK&2Mf65^ zjw*|=XW?p`h3h;F30VkpamK>+6AM=uES$MDpWbWzq;VG4FBIxm1vQ`EYkra6e);N- z>Kg1j+Pr;(hUD`&`SRg{{2E@S#q&&(vAPBovRrkNKO5)aof~YN^#MO0BW@O96b6UHS*EklSwj4mAgS zE^@qW6n69nLL`=pF2TQ;mF1D-FKOJeQMg1P-__vzE%*=yvuQp)=cr*4`6n^?=kPQy zLMflu<1>@grMFx0%H#%J!Cvd&7la5GD%xngFUluV^+p=YY_-?;uYs>eS1j6M3nsY; z*SnvuB;;+n-6*OWCdK(0o_REDB%iiAhHvKicn1i5)|=LGc?@5}ay*x*g8&-+!fhi8 zWpsZZuEC$$GuPxj8tFR}A9ixPsa**6S#P@Cn}N_UY45_xJvtZ`4Sz=}5RYdzVKGbr zwP_vPTV{)STfB8P<#SNj51Pvrq#fU!UEX;i&~nrIbiKDdp23%B<|Q{*waonU>UImH zYcEPN>Q+aAa{@siH9jsu>ME`$^eG2%Q33!1- zJcT`b5-JLD^*SUxYf3!!sd28d`2f-M9aPWA~uG1T=26m+RBb zDkD>97Al-PS({lY`AaI;Nfe;&%b^PHS{=ojQxK`F>RrY5G>b5^`MP1JysTd*uf;!g~e7>FS{aDe_E$Q!vP}dv# z`z!J*1na*;ou46qiL$*vqHf2BYqA>91}VCOSorO`qA%*4XZaq3%n$6j4&w2V^@*t4 z?Ny@Aby20FFGpQ(naC&p#a)|!O-!ACqG+S=^XaM>`ZmbOK ztr(3iUKE`djpA7b0C)hBz}Z!EC4dKD_^`W#*VebS=t}Ivl2Q3YViar9d@e0p{5qc^ z!_y5xTvJO+tH6T;^2q?}A%ST9WsM!szz6hOTJda!eAyJ$HTAW4y&+lz5G&oL`b#=t z7%lC(+MFQncQCTHVMLgRKTnwBdo5`nI;tR_{>@v>te*I?B~FUaJ73eAH2k zPqH2vnN@^`HE5mPYJhu!@ZOBTgCt+|G4ZHniRU|D(D`;{7knJFu!vsagD3yQBP6nC zzMCgNqjq_z1(*9U(DnnW?ed9TjY7>lz8o;FlzoNRc30>B9P6TLDqgdt!Q^sV4G^3^Ua_L?0(v6;b<%2uQ@{_*kp_?kvT`xM( zGvm={Lw$8?ppQ|@cf|rd*4m0-`QQ6Ql}ZGi7G4Lv1O%=Y59rr>Pn-vmvP^JTu@&WG z>(M7U;w)p(H)B|#=+vfpPxu&$92BunC##@o<8=O%`5KGm3pKqxboI GiT?vxVB3KJ diff --git a/Button/Button/Debug/Button.hex b/Button/Button/Debug/Button.hex index 272822b..f4fe8f9 100644 --- a/Button/Button/Debug/Button.hex +++ b/Button/Button/Debug/Button.hex @@ -3,116 +3,187 @@ :100020000C9453000C9453000C9453000C94530004 :100030000C9453000C9453000C9453000C945300F4 :100040000C9453000C9453000C9453000C945300E4 -:100050000C945300FB0111241FBECFE5D8E0DEBF96 -:10006000CDBF10E0A0E6B0E0EAE1F7E002C0059005 -:100070000D92A438B107D9F720E0A4E8B0E001C0A0 -:100080001D92A938B207E1F710E0C6E5D0E004C040 -:100090002297FE010E948703C435D107C9F70E9449 -:1000A00055000C948B030C940000CF93DF93CDB7D5 -:1000B000DEB72C970FB6F894DEBF0FBECDBFA89861 -:1000C000A09AA99AA19AAA9AA29AEAE6F0E089E4EB -:1000D0005D9BFECF8CB981918111FACF83E291E0D3 -:1000E0009A8389831B8282E08C838FEA8D838EEFD3 -:1000F0008E8340E050E0BAE060E070E023C08F2FD4 -:10010000A898A09AA99AA19AAA9AA29A8F5F8F3FBB -:10011000B9F7121613060CF43FC10AC0A898A09AAA -:10012000A998A19AAA9AA29A019682179307B4F362 -:10013000A15019F0EF3F19F72FC14F5F5F4F4F3FAD -:10014000510561F0E42F9A01AB2FF42FF3CF5D9BA3 -:10015000FECF8CB931960DC0F5010BC0E0E6F0E0A2 -:10016000E12CF12C0F2EF5E0DF2EF02D00E010E059 -:100170005F0180818111EBCF85E890E00E948303CD -:10018000BE016F5F7F4F84E890E00E94E1028FE93B -:100190009FE00197F1F700C0000085E890E00E9421 -:1001A0008103A70123C0872FA898A09AA998A19A94 -:1001B000AA9AA29A8F5F8F3FB9F7121613060CF412 -:1001C000EDC00AC0A898A09AA99AA19AAA9AA29A40 -:1001D000019682179307B4F3E15019F06F3F19F7B6 -:1001E000DDC04F5F5F4F4F3F510549F1642F9A01CA -:1001F000ED2D742FF3CF872FA898A09AA99AA19AD2 -:10020000AA9AA29A8F5F8F3FB9F7121613060CF4C1 -:10021000C7C00AC0A898A09AA99AA19AAA98A29A17 -:10022000019682179307B4F3E15019F06F3F19F765 -:10023000B7C04F5F5F4F4F3F510511F42AC0A70170 -:10024000642F9A01ED2D742FF1CF872FA898A09AD3 -:10025000A99AA19AAA98A29A8F5F8F3FB9F712160E -:1002600013060CF49FC00AC0A89AA09AA99AA19A52 -:10027000AA98A29A019682179307B4F3E15019F055 -:100280006F3F19F78FC04F5F5F4F4F3F510511F41C -:100290002AC0A701642F9A01ED2D742FF1CF872F6B -:1002A000A89AA09AA99AA19AAA98A29A8F5F8F3F1A -:1002B000B9F7121613060CF477C00AC0A89AA09AD0 -:1002C000A998A19AAA98A29A019682179307B4F3C3 -:1002D000E15019F06F3F19F767C04F5F5F4F4F3F15 -:1002E000510511F42AC0A701642F9A01ED2D742F36 -:1002F000F1CF872FA89AA09AA998A19AAA98A29A12 -:100300008F5F8F3FB9F7121613060CF44FC00AC067 -:10031000A89AA09AA998A19AAA9AA29A0196821735 -:100320009307B4F3E15019F06F3F19F73FC04F5FE7 -:100330005F4F4F3F510511F429C0A701642F9A0167 -:10034000ED2D742FF1CF872FA89AA09AA998A19A82 -:10035000AA9AA29A8F5F8F3FB9F71216130644F13B -:100360000AC0A898A09AA998A19AAA9AA29A0196B6 -:1003700082179307B4F3E15019F06F3F21F718C0CB -:100380004F5F5F4F4F3F510511F4E6CEA701642F39 -:100390009A01ED2D742FF1CFCB01C0CEC80112CF41 -:1003A000C80138CFC80160CFC80188CFC801B0CF1D -:1003B000C801D7CF86E080BD88E08AB987E689B9D1 -:1003C000E7E7F0E085E55D9BFECF8CB98191811177 -:1003D000FACFBD9AC598BD9ABF9AC798BF9ABC9AE2 -:1003E000C49ABC9ABE98C698C698BE9A80E58DB944 -:1003F00081E08EB90895A29AA19AA09A86E080BD64 -:1004000088E08AB987E689B9E7E7F0E085E55D9B92 -:10041000FECF8CB981918111FACF86E890E00E94DD -:10042000DA0185E890E00E947D0384E890E00E9474 -:10043000D302089587B3806A87BB88B38F7188BB66 -:10044000BC9AC49A089580E58DB981E08EB908956B -:100450006FB9779BFECF8FB108950F931F93CF9302 -:10046000DF93EC01062F142FC49862E00E9428024B -:10047000602FCE010E942802612FCE010E94280227 -:10048000C49ADF91CF911F910F910895FF920F931E -:100490001F93CF93DF93EC01F62E042F122FC498F5 -:1004A00065E00E9428026F2DCE010E942802602F75 -:1004B000CE010E942802612FCE010E942802C49A18 -:1004C000DF91CF911F910F91FF900895CF93DF930C -:1004D000EC01C49860EC0E9428028FE99FE001972C -:1004E000F1F700C00000C49A8FE39CE90197F1F78F -:1004F00000C0000047E06AE2CE010E942D0240E900 -:1005000069E2CE010E942D0242E068E2CE010E9423 -:100510002D0243E06BE2CE010E942D0240E660E630 -:10052000CE010E942D0240E660E7CE010E942D021E -:1005300040E060E2CE010E942D0240E061E2CE0187 -:100540000E942D0240E062E2CE010E942D0240E0B6 -:1005500063E2CE010E942D0240E064E2CE010E94DF -:100560002D0240E065E2CE010E942D0240E066E2ED -:10057000CE010E942D0240E067E2CE010E942D02D2 -:1005800040E06CE0CE010E942D0240E06DE0CE0123 -:100590000E942D0220E040EE6FE0CE010E94460254 -:1005A000DF91CF910895CF93DF93EC010E941A025F -:1005B000CE010E942302CE010E946602DF91CF91FC -:1005C0000895AF92BF92CF92DF92EF92FF920F9376 -:1005D0001F93CF93DF931F92CDB7DEB78C016B01D2 -:1005E000C49860EA0E9428026FEFC8010E942802A6 -:1005F00089836FEFC8010E942802C49A898182FF13 -:100600000AC0898184FF09C0898186FD69C0689418 -:10061000BB24B2F805C0B12C03C06894BB24B1F868 -:10062000C4986B2D6064C8010E942802F601808185 -:100630009181BC01769567957695679576956795D6 -:10064000C8010E942802F60160816295660F607EF3 -:10065000C8010E94280260E0C8010E94280260E0F0 -:10066000C8010E942802F601A380F8E0FA1518F4E8 -:100670006894AA24A3F8F6018281882331F06A2DB8 -:100680006064C8010E94280219C06A2DC8010E9436 -:100690002802AA2099F07601F4E0EF0EF11CAA944A -:1006A0008A2D90E00596C80ED91EF70161917F0151 -:1006B000C8010E942802EC14FD04B9F7C49A000096 -:1006C000C498B11005C061E8C8010E94280205C0A5 -:1006D0006B2D6068C8010E942802C49A81E001C0A5 -:1006E00080E00F90DF91CF911F910F91FF90EF90DD -:1006F000DF90CF90BF90AF90089584B3806384BBA8 -:100700000895AD980895AD9A0895EE0FFF1F0590D6 -:0A071000F491E02D0994F894FFCF56 -:10071A005374756666210D0A00496E697420646F08 -:10072A006E65210D0A005561727420646F6E652131 -:04073A000D0A0000A4 +:100050000C945300B30211241FBECFE5D8E0DEBFDD +:10006000CDBF10E0A0E6B0E0E8E7FBE002C00590FD +:100070000D92AA39B107D9F720E0AAE9B0E001C092 +:100080001D92A03AB207E1F710E0C6E5D0E004C047 +:100090002297FE010E94E102C435D107C9F70E94F0 +:1000A0003E020C94BA050C940000FC0103C05D9B59 +:1000B000FECF8CB981918111FACF0895BD9A089530 +:1000C000BF9A089580FF02C0A89A01C0A898A09A7C +:1000D00081FF02C0A99A01C0A998A19A82FF02C01B +:1000E000AA9A01C0AA98A29A0895BF92CF92DF92CD +:1000F000EF92FF920F931F93CF93DF93D82EC62ECC +:10010000B42EC0E0D0E019C01E2D8D2D0E946200DB +:100110001F5F1F3FD1F700E010E005C08C2D0E944B +:1001200062000F5F1F4F0C171D07C4F3F394FB1001 +:10013000EBCF2196CF3FD10519F0EC2EF12CF7CF64 +:10014000DF91CF911F910F91FF90EF90DF90CF90B3 +:10015000BF900895EF92FF920F931F93CF93DF9379 +:10016000CDB7DEB7E2970FB6F894DEBF0FBECDBFB6 +:10017000E62E1F926F9380E690E09F938F938E01FF +:100180000F5F1F4F1F930F930E94E502C8010E944B +:100190005500EFB80F900F900F900F900F900F90A9 +:1001A000779BFECF8FB118E0F12CFF0CC7980E940F +:1001B0006000E7FE02C0C59A01C0C5980E945E00BB +:1001C00085E08A95F1F70000B69B02C081E0F82A2D +:1001D00085E08A95F1F70000C79A0E9460008AE0E6 +:1001E0008A95F1F700C0EE0C1150F9F61F92FF92BC +:1001F0002AE630E03F932F938E010F5F1F4F1F932E +:100200000F930E94E502C8010E9455000F900F90C5 +:100210000F900F900F900F908F2DE2960FB6F894DD +:10022000DEBF0FBECDBFDF91CF911F910F91FF9029 +:10023000EF900895C498BC9A0895C49ABC9A089502 +:10024000FF920F931F93CF93DF931F92CDB7DEB72B +:10025000F82E092F162F49830E941A0162E08F2D74 +:10026000902F0E94AA00612F8F2D902F0E94AA002C +:100270004981642F8F2D902F0E94AA000F90DF914B +:10028000CF911F910F91FF900C941D01CF93DF939D +:10029000EC010E941A0160ECCE010E94AA008FE9D5 +:1002A0009FE00197F1F700C000000E941D018FE35D +:1002B0009CE90197F1F700C0000047E06AE2CE0137 +:1002C0000E94200140E969E2CE010E94200142E043 +:1002D00068E2CE010E94200143E06BE2CE010E9461 +:1002E000200140E660E6CE010E94200140E660E782 +:1002F000CE010E94200140E060E2CE010E94200178 +:1003000040E061E2CE010E94200140E062E2CE01C5 +:100310000E94200140E063E2CE010E94200140E003 +:1003200064E2CE010E94200140E065E2CE010E941D +:10033000200140E066E2CE010E94200140E067E239 +:10034000CE010E94200140E06CE0CE01DF91CF9110 +:100350000C942001AF92BF92CF92DF92EF92FF9266 +:100360000F931F93CF93DF931F92CDB7DEB76C012E +:100370008B010E941A0160EAC6010E94AA006FEF79 +:10038000C6010E94AA0089836FEFC6010E94AA00DD +:100390000E941D01898182FF09C0898184FF08C0F4 +:1003A000898186FD5EC034E0B32E04C0B12C02C04A +:1003B00022E0B22E0E941A016B2D6064C6010E94D9 +:1003C000AA00F8016081718193E0769567959A950E +:1003D000E1F7C6010E94AA00F80160816295660FEC +:1003E000607EC6010E94AA0060E0C6010E94AA00C9 +:1003F00060E0C6010E94AA00F801A380F8E0FA15A7 +:1004000010F488E0A82EF80182816A2D882329F053 +:100410006064C6010E94AA0012C0C6010E94AA0020 +:10042000E12CF12C0AC0F801EE0DFF1D6481C6011C +:100430000E94AA00FFEFEF1AFF0AEA14A0F30E943D +:100440001D0100000E941A01B11002C061E802C043 +:100450006B2D6068C6010E94AA000E941D0181E008 +:1004600001C080E00F90DF91CF911F910F91FF901D +:10047000EF90DF90CF90BF90AF900895CF93DF9330 +:10048000CDB7DEB72C970FB6F894DEBF0FBECDBF49 +:1004900086E00E94620087E790E00E94550083E2B8 +:1004A00091E09A8389831B8282E08C838FEA8D831B +:1004B0008EEF8E834AE064E086E00E94750084E857 +:1004C00090E00E945500BE016F5F7F4F8AE990E087 +:1004D0000E94AA0145E066E084E00E94750045E0C4 +:1004E00062E086E00E94750045E063E082E00E94E1 +:1004F000750045E061E083E00E94750045E065E03D +:1005000081E00E94750045E064E085E00E9475008E +:100510002AEA36EE86E991E0215030408040904052 +:10052000D9F70000CCCF87E689B988E08AB986E898 +:1005300080BD8DE890E00E9455000E945E00C59845 +:100540000E945E000E946000C7980E946000BC9AF2 +:100550000E941D01BE98C698C698BE9A80E58DB9C6 +:1005600081E08EB908951F93CF93DF93A59AAD983C +:10057000A59AA49AAC98A49AA29AA19AA09A17E6CE +:1005800019B9D8E0DAB9C6E8C0BD8DE890E00E949C +:1005900055008CE990E00E9493028AE990E00E9465 +:1005A000930219B9DAB9C0BD8DE890E00E945500F8 +:1005B0008AE990E0DF91CF911F910C944601EE0FF4 +:1005C000FF1F0590F491E02D0994AEE0B0E0EBEE52 +:1005D000F2E00C9491050D891E8986E08C831A83C4 +:1005E00009838FEF9FE79E838D83CE014996AC01EF +:1005F0006F89788DCE0101960E940703EF81F885FF +:10060000E00FF11F10822E96E4E00C94AD05ACE0F3 +:10061000B0E0EDE0F3E00C9483057C016B018A010E +:10062000FC0117821682838181FFC6C188248394CE +:10063000912C8C0E9D1EF7019381F60193FD8591FF +:1006400093FF81916F01882309F4B2C1853239F497 +:1006500093FD859193FF81916F01853229F4B70154 +:1006600090E00E94F904E7CF512C312C20E0203299 +:10067000A8F48B3261F028F4803251F0833271F4A7 +:100680000BC08D3239F0803349F4216028C02260DC +:10069000246025C0286023C0206121C027FD27C019 +:1006A000382F30533A3078F426FF06C0FAE05F9EC8 +:1006B000300D1124532E13C08AE0389E300D1124C2 +:1006C000332E20620CC08E3221F426FD71C12064CD +:1006D00006C08C3611F4206802C0883641F4F60159 +:1006E00093FD859193FF81916F018111C0CF982F68 +:1006F0009554933018F09052933028F40C5F1F4FAC +:10070000FFE3F9830DC0833631F0833771F0833511 +:1007100009F05EC023C0F801808189830E5F1F4FFE +:1007200044244394512C540115C03801F2E06F0E5B +:10073000711CF801A080B18026FF03C0652D70E018 +:1007400002C06FEF7FEFC5012C870E94EE042C01E1 +:1007500083012C856FE7262E222218C03801F2E093 +:100760006F0E711CF801A080B18026FF03C0652DBB +:1007700070E002C06FEF7FEFC5012C870E94E30499 +:100780002C012C8550E8252E222A830123FC1CC035 +:1007900006C0B70180E290E00E94F9043A94832DEC +:1007A00090E048165906A8F30FC0F50127FC859183 +:1007B00027FE81915F01B70190E00E94F90431109A +:1007C0003A94F1E04F1A51084114510471F7EDC009 +:1007D000843611F0893641F5F80127FF07C06081A2 +:1007E0007181828193810C5F1F4F08C0608171818C +:1007F000882777FD8095982F0E5F1F4F4FE6B42E08 +:10080000B22297FF09C090958095709561957F4FB2 +:100810008F4F9F4FF0E8BF2A2AE030E0A4010E94EA +:100820002505A82EA81843C0853731F43FEEB32E16 +:10083000B2222AE030E024C099EFB92EB2228F36DE +:10084000B9F020F4883509F0B3C00DC0803721F02D +:10085000883709F0ADC002C020E1B22AB4FE0BC057 +:1008600084E0B82A08C024FF09C0E6E0BE2A06C01A +:1008700028E030E005C020E130E002C020E132E0B5 +:10088000F801B7FE07C060817181828193810C5F9E +:100890001F4F06C06081718180E090E00E5F1F4FA6 +:1008A000A4010E942505A82EA818FFE7BF22B6FEC6 +:1008B0000BC02B2D2E7FA51450F4B4FE0AC0B2FC41 +:1008C00008C02B2D2E7E05C07A2C2B2D03C07A2C30 +:1008D00001C0752C24FF0DC0FE01EA0DF11D8081C1 +:1008E000803311F4297E09C022FF06C073947394EB +:1008F00004C0822F867809F0739423FD14C020FF72 +:100900000FC05A2C731460F4530C5718732C08C082 +:10091000B70180E290E02C870E94F90473942C8543 +:100920007314B0F304C0731410F4371801C0312CE1 +:1009300024FF12C0B70180E390E02C870E94F904E5 +:100940002C8522FF1EC021FF03C088E590E002C075 +:1009500088E790E0B7010CC0822F867891F021FDE6 +:1009600002C080E201C08BE227FD8DE2B70190E07A +:100970000E94F90406C0B70180E390E00E94F904E8 +:100980005A94A514C0F3AA94F401EA0DF11DB7011D +:10099000808190E00E94F904A110F5CF06C0B70154 +:1009A00080E290E00E94F9043A943110F8CF43CEEF +:1009B000F7012681378102C02FEF3FEFC9012C9646 +:1009C000E2E10C949F05FC0105906150704001101C +:1009D000D8F7809590958E0F9F1F0895FC01615068 +:1009E000704001900110D8F7809590958E0F9F1F51 +:1009F00008950F931F93CF93DF938C01EB018B81AD +:100A000081FD03C00FEF1FEF1AC082FF0DC02E81C2 +:100A10003F818C819D812817390764F4E881F98131 +:100A20000193F983E88306C0E885F985802F09954D +:100A3000892B41F78E819F8101969F838E83C80108 +:100A4000DF91CF911F910F910895FA01AA272830C5 +:100A500051F1203181F1E8946F936E7F6E5F7F4F8B +:100A60008F4F9F4FAF4FB1E03ED0B4E03CD0670F07 +:100A7000781F891F9A1FA11D680F791F8A1F911D5A +:100A8000A11D6A0F711D811D911DA11D20D009F4AA +:100A900068943F912AE0269F11243019305D3193EC +:100AA000DEF6CF010895462F4770405D4193B3E0D5 +:100AB0000FD0C9F7F6CF462F4F70405D4A3318F07C +:100AC000495D31FD4052419302D0A9F7EACFB4E02D +:100AD000A6959795879577956795BA95C9F70097E5 +:100AE0006105710508959B01AC010A2E0694579586 +:100AF000479537952795BA95C9F7620F731F841FDD +:100B0000951FA01D08952F923F924F925F926F9272 +:100B10007F928F929F92AF92BF92CF92DF92EF928D +:100B2000FF920F931F93CF93DF93CDB7DEB7CA1B0E +:100B3000DB0B0FB6F894DEBF0FBECDBF09942A8839 +:100B4000398848885F846E847D848C849B84AA84E1 +:100B5000B984C884DF80EE80FD800C811B81AA816E +:100B6000B981CE0FD11D0FB6F894DEBF0FBECDBF39 +:080B7000ED010895F894FFCF98 +:100B78002D3E2030782530327800203C2D203078EA +:100B8800253032780D0A00496E697420646F6E65ED +:100B9800210D0A005374756666210D0A00556172AD +:0A0BA8007420646F6E65210D0A00D1 :00000001FF diff --git a/Button/Button/Debug/Button.lss b/Button/Button/Debug/Button.lss index 56c3a27..c6c98d3 100644 --- a/Button/Button/Debug/Button.lss +++ b/Button/Button/Debug/Button.lss @@ -3,33 +3,33 @@ Button.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .text 0000071a 00000000 00000000 00000094 2**1 + 0 .text 00000b78 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000024 00800060 0000071a 000007ae 2**0 + 1 .data 0000003a 00800060 00000b78 00000c0c 2**0 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 00000005 00800084 00800084 000007d2 2**0 + 2 .bss 00000006 0080009a 0080009a 00000c46 2**0 ALLOC - 3 .stab 000006cc 00000000 00000000 000007d4 2**2 + 3 .stab 00000c84 00000000 00000000 00000c48 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 00000082 00000000 00000000 00000ea0 2**0 + 4 .stabstr 000001aa 00000000 00000000 000018cc 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 00000f22 2**0 + 5 .comment 0000002f 00000000 00000000 00001a76 2**0 CONTENTS, READONLY - 6 .debug_aranges 000000e0 00000000 00000000 00000f51 2**0 + 6 .debug_aranges 000000e8 00000000 00000000 00001aa5 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 000040d0 00000000 00000000 00001031 2**0 + 7 .debug_info 00003726 00000000 00000000 00001b8d 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 00000841 00000000 00000000 00005101 2**0 + 8 .debug_abbrev 00000938 00000000 00000000 000052b3 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00000723 00000000 00000000 00005942 2**0 + 9 .debug_line 000009b9 00000000 00000000 00005beb 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000254 00000000 00000000 00006068 2**2 + 10 .debug_frame 00000280 00000000 00000000 000065a4 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 000010df 00000000 00000000 000062bc 2**0 + 11 .debug_str 0000179d 00000000 00000000 00006824 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00000f51 00000000 00000000 0000739b 2**0 + 12 .debug_loc 00000ce9 00000000 00000000 00007fc1 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 000005e0 00000000 00000000 000082ec 2**0 + 13 .debug_ranges 00000128 00000000 00000000 00008caa 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: @@ -58,7 +58,7 @@ Disassembly of section .text: 50: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 00000054 <__ctors_start>: - 54: fb 01 movw r30, r22 + 54: b3 02 muls r27, r19 00000056 <__ctors_end>: 56: 11 24 eor r1, r1 @@ -72,18 +72,18 @@ Disassembly of section .text: 62: 10 e0 ldi r17, 0x00 ; 0 64: a0 e6 ldi r26, 0x60 ; 96 66: b0 e0 ldi r27, 0x00 ; 0 - 68: ea e1 ldi r30, 0x1A ; 26 - 6a: f7 e0 ldi r31, 0x07 ; 7 + 68: e8 e7 ldi r30, 0x78 ; 120 + 6a: fb e0 ldi r31, 0x0B ; 11 6c: 02 c0 rjmp .+4 ; 0x72 <__do_copy_data+0x10> 6e: 05 90 lpm r0, Z+ 70: 0d 92 st X+, r0 - 72: a4 38 cpi r26, 0x84 ; 132 + 72: aa 39 cpi r26, 0x9A ; 154 74: b1 07 cpc r27, r17 76: d9 f7 brne .-10 ; 0x6e <__do_copy_data+0xc> 00000078 <__do_clear_bss>: 78: 20 e0 ldi r18, 0x00 ; 0 - 7a: a4 e8 ldi r26, 0x84 ; 132 + 7a: aa e9 ldi r26, 0x9A ; 154 7c: b0 e0 ldi r27, 0x00 ; 0 7e: 01 c0 rjmp .+2 ; 0x82 <.do_clear_bss_start> @@ -91,7 +91,7 @@ Disassembly of section .text: 80: 1d 92 st X+, r1 00000082 <.do_clear_bss_start>: - 82: a9 38 cpi r26, 0x89 ; 137 + 82: a0 3a cpi r26, 0xA0 ; 160 84: b2 07 cpc r27, r18 86: e1 f7 brne .-8 ; 0x80 <.do_clear_bss_loop> @@ -102,2055 +102,1991 @@ Disassembly of section .text: 8e: 04 c0 rjmp .+8 ; 0x98 <__do_global_ctors+0x10> 90: 22 97 sbiw r28, 0x02 ; 2 92: fe 01 movw r30, r28 - 94: 0e 94 87 03 call 0x70e ; 0x70e <__tablejump__> + 94: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <__tablejump__> 98: c4 35 cpi r28, 0x54 ; 84 9a: d1 07 cpc r29, r17 9c: c9 f7 brne .-14 ; 0x90 <__do_global_ctors+0x8> - 9e: 0e 94 55 00 call 0xaa ; 0xaa
- a2: 0c 94 8b 03 jmp 0x716 ; 0x716 <_exit> + 9e: 0e 94 3e 02 call 0x47c ; 0x47c
+ a2: 0c 94 ba 05 jmp 0xb74 ; 0xb74 <_exit> 000000a6 <__bad_interrupt>: a6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -000000aa
: - -Output o; -Can c; - -int main(void) -{ - aa: cf 93 push r28 - ac: df 93 push r29 - ae: cd b7 in r28, 0x3d ; 61 - b0: de b7 in r29, 0x3e ; 62 - b2: 2c 97 sbiw r28, 0x0c ; 12 - b4: 0f b6 in r0, 0x3f ; 63 - b6: f8 94 cli - b8: de bf out 0x3e, r29 ; 62 - ba: 0f be out 0x3f, r0 ; 63 - bc: cd bf out 0x3d, r28 ; 61 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - be: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - c0: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - c2: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - c4: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - c6: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - c8: a2 9a sbi 0x14, 2 ; 20 - ca: ea e6 ldi r30, 0x6A ; 106 - cc: f0 e0 ldi r31, 0x00 ; 0 +000000aa <_ZN4UartILm9600EE4sendEPKc.isra.2>: + public: + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + aa: fc 01 movw r30, r24 + ac: 03 c0 rjmp .+6 ; 0xb4 <_ZN4UartILm9600EE4sendEPKc.isra.2+0xa> + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + UCSRB = /*(1< + UDR = c; + b2: 8c b9 out 0x0c, r24 ; 12 Uart() { init(); send("Uart done!\r\n"); } void send(const char *text) { while (*text) - ce: 89 e4 ldi r24, 0x49 ; 73 - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - UCSRB = /*(1< - UDR = c; - d4: 8c b9 out 0x0c, r24 ; 12 - Uart() { - init(); - send("Uart done!\r\n"); - } - void send(const char *text) { - while (*text) - d6: 81 91 ld r24, Z+ - d8: 81 11 cpse r24, r1 - da: fa cf rjmp .-12 ; 0xd0 - l.color(l.YELLOW); - u.send("Init done!\r\n"); - - CANMessage m; - m.id = 0x0123; - dc: 83 e2 ldi r24, 0x23 ; 35 - de: 91 e0 ldi r25, 0x01 ; 1 - e0: 9a 83 std Y+2, r25 ; 0x02 - e2: 89 83 std Y+1, r24 ; 0x01 - m.rtr = 0; - e4: 1b 82 std Y+3, r1 ; 0x03 - m.length = 2; - e6: 82 e0 ldi r24, 0x02 ; 2 - e8: 8c 83 std Y+4, r24 ; 0x04 - m.data[0] = 0xAF; - ea: 8f ea ldi r24, 0xAF ; 175 - ec: 8d 83 std Y+5, r24 ; 0x05 - m.data[1] = 0xFE; - ee: 8e ef ldi r24, 0xFE ; 254 - f0: 8e 83 std Y+6, r24 ; 0x06 - f2: 40 e0 ldi r20, 0x00 ; 0 - f4: 50 e0 ldi r21, 0x00 ; 0 - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - fe: 8f 2f mov r24, r31 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 100: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 102: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 104: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 106: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 108: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 10a: a2 9a sbi 0x14, 2 ; 20 - 10c: 8f 5f subi r24, 0xFF ; 255 - 10e: 8f 3f cpi r24, 0xFF ; 255 - 110: b9 f7 brne .-18 ; 0x100 - color(from); - } - for (int j=0;j - 118: 3f c1 rjmp .+638 ; 0x398 - 11a: 0a c0 rjmp .+20 ; 0x130 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 11c: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 11e: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 120: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 122: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 124: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 126: a2 9a sbi 0x14, 2 ; 20 - 128: 01 96 adiw r24, 0x01 ; 1 - 12a: 82 17 cp r24, r18 - 12c: 93 07 cpc r25, r19 - 12e: b4 f3 brlt .-20 ; 0x11c - 130: a1 50 subi r26, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 134: ef 3f cpi r30, 0xFF ; 255 - 136: 19 f7 brne .-58 ; 0xfe - 138: 2f c1 rjmp .+606 ; 0x398 - 13a: 4f 5f subi r20, 0xFF ; 255 - 13c: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 13e: 4f 3f cpi r20, 0xFF ; 255 - 140: 51 05 cpc r21, r1 - 142: 61 f0 breq .+24 ; 0x15c - 144: e4 2f mov r30, r20 - for(uint8_t k=0;k - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - UCSRB = /*(1< - UDR = c; - 152: 8c b9 out 0x0c, r24 ; 12 - } - void send(const char *text) { - while (*text) + b4: 81 91 ld r24, Z+ + b6: 81 11 cpse r24, r1 + b8: fa cf rjmp .-12 ; 0xae <_ZN4UartILm9600EE4sendEPKc.isra.2+0x4> { uart_putchar(*text); text++; - 154: 31 96 adiw r30, 0x01 ; 1 - 156: 0d c0 rjmp .+26 ; 0x172 + } + } + ba: 08 95 ret + +000000bc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.21>: + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + bc: bd 9a sbi 0x17, 5 ; 23 + be: 08 95 ret + +000000c0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22>: + c0: bf 9a sbi 0x17, 7 ; 23 + c2: 08 95 ret + +000000c4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11>: + public: + Led() { + init(); + } + void color(uint8_t mask) { + (mask & (1<<0)) ? blue::make_high() : blue::make_low(); + c4: 80 ff sbrs r24, 0 + c6: 02 c0 rjmp .+4 ; 0xcc <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0x8> +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + c8: a8 9a sbi 0x15, 0 ; 21 + ca: 01 c0 rjmp .+2 ; 0xce <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0xa> + cc: a8 98 cbi 0x15, 0 ; 21 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + ce: a0 9a sbi 0x14, 0 ; 20 + (mask & (1<<1)) ? green::make_high() : green::make_low(); + d0: 81 ff sbrs r24, 1 + d2: 02 c0 rjmp .+4 ; 0xd8 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0x14> +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + d4: a9 9a sbi 0x15, 1 ; 21 + d6: 01 c0 rjmp .+2 ; 0xda <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0x16> + d8: a9 98 cbi 0x15, 1 ; 21 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + da: a1 9a sbi 0x14, 1 ; 20 + (mask & (1<<2)) ? red::make_high() : red::make_low(); + dc: 82 ff sbrs r24, 2 + de: 02 c0 rjmp .+4 ; 0xe4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0x20> +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + e0: aa 9a sbi 0x15, 2 ; 21 + e2: 01 c0 rjmp .+2 ; 0xe6 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11+0x22> + e4: aa 98 cbi 0x15, 2 ; 21 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + e6: a2 9a sbi 0x14, 2 ; 20 + e8: 08 95 ret + +000000ea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12>: + fade(GREEN, CYAN, time); fade(CYAN, BLUE, time); fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { + ea: bf 92 push r11 + ec: cf 92 push r12 + ee: df 92 push r13 + f0: ef 92 push r14 + f2: ff 92 push r15 + f4: 0f 93 push r16 + f6: 1f 93 push r17 + f8: cf 93 push r28 + fa: df 93 push r29 + fc: d8 2e mov r13, r24 + fe: c6 2e mov r12, r22 + 100: b4 2e mov r11, r20 + for (uint8_t i=0;i<0xFF;i++) { + for(uint8_t k=0;k + fade(BLUE, MAGENTA, time); + fade(MAGENTA, RED, time); + } + void fade(uint8_t from, uint8_t to, uint8_t dur) { + for (uint8_t i=0;i<0xFF;i++) { + for(uint8_t k=0;k + fade(MAGENTA, RED, time); + } + void fade(uint8_t from, uint8_t to, uint8_t dur) { + for (uint8_t i=0;i<0xFF;i++) { + for(uint8_t k=0;k + 116: 00 e0 ldi r16, 0x00 ; 0 + 118: 10 e0 ldi r17, 0x00 ; 0 + 11a: 05 c0 rjmp .+10 ; 0x126 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12+0x3c> + color(from); + } + for (int j=0;j for (uint8_t i=0;i<0xFF;i++) { - 158: f5 01 movw r30, r10 - 15a: 0b c0 rjmp .+22 ; 0x172 - 15c: e0 e6 ldi r30, 0x60 ; 96 - 15e: f0 e0 ldi r31, 0x00 ; 0 - { - u.send("Stuff!\r\n"); - o.AudioOn(); - c.can_send_message(&m); - _delay_ms(1); - o.AudioOff(); - 160: e1 2c mov r14, r1 - 162: f1 2c mov r15, r1 for(uint8_t k=0;k + fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { for (uint8_t i=0;i<0xFF;i++) { for(uint8_t k=0;k + 132: 21 96 adiw r28, 0x01 ; 1 fade(CYAN, BLUE, time); fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); } void fade(uint8_t from, uint8_t to, uint8_t dur) { for (uint8_t i=0;i<0xFF;i++) { - 170: 5f 01 movw r10, r30 - Uart() { - init(); - send("Uart done!\r\n"); + 134: cf 3f cpi r28, 0xFF ; 255 + 136: d1 05 cpc r29, r1 + 138: 19 f0 breq .+6 ; 0x140 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12+0x56> + 13a: ec 2e mov r14, r28 + for(uint8_t k=0;k + for (int j=0;j - l.fade(l.YELLOW, l.RED, 10); - - while(1) - { - u.send("Stuff!\r\n"); - o.AudioOn(); - 178: 85 e8 ldi r24, 0x85 ; 133 - 17a: 90 e0 ldi r25, 0x00 ; 0 - 17c: 0e 94 83 03 call 0x706 ; 0x706 <_ZN6Output7AudioOnEv> - c.can_send_message(&m); - 180: be 01 movw r22, r28 - 182: 6f 5f subi r22, 0xFF ; 255 - 184: 7f 4f sbci r23, 0xFF ; 255 - 186: 84 e8 ldi r24, 0x84 ; 132 - 188: 90 e0 ldi r25, 0x00 ; 0 - 18a: 0e 94 e1 02 call 0x5c2 ; 0x5c2 <_ZN3Can16can_send_messageEP10CANMessage> + 140: df 91 pop r29 + 142: cf 91 pop r28 + 144: 1f 91 pop r17 + 146: 0f 91 pop r16 + 148: ff 90 pop r15 + 14a: ef 90 pop r14 + 14c: df 90 pop r13 + 14e: cf 90 pop r12 + 150: bf 90 pop r11 + 152: 08 95 ret + +00000154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh>: + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + 154: ef 92 push r14 + 156: ff 92 push r15 + 158: 0f 93 push r16 + 15a: 1f 93 push r17 + 15c: cf 93 push r28 + 15e: df 93 push r29 + 160: cd b7 in r28, 0x3d ; 61 + 162: de b7 in r29, 0x3e ; 62 + 164: e2 97 sbiw r28, 0x32 ; 50 + 166: 0f b6 in r0, 0x3f ; 63 + 168: f8 94 cli + 16a: de bf out 0x3e, r29 ; 62 + 16c: 0f be out 0x3f, r0 ; 63 + 16e: cd bf out 0x3d, r28 ; 61 + 170: e6 2e mov r14, r22 + char t[50]; + sprintf(t, "-> 0x%02x", data); + 172: 1f 92 push r1 + 174: 6f 93 push r22 + 176: 80 e6 ldi r24, 0x60 ; 96 + 178: 90 e0 ldi r25, 0x00 ; 0 + 17a: 9f 93 push r25 + 17c: 8f 93 push r24 + 17e: 8e 01 movw r16, r28 + 180: 0f 5f subi r16, 0xFF ; 255 + 182: 1f 4f sbci r17, 0xFF ; 255 + 184: 1f 93 push r17 + 186: 0f 93 push r16 + 188: 0e 94 e5 02 call 0x5ca ; 0x5ca + u.send(t); + 18c: c8 01 movw r24, r16 + 18e: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + } + return datain; + } + uint8_t send_hard(uint8_t data) { + // Sendet ein Byte + SPDR = data; + 192: ef b8 out 0x0f, r14 ; 15 + 194: 0f 90 pop r0 + 196: 0f 90 pop r0 + 198: 0f 90 pop r0 + 19a: 0f 90 pop r0 + 19c: 0f 90 pop r0 + 19e: 0f 90 pop r0 + + // Wartet bis Byte gesendet wurde + loop_until_bit_is_set(SPSR, SPIF); + 1a0: 77 9b sbis 0x0e, 7 ; 14 + 1a2: fe cf rjmp .-4 ; 0x1a0 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x4c> + + return SPDR; + 1a4: 8f b1 in r24, 0x0f ; 15 + 1a6: 18 e0 ldi r17, 0x08 ; 8 + void init_spi() { + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1aa: ff 0c add r15, r15 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ac: c7 98 cbi 0x18, 7 ; 24 + 1ae: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22> + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1b2: e7 fe sbrs r14, 7 + 1b4: 02 c0 rjmp .+4 ; 0x1ba <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x66> + 1b6: c5 9a sbi 0x18, 5 ; 24 + 1b8: 01 c0 rjmp .+2 ; 0x1bc <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x68> + 1ba: c5 98 cbi 0x18, 5 ; 24 + 1bc: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.21> #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 18e: 8f e9 ldi r24, 0x9F ; 159 - 190: 9f e0 ldi r25, 0x0F ; 15 - 192: 01 97 sbiw r24, 0x01 ; 1 - 194: f1 f7 brne .-4 ; 0x192 - 196: 00 c0 rjmp .+0 ; 0x198 - 198: 00 00 nop - _delay_ms(1); - o.AudioOff(); - 19a: 85 e8 ldi r24, 0x85 ; 133 - 19c: 90 e0 ldi r25, 0x00 ; 0 - 19e: 0e 94 81 03 call 0x702 ; 0x702 <_ZN6Output8AudioOffEv> - 1a2: a7 01 movw r20, r14 - 1a4: 23 c0 rjmp .+70 ; 0x1ec - for(uint8_t k=0;k - color(from); - } - for (int j=0;j - 1c0: ed c0 rjmp .+474 ; 0x39c - 1c2: 0a c0 rjmp .+20 ; 0x1d8 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 1c4: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 1c6: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 1c8: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 1ca: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 1cc: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 1ce: a2 9a sbi 0x14, 2 ; 20 - 1d0: 01 96 adiw r24, 0x01 ; 1 - 1d2: 82 17 cp r24, r18 - 1d4: 93 07 cpc r25, r19 - 1d6: b4 f3 brlt .-20 ; 0x1c4 - 1d8: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); + 1c0: 85 e0 ldi r24, 0x05 ; 5 + 1c2: 8a 95 dec r24 + 1c4: f1 f7 brne .-4 ; 0x1c2 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x6e> + 1c6: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1c8: b6 9b sbis 0x16, 6 ; 22 + 1ca: 02 c0 rjmp .+4 ; 0x1d0 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x7c> + { + datain |= 1; + 1cc: 81 e0 ldi r24, 0x01 ; 1 + 1ce: f8 2a or r15, r24 + 1d0: 85 e0 ldi r24, 0x05 ; 5 + 1d2: 8a 95 dec r24 + 1d4: f1 f7 brne .-4 ; 0x1d2 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x7e> + 1d6: 00 00 nop + 1d8: c7 9a sbi 0x18, 7 ; 24 + 1da: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22> + 1de: 8a e0 ldi r24, 0x0A ; 10 + 1e0: 8a 95 dec r24 + 1e2: f1 f7 brne .-4 ; 0x1e0 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x8c> + 1e4: 00 c0 rjmp .+0 ; 0x1e6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x92> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1e6: ee 0c add r14, r14 + 1e8: 11 50 subi r17, 0x01 ; 1 + SPCR = (1< - for (uint8_t j=i;j<0xFF;j++) { - 1dc: 6f 3f cpi r22, 0xFF ; 255 - 1de: 19 f7 brne .-58 ; 0x1a6 - 1e0: dd c0 rjmp .+442 ; 0x39c - 1e2: 4f 5f subi r20, 0xFF ; 255 - 1e4: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 1e6: 4f 3f cpi r20, 0xFF ; 255 - 1e8: 51 05 cpc r21, r1 - 1ea: 49 f1 breq .+82 ; 0x23e - 1ec: 64 2f mov r22, r20 - for(uint8_t k=0;k - 1f6: 87 2f mov r24, r23 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 1f8: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 1fa: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 1fc: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 1fe: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 200: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 202: a2 9a sbi 0x14, 2 ; 20 - 204: 8f 5f subi r24, 0xFF ; 255 - 206: 8f 3f cpi r24, 0xFF ; 255 - 208: b9 f7 brne .-18 ; 0x1f8 - color(from); - } - for (int j=0;j - 210: c7 c0 rjmp .+398 ; 0x3a0 - 212: 0a c0 rjmp .+20 ; 0x228 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 214: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 216: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 218: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 21a: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 21c: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 21e: a2 9a sbi 0x14, 2 ; 20 - 220: 01 96 adiw r24, 0x01 ; 1 - 222: 82 17 cp r24, r18 - 224: 93 07 cpc r25, r19 - 226: b4 f3 brlt .-20 ; 0x214 - 228: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 22c: 6f 3f cpi r22, 0xFF ; 255 - 22e: 19 f7 brne .-58 ; 0x1f6 - 230: b7 c0 rjmp .+366 ; 0x3a0 - 232: 4f 5f subi r20, 0xFF ; 255 - 234: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 236: 4f 3f cpi r20, 0xFF ; 255 - 238: 51 05 cpc r21, r1 - 23a: 11 f4 brne .+4 ; 0x240 - 23c: 2a c0 rjmp .+84 ; 0x292 - 23e: a7 01 movw r20, r14 - 240: 64 2f mov r22, r20 - for(uint8_t k=0;k - 24a: 87 2f mov r24, r23 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 24c: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 24e: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 250: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 252: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 254: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 256: a2 9a sbi 0x14, 2 ; 20 - 258: 8f 5f subi r24, 0xFF ; 255 - 25a: 8f 3f cpi r24, 0xFF ; 255 - 25c: b9 f7 brne .-18 ; 0x24c - color(from); - } - for (int j=0;j - 264: 9f c0 rjmp .+318 ; 0x3a4 - 266: 0a c0 rjmp .+20 ; 0x27c -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 268: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 26a: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 26c: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 26e: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 270: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 272: a2 9a sbi 0x14, 2 ; 20 - 274: 01 96 adiw r24, 0x01 ; 1 - 276: 82 17 cp r24, r18 - 278: 93 07 cpc r25, r19 - 27a: b4 f3 brlt .-20 ; 0x268 - 27c: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 280: 6f 3f cpi r22, 0xFF ; 255 - 282: 19 f7 brne .-58 ; 0x24a - 284: 8f c0 rjmp .+286 ; 0x3a4 - 286: 4f 5f subi r20, 0xFF ; 255 - 288: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 28a: 4f 3f cpi r20, 0xFF ; 255 - 28c: 51 05 cpc r21, r1 - 28e: 11 f4 brne .+4 ; 0x294 - 290: 2a c0 rjmp .+84 ; 0x2e6 - 292: a7 01 movw r20, r14 - 294: 64 2f mov r22, r20 - for(uint8_t k=0;k - 29e: 87 2f mov r24, r23 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2a0: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2a2: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2a4: a9 9a sbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2a6: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2a8: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2aa: a2 9a sbi 0x14, 2 ; 20 - 2ac: 8f 5f subi r24, 0xFF ; 255 - 2ae: 8f 3f cpi r24, 0xFF ; 255 - 2b0: b9 f7 brne .-18 ; 0x2a0 - color(from); - } - for (int j=0;j - 2b8: 77 c0 rjmp .+238 ; 0x3a8 - 2ba: 0a c0 rjmp .+20 ; 0x2d0 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2bc: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2be: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2c0: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2c2: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2c4: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2c6: a2 9a sbi 0x14, 2 ; 20 - 2c8: 01 96 adiw r24, 0x01 ; 1 - 2ca: 82 17 cp r24, r18 - 2cc: 93 07 cpc r25, r19 - 2ce: b4 f3 brlt .-20 ; 0x2bc - 2d0: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 2d4: 6f 3f cpi r22, 0xFF ; 255 - 2d6: 19 f7 brne .-58 ; 0x29e - 2d8: 67 c0 rjmp .+206 ; 0x3a8 - 2da: 4f 5f subi r20, 0xFF ; 255 - 2dc: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 2de: 4f 3f cpi r20, 0xFF ; 255 - 2e0: 51 05 cpc r21, r1 - 2e2: 11 f4 brne .+4 ; 0x2e8 - 2e4: 2a c0 rjmp .+84 ; 0x33a - 2e6: a7 01 movw r20, r14 - 2e8: 64 2f mov r22, r20 - for(uint8_t k=0;k - 2f2: 87 2f mov r24, r23 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2f4: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2f6: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2f8: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2fa: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 2fc: aa 98 cbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 2fe: a2 9a sbi 0x14, 2 ; 20 - 300: 8f 5f subi r24, 0xFF ; 255 - 302: 8f 3f cpi r24, 0xFF ; 255 - 304: b9 f7 brne .-18 ; 0x2f4 - color(from); - } - for (int j=0;j - 30c: 4f c0 rjmp .+158 ; 0x3ac - 30e: 0a c0 rjmp .+20 ; 0x324 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 310: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 312: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 314: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 316: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 318: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 31a: a2 9a sbi 0x14, 2 ; 20 - 31c: 01 96 adiw r24, 0x01 ; 1 - 31e: 82 17 cp r24, r18 - 320: 93 07 cpc r25, r19 - 322: b4 f3 brlt .-20 ; 0x310 - 324: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 328: 6f 3f cpi r22, 0xFF ; 255 - 32a: 19 f7 brne .-58 ; 0x2f2 - 32c: 3f c0 rjmp .+126 ; 0x3ac - 32e: 4f 5f subi r20, 0xFF ; 255 - 330: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 332: 4f 3f cpi r20, 0xFF ; 255 - 334: 51 05 cpc r21, r1 - 336: 11 f4 brne .+4 ; 0x33c - 338: 29 c0 rjmp .+82 ; 0x38c - 33a: a7 01 movw r20, r14 - 33c: 64 2f mov r22, r20 - for(uint8_t k=0;k - 346: 87 2f mov r24, r23 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 348: a8 9a sbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 34a: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 34c: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 34e: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 350: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 352: a2 9a sbi 0x14, 2 ; 20 - 354: 8f 5f subi r24, 0xFF ; 255 - 356: 8f 3f cpi r24, 0xFF ; 255 - 358: b9 f7 brne .-18 ; 0x348 - color(from); - } - for (int j=0;j - 360: 0a c0 rjmp .+20 ; 0x376 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 362: a8 98 cbi 0x15, 0 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 364: a0 9a sbi 0x14, 0 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 366: a9 98 cbi 0x15, 1 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 368: a1 9a sbi 0x14, 1 ; 20 -namespace avrlib { - - struct portc - { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 36a: aa 9a sbi 0x15, 2 ; 21 - - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } - - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 36c: a2 9a sbi 0x14, 2 ; 20 - 36e: 01 96 adiw r24, 0x01 ; 1 - 370: 82 17 cp r24, r18 - 372: 93 07 cpc r25, r19 - 374: b4 f3 brlt .-20 ; 0x362 - 376: e1 50 subi r30, 0x01 ; 1 - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - for(uint8_t k=0;k - for (uint8_t j=i;j<0xFF;j++) { - 37a: 6f 3f cpi r22, 0xFF ; 255 - 37c: 21 f7 brne .-56 ; 0x346 - 37e: 18 c0 rjmp .+48 ; 0x3b0 - 380: 4f 5f subi r20, 0xFF ; 255 - 382: 5f 4f sbci r21, 0xFF ; 255 - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); - } - void fade(uint8_t from, uint8_t to, uint8_t dur) { - for (uint8_t i=0;i<0xFF;i++) { - 384: 4f 3f cpi r20, 0xFF ; 255 - 386: 51 05 cpc r21, r1 - 388: 11 f4 brne .+4 ; 0x38e - 38a: e6 ce rjmp .-564 ; 0x158 - 38c: a7 01 movw r20, r14 - 38e: 64 2f mov r22, r20 - for(uint8_t k=0;k - 398: cb 01 movw r24, r22 - 39a: c0 ce rjmp .-640 ; 0x11c - 39c: c8 01 movw r24, r16 - 39e: 12 cf rjmp .-476 ; 0x1c4 - 3a0: c8 01 movw r24, r16 - 3a2: 38 cf rjmp .-400 ; 0x214 - 3a4: c8 01 movw r24, r16 - 3a6: 60 cf rjmp .-320 ; 0x268 - 3a8: c8 01 movw r24, r16 - 3aa: 88 cf rjmp .-240 ; 0x2bc - 3ac: c8 01 movw r24, r16 - 3ae: b0 cf rjmp .-160 ; 0x310 - 3b0: c8 01 movw r24, r16 - 3b2: d7 cf rjmp .-82 ; 0x362 - -000003b4 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev>: - text++; + uint8_t send_soft(uint8_t data) { + uint8_t datain=0; + for (uint8_t a=8; a>0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1ea: f9 f6 brne .-66 ; 0x1aa <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh+0x56> + uint8_t r; + if(mode == 0) { + r = send_hard(data); } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1ec: 1f 92 push r1 + 1ee: ff 92 push r15 + 1f0: 2a e6 ldi r18, 0x6A ; 106 + 1f2: 30 e0 ldi r19, 0x00 ; 0 + 1f4: 3f 93 push r19 + 1f6: 2f 93 push r18 + 1f8: 8e 01 movw r16, r28 + 1fa: 0f 5f subi r16, 0xFF ; 255 + 1fc: 1f 4f sbci r17, 0xFF ; 255 + 1fe: 1f 93 push r17 + 200: 0f 93 push r16 + 202: 0e 94 e5 02 call 0x5ca ; 0x5ca + u.send(t); + 206: c8 01 movw r24, r16 + 208: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + return r; + 20c: 0f 90 pop r0 + 20e: 0f 90 pop r0 + 210: 0f 90 pop r0 + 212: 0f 90 pop r0 + 214: 0f 90 pop r0 + 216: 0f 90 pop r0 + } + 218: 8f 2d mov r24, r15 + 21a: e2 96 adiw r28, 0x32 ; 50 + 21c: 0f b6 in r0, 0x3f ; 63 + 21e: f8 94 cli + 220: de bf out 0x3e, r29 ; 62 + 222: 0f be out 0x3f, r0 ; 63 + 224: cd bf out 0x3d, r28 ; 61 + 226: df 91 pop r29 + 228: cf 91 pop r28 + 22a: 1f 91 pop r17 + 22c: 0f 91 pop r16 + 22e: ff 90 pop r15 + 230: ef 90 pop r14 + 232: 08 95 ret + +00000234 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv>: + 234: c4 98 cbi 0x18, 4 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 236: bc 9a sbi 0x17, 4 ; 23 + 238: 08 95 ret + +0000023a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv>: +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 23a: c4 9a sbi 0x18, 4 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 23c: bc 9a sbi 0x17, 4 ; 23 + 23e: 08 95 ret + +00000240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh>: + mcp2515_write_register( TXRTSCTRL, 0 ); + + // Device zurueck in den normalen Modus versetzten + mcp2515_bit_modify( CANCTRL, 0xE0, 0); + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + 240: ff 92 push r15 + 242: 0f 93 push r16 + 244: 1f 93 push r17 + 246: cf 93 push r28 + 248: df 93 push r29 + 24a: 1f 92 push r1 + 24c: cd b7 in r28, 0x3d ; 61 + 24e: de b7 in r29, 0x3e ; 62 + 250: f8 2e mov r15, r24 + 252: 09 2f mov r16, r25 + 254: 16 2f mov r17, r22 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 256: 49 83 std Y+1, r20 ; 0x01 + 258: 0e 94 1a 01 call 0x234 ; 0x234 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 25c: 62 e0 ldi r22, 0x02 ; 2 + 25e: 8f 2d mov r24, r15 + 260: 90 2f mov r25, r16 + 262: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(adress); + 266: 61 2f mov r22, r17 + 268: 8f 2d mov r24, r15 + 26a: 90 2f mov r25, r16 + 26c: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(data); + 270: 49 81 ldd r20, Y+1 ; 0x01 + 272: 64 2f mov r22, r20 + 274: 8f 2d mov r24, r15 + 276: 90 2f mov r25, r16 + 278: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // /CS Leitung wieder freigeben + s.CSOff(); + } + 27c: 0f 90 pop r0 + 27e: df 91 pop r29 + 280: cf 91 pop r28 + 282: 1f 91 pop r17 + 284: 0f 91 pop r16 + 286: ff 90 pop r15 + } + void CSOff() { + cs::make_high(); + 288: 0c 94 1d 01 jmp 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + +0000028c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv>: + return (status & 0x07); } private: - void init() { - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - 3b4: 86 e0 ldi r24, 0x06 ; 6 - 3b6: 80 bd out 0x20, r24 ; 32 - UCSRB = /*(1< + + // MCP2515 per Software Reset zuruecksetzten, + // danach ist der MCP2515 im Configuration Mode + s.CSOn(); + s.send( SPI_RESET ); + 296: 60 ec ldi r22, 0xC0 ; 192 + 298: ce 01 movw r24, r28 + 29a: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 29e: 8f e9 ldi r24, 0x9F ; 159 + 2a0: 9f e0 ldi r25, 0x0F ; 15 + 2a2: 01 97 sbiw r24, 0x01 ; 1 + 2a4: f1 f7 brne .-4 ; 0x2a2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x16> + 2a6: 00 c0 rjmp .+0 ; 0x2a8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x1c> + 2a8: 00 00 nop } - uint8_t uart_putchar(uint8_t c) { - loop_until_bit_is_set(UCSRA, UDRE); //Ausgabe des Zeichens - 3c6: 5d 9b sbis 0x0b, 5 ; 11 - 3c8: fe cf rjmp .-4 ; 0x3c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev+0x12> - UDR = c; - 3ca: 8c b9 out 0x0c, r24 ; 12 - Uart() { - init(); - send("Uart done!\r\n"); - } - void send(const char *text) { - while (*text) - 3cc: 81 91 ld r24, Z+ - 3ce: 81 11 cpse r24, r1 - 3d0: fa cf rjmp .-12 ; 0x3c6 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev+0x12> - - static uint8_t pin() { return PINB; } - static void pin(uint8_t v) { PINB = v; } - - static uint8_t dir() { return DDRB; } - static void dir(uint8_t v) { DDRB = v; } - 3d2: bd 9a sbi 0x17, 5 ; 23 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 3d4: c5 98 cbi 0x18, 5 ; 24 - - static uint8_t pin() { return PINB; } - static void pin(uint8_t v) { PINB = v; } - - static uint8_t dir() { return DDRB; } - static void dir(uint8_t v) { DDRB = v; } - 3d6: bd 9a sbi 0x17, 5 ; 23 - 3d8: bf 9a sbi 0x17, 7 ; 23 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 3da: c7 98 cbi 0x18, 7 ; 24 - - static uint8_t pin() { return PINB; } - static void pin(uint8_t v) { PINB = v; } - - static uint8_t dir() { return DDRB; } - static void dir(uint8_t v) { DDRB = v; } - 3dc: bf 9a sbi 0x17, 7 ; 23 - 3de: bc 9a sbi 0x17, 4 ; 23 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 3e0: c4 9a sbi 0x18, 4 ; 24 - - static uint8_t pin() { return PINB; } - static void pin(uint8_t v) { PINB = v; } - - static uint8_t dir() { return DDRB; } - static void dir(uint8_t v) { DDRB = v; } - 3e2: bc 9a sbi 0x17, 4 ; 23 - 3e4: be 98 cbi 0x17, 6 ; 23 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 3e6: c6 98 cbi 0x18, 6 ; 24 - 3e8: c6 98 cbi 0x18, 6 ; 24 - - static uint8_t pin() { return PINB; } - static void pin(uint8_t v) { PINB = v; } - - static uint8_t dir() { return DDRB; } - static void dir(uint8_t v) { DDRB = v; } - 3ea: be 9a sbi 0x17, 6 ; 23 + void CSOff() { cs::make_high(); + 2aa: 0e 94 1d 01 call 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + 2ae: 8f e3 ldi r24, 0x3F ; 63 + 2b0: 9c e9 ldi r25, 0x9C ; 156 + 2b2: 01 97 sbiw r24, 0x01 ; 1 + 2b4: f1 f7 brne .-4 ; 0x2b2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x26> + 2b6: 00 c0 rjmp .+0 ; 0x2b8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv+0x2c> + 2b8: 00 00 nop + * Bus speed = 1 / (Total # of TQ) * TQ + * = 1 / 8 * TQ = 125 kHz + */ + + // BRP = 7 + mcp2515_write_register( CNF1, (1< + + // Prop Seg und Phase Seg1 einstellen + mcp2515_write_register( CNF2, (1< + + // Wake-up Filter deaktivieren, Phase Seg2 einstellen + mcp2515_write_register( CNF3, (1< + + // Aktivieren der Rx Buffer Interrupts + mcp2515_write_register( CANINTE, (1< + /* + * Einstellen der Filter + */ + + // Buffer 0 : Empfangen aller Nachrichten + mcp2515_write_register( RXB0CTRL, (1< + + // Buffer 1 : Empfangen aller Nachrichten + mcp2515_write_register( RXB1CTRL, (1< + + // Alle Bits der Empfangsmaske loeschen, + // damit werden alle Nachrichten empfangen + mcp2515_write_register( RXM0SIDH, 0 ); //return; + 2f6: 40 e0 ldi r20, 0x00 ; 0 + 2f8: 60 e2 ldi r22, 0x20 ; 32 + 2fa: ce 01 movw r24, r28 + 2fc: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0SIDL, 0 ); //return; + 300: 40 e0 ldi r20, 0x00 ; 0 + 302: 61 e2 ldi r22, 0x21 ; 33 + 304: ce 01 movw r24, r28 + 306: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0EID8, 0 ); + 30a: 40 e0 ldi r20, 0x00 ; 0 + 30c: 62 e2 ldi r22, 0x22 ; 34 + 30e: ce 01 movw r24, r28 + 310: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM0EID0, 0 ); + 314: 40 e0 ldi r20, 0x00 ; 0 + 316: 63 e2 ldi r22, 0x23 ; 35 + 318: ce 01 movw r24, r28 + 31a: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + + mcp2515_write_register( RXM1SIDH, 0 ); //return; + 31e: 40 e0 ldi r20, 0x00 ; 0 + 320: 64 e2 ldi r22, 0x24 ; 36 + 322: ce 01 movw r24, r28 + 324: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1SIDL, 0 ); //return; + 328: 40 e0 ldi r20, 0x00 ; 0 + 32a: 65 e2 ldi r22, 0x25 ; 37 + 32c: ce 01 movw r24, r28 + 32e: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1EID8, 0 ); + 332: 40 e0 ldi r20, 0x00 ; 0 + 334: 66 e2 ldi r22, 0x26 ; 38 + 336: ce 01 movw r24, r28 + 338: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + mcp2515_write_register( RXM1EID0, 0 ); + 33c: 40 e0 ldi r20, 0x00 ; 0 + 33e: 67 e2 ldi r22, 0x27 ; 39 + 340: ce 01 movw r24, r28 + 342: 0e 94 20 01 call 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + /* + * Einstellen der Pin Funktionen + */ + + // Deaktivieren der Pins RXnBF Pins (High Impedance State) + mcp2515_write_register( BFPCTRL, 0 ); return; + 346: 40 e0 ldi r20, 0x00 ; 0 + 348: 6c e0 ldi r22, 0x0C ; 12 + 34a: ce 01 movw r24, r28 + // TXnRTS Bits als Inputs schalten + mcp2515_write_register( TXRTSCTRL, 0 ); + + // Device zurueck in den normalen Modus versetzten + mcp2515_bit_modify( CANCTRL, 0xE0, 0); + } + 34c: df 91 pop r29 + 34e: cf 91 pop r28 + /* + * Einstellen der Pin Funktionen + */ + + // Deaktivieren der Pins RXnBF Pins (High Impedance State) + mcp2515_write_register( BFPCTRL, 0 ); return; + 350: 0c 94 20 01 jmp 0x240 ; 0x240 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh> + +00000354 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage>: +class Can { + public: + Can() { + init_can(); + } + uint8_t can_send_message(CANMessage *p_message) { + 354: af 92 push r10 + 356: bf 92 push r11 + 358: cf 92 push r12 + 35a: df 92 push r13 + 35c: ef 92 push r14 + 35e: ff 92 push r15 + 360: 0f 93 push r16 + 362: 1f 93 push r17 + 364: cf 93 push r28 + 366: df 93 push r29 + 368: 1f 92 push r1 + 36a: cd b7 in r28, 0x3d ; 61 + 36c: de b7 in r29, 0x3e ; 62 + 36e: 6c 01 movw r12, r24 + 370: 8b 01 movw r16, r22 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 372: 0e 94 1a 01 call 0x234 ; 0x234 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + uint8_t status, address; + + // Status des MCP2515 auslesen + s.CSOn(); + s.send(SPI_READ_STATUS); + 376: 60 ea ldi r22, 0xA0 ; 160 + 378: c6 01 movw r24, r12 + 37a: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + status = s.send(0xff); + 37e: 6f ef ldi r22, 0xFF ; 255 + 380: c6 01 movw r24, r12 + 382: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + 386: 89 83 std Y+1, r24 ; 0x01 + s.send(0xff); + 388: 6f ef ldi r22, 0xFF ; 255 + 38a: c6 01 movw r24, r12 + 38c: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + } + void CSOff() { + cs::make_high(); + 390: 0e 94 1d 01 call 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + * 2 TXB0CNTRL.TXREQ + * 4 TXB1CNTRL.TXREQ + * 6 TXB2CNTRL.TXREQ + */ + + if (bit_is_clear(status, 2)) { + 394: 89 81 ldd r24, Y+1 ; 0x01 + 396: 82 ff sbrs r24, 2 + 398: 09 c0 rjmp .+18 ; 0x3ac <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x58> + address = 0x00; + } + else if (bit_is_clear(status, 4)) { + 39a: 89 81 ldd r24, Y+1 ; 0x01 + 39c: 84 ff sbrs r24, 4 + 39e: 08 c0 rjmp .+16 ; 0x3b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x5c> + address = 0x02; + } + else if (bit_is_clear(status, 6)) { + 3a0: 89 81 ldd r24, Y+1 ; 0x01 + 3a2: 86 fd sbrc r24, 6 + 3a4: 5e c0 rjmp .+188 ; 0x462 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x10e> + address = 0x04; + 3a6: 34 e0 ldi r19, 0x04 ; 4 + 3a8: b3 2e mov r11, r19 + 3aa: 04 c0 rjmp .+8 ; 0x3b4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x60> + * 4 TXB1CNTRL.TXREQ + * 6 TXB2CNTRL.TXREQ + */ + + if (bit_is_clear(status, 2)) { + address = 0x00; + 3ac: b1 2c mov r11, r1 + 3ae: 02 c0 rjmp .+4 ; 0x3b4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x60> + } + else if (bit_is_clear(status, 4)) { + address = 0x02; + 3b0: 22 e0 ldi r18, 0x02 ; 2 + 3b2: b2 2e mov r11, r18 + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 3b4: 0e 94 1a 01 call 0x234 ; 0x234 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + Nachricht kann nicht verschickt werden */ + return 0; + } + + s.CSOn(); // CS Low + s.send(SPI_WRITE_TX | address); + 3b8: 6b 2d mov r22, r11 + 3ba: 60 64 ori r22, 0x40 ; 64 + 3bc: c6 01 movw r24, r12 + 3be: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Standard ID einstellen + s.send((uint8_t) (p_message->id>>3)); + 3c2: f8 01 movw r30, r16 + 3c4: 60 81 ld r22, Z + 3c6: 71 81 ldd r23, Z+1 ; 0x01 + 3c8: 93 e0 ldi r25, 0x03 ; 3 + 3ca: 76 95 lsr r23 + 3cc: 67 95 ror r22 + 3ce: 9a 95 dec r25 + 3d0: e1 f7 brne .-8 ; 0x3ca <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x76> + 3d2: c6 01 movw r24, r12 + 3d4: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send((uint8_t) (p_message->id<<5)); + 3d8: f8 01 movw r30, r16 + 3da: 60 81 ld r22, Z + 3dc: 62 95 swap r22 + 3de: 66 0f add r22, r22 + 3e0: 60 7e andi r22, 0xE0 ; 224 + 3e2: c6 01 movw r24, r12 + 3e4: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Extended ID + s.send(0x00); + 3e8: 60 e0 ldi r22, 0x00 ; 0 + 3ea: c6 01 movw r24, r12 + 3ec: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + s.send(0x00); + 3f0: 60 e0 ldi r22, 0x00 ; 0 + 3f2: c6 01 movw r24, r12 + 3f4: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + uint8_t length = p_message->length; + 3f8: f8 01 movw r30, r16 + 3fa: a3 80 ldd r10, Z+3 ; 0x03 + 3fc: f8 e0 ldi r31, 0x08 ; 8 + 3fe: fa 15 cp r31, r10 + 400: 10 f4 brcc .+4 ; 0x406 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xb2> + 402: 88 e0 ldi r24, 0x08 ; 8 + 404: a8 2e mov r10, r24 + if (length > 8) { + length = 8; + } + + // Ist die Nachricht ein "Remote Transmit Request" ? + if (p_message->rtr) + 406: f8 01 movw r30, r16 + 408: 82 81 ldd r24, Z+2 ; 0x02 + { + /* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten */ + + // Nachrichten Laenge + RTR einstellen + s.send((1< 8) { + length = 8; + } + + // Ist die Nachricht ein "Remote Transmit Request" ? + if (p_message->rtr) + 40c: 88 23 and r24, r24 + 40e: 29 f0 breq .+10 ; 0x41a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xc6> + { + /* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten */ + + // Nachrichten Laenge + RTR einstellen + s.send((1< + 418: 12 c0 rjmp .+36 ; 0x43e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xea> + } + else + { + // Nachrichten Laenge einstellen + s.send(length); + 41a: c6 01 movw r24, r12 + 41c: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + + // Daten + for (uint8_t i=0;i +class Can { + public: + Can() { + init_can(); + } + uint8_t can_send_message(CANMessage *p_message) { + 426: f8 01 movw r30, r16 + 428: ee 0d add r30, r14 + 42a: ff 1d adc r31, r15 + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;idata[i]); + 42c: 64 81 ldd r22, Z+4 ; 0x04 + 42e: c6 01 movw r24, r12 + 430: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + 434: ff ef ldi r31, 0xFF ; 255 + 436: ef 1a sub r14, r31 + 438: ff 0a sbc r15, r31 + { + // Nachrichten Laenge einstellen + s.send(length); + + // Daten + for (uint8_t i=0;i + } + void CSOff() { + cs::make_high(); + 43e: 0e 94 1d 01 call 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + s.send(p_message->data[i]); + } + } + s.CSOff(); // CS auf High + + asm volatile ("nop"); + 442: 00 00 nop + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + 444: 0e 94 1a 01 call 0x234 ; 0x234 <_ZN6avrlib3pinINS_5portbELh4EE8make_lowEv> + + /* CAN Nachricht verschicken + die letzten drei Bit im RTS Kommando geben an welcher + Puffer gesendet werden soll */ + s.CSOn(); // CS wieder Low + if (address == 0x00) { + 448: b1 10 cpse r11, r1 + 44a: 02 c0 rjmp .+4 ; 0x450 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0xfc> + s.send(SPI_RTS | 0x01); + 44c: 61 e8 ldi r22, 0x81 ; 129 + 44e: 02 c0 rjmp .+4 ; 0x454 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x100> + } else { + s.send(SPI_RTS | address); + 450: 6b 2d mov r22, r11 + 452: 60 68 ori r22, 0x80 ; 128 + 454: c6 01 movw r24, r12 + 456: 0e 94 aa 00 call 0x154 ; 0x154 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh> + } + void CSOff() { + cs::make_high(); + 45a: 0e 94 1d 01 call 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + } + s.CSOff(); // CS auf High + + return 1; + 45e: 81 e0 ldi r24, 0x01 ; 1 + 460: 01 c0 rjmp .+2 ; 0x464 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage+0x110> + address = 0x04; + } + else { + /* Alle Puffer sind belegt, + Nachricht kann nicht verschickt werden */ + return 0; + 462: 80 e0 ldi r24, 0x00 ; 0 + s.send(SPI_RTS | address); + } + s.CSOff(); // CS auf High + + return 1; + } + 464: 0f 90 pop r0 + 466: df 91 pop r29 + 468: cf 91 pop r28 + 46a: 1f 91 pop r17 + 46c: 0f 91 pop r16 + 46e: ff 90 pop r15 + 470: ef 90 pop r14 + 472: df 90 pop r13 + 474: cf 90 pop r12 + 476: bf 90 pop r11 + 478: af 90 pop r10 + 47a: 08 95 ret + +0000047c
: +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; + +int main(void) +{ + 47c: cf 93 push r28 + 47e: df 93 push r29 + 480: cd b7 in r28, 0x3d ; 61 + 482: de b7 in r29, 0x3e ; 62 + 484: 2c 97 sbiw r28, 0x0c ; 12 + 486: 0f b6 in r0, 0x3f ; 63 + 488: f8 94 cli + 48a: de bf out 0x3e, r29 ; 62 + 48c: 0f be out 0x3f, r0 ; 63 + 48e: cd bf out 0x3d, r28 ; 61 + l.color(l.YELLOW); + 490: 86 e0 ldi r24, 0x06 ; 6 + 492: 0e 94 62 00 call 0xc4 ; 0xc4 <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11> + u.send("Init done!\r\n"); + 496: 87 e7 ldi r24, 0x77 ; 119 + 498: 90 e0 ldi r25, 0x00 ; 0 + 49a: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + + CANMessage m; + m.id = 0x0123; + 49e: 83 e2 ldi r24, 0x23 ; 35 + 4a0: 91 e0 ldi r25, 0x01 ; 1 + 4a2: 9a 83 std Y+2, r25 ; 0x02 + 4a4: 89 83 std Y+1, r24 ; 0x01 + m.rtr = 0; + 4a6: 1b 82 std Y+3, r1 ; 0x03 + m.length = 2; + 4a8: 82 e0 ldi r24, 0x02 ; 2 + 4aa: 8c 83 std Y+4, r24 ; 0x04 + m.data[0] = 0xAF; + 4ac: 8f ea ldi r24, 0xAF ; 175 + 4ae: 8d 83 std Y+5, r24 ; 0x05 + m.data[1] = 0xFE; + 4b0: 8e ef ldi r24, 0xFE ; 254 + 4b2: 8e 83 std Y+6, r24 ; 0x06 + l.fade(l.YELLOW, l.RED, 10); + 4b4: 4a e0 ldi r20, 0x0A ; 10 + 4b6: 64 e0 ldi r22, 0x04 ; 4 + 4b8: 86 e0 ldi r24, 0x06 ; 6 + 4ba: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + + while(1) + { + u.send("Stuff!\r\n"); + 4be: 84 e8 ldi r24, 0x84 ; 132 + 4c0: 90 e0 ldi r25, 0x00 ; 0 + 4c2: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + //o.AudioOn(); + c.can_send_message(&m); + 4c6: be 01 movw r22, r28 + 4c8: 6f 5f subi r22, 0xFF ; 255 + 4ca: 7f 4f sbci r23, 0xFF ; 255 + 4cc: 8a e9 ldi r24, 0x9A ; 154 + 4ce: 90 e0 ldi r25, 0x00 ; 0 + 4d0: 0e 94 aa 01 call 0x354 ; 0x354 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage> + (mask & (1<<0)) ? blue::make_high() : blue::make_low(); + (mask & (1<<1)) ? green::make_high() : green::make_low(); + (mask & (1<<2)) ? red::make_high() : red::make_low(); + } + void rainbow(uint8_t time) { + fade(RED, YELLOW, time); + 4d4: 45 e0 ldi r20, 0x05 ; 5 + 4d6: 66 e0 ldi r22, 0x06 ; 6 + 4d8: 84 e0 ldi r24, 0x04 ; 4 + 4da: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + fade(YELLOW, GREEN, time); + 4de: 45 e0 ldi r20, 0x05 ; 5 + 4e0: 62 e0 ldi r22, 0x02 ; 2 + 4e2: 86 e0 ldi r24, 0x06 ; 6 + 4e4: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + fade(GREEN, CYAN, time); + 4e8: 45 e0 ldi r20, 0x05 ; 5 + 4ea: 63 e0 ldi r22, 0x03 ; 3 + 4ec: 82 e0 ldi r24, 0x02 ; 2 + 4ee: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + fade(CYAN, BLUE, time); + 4f2: 45 e0 ldi r20, 0x05 ; 5 + 4f4: 61 e0 ldi r22, 0x01 ; 1 + 4f6: 83 e0 ldi r24, 0x03 ; 3 + 4f8: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + fade(BLUE, MAGENTA, time); + 4fc: 45 e0 ldi r20, 0x05 ; 5 + 4fe: 65 e0 ldi r22, 0x05 ; 5 + 500: 81 e0 ldi r24, 0x01 ; 1 + 502: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + fade(MAGENTA, RED, time); + 506: 45 e0 ldi r20, 0x05 ; 5 + 508: 64 e0 ldi r22, 0x04 ; 4 + 50a: 85 e0 ldi r24, 0x05 ; 5 + 50c: 0e 94 75 00 call 0xea ; 0xea <_ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12> + 510: 2a ea ldi r18, 0xAA ; 170 + 512: 36 ee ldi r19, 0xE6 ; 230 + 514: 86 e9 ldi r24, 0x96 ; 150 + 516: 91 e0 ldi r25, 0x01 ; 1 + 518: 21 50 subi r18, 0x01 ; 1 + 51a: 30 40 sbci r19, 0x00 ; 0 + 51c: 80 40 sbci r24, 0x00 ; 0 + 51e: 90 40 sbci r25, 0x00 ; 0 + 520: d9 f7 brne .-10 ; 0x518 + 522: 00 00 nop + 524: cc cf rjmp .-104 ; 0x4be + +00000526 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev>: + private: + void init() { + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + 526: 87 e6 ldi r24, 0x67 ; 103 + 528: 89 b9 out 0x09, r24 ; 9 + UCSRB = /*(1< +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + 532: 8d e8 ldi r24, 0x8D ; 141 + 534: 90 e0 ldi r25, 0x00 ; 0 + 536: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + 53a: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.21> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 53e: c5 98 cbi 0x18, 5 ; 24 + 540: 0e 94 5e 00 call 0xbc ; 0xbc <_ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.21> + 544: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22> + 548: c7 98 cbi 0x18, 7 ; 24 + 54a: 0e 94 60 00 call 0xc0 ; 0xc0 <_ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22> + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 54e: bc 9a sbi 0x17, 4 ; 23 + mosi::make_output(); + mosi::make_low(); + sck::make_output(); + sck::make_low(); + cs::make_output(); + cs::make_high(); + 550: 0e 94 1d 01 call 0x23a ; 0x23a <_ZN6avrlib3pinINS_5portbELh4EE9make_highEv> + 554: be 98 cbi 0x17, 6 ; 23 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 556: c6 98 cbi 0x18, 6 ; 24 + 558: c6 98 cbi 0x18, 6 ; 24 + + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } + + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 55a: be 9a sbi 0x17, 6 ; 23 miso::make_input(); miso::make_low(); } void init_spi() { SPCR = (1<: - 3f6: a2 9a sbi 0x14, 2 ; 20 - 3f8: a1 9a sbi 0x14, 1 ; 20 - 3fa: a0 9a sbi 0x14, 0 ; 20 +00000566 <_GLOBAL__sub_I_o>: + //o.AudioOff(); + + l.rainbow(5); + _delay_ms(10000); + } + 566: 1f 93 push r17 + 568: cf 93 push r28 + 56a: df 93 push r29 + 56c: a5 9a sbi 0x14, 5 ; 20 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 56e: ad 98 cbi 0x15, 5 ; 21 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 570: a5 9a sbi 0x14, 5 ; 20 + 572: a4 9a sbi 0x14, 4 ; 20 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 574: ac 98 cbi 0x15, 4 ; 21 + + static uint8_t pin() { return PINC; } + static void pin(uint8_t v) { PINC = v; } + + static uint8_t dir() { return DDRC; } + static void dir(uint8_t v) { DDRC = v; } + 576: a4 9a sbi 0x14, 4 ; 20 + 578: a2 9a sbi 0x14, 2 ; 20 + 57a: a1 9a sbi 0x14, 1 ; 20 + 57c: a0 9a sbi 0x14, 0 ; 20 text++; } } private: void init() { - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - 3fc: 86 e0 ldi r24, 0x06 ; 6 - 3fe: 80 bd out 0x20, r24 ; 32 - UCSRB = /*(1< +class Uart { + public: Uart() { init(); send("Uart done!\r\n"); - } - void send(const char *text) { - while (*text) - 40c: 85 e5 ldi r24, 0x55 ; 85 - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - UCSRB = /*(1< - UDR = c; - 412: 8c b9 out 0x0c, r24 ; 12 - Uart() { - init(); - send("Uart done!\r\n"); - } - void send(const char *text) { - while (*text) - 414: 81 91 ld r24, Z+ - 416: 81 11 cpse r24, r1 - 418: fa cf rjmp .-12 ; 0x40e <_GLOBAL__sub_I_l+0x18> + 58a: 8d e8 ldi r24, 0x8D ; 141 + 58c: 90 e0 ldi r25, 0x00 ; 0 + 58e: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> ///////////////////////// UART //////////////////////////////////// typedef Uart<9600> uartclass; uartclass u; ///////////////////////// SPI ///////////////////////////////////// typedef Spi spiclass; spiclass s; - 41a: 86 e8 ldi r24, 0x86 ; 134 - 41c: 90 e0 ldi r25, 0x00 ; 0 - 41e: 0e 94 da 01 call 0x3b4 ; 0x3b4 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev> + 592: 8c e9 ldi r24, 0x9C ; 156 + 594: 90 e0 ldi r25, 0x00 ; 0 + 596: 0e 94 93 02 call 0x526 ; 0x526 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev> +} CANMessage; -Output o; - 422: 85 e8 ldi r24, 0x85 ; 133 - 424: 90 e0 ldi r25, 0x00 ; 0 - 426: 0e 94 7d 03 call 0x6fa ; 0x6fa <_ZN6OutputC1Ev> -Can c; - 42a: 84 e8 ldi r24, 0x84 ; 132 - 42c: 90 e0 ldi r25, 0x00 ; 0 - 42e: 0e 94 d3 02 call 0x5a6 ; 0x5a6 <_ZN3CanC1Ev> - 432: 08 95 ret +template +class Can { + public: + Can() { + 59a: 8a e9 ldi r24, 0x9A ; 154 + 59c: 90 e0 ldi r25, 0x00 ; 0 + 59e: 0e 94 93 02 call 0x526 ; 0x526 <_ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev> + text++; + } + } + private: + void init() { + UBRRL = (F_CPU / (baudrate * 16L) - 1); //Teiler wird gesetzt + 5a2: 19 b9 out 0x09, r17 ; 9 + UCSRB = /*(1< +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + 5a8: 8d e8 ldi r24, 0x8D ; 141 + 5aa: 90 e0 ldi r25, 0x00 ; 0 + 5ac: 0e 94 55 00 call 0xaa ; 0xaa <_ZN4UartILm9600EE4sendEPKc.isra.2> + init_can(); + 5b0: 8a e9 ldi r24, 0x9A ; 154 + 5b2: 90 e0 ldi r25, 0x00 ; 0 + //o.AudioOff(); + + l.rainbow(5); + _delay_ms(10000); + } + 5b4: df 91 pop r29 + 5b6: cf 91 pop r28 + 5b8: 1f 91 pop r17 + 5ba: 0c 94 46 01 jmp 0x28c ; 0x28c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv> -00000434 <_ZN3Can8init_pinEv>: - init_can(); -} +000005be <__tablejump2__>: + 5be: ee 0f add r30, r30 + 5c0: ff 1f adc r31, r31 -void Can::init_pin() { - //SPI Pins - CANDDR_SPI |= (1<: + 5c2: 05 90 lpm r0, Z+ + 5c4: f4 91 lpm r31, Z + 5c6: e0 2d mov r30, r0 + 5c8: 09 94 ijmp -00000446 <_ZN3Can8init_spiEv>: -} +000005ca : + 5ca: ae e0 ldi r26, 0x0E ; 14 + 5cc: b0 e0 ldi r27, 0x00 ; 0 + 5ce: eb ee ldi r30, 0xEB ; 235 + 5d0: f2 e0 ldi r31, 0x02 ; 2 + 5d2: 0c 94 91 05 jmp 0xb22 ; 0xb22 <__prologue_saves__+0x1c> + 5d6: 0d 89 ldd r16, Y+21 ; 0x15 + 5d8: 1e 89 ldd r17, Y+22 ; 0x16 + 5da: 86 e0 ldi r24, 0x06 ; 6 + 5dc: 8c 83 std Y+4, r24 ; 0x04 + 5de: 1a 83 std Y+2, r17 ; 0x02 + 5e0: 09 83 std Y+1, r16 ; 0x01 + 5e2: 8f ef ldi r24, 0xFF ; 255 + 5e4: 9f e7 ldi r25, 0x7F ; 127 + 5e6: 9e 83 std Y+6, r25 ; 0x06 + 5e8: 8d 83 std Y+5, r24 ; 0x05 + 5ea: ce 01 movw r24, r28 + 5ec: 49 96 adiw r24, 0x19 ; 25 + 5ee: ac 01 movw r20, r24 + 5f0: 6f 89 ldd r22, Y+23 ; 0x17 + 5f2: 78 8d ldd r23, Y+24 ; 0x18 + 5f4: ce 01 movw r24, r28 + 5f6: 01 96 adiw r24, 0x01 ; 1 + 5f8: 0e 94 07 03 call 0x60e ; 0x60e + 5fc: ef 81 ldd r30, Y+7 ; 0x07 + 5fe: f8 85 ldd r31, Y+8 ; 0x08 + 600: e0 0f add r30, r16 + 602: f1 1f adc r31, r17 + 604: 10 82 st Z, r1 + 606: 2e 96 adiw r28, 0x0e ; 14 + 608: e4 e0 ldi r30, 0x04 ; 4 + 60a: 0c 94 ad 05 jmp 0xb5a ; 0xb5a <__epilogue_restores__+0x1c> -void Can::init_spi() { - SPCR = (1<: + 60e: ac e0 ldi r26, 0x0C ; 12 + 610: b0 e0 ldi r27, 0x00 ; 0 + 612: ed e0 ldi r30, 0x0D ; 13 + 614: f3 e0 ldi r31, 0x03 ; 3 + 616: 0c 94 83 05 jmp 0xb06 ; 0xb06 <__prologue_saves__> + 61a: 7c 01 movw r14, r24 + 61c: 6b 01 movw r12, r22 + 61e: 8a 01 movw r16, r20 + 620: fc 01 movw r30, r24 + 622: 17 82 std Z+7, r1 ; 0x07 + 624: 16 82 std Z+6, r1 ; 0x06 + 626: 83 81 ldd r24, Z+3 ; 0x03 + 628: 81 ff sbrs r24, 1 + 62a: c6 c1 rjmp .+908 ; 0x9b8 <__stack+0x159> + 62c: 88 24 eor r8, r8 + 62e: 83 94 inc r8 + 630: 91 2c mov r9, r1 + 632: 8c 0e add r8, r28 + 634: 9d 1e adc r9, r29 + 636: f7 01 movw r30, r14 + 638: 93 81 ldd r25, Z+3 ; 0x03 + 63a: f6 01 movw r30, r12 + 63c: 93 fd sbrc r25, 3 + 63e: 85 91 lpm r24, Z+ + 640: 93 ff sbrs r25, 3 + 642: 81 91 ld r24, Z+ + 644: 6f 01 movw r12, r30 + 646: 88 23 and r24, r24 + 648: 09 f4 brne .+2 ; 0x64c + 64a: b2 c1 rjmp .+868 ; 0x9b0 <__stack+0x151> + 64c: 85 32 cpi r24, 0x25 ; 37 + 64e: 39 f4 brne .+14 ; 0x65e + 650: 93 fd sbrc r25, 3 + 652: 85 91 lpm r24, Z+ + 654: 93 ff sbrs r25, 3 + 656: 81 91 ld r24, Z+ + 658: 6f 01 movw r12, r30 + 65a: 85 32 cpi r24, 0x25 ; 37 + 65c: 29 f4 brne .+10 ; 0x668 + 65e: b7 01 movw r22, r14 + 660: 90 e0 ldi r25, 0x00 ; 0 + 662: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 666: e7 cf rjmp .-50 ; 0x636 + 668: 51 2c mov r5, r1 + 66a: 31 2c mov r3, r1 + 66c: 20 e0 ldi r18, 0x00 ; 0 + 66e: 20 32 cpi r18, 0x20 ; 32 + 670: a8 f4 brcc .+42 ; 0x69c + 672: 8b 32 cpi r24, 0x2B ; 43 + 674: 61 f0 breq .+24 ; 0x68e + 676: 28 f4 brcc .+10 ; 0x682 + 678: 80 32 cpi r24, 0x20 ; 32 + 67a: 51 f0 breq .+20 ; 0x690 + 67c: 83 32 cpi r24, 0x23 ; 35 + 67e: 71 f4 brne .+28 ; 0x69c + 680: 0b c0 rjmp .+22 ; 0x698 + 682: 8d 32 cpi r24, 0x2D ; 45 + 684: 39 f0 breq .+14 ; 0x694 + 686: 80 33 cpi r24, 0x30 ; 48 + 688: 49 f4 brne .+18 ; 0x69c + 68a: 21 60 ori r18, 0x01 ; 1 + 68c: 28 c0 rjmp .+80 ; 0x6de + 68e: 22 60 ori r18, 0x02 ; 2 + 690: 24 60 ori r18, 0x04 ; 4 + 692: 25 c0 rjmp .+74 ; 0x6de + 694: 28 60 ori r18, 0x08 ; 8 + 696: 23 c0 rjmp .+70 ; 0x6de + 698: 20 61 ori r18, 0x10 ; 16 + 69a: 21 c0 rjmp .+66 ; 0x6de + 69c: 27 fd sbrc r18, 7 + 69e: 27 c0 rjmp .+78 ; 0x6ee + 6a0: 38 2f mov r19, r24 + 6a2: 30 53 subi r19, 0x30 ; 48 + 6a4: 3a 30 cpi r19, 0x0A ; 10 + 6a6: 78 f4 brcc .+30 ; 0x6c6 + 6a8: 26 ff sbrs r18, 6 + 6aa: 06 c0 rjmp .+12 ; 0x6b8 + 6ac: fa e0 ldi r31, 0x0A ; 10 + 6ae: 5f 9e mul r5, r31 + 6b0: 30 0d add r19, r0 + 6b2: 11 24 eor r1, r1 + 6b4: 53 2e mov r5, r19 + 6b6: 13 c0 rjmp .+38 ; 0x6de + 6b8: 8a e0 ldi r24, 0x0A ; 10 + 6ba: 38 9e mul r3, r24 + 6bc: 30 0d add r19, r0 + 6be: 11 24 eor r1, r1 + 6c0: 33 2e mov r3, r19 + 6c2: 20 62 ori r18, 0x20 ; 32 + 6c4: 0c c0 rjmp .+24 ; 0x6de + 6c6: 8e 32 cpi r24, 0x2E ; 46 + 6c8: 21 f4 brne .+8 ; 0x6d2 + 6ca: 26 fd sbrc r18, 6 + 6cc: 71 c1 rjmp .+738 ; 0x9b0 <__stack+0x151> + 6ce: 20 64 ori r18, 0x40 ; 64 + 6d0: 06 c0 rjmp .+12 ; 0x6de + 6d2: 8c 36 cpi r24, 0x6C ; 108 + 6d4: 11 f4 brne .+4 ; 0x6da + 6d6: 20 68 ori r18, 0x80 ; 128 + 6d8: 02 c0 rjmp .+4 ; 0x6de + 6da: 88 36 cpi r24, 0x68 ; 104 + 6dc: 41 f4 brne .+16 ; 0x6ee + 6de: f6 01 movw r30, r12 + 6e0: 93 fd sbrc r25, 3 + 6e2: 85 91 lpm r24, Z+ + 6e4: 93 ff sbrs r25, 3 + 6e6: 81 91 ld r24, Z+ + 6e8: 6f 01 movw r12, r30 + 6ea: 81 11 cpse r24, r1 + 6ec: c0 cf rjmp .-128 ; 0x66e + 6ee: 98 2f mov r25, r24 + 6f0: 95 54 subi r25, 0x45 ; 69 + 6f2: 93 30 cpi r25, 0x03 ; 3 + 6f4: 18 f0 brcs .+6 ; 0x6fc + 6f6: 90 52 subi r25, 0x20 ; 32 + 6f8: 93 30 cpi r25, 0x03 ; 3 + 6fa: 28 f4 brcc .+10 ; 0x706 + 6fc: 0c 5f subi r16, 0xFC ; 252 + 6fe: 1f 4f sbci r17, 0xFF ; 255 + 700: ff e3 ldi r31, 0x3F ; 63 + 702: f9 83 std Y+1, r31 ; 0x01 + 704: 0d c0 rjmp .+26 ; 0x720 + 706: 83 36 cpi r24, 0x63 ; 99 + 708: 31 f0 breq .+12 ; 0x716 + 70a: 83 37 cpi r24, 0x73 ; 115 + 70c: 71 f0 breq .+28 ; 0x72a + 70e: 83 35 cpi r24, 0x53 ; 83 + 710: 09 f0 breq .+2 ; 0x714 + 712: 5e c0 rjmp .+188 ; 0x7d0 + 714: 23 c0 rjmp .+70 ; 0x75c + 716: f8 01 movw r30, r16 + 718: 80 81 ld r24, Z + 71a: 89 83 std Y+1, r24 ; 0x01 + 71c: 0e 5f subi r16, 0xFE ; 254 + 71e: 1f 4f sbci r17, 0xFF ; 255 + 720: 44 24 eor r4, r4 + 722: 43 94 inc r4 + 724: 51 2c mov r5, r1 + 726: 54 01 movw r10, r8 + 728: 15 c0 rjmp .+42 ; 0x754 + 72a: 38 01 movw r6, r16 + 72c: f2 e0 ldi r31, 0x02 ; 2 + 72e: 6f 0e add r6, r31 + 730: 71 1c adc r7, r1 + 732: f8 01 movw r30, r16 + 734: a0 80 ld r10, Z + 736: b1 80 ldd r11, Z+1 ; 0x01 + 738: 26 ff sbrs r18, 6 + 73a: 03 c0 rjmp .+6 ; 0x742 + 73c: 65 2d mov r22, r5 + 73e: 70 e0 ldi r23, 0x00 ; 0 + 740: 02 c0 rjmp .+4 ; 0x746 + 742: 6f ef ldi r22, 0xFF ; 255 + 744: 7f ef ldi r23, 0xFF ; 255 + 746: c5 01 movw r24, r10 + 748: 2c 87 std Y+12, r18 ; 0x0c + 74a: 0e 94 ee 04 call 0x9dc ; 0x9dc + 74e: 2c 01 movw r4, r24 + 750: 83 01 movw r16, r6 + 752: 2c 85 ldd r18, Y+12 ; 0x0c + 754: 6f e7 ldi r22, 0x7F ; 127 + 756: 26 2e mov r2, r22 + 758: 22 22 and r2, r18 + 75a: 18 c0 rjmp .+48 ; 0x78c + 75c: 38 01 movw r6, r16 + 75e: f2 e0 ldi r31, 0x02 ; 2 + 760: 6f 0e add r6, r31 + 762: 71 1c adc r7, r1 + 764: f8 01 movw r30, r16 + 766: a0 80 ld r10, Z + 768: b1 80 ldd r11, Z+1 ; 0x01 + 76a: 26 ff sbrs r18, 6 + 76c: 03 c0 rjmp .+6 ; 0x774 + 76e: 65 2d mov r22, r5 + 770: 70 e0 ldi r23, 0x00 ; 0 + 772: 02 c0 rjmp .+4 ; 0x778 + 774: 6f ef ldi r22, 0xFF ; 255 + 776: 7f ef ldi r23, 0xFF ; 255 + 778: c5 01 movw r24, r10 + 77a: 2c 87 std Y+12, r18 ; 0x0c + 77c: 0e 94 e3 04 call 0x9c6 ; 0x9c6 + 780: 2c 01 movw r4, r24 + 782: 2c 85 ldd r18, Y+12 ; 0x0c + 784: 50 e8 ldi r21, 0x80 ; 128 + 786: 25 2e mov r2, r21 + 788: 22 2a or r2, r18 + 78a: 83 01 movw r16, r6 + 78c: 23 fc sbrc r2, 3 + 78e: 1c c0 rjmp .+56 ; 0x7c8 + 790: 06 c0 rjmp .+12 ; 0x79e + 792: b7 01 movw r22, r14 + 794: 80 e2 ldi r24, 0x20 ; 32 + 796: 90 e0 ldi r25, 0x00 ; 0 + 798: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 79c: 3a 94 dec r3 + 79e: 83 2d mov r24, r3 + 7a0: 90 e0 ldi r25, 0x00 ; 0 + 7a2: 48 16 cp r4, r24 + 7a4: 59 06 cpc r5, r25 + 7a6: a8 f3 brcs .-22 ; 0x792 + 7a8: 0f c0 rjmp .+30 ; 0x7c8 + 7aa: f5 01 movw r30, r10 + 7ac: 27 fc sbrc r2, 7 + 7ae: 85 91 lpm r24, Z+ + 7b0: 27 fe sbrs r2, 7 + 7b2: 81 91 ld r24, Z+ + 7b4: 5f 01 movw r10, r30 + 7b6: b7 01 movw r22, r14 + 7b8: 90 e0 ldi r25, 0x00 ; 0 + 7ba: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 7be: 31 10 cpse r3, r1 + 7c0: 3a 94 dec r3 + 7c2: f1 e0 ldi r31, 0x01 ; 1 + 7c4: 4f 1a sub r4, r31 + 7c6: 51 08 sbc r5, r1 + 7c8: 41 14 cp r4, r1 + 7ca: 51 04 cpc r5, r1 + 7cc: 71 f7 brne .-36 ; 0x7aa + 7ce: ed c0 rjmp .+474 ; 0x9aa <__stack+0x14b> + 7d0: 84 36 cpi r24, 0x64 ; 100 + 7d2: 11 f0 breq .+4 ; 0x7d8 + 7d4: 89 36 cpi r24, 0x69 ; 105 + 7d6: 41 f5 brne .+80 ; 0x828 + 7d8: f8 01 movw r30, r16 + 7da: 27 ff sbrs r18, 7 + 7dc: 07 c0 rjmp .+14 ; 0x7ec + 7de: 60 81 ld r22, Z + 7e0: 71 81 ldd r23, Z+1 ; 0x01 + 7e2: 82 81 ldd r24, Z+2 ; 0x02 + 7e4: 93 81 ldd r25, Z+3 ; 0x03 + 7e6: 0c 5f subi r16, 0xFC ; 252 + 7e8: 1f 4f sbci r17, 0xFF ; 255 + 7ea: 08 c0 rjmp .+16 ; 0x7fc + 7ec: 60 81 ld r22, Z + 7ee: 71 81 ldd r23, Z+1 ; 0x01 + 7f0: 88 27 eor r24, r24 + 7f2: 77 fd sbrc r23, 7 + 7f4: 80 95 com r24 + 7f6: 98 2f mov r25, r24 + 7f8: 0e 5f subi r16, 0xFE ; 254 + 7fa: 1f 4f sbci r17, 0xFF ; 255 + 7fc: 4f e6 ldi r20, 0x6F ; 111 + 7fe: b4 2e mov r11, r20 + 800: b2 22 and r11, r18 + 802: 97 ff sbrs r25, 7 + 804: 09 c0 rjmp .+18 ; 0x818 + 806: 90 95 com r25 + 808: 80 95 com r24 + 80a: 70 95 com r23 + 80c: 61 95 neg r22 + 80e: 7f 4f sbci r23, 0xFF ; 255 + 810: 8f 4f sbci r24, 0xFF ; 255 + 812: 9f 4f sbci r25, 0xFF ; 255 + 814: f0 e8 ldi r31, 0x80 ; 128 + 816: bf 2a or r11, r31 + 818: 2a e0 ldi r18, 0x0A ; 10 + 81a: 30 e0 ldi r19, 0x00 ; 0 + 81c: a4 01 movw r20, r8 + 81e: 0e 94 25 05 call 0xa4a ; 0xa4a <__ultoa_invert> + 822: a8 2e mov r10, r24 + 824: a8 18 sub r10, r8 + 826: 43 c0 rjmp .+134 ; 0x8ae <__stack+0x4f> + 828: 85 37 cpi r24, 0x75 ; 117 + 82a: 31 f4 brne .+12 ; 0x838 + 82c: 3f ee ldi r19, 0xEF ; 239 + 82e: b3 2e mov r11, r19 + 830: b2 22 and r11, r18 + 832: 2a e0 ldi r18, 0x0A ; 10 + 834: 30 e0 ldi r19, 0x00 ; 0 + 836: 24 c0 rjmp .+72 ; 0x880 <__stack+0x21> + 838: 99 ef ldi r25, 0xF9 ; 249 + 83a: b9 2e mov r11, r25 + 83c: b2 22 and r11, r18 + 83e: 8f 36 cpi r24, 0x6F ; 111 + 840: b9 f0 breq .+46 ; 0x870 <__stack+0x11> + 842: 20 f4 brcc .+8 ; 0x84c + 844: 88 35 cpi r24, 0x58 ; 88 + 846: 09 f0 breq .+2 ; 0x84a + 848: b3 c0 rjmp .+358 ; 0x9b0 <__stack+0x151> + 84a: 0d c0 rjmp .+26 ; 0x866 <__stack+0x7> + 84c: 80 37 cpi r24, 0x70 ; 112 + 84e: 21 f0 breq .+8 ; 0x858 + 850: 88 37 cpi r24, 0x78 ; 120 + 852: 09 f0 breq .+2 ; 0x856 + 854: ad c0 rjmp .+346 ; 0x9b0 <__stack+0x151> + 856: 02 c0 rjmp .+4 ; 0x85c + 858: 20 e1 ldi r18, 0x10 ; 16 + 85a: b2 2a or r11, r18 + 85c: b4 fe sbrs r11, 4 + 85e: 0b c0 rjmp .+22 ; 0x876 <__stack+0x17> + 860: 84 e0 ldi r24, 0x04 ; 4 + 862: b8 2a or r11, r24 + 864: 08 c0 rjmp .+16 ; 0x876 <__stack+0x17> + 866: 24 ff sbrs r18, 4 + 868: 09 c0 rjmp .+18 ; 0x87c <__stack+0x1d> + 86a: e6 e0 ldi r30, 0x06 ; 6 + 86c: be 2a or r11, r30 + 86e: 06 c0 rjmp .+12 ; 0x87c <__stack+0x1d> + 870: 28 e0 ldi r18, 0x08 ; 8 + 872: 30 e0 ldi r19, 0x00 ; 0 + 874: 05 c0 rjmp .+10 ; 0x880 <__stack+0x21> + 876: 20 e1 ldi r18, 0x10 ; 16 + 878: 30 e0 ldi r19, 0x00 ; 0 + 87a: 02 c0 rjmp .+4 ; 0x880 <__stack+0x21> + 87c: 20 e1 ldi r18, 0x10 ; 16 + 87e: 32 e0 ldi r19, 0x02 ; 2 + 880: f8 01 movw r30, r16 + 882: b7 fe sbrs r11, 7 + 884: 07 c0 rjmp .+14 ; 0x894 <__stack+0x35> + 886: 60 81 ld r22, Z + 888: 71 81 ldd r23, Z+1 ; 0x01 + 88a: 82 81 ldd r24, Z+2 ; 0x02 + 88c: 93 81 ldd r25, Z+3 ; 0x03 + 88e: 0c 5f subi r16, 0xFC ; 252 + 890: 1f 4f sbci r17, 0xFF ; 255 + 892: 06 c0 rjmp .+12 ; 0x8a0 <__stack+0x41> + 894: 60 81 ld r22, Z + 896: 71 81 ldd r23, Z+1 ; 0x01 + 898: 80 e0 ldi r24, 0x00 ; 0 + 89a: 90 e0 ldi r25, 0x00 ; 0 + 89c: 0e 5f subi r16, 0xFE ; 254 + 89e: 1f 4f sbci r17, 0xFF ; 255 + 8a0: a4 01 movw r20, r8 + 8a2: 0e 94 25 05 call 0xa4a ; 0xa4a <__ultoa_invert> + 8a6: a8 2e mov r10, r24 + 8a8: a8 18 sub r10, r8 + 8aa: ff e7 ldi r31, 0x7F ; 127 + 8ac: bf 22 and r11, r31 + 8ae: b6 fe sbrs r11, 6 + 8b0: 0b c0 rjmp .+22 ; 0x8c8 <__stack+0x69> + 8b2: 2b 2d mov r18, r11 + 8b4: 2e 7f andi r18, 0xFE ; 254 + 8b6: a5 14 cp r10, r5 + 8b8: 50 f4 brcc .+20 ; 0x8ce <__stack+0x6f> + 8ba: b4 fe sbrs r11, 4 + 8bc: 0a c0 rjmp .+20 ; 0x8d2 <__stack+0x73> + 8be: b2 fc sbrc r11, 2 + 8c0: 08 c0 rjmp .+16 ; 0x8d2 <__stack+0x73> + 8c2: 2b 2d mov r18, r11 + 8c4: 2e 7e andi r18, 0xEE ; 238 + 8c6: 05 c0 rjmp .+10 ; 0x8d2 <__stack+0x73> + 8c8: 7a 2c mov r7, r10 + 8ca: 2b 2d mov r18, r11 + 8cc: 03 c0 rjmp .+6 ; 0x8d4 <__stack+0x75> + 8ce: 7a 2c mov r7, r10 + 8d0: 01 c0 rjmp .+2 ; 0x8d4 <__stack+0x75> + 8d2: 75 2c mov r7, r5 + 8d4: 24 ff sbrs r18, 4 + 8d6: 0d c0 rjmp .+26 ; 0x8f2 <__stack+0x93> + 8d8: fe 01 movw r30, r28 + 8da: ea 0d add r30, r10 + 8dc: f1 1d adc r31, r1 + 8de: 80 81 ld r24, Z + 8e0: 80 33 cpi r24, 0x30 ; 48 + 8e2: 11 f4 brne .+4 ; 0x8e8 <__stack+0x89> + 8e4: 29 7e andi r18, 0xE9 ; 233 + 8e6: 09 c0 rjmp .+18 ; 0x8fa <__stack+0x9b> + 8e8: 22 ff sbrs r18, 2 + 8ea: 06 c0 rjmp .+12 ; 0x8f8 <__stack+0x99> + 8ec: 73 94 inc r7 + 8ee: 73 94 inc r7 + 8f0: 04 c0 rjmp .+8 ; 0x8fa <__stack+0x9b> + 8f2: 82 2f mov r24, r18 + 8f4: 86 78 andi r24, 0x86 ; 134 + 8f6: 09 f0 breq .+2 ; 0x8fa <__stack+0x9b> + 8f8: 73 94 inc r7 + 8fa: 23 fd sbrc r18, 3 + 8fc: 14 c0 rjmp .+40 ; 0x926 <__stack+0xc7> + 8fe: 20 ff sbrs r18, 0 + 900: 0f c0 rjmp .+30 ; 0x920 <__stack+0xc1> + 902: 5a 2c mov r5, r10 + 904: 73 14 cp r7, r3 + 906: 60 f4 brcc .+24 ; 0x920 <__stack+0xc1> + 908: 53 0c add r5, r3 + 90a: 57 18 sub r5, r7 + 90c: 73 2c mov r7, r3 + 90e: 08 c0 rjmp .+16 ; 0x920 <__stack+0xc1> + 910: b7 01 movw r22, r14 + 912: 80 e2 ldi r24, 0x20 ; 32 + 914: 90 e0 ldi r25, 0x00 ; 0 + 916: 2c 87 std Y+12, r18 ; 0x0c + 918: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 91c: 73 94 inc r7 + 91e: 2c 85 ldd r18, Y+12 ; 0x0c + 920: 73 14 cp r7, r3 + 922: b0 f3 brcs .-20 ; 0x910 <__stack+0xb1> + 924: 04 c0 rjmp .+8 ; 0x92e <__stack+0xcf> + 926: 73 14 cp r7, r3 + 928: 10 f4 brcc .+4 ; 0x92e <__stack+0xcf> + 92a: 37 18 sub r3, r7 + 92c: 01 c0 rjmp .+2 ; 0x930 <__stack+0xd1> + 92e: 31 2c mov r3, r1 + 930: 24 ff sbrs r18, 4 + 932: 12 c0 rjmp .+36 ; 0x958 <__stack+0xf9> + 934: b7 01 movw r22, r14 + 936: 80 e3 ldi r24, 0x30 ; 48 + 938: 90 e0 ldi r25, 0x00 ; 0 + 93a: 2c 87 std Y+12, r18 ; 0x0c + 93c: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 940: 2c 85 ldd r18, Y+12 ; 0x0c + 942: 22 ff sbrs r18, 2 + 944: 1e c0 rjmp .+60 ; 0x982 <__stack+0x123> + 946: 21 ff sbrs r18, 1 + 948: 03 c0 rjmp .+6 ; 0x950 <__stack+0xf1> + 94a: 88 e5 ldi r24, 0x58 ; 88 + 94c: 90 e0 ldi r25, 0x00 ; 0 + 94e: 02 c0 rjmp .+4 ; 0x954 <__stack+0xf5> + 950: 88 e7 ldi r24, 0x78 ; 120 + 952: 90 e0 ldi r25, 0x00 ; 0 + 954: b7 01 movw r22, r14 + 956: 0c c0 rjmp .+24 ; 0x970 <__stack+0x111> + 958: 82 2f mov r24, r18 + 95a: 86 78 andi r24, 0x86 ; 134 + 95c: 91 f0 breq .+36 ; 0x982 <__stack+0x123> + 95e: 21 fd sbrc r18, 1 + 960: 02 c0 rjmp .+4 ; 0x966 <__stack+0x107> + 962: 80 e2 ldi r24, 0x20 ; 32 + 964: 01 c0 rjmp .+2 ; 0x968 <__stack+0x109> + 966: 8b e2 ldi r24, 0x2B ; 43 + 968: 27 fd sbrc r18, 7 + 96a: 8d e2 ldi r24, 0x2D ; 45 + 96c: b7 01 movw r22, r14 + 96e: 90 e0 ldi r25, 0x00 ; 0 + 970: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 974: 06 c0 rjmp .+12 ; 0x982 <__stack+0x123> + 976: b7 01 movw r22, r14 + 978: 80 e3 ldi r24, 0x30 ; 48 + 97a: 90 e0 ldi r25, 0x00 ; 0 + 97c: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 980: 5a 94 dec r5 + 982: a5 14 cp r10, r5 + 984: c0 f3 brcs .-16 ; 0x976 <__stack+0x117> + 986: aa 94 dec r10 + 988: f4 01 movw r30, r8 + 98a: ea 0d add r30, r10 + 98c: f1 1d adc r31, r1 + 98e: b7 01 movw r22, r14 + 990: 80 81 ld r24, Z + 992: 90 e0 ldi r25, 0x00 ; 0 + 994: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 998: a1 10 cpse r10, r1 + 99a: f5 cf rjmp .-22 ; 0x986 <__stack+0x127> + 99c: 06 c0 rjmp .+12 ; 0x9aa <__stack+0x14b> + 99e: b7 01 movw r22, r14 + 9a0: 80 e2 ldi r24, 0x20 ; 32 + 9a2: 90 e0 ldi r25, 0x00 ; 0 + 9a4: 0e 94 f9 04 call 0x9f2 ; 0x9f2 + 9a8: 3a 94 dec r3 + 9aa: 31 10 cpse r3, r1 + 9ac: f8 cf rjmp .-16 ; 0x99e <__stack+0x13f> + 9ae: 43 ce rjmp .-890 ; 0x636 + 9b0: f7 01 movw r30, r14 + 9b2: 26 81 ldd r18, Z+6 ; 0x06 + 9b4: 37 81 ldd r19, Z+7 ; 0x07 + 9b6: 02 c0 rjmp .+4 ; 0x9bc <__stack+0x15d> + 9b8: 2f ef ldi r18, 0xFF ; 255 + 9ba: 3f ef ldi r19, 0xFF ; 255 + 9bc: c9 01 movw r24, r18 + 9be: 2c 96 adiw r28, 0x0c ; 12 + 9c0: e2 e1 ldi r30, 0x12 ; 18 + 9c2: 0c 94 9f 05 jmp 0xb3e ; 0xb3e <__epilogue_restores__> -00000450 <_ZN3Can8spi_putcEh>: - mcp2515_bit_modify( CANCTRL, 0xE0, 0); -} +000009c6 : + 9c6: fc 01 movw r30, r24 + 9c8: 05 90 lpm r0, Z+ + 9ca: 61 50 subi r22, 0x01 ; 1 + 9cc: 70 40 sbci r23, 0x00 ; 0 + 9ce: 01 10 cpse r0, r1 + 9d0: d8 f7 brcc .-10 ; 0x9c8 + 9d2: 80 95 com r24 + 9d4: 90 95 com r25 + 9d6: 8e 0f add r24, r30 + 9d8: 9f 1f adc r25, r31 + 9da: 08 95 ret -uint8_t Can::spi_putc( uint8_t data ) { - // Sendet ein Byte - SPDR = data; - 450: 6f b9 out 0x0f, r22 ; 15 - - // Wartet bis Byte gesendet wurde - while( !( SPSR & (1< - - return SPDR; - 456: 8f b1 in r24, 0x0f ; 15 -} - 458: 08 95 ret +000009dc : + 9dc: fc 01 movw r30, r24 + 9de: 61 50 subi r22, 0x01 ; 1 + 9e0: 70 40 sbci r23, 0x00 ; 0 + 9e2: 01 90 ld r0, Z+ + 9e4: 01 10 cpse r0, r1 + 9e6: d8 f7 brcc .-10 ; 0x9de + 9e8: 80 95 com r24 + 9ea: 90 95 com r25 + 9ec: 8e 0f add r24, r30 + 9ee: 9f 1f adc r25, r31 + 9f0: 08 95 ret -0000045a <_ZN3Can22mcp2515_write_registerEhh>: +000009f2 : + 9f2: 0f 93 push r16 + 9f4: 1f 93 push r17 + 9f6: cf 93 push r28 + 9f8: df 93 push r29 + 9fa: 8c 01 movw r16, r24 + 9fc: eb 01 movw r28, r22 + 9fe: 8b 81 ldd r24, Y+3 ; 0x03 + a00: 81 fd sbrc r24, 1 + a02: 03 c0 rjmp .+6 ; 0xa0a + a04: 0f ef ldi r16, 0xFF ; 255 + a06: 1f ef ldi r17, 0xFF ; 255 + a08: 1a c0 rjmp .+52 ; 0xa3e + a0a: 82 ff sbrs r24, 2 + a0c: 0d c0 rjmp .+26 ; 0xa28 + a0e: 2e 81 ldd r18, Y+6 ; 0x06 + a10: 3f 81 ldd r19, Y+7 ; 0x07 + a12: 8c 81 ldd r24, Y+4 ; 0x04 + a14: 9d 81 ldd r25, Y+5 ; 0x05 + a16: 28 17 cp r18, r24 + a18: 39 07 cpc r19, r25 + a1a: 64 f4 brge .+24 ; 0xa34 + a1c: e8 81 ld r30, Y + a1e: f9 81 ldd r31, Y+1 ; 0x01 + a20: 01 93 st Z+, r16 + a22: f9 83 std Y+1, r31 ; 0x01 + a24: e8 83 st Y, r30 + a26: 06 c0 rjmp .+12 ; 0xa34 + a28: e8 85 ldd r30, Y+8 ; 0x08 + a2a: f9 85 ldd r31, Y+9 ; 0x09 + a2c: 80 2f mov r24, r16 + a2e: 09 95 icall + a30: 89 2b or r24, r25 + a32: 41 f7 brne .-48 ; 0xa04 + a34: 8e 81 ldd r24, Y+6 ; 0x06 + a36: 9f 81 ldd r25, Y+7 ; 0x07 + a38: 01 96 adiw r24, 0x01 ; 1 + a3a: 9f 83 std Y+7, r25 ; 0x07 + a3c: 8e 83 std Y+6, r24 ; 0x06 + a3e: c8 01 movw r24, r16 + a40: df 91 pop r29 + a42: cf 91 pop r28 + a44: 1f 91 pop r17 + a46: 0f 91 pop r16 + a48: 08 95 ret -void Can::mcp2515_write_register( uint8_t adress, uint8_t data ) -{ - 45a: 0f 93 push r16 - 45c: 1f 93 push r17 - 45e: cf 93 push r28 - 460: df 93 push r29 - 462: ec 01 movw r28, r24 - 464: 06 2f mov r16, r22 - 466: 14 2f mov r17, r20 - // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< - spi_putc(adress); - 470: 60 2f mov r22, r16 - 472: ce 01 movw r24, r28 - 474: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - spi_putc(data); - 478: 61 2f mov r22, r17 - 47a: ce 01 movw r24, r28 - 47c: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - - // /CS Leitung wieder freigeben - CANPORT_CS |= (1<: + a4a: fa 01 movw r30, r20 + a4c: aa 27 eor r26, r26 + a4e: 28 30 cpi r18, 0x08 ; 8 + a50: 51 f1 breq .+84 ; 0xaa6 <__ultoa_invert+0x5c> + a52: 20 31 cpi r18, 0x10 ; 16 + a54: 81 f1 breq .+96 ; 0xab6 <__ultoa_invert+0x6c> + a56: e8 94 clt + a58: 6f 93 push r22 + a5a: 6e 7f andi r22, 0xFE ; 254 + a5c: 6e 5f subi r22, 0xFE ; 254 + a5e: 7f 4f sbci r23, 0xFF ; 255 + a60: 8f 4f sbci r24, 0xFF ; 255 + a62: 9f 4f sbci r25, 0xFF ; 255 + a64: af 4f sbci r26, 0xFF ; 255 + a66: b1 e0 ldi r27, 0x01 ; 1 + a68: 3e d0 rcall .+124 ; 0xae6 <__ultoa_invert+0x9c> + a6a: b4 e0 ldi r27, 0x04 ; 4 + a6c: 3c d0 rcall .+120 ; 0xae6 <__ultoa_invert+0x9c> + a6e: 67 0f add r22, r23 + a70: 78 1f adc r23, r24 + a72: 89 1f adc r24, r25 + a74: 9a 1f adc r25, r26 + a76: a1 1d adc r26, r1 + a78: 68 0f add r22, r24 + a7a: 79 1f adc r23, r25 + a7c: 8a 1f adc r24, r26 + a7e: 91 1d adc r25, r1 + a80: a1 1d adc r26, r1 + a82: 6a 0f add r22, r26 + a84: 71 1d adc r23, r1 + a86: 81 1d adc r24, r1 + a88: 91 1d adc r25, r1 + a8a: a1 1d adc r26, r1 + a8c: 20 d0 rcall .+64 ; 0xace <__ultoa_invert+0x84> + a8e: 09 f4 brne .+2 ; 0xa92 <__ultoa_invert+0x48> + a90: 68 94 set + a92: 3f 91 pop r19 + a94: 2a e0 ldi r18, 0x0A ; 10 + a96: 26 9f mul r18, r22 + a98: 11 24 eor r1, r1 + a9a: 30 19 sub r19, r0 + a9c: 30 5d subi r19, 0xD0 ; 208 + a9e: 31 93 st Z+, r19 + aa0: de f6 brtc .-74 ; 0xa58 <__ultoa_invert+0xe> + aa2: cf 01 movw r24, r30 + aa4: 08 95 ret + aa6: 46 2f mov r20, r22 + aa8: 47 70 andi r20, 0x07 ; 7 + aaa: 40 5d subi r20, 0xD0 ; 208 + aac: 41 93 st Z+, r20 + aae: b3 e0 ldi r27, 0x03 ; 3 + ab0: 0f d0 rcall .+30 ; 0xad0 <__ultoa_invert+0x86> + ab2: c9 f7 brne .-14 ; 0xaa6 <__ultoa_invert+0x5c> + ab4: f6 cf rjmp .-20 ; 0xaa2 <__ultoa_invert+0x58> + ab6: 46 2f mov r20, r22 + ab8: 4f 70 andi r20, 0x0F ; 15 + aba: 40 5d subi r20, 0xD0 ; 208 + abc: 4a 33 cpi r20, 0x3A ; 58 + abe: 18 f0 brcs .+6 ; 0xac6 <__ultoa_invert+0x7c> + ac0: 49 5d subi r20, 0xD9 ; 217 + ac2: 31 fd sbrc r19, 1 + ac4: 40 52 subi r20, 0x20 ; 32 + ac6: 41 93 st Z+, r20 + ac8: 02 d0 rcall .+4 ; 0xace <__ultoa_invert+0x84> + aca: a9 f7 brne .-22 ; 0xab6 <__ultoa_invert+0x6c> + acc: ea cf rjmp .-44 ; 0xaa2 <__ultoa_invert+0x58> + ace: b4 e0 ldi r27, 0x04 ; 4 + ad0: a6 95 lsr r26 + ad2: 97 95 ror r25 + ad4: 87 95 ror r24 + ad6: 77 95 ror r23 + ad8: 67 95 ror r22 + ada: ba 95 dec r27 + adc: c9 f7 brne .-14 ; 0xad0 <__ultoa_invert+0x86> + ade: 00 97 sbiw r24, 0x00 ; 0 + ae0: 61 05 cpc r22, r1 + ae2: 71 05 cpc r23, r1 + ae4: 08 95 ret + ae6: 9b 01 movw r18, r22 + ae8: ac 01 movw r20, r24 + aea: 0a 2e mov r0, r26 + aec: 06 94 lsr r0 + aee: 57 95 ror r21 + af0: 47 95 ror r20 + af2: 37 95 ror r19 + af4: 27 95 ror r18 + af6: ba 95 dec r27 + af8: c9 f7 brne .-14 ; 0xaec <__ultoa_invert+0xa2> + afa: 62 0f add r22, r18 + afc: 73 1f adc r23, r19 + afe: 84 1f adc r24, r20 + b00: 95 1f adc r25, r21 + b02: a0 1d adc r26, r0 + b04: 08 95 ret -0000048c <_ZN3Can18mcp2515_bit_modifyEhhh>: - - return data; -} +00000b06 <__prologue_saves__>: + b06: 2f 92 push r2 + b08: 3f 92 push r3 + b0a: 4f 92 push r4 + b0c: 5f 92 push r5 + b0e: 6f 92 push r6 + b10: 7f 92 push r7 + b12: 8f 92 push r8 + b14: 9f 92 push r9 + b16: af 92 push r10 + b18: bf 92 push r11 + b1a: cf 92 push r12 + b1c: df 92 push r13 + b1e: ef 92 push r14 + b20: ff 92 push r15 + b22: 0f 93 push r16 + b24: 1f 93 push r17 + b26: cf 93 push r28 + b28: df 93 push r29 + b2a: cd b7 in r28, 0x3d ; 61 + b2c: de b7 in r29, 0x3e ; 62 + b2e: ca 1b sub r28, r26 + b30: db 0b sbc r29, r27 + b32: 0f b6 in r0, 0x3f ; 63 + b34: f8 94 cli + b36: de bf out 0x3e, r29 ; 62 + b38: 0f be out 0x3f, r0 ; 63 + b3a: cd bf out 0x3d, r28 ; 61 + b3c: 09 94 ijmp -void Can::mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data) -{ - 48c: ff 92 push r15 - 48e: 0f 93 push r16 - 490: 1f 93 push r17 - 492: cf 93 push r28 - 494: df 93 push r29 - 496: ec 01 movw r28, r24 - 498: f6 2e mov r15, r22 - 49a: 04 2f mov r16, r20 - 49c: 12 2f mov r17, r18 - // /CS des MCP2515 auf Low ziehen - CANPORT_CS &= ~(1< - spi_putc(adress); - 4a6: 6f 2d mov r22, r15 - 4a8: ce 01 movw r24, r28 - 4aa: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - spi_putc(mask); - 4ae: 60 2f mov r22, r16 - 4b0: ce 01 movw r24, r28 - 4b2: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - spi_putc(data); - 4b6: 61 2f mov r22, r17 - 4b8: ce 01 movw r24, r28 - 4ba: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - - // /CS Leitung wieder freigeben - CANPORT_CS |= (1<: + b3e: 2a 88 ldd r2, Y+18 ; 0x12 + b40: 39 88 ldd r3, Y+17 ; 0x11 + b42: 48 88 ldd r4, Y+16 ; 0x10 + b44: 5f 84 ldd r5, Y+15 ; 0x0f + b46: 6e 84 ldd r6, Y+14 ; 0x0e + b48: 7d 84 ldd r7, Y+13 ; 0x0d + b4a: 8c 84 ldd r8, Y+12 ; 0x0c + b4c: 9b 84 ldd r9, Y+11 ; 0x0b + b4e: aa 84 ldd r10, Y+10 ; 0x0a + b50: b9 84 ldd r11, Y+9 ; 0x09 + b52: c8 84 ldd r12, Y+8 ; 0x08 + b54: df 80 ldd r13, Y+7 ; 0x07 + b56: ee 80 ldd r14, Y+6 ; 0x06 + b58: fd 80 ldd r15, Y+5 ; 0x05 + b5a: 0c 81 ldd r16, Y+4 ; 0x04 + b5c: 1b 81 ldd r17, Y+3 ; 0x03 + b5e: aa 81 ldd r26, Y+2 ; 0x02 + b60: b9 81 ldd r27, Y+1 ; 0x01 + b62: ce 0f add r28, r30 + b64: d1 1d adc r29, r1 + b66: 0f b6 in r0, 0x3f ; 63 + b68: f8 94 cli + b6a: de bf out 0x3e, r29 ; 62 + b6c: 0f be out 0x3f, r0 ; 63 + b6e: cd bf out 0x3d, r28 ; 61 + b70: ed 01 movw r28, r26 + b72: 08 95 ret -000004cc <_ZN3Can8init_canEv>: -void Can::init_spi() { - SPCR = (1<: + b74: f8 94 cli -void Can::init_can() { - 4cc: cf 93 push r28 - 4ce: df 93 push r29 - 4d0: ec 01 movw r28, r24 - - // MCP2515 per Software Reset zuruecksetzten, - // danach ist der MCP2515 im Configuration Mode - CANPORT_CS &= ~(1< - 4da: 8f e9 ldi r24, 0x9F ; 159 - 4dc: 9f e0 ldi r25, 0x0F ; 15 - 4de: 01 97 sbiw r24, 0x01 ; 1 - 4e0: f1 f7 brne .-4 ; 0x4de <_ZN3Can8init_canEv+0x12> - 4e2: 00 c0 rjmp .+0 ; 0x4e4 <_ZN3Can8init_canEv+0x18> - 4e4: 00 00 nop - _delay_ms(1); - CANPORT_CS |= (1< - 4f0: 00 c0 rjmp .+0 ; 0x4f2 <_ZN3Can8init_canEv+0x26> - 4f2: 00 00 nop - * Bus speed = 1 / (Total # of TQ) * TQ - * = 1 / 8 * TQ = 125 kHz - */ - - // BRP = 7 - mcp2515_write_register( CNF1, (1< - - // Prop Seg und Phase Seg1 einstellen - mcp2515_write_register( CNF2, (1< - - // Wake-up Filter deaktivieren, Phase Seg2 einstellen - mcp2515_write_register( CNF3, (1< - - // Aktivieren der Rx Buffer Interrupts - mcp2515_write_register( CANINTE, (1< - /* - * Einstellen der Filter - */ - - // Buffer 0 : Empfangen aller Nachrichten - mcp2515_write_register( RXB0CTRL, (1< - - // Buffer 1 : Empfangen aller Nachrichten - mcp2515_write_register( RXB1CTRL, (1< - - // Alle Bits der Empfangsmaske loeschen, - // damit werden alle Nachrichten empfangen - mcp2515_write_register( RXM0SIDH, 0 ); - 530: 40 e0 ldi r20, 0x00 ; 0 - 532: 60 e2 ldi r22, 0x20 ; 32 - 534: ce 01 movw r24, r28 - 536: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0SIDL, 0 ); - 53a: 40 e0 ldi r20, 0x00 ; 0 - 53c: 61 e2 ldi r22, 0x21 ; 33 - 53e: ce 01 movw r24, r28 - 540: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0EID8, 0 ); - 544: 40 e0 ldi r20, 0x00 ; 0 - 546: 62 e2 ldi r22, 0x22 ; 34 - 548: ce 01 movw r24, r28 - 54a: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0EID0, 0 ); - 54e: 40 e0 ldi r20, 0x00 ; 0 - 550: 63 e2 ldi r22, 0x23 ; 35 - 552: ce 01 movw r24, r28 - 554: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - - mcp2515_write_register( RXM1SIDH, 0 ); - 558: 40 e0 ldi r20, 0x00 ; 0 - 55a: 64 e2 ldi r22, 0x24 ; 36 - 55c: ce 01 movw r24, r28 - 55e: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1SIDL, 0 ); - 562: 40 e0 ldi r20, 0x00 ; 0 - 564: 65 e2 ldi r22, 0x25 ; 37 - 566: ce 01 movw r24, r28 - 568: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1EID8, 0 ); - 56c: 40 e0 ldi r20, 0x00 ; 0 - 56e: 66 e2 ldi r22, 0x26 ; 38 - 570: ce 01 movw r24, r28 - 572: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1EID0, 0 ); - 576: 40 e0 ldi r20, 0x00 ; 0 - 578: 67 e2 ldi r22, 0x27 ; 39 - 57a: ce 01 movw r24, r28 - 57c: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - /* - * Einstellen der Pin Funktionen - */ - - // Deaktivieren der Pins RXnBF Pins (High Impedance State) - mcp2515_write_register( BFPCTRL, 0 ); - 580: 40 e0 ldi r20, 0x00 ; 0 - 582: 6c e0 ldi r22, 0x0C ; 12 - 584: ce 01 movw r24, r28 - 586: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - - // TXnRTS Bits als Inputs schalten - mcp2515_write_register( TXRTSCTRL, 0 ); - 58a: 40 e0 ldi r20, 0x00 ; 0 - 58c: 6d e0 ldi r22, 0x0D ; 13 - 58e: ce 01 movw r24, r28 - 590: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> - - // Device zurueck in den normalen Modus versetzten - mcp2515_bit_modify( CANCTRL, 0xE0, 0); - 594: 20 e0 ldi r18, 0x00 ; 0 - 596: 40 ee ldi r20, 0xE0 ; 224 - 598: 6f e0 ldi r22, 0x0F ; 15 - 59a: ce 01 movw r24, r28 - 59c: 0e 94 46 02 call 0x48c ; 0x48c <_ZN3Can18mcp2515_bit_modifyEhhh> -} - 5a0: df 91 pop r29 - 5a2: cf 91 pop r28 - 5a4: 08 95 ret - -000005a6 <_ZN3CanC1Ev>: - -#define CANDDR_CS DDRB -#define CANPORT_CS PORTB -#define CANP_CS PINB4 - -Can::Can() { - 5a6: cf 93 push r28 - 5a8: df 93 push r29 - 5aa: ec 01 movw r28, r24 - init_pin(); - 5ac: 0e 94 1a 02 call 0x434 ; 0x434 <_ZN3Can8init_pinEv> - init_spi(); - 5b0: ce 01 movw r24, r28 - 5b2: 0e 94 23 02 call 0x446 ; 0x446 <_ZN3Can8init_spiEv> - init_can(); - 5b6: ce 01 movw r24, r28 - 5b8: 0e 94 66 02 call 0x4cc ; 0x4cc <_ZN3Can8init_canEv> -} - 5bc: df 91 pop r29 - 5be: cf 91 pop r28 - 5c0: 08 95 ret - -000005c2 <_ZN3Can16can_send_messageEP10CANMessage>: - // /CS Leitung wieder freigeben - CANPORT_CS |= (1< - status = spi_putc(0xff); - 5e8: 6f ef ldi r22, 0xFF ; 255 - 5ea: c8 01 movw r24, r16 - 5ec: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - 5f0: 89 83 std Y+1, r24 ; 0x01 - spi_putc(0xff); - 5f2: 6f ef ldi r22, 0xFF ; 255 - 5f4: c8 01 movw r24, r16 - 5f6: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - CANPORT_CS |= (1< - address = 0x00; - } - else if (bit_is_clear(status, 4)) { - 602: 89 81 ldd r24, Y+1 ; 0x01 - 604: 84 ff sbrs r24, 4 - 606: 09 c0 rjmp .+18 ; 0x61a <_ZN3Can16can_send_messageEP10CANMessage+0x58> - address = 0x02; - } - else if (bit_is_clear(status, 6)) { - 608: 89 81 ldd r24, Y+1 ; 0x01 - 60a: 86 fd sbrc r24, 6 - 60c: 69 c0 rjmp .+210 ; 0x6e0 <_ZN3Can16can_send_messageEP10CANMessage+0x11e> - address = 0x04; - 60e: 68 94 set - 610: bb 24 eor r11, r11 - 612: b2 f8 bld r11, 2 - 614: 05 c0 rjmp .+10 ; 0x620 <_ZN3Can16can_send_messageEP10CANMessage+0x5e> - * 4 TXB1CNTRL.TXREQ - * 6 TXB2CNTRL.TXREQ - */ - - if (bit_is_clear(status, 2)) { - address = 0x00; - 616: b1 2c mov r11, r1 - 618: 03 c0 rjmp .+6 ; 0x620 <_ZN3Can16can_send_messageEP10CANMessage+0x5e> - } - else if (bit_is_clear(status, 4)) { - address = 0x02; - 61a: 68 94 set - 61c: bb 24 eor r11, r11 - 61e: b1 f8 bld r11, 1 - /* Alle Puffer sind belegt, - Nachricht kann nicht verschickt werden */ - return 0; - } - - CANPORT_CS &= ~(1< - - // Standard ID einstellen - spi_putc((uint8_t) (p_message->id>>3)); - 62c: f6 01 movw r30, r12 - 62e: 80 81 ld r24, Z - 630: 91 81 ldd r25, Z+1 ; 0x01 - 632: bc 01 movw r22, r24 - 634: 76 95 lsr r23 - 636: 67 95 ror r22 - 638: 76 95 lsr r23 - 63a: 67 95 ror r22 - 63c: 76 95 lsr r23 - 63e: 67 95 ror r22 - 640: c8 01 movw r24, r16 - 642: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - spi_putc((uint8_t) (p_message->id<<5)); - 646: f6 01 movw r30, r12 - 648: 60 81 ld r22, Z - 64a: 62 95 swap r22 - 64c: 66 0f add r22, r22 - 64e: 60 7e andi r22, 0xE0 ; 224 - 650: c8 01 movw r24, r16 - 652: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - - // Extended ID - spi_putc(0x00); - 656: 60 e0 ldi r22, 0x00 ; 0 - 658: c8 01 movw r24, r16 - 65a: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - spi_putc(0x00); - 65e: 60 e0 ldi r22, 0x00 ; 0 - 660: c8 01 movw r24, r16 - 662: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - - uint8_t length = p_message->length; - 666: f6 01 movw r30, r12 - 668: a3 80 ldd r10, Z+3 ; 0x03 - 66a: f8 e0 ldi r31, 0x08 ; 8 - 66c: fa 15 cp r31, r10 - 66e: 18 f4 brcc .+6 ; 0x676 <_ZN3Can16can_send_messageEP10CANMessage+0xb4> - 670: 68 94 set - 672: aa 24 eor r10, r10 - 674: a3 f8 bld r10, 3 - if (length > 8) { - length = 8; - } - - // Ist die Nachricht ein "Remote Transmit Request" ? - if (p_message->rtr) - 676: f6 01 movw r30, r12 - 678: 82 81 ldd r24, Z+2 ; 0x02 - 67a: 88 23 and r24, r24 - 67c: 31 f0 breq .+12 ; 0x68a <_ZN3Can16can_send_messageEP10CANMessage+0xc8> - { - /* Ein RTR hat zwar eine Laenge, - aber enthaelt keine Daten */ - - // Nachrichten Laenge + RTR einstellen - spi_putc((1< - 688: 19 c0 rjmp .+50 ; 0x6bc <_ZN3Can16can_send_messageEP10CANMessage+0xfa> - } - else - { - // Nachrichten Laenge einstellen - spi_putc(length); - 68a: 6a 2d mov r22, r10 - 68c: c8 01 movw r24, r16 - 68e: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - - // Daten - for (uint8_t i=0;i - - // /CS Leitung wieder freigeben - CANPORT_CS |= (1<data[i]); - 6aa: f7 01 movw r30, r14 - 6ac: 61 91 ld r22, Z+ - 6ae: 7f 01 movw r14, r30 - 6b0: c8 01 movw r24, r16 - 6b2: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - { - // Nachrichten Laenge einstellen - spi_putc(length); - - // Daten - for (uint8_t i=0;i - spi_putc(p_message->data[i]); - } - } - CANPORT_CS |= (1< - spi_putc(SPI_RTS | 0x01); - 6c6: 61 e8 ldi r22, 0x81 ; 129 - 6c8: c8 01 movw r24, r16 - 6ca: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - 6ce: 05 c0 rjmp .+10 ; 0x6da <_ZN3Can16can_send_messageEP10CANMessage+0x118> - } else { - spi_putc(SPI_RTS | address); - 6d0: 6b 2d mov r22, r11 - 6d2: 60 68 ori r22, 0x80 ; 128 - 6d4: c8 01 movw r24, r16 - 6d6: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> - } - CANPORT_CS |= (1< - address = 0x04; - } - else { - /* Alle Puffer sind belegt, - Nachricht kann nicht verschickt werden */ - return 0; - 6e0: 80 e0 ldi r24, 0x00 ; 0 - spi_putc(SPI_RTS | address); - } - CANPORT_CS |= (1<: -#define OUTPUTDDR DDRC -#define OUTPUTM PINC4 -#define OUTPUTA PINC5 - -Output::Output() { - OUTPUTDDR |= (1<: -} - -void Output::AudioOff() { - OUTPUTPORT &= ~(1<: -} - -void Output::AudioOn() { - OUTPUTPORT |= (1<: - 70a: ee 0f add r30, r30 - 70c: ff 1f adc r31, r31 - -0000070e <__tablejump__>: - 70e: 05 90 lpm r0, Z+ - 710: f4 91 lpm r31, Z - 712: e0 2d mov r30, r0 - 714: 09 94 ijmp - -00000716 <_exit>: - 716: f8 94 cli - -00000718 <__stop_program>: - 718: ff cf rjmp .-2 ; 0x718 <__stop_program> +00000b76 <__stop_program>: + b76: ff cf rjmp .-2 ; 0xb76 <__stop_program> diff --git a/Button/Button/Debug/Button.map b/Button/Button/Debug/Button.map index f2b7870..e32fe53 100644 --- a/Button/Button/Debug/Button.map +++ b/Button/Button/Debug/Button.map @@ -10,26 +10,34 @@ c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu- Button.o (__do_global_ctors) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_ctors.o) (__tablejump__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + Button.o (sprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (vfprintf) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen_P) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (strnlen) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (fputc) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) (__ultoa_invert) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (__prologue_saves__) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) (__epilogue_restores__) Discarded input sections .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o + .group 0x00000000 0x8 Button.o .text 0x00000000 0x0 Button.o - .text 0x00000000 0x0 Can.o - .bss 0x00000000 0x0 Can.o - .text._ZN3Can21mcp2515_read_registerEh - 0x00000000 0x2c Can.o - .text._ZN3Can22mcp2515_read_rx_statusEv - 0x00000000 0x2e Can.o - .text._ZN3Can15can_get_messageEP10CANMessage - 0x00000000 0x124 Can.o - .text 0x00000000 0x0 Output.o - .bss 0x00000000 0x0 Output.o - .text._ZN6Output8MotorOffEv - 0x00000000 0x4 Output.o - .text._ZN6Output7MotorOnEv - 0x00000000 0x4 Output.o .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) .text.libgcc.mul @@ -94,6 +102,40 @@ Discarded input sections 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) .text.libgcc.fmul 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .text 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .bss 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.mul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.div + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.builtins + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + .text.libgcc.fmul + 0x00000000 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) Memory Configuration @@ -111,8 +153,6 @@ Linker script and memory map LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o LOAD Button.o -LOAD Can.o -LOAD Output.o START GROUP LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libm.a END GROUP @@ -212,7 +252,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x71a +.text 0x00000000 0xb78 *(.vectors) .vectors 0x00000000 0x54 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o 0x00000000 __vector_default @@ -294,57 +334,75 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x000000a6 __vector_20 0x000000aa . = ALIGN (0x2) *(.text.*) - .text.main 0x000000aa 0x30a Button.o - 0x000000aa main + .text._ZN4UartILm9600EE4sendEPKc.isra.2 + 0x000000aa 0x12 Button.o + .text._ZN6avrlib3pinINS_5portbELh5EE6outputEb.part.21 + 0x000000bc 0x4 Button.o + .text._ZN6avrlib3pinINS_5portbELh7EE6outputEb.part.22 + 0x000000c0 0x4 Button.o + .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE5colorEh.isra.11 + 0x000000c4 0x26 Button.o + .text._ZN3LedIN6avrlib5portcELi2ELi1ELi0EE4fadeEhhh.isra.12 + 0x000000ea 0x6a Button.o + .text._ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh + 0x00000154 0xe0 Button.o + 0x00000154 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEE4sendEh + .text._ZN6avrlib3pinINS_5portbELh4EE8make_lowEv + 0x00000234 0x6 Button.o + 0x00000234 _ZN6avrlib3pinINS_5portbELh4EE8make_lowEv + .text._ZN6avrlib3pinINS_5portbELh4EE9make_highEv + 0x0000023a 0x6 Button.o + 0x0000023a _ZN6avrlib3pinINS_5portbELh4EE9make_highEv + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh + 0x00000240 0x4c Button.o + 0x00000240 _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E22mcp2515_write_registerEhh + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv + 0x0000028c 0xc8 Button.o + 0x0000028c _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E8init_canEv + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage + 0x00000354 0x128 Button.o + 0x00000354 _ZN3CanI3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEES4_E16can_send_messageEP10CANMessage + .text.startup.main + 0x0000047c 0xaa Button.o + 0x0000047c main .text._ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev - 0x000003b4 0x42 Button.o - 0x000003b4 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev - 0x000003b4 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev - .text._GLOBAL__sub_I_l - 0x000003f6 0x3e Button.o - .text._ZN3Can8init_pinEv - 0x00000434 0x12 Can.o - 0x00000434 _ZN3Can8init_pinEv - .text._ZN3Can8init_spiEv - 0x00000446 0xa Can.o - 0x00000446 _ZN3Can8init_spiEv - .text._ZN3Can8spi_putcEh - 0x00000450 0xa Can.o - 0x00000450 _ZN3Can8spi_putcEh - .text._ZN3Can22mcp2515_write_registerEhh - 0x0000045a 0x32 Can.o - 0x0000045a _ZN3Can22mcp2515_write_registerEhh - .text._ZN3Can18mcp2515_bit_modifyEhhh - 0x0000048c 0x40 Can.o - 0x0000048c _ZN3Can18mcp2515_bit_modifyEhhh - .text._ZN3Can8init_canEv - 0x000004cc 0xda Can.o - 0x000004cc _ZN3Can8init_canEv - .text._ZN3CanC2Ev - 0x000005a6 0x1c Can.o - 0x000005a6 _ZN3CanC2Ev - 0x000005a6 _ZN3CanC1Ev - .text._ZN3Can16can_send_messageEP10CANMessage - 0x000005c2 0x138 Can.o - 0x000005c2 _ZN3Can16can_send_messageEP10CANMessage - .text._ZN6OutputC2Ev - 0x000006fa 0x8 Output.o - 0x000006fa _ZN6OutputC2Ev - 0x000006fa _ZN6OutputC1Ev - .text._ZN6Output8AudioOffEv - 0x00000702 0x4 Output.o - 0x00000702 _ZN6Output8AudioOffEv - .text._ZN6Output7AudioOnEv - 0x00000706 0x4 Output.o - 0x00000706 _ZN6Output7AudioOnEv - .text.libgcc 0x0000070a 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) - 0x0000070a __tablejump2__ - 0x0000070e __tablejump__ - 0x00000716 . = ALIGN (0x2) + 0x00000526 0x40 Button.o + 0x00000526 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev + 0x00000526 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev + .text.startup._GLOBAL__sub_I_o + 0x00000566 0x58 Button.o + .text.libgcc 0x000005be 0xc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + 0x000005be __tablejump2__ + 0x000005c2 __tablejump__ + .text.avr-libc + 0x000005ca 0x44 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + 0x000005ca sprintf + .text.avr-libc + 0x0000060e 0x3b8 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x0000060e vfprintf + .text.avr-libc + 0x000009c6 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + 0x000009c6 strnlen_P + .text.avr-libc + 0x000009dc 0x16 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + 0x000009dc strnlen + .text.avr-libc + 0x000009f2 0x58 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + 0x000009f2 fputc + .text.avr-libc + 0x00000a4a 0xbc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + 0x00000a4a __ultoa_invert + .text.libgcc.prologue + 0x00000b06 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + 0x00000b06 __prologue_saves__ + .text.libgcc.prologue + 0x00000b3e 0x36 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) + 0x00000b3e __epilogue_restores__ + 0x00000b74 . = ALIGN (0x2) *(.fini9) - .fini9 0x00000716 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) - 0x00000716 _exit - 0x00000716 exit + .fini9 0x00000b74 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) + 0x00000b74 _exit + 0x00000b74 exit *(.fini9) *(.fini8) *(.fini8) @@ -363,54 +421,59 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x00000716 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) + .fini0 0x00000b74 0x4 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) *(.fini0) - 0x0000071a _etext = . + 0x00000b78 _etext = . -.data 0x00800060 0x24 load address 0x0000071a +.data 0x00800060 0x3a load address 0x00000b78 0x00800060 PROVIDE (__data_start, .) *(.data) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o .data 0x00800060 0x0 Button.o - .data 0x00800060 0x0 Can.o - .data 0x00800060 0x0 Output.o .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_exit.o) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_copy_data.o) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_clear_bss.o) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_ctors.o) .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_tablejump.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_prologue.o) + .data 0x00800060 0x0 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr5\libgcc.a(_epilogue.o) *(.data*) *(.rodata) *(.rodata*) .rodata.str1.1 - 0x00800060 0x23 Button.o + 0x00800060 0x3a Button.o *(.gnu.linkonce.d*) - 0x00800084 . = ALIGN (0x2) - *fill* 0x00800083 0x1 - 0x00800084 _edata = . - 0x00800084 PROVIDE (__data_end, .) + 0x0080009a . = ALIGN (0x2) + 0x0080009a _edata = . + 0x0080009a PROVIDE (__data_end, .) -.bss 0x00800084 0x5 - 0x00800084 PROVIDE (__bss_start, .) +.bss 0x0080009a 0x6 + 0x0080009a PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800084 0x5 Button.o - 0x00800084 c - 0x00800085 o - 0x00800086 s - 0x00800087 u - 0x00800088 l + .bss 0x0080009a 0x6 Button.o + 0x0080009a c + 0x0080009c s + 0x0080009d u + 0x0080009e l + 0x0080009f o *(.bss*) *(COMMON) - 0x00800089 PROVIDE (__bss_end, .) - 0x0000071a __data_load_start = LOADADDR (.data) - 0x0000073e __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x008000a0 PROVIDE (__bss_end, .) + 0x00000b78 __data_load_start = LOADADDR (.data) + 0x00000bb2 __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800089 0x0 - 0x00800089 PROVIDE (__noinit_start, .) +.noinit 0x008000a0 0x0 + 0x008000a0 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800089 PROVIDE (__noinit_end, .) - 0x00800089 _end = . - 0x00800089 PROVIDE (__heap_start, .) + 0x008000a0 PROVIDE (__noinit_end, .) + 0x008000a0 _end = . + 0x008000a0 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -431,13 +494,19 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .user_signatures *(.user_signatures*) -.stab 0x00000000 0x6cc +.stab 0x00000000 0xc84 *(.stab) .stab 0x00000000 0x6cc c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o + .stab 0x000006cc 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen_P.o) + 0xa8 (size before relaxing) + .stab 0x00000768 0x9c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x00000804 0x480 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(ultoa_invert.o) + 0x48c (size before relaxing) -.stabstr 0x00000000 0x82 +.stabstr 0x00000000 0x1aa *(.stabstr) - .stabstr 0x00000000 0x82 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o + .stabstr 0x00000000 0x1aa c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5/crtm32a.o .stab.excl *(.stab.excl) @@ -455,8 +524,9 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.comment) .comment 0x00000000 0x2f Button.o 0x30 (size before relaxing) - .comment 0x00000000 0x30 Can.o - .comment 0x00000000 0x30 Output.o + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .comment 0x00000000 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug *(.debug) @@ -470,57 +540,66 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0xe0 +.debug_aranges 0x00000000 0xe8 *(.debug_aranges) .debug_aranges - 0x00000000 0x30 Button.o + 0x00000000 0x88 Button.o .debug_aranges - 0x00000030 0x70 Can.o + 0x00000088 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) .debug_aranges - 0x000000a0 0x40 Output.o + 0x000000a8 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_aranges + 0x000000c8 0x20 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x40d0 +.debug_info 0x00000000 0x3726 *(.debug_info) - .debug_info 0x00000000 0x312e Button.o - .debug_info 0x0000312e 0xdae Can.o - .debug_info 0x00003edc 0x1f4 Output.o + .debug_info 0x00000000 0x2e65 Button.o + .debug_info 0x00002e65 0x204 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_info 0x00003069 0x549 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_info 0x000035b2 0x174 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x841 +.debug_abbrev 0x00000000 0x938 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x429 Button.o - .debug_abbrev 0x00000429 0x2fa Can.o - .debug_abbrev 0x00000723 0x11e Output.o + .debug_abbrev 0x00000000 0x547 Button.o + .debug_abbrev 0x00000547 0x12a c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_abbrev 0x00000671 0x1d6 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_abbrev 0x00000847 0xf1 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_line 0x00000000 0x723 +.debug_line 0x00000000 0x9b9 *(.debug_line) - .debug_line 0x00000000 0x3cc Button.o - .debug_line 0x000003cc 0x2ce Can.o - .debug_line 0x0000069a 0x89 Output.o + .debug_line 0x00000000 0x493 Button.o + .debug_line 0x00000493 0x14e c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_line 0x000005e1 0x2fe c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_line 0x000008df 0xda c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_frame 0x00000000 0x254 +.debug_frame 0x00000000 0x280 *(.debug_frame) - .debug_frame 0x00000000 0x54 Button.o - .debug_frame 0x00000054 0x19c Can.o - .debug_frame 0x000001f0 0x64 Output.o + .debug_frame 0x00000000 0x1cc Button.o + .debug_frame 0x000001cc 0x30 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_frame 0x000001fc 0x4c c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_frame 0x00000248 0x38 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) -.debug_str 0x00000000 0x10df +.debug_str 0x00000000 0x179d *(.debug_str) - .debug_str 0x00000000 0x108e Button.o - 0x10f0 (size before relaxing) - .debug_str 0x0000108e 0x32 Can.o - 0x33e (size before relaxing) - .debug_str 0x000010c0 0x1f Output.o - 0x150 (size before relaxing) + .debug_str 0x00000000 0x15ee Button.o + 0x165c (size before relaxing) + .debug_str 0x000015ee 0xa3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + 0x127 (size before relaxing) + .debug_str 0x00001691 0xbf c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + 0x198 (size before relaxing) + .debug_str 0x00001750 0x4d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) + 0xf8 (size before relaxing) -.debug_loc 0x00000000 0xf51 +.debug_loc 0x00000000 0xce9 *(.debug_loc) - .debug_loc 0x00000000 0x80a Button.o - .debug_loc 0x0000080a 0x721 Can.o - .debug_loc 0x00000f2b 0x26 Output.o + .debug_loc 0x00000000 0x6b8 Button.o + .debug_loc 0x000006b8 0x21 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_loc 0x000006d9 0x51d c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_loc 0x00000bf6 0xf3 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_macinfo *(.debug_macinfo) @@ -528,11 +607,12 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x5e0 +.debug_ranges 0x00000000 0x128 *(.debug_ranges) - .debug_ranges 0x00000000 0x550 Button.o - .debug_ranges 0x00000550 0x60 Can.o - .debug_ranges 0x000005b0 0x30 Output.o + .debug_ranges 0x00000000 0xf8 Button.o + .debug_ranges 0x000000f8 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(sprintf.o) + .debug_ranges 0x00000108 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(vfprintf_std.o) + .debug_ranges 0x00000118 0x10 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/../../../../avr/lib/avr5\libc.a(fputc.o) .debug_macro *(.debug_macro) diff --git a/Button/Button/Debug/Button.srec b/Button/Button/Debug/Button.srec index 35b1326..aa3a95a 100644 --- a/Button/Button/Debug/Button.srec +++ b/Button/Button/Debug/Button.srec @@ -4,116 +4,187 @@ S11300100C9453000C9453000C9453000C94530010 S11300200C9453000C9453000C9453000C94530000 S11300300C9453000C9453000C9453000C945300F0 S11300400C9453000C9453000C9453000C945300E0 -S11300500C945300FB0111241FBECFE5D8E0DEBF92 -S1130060CDBF10E0A0E6B0E0EAE1F7E002C0059001 -S11300700D92A438B107D9F720E0A4E8B0E001C09C -S11300801D92A938B207E1F710E0C6E5D0E004C03C -S11300902297FE010E948703C435D107C9F70E9445 -S11300A055000C948B030C940000CF93DF93CDB7D1 -S11300B0DEB72C970FB6F894DEBF0FBECDBFA8985D -S11300C0A09AA99AA19AAA9AA29AEAE6F0E089E4E7 -S11300D05D9BFECF8CB981918111FACF83E291E0CF -S11300E09A8389831B8282E08C838FEA8D838EEFCF -S11300F08E8340E050E0BAE060E070E023C08F2FD0 -S1130100A898A09AA99AA19AAA9AA29A8F5F8F3FB7 -S1130110B9F7121613060CF43FC10AC0A898A09AA6 -S1130120A998A19AAA9AA29A019682179307B4F35E -S1130130A15019F0EF3F19F72FC14F5F5F4F4F3FA9 -S1130140510561F0E42F9A01AB2FF42FF3CF5D9B9F -S1130150FECF8CB931960DC0F5010BC0E0E6F0E09E -S1130160E12CF12C0F2EF5E0DF2EF02D00E010E055 -S11301705F0180818111EBCF85E890E00E948303C9 -S1130180BE016F5F7F4F84E890E00E94E1028FE937 -S11301909FE00197F1F700C0000085E890E00E941D -S11301A08103A70123C0872FA898A09AA998A19A90 -S11301B0AA9AA29A8F5F8F3FB9F7121613060CF40E -S11301C0EDC00AC0A898A09AA99AA19AAA9AA29A3C -S11301D0019682179307B4F3E15019F06F3F19F7B2 -S11301E0DDC04F5F5F4F4F3F510549F1642F9A01C6 -S11301F0ED2D742FF3CF872FA898A09AA99AA19ACE -S1130200AA9AA29A8F5F8F3FB9F7121613060CF4BD -S1130210C7C00AC0A898A09AA99AA19AAA98A29A13 -S1130220019682179307B4F3E15019F06F3F19F761 -S1130230B7C04F5F5F4F4F3F510511F42AC0A7016C -S1130240642F9A01ED2D742FF1CF872FA898A09ACF -S1130250A99AA19AAA98A29A8F5F8F3FB9F712160A -S113026013060CF49FC00AC0A89AA09AA99AA19A4E -S1130270AA98A29A019682179307B4F3E15019F051 -S11302806F3F19F78FC04F5F5F4F4F3F510511F418 -S11302902AC0A701642F9A01ED2D742FF1CF872F67 -S11302A0A89AA09AA99AA19AAA98A29A8F5F8F3F16 -S11302B0B9F7121613060CF477C00AC0A89AA09ACC -S11302C0A998A19AAA98A29A019682179307B4F3BF -S11302D0E15019F06F3F19F767C04F5F5F4F4F3F11 -S11302E0510511F42AC0A701642F9A01ED2D742F32 -S11302F0F1CF872FA89AA09AA998A19AAA98A29A0E -S11303008F5F8F3FB9F7121613060CF44FC00AC063 -S1130310A89AA09AA998A19AAA9AA29A0196821731 -S11303209307B4F3E15019F06F3F19F73FC04F5FE3 -S11303305F4F4F3F510511F429C0A701642F9A0163 -S1130340ED2D742FF1CF872FA89AA09AA998A19A7E -S1130350AA9AA29A8F5F8F3FB9F71216130644F137 -S11303600AC0A898A09AA998A19AAA9AA29A0196B2 -S113037082179307B4F3E15019F06F3F21F718C0C7 -S11303804F5F5F4F4F3F510511F4E6CEA701642F35 -S11303909A01ED2D742FF1CFCB01C0CEC80112CF3D -S11303A0C80138CFC80160CFC80188CFC801B0CF19 -S11303B0C801D7CF86E080BD88E08AB987E689B9CD -S11303C0E7E7F0E085E55D9BFECF8CB98191811173 -S11303D0FACFBD9AC598BD9ABF9AC798BF9ABC9ADE -S11303E0C49ABC9ABE98C698C698BE9A80E58DB940 -S11303F081E08EB90895A29AA19AA09A86E080BD60 -S113040088E08AB987E689B9E7E7F0E085E55D9B8E -S1130410FECF8CB981918111FACF86E890E00E94D9 -S1130420DA0185E890E00E947D0384E890E00E9470 -S1130430D302089587B3806A87BB88B38F7188BB62 -S1130440BC9AC49A089580E58DB981E08EB9089567 -S11304506FB9779BFECF8FB108950F931F93CF93FE -S1130460DF93EC01062F142FC49862E00E94280247 -S1130470602FCE010E942802612FCE010E94280223 -S1130480C49ADF91CF911F910F910895FF920F931A -S11304901F93CF93DF93EC01F62E042F122FC498F1 -S11304A065E00E9428026F2DCE010E942802602F71 -S11304B0CE010E942802612FCE010E942802C49A14 -S11304C0DF91CF911F910F91FF900895CF93DF9308 -S11304D0EC01C49860EC0E9428028FE99FE0019728 -S11304E0F1F700C00000C49A8FE39CE90197F1F78B -S11304F000C0000047E06AE2CE010E942D0240E9FC -S113050069E2CE010E942D0242E068E2CE010E941F -S11305102D0243E06BE2CE010E942D0240E660E62C -S1130520CE010E942D0240E660E7CE010E942D021A -S113053040E060E2CE010E942D0240E061E2CE0183 -S11305400E942D0240E062E2CE010E942D0240E0B2 -S113055063E2CE010E942D0240E064E2CE010E94DB -S11305602D0240E065E2CE010E942D0240E066E2E9 -S1130570CE010E942D0240E067E2CE010E942D02CE -S113058040E06CE0CE010E942D0240E06DE0CE011F -S11305900E942D0220E040EE6FE0CE010E94460250 -S11305A0DF91CF910895CF93DF93EC010E941A025B -S11305B0CE010E942302CE010E946602DF91CF91F8 -S11305C00895AF92BF92CF92DF92EF92FF920F9372 -S11305D01F93CF93DF931F92CDB7DEB78C016B01CE -S11305E0C49860EA0E9428026FEFC8010E942802A2 -S11305F089836FEFC8010E942802C49A898182FF0F -S11306000AC0898184FF09C0898186FD69C0689414 -S1130610BB24B2F805C0B12C03C06894BB24B1F864 -S1130620C4986B2D6064C8010E942802F601808181 -S11306309181BC01769567957695679576956795D2 -S1130640C8010E942802F60160816295660F607EEF -S1130650C8010E94280260E0C8010E94280260E0EC -S1130660C8010E942802F601A380F8E0FA1518F4E4 -S11306706894AA24A3F8F6018281882331F06A2DB4 -S11306806064C8010E94280219C06A2DC8010E9432 -S11306902802AA2099F07601F4E0EF0EF11CAA9446 -S11306A08A2D90E00596C80ED91EF70161917F014D -S11306B0C8010E942802EC14FD04B9F7C49A000092 -S11306C0C498B11005C061E8C8010E94280205C0A1 -S11306D06B2D6068C8010E942802C49A81E001C0A1 -S11306E080E00F90DF91CF911F910F91FF90EF90D9 -S11306F0DF90CF90BF90AF90089584B3806384BBA4 -S11307000895AD980895AD9A0895EE0FFF1F0590D2 -S10D0710F491E02D0994F894FFCF52 -S113071A5374756666210D0A00496E697420646F04 -S113072A6E65210D0A005561727420646F6E65212D -S107073A0D0A0000A0 +S11300500C945300B30211241FBECFE5D8E0DEBFD9 +S1130060CDBF10E0A0E6B0E0E8E7FBE002C00590F9 +S11300700D92AA39B107D9F720E0AAE9B0E001C08E +S11300801D92A03AB207E1F710E0C6E5D0E004C043 +S11300902297FE010E94E102C435D107C9F70E94EC +S11300A03E020C94BA050C940000FC0103C05D9B55 +S11300B0FECF8CB981918111FACF0895BD9A08952C +S11300C0BF9A089580FF02C0A89A01C0A898A09A78 +S11300D081FF02C0A99A01C0A998A19A82FF02C017 +S11300E0AA9A01C0AA98A29A0895BF92CF92DF92C9 +S11300F0EF92FF920F931F93CF93DF93D82EC62EC8 +S1130100B42EC0E0D0E019C01E2D8D2D0E946200D7 +S11301101F5F1F3FD1F700E010E005C08C2D0E9447 +S113012062000F5F1F4F0C171D07C4F3F394FB10FD +S1130130EBCF2196CF3FD10519F0EC2EF12CF7CF60 +S1130140DF91CF911F910F91FF90EF90DF90CF90AF +S1130150BF900895EF92FF920F931F93CF93DF9375 +S1130160CDB7DEB7E2970FB6F894DEBF0FBECDBFB2 +S1130170E62E1F926F9380E690E09F938F938E01FB +S11301800F5F1F4F1F930F930E94E502C8010E9447 +S11301905500EFB80F900F900F900F900F900F90A5 +S11301A0779BFECF8FB118E0F12CFF0CC7980E940B +S11301B06000E7FE02C0C59A01C0C5980E945E00B7 +S11301C085E08A95F1F70000B69B02C081E0F82A29 +S11301D085E08A95F1F70000C79A0E9460008AE0E2 +S11301E08A95F1F700C0EE0C1150F9F61F92FF92B8 +S11301F02AE630E03F932F938E010F5F1F4F1F932A +S11302000F930E94E502C8010E9455000F900F90C1 +S11302100F900F900F900F908F2DE2960FB6F894D9 +S1130220DEBF0FBECDBFDF91CF911F910F91FF9025 +S1130230EF900895C498BC9A0895C49ABC9A0895FE +S1130240FF920F931F93CF93DF931F92CDB7DEB727 +S1130250F82E092F162F49830E941A0162E08F2D70 +S1130260902F0E94AA00612F8F2D902F0E94AA0028 +S11302704981642F8F2D902F0E94AA000F90DF9147 +S1130280CF911F910F91FF900C941D01CF93DF9399 +S1130290EC010E941A0160ECCE010E94AA008FE9D1 +S11302A09FE00197F1F700C000000E941D018FE359 +S11302B09CE90197F1F700C0000047E06AE2CE0133 +S11302C00E94200140E969E2CE010E94200142E03F +S11302D068E2CE010E94200143E06BE2CE010E945D +S11302E0200140E660E6CE010E94200140E660E77E +S11302F0CE010E94200140E060E2CE010E94200174 +S113030040E061E2CE010E94200140E062E2CE01C1 +S11303100E94200140E063E2CE010E94200140E0FF +S113032064E2CE010E94200140E065E2CE010E9419 +S1130330200140E066E2CE010E94200140E067E235 +S1130340CE010E94200140E06CE0CE01DF91CF910C +S11303500C942001AF92BF92CF92DF92EF92FF9262 +S11303600F931F93CF93DF931F92CDB7DEB76C012A +S11303708B010E941A0160EAC6010E94AA006FEF75 +S1130380C6010E94AA0089836FEFC6010E94AA00D9 +S11303900E941D01898182FF09C0898184FF08C0F0 +S11303A0898186FD5EC034E0B32E04C0B12C02C046 +S11303B022E0B22E0E941A016B2D6064C6010E94D5 +S11303C0AA00F8016081718193E0769567959A950A +S11303D0E1F7C6010E94AA00F80160816295660FE8 +S11303E0607EC6010E94AA0060E0C6010E94AA00C5 +S11303F060E0C6010E94AA00F801A380F8E0FA15A3 +S113040010F488E0A82EF80182816A2D882329F04F +S11304106064C6010E94AA0012C0C6010E94AA001C +S1130420E12CF12C0AC0F801EE0DFF1D6481C60118 +S11304300E94AA00FFEFEF1AFF0AEA14A0F30E9439 +S11304401D0100000E941A01B11002C061E802C03F +S11304506B2D6068C6010E94AA000E941D0181E004 +S113046001C080E00F90DF91CF911F910F91FF9019 +S1130470EF90DF90CF90BF90AF900895CF93DF932C +S1130480CDB7DEB72C970FB6F894DEBF0FBECDBF45 +S113049086E00E94620087E790E00E94550083E2B4 +S11304A091E09A8389831B8282E08C838FEA8D8317 +S11304B08EEF8E834AE064E086E00E94750084E853 +S11304C090E00E945500BE016F5F7F4F8AE990E083 +S11304D00E94AA0145E066E084E00E94750045E0C0 +S11304E062E086E00E94750045E063E082E00E94DD +S11304F0750045E061E083E00E94750045E065E039 +S113050081E00E94750045E064E085E00E9475008A +S11305102AEA36EE86E991E021503040804090404E +S1130520D9F70000CCCF87E689B988E08AB986E894 +S113053080BD8DE890E00E9455000E945E00C59841 +S11305400E945E000E946000C7980E946000BC9AEE +S11305500E941D01BE98C698C698BE9A80E58DB9C2 +S113056081E08EB908951F93CF93DF93A59AAD9838 +S1130570A59AA49AAC98A49AA29AA19AA09A17E6CA +S113058019B9D8E0DAB9C6E8C0BD8DE890E00E9498 +S113059055008CE990E00E9493028AE990E00E9461 +S11305A0930219B9DAB9C0BD8DE890E00E945500F4 +S11305B08AE990E0DF91CF911F910C944601EE0FF0 +S11305C0FF1F0590F491E02D0994AEE0B0E0EBEE4E +S11305D0F2E00C9491050D891E8986E08C831A83C0 +S11305E009838FEF9FE79E838D83CE014996AC01EB +S11305F06F89788DCE0101960E940703EF81F885FB +S1130600E00FF11F10822E96E4E00C94AD05ACE0EF +S1130610B0E0EDE0F3E00C9483057C016B018A010A +S1130620FC0117821682838181FFC6C188248394CA +S1130630912C8C0E9D1EF7019381F60193FD8591FB +S113064093FF81916F01882309F4B2C1853239F493 +S113065093FD859193FF81916F01853229F4B70150 +S113066090E00E94F904E7CF512C312C20E0203295 +S1130670A8F48B3261F028F4803251F0833271F4A3 +S11306800BC08D3239F0803349F4216028C02260D8 +S1130690246025C0286023C0206121C027FD27C015 +S11306A0382F30533A3078F426FF06C0FAE05F9EC4 +S11306B0300D1124532E13C08AE0389E300D1124BE +S11306C0332E20620CC08E3221F426FD71C12064C9 +S11306D006C08C3611F4206802C0883641F4F60155 +S11306E093FD859193FF81916F018111C0CF982F64 +S11306F09554933018F09052933028F40C5F1F4FA8 +S1130700FFE3F9830DC0833631F0833771F083350D +S113071009F05EC023C0F801808189830E5F1F4FFA +S113072044244394512C540115C03801F2E06F0E57 +S1130730711CF801A080B18026FF03C0652D70E014 +S113074002C06FEF7FEFC5012C870E94EE042C01DD +S113075083012C856FE7262E222218C03801F2E08F +S11307606F0E711CF801A080B18026FF03C0652DB7 +S113077070E002C06FEF7FEFC5012C870E94E30495 +S11307802C012C8550E8252E222A830123FC1CC031 +S113079006C0B70180E290E00E94F9043A94832DE8 +S11307A090E048165906A8F30FC0F50127FC85917F +S11307B027FE81915F01B70190E00E94F904311096 +S11307C03A94F1E04F1A51084114510471F7EDC005 +S11307D0843611F0893641F5F80127FF07C060819E +S11307E07181828193810C5F1F4F08C06081718188 +S11307F0882777FD8095982F0E5F1F4F4FE6B42E04 +S1130800B22297FF09C090958095709561957F4FAE +S11308108F4F9F4FF0E8BF2A2AE030E0A4010E94E6 +S11308202505A82EA81843C0853731F43FEEB32E12 +S1130830B2222AE030E024C099EFB92EB2228F36DA +S1130840B9F020F4883509F0B3C00DC0803721F029 +S1130850883709F0ADC002C020E1B22AB4FE0BC053 +S113086084E0B82A08C024FF09C0E6E0BE2A06C016 +S113087028E030E005C020E130E002C020E132E0B1 +S1130880F801B7FE07C060817181828193810C5F9A +S11308901F4F06C06081718180E090E00E5F1F4FA2 +S11308A0A4010E942505A82EA818FFE7BF22B6FEC2 +S11308B00BC02B2D2E7FA51450F4B4FE0AC0B2FC3D +S11308C008C02B2D2E7E05C07A2C2B2D03C07A2C2C +S11308D001C0752C24FF0DC0FE01EA0DF11D8081BD +S11308E0803311F4297E09C022FF06C073947394E7 +S11308F004C0822F867809F0739423FD14C020FF6E +S11309000FC05A2C731460F4530C5718732C08C07E +S1130910B70180E290E02C870E94F90473942C853F +S11309207314B0F304C0731410F4371801C0312CDD +S113093024FF12C0B70180E390E02C870E94F904E1 +S11309402C8522FF1EC021FF03C088E590E002C071 +S113095088E790E0B7010CC0822F867891F021FDE2 +S113096002C080E201C08BE227FD8DE2B70190E076 +S11309700E94F90406C0B70180E390E00E94F904E4 +S11309805A94A514C0F3AA94F401EA0DF11DB70119 +S1130990808190E00E94F904A110F5CF06C0B70150 +S11309A080E290E00E94F9043A943110F8CF43CEEB +S11309B0F7012681378102C02FEF3FEFC9012C9642 +S11309C0E2E10C949F05FC01059061507040011018 +S11309D0D8F7809590958E0F9F1F0895FC01615064 +S11309E0704001900110D8F7809590958E0F9F1F4D +S11309F008950F931F93CF93DF938C01EB018B81A9 +S1130A0081FD03C00FEF1FEF1AC082FF0DC02E81BE +S1130A103F818C819D812817390764F4E881F9812D +S1130A200193F983E88306C0E885F985802F099549 +S1130A30892B41F78E819F8101969F838E83C80104 +S1130A40DF91CF911F910F910895FA01AA272830C1 +S1130A5051F1203181F1E8946F936E7F6E5F7F4F87 +S1130A608F4F9F4FAF4FB1E03ED0B4E03CD0670F03 +S1130A70781F891F9A1FA11D680F791F8A1F911D56 +S1130A80A11D6A0F711D811D911DA11D20D009F4A6 +S1130A9068943F912AE0269F11243019305D3193E8 +S1130AA0DEF6CF010895462F4770405D4193B3E0D1 +S1130AB00FD0C9F7F6CF462F4F70405D4A3318F078 +S1130AC0495D31FD4052419302D0A9F7EACFB4E029 +S1130AD0A6959795879577956795BA95C9F70097E1 +S1130AE06105710508959B01AC010A2E0694579582 +S1130AF0479537952795BA95C9F7620F731F841FD9 +S1130B00951FA01D08952F923F924F925F926F926E +S1130B107F928F929F92AF92BF92CF92DF92EF9289 +S1130B20FF920F931F93CF93DF93CDB7DEB7CA1B0A +S1130B30DB0B0FB6F894DEBF0FBECDBF09942A8835 +S1130B40398848885F846E847D848C849B84AA84DD +S1130B50B984C884DF80EE80FD800C811B81AA816A +S1130B60B981CE0FD11D0FB6F894DEBF0FBECDBF35 +S10B0B70ED010895F894FFCF94 +S1130B782D3E2030782530327800203C2D203078E6 +S1130B88253032780D0A00496E697420646F6E65E9 +S1130B98210D0A005374756666210D0A00556172A9 +S10D0BA87420646F6E65210D0A00CD S9030000FC diff --git a/Button/Button/Debug/Makefile b/Button/Button/Debug/Makefile index 4a71f8c..ec4934f 100644 --- a/Button/Button/Debug/Makefile +++ b/Button/Button/Debug/Makefile @@ -36,9 +36,7 @@ SUBDIRS := # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -../Button.cpp \ -../Can.cpp \ -../Output.cpp +../Button.cpp PREPROCESSING_SRCS += @@ -48,27 +46,19 @@ ASM_SRCS += OBJS += \ -Button.o \ -Can.o \ -Output.o +Button.o OBJS_AS_ARGS += \ -Button.o \ -Can.o \ -Output.o +Button.o C_DEPS += \ -Button.d \ -Can.d \ -Output.d +Button.d C_DEPS_AS_ARGS += \ -Button.d \ -Can.d \ -Output.d +Button.d OUTPUT_FILE_PATH +=Button.elf @@ -85,14 +75,10 @@ LIB_DEP+= - - - - ./%.o: .././%.cpp @echo Building file: $< @echo Invoking: AVR8/GNU C++ Compiler : - $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -O1 -ffunction-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega32a -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o"$@" "$<" + $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.2.876\avr8-gnu-toolchain\bin\avr-g++.exe$(QUOTE) -funsigned-char -funsigned-bitfields -DDEBUG -Os -ffunction-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega32a -c -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o"$@" "$<" @echo Finished building: $< diff --git a/Button/Button/Debug/makedep.mk b/Button/Button/Debug/makedep.mk index e6849a7..9317ab6 100644 --- a/Button/Button/Debug/makedep.mk +++ b/Button/Button/Debug/makedep.mk @@ -4,7 +4,3 @@ Button.cpp -Can.cpp - -Output.cpp - diff --git a/Button/Button/Output.cpp b/Button/Button/Output.cpp index b812c8b..03ef3c6 100644 --- a/Button/Button/Output.cpp +++ b/Button/Button/Output.cpp @@ -5,7 +5,7 @@ * Author: netz */ -#include "Output.h" +/*#include "Output.h" #define OUTPUTPORT PORTC #define OUTPUTDDR DDRC #define OUTPUTM PINC4 @@ -13,6 +13,7 @@ Output::Output() { OUTPUTDDR |= (1< +class Output { + public: + Output() { + init(); + } + void AudioOn() { + audio::make_high(); + } + void AudioOff() { + audio::make_low(); + } + void MotorOn() { + motor::make_high(); + } + void MotorOff() { + motor::make_low(); + } + private: + void init() { + audio::make_output(); + AudioOff(); + motor::make_output(); + MotorOff(); + } + const typedef avrlib::pin motor; + const typedef avrlib::pin audio; +}; + + +#endif /* OUTPUT_H_ */ \ No newline at end of file diff --git a/Button/Button/uart.hpp b/Button/Button/uart.hpp index 4d04510..f0161b3 100644 --- a/Button/Button/uart.hpp +++ b/Button/Button/uart.hpp @@ -29,9 +29,9 @@ class Uart { } private: void init() { - UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 - UCSRB = /*(1<