From adfa389abe49f4c0d136f46a3340fd9214b5599c Mon Sep 17 00:00:00 2001 From: Tristan Krause Date: Tue, 26 Mar 2019 15:02:58 +0100 Subject: [PATCH] int test geht --- B15F.aps | 2 +- B15F.elf | Bin 11552 -> 11972 bytes B15F.hex | 191 ++++++++++++++++++++++++++------------------------- Makefile | 2 +- b15f.aws | 2 +- main.cpp | 25 ++++++- requests.cpp | 18 +++++ requests.h | 16 +++++ usart.cpp | 16 +++++ usart.h | 5 ++ 10 files changed, 179 insertions(+), 98 deletions(-) create mode 100644 requests.cpp create mode 100644 requests.h diff --git a/B15F.aps b/B15F.aps index 08b5532..e608e9b 100644 --- a/B15F.aps +++ b/B15F.aps @@ -1 +1 @@ -B15F22-Mar-2019 14:29:5426-Mar-2019 08:32:01241022-Mar-2019 14:29:5444, 19, 0, 730AVR GCCB15F.elfF:\JTAGICE mkIIATmega1284.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000spi.cppmain.cppMakefilemcp23s17.cppTLC5615.cppadu.cppselftest.cppglobal_vars.cppspi.hmcp23s17.hTLC5615.hadu.hselftest.hglobal_vars.hdefault\B15F.lssdefault\B15F.mapc++NOatmega128111B15F.elfc++\0-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefaultYESMakefileatmega1284111B15F.elfdefault\1C:\avr8-gnu-toolchain-win32_x86\avr\include\C:\avr8-gnu-toolchain-win32_x86\avr\lib\libc.a-Wall -gdwarf-2 -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exeC:\WinAVR-20100110\utils\bin\make.exeF:\spi.hF:\mcp23s17.hF:\TLC5615.hF:\adu.hF:\selftest.hF:\global_vars.hF:\spi.cppF:\main.cppF:\MakefileF:\mcp23s17.cppF:\TLC5615.cppF:\adu.cppF:\selftest.cppF:\global_vars.cpp00000main.cpp100001Makefile100002selftest.h100003selftest.cpp100004global_vars.cpp100005spi.h100006spi.cpp1 +B15F22-Mar-2019 14:29:5426-Mar-2019 15:02:47241022-Mar-2019 14:29:5444, 19, 0, 730AVR GCCB15F.elfF:\JTAGICE mkIIATmega1284.xmlfalseR00R01R02R03R04R05R06R07R08R09R10R11R12R13R14R15R16R17R18R19R20R21R22R23R24R25R26R27R28R29R30R31Auto000spi.cppmain.cppMakefilemcp23s17.cppTLC5615.cppadu.cppselftest.cppglobal_vars.cppusart.cpprequests.cppspi.hmcp23s17.hTLC5615.hadu.hselftest.hglobal_vars.husart.hrequests.hdefault\B15F.lssdefault\B15F.mapc++NOatmega128111B15F.elfc++\0-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefaultYESMakefileatmega1284111B15F.elfdefault\1C:\avr8-gnu-toolchain-win32_x86\avr\include\C:\avr8-gnu-toolchain-win32_x86\avr\lib\libc.a-Wall -gdwarf-2 -DF_CPU=20000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enumsdefault0C:\avr8-gnu-toolchain-win32_x86\bin\avr-g++.exeC:\WinAVR-20100110\utils\bin\make.exeF:\spi.hF:\mcp23s17.hF:\TLC5615.hF:\adu.hF:\selftest.hF:\global_vars.hF:\usart.hF:\requests.hF:\spi.cppF:\main.cppF:\MakefileF:\mcp23s17.cppF:\TLC5615.cppF:\adu.cppF:\selftest.cppF:\global_vars.cppF:\usart.cppF:\requests.cpp00000Makefile100001main.cpp100002requests.h100003requests.cpp100004usart.cpp1 diff --git a/B15F.elf b/B15F.elf index 3ecadd1ff5722250f4fe894a71ba06177f5480b9..eb2397583372d858c3d8048ec2a98ca77b30ae4a 100644 GIT binary patch delta 3069 zcmbW34{TFK9LMk8Yqv2yoSs-y; zhXN5ZX|9X7Xb>a*0gRAEA_TN9xPW4cgpgg_|l`y}*ckiu_7h{5#+ftS=(}%;QV}{c@9no~Gl82tFiobYQsE5^E-X4B0?2KN; zqQ=PQHAXLKvWt;;BtPPa_ON^r7Z=41KGEA4mNsS&zK8V?(v~*6Slw?d{eOd4^AH|F z$zAwH^NvD2PDKE~;sVu>?}Z+N>_3Z$E} zCWbPSr82~i@i(Q0`%E(3n#(o1_&Tq?8keO;5?Oxb{Fk^hI!19upFm%M-iE$cRHb^>BG1B(3+E>yY-`D*9ml z1in>#kheqZnp7A18u#63Hg;g>j6 z#RWcWV{9>GS>U_}^&vLxK>?cyo{In;)h8?huZ4qJotIkd>%eRT9W4U^wpjFAz`O8? z%Z8o;cn7=~yhP)W!gfROHqA!MfI&ByK8pq)1y95Gu>t~ea29Od;ROp1fNx`g0^R<; zNl*Tr@Wt_og_vcAn98ysxS%pNOP^2#P6lvmq#SHsa6b3|7Rb@939vpc~_}D%N*EP7!(`Fp7$*_-XJN?7-01SoABw zBl9sCjdtV*zXAJa!Q`(6JP%x;^IPC#MmdXsXN7RCi*$ohIYv&H?H~b7>m;dd7*n4AT)Yt#Wca>n2ISE zY+l%7;hEq*Oi#yr+Icnj00ODd*>ACL0%xNaNPUQH1DNmY`<4lxfoT`is208j%Tkqm z9&8TahGqU;a2D#rxZWxFm+Rz4W^5{Rq>5h)kE8|tO|SVkG;a_cQ`$4iW(J#2Kg;`yC@yLXS(e{hp` zJD-_1^XAQ)x4Gfx4n6yBr4g-9EnHaMT|~qqL_`LLzz7$!&_ms+JXONm0?B-IdoVDJr_g`yE|W^g8eB zq6hD=Jz``eOQwC@@ZM(=UE@j~H8v$!%A~^fs4;DC-|?PT`%cupzw`L+{5FTG#jso(YMwnT_!Pd${*XN*wmav~ z`gkYHd{$w57=5IA<)%0#-coZ!Qq#G9LiOE2u`!{fWkU5DYgGR&6Bjb3J<~Al`!Qa? z=)?F#K2j8u-9@Hl+FQu$KJWeSE;P}DW0~H|+^qxDnoVBb>~{YoJ?fBJZIT{yNM$ie zEe@$242cyEaqeMzNZg3zDoAz~uNe5UxP7jeBWIQGvIcMi-^8_4k3rvhBHlro$Yt<8 zn%5b01@d8yZ$UomawRUdfqQ)>NVE#NQg8&U+sp1`i)x|R1cx=QL(`oTs0B@bFRwy{*ufTf7XMB84 zV-7e17WjzaMYAYC7a@!Wh??AZ6X3#v6FGsk^6@PM2tzT5jH9kYxjq5*IM5jV|W?5ULyRiy10d`uj0E@XWNRp1cjjR7D7LU*Fz6O z*5|MC@zZ&>$Vngx#eM`U;b9o`8kne;f1nG}HisQ_DzqaXK>16}&Ko-Fvwz{^lRTd* zi1iV0BKHdv>#^NZW+cE3bOR-A1#<=d2J1Z#hO=JsCFae9-za=n|Z$L!y9_fXFmv@rXAUb%Fg>&B|PSHIKd9s zftO$!Jc25OF`p~)GgxohE8t(T0na|=vj-3>*TSpudK0-B;N1f2KLG^?EQew_0xWiU z3Aj*FLCtJO0xMnnZOkp)k|4Fgejc`3*S-#{SL_t{4en?>l{n&!;9Cvod@ta3C=5~P z>K)(_4DVhakk_j#ti#YCFaB{l=Oow*%bha>)|dU>#}~j?;XWPyyzO!DAhPf}Z3a@* z{pW+VyJ%5^Z^8p$l*M`Y0oE7X>htdhFTi1Wmvz^Ds&b zxuE8l{HbP}e6jY3EQ|FG493ohBk$B110U6|79r;!rJU6`TZZFvM7OMpS39~=N4G9s zBEqsW9uv#uUi@yAr{l4Z86m2ZL-E=2HtfxEW@AjW$@>~(#=gb!`NrCr*Z9jkL$%i9 UGSyfXy;e>1Ir8!zbsR+h02(iHzW@LL diff --git a/B15F.hex b/B15F.hex index 54d07c1..b59e8ef 100644 --- a/B15F.hex +++ b/B15F.hex @@ -6,100 +6,107 @@ :100050000C9464000C9464000C9464000C94640090 :100060000C9464000C9464000C9464000C94640080 :100070000C9464000C9464000C9464000C94640070 -:100080000C9464000C9464000C9464000A03112422 +:100080000C9464000C9464000C94640043031124E9 :100090001FBECFEFD0E4DEBFCDBF21E0A0E0B1E0D6 :1000A00001C01D92A231B207E1F710E0C7E4D0E031 -:1000B00004C02197FE010E943103C634D107C9F75D -:1000C0000E94F4020C943A030C9400001F920F92C9 +:1000B00004C02197FE010E946A03C634D107C9F724 +:1000C0000E9429030C9473030C9400001F920F925A :1000D0000FB60F92112491E085B1892785B92FEFD2 :1000E00034E38CE0215030408040E1F700C0000054 -:1000F000F3CF81E191E00E94B40060E08EE091E0F6 -:100100000E94F7006FEF8EE091E00E94180160E01E -:100110008BE091E00E94F7006FEF8BE091E00E948E -:1001200018016FEF88E091E00E94180181E091E0F2 -:100130000E94ED0180E091E00C94DA02CF9380E020 -:1001400091E00E94ED0280E091E00E94ED02C82F54 -:100150006FEF80E091E00E94E6026C2F80E091E07A -:10016000CF910C94E602089584B1806B84B92698EF -:100170008AB18C618AB980E58CBD81E08DBD8BB17F -:10018000837E8BB95A9A5B9A5C9A08958BB1837E71 -:100190008BB98BB160FD10C090E0892B8BB98BB10E -:1001A00061FD10C090E0892B8BB98BB162FD10C04E -:1001B00090E0892B8BB9089594E0892B8BB98BB192 -:1001C00061FFF0CF98E0892B8BB98BB162FFF0CF44 -:1001D00090E1892B8BB908956EBD0DB407FEFDCF5C -:1001E0008EB50895FC0171836083428308951F9347 -:1001F000CF93DF93EC01162F6A81888199810E9449 -:10020000C60060E4888199810E94EC0060E08881EA -:1002100099810E94EC00612F888199810E94EC00F5 -:1002200067E088819981DF91CF911F910C94C6007E -:100230001F93CF93DF93EC01162F6A8188819981F8 -:100240000E94C60060E4888199810E94EC0061E010 -:10025000888199810E94EC00612F888199810E9498 -:10026000EC0067E088819981DF91CF911F910C9418 -:10027000C6001F93CF93DF93EC01162F6A8188810C -:1002800099810E94C60060E4888199810E94EC00F7 -:1002900062E1888199810E94EC00612F88819981B7 -:1002A0000E94EC0067E088819981DF91CF911F91D6 -:1002B0000C94C6001F93CF93DF93EC01162F6A8135 -:1002C000888199810E94C60060E4888199810E949A -:1002D000EC0063E1888199810E94EC00612F8881A4 -:1002E00099810E94EC0067E088819981DF91CF912C -:1002F0001F910C94C6001F93CF93DF93EC016A818A -:10030000888199810E94C60061E4888199810E9458 -:10031000EC0062E1888199810E94EC0060E08881B4 -:1003200099810E94EC00182F67E0888199810E94D2 -:10033000C600812FDF91CF911F9108951F93CF9316 -:10034000DF93EC016A81888199810E94C60061E493 -:10035000888199810E94EC0063E1888199810E94E3 -:10036000EC0060E0888199810E94EC00182F67E022 -:10037000888199810E94C600812FDF91CF911F91C2 -:100380000895FC01428308950F931F93CF93DF9349 -:10039000EC018B016A81888199810E94C600B801B5 -:1003A0000024660F771F001C660F771F001C672F45 -:1003B000702D888199810E94EC00602F660F660F76 -:1003C000888199810E94EC0067E088819981DF91A2 -:1003D000CF911F910F910C94C60010927C0087E87A -:1003E00080937A00089580917C00807E682B6093D2 -:1003F0007C0080917A00806480937A0083EA91E0A7 -:100400000197F1F700C0000080917A0086FDFCCFD3 -:10041000809178009091790008950F931F93CF9366 -:10042000DF9361E08EE091E00E943901C1E0D0E00D -:1004300001E010E02FEF84E39CE0215080409040E9 -:10044000E1F700C00000B8010C2E01C0660F0A944D -:10045000EAF78EE091E00E9439012196C930D1057A -:1004600049F7DF91CF911F910F9108950F931F933B -:10047000CF93DF9361E08BE091E00E943901C1E00E -:10048000D0E001E010E02FEF84E39CE021508040B9 -:100490009040E1F700C00000B8010C2E01C0660FCB -:1004A0000A94EAF78BE091E00E9439012196C93065 -:1004B000D10549F7DF91CF911F910F910895CF9307 -:1004C000DF93C0E0D0E0BE0185E091E00E94C4016E -:1004D00087E893E10197F1F700C000002196C1156C -:1004E00094E0D90781F72FE78AE196E02150804018 -:1004F0009040E1F700C0000060E070E085E091E02E -:10050000DF91CF910C94C401CF93DF93C0E0D0E092 -:10051000BE0182E091E00E94C40187E893E1019767 -:10052000F1F700C000002196C11594E0D90781F7CA -:100530002FE78AE196E0215080409040E1F700C02B -:10054000000060E070E082E091E0DF91CF910C94D8 -:10055000C40160E081E091E00E94F301BC0185E00C -:1005600091E00E94C40161E081E091E00E94F3010A -:10057000BC0182E091E00E94C4018EE091E00E9403 -:100580009E01682F8EE091E00E94390188E091E0A1 -:100590000E949E01682F8BE091E00E943901D9CF23 -:1005A0000E940D020E9436020E945F020E94840295 -:1005B0000E94A90288E18093C10086E08093C20076 -:1005C0001092C5008FE18093C40008956093C60027 -:1005D0008091C00086FFFCCF08958091C00087FF06 -:1005E000FCCF8091C60008950E94790080E091E0E0 -:1005F0000E94ED0280E091E00E94ED02C82F6FEFB3 -:1006000080E091E00E94E6026C2F80E091E00E9481 -:10061000E602ECCF81E191E00E94B30042E061E1AB -:1006200071E08EE091E00E94F20043E061E171E050 -:100630008BE091E00E94F20045E061E171E088E02A -:1006400091E00E94F20040E061E171E085E091E01C -:100650000E94C10141E061E171E082E091E00C940F -:10066000C101EE0FFF1F0024001C0BBE0790F69186 -:08067000E02D0994F894FFCF7E +:1000F000F3CF81E191E00E94B00060E08EE091E0FA +:100100000E94F3006FEF8EE091E00E94140160E026 +:100110008BE091E00E94F3006FEF8BE091E00E9492 +:1001200014016FEF88E091E00E94140181E091E0FA +:100130000E94E90180E091E00C94D60280E091E019 +:100140000E94F202823049F0833029F0813009F0B8 +:1001500008950C940A030C941C030C941B0308953B +:1001600084B1806B84B926988AB18C618AB980E5A4 +:100170008CBD81E08DBD8BB1837E8BB95A9A5B9A21 +:100180005C9A08958BB1837E8BB98BB160FD10C0F2 +:1001900090E0892B8BB98BB161FD10C090E0892B69 +:1001A0008BB98BB162FD10C090E0892B8BB908959B +:1001B00094E0892B8BB98BB161FFF0CF98E0892B4C +:1001C0008BB98BB162FFF0CF90E1892B8BB9089589 +:1001D0006EBD0DB407FEFDCF8EB50895FC01718391 +:1001E0006083428308951F93CF93DF93EC01162F12 +:1001F0006A81888199810E94C20060E48881998126 +:100200000E94E80060E0888199810E94E800612FE7 +:10021000888199810E94E80067E088819981DF9157 +:10022000CF911F910C94C2001F93CF93DF93EC01E9 +:10023000162F6A81888199810E94C20060E48881BA +:1002400099810E94E80061E0888199810E94E8001C +:10025000612F888199810E94E80067E088819981F7 +:10026000DF91CF911F910C94C2001F93CF93DF9326 +:10027000EC01162F6A81888199810E94C20060E496 +:10028000888199810E94E80062E1888199810E94B9 +:10029000E800612F888199810E94E80067E08881E9 +:1002A0009981DF91CF911F910C94C2001F93CF933E +:1002B000DF93EC01162F6A81888199810E94C20028 +:1002C00060E4888199810E94E80063E188819981D6 +:1002D0000E94E800612F888199810E94E80067E010 +:1002E00088819981DF91CF911F910C94C2001F9357 +:1002F000CF93DF93EC016A81888199810E94C200CB +:1003000061E4888199810E94E80062E18881998195 +:100310000E94E80060E0888199810E94E800182F1F +:1003200067E0888199810E94C200812FDF91CF917F +:100330001F9108951F93CF93DF93EC016A81888109 +:1003400099810E94C20061E4888199810E94E8003D +:1003500063E1888199810E94E80060E08881998149 +:100360000E94E800182F67E0888199810E94C200EE +:10037000812FDF91CF911F910895FC014283089551 +:100380000F931F93CF93DF93EC018B016A818881D8 +:1003900099810E94C200B8010024660F771F001CDB +:1003A000660F771F001C672F702D888199810E942E +:1003B000E800602F660F660F888199810E94E8002F +:1003C00067E088819981DF91CF911F910F910C9403 +:1003D000C20010927C0087E880937A000895809193 +:1003E0007C00807E682B60937C0080917A00806422 +:1003F00080937A0083EA91E00197F1F700C0000052 +:1004000080917A0086FDFCCF8091780090917900F0 +:1004100008950F931F93CF93DF9361E08EE091E0F7 +:100420000E943501C1E0D0E001E010E02FEF84E34D +:100430009CE0215080409040E1F700C00000B801EE +:100440000C2E01C0660F0A94EAF78EE091E00E943C +:1004500035012196C930D10549F7DF91CF911F9120 +:100460000F9108950F931F93CF93DF9361E08BE07B +:1004700091E00E943501C1E0D0E001E010E02FEFF3 +:1004800084E39CE0215080409040E1F700C00000F0 +:10049000B8010C2E01C0660F0A94EAF78BE091E0D8 +:1004A0000E9435012196C930D10549F7DF91CF91DE +:1004B0001F910F910895CF93DF93C0E0D0E0BE016C +:1004C00085E091E00E94C00187E893E10197F1F790 +:1004D00000C000002196C11594E0D90781F72FE7ED +:1004E0008AE196E0215080409040E1F700C0000092 +:1004F00060E070E085E091E0DF91CF910C94C00165 +:10050000CF93DF93C0E0D0E0BE0182E091E00E9493 +:10051000C00187E893E10197F1F700C00000219640 +:10052000C11594E0D90781F72FE78AE196E02150C1 +:1005300080409040E1F700C0000060E070E082E0A1 +:1005400091E0DF91CF910C94C00160E081E091E0F7 +:100550000E94EF01BC0185E091E00E94C00161E0D2 +:1005600081E091E00E94EF01BC0182E091E00E94F5 +:10057000C0018EE091E00E949A01682F8EE091E028 +:100580000E94350188E091E00E949A01682F8BE07B +:1005900091E00E943501D9CF0E9409020E943202E7 +:1005A0000E945B020E9480020E94A50288E1809363 +:1005B000C10086E08093C2001092C5008FE1809355 +:1005C000C40008956093C6008091C00086FFFCCFF0 +:1005D00008956093C6007093C6008091C00086FFA6 +:1005E000FCCF08958091C00087FFFCCF8091C600AA +:1005F00008958091C00087FFFCCF2091C60030E0B5 +:100600009091C00097FFFCCF8091C600A901582BA4 +:10061000CA010895CF9380E091E00E94F202C82FB2 +:100620006FEF80E091E00E94E2026C2F80E091E0A9 +:10063000CF910C94E202089580E091E00E94F902CB +:10064000BC01660F771F680F791F80E091E00C9462 +:10065000E9020E94790080E091E00E94F20282307B +:1006600061F0833069F08130B1F70E940A0380E0C5 +:1006700091E00E94F2028230A1F70E941B03EBCFAF +:100680000E941C03E8CF81E191E00E94AF0042E0AC +:1006900061E171E08EE091E00E94EE0043E061E1F3 +:1006A00071E08BE091E00E94EE0045E061E171E0D5 +:1006B00088E091E00E94EE0040E061E171E085E0B9 +:1006C00091E00E94BD0141E061E171E082E091E0D2 +:1006D0000C94BD01EE0FFF1F0024001C0BBE079001 +:0A06E000F691E02D0994F894FFCF85 :00000001FF diff --git a/Makefile b/Makefile index bc20456..85c7e1a 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ OUTPUT = B15F.elf HEX = B15F.hex CFLAGS = -std=c++14 -O3 -mmcu=atmega1284 -DF_CPU=20000000 LDFLAGS = -OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o +OBJECTS = main.o spi.o mcp23s17.o tlc5615.o adu.o selftest.o global_vars.o usart.o requests.o COMPILE = $(COMPILER_PATH) $(CFLAGS) diff --git a/b15f.aws b/b15f.aws index a961817..1407eab 100644 --- a/b15f.aws +++ b/b15f.aws @@ -1 +1 @@ - + diff --git a/main.cpp b/main.cpp index 1650305..2dad6ac 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ #include #include "global_vars.h" #include "selftest.h" +#include "requests.h" #define LED PB0 @@ -35,9 +36,27 @@ void initAll() void handleRequest() { const uint8_t req = usart.readByte(); - uint8_t dummy = usart.readByte(); - usart.writeByte(USART::MSG_OK); - usart.writeByte(dummy); + + switch(req) + { + case RQ_DISC: + break; + + case RQ_TEST: + rqTestConnection(); + break; + + case RQ_INFO: + rqBoardInfo(); + break; + + case RQ_INT: + rqTestIntConv(); + break; + + default: + break; + } } int main() diff --git a/requests.cpp b/requests.cpp new file mode 100644 index 0000000..236b99a --- /dev/null +++ b/requests.cpp @@ -0,0 +1,18 @@ +#include "requests.h" + +void rqTestConnection() +{ + uint8_t dummy = usart.readByte(); + usart.writeByte(USART::MSG_OK); + usart.writeByte(dummy); +} + +void rqBoardInfo() +{ + +} + +void rqTestIntConv() +{ + usart.writeInt(usart.readInt() * 3); +} diff --git a/requests.h b/requests.h new file mode 100644 index 0000000..b62c9b2 --- /dev/null +++ b/requests.h @@ -0,0 +1,16 @@ +#ifndef REQUESTS_H +#define REQUESTS_H + +#include "global_vars.h" + +constexpr static uint8_t RQ_DISC = 0; +constexpr static uint8_t RQ_TEST = 1; +constexpr static uint8_t RQ_INFO = 2; +constexpr static uint8_t RQ_INT = 3; + +void rqTestConnection(void); +void rqBoardInfo(void); +void rqTestIntConv(void); +void rqTestLongConv(void); + +#endif // REQUESTS_H diff --git a/usart.cpp b/usart.cpp index b50c905..4ef8f5b 100644 --- a/usart.cpp +++ b/usart.cpp @@ -19,8 +19,24 @@ void USART::writeByte(uint8_t b) while(!(UCSR0A & _BV(TXC0))); } + +void USART::writeInt(uint16_t v) +{ + UDR0 = v & 0xFF; + v >>= 8; + UDR0 = v & 0xFF; + while(!(UCSR0A & _BV(TXC0))); +} + uint8_t USART::readByte() { while (!(UCSR0A & (1<