diff --git a/Button/Button.atsuo b/Button/Button.atsuo index 7e2b065..9d403c0 100644 Binary files a/Button/Button.atsuo and b/Button/Button.atsuo differ diff --git a/Button/Button/Button.cpp b/Button/Button/Button.cpp index 76f1860..ab2eb7b 100644 --- a/Button/Button/Button.cpp +++ b/Button/Button/Button.cpp @@ -6,28 +6,46 @@ */ #include "config.h" -#include "Led.h" + +#include "Led.hpp" +#include "uart.hpp" +#include "Spi.hpp" #include "Output.h" #include "Can.h" +#include "portc.hpp" +#include "portb.hpp" #include -Led l; +//////////////////// LED ////////////////////////////////////////// +typedef Led ledclass; +ledclass l; +///////////////////////// UART //////////////////////////////////// +typedef Uart<9600> uartclass; +uartclass u; +///////////////////////// SPI ///////////////////////////////////// +typedef Spi spiclass; +spiclass s; + Output o; Can c; int main(void) { - l.color(Led::YELLOW); + l.color(l.YELLOW); + u.send("Init done!\r\n"); + CANMessage m; m.id = 0x0123; m.rtr = 0; m.length = 2; m.data[0] = 0xAF; m.data[1] = 0xFE; - l.fade(Led::YELLOW, Led::RED, 10); + l.fade(l.YELLOW, l.RED, 10); + while(1) { + u.send("Stuff!\r\n"); o.AudioOn(); c.can_send_message(&m); _delay_ms(1); diff --git a/Button/Button/Button.cppproj b/Button/Button/Button.cppproj index 48a7166..d9cdf03 100644 --- a/Button/Button/Button.cppproj +++ b/Button/Button/Button.cppproj @@ -27,14 +27,14 @@ 0 - - - - - - - - + + + + + + + + ISP com.atmel.avrdbg.tool.ispmk2 @@ -77,80 +77,80 @@ - True - True - True - True - True - True - - - NDEBUG - - - Optimize for size (-Os) - True - True - True - True - True - - - NDEBUG - - - Optimize for size (-Os) - True - True - True - - - libm - - - <segmentname>=<address>, for example .boot=0xff - + True + True + True + True + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + True + True + + + NDEBUG + + + Optimize for size (-Os) + True + True + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + - 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 (-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) + @@ -166,10 +166,7 @@ compile - - compile - - + compile @@ -181,6 +178,21 @@ compile + + compile + + + compile + + + compile + + + compile + + + compile + \ No newline at end of file diff --git a/Button/Button/Debug/Button.d b/Button/Button/Debug/Button.d index 9587c47..df5f8d9 100644 --- a/Button/Button/Debug/Button.d +++ b/Button/Button/Debug/Button.d @@ -1,4 +1,5 @@ -Button.d Button.o: .././Button.cpp .././config.h .././Led.h \ +Button.d Button.o: .././Button.cpp .././config.h .././Led.hpp \ + .././pin.hpp \ 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/include/avr/io.h \ 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/include/avr/sfr_defs.h \ 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/include/inttypes.h \ @@ -10,15 +11,22 @@ Button.d Button.o: .././Button.cpp .././config.h .././Led.h \ 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/include/avr/version.h \ 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/include/avr/fuse.h \ 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/include/avr/lock.h \ - .././Output.h .././Can.h \ + .././uart.hpp \ + 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/include/stdio.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h \ + c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h \ + .././Spi.hpp \ 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/include/util/delay.h \ 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/include/util/delay_basic.h \ 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/include/math.h \ - .././mcp2515_defs.h + .././Output.h .././Can.h .././mcp2515_defs.h .././portc.hpp \ + .././portb.hpp .././config.h: -.././Led.h: +.././Led.hpp: + +.././pin.hpp: 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/include/avr/io.h: @@ -42,9 +50,15 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8- 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/include/avr/lock.h: -.././Output.h: +.././uart.hpp: -.././Can.h: +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/include/stdio.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stdarg.h: + +c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8-gnu-toolchain\bin\../lib/gcc/avr/4.7.2/include/stddef.h: + +.././Spi.hpp: 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/include/util/delay.h: @@ -52,4 +66,12 @@ c:\program\ files\ (x86)\atmel\atmel\ toolchain\avr8\ gcc\native\3.4.2.876\avr8- 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/include/math.h: +.././Output.h: + +.././Can.h: + .././mcp2515_defs.h: + +.././portc.hpp: + +.././portb.hpp: diff --git a/Button/Button/Debug/Button.elf b/Button/Button/Debug/Button.elf index f85a1da..3fc336e 100644 Binary files a/Button/Button/Debug/Button.elf and b/Button/Button/Debug/Button.elf differ diff --git a/Button/Button/Debug/Button.hex b/Button/Button/Debug/Button.hex index ac13162..272822b 100644 --- a/Button/Button/Debug/Button.hex +++ b/Button/Button/Debug/Button.hex @@ -1,88 +1,118 @@ -:100000000C942B000C9448000C9448000C9448006D -:100010000C9448000C9448000C9448000C94480040 -:100020000C9448000C9448000C9448000C94480030 -:100030000C9448000C9448000C9448000C94480020 -:100040000C9448000C9448000C9448000C94480010 -:100050000C944800890011241FBECFE5D8E0DEBF14 -:10006000CDBF20E0A0E6B0E001C01D92A336B207EC -:10007000E1F710E0C6E5D0E004C02297FE010E943F -:10008000B102C435D107C9F70E944A000C94B502E9 -:100090000C940000CF93DF93CDB7DEB72C970FB64B -:1000A000F894DEBF0FBECDBF66E082E690E00E940E -:1000B000000283E291E09A8389831B8282E08C8331 -:1000C0008FEA8D838EEF8E832AE030E044E050E0AB -:1000D00066E070E082E690E00E940B0281E690E02C -:1000E0000E94AD02BE016F5F7F4F80E690E00E94EC -:1000F0005D018FE99FE00197F1F700C0000081E604 -:1001000090E00E94AB0265E082E690E00E94690206 -:10011000E5CF82E690E00E94FD0181E690E00E943A -:10012000A70280E690E00E944F01089587B3806A9D -:1001300087BB88B38F7188BBBC9AC49A089580E549 -:100140008DB981E08EB908956FB9779BFECF8FB1DD -:1001500008950F931F93CF93DF93EC01062F142F75 -:10016000C49862E00E94A400602FCE010E94A40007 -:10017000612FCE010E94A400C49ADF91CF911F91FC -:100180000F910895FF920F931F93CF93DF93EC018C -:10019000F62E042F122FC49865E00E94A4006F2D44 -:1001A000CE010E94A400602FCE010E94A400612F06 -:1001B000CE010E94A400C49ADF91CF911F910F91AC -:1001C000FF900895CF93DF93EC01C49860EC0E94F8 -:1001D000A4008FE99FE00197F1F700C00000C49AE6 -:1001E0008FE39CE90197F1F700C0000047E06AE265 -:1001F000CE010E94A90040E969E2CE010E94A90057 -:1002000042E068E2CE010E94A90043E06BE2CE0129 -:100210000E94A90040E660E6CE010E94A90040E6E7 -:1002200060E7CE010E94A90040E060E2CE010E949A -:10023000A90040E061E2CE010E94A90040E062E234 -:10024000CE010E94A90040E063E2CE010E94A90015 -:1002500040E064E2CE010E94A90040E065E2CE01E8 -:100260000E94A90040E066E2CE010E94A90040E0A1 -:1002700067E2CE010E94A90040E06CE0CE010E943E -:10028000A90040E06DE0CE010E94A90020E040EE10 -:100290006FE0CE010E94C200DF91CF910895CF930D -:1002A000DF93EC010E949600CE010E949F00CE01D8 -:1002B0000E94E200DF91CF910895AF92BF92CF925A -:1002C000DF92EF92FF920F931F93CF93DF931F92D2 -:1002D000CDB7DEB78C016B01C49860EA0E94A40020 -:1002E0006FEFC8010E94A40089836FEFC8010E94CC -:1002F000A400C49A898182FF0AC0898184FF09C051 -:10030000898186FD69C06894BB24B2F805C0B12C10 -:1003100003C06894BB24B1F8C4986B2D6064C80115 -:100320000E94A400F60180819181BC0176956795B9 -:100330007695679576956795C8010E94A400F601A9 -:1003400060816295660F607EC8010E94A40060E033 -:10035000C8010E94A40060E0C8010E94A400F60148 -:10036000A380F8E0FA1518F46894AA24A3F8F6011B -:100370008281882331F06A2D6064C8010E94A40044 -:1003800019C06A2DC8010E94A400AA2099F0760124 -:10039000F4E0EF0EF11CAA948A2D90E00596C80EA9 -:1003A000D91EF70161917F01C8010E94A400EC14DD -:1003B000FD04B9F7C49A0000C498B11005C061E803 -:1003C000C8010E94A40005C06B2D6068C8010E948E -:1003D000A400C49A81E001C080E00F90DF91CF912A -:1003E0001F910F91FF90EF90DF90CF90BF90AF9053 -:1003F000089584B3876084BB08950E94F90108952D -:1004000085B3887F85BB85B3962F9370892B6470E5 -:10041000682B65BB08952F923F924F925F926F9227 -:100420007F928F929F92AF92BF92CF92DF92EF9284 -:10043000FF920F931F93CF93DF935C01862E942E30 -:10044000690100E010E0212C312C422C532C2AC0F1 -:10045000C62DD72D682DC5010E9400022196CF3FE1 -:10046000D105C1F71016110654F4C42DD52D692DF0 -:10047000C5010E9400022196C017D107C1F78FEF76 -:10048000E81AF80AEC14FD0421F407C07101602E8B -:10049000712E0F3F1105E4F2E5CF0F5F1F4F0F3FA5 -:1004A000110521F01C141D048CF3F7CFDF91CF91BF -:1004B0001F910F91FF90EF90DF90CF90BF90AF9082 -:1004C0009F908F907F906F905F904F903F902F9074 -:1004D00008951F93CF93DF93EC01162F262F30E062 -:1004E00046E050E064E070E00E940B02212F30E013 -:1004F00042E050E066E070E0CE010E940B02212F46 -:1005000030E043E050E062E070E0CE010E940B0278 -:10051000212F30E041E050E063E070E0CE010E9426 -:100520000B02212F30E045E050E061E070E0CE01A9 -:100530000E940B02212F30E044E050E065E070E0C3 -:10054000CE010E940B02DF91CF911F91089584B3D9 -:10055000806384BB0895AD980895AD9A0895EE0F19 -:0E056000FF1F0590F491E02D0994F894FFCF51 +:100000000C942B000C9453000C9453000C9453004C +:100010000C9453000C9453000C9453000C94530014 +: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 :00000001FF diff --git a/Button/Button/Debug/Button.lss b/Button/Button/Debug/Button.lss index 2dcf317..56c3a27 100644 --- a/Button/Button/Debug/Button.lss +++ b/Button/Button/Debug/Button.lss @@ -3,62 +3,62 @@ Button.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn - 0 .text 0000056e 00000000 00000000 00000094 2**1 + 0 .text 0000071a 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE - 1 .data 00000000 00800060 0000056e 00000602 2**0 + 1 .data 00000024 00800060 0000071a 000007ae 2**0 CONTENTS, ALLOC, LOAD, DATA - 2 .bss 00000003 00800060 00800060 00000602 2**0 + 2 .bss 00000005 00800084 00800084 000007d2 2**0 ALLOC - 3 .stab 000006cc 00000000 00000000 00000604 2**2 + 3 .stab 000006cc 00000000 00000000 000007d4 2**2 CONTENTS, READONLY, DEBUGGING - 4 .stabstr 00000082 00000000 00000000 00000cd0 2**0 + 4 .stabstr 00000082 00000000 00000000 00000ea0 2**0 CONTENTS, READONLY, DEBUGGING - 5 .comment 0000002f 00000000 00000000 00000d52 2**0 + 5 .comment 0000002f 00000000 00000000 00000f22 2**0 CONTENTS, READONLY - 6 .debug_aranges 00000120 00000000 00000000 00000d81 2**0 + 6 .debug_aranges 000000e0 00000000 00000000 00000f51 2**0 CONTENTS, READONLY, DEBUGGING - 7 .debug_info 00001b32 00000000 00000000 00000ea1 2**0 + 7 .debug_info 000040d0 00000000 00000000 00001031 2**0 CONTENTS, READONLY, DEBUGGING - 8 .debug_abbrev 000008d3 00000000 00000000 000029d3 2**0 + 8 .debug_abbrev 00000841 00000000 00000000 00005101 2**0 CONTENTS, READONLY, DEBUGGING - 9 .debug_line 00000686 00000000 00000000 000032a6 2**0 + 9 .debug_line 00000723 00000000 00000000 00005942 2**0 CONTENTS, READONLY, DEBUGGING - 10 .debug_frame 00000324 00000000 00000000 0000392c 2**2 + 10 .debug_frame 00000254 00000000 00000000 00006068 2**2 CONTENTS, READONLY, DEBUGGING - 11 .debug_str 000004ae 00000000 00000000 00003c50 2**0 + 11 .debug_str 000010df 00000000 00000000 000062bc 2**0 CONTENTS, READONLY, DEBUGGING - 12 .debug_loc 00000b79 00000000 00000000 000040fe 2**0 + 12 .debug_loc 00000f51 00000000 00000000 0000739b 2**0 CONTENTS, READONLY, DEBUGGING - 13 .debug_ranges 00000128 00000000 00000000 00004c77 2**0 + 13 .debug_ranges 000005e0 00000000 00000000 000082ec 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 0c 94 2b 00 jmp 0x56 ; 0x56 <__ctors_end> - 4: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 8: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 10: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 14: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 18: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 1c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 20: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 24: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 28: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 2c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 30: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 34: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 38: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 3c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 40: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 44: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 48: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 4c: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> - 50: 0c 94 48 00 jmp 0x90 ; 0x90 <__bad_interrupt> + 4: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 8: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 10: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 14: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 18: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 1c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 20: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 24: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 28: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 2c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 30: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 34: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 38: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 3c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 40: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 44: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 48: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 4c: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> + 50: 0c 94 53 00 jmp 0xa6 ; 0xa6 <__bad_interrupt> 00000054 <__ctors_start>: - 54: 89 00 .word 0x0089 ; ???? + 54: fb 01 movw r30, r22 00000056 <__ctors_end>: 56: 11 24 eor r1, r1 @@ -68,1038 +68,2089 @@ Disassembly of section .text: 5e: de bf out 0x3e, r29 ; 62 60: cd bf out 0x3d, r28 ; 61 -00000062 <__do_clear_bss>: - 62: 20 e0 ldi r18, 0x00 ; 0 +00000062 <__do_copy_data>: + 62: 10 e0 ldi r17, 0x00 ; 0 64: a0 e6 ldi r26, 0x60 ; 96 66: b0 e0 ldi r27, 0x00 ; 0 - 68: 01 c0 rjmp .+2 ; 0x6c <.do_clear_bss_start> + 68: ea e1 ldi r30, 0x1A ; 26 + 6a: f7 e0 ldi r31, 0x07 ; 7 + 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 + 74: b1 07 cpc r27, r17 + 76: d9 f7 brne .-10 ; 0x6e <__do_copy_data+0xc> -0000006a <.do_clear_bss_loop>: - 6a: 1d 92 st X+, r1 +00000078 <__do_clear_bss>: + 78: 20 e0 ldi r18, 0x00 ; 0 + 7a: a4 e8 ldi r26, 0x84 ; 132 + 7c: b0 e0 ldi r27, 0x00 ; 0 + 7e: 01 c0 rjmp .+2 ; 0x82 <.do_clear_bss_start> -0000006c <.do_clear_bss_start>: - 6c: a3 36 cpi r26, 0x63 ; 99 - 6e: b2 07 cpc r27, r18 - 70: e1 f7 brne .-8 ; 0x6a <.do_clear_bss_loop> +00000080 <.do_clear_bss_loop>: + 80: 1d 92 st X+, r1 -00000072 <__do_global_ctors>: - 72: 10 e0 ldi r17, 0x00 ; 0 - 74: c6 e5 ldi r28, 0x56 ; 86 - 76: d0 e0 ldi r29, 0x00 ; 0 - 78: 04 c0 rjmp .+8 ; 0x82 <__do_global_ctors+0x10> - 7a: 22 97 sbiw r28, 0x02 ; 2 - 7c: fe 01 movw r30, r28 - 7e: 0e 94 b1 02 call 0x562 ; 0x562 <__tablejump__> - 82: c4 35 cpi r28, 0x54 ; 84 - 84: d1 07 cpc r29, r17 - 86: c9 f7 brne .-14 ; 0x7a <__do_global_ctors+0x8> - 88: 0e 94 4a 00 call 0x94 ; 0x94
- 8c: 0c 94 b5 02 jmp 0x56a ; 0x56a <_exit> +00000082 <.do_clear_bss_start>: + 82: a9 38 cpi r26, 0x89 ; 137 + 84: b2 07 cpc r27, r18 + 86: e1 f7 brne .-8 ; 0x80 <.do_clear_bss_loop> -00000090 <__bad_interrupt>: - 90: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> +00000088 <__do_global_ctors>: + 88: 10 e0 ldi r17, 0x00 ; 0 + 8a: c6 e5 ldi r28, 0x56 ; 86 + 8c: d0 e0 ldi r29, 0x00 ; 0 + 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__> + 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> + +000000a6 <__bad_interrupt>: + a6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + +000000aa
: -00000094
: -Led l; Output o; Can c; int main(void) { - 94: cf 93 push r28 - 96: df 93 push r29 - 98: cd b7 in r28, 0x3d ; 61 - 9a: de b7 in r29, 0x3e ; 62 - 9c: 2c 97 sbiw r28, 0x0c ; 12 - 9e: 0f b6 in r0, 0x3f ; 63 - a0: f8 94 cli - a2: de bf out 0x3e, r29 ; 62 - a4: 0f be out 0x3f, r0 ; 63 - a6: cd bf out 0x3d, r28 ; 61 - l.color(Led::YELLOW); - a8: 66 e0 ldi r22, 0x06 ; 6 - aa: 82 e6 ldi r24, 0x62 ; 98 - ac: 90 e0 ldi r25, 0x00 ; 0 - ae: 0e 94 00 02 call 0x400 ; 0x400 <_ZN3Led5colorEh> + 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 + 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; - b2: 83 e2 ldi r24, 0x23 ; 35 - b4: 91 e0 ldi r25, 0x01 ; 1 - b6: 9a 83 std Y+2, r25 ; 0x02 - b8: 89 83 std Y+1, r24 ; 0x01 + 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; - ba: 1b 82 std Y+3, r1 ; 0x03 + e4: 1b 82 std Y+3, r1 ; 0x03 m.length = 2; - bc: 82 e0 ldi r24, 0x02 ; 2 - be: 8c 83 std Y+4, r24 ; 0x04 + e6: 82 e0 ldi r24, 0x02 ; 2 + e8: 8c 83 std Y+4, r24 ; 0x04 m.data[0] = 0xAF; - c0: 8f ea ldi r24, 0xAF ; 175 - c2: 8d 83 std Y+5, r24 ; 0x05 + ea: 8f ea ldi r24, 0xAF ; 175 + ec: 8d 83 std Y+5, r24 ; 0x05 m.data[1] = 0xFE; - c4: 8e ef ldi r24, 0xFE ; 254 - c6: 8e 83 std Y+6, r24 ; 0x06 - l.fade(Led::YELLOW, Led::RED, 10); - c8: 2a e0 ldi r18, 0x0A ; 10 - ca: 30 e0 ldi r19, 0x00 ; 0 - cc: 44 e0 ldi r20, 0x04 ; 4 - ce: 50 e0 ldi r21, 0x00 ; 0 - d0: 66 e0 ldi r22, 0x06 ; 6 - d2: 70 e0 ldi r23, 0x00 ; 0 - d4: 82 e6 ldi r24, 0x62 ; 98 - d6: 90 e0 ldi r25, 0x00 ; 0 - d8: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> + 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) + { + uart_putchar(*text); + text++; + 154: 31 96 adiw r30, 0x01 ; 1 + 156: 0d c0 rjmp .+26 ; 0x172 + 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++) { + 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 + l.fade(l.YELLOW, l.RED, 10); + while(1) { + u.send("Stuff!\r\n"); o.AudioOn(); - dc: 81 e6 ldi r24, 0x61 ; 97 - de: 90 e0 ldi r25, 0x00 ; 0 - e0: 0e 94 ad 02 call 0x55a ; 0x55a <_ZN6Output7AudioOnEv> + 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); - e4: be 01 movw r22, r28 - e6: 6f 5f subi r22, 0xFF ; 255 - e8: 7f 4f sbci r23, 0xFF ; 255 - ea: 80 e6 ldi r24, 0x60 ; 96 - ec: 90 e0 ldi r25, 0x00 ; 0 - ee: 0e 94 5d 01 call 0x2ba ; 0x2ba <_ZN3Can16can_send_messageEP10CANMessage> + 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> #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - f2: 8f e9 ldi r24, 0x9F ; 159 - f4: 9f e0 ldi r25, 0x0F ; 15 - f6: 01 97 sbiw r24, 0x01 ; 1 - f8: f1 f7 brne .-4 ; 0xf6 - fa: 00 c0 rjmp .+0 ; 0xfc - fc: 00 00 nop + 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(); - fe: 81 e6 ldi r24, 0x61 ; 97 - 100: 90 e0 ldi r25, 0x00 ; 0 - 102: 0e 94 ab 02 call 0x556 ; 0x556 <_ZN6Output8AudioOffEv> - - l.rainbow(5); - 106: 65 e0 ldi r22, 0x05 ; 5 - 108: 82 e6 ldi r24, 0x62 ; 98 - 10a: 90 e0 ldi r25, 0x00 ; 0 - 10c: 0e 94 69 02 call 0x4d2 ; 0x4d2 <_ZN3Led7rainbowEh> - 110: e5 cf rjmp .-54 ; 0xdc + 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: -#include "Output.h" -#include "Can.h" + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 1a8: a8 98 cbi 0x15, 0 ; 21 -#include + 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; } + 1aa: a0 9a sbi 0x14, 0 ; 20 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 1ac: 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; } + 1ae: a1 9a sbi 0x14, 1 ; 20 +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + 1b0: 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; } + 1b2: a2 9a sbi 0x14, 2 ; 20 + 1b4: 8f 5f subi r24, 0xFF ; 255 + 1b6: 8f 3f cpi r24, 0xFF ; 255 + 1b8: b9 f7 brne .-18 ; 0x1a8 + 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); + } + 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++) { + 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++; + } + } + 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< + 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 + cs::make_high(); + 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 + 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< + 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> +///////////////////////// 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> -Led l; - 112: 82 e6 ldi r24, 0x62 ; 98 - 114: 90 e0 ldi r25, 0x00 ; 0 - 116: 0e 94 fd 01 call 0x3fa ; 0x3fa <_ZN3LedC1Ev> Output o; - 11a: 81 e6 ldi r24, 0x61 ; 97 - 11c: 90 e0 ldi r25, 0x00 ; 0 - 11e: 0e 94 a7 02 call 0x54e ; 0x54e <_ZN6OutputC1Ev> + 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; - 122: 80 e6 ldi r24, 0x60 ; 96 - 124: 90 e0 ldi r25, 0x00 ; 0 - 126: 0e 94 4f 01 call 0x29e ; 0x29e <_ZN3CanC1Ev> - 12a: 08 95 ret + 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 -0000012c <_ZN3Can8init_pinEv>: +00000434 <_ZN3Can8init_pinEv>: init_can(); } void Can::init_pin() { //SPI Pins CANDDR_SPI |= (1<: +00000446 <_ZN3Can8init_spiEv>: } void Can::init_spi() { SPCR = (1<: +00000450 <_ZN3Can8spi_putcEh>: mcp2515_bit_modify( CANCTRL, 0xE0, 0); } uint8_t Can::spi_putc( uint8_t data ) { // Sendet ein Byte SPDR = data; - 148: 6f b9 out 0x0f, r22 ; 15 + 450: 6f b9 out 0x0f, r22 ; 15 // Wartet bis Byte gesendet wurde while( !( SPSR & (1< + 452: 77 9b sbis 0x0e, 7 ; 14 + 454: fe cf rjmp .-4 ; 0x452 <_ZN3Can8spi_putcEh+0x2> return SPDR; - 14e: 8f b1 in r24, 0x0f ; 15 + 456: 8f b1 in r24, 0x0f ; 15 } - 150: 08 95 ret + 458: 08 95 ret -00000152 <_ZN3Can22mcp2515_write_registerEhh>: +0000045a <_ZN3Can22mcp2515_write_registerEhh>: void Can::mcp2515_write_register( uint8_t adress, uint8_t data ) { - 152: 0f 93 push r16 - 154: 1f 93 push r17 - 156: cf 93 push r28 - 158: df 93 push r29 - 15a: ec 01 movw r28, r24 - 15c: 06 2f mov r16, r22 - 15e: 14 2f mov r17, r20 + 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< + 46a: 62 e0 ldi r22, 0x02 ; 2 + 46c: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> spi_putc(adress); - 168: 60 2f mov r22, r16 - 16a: ce 01 movw r24, r28 - 16c: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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); - 170: 61 2f mov r22, r17 - 172: ce 01 movw r24, r28 - 174: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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<: +0000048c <_ZN3Can18mcp2515_bit_modifyEhhh>: return data; } void Can::mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data) { - 184: ff 92 push r15 - 186: 0f 93 push r16 - 188: 1f 93 push r17 - 18a: cf 93 push r28 - 18c: df 93 push r29 - 18e: ec 01 movw r28, r24 - 190: f6 2e mov r15, r22 - 192: 04 2f mov r16, r20 - 194: 12 2f mov r17, r18 + 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< + 4a0: 65 e0 ldi r22, 0x05 ; 5 + 4a2: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> spi_putc(adress); - 19e: 6f 2d mov r22, r15 - 1a0: ce 01 movw r24, r28 - 1a2: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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); - 1a6: 60 2f mov r22, r16 - 1a8: ce 01 movw r24, r28 - 1aa: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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); - 1ae: 61 2f mov r22, r17 - 1b0: ce 01 movw r24, r28 - 1b2: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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<: +000004cc <_ZN3Can8init_canEv>: void Can::init_spi() { SPCR = (1< - 1d2: 8f e9 ldi r24, 0x9F ; 159 - 1d4: 9f e0 ldi r25, 0x0F ; 15 - 1d6: 01 97 sbiw r24, 0x01 ; 1 - 1d8: f1 f7 brne .-4 ; 0x1d6 <_ZN3Can8init_canEv+0x12> - 1da: 00 c0 rjmp .+0 ; 0x1dc <_ZN3Can8init_canEv+0x18> - 1dc: 00 00 nop + 4d4: 60 ec ldi r22, 0xC0 ; 192 + 4d6: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> + 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< - 1e8: 00 c0 rjmp .+0 ; 0x1ea <_ZN3Can8init_canEv+0x26> - 1ea: 00 00 nop + 4e6: c4 9a sbi 0x18, 4 ; 24 + 4e8: 8f e3 ldi r24, 0x3F ; 63 + 4ea: 9c e9 ldi r25, 0x9C ; 156 + 4ec: 01 97 sbiw r24, 0x01 ; 1 + 4ee: f1 f7 brne .-4 ; 0x4ec <_ZN3Can8init_canEv+0x20> + 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< + 4f4: 47 e0 ldi r20, 0x07 ; 7 + 4f6: 6a e2 ldi r22, 0x2A ; 42 + 4f8: ce 01 movw r24, r28 + 4fa: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> // Prop Seg und Phase Seg1 einstellen mcp2515_write_register( CNF2, (1< + 4fe: 40 e9 ldi r20, 0x90 ; 144 + 500: 69 e2 ldi r22, 0x29 ; 41 + 502: ce 01 movw r24, r28 + 504: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> // Wake-up Filter deaktivieren, Phase Seg2 einstellen mcp2515_write_register( CNF3, (1< + 508: 42 e0 ldi r20, 0x02 ; 2 + 50a: 68 e2 ldi r22, 0x28 ; 40 + 50c: ce 01 movw r24, r28 + 50e: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> // Aktivieren der Rx Buffer Interrupts mcp2515_write_register( CANINTE, (1< + 512: 43 e0 ldi r20, 0x03 ; 3 + 514: 6b e2 ldi r22, 0x2B ; 43 + 516: ce 01 movw r24, r28 + 518: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> /* * Einstellen der Filter */ // Buffer 0 : Empfangen aller Nachrichten mcp2515_write_register( RXB0CTRL, (1< + 51c: 40 e6 ldi r20, 0x60 ; 96 + 51e: 60 e6 ldi r22, 0x60 ; 96 + 520: ce 01 movw r24, r28 + 522: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> // Buffer 1 : Empfangen aller Nachrichten mcp2515_write_register( RXB1CTRL, (1< + 526: 40 e6 ldi r20, 0x60 ; 96 + 528: 60 e7 ldi r22, 0x70 ; 112 + 52a: ce 01 movw r24, r28 + 52c: 0e 94 2d 02 call 0x45a ; 0x45a <_ZN3Can22mcp2515_write_registerEhh> // Alle Bits der Empfangsmaske loeschen, // damit werden alle Nachrichten empfangen mcp2515_write_register( RXM0SIDH, 0 ); - 228: 40 e0 ldi r20, 0x00 ; 0 - 22a: 60 e2 ldi r22, 0x20 ; 32 - 22c: ce 01 movw r24, r28 - 22e: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 232: 40 e0 ldi r20, 0x00 ; 0 - 234: 61 e2 ldi r22, 0x21 ; 33 - 236: ce 01 movw r24, r28 - 238: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 23c: 40 e0 ldi r20, 0x00 ; 0 - 23e: 62 e2 ldi r22, 0x22 ; 34 - 240: ce 01 movw r24, r28 - 242: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 246: 40 e0 ldi r20, 0x00 ; 0 - 248: 63 e2 ldi r22, 0x23 ; 35 - 24a: ce 01 movw r24, r28 - 24c: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 250: 40 e0 ldi r20, 0x00 ; 0 - 252: 64 e2 ldi r22, 0x24 ; 36 - 254: ce 01 movw r24, r28 - 256: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 25a: 40 e0 ldi r20, 0x00 ; 0 - 25c: 65 e2 ldi r22, 0x25 ; 37 - 25e: ce 01 movw r24, r28 - 260: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 264: 40 e0 ldi r20, 0x00 ; 0 - 266: 66 e2 ldi r22, 0x26 ; 38 - 268: ce 01 movw r24, r28 - 26a: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 26e: 40 e0 ldi r20, 0x00 ; 0 - 270: 67 e2 ldi r22, 0x27 ; 39 - 272: ce 01 movw r24, r28 - 274: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 278: 40 e0 ldi r20, 0x00 ; 0 - 27a: 6c e0 ldi r22, 0x0C ; 12 - 27c: ce 01 movw r24, r28 - 27e: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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 ); - 282: 40 e0 ldi r20, 0x00 ; 0 - 284: 6d e0 ldi r22, 0x0D ; 13 - 286: ce 01 movw r24, r28 - 288: 0e 94 a9 00 call 0x152 ; 0x152 <_ZN3Can22mcp2515_write_registerEhh> + 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); - 28c: 20 e0 ldi r18, 0x00 ; 0 - 28e: 40 ee ldi r20, 0xE0 ; 224 - 290: 6f e0 ldi r22, 0x0F ; 15 - 292: ce 01 movw r24, r28 - 294: 0e 94 c2 00 call 0x184 ; 0x184 <_ZN3Can18mcp2515_bit_modifyEhhh> + 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> } - 298: df 91 pop r29 - 29a: cf 91 pop r28 - 29c: 08 95 ret + 5a0: df 91 pop r29 + 5a2: cf 91 pop r28 + 5a4: 08 95 ret -0000029e <_ZN3CanC1Ev>: +000005a6 <_ZN3CanC1Ev>: #define CANDDR_CS DDRB #define CANPORT_CS PORTB #define CANP_CS PINB4 Can::Can() { - 29e: cf 93 push r28 - 2a0: df 93 push r29 - 2a2: ec 01 movw r28, r24 + 5a6: cf 93 push r28 + 5a8: df 93 push r29 + 5aa: ec 01 movw r28, r24 init_pin(); - 2a4: 0e 94 96 00 call 0x12c ; 0x12c <_ZN3Can8init_pinEv> + 5ac: 0e 94 1a 02 call 0x434 ; 0x434 <_ZN3Can8init_pinEv> init_spi(); - 2a8: ce 01 movw r24, r28 - 2aa: 0e 94 9f 00 call 0x13e ; 0x13e <_ZN3Can8init_spiEv> + 5b0: ce 01 movw r24, r28 + 5b2: 0e 94 23 02 call 0x446 ; 0x446 <_ZN3Can8init_spiEv> init_can(); - 2ae: ce 01 movw r24, r28 - 2b0: 0e 94 e2 00 call 0x1c4 ; 0x1c4 <_ZN3Can8init_canEv> + 5b6: ce 01 movw r24, r28 + 5b8: 0e 94 66 02 call 0x4cc ; 0x4cc <_ZN3Can8init_canEv> } - 2b4: df 91 pop r29 - 2b6: cf 91 pop r28 - 2b8: 08 95 ret + 5bc: df 91 pop r29 + 5be: cf 91 pop r28 + 5c0: 08 95 ret -000002ba <_ZN3Can16can_send_messageEP10CANMessage>: +000005c2 <_ZN3Can16can_send_messageEP10CANMessage>: // /CS Leitung wieder freigeben CANPORT_CS |= (1< + 5e2: 60 ea ldi r22, 0xA0 ; 160 + 5e4: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> status = spi_putc(0xff); - 2e0: 6f ef ldi r22, 0xFF ; 255 - 2e2: c8 01 movw r24, r16 - 2e4: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> - 2e8: 89 83 std Y+1, r24 ; 0x01 + 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); - 2ea: 6f ef ldi r22, 0xFF ; 255 - 2ec: c8 01 movw r24, r16 - 2ee: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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< + 5fc: 89 81 ldd r24, Y+1 ; 0x01 + 5fe: 82 ff sbrs r24, 2 + 600: 0a c0 rjmp .+20 ; 0x616 <_ZN3Can16can_send_messageEP10CANMessage+0x54> address = 0x00; } else if (bit_is_clear(status, 4)) { - 2fa: 89 81 ldd r24, Y+1 ; 0x01 - 2fc: 84 ff sbrs r24, 4 - 2fe: 09 c0 rjmp .+18 ; 0x312 <_ZN3Can16can_send_messageEP10CANMessage+0x58> + 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)) { - 300: 89 81 ldd r24, Y+1 ; 0x01 - 302: 86 fd sbrc r24, 6 - 304: 69 c0 rjmp .+210 ; 0x3d8 <_ZN3Can16can_send_messageEP10CANMessage+0x11e> + 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; - 306: 68 94 set - 308: bb 24 eor r11, r11 - 30a: b2 f8 bld r11, 2 - 30c: 05 c0 rjmp .+10 ; 0x318 <_ZN3Can16can_send_messageEP10CANMessage+0x5e> + 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; - 30e: b1 2c mov r11, r1 - 310: 03 c0 rjmp .+6 ; 0x318 <_ZN3Can16can_send_messageEP10CANMessage+0x5e> + 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; - 312: 68 94 set - 314: bb 24 eor r11, r11 - 316: b1 f8 bld r11, 1 + 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< + 622: 6b 2d mov r22, r11 + 624: 60 64 ori r22, 0x40 ; 64 + 626: c8 01 movw r24, r16 + 628: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> // Standard ID einstellen spi_putc((uint8_t) (p_message->id>>3)); - 324: f6 01 movw r30, r12 - 326: 80 81 ld r24, Z - 328: 91 81 ldd r25, Z+1 ; 0x01 - 32a: bc 01 movw r22, r24 - 32c: 76 95 lsr r23 - 32e: 67 95 ror r22 - 330: 76 95 lsr r23 - 332: 67 95 ror r22 - 334: 76 95 lsr r23 - 336: 67 95 ror r22 - 338: c8 01 movw r24, r16 - 33a: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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)); - 33e: f6 01 movw r30, r12 - 340: 60 81 ld r22, Z - 342: 62 95 swap r22 - 344: 66 0f add r22, r22 - 346: 60 7e andi r22, 0xE0 ; 224 - 348: c8 01 movw r24, r16 - 34a: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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); - 34e: 60 e0 ldi r22, 0x00 ; 0 - 350: c8 01 movw r24, r16 - 352: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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); - 356: 60 e0 ldi r22, 0x00 ; 0 - 358: c8 01 movw r24, r16 - 35a: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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; - 35e: f6 01 movw r30, r12 - 360: a3 80 ldd r10, Z+3 ; 0x03 - 362: f8 e0 ldi r31, 0x08 ; 8 - 364: fa 15 cp r31, r10 - 366: 18 f4 brcc .+6 ; 0x36e <_ZN3Can16can_send_messageEP10CANMessage+0xb4> - 368: 68 94 set - 36a: aa 24 eor r10, r10 - 36c: a3 f8 bld r10, 3 + 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) - 36e: f6 01 movw r30, r12 - 370: 82 81 ldd r24, Z+2 ; 0x02 - 372: 88 23 and r24, r24 - 374: 31 f0 breq .+12 ; 0x382 <_ZN3Can16can_send_messageEP10CANMessage+0xc8> + 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< - 380: 19 c0 rjmp .+50 ; 0x3b4 <_ZN3Can16can_send_messageEP10CANMessage+0xfa> + 67e: 6a 2d mov r22, r10 + 680: 60 64 ori r22, 0x40 ; 64 + 682: c8 01 movw r24, r16 + 684: 0e 94 28 02 call 0x450 ; 0x450 <_ZN3Can8spi_putcEh> + 688: 19 c0 rjmp .+50 ; 0x6bc <_ZN3Can16can_send_messageEP10CANMessage+0xfa> } else { // Nachrichten Laenge einstellen spi_putc(length); - 382: 6a 2d mov r22, r10 - 384: c8 01 movw r24, r16 - 386: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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 + 692: aa 20 and r10, r10 + 694: 99 f0 breq .+38 ; 0x6bc <_ZN3Can16can_send_messageEP10CANMessage+0xfa> // /CS Leitung wieder freigeben CANPORT_CS |= (1<data[i]); - 3a2: f7 01 movw r30, r14 - 3a4: 61 91 ld r22, Z+ - 3a6: 7f 01 movw r14, r30 - 3a8: c8 01 movw r24, r16 - 3aa: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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 + 6b6: ec 14 cp r14, r12 + 6b8: fd 04 cpc r15, r13 + 6ba: b9 f7 brne .-18 ; 0x6aa <_ZN3Can16can_send_messageEP10CANMessage+0xe8> spi_putc(p_message->data[i]); } } CANPORT_CS |= (1< + 6c2: b1 10 cpse r11, r1 + 6c4: 05 c0 rjmp .+10 ; 0x6d0 <_ZN3Can16can_send_messageEP10CANMessage+0x10e> spi_putc(SPI_RTS | 0x01); - 3be: 61 e8 ldi r22, 0x81 ; 129 - 3c0: c8 01 movw r24, r16 - 3c2: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> - 3c6: 05 c0 rjmp .+10 ; 0x3d2 <_ZN3Can16can_send_messageEP10CANMessage+0x118> + 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); - 3c8: 6b 2d mov r22, r11 - 3ca: 60 68 ori r22, 0x80 ; 128 - 3cc: c8 01 movw r24, r16 - 3ce: 0e 94 a4 00 call 0x148 ; 0x148 <_ZN3Can8spi_putcEh> + 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< + 6dc: 81 e0 ldi r24, 0x01 ; 1 + 6de: 01 c0 rjmp .+2 ; 0x6e2 <_ZN3Can16can_send_messageEP10CANMessage+0x120> address = 0x04; } else { /* Alle Puffer sind belegt, Nachricht kann nicht verschickt werden */ return 0; - 3d8: 80 e0 ldi r24, 0x00 ; 0 + 6e0: 80 e0 ldi r24, 0x00 ; 0 spi_putc(SPI_RTS | address); } CANPORT_CS |= (1<: -Led::Led() { - init(); -} - -void Led::init() { - LEDDDR |= (1<: -#define LEDPING PINC1 -#define LEDPINB PINC0 -#define LEDPINM PINC0 - -Led::Led() { - init(); - 3fa: 0e 94 f9 01 call 0x3f2 ; 0x3f2 <_ZN3Led4initEv> - 3fe: 08 95 ret - -00000400 <_ZN3Led5colorEh>: - int rgb = 0; - rgb |= (mask & (1<<0)) ? (1<<0) : (0<<0); - rgb |= (mask & (1<<1)) ? (1<<1) : (0<<1); - rgb |= (mask & (1<<2)) ? (1<<2) : (0<<2); - - LEDPORT &= ~((1<: - fade(CYAN, BLUE, time); - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); -} - -void Led::fade(int from, int to, int dur) { - 416: 2f 92 push r2 - 418: 3f 92 push r3 - 41a: 4f 92 push r4 - 41c: 5f 92 push r5 - 41e: 6f 92 push r6 - 420: 7f 92 push r7 - 422: 8f 92 push r8 - 424: 9f 92 push r9 - 426: af 92 push r10 - 428: bf 92 push r11 - 42a: cf 92 push r12 - 42c: df 92 push r13 - 42e: ef 92 push r14 - 430: ff 92 push r15 - 432: 0f 93 push r16 - 434: 1f 93 push r17 - 436: cf 93 push r28 - 438: df 93 push r29 - 43a: 5c 01 movw r10, r24 - 43c: 86 2e mov r8, r22 - 43e: 94 2e mov r9, r20 - 440: 69 01 movw r12, r18 - for (int i=0;i<0xFF;i++) { - 442: 00 e0 ldi r16, 0x00 ; 0 - 444: 10 e0 ldi r17, 0x00 ; 0 - for(int k=0;k -} - -void Led::fade(int from, int to, int dur) { - for (int i=0;i<0xFF;i++) { - for(int k=0;k -} - -void Led::fade(int from, int to, int dur) { - for (int i=0;i<0xFF;i++) { - for(int k=0;k - color(from); - } - for (int j=0;j - 46a: c4 2d mov r28, r4 - 46c: d5 2d mov r29, r5 - color(to); - 46e: 69 2d mov r22, r9 - 470: c5 01 movw r24, r10 - 472: 0e 94 00 02 call 0x400 ; 0x400 <_ZN3Led5colorEh> - for (int i=0;i<0xFF;i++) { - for(int k=0;k - fade(MAGENTA, RED, time); -} - -void Led::fade(int from, int to, int dur) { - for (int i=0;i<0xFF;i++) { - for(int k=0;k - 48a: 07 c0 rjmp .+14 ; 0x49a <_ZN3Led4fadeEiii+0x84> - 48c: 71 01 movw r14, r2 - for (int j=i;j<0xFF;j++) { - 48e: 60 2e mov r6, r16 - 490: 71 2e mov r7, r17 - 492: 0f 3f cpi r16, 0xFF ; 255 - 494: 11 05 cpc r17, r1 - 496: e4 f2 brlt .-72 ; 0x450 <_ZN3Led4fadeEiii+0x3a> - 498: e5 cf rjmp .-54 ; 0x464 <_ZN3Led4fadeEiii+0x4e> - fade(BLUE, MAGENTA, time); - fade(MAGENTA, RED, time); -} - -void Led::fade(int from, int to, int dur) { - for (int i=0;i<0xFF;i++) { - 49a: 0f 5f subi r16, 0xFF ; 255 - 49c: 1f 4f sbci r17, 0xFF ; 255 - 49e: 0f 3f cpi r16, 0xFF ; 255 - 4a0: 11 05 cpc r17, r1 - 4a2: 21 f0 breq .+8 ; 0x4ac <_ZN3Led4fadeEiii+0x96> - for(int k=0;k - 4aa: f7 cf rjmp .-18 ; 0x49a <_ZN3Led4fadeEiii+0x84> - for (int j=0;j: - - LEDPORT &= ~((1< - fade(YELLOW, GREEN, time); - 4ec: 21 2f mov r18, r17 - 4ee: 30 e0 ldi r19, 0x00 ; 0 - 4f0: 42 e0 ldi r20, 0x02 ; 2 - 4f2: 50 e0 ldi r21, 0x00 ; 0 - 4f4: 66 e0 ldi r22, 0x06 ; 6 - 4f6: 70 e0 ldi r23, 0x00 ; 0 - 4f8: ce 01 movw r24, r28 - 4fa: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> - fade(GREEN, CYAN, time); - 4fe: 21 2f mov r18, r17 - 500: 30 e0 ldi r19, 0x00 ; 0 - 502: 43 e0 ldi r20, 0x03 ; 3 - 504: 50 e0 ldi r21, 0x00 ; 0 - 506: 62 e0 ldi r22, 0x02 ; 2 - 508: 70 e0 ldi r23, 0x00 ; 0 - 50a: ce 01 movw r24, r28 - 50c: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> - fade(CYAN, BLUE, time); - 510: 21 2f mov r18, r17 - 512: 30 e0 ldi r19, 0x00 ; 0 - 514: 41 e0 ldi r20, 0x01 ; 1 - 516: 50 e0 ldi r21, 0x00 ; 0 - 518: 63 e0 ldi r22, 0x03 ; 3 - 51a: 70 e0 ldi r23, 0x00 ; 0 - 51c: ce 01 movw r24, r28 - 51e: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> - fade(BLUE, MAGENTA, time); - 522: 21 2f mov r18, r17 - 524: 30 e0 ldi r19, 0x00 ; 0 - 526: 45 e0 ldi r20, 0x05 ; 5 - 528: 50 e0 ldi r21, 0x00 ; 0 - 52a: 61 e0 ldi r22, 0x01 ; 1 - 52c: 70 e0 ldi r23, 0x00 ; 0 - 52e: ce 01 movw r24, r28 - 530: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> - fade(MAGENTA, RED, time); - 534: 21 2f mov r18, r17 - 536: 30 e0 ldi r19, 0x00 ; 0 - 538: 44 e0 ldi r20, 0x04 ; 4 - 53a: 50 e0 ldi r21, 0x00 ; 0 - 53c: 65 e0 ldi r22, 0x05 ; 5 - 53e: 70 e0 ldi r23, 0x00 ; 0 - 540: ce 01 movw r24, r28 - 542: 0e 94 0b 02 call 0x416 ; 0x416 <_ZN3Led4fadeEiii> -} - 546: df 91 pop r29 - 548: cf 91 pop r28 - 54a: 1f 91 pop r17 - 54c: 08 95 ret - -0000054e <_ZN6OutputC1Ev>: +000006fa <_ZN6OutputC1Ev>: #define OUTPUTDDR DDRC #define OUTPUTM PINC4 #define OUTPUTA PINC5 Output::Output() { OUTPUTDDR |= (1<: +00000702 <_ZN6Output8AudioOffEv>: } void Output::AudioOff() { OUTPUTPORT &= ~(1<: +00000706 <_ZN6Output7AudioOnEv>: } void Output::AudioOn() { OUTPUTPORT |= (1<: - 55e: ee 0f add r30, r30 - 560: ff 1f adc r31, r31 +0000070a <__tablejump2__>: + 70a: ee 0f add r30, r30 + 70c: ff 1f adc r31, r31 -00000562 <__tablejump__>: - 562: 05 90 lpm r0, Z+ - 564: f4 91 lpm r31, Z - 566: e0 2d mov r30, r0 - 568: 09 94 ijmp +0000070e <__tablejump__>: + 70e: 05 90 lpm r0, Z+ + 710: f4 91 lpm r31, Z + 712: e0 2d mov r30, r0 + 714: 09 94 ijmp -0000056a <_exit>: - 56a: f8 94 cli +00000716 <_exit>: + 716: f8 94 cli -0000056c <__stop_program>: - 56c: ff cf rjmp .-2 ; 0x56c <__stop_program> +00000718 <__stop_program>: + 718: ff cf rjmp .-2 ; 0x718 <__stop_program> diff --git a/Button/Button/Debug/Button.map b/Button/Button/Debug/Button.map index 3fd62ab..f2b7870 100644 --- a/Button/Button/Debug/Button.map +++ b/Button/Button/Debug/Button.map @@ -2,6 +2,8 @@ Archive member included because of file (symbol) 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) 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 (exit) +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) + Button.o (__do_copy_data) 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) Button.o (__do_clear_bss) 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) @@ -12,6 +14,7 @@ c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu- 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 .text 0x00000000 0x0 Button.o .text 0x00000000 0x0 Can.o .bss 0x00000000 0x0 Can.o @@ -21,10 +24,6 @@ Discarded input sections 0x00000000 0x2e Can.o .text._ZN3Can15can_get_messageEP10CANMessage 0x00000000 0x124 Can.o - .text 0x00000000 0x0 Led.o - .bss 0x00000000 0x0 Led.o - .text._ZN3Led6uninitEv - 0x00000000 0x2 Led.o .text 0x00000000 0x0 Output.o .bss 0x00000000 0x0 Output.o .text._ZN6Output8MotorOffEv @@ -44,6 +43,19 @@ 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(_exit.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(_exit.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(_copy_data.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(_copy_data.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(_copy_data.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(_copy_data.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(_copy_data.o) + .text.libgcc.prologue + 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(_copy_data.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(_copy_data.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(_copy_data.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(_clear_bss.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(_clear_bss.o) .text.libgcc.mul @@ -100,7 +112,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 Led.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 @@ -201,7 +212,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x56e +.text 0x00000000 0x71a *(.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 @@ -240,110 +251,100 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.init3) *(.init3) *(.init4) - .init4 0x00000062 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/avr5\libgcc.a(_clear_bss.o) - 0x00000062 __do_clear_bss + .init4 0x00000062 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/avr5\libgcc.a(_copy_data.o) + 0x00000062 __do_copy_data + .init4 0x00000078 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/avr5\libgcc.a(_clear_bss.o) + 0x00000078 __do_clear_bss *(.init4) *(.init5) *(.init5) *(.init6) - .init6 0x00000072 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/avr5\libgcc.a(_ctors.o) - 0x00000072 __do_global_ctors + .init6 0x00000088 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/avr5\libgcc.a(_ctors.o) + 0x00000088 __do_global_ctors *(.init6) *(.init7) *(.init7) *(.init8) *(.init8) *(.init9) - .init9 0x00000088 0x8 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 + .init9 0x0000009e 0x8 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 *(.init9) *(.text) - .text 0x00000090 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/../../../../avr/lib/avr5/crtm32a.o - 0x00000090 __vector_1 - 0x00000090 __vector_12 - 0x00000090 __bad_interrupt - 0x00000090 __vector_6 - 0x00000090 __vector_3 - 0x00000090 __vector_11 - 0x00000090 __vector_13 - 0x00000090 __vector_17 - 0x00000090 __vector_19 - 0x00000090 __vector_7 - 0x00000090 __vector_5 - 0x00000090 __vector_4 - 0x00000090 __vector_9 - 0x00000090 __vector_2 - 0x00000090 __vector_15 - 0x00000090 __vector_8 - 0x00000090 __vector_14 - 0x00000090 __vector_10 - 0x00000090 __vector_16 - 0x00000090 __vector_18 - 0x00000090 __vector_20 - 0x00000094 . = ALIGN (0x2) + .text 0x000000a6 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/../../../../avr/lib/avr5/crtm32a.o + 0x000000a6 __vector_1 + 0x000000a6 __vector_12 + 0x000000a6 __bad_interrupt + 0x000000a6 __vector_6 + 0x000000a6 __vector_3 + 0x000000a6 __vector_11 + 0x000000a6 __vector_13 + 0x000000a6 __vector_17 + 0x000000a6 __vector_19 + 0x000000a6 __vector_7 + 0x000000a6 __vector_5 + 0x000000a6 __vector_4 + 0x000000a6 __vector_9 + 0x000000a6 __vector_2 + 0x000000a6 __vector_15 + 0x000000a6 __vector_8 + 0x000000a6 __vector_14 + 0x000000a6 __vector_10 + 0x000000a6 __vector_16 + 0x000000a6 __vector_18 + 0x000000a6 __vector_20 + 0x000000aa . = ALIGN (0x2) *(.text.*) - .text.main 0x00000094 0x7e Button.o - 0x00000094 main + .text.main 0x000000aa 0x30a Button.o + 0x000000aa main + .text._ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev + 0x000003b4 0x42 Button.o + 0x000003b4 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC1Ev + 0x000003b4 _ZN3SpiIN6avrlib5portbELi4ELi6ELi5ELi7ELi0E4UartILm9600EEEC2Ev .text._GLOBAL__sub_I_l - 0x00000112 0x1a Button.o + 0x000003f6 0x3e Button.o .text._ZN3Can8init_pinEv - 0x0000012c 0x12 Can.o - 0x0000012c _ZN3Can8init_pinEv + 0x00000434 0x12 Can.o + 0x00000434 _ZN3Can8init_pinEv .text._ZN3Can8init_spiEv - 0x0000013e 0xa Can.o - 0x0000013e _ZN3Can8init_spiEv + 0x00000446 0xa Can.o + 0x00000446 _ZN3Can8init_spiEv .text._ZN3Can8spi_putcEh - 0x00000148 0xa Can.o - 0x00000148 _ZN3Can8spi_putcEh + 0x00000450 0xa Can.o + 0x00000450 _ZN3Can8spi_putcEh .text._ZN3Can22mcp2515_write_registerEhh - 0x00000152 0x32 Can.o - 0x00000152 _ZN3Can22mcp2515_write_registerEhh + 0x0000045a 0x32 Can.o + 0x0000045a _ZN3Can22mcp2515_write_registerEhh .text._ZN3Can18mcp2515_bit_modifyEhhh - 0x00000184 0x40 Can.o - 0x00000184 _ZN3Can18mcp2515_bit_modifyEhhh + 0x0000048c 0x40 Can.o + 0x0000048c _ZN3Can18mcp2515_bit_modifyEhhh .text._ZN3Can8init_canEv - 0x000001c4 0xda Can.o - 0x000001c4 _ZN3Can8init_canEv + 0x000004cc 0xda Can.o + 0x000004cc _ZN3Can8init_canEv .text._ZN3CanC2Ev - 0x0000029e 0x1c Can.o - 0x0000029e _ZN3CanC2Ev - 0x0000029e _ZN3CanC1Ev + 0x000005a6 0x1c Can.o + 0x000005a6 _ZN3CanC2Ev + 0x000005a6 _ZN3CanC1Ev .text._ZN3Can16can_send_messageEP10CANMessage - 0x000002ba 0x138 Can.o - 0x000002ba _ZN3Can16can_send_messageEP10CANMessage - .text._ZN3Led4initEv - 0x000003f2 0x8 Led.o - 0x000003f2 _ZN3Led4initEv - .text._ZN3LedC2Ev - 0x000003fa 0x6 Led.o - 0x000003fa _ZN3LedC1Ev - 0x000003fa _ZN3LedC2Ev - .text._ZN3Led5colorEh - 0x00000400 0x16 Led.o - 0x00000400 _ZN3Led5colorEh - .text._ZN3Led4fadeEiii - 0x00000416 0xbc Led.o - 0x00000416 _ZN3Led4fadeEiii - .text._ZN3Led7rainbowEh - 0x000004d2 0x7c Led.o - 0x000004d2 _ZN3Led7rainbowEh + 0x000005c2 0x138 Can.o + 0x000005c2 _ZN3Can16can_send_messageEP10CANMessage .text._ZN6OutputC2Ev - 0x0000054e 0x8 Output.o - 0x0000054e _ZN6OutputC2Ev - 0x0000054e _ZN6OutputC1Ev + 0x000006fa 0x8 Output.o + 0x000006fa _ZN6OutputC2Ev + 0x000006fa _ZN6OutputC1Ev .text._ZN6Output8AudioOffEv - 0x00000556 0x4 Output.o - 0x00000556 _ZN6Output8AudioOffEv + 0x00000702 0x4 Output.o + 0x00000702 _ZN6Output8AudioOffEv .text._ZN6Output7AudioOnEv - 0x0000055a 0x4 Output.o - 0x0000055a _ZN6Output7AudioOnEv - .text.libgcc 0x0000055e 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) - 0x0000055e __tablejump2__ - 0x00000562 __tablejump__ - 0x0000056a . = ALIGN (0x2) + 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) *(.fini9) - .fini9 0x0000056a 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) - 0x0000056a _exit - 0x0000056a exit + .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) *(.fini8) *(.fini8) @@ -362,49 +363,54 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x0000056a 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 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) - 0x0000056e _etext = . + 0x0000071a _etext = . -.data 0x00800060 0x0 load address 0x0000056e +.data 0x00800060 0x24 load address 0x0000071a 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 Led.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*) *(.rodata) *(.rodata*) + .rodata.str1.1 + 0x00800060 0x23 Button.o *(.gnu.linkonce.d*) - 0x00800060 . = ALIGN (0x2) - 0x00800060 _edata = . - 0x00800060 PROVIDE (__data_end, .) + 0x00800084 . = ALIGN (0x2) + *fill* 0x00800083 0x1 + 0x00800084 _edata = . + 0x00800084 PROVIDE (__data_end, .) -.bss 0x00800060 0x3 - 0x00800060 PROVIDE (__bss_start, .) +.bss 0x00800084 0x5 + 0x00800084 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800060 0x3 Button.o - 0x00800060 c - 0x00800061 o - 0x00800062 l + .bss 0x00800084 0x5 Button.o + 0x00800084 c + 0x00800085 o + 0x00800086 s + 0x00800087 u + 0x00800088 l *(.bss*) *(COMMON) - 0x00800063 PROVIDE (__bss_end, .) - 0x0000056e __data_load_start = LOADADDR (.data) - 0x0000056e __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00800089 PROVIDE (__bss_end, .) + 0x0000071a __data_load_start = LOADADDR (.data) + 0x0000073e __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800063 0x0 - 0x00800063 PROVIDE (__noinit_start, .) +.noinit 0x00800089 0x0 + 0x00800089 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800063 PROVIDE (__noinit_end, .) - 0x00800063 _end = . - 0x00800063 PROVIDE (__heap_start, .) + 0x00800089 PROVIDE (__noinit_end, .) + 0x00800089 _end = . + 0x00800089 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -450,7 +456,6 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .comment 0x00000000 0x2f Button.o 0x30 (size before relaxing) .comment 0x00000000 0x30 Can.o - .comment 0x00000000 0x30 Led.o .comment 0x00000000 0x30 Output.o .debug @@ -465,66 +470,57 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x120 +.debug_aranges 0x00000000 0xe0 *(.debug_aranges) .debug_aranges - 0x00000000 0x28 Button.o + 0x00000000 0x30 Button.o .debug_aranges - 0x00000028 0x70 Can.o + 0x00000030 0x70 Can.o .debug_aranges - 0x00000098 0x48 Led.o - .debug_aranges - 0x000000e0 0x40 Output.o + 0x000000a0 0x40 Output.o .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x1b32 +.debug_info 0x00000000 0x40d0 *(.debug_info) - .debug_info 0x00000000 0x6b5 Button.o - .debug_info 0x000006b5 0xdae Can.o - .debug_info 0x00001463 0x4db Led.o - .debug_info 0x0000193e 0x1f4 Output.o + .debug_info 0x00000000 0x312e Button.o + .debug_info 0x0000312e 0xdae Can.o + .debug_info 0x00003edc 0x1f4 Output.o *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0x8d3 +.debug_abbrev 0x00000000 0x841 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x2d0 Button.o - .debug_abbrev 0x000002d0 0x2fa Can.o - .debug_abbrev 0x000005ca 0x1eb Led.o - .debug_abbrev 0x000007b5 0x11e Output.o + .debug_abbrev 0x00000000 0x429 Button.o + .debug_abbrev 0x00000429 0x2fa Can.o + .debug_abbrev 0x00000723 0x11e Output.o -.debug_line 0x00000000 0x686 +.debug_line 0x00000000 0x723 *(.debug_line) - .debug_line 0x00000000 0x1ca Button.o - .debug_line 0x000001ca 0x2ce Can.o - .debug_line 0x00000498 0x165 Led.o - .debug_line 0x000005fd 0x89 Output.o + .debug_line 0x00000000 0x3cc Button.o + .debug_line 0x000003cc 0x2ce Can.o + .debug_line 0x0000069a 0x89 Output.o -.debug_frame 0x00000000 0x324 +.debug_frame 0x00000000 0x254 *(.debug_frame) - .debug_frame 0x00000000 0x44 Button.o - .debug_frame 0x00000044 0x19c Can.o - .debug_frame 0x000001e0 0xe0 Led.o - .debug_frame 0x000002c0 0x64 Output.o + .debug_frame 0x00000000 0x54 Button.o + .debug_frame 0x00000054 0x19c Can.o + .debug_frame 0x000001f0 0x64 Output.o -.debug_str 0x00000000 0x4ae +.debug_str 0x00000000 0x10df *(.debug_str) - .debug_str 0x00000000 0x430 Button.o - 0x481 (size before relaxing) - .debug_str 0x00000430 0x3c Can.o + .debug_str 0x00000000 0x108e Button.o + 0x10f0 (size before relaxing) + .debug_str 0x0000108e 0x32 Can.o 0x33e (size before relaxing) - .debug_str 0x0000046c 0x23 Led.o - 0x17f (size before relaxing) - .debug_str 0x0000048f 0x1f Output.o + .debug_str 0x000010c0 0x1f Output.o 0x150 (size before relaxing) -.debug_loc 0x00000000 0xb79 +.debug_loc 0x00000000 0xf51 *(.debug_loc) - .debug_loc 0x00000000 0x47 Button.o - .debug_loc 0x00000047 0x721 Can.o - .debug_loc 0x00000768 0x3eb Led.o - .debug_loc 0x00000b53 0x26 Output.o + .debug_loc 0x00000000 0x80a Button.o + .debug_loc 0x0000080a 0x721 Can.o + .debug_loc 0x00000f2b 0x26 Output.o .debug_macinfo *(.debug_macinfo) @@ -532,12 +528,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x128 +.debug_ranges 0x00000000 0x5e0 *(.debug_ranges) - .debug_ranges 0x00000000 0x18 Button.o - .debug_ranges 0x00000018 0x60 Can.o - .debug_ranges 0x00000078 0x80 Led.o - .debug_ranges 0x000000f8 0x30 Output.o + .debug_ranges 0x00000000 0x550 Button.o + .debug_ranges 0x00000550 0x60 Can.o + .debug_ranges 0x000005b0 0x30 Output.o .debug_macro *(.debug_macro) diff --git a/Button/Button/Debug/Button.srec b/Button/Button/Debug/Button.srec index 5c3f508..35b1326 100644 --- a/Button/Button/Debug/Button.srec +++ b/Button/Button/Debug/Button.srec @@ -1,89 +1,119 @@ S00E0000427574746F6E2E737265639A -S11300000C942B000C9448000C9448000C94480069 -S11300100C9448000C9448000C9448000C9448003C -S11300200C9448000C9448000C9448000C9448002C -S11300300C9448000C9448000C9448000C9448001C -S11300400C9448000C9448000C9448000C9448000C -S11300500C944800890011241FBECFE5D8E0DEBF10 -S1130060CDBF20E0A0E6B0E001C01D92A336B207E8 -S1130070E1F710E0C6E5D0E004C02297FE010E943B -S1130080B102C435D107C9F70E944A000C94B502E5 -S11300900C940000CF93DF93CDB7DEB72C970FB647 -S11300A0F894DEBF0FBECDBF66E082E690E00E940A -S11300B0000283E291E09A8389831B8282E08C832D -S11300C08FEA8D838EEF8E832AE030E044E050E0A7 -S11300D066E070E082E690E00E940B0281E690E028 -S11300E00E94AD02BE016F5F7F4F80E690E00E94E8 -S11300F05D018FE99FE00197F1F700C0000081E600 -S113010090E00E94AB0265E082E690E00E94690202 -S1130110E5CF82E690E00E94FD0181E690E00E9436 -S1130120A70280E690E00E944F01089587B3806A99 -S113013087BB88B38F7188BBBC9AC49A089580E545 -S11301408DB981E08EB908956FB9779BFECF8FB1D9 -S113015008950F931F93CF93DF93EC01062F142F71 -S1130160C49862E00E94A400602FCE010E94A40003 -S1130170612FCE010E94A400C49ADF91CF911F91F8 -S11301800F910895FF920F931F93CF93DF93EC0188 -S1130190F62E042F122FC49865E00E94A4006F2D40 -S11301A0CE010E94A400602FCE010E94A400612F02 -S11301B0CE010E94A400C49ADF91CF911F910F91A8 -S11301C0FF900895CF93DF93EC01C49860EC0E94F4 -S11301D0A4008FE99FE00197F1F700C00000C49AE2 -S11301E08FE39CE90197F1F700C0000047E06AE261 -S11301F0CE010E94A90040E969E2CE010E94A90053 -S113020042E068E2CE010E94A90043E06BE2CE0125 -S11302100E94A90040E660E6CE010E94A90040E6E3 -S113022060E7CE010E94A90040E060E2CE010E9496 -S1130230A90040E061E2CE010E94A90040E062E230 -S1130240CE010E94A90040E063E2CE010E94A90011 -S113025040E064E2CE010E94A90040E065E2CE01E4 -S11302600E94A90040E066E2CE010E94A90040E09D -S113027067E2CE010E94A90040E06CE0CE010E943A -S1130280A90040E06DE0CE010E94A90020E040EE0C -S11302906FE0CE010E94C200DF91CF910895CF9309 -S11302A0DF93EC010E949600CE010E949F00CE01D4 -S11302B00E94E200DF91CF910895AF92BF92CF9256 -S11302C0DF92EF92FF920F931F93CF93DF931F92CE -S11302D0CDB7DEB78C016B01C49860EA0E94A4001C -S11302E06FEFC8010E94A40089836FEFC8010E94C8 -S11302F0A400C49A898182FF0AC0898184FF09C04D -S1130300898186FD69C06894BB24B2F805C0B12C0C -S113031003C06894BB24B1F8C4986B2D6064C80111 -S11303200E94A400F60180819181BC0176956795B5 -S11303307695679576956795C8010E94A400F601A5 -S113034060816295660F607EC8010E94A40060E02F -S1130350C8010E94A40060E0C8010E94A400F60144 -S1130360A380F8E0FA1518F46894AA24A3F8F60117 -S11303708281882331F06A2D6064C8010E94A40040 -S113038019C06A2DC8010E94A400AA2099F0760120 -S1130390F4E0EF0EF11CAA948A2D90E00596C80EA5 -S11303A0D91EF70161917F01C8010E94A400EC14D9 -S11303B0FD04B9F7C49A0000C498B11005C061E8FF -S11303C0C8010E94A40005C06B2D6068C8010E948A -S11303D0A400C49A81E001C080E00F90DF91CF9126 -S11303E01F910F91FF90EF90DF90CF90BF90AF904F -S11303F0089584B3876084BB08950E94F901089529 -S113040085B3887F85BB85B3962F9370892B6470E1 -S1130410682B65BB08952F923F924F925F926F9223 -S11304207F928F929F92AF92BF92CF92DF92EF9280 -S1130430FF920F931F93CF93DF935C01862E942E2C -S1130440690100E010E0212C312C422C532C2AC0ED -S1130450C62DD72D682DC5010E9400022196CF3FDD -S1130460D105C1F71016110654F4C42DD52D692DEC -S1130470C5010E9400022196C017D107C1F78FEF72 -S1130480E81AF80AEC14FD0421F407C07101602E87 -S1130490712E0F3F1105E4F2E5CF0F5F1F4F0F3FA1 -S11304A0110521F01C141D048CF3F7CFDF91CF91BB -S11304B01F910F91FF90EF90DF90CF90BF90AF907E -S11304C09F908F907F906F905F904F903F902F9070 -S11304D008951F93CF93DF93EC01162F262F30E05E -S11304E046E050E064E070E00E940B02212F30E00F -S11304F042E050E066E070E0CE010E940B02212F42 -S113050030E043E050E062E070E0CE010E940B0274 -S1130510212F30E041E050E063E070E0CE010E9422 -S11305200B02212F30E045E050E061E070E0CE01A5 -S11305300E940B02212F30E044E050E065E070E0BF -S1130540CE010E940B02DF91CF911F91089584B3D5 -S1130550806384BB0895AD980895AD9A0895EE0F15 -S1110560FF1F0590F491E02D0994F894FFCF4D +S11300000C942B000C9453000C9453000C94530048 +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 S9030000FC diff --git a/Button/Button/Debug/Makefile b/Button/Button/Debug/Makefile index 20a8e33..4a71f8c 100644 --- a/Button/Button/Debug/Makefile +++ b/Button/Button/Debug/Makefile @@ -38,7 +38,6 @@ SUBDIRS := C_SRCS += \ ../Button.cpp \ ../Can.cpp \ -../Led.cpp \ ../Output.cpp @@ -51,28 +50,24 @@ ASM_SRCS += OBJS += \ Button.o \ Can.o \ -Led.o \ Output.o OBJS_AS_ARGS += \ Button.o \ Can.o \ -Led.o \ Output.o C_DEPS += \ Button.d \ Can.d \ -Led.d \ Output.d C_DEPS_AS_ARGS += \ Button.d \ Can.d \ -Led.d \ Output.d @@ -94,8 +89,6 @@ LIB_DEP+= - - ./%.o: .././%.cpp @echo Building file: $< @echo Invoking: AVR8/GNU C++ Compiler : diff --git a/Button/Button/Debug/makedep.mk b/Button/Button/Debug/makedep.mk index a7378d0..e6849a7 100644 --- a/Button/Button/Debug/makedep.mk +++ b/Button/Button/Debug/makedep.mk @@ -6,7 +6,5 @@ Button.cpp Can.cpp -Led.cpp - Output.cpp diff --git a/Button/Button/Led.hpp b/Button/Button/Led.hpp new file mode 100644 index 0000000..e4c8c5a --- /dev/null +++ b/Button/Button/Led.hpp @@ -0,0 +1,66 @@ +/* + * Led.h + * + * Created: 03.11.2013 17:11:58 + * Author: BlubbFish + */ + +#ifndef LED_H_ +#define LED_H_ + +#include "pin.hpp" + +template +class Led { + public: + Led() { + init(); + } + void color(uint8_t mask) { + (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); + fade(YELLOW, GREEN, time); + 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) { + for (uint8_t i=0;i<0xFF;i++) { + for(uint8_t k=0;k red; + const typedef avrlib::pin green; + const typedef avrlib::pin blue; +}; + + + +#endif /* LED_H_ */ \ No newline at end of file diff --git a/Button/Button/Spi.hpp b/Button/Button/Spi.hpp new file mode 100644 index 0000000..60e6c7b --- /dev/null +++ b/Button/Button/Spi.hpp @@ -0,0 +1,102 @@ +/* + * Spi.h + * + * Created: 06.11.2013 15:41:34 + * Author: netz + */ + + +#ifndef SPI_H_ +#define SPI_H_ + +#include "config.h" +#include +#include +#include "pin.hpp" + +template +class Spi { + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + u.send(t); + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + u.send(t); + return r; + } + private: + uart u; + const typedef avrlib::pin cs; + const typedef avrlib::pin miso; + const typedef avrlib::pin mosi; + const typedef avrlib::pin sck; + void init() { + init_port(); + if(mode == 0) { + init_spi(); + } + } + void init_port() { + mosi::make_output(); + mosi::make_low(); + sck::make_output(); + sck::make_low(); + cs::make_output(); + cs::make_high(); + miso::make_input(); + miso::make_low(); + } + void init_spi() { + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + mosi::make_high(); //Set Output High + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + { + datain |= 1; + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + } + return datain; + } + uint8_t send_hard(uint8_t data) { + // Sendet ein Byte + SPDR = data; + + // Wartet bis Byte gesendet wurde + loop_until_bit_is_set(SPSR, SPIF); + + return SPDR; + } +}; + +#endif /* SPI_H_ */ \ No newline at end of file diff --git a/Button/Button/pin.hpp b/Button/Button/pin.hpp new file mode 100644 index 0000000..c14f338 --- /dev/null +++ b/Button/Button/pin.hpp @@ -0,0 +1,50 @@ +#ifndef AVRLIB_PIN_HPP +#define AVRLIB_PIN_HPP + +#include + +namespace avrlib { + + template + struct pin + { + static void set(bool value = true) + { + if (value) + Port::port(Port::port() | (1< + +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + + 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; } + }; + +} + +#endif diff --git a/Button/Button/portc.hpp b/Button/Button/portc.hpp new file mode 100644 index 0000000..017e95b --- /dev/null +++ b/Button/Button/portc.hpp @@ -0,0 +1,22 @@ +#ifndef AVRLIB_PORTC_HPP +#define AVRLIB_PORTC_HPP + +#include + +namespace avrlib { + + struct portc + { + static uint8_t port() { return PORTC; } + static void port(uint8_t v) { PORTC = v; } + + 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; } + }; + +} + +#endif diff --git a/Button/Button/uart.hpp b/Button/Button/uart.hpp new file mode 100644 index 0000000..4d04510 --- /dev/null +++ b/Button/Button/uart.hpp @@ -0,0 +1,45 @@ +/* + * Rs232.h + * + * Created: 04.11.2013 21:31:09 + * Author: netz + */ + +#ifndef RS232_H_ +#define RS232_H_ + + +#include "config.h" +#include +#include + +template +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + { + uart_putchar(*text); + text++; + } + } + private: + void init() { + UCSRC = (1 << UCSZ1) | (1 << UCSZ0); //8N1 + UCSRB = /*(1<rtr) { - /* Ein RTR hat zwar eine Laenge, - aber enthaelt keine Daten */ + /-* Ein RTR hat zwar eine Laenge, + aber enthaelt keine Daten *-/ // Nachrichten Laenge + RTR einstellen s.send((1< +#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, (1<: - 0: 0c 94 3b 00 jmp 0x76 ; 0x76 <__ctors_end> - 4: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 8: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 10: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 14: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 18: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 1c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 20: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 24: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 28: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 2c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 30: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 34: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 38: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 3c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 40: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 44: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 48: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 4c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 50: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 54: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 58: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 5c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 60: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 64: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 68: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 6c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> - 70: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 0: 0c 94 3b 00 jmp 0x76 ; 0x76 <__ctors_end> + 4: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 8: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 10: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 14: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 18: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 1c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 20: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 24: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 28: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 2c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 30: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 34: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 38: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 3c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 40: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 44: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 48: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 4c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 50: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 54: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 58: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 5c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 60: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 64: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 68: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 6c: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> + 70: 0c 94 63 00 jmp 0xc6 ; 0xc6 <__bad_interrupt> 00000074 <__ctors_start>: - 74: 40 02 muls r20, r16 + 74: 58 16 cp r5, r24 00000076 <__ctors_end>: - 76: 11 24 eor r1, r1 - 78: 1f be out 0x3f, r1 ; 63 - 7a: cf ef ldi r28, 0xFF ; 255 - 7c: d4 e0 ldi r29, 0x04 ; 4 - 7e: de bf out 0x3e, r29 ; 62 - 80: cd bf out 0x3d, r28 ; 61 + 76: 11 24 eor r1, r1 + 78: 1f be out 0x3f, r1 ; 63 + 7a: cf ef ldi r28, 0xFF ; 255 + 7c: d4 e0 ldi r29, 0x04 ; 4 + 7e: de bf out 0x3e, r29 ; 62 + 80: cd bf out 0x3d, r28 ; 61 00000082 <__do_copy_data>: - 82: 11 e0 ldi r17, 0x01 ; 1 - 84: a0 e0 ldi r26, 0x00 ; 0 - 86: b1 e0 ldi r27, 0x01 ; 1 - 88: e4 ea ldi r30, 0xA4 ; 164 - 8a: f5 e0 ldi r31, 0x05 ; 5 - 8c: 02 c0 rjmp .+4 ; 0x92 <__do_copy_data+0x10> - 8e: 05 90 lpm r0, Z+ - 90: 0d 92 st X+, r0 - 92: a6 30 cpi r26, 0x06 ; 6 - 94: b1 07 cpc r27, r17 - 96: d9 f7 brne .-10 ; 0x8e <__do_copy_data+0xc> + 82: 11 e0 ldi r17, 0x01 ; 1 + 84: a0 e0 ldi r26, 0x00 ; 0 + 86: b1 e0 ldi r27, 0x01 ; 1 + 88: e8 ec ldi r30, 0xC8 ; 200 + 8a: f2 e3 ldi r31, 0x32 ; 50 + 8c: 02 c0 rjmp .+4 ; 0x92 <__do_copy_data+0x10> + 8e: 05 90 lpm r0, Z+ + 90: 0d 92 st X+, r0 + 92: a2 34 cpi r26, 0x42 ; 66 + 94: b1 07 cpc r27, r17 + 96: d9 f7 brne .-10 ; 0x8e <__do_copy_data+0xc> 00000098 <__do_clear_bss>: - 98: 21 e0 ldi r18, 0x01 ; 1 - 9a: a6 e0 ldi r26, 0x06 ; 6 - 9c: b1 e0 ldi r27, 0x01 ; 1 - 9e: 01 c0 rjmp .+2 ; 0xa2 <.do_clear_bss_start> + 98: 21 e0 ldi r18, 0x01 ; 1 + 9a: a2 e4 ldi r26, 0x42 ; 66 + 9c: b1 e0 ldi r27, 0x01 ; 1 + 9e: 01 c0 rjmp .+2 ; 0xa2 <.do_clear_bss_start> 000000a0 <.do_clear_bss_loop>: - a0: 1d 92 st X+, r1 + a0: 1d 92 st X+, r1 000000a2 <.do_clear_bss_start>: - a2: a9 30 cpi r26, 0x09 ; 9 - a4: b2 07 cpc r27, r18 - a6: e1 f7 brne .-8 ; 0xa0 <.do_clear_bss_loop> + a2: a7 34 cpi r26, 0x47 ; 71 + a4: b2 07 cpc r27, r18 + a6: e1 f7 brne .-8 ; 0xa0 <.do_clear_bss_loop> 000000a8 <__do_global_ctors>: - a8: 10 e0 ldi r17, 0x00 ; 0 - aa: c6 e7 ldi r28, 0x76 ; 118 - ac: d0 e0 ldi r29, 0x00 ; 0 - ae: 04 c0 rjmp .+8 ; 0xb8 <__do_global_ctors+0x10> - b0: 22 97 sbiw r28, 0x02 ; 2 - b2: fe 01 movw r30, r28 - b4: 0e 94 cc 02 call 0x598 ; 0x598 <__tablejump__> - b8: c4 37 cpi r28, 0x74 ; 116 - ba: d1 07 cpc r29, r17 - bc: c9 f7 brne .-14 ; 0xb0 <__do_global_ctors+0x8> - be: 0e 94 f9 01 call 0x3f2 ; 0x3f2
- c2: 0c 94 d0 02 jmp 0x5a0 ; 0x5a0 <_exit> + a8: 10 e0 ldi r17, 0x00 ; 0 + aa: c6 e7 ldi r28, 0x76 ; 118 + ac: d0 e0 ldi r29, 0x00 ; 0 + ae: 04 c0 rjmp .+8 ; 0xb8 <__do_global_ctors+0x10> + b0: 22 97 sbiw r28, 0x02 ; 2 + b2: fe 01 movw r30, r28 + b4: 0e 94 7c 16 call 0x2cf8 ; 0x2cf8 <__tablejump__> + b8: c4 37 cpi r28, 0x74 ; 116 + ba: d1 07 cpc r29, r17 + bc: c9 f7 brne .-14 ; 0xb0 <__do_global_ctors+0x8> + be: 0e 94 65 00 call 0xca ; 0xca
+ c2: 0c 94 62 19 jmp 0x32c4 ; 0x32c4 <_exit> 000000c6 <__bad_interrupt>: - c6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> + c6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors> -000000ca <_ZN3Can22mcp2515_write_registerEhh>: - 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 - ca: ff 92 push r15 - cc: 0f 93 push r16 - if (address == 0x00) { - ce: 1f 93 push r17 - d0: cf 93 push r28 - s.send(SPI_RTS | 0x01); - d2: df 93 push r29 - d4: 1f 92 push r1 - d6: cd b7 in r28, 0x3d ; 61 - d8: de b7 in r29, 0x3e ; 62 - } else { - s.send(SPI_RTS | address); - } - s.CSOff(); // CS auf High - da: f8 2e mov r15, r24 - dc: 09 2f mov r16, r25 - de: 16 2f mov r17, r22 - - return 1; - e0: 49 83 std Y+1, r20 ; 0x01 -} - e2: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> - e6: 62 e0 ldi r22, 0x02 ; 2 - e8: 8f 2d mov r24, r15 - ea: 90 2f mov r25, r16 - ec: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - f0: 61 2f mov r22, r17 - f2: 8f 2d mov r24, r15 - f4: 90 2f mov r25, r16 - f6: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - fa: 49 81 ldd r20, Y+1 ; 0x01 - fc: 64 2f mov r22, r20 - */ - - if (bit_is_clear(status, 2)) { - address = 0x00; - } - else if (bit_is_clear(status, 4)) { - fe: 8f 2d mov r24, r15 - address = 0x02; - 100: 90 2f mov r25, r16 - 102: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - Puffer gesendet werden soll */ - s.CSOn(); // CS wieder Low - if (address == 0x00) { - s.send(SPI_RTS | 0x01); - } else { - s.send(SPI_RTS | address); - 106: 8f 2d mov r24, r15 - 108: 90 2f mov r25, r16 - 10a: 0f 90 pop r0 - 10c: df 91 pop r29 - 10e: cf 91 pop r28 - 110: 1f 91 pop r17 - s.send((1< - -0000011a <_ZN3Can8init_canEv>: - - // Daten - for (uint8_t i=0;i - 126: 60 ec ldi r22, 0xC0 ; 192 - 128: 8d 2f mov r24, r29 - 12a: 9c 2f mov r25, r28 - 12c: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 130: 8f e9 ldi r24, 0x9F ; 159 - 132: 9f e0 ldi r25, 0x0F ; 15 - 134: 01 97 sbiw r24, 0x01 ; 1 - // Nachrichten Laenge einstellen - s.send(length); - - // Daten - for (uint8_t i=0;idata[i]); - 136: f1 f7 brne .-4 ; 0x134 <_ZN3Can8init_canEv+0x1a> - 138: 00 c0 rjmp .+0 ; 0x13a <_ZN3Can8init_canEv+0x20> - 13a: 00 00 nop - 13c: 8d 2f mov r24, r29 - 13e: 9c 2f mov r25, r28 - 140: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> - { - // Nachrichten Laenge einstellen - s.send(length); - - // Daten - for (uint8_t i=0;i - address = 0x00; - 14c: 00 c0 rjmp .+0 ; 0x14e <_ZN3Can8init_canEv+0x34> - 14e: 00 00 nop - address = 0x04; - } - else { - /* Alle Puffer sind belegt, - Nachricht kann nicht verschickt werden */ - return 0; - 150: 47 e0 ldi r20, 0x07 ; 7 - 152: 6a e2 ldi r22, 0x2A ; 42 - * 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; - 198: 40 e0 ldi r20, 0x00 ; 0 - 19a: 60 e2 ldi r22, 0x20 ; 32 - 19c: 8d 2f mov r24, r29 - 19e: 9c 2f mov r25, r28 - 1a0: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0SIDL, 0 ); //return; - 1a4: 40 e0 ldi r20, 0x00 ; 0 - 1a6: 61 e2 ldi r22, 0x21 ; 33 - 1a8: 8d 2f mov r24, r29 - 1aa: 9c 2f mov r25, r28 - 1ac: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0EID8, 0 ); - 1b0: 40 e0 ldi r20, 0x00 ; 0 - 1b2: 62 e2 ldi r22, 0x22 ; 34 - 1b4: 8d 2f mov r24, r29 - 1b6: 9c 2f mov r25, r28 - 1b8: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM0EID0, 0 ); - 1bc: 40 e0 ldi r20, 0x00 ; 0 - 1be: 63 e2 ldi r22, 0x23 ; 35 - 1c0: 8d 2f mov r24, r29 - 1c2: 9c 2f mov r25, r28 - 1c4: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - - mcp2515_write_register( RXM1SIDH, 0 ); //return; - 1c8: 40 e0 ldi r20, 0x00 ; 0 - 1ca: 64 e2 ldi r22, 0x24 ; 36 - 1cc: 8d 2f mov r24, r29 - 1ce: 9c 2f mov r25, r28 - 1d0: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1SIDL, 0 ); //return; - 1d4: 40 e0 ldi r20, 0x00 ; 0 - 1d6: 65 e2 ldi r22, 0x25 ; 37 - 1d8: 8d 2f mov r24, r29 - 1da: 9c 2f mov r25, r28 - 1dc: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1EID8, 0 ); - 1e0: 40 e0 ldi r20, 0x00 ; 0 - 1e2: 66 e2 ldi r22, 0x26 ; 38 - 1e4: 8d 2f mov r24, r29 - 1e6: 9c 2f mov r25, r28 - 1e8: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - mcp2515_write_register( RXM1EID0, 0 ); - 1ec: 40 e0 ldi r20, 0x00 ; 0 - 1ee: 67 e2 ldi r22, 0x27 ; 39 - 1f0: 8d 2f mov r24, r29 - 1f2: 9c 2f mov r25, r28 - 1f4: 0e 94 65 00 call 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - /* - * Einstellen der Pin Funktionen - */ - - // Deaktivieren der Pins RXnBF Pins (High Impedance State) - mcp2515_write_register( BFPCTRL, 0 ); return; - 1f8: 40 e0 ldi r20, 0x00 ; 0 - 1fa: 6c e0 ldi r22, 0x0C ; 12 - 1fc: 8d 2f mov r24, r29 - 1fe: 9c 2f mov r25, r28 - // TXnRTS Bits als Inputs schalten - mcp2515_write_register( TXRTSCTRL, 0 ); - - // Device zurueck in den normalen Modus versetzten - mcp2515_bit_modify( CANCTRL, 0xE0, 0); -} - 200: df 91 pop r29 - 202: cf 91 pop r28 - /* - * Einstellen der Pin Funktionen - */ - - // Deaktivieren der Pins RXnBF Pins (High Impedance State) - mcp2515_write_register( BFPCTRL, 0 ); return; - 204: 0c 94 65 00 jmp 0xca ; 0xca <_ZN3Can22mcp2515_write_registerEhh> - -00000208 <_ZN3CanC1E3Spi>: - * Author: netz - */ - -#include "Can.h" - -Can::Can(Spi spi) : s(spi) { - 208: fc 01 movw r30, r24 - 20a: 60 83 st Z, r22 - init_can(); - 20c: 0c 94 8d 00 jmp 0x11a ; 0x11a <_ZN3Can8init_canEv> - -00000210 <_ZN3Can18mcp2515_bit_modifyEhhh>: - - return data; -} - -void Can::mcp2515_bit_modify(uint8_t adress, uint8_t mask, uint8_t data) -{ - 210: ff 92 push r15 - 212: 0f 93 push r16 - 214: 1f 93 push r17 - 216: cf 93 push r28 - 218: df 93 push r29 - 21a: 00 d0 rcall .+0 ; 0x21c <_ZN3Can18mcp2515_bit_modifyEhhh+0xc> - 21c: cd b7 in r28, 0x3d ; 61 - 21e: de b7 in r29, 0x3e ; 62 - 220: f8 2e mov r15, r24 - 222: 09 2f mov r16, r25 - 224: 16 2f mov r17, r22 - // /CS des MCP2515 auf Low ziehen - s.CSOn(); - 226: 2a 83 std Y+2, r18 ; 0x02 - 228: 49 83 std Y+1, r20 ; 0x01 - 22a: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> - - s.send(SPI_BIT_MODIFY); - 22e: 65 e0 ldi r22, 0x05 ; 5 - 230: 8f 2d mov r24, r15 - 232: 90 2f mov r25, r16 - 234: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - s.send(adress); - 238: 61 2f mov r22, r17 - 23a: 8f 2d mov r24, r15 - 23c: 90 2f mov r25, r16 - 23e: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - s.send(mask); - 242: 49 81 ldd r20, Y+1 ; 0x01 - 244: 64 2f mov r22, r20 - 246: 8f 2d mov r24, r15 - 248: 90 2f mov r25, r16 - 24a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - s.send(data); - 24e: 2a 81 ldd r18, Y+2 ; 0x02 - 250: 62 2f mov r22, r18 - 252: 8f 2d mov r24, r15 - 254: 90 2f mov r25, r16 - 256: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - - // /CS Leitung wieder freigeben - s.CSOff(); - 25a: 8f 2d mov r24, r15 - 25c: 90 2f mov r25, r16 -} - 25e: 0f 90 pop r0 - 260: 0f 90 pop r0 - 262: df 91 pop r29 - 264: cf 91 pop r28 - 266: 1f 91 pop r17 - 268: 0f 91 pop r16 - 26a: ff 90 pop r15 - s.send(adress); - s.send(mask); - s.send(data); - - // /CS Leitung wieder freigeben - s.CSOff(); - 26c: 0c 94 97 02 jmp 0x52e ; 0x52e <_ZN3Spi5CSOffEv> - -00000270 <_ZN3Can22mcp2515_read_rx_statusEv>: - - return (status & 0x07); -} - -uint8_t Can::mcp2515_read_rx_status(void) -{ - 270: 1f 93 push r17 - 272: cf 93 push r28 - 274: df 93 push r29 - 276: d8 2f mov r29, r24 - 278: c9 2f mov r28, r25 - uint8_t data; - - // /CS des MCP2515 auf Low ziehen - s.CSOn(); - 27a: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> - - s.send(SPI_RX_STATUS); - 27e: 60 eb ldi r22, 0xB0 ; 176 - 280: 8d 2f mov r24, r29 - 282: 9c 2f mov r25, r28 - 284: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - data = s.send(0xff); - 288: 6f ef ldi r22, 0xFF ; 255 - 28a: 8d 2f mov r24, r29 - 28c: 9c 2f mov r25, r28 - 28e: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 292: 18 2f mov r17, r24 - - // Die Daten werden noch einmal wiederholt gesendet, - // man braucht also nur eins der beiden Bytes auswerten. - s.send(0xff); - 294: 6f ef ldi r22, 0xFF ; 255 - 296: 8d 2f mov r24, r29 - 298: 9c 2f mov r25, r28 - 29a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - - // /CS Leitung wieder freigeben - s.CSOff(); - 29e: 8d 2f mov r24, r29 - 2a0: 9c 2f mov r25, r28 - 2a2: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> - - return data; - 2a6: 81 2f mov r24, r17 - 2a8: df 91 pop r29 - 2aa: cf 91 pop r28 - 2ac: 1f 91 pop r17 - 2ae: 08 95 ret - -000002b0 <_ZN3Can15can_get_messageEP10CANMessage>: - - return 1; -} - -uint8_t Can::can_get_message(CANMessage *p_message) -{ - 2b0: 9f 92 push r9 - 2b2: af 92 push r10 - 2b4: bf 92 push r11 - 2b6: cf 92 push r12 - 2b8: df 92 push r13 - 2ba: ef 92 push r14 - 2bc: ff 92 push r15 - 2be: 0f 93 push r16 - 2c0: 1f 93 push r17 - 2c2: cf 93 push r28 - 2c4: df 93 push r29 - 2c6: 1f 92 push r1 - 2c8: cd b7 in r28, 0x3d ; 61 - 2ca: de b7 in r29, 0x3e ; 62 - 2cc: 5c 01 movw r10, r24 - 2ce: 6b 01 movw r12, r22 - // Status auslesen - uint8_t status = mcp2515_read_rx_status(); - 2d0: 0e 94 38 01 call 0x270 ; 0x270 <_ZN3Can22mcp2515_read_rx_statusEv> - 2d4: 98 2e mov r9, r24 - 2d6: 89 83 std Y+1, r24 ; 0x01 - - if (bit_is_set(status,6)) - 2d8: 89 81 ldd r24, Y+1 ; 0x01 - 2da: 86 fd sbrc r24, 6 - 2dc: 11 c0 rjmp .+34 ; 0x300 <_ZN3Can15can_get_messageEP10CANMessage+0x50> - // Nachricht in Puffer 0 - - s.CSOn(); // CS Low - s.send(SPI_READ_RX); - } - else if (bit_is_set(status,7)) - 2de: 89 81 ldd r24, Y+1 ; 0x01 - 2e0: 87 fd sbrc r24, 7 - 2e2: 7f c0 rjmp .+254 ; 0x3e2 <_ZN3Can15can_get_messageEP10CANMessage+0x132> - s.CSOn(); // CS Low - s.send(SPI_READ_RX | 0x04); - } - else { - /* Fehler: Keine neue Nachricht vorhanden */ - return 0xff; - 2e4: 8f ef ldi r24, 0xFF ; 255 - } else { - mcp2515_bit_modify(CANINTF, (1< - s.send(SPI_READ_RX); - 306: 60 e9 ldi r22, 0x90 ; 144 - 308: c5 01 movw r24, r10 - 30a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - /* Fehler: Keine neue Nachricht vorhanden */ - return 0xff; - } - - // Standard ID auslesen - p_message->id = (uint16_t) s.send(0xff) << 3; - 30e: 6f ef ldi r22, 0xFF ; 255 - 310: c5 01 movw r24, r10 - 312: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 316: 28 2f mov r18, r24 - 318: 30 e0 ldi r19, 0x00 ; 0 - 31a: 22 0f add r18, r18 - 31c: 33 1f adc r19, r19 - 31e: 22 0f add r18, r18 - 320: 33 1f adc r19, r19 - 322: 22 0f add r18, r18 - 324: 33 1f adc r19, r19 - 326: f6 01 movw r30, r12 - 328: 31 83 std Z+1, r19 ; 0x01 - 32a: 20 83 st Z, r18 - p_message->id |= (uint16_t) s.send(0xff) >> 5; - 32c: 6f ef ldi r22, 0xFF ; 255 - 32e: c5 01 movw r24, r10 - 330: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 334: 48 2f mov r20, r24 - 336: 50 e0 ldi r21, 0x00 ; 0 - 338: 56 95 lsr r21 - 33a: 47 95 ror r20 - 33c: 52 95 swap r21 - 33e: 42 95 swap r20 - 340: 4f 70 andi r20, 0x0F ; 15 - 342: 45 27 eor r20, r21 - 344: 5f 70 andi r21, 0x0F ; 15 - 346: 45 27 eor r20, r21 - 348: f6 01 movw r30, r12 - 34a: 20 81 ld r18, Z - 34c: 31 81 ldd r19, Z+1 ; 0x01 - 34e: 24 2b or r18, r20 - 350: 35 2b or r19, r21 - 352: 31 83 std Z+1, r19 ; 0x01 - 354: 20 83 st Z, r18 - - s.send(0xff); - 356: 6f ef ldi r22, 0xFF ; 255 - 358: c5 01 movw r24, r10 - 35a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - s.send(0xff); - 35e: 6f ef ldi r22, 0xFF ; 255 - 360: c5 01 movw r24, r10 - 362: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - - // Laenge auslesen - uint8_t length = s.send(0xff) & 0x0f; - 366: 6f ef ldi r22, 0xFF ; 255 - 368: c5 01 movw r24, r10 - 36a: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 36e: 8f 70 andi r24, 0x0F ; 15 - p_message->length = length; - 370: f6 01 movw r30, r12 - 372: 83 83 std Z+3, r24 ; 0x03 - - // Daten auslesen - for (uint8_t i=0;i - s.CSOff(); // CS auf High - - return 1; -} - -uint8_t Can::can_get_message(CANMessage *p_message) - 378: 86 01 movw r16, r12 - 37a: 0c 5f subi r16, 0xFC ; 252 - 37c: 1f 4f sbci r17, 0xFF ; 255 - 37e: 76 01 movw r14, r12 - 380: f5 e0 ldi r31, 0x05 ; 5 - 382: ef 0e add r14, r31 - 384: f1 1c adc r15, r1 - 386: 81 50 subi r24, 0x01 ; 1 - 388: e8 0e add r14, r24 - 38a: f1 1c adc r15, r1 - uint8_t length = s.send(0xff) & 0x0f; - p_message->length = length; - - // Daten auslesen - for (uint8_t i=0;idata[i] = s.send(0xff); - 38c: 6f ef ldi r22, 0xFF ; 255 - 38e: c5 01 movw r24, r10 - 390: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 394: f8 01 movw r30, r16 - 396: 81 93 st Z+, r24 - 398: 8f 01 movw r16, r30 - // Laenge auslesen - uint8_t length = s.send(0xff) & 0x0f; - p_message->length = length; - - // Daten auslesen - for (uint8_t i=0;i - p_message->data[i] = s.send(0xff); - } - - s.CSOff(); - 3a0: c5 01 movw r24, r10 - 3a2: 0e 94 97 02 call 0x52e ; 0x52e <_ZN3Spi5CSOffEv> - - if (bit_is_set(status,3)) { - 3a6: 89 81 ldd r24, Y+1 ; 0x01 - 3a8: 83 fd sbrc r24, 3 - 3aa: 0e c0 rjmp .+28 ; 0x3c8 <_ZN3Can15can_get_messageEP10CANMessage+0x118> - p_message->rtr = 1; - } else { - p_message->rtr = 0; - 3ac: f6 01 movw r30, r12 - 3ae: 12 82 std Z+2, r1 ; 0x02 - } - - // Interrupt Flag loeschen - if (bit_is_set(status,6)) { - 3b0: 89 81 ldd r24, Y+1 ; 0x01 - mcp2515_bit_modify(CANINTF, (1<rtr = 0; - } - - // Interrupt Flag loeschen - if (bit_is_set(status,6)) { - 3b4: 86 ff sbrs r24, 6 - 3b6: 0f c0 rjmp .+30 ; 0x3d6 <_ZN3Can15can_get_messageEP10CANMessage+0x126> - mcp2515_bit_modify(CANINTF, (1< - } else { - mcp2515_bit_modify(CANINTF, (1< - } - - s.CSOff(); - - if (bit_is_set(status,3)) { - p_message->rtr = 1; - 3c8: 81 e0 ldi r24, 0x01 ; 1 - 3ca: f6 01 movw r30, r12 - 3cc: 82 83 std Z+2, r24 ; 0x02 - } else { - p_message->rtr = 0; - } - - // Interrupt Flag loeschen - if (bit_is_set(status,6)) { - 3ce: 89 81 ldd r24, Y+1 ; 0x01 - mcp2515_bit_modify(CANINTF, (1<rtr = 0; - } - - // Interrupt Flag loeschen - if (bit_is_set(status,6)) { - 3d2: 86 fd sbrc r24, 6 - 3d4: f1 cf rjmp .-30 ; 0x3b8 <_ZN3Can15can_get_messageEP10CANMessage+0x108> - mcp2515_bit_modify(CANINTF, (1< - 3e0: f0 cf rjmp .-32 ; 0x3c2 <_ZN3Can15can_get_messageEP10CANMessage+0x112> - } - else if (bit_is_set(status,7)) - { - // Nachricht in Puffer 1 - - s.CSOn(); // CS Low - 3e2: c5 01 movw r24, r10 - 3e4: 0e 94 9a 02 call 0x534 ; 0x534 <_ZN3Spi4CSOnEv> - s.send(SPI_READ_RX | 0x04); - 3e8: 64 e9 ldi r22, 0x94 ; 148 - 3ea: c5 01 movw r24, r10 - 3ec: 0e 94 be 02 call 0x57c ; 0x57c <_ZN3Spi4sendEh> - 3f0: 8e cf rjmp .-228 ; 0x30e <_ZN3Can15can_get_messageEP10CANMessage+0x5e> - -000003f2
: -ledclass l; -Rs232 r; -Can c(Spi(0)); +000000ca
: +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; int main(void) { - 3f2: cf 93 push r28 - 3f4: df 93 push r29 - 3f6: cd b7 in r28, 0x3d ; 61 - 3f8: de b7 in r29, 0x3e ; 62 - 3fa: 2c 97 sbiw r28, 0x0c ; 12 - 3fc: 0f b6 in r0, 0x3f ; 63 - 3fe: f8 94 cli - 400: de bf out 0x3e, r29 ; 62 - 402: 0f be out 0x3f, r0 ; 63 - 404: cd bf out 0x3d, r28 ; 61 + ca: cf 93 push r28 + cc: df 93 push r29 + ce: cd b7 in r28, 0x3d ; 61 + d0: de b7 in r29, 0x3e ; 62 + d2: e4 97 sbiw r28, 0x34 ; 52 + d4: 0f b6 in r0, 0x3f ; 63 + d6: f8 94 cli + d8: de bf out 0x3e, r29 ; 62 + da: 0f be out 0x3f, r0 ; 63 + dc: cd bf out 0x3d, r28 ; 61 namespace avrlib { - struct portc + struct portb { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 406: 47 98 cbi 0x08, 7 ; 8 + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + de: 2d 98 cbi 0x05, 5 ; 5 - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 408: 3f 9a sbi 0x07, 7 ; 7 + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + e0: 25 9a sbi 0x04, 5 ; 4 namespace avrlib { - struct portc + struct portb { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 40a: 46 9a sbi 0x08, 6 ; 8 + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + e2: 2e 9a sbi 0x05, 6 ; 5 - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 40c: 3e 9a sbi 0x07, 6 ; 7 + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + e4: 26 9a sbi 0x04, 6 ; 4 namespace avrlib { - struct portc + struct portb { - static uint8_t port() { return PORTC; } - static void port(uint8_t v) { PORTC = v; } - 40e: 45 9a sbi 0x08, 5 ; 8 + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + e6: 2f 9a sbi 0x05, 7 ; 5 - static uint8_t pin() { return PINC; } - static void pin(uint8_t v) { PINC = v; } + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } - static uint8_t dir() { return DDRC; } - static void dir(uint8_t v) { DDRC = v; } - 410: 3d 9a sbi 0x07, 5 ; 7 - //l.color(Led::YELLOW); - l.color(l.YELLOW); - r.send("bla\n"); - 412: 60 e0 ldi r22, 0x00 ; 0 - 414: 71 e0 ldi r23, 0x01 ; 1 - 416: 87 e0 ldi r24, 0x07 ; 7 - 418: 91 e0 ldi r25, 0x01 ; 1 - 41a: 0e 94 66 02 call 0x4cc ; 0x4cc <_ZN5Rs2324sendEPKc> - CANMessage m; - m.id = 0x0123; - 41e: 83 e2 ldi r24, 0x23 ; 35 - 420: 91 e0 ldi r25, 0x01 ; 1 - 422: 9a 83 std Y+2, r25 ; 0x02 - 424: 89 83 std Y+1, r24 ; 0x01 - m.rtr = 0; - 426: 1b 82 std Y+3, r1 ; 0x03 - m.length = 2; - 428: 82 e0 ldi r24, 0x02 ; 2 - 42a: 8c 83 std Y+4, r24 ; 0x04 - m.data[0] = 0xAF; - 42c: 8f ea ldi r24, 0xAF ; 175 - 42e: 8d 83 std Y+5, r24 ; 0x05 - m.data[1] = 0xFE; - 430: 8e ef ldi r24, 0xFE ; 254 - 432: 8e 83 std Y+6, r24 ; 0x06 - 434: 09 c0 rjmp .+18 ; 0x448 + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + e8: 27 9a sbi 0x04, 7 ; 4 + ea: e1 e0 ldi r30, 0x01 ; 1 + ec: f1 e0 ldi r31, 0x01 ; 1 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + ee: 89 e4 ldi r24, 0x49 ; 73 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + f8: 80 93 ce 00 sts 0x00CE, r24 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + fc: 81 91 ld r24, Z+ + fe: 81 11 cpse r24, r1 + 100: f7 cf rjmp .-18 ; 0xf0 + 102: 8e 01 movw r16, r28 + 104: 0f 5f subi r16, 0xFF ; 255 + 106: 1f 4f sbci r17, 0xFF ; 255 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 108: 9d e1 ldi r25, 0x1D ; 29 + 10a: c9 2e mov r12, r25 + 10c: 91 e0 ldi r25, 0x01 ; 1 + 10e: d9 2e mov r13, r25 + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 110: 27 e2 ldi r18, 0x27 ; 39 + 112: e2 2e mov r14, r18 + 114: 21 e0 ldi r18, 0x01 ; 1 + 116: f2 2e mov r15, r18 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 118: bb 24 eor r11, r11 + 11a: ba 94 dec r11 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 11c: 2d 98 cbi 0x05, 5 ; 5 + + 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; } + 11e: 25 9a sbi 0x04, 5 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 120: 2e 9a sbi 0x05, 6 ; 5 + + 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; } + 122: 26 9a sbi 0x04, 6 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 124: 2f 98 cbi 0x05, 7 ; 5 + + 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; } + 126: 27 9a sbi 0x04, 7 ; 4 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 436: 2f ef ldi r18, 0xFF ; 255 - 438: 83 ed ldi r24, 0xD3 ; 211 - 43a: 90 e3 ldi r25, 0x30 ; 48 - 43c: 21 50 subi r18, 0x01 ; 1 - 43e: 80 40 sbci r24, 0x00 ; 0 - 440: 90 40 sbci r25, 0x00 ; 0 - 442: e1 f7 brne .-8 ; 0x43c - 444: 00 c0 rjmp .+0 ; 0x446 - 446: 00 00 nop - 448: 2f ef ldi r18, 0xFF ; 255 - 44a: 81 ee ldi r24, 0xE1 ; 225 - 44c: 94 e0 ldi r25, 0x04 ; 4 - 44e: 21 50 subi r18, 0x01 ; 1 - 450: 80 40 sbci r24, 0x00 ; 0 - 452: 90 40 sbci r25, 0x00 ; 0 - 454: e1 f7 brne .-8 ; 0x44e - 456: 00 c0 rjmp .+0 ; 0x458 - 458: 00 00 nop - //c.can_send_message(&m); - //l.color(Led::BLACK); - //_delay_ms(100); - //l.color(Led::GREEN); - //c.can_send_message(&m); - uint8_t r = c.can_get_message(&m); - 45a: be 01 movw r22, r28 - 45c: 6f 5f subi r22, 0xFF ; 255 - 45e: 7f 4f sbci r23, 0xFF ; 255 - 460: 86 e0 ldi r24, 0x06 ; 6 - 462: 91 e0 ldi r25, 0x01 ; 1 - 464: 0e 94 58 01 call 0x2b0 ; 0x2b0 <_ZN3Can15can_get_messageEP10CANMessage> - if(r == 0xFF) { - 468: 8f 3f cpi r24, 0xFF ; 255 - 46a: 29 f7 brne .-54 ; 0x436 - 46c: 2f ef ldi r18, 0xFF ; 255 - 46e: 81 ee ldi r24, 0xE1 ; 225 - 470: 94 e0 ldi r25, 0x04 ; 4 - 472: 21 50 subi r18, 0x01 ; 1 - 474: 80 40 sbci r24, 0x00 ; 0 - 476: 90 40 sbci r25, 0x00 ; 0 - 478: e1 f7 brne .-8 ; 0x472 - 47a: 00 c0 rjmp .+0 ; 0x47c - 47c: 00 00 nop - 47e: e4 cf rjmp .-56 ; 0x448 - -00000480 <_GLOBAL__sub_I_l>: - } else { - //l.color(Led::BLUE); - _delay_ms(1000); + 128: 2a ea ldi r18, 0xAA ; 170 + 12a: 36 ee ldi r19, 0xE6 ; 230 + 12c: 46 e9 ldi r20, 0x96 ; 150 + 12e: 81 e0 ldi r24, 0x01 ; 1 + 130: 21 50 subi r18, 0x01 ; 1 + 132: 30 40 sbci r19, 0x00 ; 0 + 134: 40 40 sbci r20, 0x00 ; 0 + 136: 80 40 sbci r24, 0x00 ; 0 + 138: d9 f7 brne .-10 ; 0x130 + 13a: 00 00 nop + 13c: ee e0 ldi r30, 0x0E ; 14 + 13e: f1 e0 ldi r31, 0x01 ; 1 + 140: 9e e4 ldi r25, 0x4E ; 78 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< - -//Led l; -typedef Led ledclass; -ledclass l; -Rs232 r; - 490: 87 e0 ldi r24, 0x07 ; 7 - 492: 91 e0 ldi r25, 0x01 ; 1 - 494: 0e 94 5a 02 call 0x4b4 ; 0x4b4 <_ZN5Rs232C1Ev> -Can c(Spi(0)); - 498: 60 e0 ldi r22, 0x00 ; 0 - 49a: ce 01 movw r24, r28 - 49c: 01 96 adiw r24, 0x01 ; 1 - 49e: 0e 94 92 02 call 0x524 ; 0x524 <_ZN3SpiC1Eh> - 4a2: 69 81 ldd r22, Y+1 ; 0x01 - 4a4: 86 e0 ldi r24, 0x06 ; 6 - 4a6: 91 e0 ldi r25, 0x01 ; 1 - 4a8: 0e 94 04 01 call 0x208 ; 0x208 <_ZN3CanC1E3Spi> - } else { - //l.color(Led::BLUE); - _delay_ms(1000); + uint8_t uart_putchar(uint8_t c) { + loop_until_bit_is_set(UCSR1A, UDRE1); //Ausgabe des Zeichens + 142: 80 91 c8 00 lds r24, 0x00C8 + 146: 85 ff sbrs r24, 5 + 148: fc cf rjmp .-8 ; 0x142 + UDR1 = c; + 14a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); } - } - 4ac: 0f 90 pop r0 - 4ae: df 91 pop r29 - 4b0: cf 91 pop r28 - 4b2: 08 95 ret - -000004b4 <_ZN5Rs232C1Ev>: - return 0; -} - -void Rs232::init() -{ - UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - 4b4: 86 e0 ldi r24, 0x06 ; 6 - 4b6: 80 93 ca 00 sts 0x00CA, r24 - UCSR1B |= /*(1<: -} - -void Rs232::send(const char * text) { - while (*text) - 4cc: fb 01 movw r30, r22 - 4ce: 90 81 ld r25, Z - 4d0: 99 23 and r25, r25 - 4d2: 51 f0 breq .+20 ; 0x4e8 <_ZN5Rs2324sendEPKc+0x1c> - UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - UCSR1B |= /*(1< - UDR1 = c; - 4de: 90 93 ce 00 sts 0x00CE, r25 - UCSR1B |= /*(1< - 4e8: 08 95 ret - -000004ea <_ZN3Spi9init_portEv>: - - 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; } - 4ea: 22 9a sbi 0x04, 2 ; 4 + void send(const char *text) { + while (*text) + 14e: 91 91 ld r25, Z+ + 150: 91 11 cpse r25, r1 + 152: f7 cf rjmp .-18 ; 0x142 namespace avrlib { struct portb { static uint8_t port() { return PORTB; } static void port(uint8_t v) { PORTB = v; } - 4ec: 2a 98 cbi 0x05, 2 ; 5 + 154: 2c 98 cbi 0x05, 4 ; 5 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; } - 4ee: 22 9a sbi 0x04, 2 ; 4 - 4f0: 21 9a sbi 0x04, 1 ; 4 + 156: 24 9a sbi 0x04, 4 ; 4 + 158: 1f 92 push r1 + 15a: 80 eb ldi r24, 0xB0 ; 176 + 15c: 8f 93 push r24 + 15e: df 92 push r13 + 160: cf 92 push r12 + 162: 1f 93 push r17 + 164: 0f 93 push r16 + 166: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 16a: 99 81 ldd r25, Y+1 ; 0x01 + 16c: 0f 90 pop r0 + 16e: 0f 90 pop r0 + 170: 0f 90 pop r0 + 172: 0f 90 pop r0 + 174: 0f 90 pop r0 + 176: 0f 90 pop r0 + 178: 99 23 and r25, r25 + 17a: 59 f0 breq .+22 ; 0x192 +spiclass s; +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; + +int main(void) + 17c: fe 01 movw r30, r28 + 17e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 188: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 18c: 91 91 ld r25, Z+ + 18e: 91 11 cpse r25, r1 + 190: f7 cf rjmp .-18 ; 0x180 + 192: 28 e0 ldi r18, 0x08 ; 8 + 194: 90 eb ldi r25, 0xB0 ; 176 + 196: 80 e0 ldi r24, 0x00 ; 0 + 198: 15 c0 rjmp .+42 ; 0x1c4 namespace avrlib { struct portb { static uint8_t port() { return PORTB; } static void port(uint8_t v) { PORTB = v; } - 4f2: 29 98 cbi 0x05, 1 ; 5 + 19a: 2a 98 cbi 0x05, 2 ; 5 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; } - 4f4: 21 9a sbi 0x04, 1 ; 4 - 4f6: 24 9a sbi 0x04, 4 ; 4 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 4f8: 2c 9a sbi 0x05, 4 ; 5 - - 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; } - 4fa: 24 9a sbi 0x04, 4 ; 4 - 4fc: 23 98 cbi 0x04, 3 ; 4 -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 4fe: 2b 98 cbi 0x05, 3 ; 5 - 500: 2b 98 cbi 0x05, 3 ; 5 - - 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; } - 502: 23 9a sbi 0x04, 3 ; 4 - 504: 08 95 ret - -00000506 <_ZN3Spi4initEv>: - -Spi::Spi(uint8_t index) : mode(1) { //, canport(&PORTB) /* : m_index (index) {} */ { - init(); -} - -void Spi::init() { - 506: cf 93 push r28 - 508: df 93 push r29 - 50a: ec 01 movw r28, r24 - init_port(); - 50c: 0e 94 75 02 call 0x4ea ; 0x4ea <_ZN3Spi9init_portEv> - if(mode == 0) { - 510: 88 81 ld r24, Y - 512: 81 11 cpse r24, r1 - 514: 04 c0 rjmp .+8 ; 0x51e <_ZN3Spi4initEv+0x18> - miso::make_input(); - miso::make_low(); -} - -void Spi::init_spi() { - SPCR = (1<: - * Author: netz - */ - -#include "Spi.h" - -Spi::Spi(uint8_t index) : mode(1) { //, canport(&PORTB) /* : m_index (index) {} */ { - 524: 21 e0 ldi r18, 0x01 ; 1 - 526: fc 01 movw r30, r24 - 528: 20 83 st Z, r18 - init(); - 52a: 0c 94 83 02 jmp 0x506 ; 0x506 <_ZN3Spi4initEv> - -0000052e <_ZN3Spi5CSOffEv>: -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 52e: 2c 9a sbi 0x05, 4 ; 5 - - 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; } - 530: 24 9a sbi 0x04, 4 ; 4 - 532: 08 95 ret - -00000534 <_ZN3Spi4CSOnEv>: -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 534: 2c 98 cbi 0x05, 4 ; 5 - - 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; } - 536: 24 9a sbi 0x04, 4 ; 4 - 538: 08 95 ret - -0000053a <_ZN3Spi9send_softEh>: - loop_until_bit_is_set(SPSR, SPIF); - - return SPDR; -} - -uint8_t Spi::send_soft(uint8_t data) { - 53a: 98 e0 ldi r25, 0x08 ; 8 - uint8_t datain=0; - 53c: 80 e0 ldi r24, 0x00 ; 0 - 53e: 15 c0 rjmp .+42 ; 0x56a <_ZN3Spi9send_softEh+0x30> -namespace avrlib { - - struct portb - { - static uint8_t port() { return PORTB; } - static void port(uint8_t v) { PORTB = v; } - 540: 2a 98 cbi 0x05, 2 ; 5 - - 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; } - 542: 22 9a sbi 0x04, 2 ; 4 + 19c: 22 9a sbi 0x04, 2 ; 4 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); - 544: 25 e0 ldi r18, 0x05 ; 5 - 546: 2a 95 dec r18 - 548: f1 f7 brne .-4 ; 0x546 <_ZN3Spi9send_softEh+0xc> - 54a: 00 00 nop - } - else{ - mosi::make_low(); //Set Output Low - } - _delay_us(1); - if(miso::read()) //Lesen des Pegels - 54c: 1b 99 sbic 0x03, 3 ; 3 - { - datain |= 1; - 54e: 81 60 ori r24, 0x01 ; 1 - 550: 25 e0 ldi r18, 0x05 ; 5 - 552: 2a 95 dec r18 - 554: f1 f7 brne .-4 ; 0x552 <_ZN3Spi9send_softEh+0x18> - 556: 00 00 nop + 19e: 35 e0 ldi r19, 0x05 ; 5 + 1a0: 3a 95 dec r19 + 1a2: f1 f7 brne .-4 ; 0x1a0 + 1a4: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1a6: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1a8: 81 60 ori r24, 0x01 ; 1 + 1aa: 45 e0 ldi r20, 0x05 ; 5 + 1ac: 4a 95 dec r20 + 1ae: f1 f7 brne .-4 ; 0x1ac + 1b0: 00 00 nop namespace avrlib { struct portb { static uint8_t port() { return PORTB; } static void port(uint8_t v) { PORTB = v; } - 558: 29 9a sbi 0x05, 1 ; 5 + 1b2: 29 9a sbi 0x05, 1 ; 5 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: 21 9a sbi 0x04, 1 ; 4 - 55c: 2a e0 ldi r18, 0x0A ; 10 - 55e: 2a 95 dec r18 - 560: f1 f7 brne .-4 ; 0x55e <_ZN3Spi9send_softEh+0x24> - 562: 00 c0 rjmp .+0 ; 0x564 <_ZN3Spi9send_softEh+0x2a> + 1b4: 21 9a sbi 0x04, 1 ; 4 + 1b6: 3a e0 ldi r19, 0x0A ; 10 + 1b8: 3a 95 dec r19 + 1ba: f1 f7 brne .-4 ; 0x1b8 + 1bc: 00 c0 rjmp .+0 ; 0x1be + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1be: 99 0f add r25, r25 + 1c0: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--){ //das Byte wird Bitweise nacheinander Gesendet MSB zuerst - 568: 41 f0 breq .+16 ; 0x57a <_ZN3Spi9send_softEh+0x40> - datain<<=1; //Schieben um das Richtige Bit zusetzen - 56a: 88 0f add r24, r24 + 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 + 1c2: 41 f0 breq .+16 ; 0x1d4 + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1c4: 88 0f add r24, r24 namespace avrlib { struct portb { static uint8_t port() { return PORTB; } static void port(uint8_t v) { PORTB = v; } - 56c: 29 98 cbi 0x05, 1 ; 5 + 1c6: 29 98 cbi 0x05, 1 ; 5 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; } - 56e: 21 9a sbi 0x04, 1 ; 4 - sck::make_low(); // Clock auf LOW - if (data & 0x80) { //Ist Bit a in Byte gesetzt - 570: 67 ff sbrs r22, 7 - 572: e6 cf rjmp .-52 ; 0x540 <_ZN3Spi9send_softEh+0x6> + 1c8: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1ca: 97 ff sbrs r25, 7 + 1cc: e6 cf rjmp .-52 ; 0x19a namespace avrlib { struct portb { static uint8_t port() { return PORTB; } static void port(uint8_t v) { PORTB = v; } - 574: 2a 9a sbi 0x05, 2 ; 5 + 1ce: 2a 9a sbi 0x05, 2 ; 5 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; } - 576: 22 9a sbi 0x04, 2 ; 4 - 578: e5 cf rjmp .-54 ; 0x544 <_ZN3Spi9send_softEh+0xa> - CANPORT_SPI |= (1<> CANP_MISO) & 1); - } - return werti; */ - 57a: 08 95 ret + 1d0: 22 9a sbi 0x04, 2 ; 4 + 1d2: e5 cf rjmp .-54 ; 0x19e + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1d4: 1f 92 push r1 + 1d6: 8f 93 push r24 + 1d8: ff 92 push r15 + 1da: ef 92 push r14 + 1dc: 1f 93 push r17 + 1de: 0f 93 push r16 + 1e0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1e4: 99 81 ldd r25, Y+1 ; 0x01 + 1e6: 0f 90 pop r0 + 1e8: 0f 90 pop r0 + 1ea: 0f 90 pop r0 + 1ec: 0f 90 pop r0 + 1ee: 0f 90 pop r0 + 1f0: 0f 90 pop r0 + 1f2: 99 23 and r25, r25 + 1f4: 59 f0 breq .+22 ; 0x20c + 1f6: fe 01 movw r30, r28 + 1f8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 202: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 206: 91 91 ld r25, Z+ + 208: 91 11 cpse r25, r1 + 20a: f7 cf rjmp .-18 ; 0x1fa + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 20c: 1f 92 push r1 + 20e: bf 92 push r11 + 210: df 92 push r13 + 212: cf 92 push r12 + 214: 1f 93 push r17 + 216: 0f 93 push r16 + 218: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 21c: 99 81 ldd r25, Y+1 ; 0x01 + 21e: 0f 90 pop r0 + 220: 0f 90 pop r0 + 222: 0f 90 pop r0 + 224: 0f 90 pop r0 + 226: 0f 90 pop r0 + 228: 0f 90 pop r0 + 22a: 99 23 and r25, r25 + 22c: 59 f0 breq .+22 ; 0x244 + 22e: fe 01 movw r30, r28 + 230: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 23a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 23e: 91 91 ld r25, Z+ + 240: 91 11 cpse r25, r1 + 242: f7 cf rjmp .-18 ; 0x232 + 244: 98 e0 ldi r25, 0x08 ; 8 + 246: 8f ef ldi r24, 0xFF ; 255 + 248: 20 e0 ldi r18, 0x00 ; 0 + 24a: 15 c0 rjmp .+42 ; 0x276 +namespace avrlib { -0000057c <_ZN3Spi4sendEh>: -void Spi::CSOn() { - cs::make_low(); -} + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 24c: 2a 98 cbi 0x05, 2 ; 5 -uint8_t Spi::send(uint8_t data) { - if(mode == 0) { - 57c: fc 01 movw r30, r24 - 57e: 20 81 ld r18, Z - 580: 21 11 cpse r18, r1 - 582: 06 c0 rjmp .+12 ; 0x590 <_ZN3Spi4sendEh+0x14> - return send_soft(data); -} + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } -uint8_t Spi::send_hard( uint8_t data ) { - // Sendet ein Byte - SPDR = data; - 584: 6e bd out 0x2e, r22 ; 46 + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 24e: 22 9a sbi 0x04, 2 ; 4 + 250: 45 e0 ldi r20, 0x05 ; 5 + 252: 4a 95 dec r20 + 254: f1 f7 brne .-4 ; 0x252 + 256: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 258: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 25a: 21 60 ori r18, 0x01 ; 1 + 25c: 35 e0 ldi r19, 0x05 ; 5 + 25e: 3a 95 dec r19 + 260: f1 f7 brne .-4 ; 0x25e + 262: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 264: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 266: 21 9a sbi 0x04, 1 ; 4 + 268: 4a e0 ldi r20, 0x0A ; 10 + 26a: 4a 95 dec r20 + 26c: f1 f7 brne .-4 ; 0x26a + 26e: 00 c0 rjmp .+0 ; 0x270 + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 270: 88 0f add r24, r24 + 272: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 274: 41 f0 breq .+16 ; 0x286 + datain<<=1; //Schieben um das Richtige Bit zusetzen + 276: 22 0f add r18, r18 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 278: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 27a: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 27c: 87 ff sbrs r24, 7 + 27e: e6 cf rjmp .-52 ; 0x24c +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 280: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 282: 22 9a sbi 0x04, 2 ; 4 + 284: e5 cf rjmp .-54 ; 0x250 + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 286: 1f 92 push r1 + 288: 2f 93 push r18 + 28a: ff 92 push r15 + 28c: ef 92 push r14 + 28e: 1f 93 push r17 + 290: 0f 93 push r16 + 292: 2c ab std Y+52, r18 ; 0x34 + 294: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 298: 99 81 ldd r25, Y+1 ; 0x01 + 29a: 0f 90 pop r0 + 29c: 0f 90 pop r0 + 29e: 0f 90 pop r0 + 2a0: 0f 90 pop r0 + 2a2: 0f 90 pop r0 + 2a4: 0f 90 pop r0 + 2a6: 2c a9 ldd r18, Y+52 ; 0x34 + 2a8: 99 23 and r25, r25 + 2aa: 59 f0 breq .+22 ; 0x2c2 + 2ac: fe 01 movw r30, r28 + 2ae: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2b8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2bc: 91 91 ld r25, Z+ + 2be: 91 11 cpse r25, r1 + 2c0: f7 cf rjmp .-18 ; 0x2b0 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2c2: 1f 92 push r1 + 2c4: bf 92 push r11 + 2c6: df 92 push r13 + 2c8: cf 92 push r12 + 2ca: 1f 93 push r17 + 2cc: 0f 93 push r16 + 2ce: 2c ab std Y+52, r18 ; 0x34 + 2d0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2d4: 99 81 ldd r25, Y+1 ; 0x01 + 2d6: 0f 90 pop r0 + 2d8: 0f 90 pop r0 + 2da: 0f 90 pop r0 + 2dc: 0f 90 pop r0 + 2de: 0f 90 pop r0 + 2e0: 0f 90 pop r0 + 2e2: 2c a9 ldd r18, Y+52 ; 0x34 + 2e4: 99 23 and r25, r25 + 2e6: 59 f0 breq .+22 ; 0x2fe + 2e8: fe 01 movw r30, r28 + 2ea: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2f4: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2f8: 91 91 ld r25, Z+ + 2fa: 91 11 cpse r25, r1 + 2fc: f7 cf rjmp .-18 ; 0x2ec + 2fe: 38 e0 ldi r19, 0x08 ; 8 + 300: 9f ef ldi r25, 0xFF ; 255 + 302: 80 e0 ldi r24, 0x00 ; 0 + 304: 15 c0 rjmp .+42 ; 0x330 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 306: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 308: 22 9a sbi 0x04, 2 ; 4 + 30a: 45 e0 ldi r20, 0x05 ; 5 + 30c: 4a 95 dec r20 + 30e: f1 f7 brne .-4 ; 0x30c + 310: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 312: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 314: 81 60 ori r24, 0x01 ; 1 + 316: 45 e0 ldi r20, 0x05 ; 5 + 318: 4a 95 dec r20 + 31a: f1 f7 brne .-4 ; 0x318 + 31c: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 31e: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 320: 21 9a sbi 0x04, 1 ; 4 + 322: 4a e0 ldi r20, 0x0A ; 10 + 324: 4a 95 dec r20 + 326: f1 f7 brne .-4 ; 0x324 + 328: 00 c0 rjmp .+0 ; 0x32a + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 32a: 99 0f add r25, r25 + 32c: 31 50 subi r19, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 32e: 41 f0 breq .+16 ; 0x340 + datain<<=1; //Schieben um das Richtige Bit zusetzen + 330: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 332: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 334: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 336: 97 ff sbrs r25, 7 + 338: e6 cf rjmp .-52 ; 0x306 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 33a: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 33c: 22 9a sbi 0x04, 2 ; 4 + 33e: e5 cf rjmp .-54 ; 0x30a + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 340: 1f 92 push r1 + 342: 8f 93 push r24 + 344: ff 92 push r15 + 346: ef 92 push r14 + 348: 1f 93 push r17 + 34a: 0f 93 push r16 + 34c: 2c ab std Y+52, r18 ; 0x34 + 34e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 352: 99 81 ldd r25, Y+1 ; 0x01 + 354: 0f 90 pop r0 + 356: 0f 90 pop r0 + 358: 0f 90 pop r0 + 35a: 0f 90 pop r0 + 35c: 0f 90 pop r0 + 35e: 0f 90 pop r0 + 360: 2c a9 ldd r18, Y+52 ; 0x34 + 362: 99 23 and r25, r25 + 364: 59 f0 breq .+22 ; 0x37c + 366: fe 01 movw r30, r28 + 368: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 372: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 376: 91 91 ld r25, Z+ + 378: 91 11 cpse r25, r1 + 37a: f7 cf rjmp .-18 ; 0x36a +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 37c: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 37e: 24 9a sbi 0x04, 4 ; 4 + + return 1; + } + uint8_t can_get_message(CANMessage *p_message) { + // Status auslesen + uint8_t status = mcp2515_read_rx_status(); + 380: 2b ab std Y+51, r18 ; 0x33 + + if (bit_is_set(status, 6)) + 382: 8b a9 ldd r24, Y+51 ; 0x33 + 384: 86 fd sbrc r24, 6 + 386: 13 c0 rjmp .+38 ; 0x3ae + // Nachricht in Puffer 0 + + s.CSOn(); // CS Low + s.send(SPI_READ_RX); + } + else if (bit_is_set(status, 7)) + 388: 8b a9 ldd r24, Y+51 ; 0x33 + 38a: 87 fd sbrc r24, 7 + 38c: 69 c5 rjmp .+2770 ; 0xe60 <__stack+0x961> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 38e: 2d 98 cbi 0x05, 5 ; 5 + + 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; } + 390: 25 9a sbi 0x04, 5 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 392: 2e 98 cbi 0x05, 6 ; 5 + + 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; } + 394: 26 9a sbi 0x04, 6 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 396: 2f 9a sbi 0x05, 7 ; 5 + + 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; } + 398: 27 9a sbi 0x04, 7 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 39a: 3f ef ldi r19, 0xFF ; 255 + 39c: 41 ee ldi r20, 0xE1 ; 225 + 39e: 84 e0 ldi r24, 0x04 ; 4 + 3a0: 31 50 subi r19, 0x01 ; 1 + 3a2: 40 40 sbci r20, 0x00 ; 0 + 3a4: 80 40 sbci r24, 0x00 ; 0 + 3a6: e1 f7 brne .-8 ; 0x3a0 + 3a8: 00 c0 rjmp .+0 ; 0x3aa + 3aa: 00 00 nop + 3ac: b7 ce rjmp .-658 ; 0x11c +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 3ae: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 3b0: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 3b2: 1f 92 push r1 + 3b4: 80 e9 ldi r24, 0x90 ; 144 + 3b6: 8f 93 push r24 + 3b8: df 92 push r13 + 3ba: cf 92 push r12 + 3bc: 1f 93 push r17 + 3be: 0f 93 push r16 + 3c0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 3c4: 99 81 ldd r25, Y+1 ; 0x01 + 3c6: 0f 90 pop r0 + 3c8: 0f 90 pop r0 + 3ca: 0f 90 pop r0 + 3cc: 0f 90 pop r0 + 3ce: 0f 90 pop r0 + 3d0: 0f 90 pop r0 + 3d2: 99 23 and r25, r25 + 3d4: 59 f0 breq .+22 ; 0x3ec + 3d6: fe 01 movw r30, r28 + 3d8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 3e2: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 3e6: 91 91 ld r25, Z+ + 3e8: 91 11 cpse r25, r1 + 3ea: f7 cf rjmp .-18 ; 0x3da + 3ec: 28 e0 ldi r18, 0x08 ; 8 + 3ee: 90 e9 ldi r25, 0x90 ; 144 + 3f0: 80 e0 ldi r24, 0x00 ; 0 + 3f2: 15 c0 rjmp .+42 ; 0x41e +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 3f4: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 3f6: 22 9a sbi 0x04, 2 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 3f8: 35 e0 ldi r19, 0x05 ; 5 + 3fa: 3a 95 dec r19 + 3fc: f1 f7 brne .-4 ; 0x3fa + 3fe: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 400: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 402: 81 60 ori r24, 0x01 ; 1 + 404: 45 e0 ldi r20, 0x05 ; 5 + 406: 4a 95 dec r20 + 408: f1 f7 brne .-4 ; 0x406 + 40a: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 40c: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 40e: 21 9a sbi 0x04, 1 ; 4 + 410: 3a e0 ldi r19, 0x0A ; 10 + 412: 3a 95 dec r19 + 414: f1 f7 brne .-4 ; 0x412 + 416: 00 c0 rjmp .+0 ; 0x418 + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 418: 99 0f add r25, r25 + 41a: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 41c: 41 f0 breq .+16 ; 0x42e + datain<<=1; //Schieben um das Richtige Bit zusetzen + 41e: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 420: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 422: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 424: 97 ff sbrs r25, 7 + 426: e6 cf rjmp .-52 ; 0x3f4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 428: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 42a: 22 9a sbi 0x04, 2 ; 4 + 42c: e5 cf rjmp .-54 ; 0x3f8 + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 42e: 1f 92 push r1 + 430: 8f 93 push r24 + 432: ff 92 push r15 + 434: ef 92 push r14 + 436: 1f 93 push r17 + 438: 0f 93 push r16 + 43a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 43e: 99 81 ldd r25, Y+1 ; 0x01 + 440: 0f 90 pop r0 + 442: 0f 90 pop r0 + 444: 0f 90 pop r0 + 446: 0f 90 pop r0 + 448: 0f 90 pop r0 + 44a: 0f 90 pop r0 + 44c: 99 23 and r25, r25 + 44e: 59 f0 breq .+22 ; 0x466 + 450: fe 01 movw r30, r28 + 452: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 45c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 460: 91 91 ld r25, Z+ + 462: 91 11 cpse r25, r1 + 464: f7 cf rjmp .-18 ; 0x454 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 466: 1f 92 push r1 + 468: bf 92 push r11 + 46a: df 92 push r13 + 46c: cf 92 push r12 + 46e: 1f 93 push r17 + 470: 0f 93 push r16 + 472: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 476: 99 81 ldd r25, Y+1 ; 0x01 + 478: 0f 90 pop r0 + 47a: 0f 90 pop r0 + 47c: 0f 90 pop r0 + 47e: 0f 90 pop r0 + 480: 0f 90 pop r0 + 482: 0f 90 pop r0 + 484: 99 23 and r25, r25 + 486: 59 f0 breq .+22 ; 0x49e + 488: fe 01 movw r30, r28 + 48a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 494: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 498: 91 91 ld r25, Z+ + 49a: 91 11 cpse r25, r1 + 49c: f7 cf rjmp .-18 ; 0x48c + 49e: 28 e0 ldi r18, 0x08 ; 8 + 4a0: 9f ef ldi r25, 0xFF ; 255 + 4a2: 80 e0 ldi r24, 0x00 ; 0 + 4a4: 15 c0 rjmp .+42 ; 0x4d0 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4a6: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 4a8: 22 9a sbi 0x04, 2 ; 4 + 4aa: 35 e0 ldi r19, 0x05 ; 5 + 4ac: 3a 95 dec r19 + 4ae: f1 f7 brne .-4 ; 0x4ac + 4b0: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 4b2: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 4b4: 81 60 ori r24, 0x01 ; 1 + 4b6: 45 e0 ldi r20, 0x05 ; 5 + 4b8: 4a 95 dec r20 + 4ba: f1 f7 brne .-4 ; 0x4b8 + 4bc: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4be: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 4c0: 21 9a sbi 0x04, 1 ; 4 + 4c2: 3a e0 ldi r19, 0x0A ; 10 + 4c4: 3a 95 dec r19 + 4c6: f1 f7 brne .-4 ; 0x4c4 + 4c8: 00 c0 rjmp .+0 ; 0x4ca + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 4ca: 99 0f add r25, r25 + 4cc: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 4ce: 41 f0 breq .+16 ; 0x4e0 + datain<<=1; //Schieben um das Richtige Bit zusetzen + 4d0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4d2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 4d4: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 4d6: 97 ff sbrs r25, 7 + 4d8: e6 cf rjmp .-52 ; 0x4a6 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 4da: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 4dc: 22 9a sbi 0x04, 2 ; 4 + 4de: e5 cf rjmp .-54 ; 0x4aa + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 4e0: 1f 92 push r1 + 4e2: 8f 93 push r24 + 4e4: ff 92 push r15 + 4e6: ef 92 push r14 + 4e8: 1f 93 push r17 + 4ea: 0f 93 push r16 + 4ec: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 4f0: 99 81 ldd r25, Y+1 ; 0x01 + 4f2: 0f 90 pop r0 + 4f4: 0f 90 pop r0 + 4f6: 0f 90 pop r0 + 4f8: 0f 90 pop r0 + 4fa: 0f 90 pop r0 + 4fc: 0f 90 pop r0 + 4fe: 99 23 and r25, r25 + 500: 59 f0 breq .+22 ; 0x518 <__stack+0x19> + 502: fe 01 movw r30, r28 + 504: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 50e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 512: 91 91 ld r25, Z+ + 514: 91 11 cpse r25, r1 + 516: f7 cf rjmp .-18 ; 0x506 <__stack+0x7> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 518: 1f 92 push r1 + 51a: bf 92 push r11 + 51c: df 92 push r13 + 51e: cf 92 push r12 + 520: 1f 93 push r17 + 522: 0f 93 push r16 + 524: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 528: 99 81 ldd r25, Y+1 ; 0x01 + 52a: 0f 90 pop r0 + 52c: 0f 90 pop r0 + 52e: 0f 90 pop r0 + 530: 0f 90 pop r0 + 532: 0f 90 pop r0 + 534: 0f 90 pop r0 + 536: 99 23 and r25, r25 + 538: 59 f0 breq .+22 ; 0x550 <__stack+0x51> + 53a: fe 01 movw r30, r28 + 53c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 546: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 54a: 91 91 ld r25, Z+ + 54c: 91 11 cpse r25, r1 + 54e: f7 cf rjmp .-18 ; 0x53e <__stack+0x3f> + 550: 28 e0 ldi r18, 0x08 ; 8 + 552: 9f ef ldi r25, 0xFF ; 255 + 554: 80 e0 ldi r24, 0x00 ; 0 + 556: 15 c0 rjmp .+42 ; 0x582 <__stack+0x83> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 558: 2a 98 cbi 0x05, 2 ; 5 + + 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: 22 9a sbi 0x04, 2 ; 4 + 55c: 45 e0 ldi r20, 0x05 ; 5 + 55e: 4a 95 dec r20 + 560: f1 f7 brne .-4 ; 0x55e <__stack+0x5f> + 562: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 564: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 566: 81 60 ori r24, 0x01 ; 1 + 568: 35 e0 ldi r19, 0x05 ; 5 + 56a: 3a 95 dec r19 + 56c: f1 f7 brne .-4 ; 0x56a <__stack+0x6b> + 56e: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 570: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 572: 21 9a sbi 0x04, 1 ; 4 + 574: 4a e0 ldi r20, 0x0A ; 10 + 576: 4a 95 dec r20 + 578: f1 f7 brne .-4 ; 0x576 <__stack+0x77> + 57a: 00 c0 rjmp .+0 ; 0x57c <__stack+0x7d> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 57c: 99 0f add r25, r25 + 57e: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 580: 41 f0 breq .+16 ; 0x592 <__stack+0x93> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 582: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 584: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 586: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 588: 97 ff sbrs r25, 7 + 58a: e6 cf rjmp .-52 ; 0x558 <__stack+0x59> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 58c: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 58e: 22 9a sbi 0x04, 2 ; 4 + 590: e5 cf rjmp .-54 ; 0x55c <__stack+0x5d> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 592: 1f 92 push r1 + 594: 8f 93 push r24 + 596: ff 92 push r15 + 598: ef 92 push r14 + 59a: 1f 93 push r17 + 59c: 0f 93 push r16 + 59e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 5a2: 99 81 ldd r25, Y+1 ; 0x01 + 5a4: 0f 90 pop r0 + 5a6: 0f 90 pop r0 + 5a8: 0f 90 pop r0 + 5aa: 0f 90 pop r0 + 5ac: 0f 90 pop r0 + 5ae: 0f 90 pop r0 + 5b0: 99 23 and r25, r25 + 5b2: 59 f0 breq .+22 ; 0x5ca <__stack+0xcb> + 5b4: fe 01 movw r30, r28 + 5b6: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 5c0: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 5c4: 91 91 ld r25, Z+ + 5c6: 91 11 cpse r25, r1 + 5c8: f7 cf rjmp .-18 ; 0x5b8 <__stack+0xb9> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 5ca: 1f 92 push r1 + 5cc: bf 92 push r11 + 5ce: df 92 push r13 + 5d0: cf 92 push r12 + 5d2: 1f 93 push r17 + 5d4: 0f 93 push r16 + 5d6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 5da: 99 81 ldd r25, Y+1 ; 0x01 + 5dc: 0f 90 pop r0 + 5de: 0f 90 pop r0 + 5e0: 0f 90 pop r0 + 5e2: 0f 90 pop r0 + 5e4: 0f 90 pop r0 + 5e6: 0f 90 pop r0 + 5e8: 99 23 and r25, r25 + 5ea: 59 f0 breq .+22 ; 0x602 <__stack+0x103> + 5ec: fe 01 movw r30, r28 + 5ee: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 5f8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 5fc: 91 91 ld r25, Z+ + 5fe: 91 11 cpse r25, r1 + 600: f7 cf rjmp .-18 ; 0x5f0 <__stack+0xf1> + 602: 28 e0 ldi r18, 0x08 ; 8 + 604: 9f ef ldi r25, 0xFF ; 255 + 606: 80 e0 ldi r24, 0x00 ; 0 + 608: 15 c0 rjmp .+42 ; 0x634 <__stack+0x135> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 60a: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 60c: 22 9a sbi 0x04, 2 ; 4 + 60e: 35 e0 ldi r19, 0x05 ; 5 + 610: 3a 95 dec r19 + 612: f1 f7 brne .-4 ; 0x610 <__stack+0x111> + 614: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 616: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 618: 81 60 ori r24, 0x01 ; 1 + 61a: 45 e0 ldi r20, 0x05 ; 5 + 61c: 4a 95 dec r20 + 61e: f1 f7 brne .-4 ; 0x61c <__stack+0x11d> + 620: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 622: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 624: 21 9a sbi 0x04, 1 ; 4 + 626: 3a e0 ldi r19, 0x0A ; 10 + 628: 3a 95 dec r19 + 62a: f1 f7 brne .-4 ; 0x628 <__stack+0x129> + 62c: 00 c0 rjmp .+0 ; 0x62e <__stack+0x12f> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 62e: 99 0f add r25, r25 + 630: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 632: 41 f0 breq .+16 ; 0x644 <__stack+0x145> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 634: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 636: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 638: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 63a: 97 ff sbrs r25, 7 + 63c: e6 cf rjmp .-52 ; 0x60a <__stack+0x10b> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 63e: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 640: 22 9a sbi 0x04, 2 ; 4 + 642: e5 cf rjmp .-54 ; 0x60e <__stack+0x10f> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 644: 1f 92 push r1 + 646: 8f 93 push r24 + 648: ff 92 push r15 + 64a: ef 92 push r14 + 64c: 1f 93 push r17 + 64e: 0f 93 push r16 + 650: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 654: 99 81 ldd r25, Y+1 ; 0x01 + 656: 0f 90 pop r0 + 658: 0f 90 pop r0 + 65a: 0f 90 pop r0 + 65c: 0f 90 pop r0 + 65e: 0f 90 pop r0 + 660: 0f 90 pop r0 + 662: 99 23 and r25, r25 + 664: 59 f0 breq .+22 ; 0x67c <__stack+0x17d> + 666: fe 01 movw r30, r28 + 668: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 672: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 676: 91 91 ld r25, Z+ + 678: 91 11 cpse r25, r1 + 67a: f7 cf rjmp .-18 ; 0x66a <__stack+0x16b> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 67c: 1f 92 push r1 + 67e: bf 92 push r11 + 680: df 92 push r13 + 682: cf 92 push r12 + 684: 1f 93 push r17 + 686: 0f 93 push r16 + 688: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 68c: 99 81 ldd r25, Y+1 ; 0x01 + 68e: 0f 90 pop r0 + 690: 0f 90 pop r0 + 692: 0f 90 pop r0 + 694: 0f 90 pop r0 + 696: 0f 90 pop r0 + 698: 0f 90 pop r0 + 69a: 99 23 and r25, r25 + 69c: 59 f0 breq .+22 ; 0x6b4 <__stack+0x1b5> + 69e: fe 01 movw r30, r28 + 6a0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 6aa: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 6ae: 91 91 ld r25, Z+ + 6b0: 91 11 cpse r25, r1 + 6b2: f7 cf rjmp .-18 ; 0x6a2 <__stack+0x1a3> + 6b4: 28 e0 ldi r18, 0x08 ; 8 + 6b6: 9f ef ldi r25, 0xFF ; 255 + 6b8: 80 e0 ldi r24, 0x00 ; 0 + 6ba: 15 c0 rjmp .+42 ; 0x6e6 <__stack+0x1e7> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 6bc: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 6be: 22 9a sbi 0x04, 2 ; 4 + 6c0: 45 e0 ldi r20, 0x05 ; 5 + 6c2: 4a 95 dec r20 + 6c4: f1 f7 brne .-4 ; 0x6c2 <__stack+0x1c3> + 6c6: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 6c8: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 6ca: 81 60 ori r24, 0x01 ; 1 + 6cc: 35 e0 ldi r19, 0x05 ; 5 + 6ce: 3a 95 dec r19 + 6d0: f1 f7 brne .-4 ; 0x6ce <__stack+0x1cf> + 6d2: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 6d4: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 6d6: 21 9a sbi 0x04, 1 ; 4 + 6d8: 4a e0 ldi r20, 0x0A ; 10 + 6da: 4a 95 dec r20 + 6dc: f1 f7 brne .-4 ; 0x6da <__stack+0x1db> + 6de: 00 c0 rjmp .+0 ; 0x6e0 <__stack+0x1e1> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 6e0: 99 0f add r25, r25 + 6e2: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 6e4: 41 f0 breq .+16 ; 0x6f6 <__stack+0x1f7> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 6e6: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 6e8: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 6ea: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 6ec: 97 ff sbrs r25, 7 + 6ee: e6 cf rjmp .-52 ; 0x6bc <__stack+0x1bd> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 6f0: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 6f2: 22 9a sbi 0x04, 2 ; 4 + 6f4: e5 cf rjmp .-54 ; 0x6c0 <__stack+0x1c1> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 6f6: 1f 92 push r1 + 6f8: 8f 93 push r24 + 6fa: ff 92 push r15 + 6fc: ef 92 push r14 + 6fe: 1f 93 push r17 + 700: 0f 93 push r16 + 702: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 706: 99 81 ldd r25, Y+1 ; 0x01 + 708: 0f 90 pop r0 + 70a: 0f 90 pop r0 + 70c: 0f 90 pop r0 + 70e: 0f 90 pop r0 + 710: 0f 90 pop r0 + 712: 0f 90 pop r0 + 714: 99 23 and r25, r25 + 716: 59 f0 breq .+22 ; 0x72e <__stack+0x22f> + 718: fe 01 movw r30, r28 + 71a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 724: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 728: 91 91 ld r25, Z+ + 72a: 91 11 cpse r25, r1 + 72c: f7 cf rjmp .-18 ; 0x71c <__stack+0x21d> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 72e: 1f 92 push r1 + 730: bf 92 push r11 + 732: df 92 push r13 + 734: cf 92 push r12 + 736: 1f 93 push r17 + 738: 0f 93 push r16 + 73a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 73e: 99 81 ldd r25, Y+1 ; 0x01 + 740: 0f 90 pop r0 + 742: 0f 90 pop r0 + 744: 0f 90 pop r0 + 746: 0f 90 pop r0 + 748: 0f 90 pop r0 + 74a: 0f 90 pop r0 + 74c: 99 23 and r25, r25 + 74e: 59 f0 breq .+22 ; 0x766 <__stack+0x267> + 750: fe 01 movw r30, r28 + 752: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 75c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 760: 91 91 ld r25, Z+ + 762: 91 11 cpse r25, r1 + 764: f7 cf rjmp .-18 ; 0x754 <__stack+0x255> + 766: 98 e0 ldi r25, 0x08 ; 8 + 768: 8f ef ldi r24, 0xFF ; 255 + 76a: 20 e0 ldi r18, 0x00 ; 0 + 76c: 15 c0 rjmp .+42 ; 0x798 <__stack+0x299> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 76e: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 770: 22 9a sbi 0x04, 2 ; 4 + 772: 35 e0 ldi r19, 0x05 ; 5 + 774: 3a 95 dec r19 + 776: f1 f7 brne .-4 ; 0x774 <__stack+0x275> + 778: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 77a: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 77c: 21 60 ori r18, 0x01 ; 1 + 77e: 45 e0 ldi r20, 0x05 ; 5 + 780: 4a 95 dec r20 + 782: f1 f7 brne .-4 ; 0x780 <__stack+0x281> + 784: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 786: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 788: 21 9a sbi 0x04, 1 ; 4 + 78a: 3a e0 ldi r19, 0x0A ; 10 + 78c: 3a 95 dec r19 + 78e: f1 f7 brne .-4 ; 0x78c <__stack+0x28d> + 790: 00 c0 rjmp .+0 ; 0x792 <__stack+0x293> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 792: 88 0f add r24, r24 + 794: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 796: 41 f0 breq .+16 ; 0x7a8 <__stack+0x2a9> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 798: 22 0f add r18, r18 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 79a: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 79c: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 79e: 87 ff sbrs r24, 7 + 7a0: e6 cf rjmp .-52 ; 0x76e <__stack+0x26f> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 7a2: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 7a4: 22 9a sbi 0x04, 2 ; 4 + 7a6: e5 cf rjmp .-54 ; 0x772 <__stack+0x273> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 7a8: 1f 92 push r1 + 7aa: 2f 93 push r18 + 7ac: ff 92 push r15 + 7ae: ef 92 push r14 + 7b0: 1f 93 push r17 + 7b2: 0f 93 push r16 + 7b4: 2c ab std Y+52, r18 ; 0x34 + 7b6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 7ba: 99 81 ldd r25, Y+1 ; 0x01 + 7bc: 0f 90 pop r0 + 7be: 0f 90 pop r0 + 7c0: 0f 90 pop r0 + 7c2: 0f 90 pop r0 + 7c4: 0f 90 pop r0 + 7c6: 0f 90 pop r0 + 7c8: 2c a9 ldd r18, Y+52 ; 0x34 + 7ca: 99 23 and r25, r25 + 7cc: 59 f0 breq .+22 ; 0x7e4 <__stack+0x2e5> + 7ce: fe 01 movw r30, r28 + 7d0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 7da: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 7de: 91 91 ld r25, Z+ + 7e0: 91 11 cpse r25, r1 + 7e2: f7 cf rjmp .-18 ; 0x7d2 <__stack+0x2d3> + + s.send(0xff); + s.send(0xff); + + // Laenge auslesen + uint8_t length = s.send(0xff) & 0x0f; + 7e4: 8f e0 ldi r24, 0x0F ; 15 + 7e6: 98 2e mov r9, r24 + 7e8: 92 22 and r9, r18 + p_message->length = length; + + // Daten auslesen + for (uint8_t i=0;i + 7ec: 5d c0 rjmp .+186 ; 0x8a8 <__stack+0x3a9> + 7ee: a1 2c mov r10, r1 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 7f0: 1f 92 push r1 + 7f2: bf 92 push r11 + 7f4: df 92 push r13 + 7f6: cf 92 push r12 + 7f8: 1f 93 push r17 + 7fa: 0f 93 push r16 + 7fc: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 800: 99 81 ldd r25, Y+1 ; 0x01 + 802: 0f 90 pop r0 + 804: 0f 90 pop r0 + 806: 0f 90 pop r0 + 808: 0f 90 pop r0 + 80a: 0f 90 pop r0 + 80c: 0f 90 pop r0 + 80e: 99 23 and r25, r25 + 810: 59 f0 breq .+22 ; 0x828 <__stack+0x329> + 812: fe 01 movw r30, r28 + 814: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 81e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 822: 91 91 ld r25, Z+ + 824: 91 11 cpse r25, r1 + 826: f7 cf rjmp .-18 ; 0x816 <__stack+0x317> + 828: 28 e0 ldi r18, 0x08 ; 8 + 82a: 9f ef ldi r25, 0xFF ; 255 + 82c: 80 e0 ldi r24, 0x00 ; 0 + 82e: 15 c0 rjmp .+42 ; 0x85a <__stack+0x35b> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 830: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 832: 22 9a sbi 0x04, 2 ; 4 + 834: 45 e0 ldi r20, 0x05 ; 5 + 836: 4a 95 dec r20 + 838: f1 f7 brne .-4 ; 0x836 <__stack+0x337> + 83a: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 83c: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 83e: 81 60 ori r24, 0x01 ; 1 + 840: 35 e0 ldi r19, 0x05 ; 5 + 842: 3a 95 dec r19 + 844: f1 f7 brne .-4 ; 0x842 <__stack+0x343> + 846: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 848: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 84a: 21 9a sbi 0x04, 1 ; 4 + 84c: 4a e0 ldi r20, 0x0A ; 10 + 84e: 4a 95 dec r20 + 850: f1 f7 brne .-4 ; 0x84e <__stack+0x34f> + 852: 00 c0 rjmp .+0 ; 0x854 <__stack+0x355> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 854: 99 0f add r25, r25 + 856: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 858: 41 f0 breq .+16 ; 0x86a <__stack+0x36b> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 85a: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 85c: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 85e: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 860: 97 ff sbrs r25, 7 + 862: e6 cf rjmp .-52 ; 0x830 <__stack+0x331> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 864: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 866: 22 9a sbi 0x04, 2 ; 4 + 868: e5 cf rjmp .-54 ; 0x834 <__stack+0x335> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 86a: 1f 92 push r1 + 86c: 8f 93 push r24 + 86e: ff 92 push r15 + 870: ef 92 push r14 + 872: 1f 93 push r17 + 874: 0f 93 push r16 + 876: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 87a: 99 81 ldd r25, Y+1 ; 0x01 + 87c: 0f 90 pop r0 + 87e: 0f 90 pop r0 + 880: 0f 90 pop r0 + 882: 0f 90 pop r0 + 884: 0f 90 pop r0 + 886: 0f 90 pop r0 + 888: 99 23 and r25, r25 + 88a: 59 f0 breq .+22 ; 0x8a2 <__stack+0x3a3> + 88c: fe 01 movw r30, r28 + 88e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 898: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 89c: 91 91 ld r25, Z+ + 89e: 91 11 cpse r25, r1 + 8a0: f7 cf rjmp .-18 ; 0x890 <__stack+0x391> + 8a2: a3 94 inc r10 + 8a4: a9 10 cpse r10, r9 + 8a6: a4 cf rjmp .-184 ; 0x7f0 <__stack+0x2f1> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 8a8: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 8aa: 24 9a sbi 0x04, 4 ; 4 + p_message->data[i] = s.send(0xff); + } + + s.CSOff(); + + if (bit_is_set(status,3)) { + 8ac: 8b a9 ldd r24, Y+51 ; 0x33 + } else { + p_message->rtr = 0; + } + + // Interrupt Flag loeschen + if (bit_is_set(status,6)) { + 8ae: 8b a9 ldd r24, Y+51 ; 0x33 + 8b0: 86 ff sbrs r24, 6 + 8b2: 73 c1 rjmp .+742 ; 0xb9a <__stack+0x69b> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 8b4: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 8b6: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 8b8: 1f 92 push r1 + 8ba: 85 e0 ldi r24, 0x05 ; 5 + 8bc: 8f 93 push r24 + 8be: df 92 push r13 + 8c0: cf 92 push r12 + 8c2: 1f 93 push r17 + 8c4: 0f 93 push r16 + 8c6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 8ca: 99 81 ldd r25, Y+1 ; 0x01 + 8cc: 0f 90 pop r0 + 8ce: 0f 90 pop r0 + 8d0: 0f 90 pop r0 + 8d2: 0f 90 pop r0 + 8d4: 0f 90 pop r0 + 8d6: 0f 90 pop r0 + 8d8: 99 23 and r25, r25 + 8da: 59 f0 breq .+22 ; 0x8f2 <__stack+0x3f3> + 8dc: fe 01 movw r30, r28 + 8de: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 8e8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 8ec: 91 91 ld r25, Z+ + 8ee: 91 11 cpse r25, r1 + 8f0: f7 cf rjmp .-18 ; 0x8e0 <__stack+0x3e1> + // Laenge auslesen + uint8_t length = s.send(0xff) & 0x0f; + p_message->length = length; + + // Daten auslesen + for (uint8_t i=0;i +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 8fa: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 8fc: 22 9a sbi 0x04, 2 ; 4 + 8fe: 35 e0 ldi r19, 0x05 ; 5 + 900: 3a 95 dec r19 + 902: f1 f7 brne .-4 ; 0x900 <__stack+0x401> + 904: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 906: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 908: 81 60 ori r24, 0x01 ; 1 + 90a: 45 e0 ldi r20, 0x05 ; 5 + 90c: 4a 95 dec r20 + 90e: f1 f7 brne .-4 ; 0x90c <__stack+0x40d> + 910: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 912: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 914: 21 9a sbi 0x04, 1 ; 4 + 916: 3a e0 ldi r19, 0x0A ; 10 + 918: 3a 95 dec r19 + 91a: f1 f7 brne .-4 ; 0x918 <__stack+0x419> + 91c: 00 c0 rjmp .+0 ; 0x91e <__stack+0x41f> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 91e: 99 0f add r25, r25 + 920: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 922: 41 f0 breq .+16 ; 0x934 <__stack+0x435> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 924: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 926: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 928: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 92a: 97 ff sbrs r25, 7 + 92c: e6 cf rjmp .-52 ; 0x8fa <__stack+0x3fb> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 92e: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 930: 22 9a sbi 0x04, 2 ; 4 + 932: e5 cf rjmp .-54 ; 0x8fe <__stack+0x3ff> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 934: 1f 92 push r1 + 936: 8f 93 push r24 + 938: ff 92 push r15 + 93a: ef 92 push r14 + 93c: 1f 93 push r17 + 93e: 0f 93 push r16 + 940: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 944: 99 81 ldd r25, Y+1 ; 0x01 + 946: 0f 90 pop r0 + 948: 0f 90 pop r0 + 94a: 0f 90 pop r0 + 94c: 0f 90 pop r0 + 94e: 0f 90 pop r0 + 950: 0f 90 pop r0 + 952: 99 23 and r25, r25 + 954: 59 f0 breq .+22 ; 0x96c <__stack+0x46d> + 956: fe 01 movw r30, r28 + 958: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 962: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 966: 91 91 ld r25, Z+ + 968: 91 11 cpse r25, r1 + 96a: f7 cf rjmp .-18 ; 0x95a <__stack+0x45b> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 96c: 1f 92 push r1 + 96e: 8c e2 ldi r24, 0x2C ; 44 + 970: 8f 93 push r24 + 972: df 92 push r13 + 974: cf 92 push r12 + 976: 1f 93 push r17 + 978: 0f 93 push r16 + 97a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 97e: 99 81 ldd r25, Y+1 ; 0x01 + 980: 0f 90 pop r0 + 982: 0f 90 pop r0 + 984: 0f 90 pop r0 + 986: 0f 90 pop r0 + 988: 0f 90 pop r0 + 98a: 0f 90 pop r0 + 98c: 99 23 and r25, r25 + 98e: 59 f0 breq .+22 ; 0x9a6 <__stack+0x4a7> + 990: fe 01 movw r30, r28 + 992: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 99c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 9a0: 91 91 ld r25, Z+ + 9a2: 91 11 cpse r25, r1 + 9a4: f7 cf rjmp .-18 ; 0x994 <__stack+0x495> + 9a6: 28 e0 ldi r18, 0x08 ; 8 + 9a8: 9c e2 ldi r25, 0x2C ; 44 + 9aa: 80 e0 ldi r24, 0x00 ; 0 + 9ac: 15 c0 rjmp .+42 ; 0x9d8 <__stack+0x4d9> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 9ae: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 9b0: 22 9a sbi 0x04, 2 ; 4 + 9b2: 45 e0 ldi r20, 0x05 ; 5 + 9b4: 4a 95 dec r20 + 9b6: f1 f7 brne .-4 ; 0x9b4 <__stack+0x4b5> + 9b8: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 9ba: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 9bc: 81 60 ori r24, 0x01 ; 1 + 9be: 35 e0 ldi r19, 0x05 ; 5 + 9c0: 3a 95 dec r19 + 9c2: f1 f7 brne .-4 ; 0x9c0 <__stack+0x4c1> + 9c4: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 9c6: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 9c8: 21 9a sbi 0x04, 1 ; 4 + 9ca: 4a e0 ldi r20, 0x0A ; 10 + 9cc: 4a 95 dec r20 + 9ce: f1 f7 brne .-4 ; 0x9cc <__stack+0x4cd> + 9d0: 00 c0 rjmp .+0 ; 0x9d2 <__stack+0x4d3> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 9d2: 99 0f add r25, r25 + 9d4: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 9d6: 41 f0 breq .+16 ; 0x9e8 <__stack+0x4e9> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 9d8: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 9da: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 9dc: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 9de: 97 ff sbrs r25, 7 + 9e0: e6 cf rjmp .-52 ; 0x9ae <__stack+0x4af> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 9e2: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 9e4: 22 9a sbi 0x04, 2 ; 4 + 9e6: e5 cf rjmp .-54 ; 0x9b2 <__stack+0x4b3> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 9e8: 1f 92 push r1 + 9ea: 8f 93 push r24 + 9ec: ff 92 push r15 + 9ee: ef 92 push r14 + 9f0: 1f 93 push r17 + 9f2: 0f 93 push r16 + 9f4: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 9f8: 99 81 ldd r25, Y+1 ; 0x01 + 9fa: 0f 90 pop r0 + 9fc: 0f 90 pop r0 + 9fe: 0f 90 pop r0 + a00: 0f 90 pop r0 + a02: 0f 90 pop r0 + a04: 0f 90 pop r0 + a06: 99 23 and r25, r25 + a08: 59 f0 breq .+22 ; 0xa20 <__stack+0x521> + a0a: fe 01 movw r30, r28 + a0c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + a16: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + a1a: 91 91 ld r25, Z+ + a1c: 91 11 cpse r25, r1 + a1e: f7 cf rjmp .-18 ; 0xa0e <__stack+0x50f> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + a20: 1f 92 push r1 + a22: 81 e0 ldi r24, 0x01 ; 1 + a24: 8f 93 push r24 + a26: df 92 push r13 + a28: cf 92 push r12 + a2a: 1f 93 push r17 + a2c: 0f 93 push r16 + a2e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + a32: 99 81 ldd r25, Y+1 ; 0x01 + a34: 0f 90 pop r0 + a36: 0f 90 pop r0 + a38: 0f 90 pop r0 + a3a: 0f 90 pop r0 + a3c: 0f 90 pop r0 + a3e: 0f 90 pop r0 + a40: 99 23 and r25, r25 + a42: 59 f0 breq .+22 ; 0xa5a <__stack+0x55b> + a44: fe 01 movw r30, r28 + a46: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + a50: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + a54: 91 91 ld r25, Z+ + a56: 91 11 cpse r25, r1 + a58: f7 cf rjmp .-18 ; 0xa48 <__stack+0x549> + a5a: 28 e0 ldi r18, 0x08 ; 8 + a5c: 91 e0 ldi r25, 0x01 ; 1 + a5e: 80 e0 ldi r24, 0x00 ; 0 + a60: 15 c0 rjmp .+42 ; 0xa8c <__stack+0x58d> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + a62: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + a64: 22 9a sbi 0x04, 2 ; 4 + a66: 35 e0 ldi r19, 0x05 ; 5 + a68: 3a 95 dec r19 + a6a: f1 f7 brne .-4 ; 0xa68 <__stack+0x569> + a6c: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + a6e: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + a70: 81 60 ori r24, 0x01 ; 1 + a72: 45 e0 ldi r20, 0x05 ; 5 + a74: 4a 95 dec r20 + a76: f1 f7 brne .-4 ; 0xa74 <__stack+0x575> + a78: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + a7a: 29 9a sbi 0x05, 1 ; 5 + + 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; } + a7c: 21 9a sbi 0x04, 1 ; 4 + a7e: 3a e0 ldi r19, 0x0A ; 10 + a80: 3a 95 dec r19 + a82: f1 f7 brne .-4 ; 0xa80 <__stack+0x581> + a84: 00 c0 rjmp .+0 ; 0xa86 <__stack+0x587> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + a86: 99 0f add r25, r25 + a88: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + a8a: 41 f0 breq .+16 ; 0xa9c <__stack+0x59d> + datain<<=1; //Schieben um das Richtige Bit zusetzen + a8c: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + a8e: 29 98 cbi 0x05, 1 ; 5 + + 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; } + a90: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + a92: 97 ff sbrs r25, 7 + a94: e6 cf rjmp .-52 ; 0xa62 <__stack+0x563> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + a96: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + a98: 22 9a sbi 0x04, 2 ; 4 + a9a: e5 cf rjmp .-54 ; 0xa66 <__stack+0x567> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + a9c: 1f 92 push r1 + a9e: 8f 93 push r24 + aa0: ff 92 push r15 + aa2: ef 92 push r14 + aa4: 1f 93 push r17 + aa6: 0f 93 push r16 + aa8: 0e 94 80 16 call 0x2d00 ; 0x2d00 + aac: 99 81 ldd r25, Y+1 ; 0x01 + aae: 0f 90 pop r0 + ab0: 0f 90 pop r0 + ab2: 0f 90 pop r0 + ab4: 0f 90 pop r0 + ab6: 0f 90 pop r0 + ab8: 0f 90 pop r0 + aba: 99 23 and r25, r25 + abc: 59 f0 breq .+22 ; 0xad4 <__stack+0x5d5> + abe: fe 01 movw r30, r28 + ac0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + aca: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + ace: 91 91 ld r25, Z+ + ad0: 91 11 cpse r25, r1 + ad2: f7 cf rjmp .-18 ; 0xac2 <__stack+0x5c3> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + ad4: 1f 92 push r1 + ad6: 1f 92 push r1 + ad8: df 92 push r13 + ada: cf 92 push r12 + adc: 1f 93 push r17 + ade: 0f 93 push r16 + ae0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + ae4: 99 81 ldd r25, Y+1 ; 0x01 + ae6: 0f 90 pop r0 + ae8: 0f 90 pop r0 + aea: 0f 90 pop r0 + aec: 0f 90 pop r0 + aee: 0f 90 pop r0 + af0: 0f 90 pop r0 + af2: 99 23 and r25, r25 + af4: 59 f0 breq .+22 ; 0xb0c <__stack+0x60d> + af6: fe 01 movw r30, r28 + af8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + b02: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + b06: 91 91 ld r25, Z+ + b08: 91 11 cpse r25, r1 + b0a: f7 cf rjmp .-18 ; 0xafa <__stack+0x5fb> + b0c: 98 e0 ldi r25, 0x08 ; 8 + b0e: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + b10: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b12: 29 98 cbi 0x05, 1 ; 5 + + 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; } + b14: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b16: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + b18: 22 9a sbi 0x04, 2 ; 4 + b1a: 45 e0 ldi r20, 0x05 ; 5 + b1c: 4a 95 dec r20 + b1e: f1 f7 brne .-4 ; 0xb1c <__stack+0x61d> + b20: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + b22: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + b24: 81 60 ori r24, 0x01 ; 1 + b26: 25 e0 ldi r18, 0x05 ; 5 + b28: 2a 95 dec r18 + b2a: f1 f7 brne .-4 ; 0xb28 <__stack+0x629> + b2c: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b2e: 29 9a sbi 0x05, 1 ; 5 + + 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; } + b30: 21 9a sbi 0x04, 1 ; 4 + b32: 3a e0 ldi r19, 0x0A ; 10 + b34: 3a 95 dec r19 + b36: f1 f7 brne .-4 ; 0xb34 <__stack+0x635> + b38: 00 c0 rjmp .+0 ; 0xb3a <__stack+0x63b> + b3a: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + b3c: 49 f7 brne .-46 ; 0xb10 <__stack+0x611> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + b3e: 1f 92 push r1 + b40: 8f 93 push r24 + b42: ff 92 push r15 + b44: ef 92 push r14 + b46: 1f 93 push r17 + b48: 0f 93 push r16 + b4a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + b4e: 99 81 ldd r25, Y+1 ; 0x01 + b50: 0f 90 pop r0 + b52: 0f 90 pop r0 + b54: 0f 90 pop r0 + b56: 0f 90 pop r0 + b58: 0f 90 pop r0 + b5a: 0f 90 pop r0 + b5c: 99 23 and r25, r25 + b5e: 59 f0 breq .+22 ; 0xb76 <__stack+0x677> + b60: fe 01 movw r30, r28 + b62: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + b6c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + b70: 91 91 ld r25, Z+ + b72: 91 11 cpse r25, r1 + b74: f7 cf rjmp .-18 ; 0xb64 <__stack+0x665> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b76: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + b78: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b7a: 2d 9a sbi 0x05, 5 ; 5 + + 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; } + b7c: 25 9a sbi 0x04, 5 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b7e: 2e 98 cbi 0x05, 6 ; 5 + + 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; } + b80: 26 9a sbi 0x04, 6 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b82: 2f 98 cbi 0x05, 7 ; 5 + + 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; } + b84: 27 9a sbi 0x04, 7 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + b86: 8f ef ldi r24, 0xFF ; 255 + b88: 93 ed ldi r25, 0xD3 ; 211 + b8a: 20 e3 ldi r18, 0x30 ; 48 + b8c: 81 50 subi r24, 0x01 ; 1 + b8e: 90 40 sbci r25, 0x00 ; 0 + b90: 20 40 sbci r18, 0x00 ; 0 + b92: e1 f7 brne .-8 ; 0xb8c <__stack+0x68d> + b94: 00 c0 rjmp .+0 ; 0xb96 <__stack+0x697> + b96: 00 00 nop + b98: c1 ca rjmp .-2686 ; 0x11c +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + b9a: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + b9c: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + b9e: 1f 92 push r1 + ba0: 85 e0 ldi r24, 0x05 ; 5 + ba2: 8f 93 push r24 + ba4: df 92 push r13 + ba6: cf 92 push r12 + ba8: 1f 93 push r17 + baa: 0f 93 push r16 + bac: 0e 94 80 16 call 0x2d00 ; 0x2d00 + bb0: 99 81 ldd r25, Y+1 ; 0x01 + bb2: 0f 90 pop r0 + bb4: 0f 90 pop r0 + bb6: 0f 90 pop r0 + bb8: 0f 90 pop r0 + bba: 0f 90 pop r0 + bbc: 0f 90 pop r0 + bbe: 99 23 and r25, r25 + bc0: 59 f0 breq .+22 ; 0xbd8 <__stack+0x6d9> + bc2: fe 01 movw r30, r28 + bc4: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + bce: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + bd2: 91 91 ld r25, Z+ + bd4: 91 11 cpse r25, r1 + bd6: f7 cf rjmp .-18 ; 0xbc6 <__stack+0x6c7> + bd8: 28 e0 ldi r18, 0x08 ; 8 + bda: 95 e0 ldi r25, 0x05 ; 5 + bdc: 80 e0 ldi r24, 0x00 ; 0 + bde: 15 c0 rjmp .+42 ; 0xc0a <__stack+0x70b> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + be0: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + be2: 22 9a sbi 0x04, 2 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + be4: 45 e0 ldi r20, 0x05 ; 5 + be6: 4a 95 dec r20 + be8: f1 f7 brne .-4 ; 0xbe6 <__stack+0x6e7> + bea: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + bec: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + bee: 81 60 ori r24, 0x01 ; 1 + bf0: 35 e0 ldi r19, 0x05 ; 5 + bf2: 3a 95 dec r19 + bf4: f1 f7 brne .-4 ; 0xbf2 <__stack+0x6f3> + bf6: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + bf8: 29 9a sbi 0x05, 1 ; 5 + + 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; } + bfa: 21 9a sbi 0x04, 1 ; 4 + bfc: 4a e0 ldi r20, 0x0A ; 10 + bfe: 4a 95 dec r20 + c00: f1 f7 brne .-4 ; 0xbfe <__stack+0x6ff> + c02: 00 c0 rjmp .+0 ; 0xc04 <__stack+0x705> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + c04: 99 0f add r25, r25 + c06: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + c08: 41 f0 breq .+16 ; 0xc1a <__stack+0x71b> + datain<<=1; //Schieben um das Richtige Bit zusetzen + c0a: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + c0c: 29 98 cbi 0x05, 1 ; 5 + + 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; } + c0e: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + c10: 97 ff sbrs r25, 7 + c12: e6 cf rjmp .-52 ; 0xbe0 <__stack+0x6e1> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + c14: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + c16: 22 9a sbi 0x04, 2 ; 4 + c18: e5 cf rjmp .-54 ; 0xbe4 <__stack+0x6e5> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + c1a: 1f 92 push r1 + c1c: 8f 93 push r24 + c1e: ff 92 push r15 + c20: ef 92 push r14 + c22: 1f 93 push r17 + c24: 0f 93 push r16 + c26: 0e 94 80 16 call 0x2d00 ; 0x2d00 + c2a: 99 81 ldd r25, Y+1 ; 0x01 + c2c: 0f 90 pop r0 + c2e: 0f 90 pop r0 + c30: 0f 90 pop r0 + c32: 0f 90 pop r0 + c34: 0f 90 pop r0 + c36: 0f 90 pop r0 + c38: 99 23 and r25, r25 + c3a: 59 f0 breq .+22 ; 0xc52 <__stack+0x753> + c3c: fe 01 movw r30, r28 + c3e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + c48: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + c4c: 91 91 ld r25, Z+ + c4e: 91 11 cpse r25, r1 + c50: f7 cf rjmp .-18 ; 0xc40 <__stack+0x741> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + c52: 1f 92 push r1 + c54: 8c e2 ldi r24, 0x2C ; 44 + c56: 8f 93 push r24 + c58: df 92 push r13 + c5a: cf 92 push r12 + c5c: 1f 93 push r17 + c5e: 0f 93 push r16 + c60: 0e 94 80 16 call 0x2d00 ; 0x2d00 + c64: 99 81 ldd r25, Y+1 ; 0x01 + c66: 0f 90 pop r0 + c68: 0f 90 pop r0 + c6a: 0f 90 pop r0 + c6c: 0f 90 pop r0 + c6e: 0f 90 pop r0 + c70: 0f 90 pop r0 + c72: 99 23 and r25, r25 + c74: 59 f0 breq .+22 ; 0xc8c <__stack+0x78d> + c76: fe 01 movw r30, r28 + c78: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + c82: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + c86: 91 91 ld r25, Z+ + c88: 91 11 cpse r25, r1 + c8a: f7 cf rjmp .-18 ; 0xc7a <__stack+0x77b> + c8c: 28 e0 ldi r18, 0x08 ; 8 + c8e: 9c e2 ldi r25, 0x2C ; 44 + c90: 80 e0 ldi r24, 0x00 ; 0 + c92: 15 c0 rjmp .+42 ; 0xcbe <__stack+0x7bf> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + c94: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + c96: 22 9a sbi 0x04, 2 ; 4 + c98: 35 e0 ldi r19, 0x05 ; 5 + c9a: 3a 95 dec r19 + c9c: f1 f7 brne .-4 ; 0xc9a <__stack+0x79b> + c9e: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + ca0: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + ca2: 81 60 ori r24, 0x01 ; 1 + ca4: 45 e0 ldi r20, 0x05 ; 5 + ca6: 4a 95 dec r20 + ca8: f1 f7 brne .-4 ; 0xca6 <__stack+0x7a7> + caa: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + cac: 29 9a sbi 0x05, 1 ; 5 + + 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; } + cae: 21 9a sbi 0x04, 1 ; 4 + cb0: 3a e0 ldi r19, 0x0A ; 10 + cb2: 3a 95 dec r19 + cb4: f1 f7 brne .-4 ; 0xcb2 <__stack+0x7b3> + cb6: 00 c0 rjmp .+0 ; 0xcb8 <__stack+0x7b9> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + cb8: 99 0f add r25, r25 + cba: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + cbc: 41 f0 breq .+16 ; 0xcce <__stack+0x7cf> + datain<<=1; //Schieben um das Richtige Bit zusetzen + cbe: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + cc0: 29 98 cbi 0x05, 1 ; 5 + + 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; } + cc2: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + cc4: 97 ff sbrs r25, 7 + cc6: e6 cf rjmp .-52 ; 0xc94 <__stack+0x795> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + cc8: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + cca: 22 9a sbi 0x04, 2 ; 4 + ccc: e5 cf rjmp .-54 ; 0xc98 <__stack+0x799> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + cce: 1f 92 push r1 + cd0: 8f 93 push r24 + cd2: ff 92 push r15 + cd4: ef 92 push r14 + cd6: 1f 93 push r17 + cd8: 0f 93 push r16 + cda: 0e 94 80 16 call 0x2d00 ; 0x2d00 + cde: 99 81 ldd r25, Y+1 ; 0x01 + ce0: 0f 90 pop r0 + ce2: 0f 90 pop r0 + ce4: 0f 90 pop r0 + ce6: 0f 90 pop r0 + ce8: 0f 90 pop r0 + cea: 0f 90 pop r0 + cec: 99 23 and r25, r25 + cee: 59 f0 breq .+22 ; 0xd06 <__stack+0x807> + cf0: fe 01 movw r30, r28 + cf2: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + cfc: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + d00: 91 91 ld r25, Z+ + d02: 91 11 cpse r25, r1 + d04: f7 cf rjmp .-18 ; 0xcf4 <__stack+0x7f5> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + d06: 1f 92 push r1 + d08: 82 e0 ldi r24, 0x02 ; 2 + d0a: 8f 93 push r24 + d0c: df 92 push r13 + d0e: cf 92 push r12 + d10: 1f 93 push r17 + d12: 0f 93 push r16 + d14: 0e 94 80 16 call 0x2d00 ; 0x2d00 + d18: 99 81 ldd r25, Y+1 ; 0x01 + d1a: 0f 90 pop r0 + d1c: 0f 90 pop r0 + d1e: 0f 90 pop r0 + d20: 0f 90 pop r0 + d22: 0f 90 pop r0 + d24: 0f 90 pop r0 + d26: 99 23 and r25, r25 + d28: 59 f0 breq .+22 ; 0xd40 <__stack+0x841> + d2a: fe 01 movw r30, r28 + d2c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + d36: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + d3a: 91 91 ld r25, Z+ + d3c: 91 11 cpse r25, r1 + d3e: f7 cf rjmp .-18 ; 0xd2e <__stack+0x82f> + d40: 28 e0 ldi r18, 0x08 ; 8 + d42: 92 e0 ldi r25, 0x02 ; 2 + d44: 80 e0 ldi r24, 0x00 ; 0 + d46: 15 c0 rjmp .+42 ; 0xd72 <__stack+0x873> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + d48: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + d4a: 22 9a sbi 0x04, 2 ; 4 + d4c: 45 e0 ldi r20, 0x05 ; 5 + d4e: 4a 95 dec r20 + d50: f1 f7 brne .-4 ; 0xd4e <__stack+0x84f> + d52: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + d54: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + d56: 81 60 ori r24, 0x01 ; 1 + d58: 35 e0 ldi r19, 0x05 ; 5 + d5a: 3a 95 dec r19 + d5c: f1 f7 brne .-4 ; 0xd5a <__stack+0x85b> + d5e: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + d60: 29 9a sbi 0x05, 1 ; 5 + + 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; } + d62: 21 9a sbi 0x04, 1 ; 4 + d64: 4a e0 ldi r20, 0x0A ; 10 + d66: 4a 95 dec r20 + d68: f1 f7 brne .-4 ; 0xd66 <__stack+0x867> + d6a: 00 c0 rjmp .+0 ; 0xd6c <__stack+0x86d> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + d6c: 99 0f add r25, r25 + d6e: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + d70: 41 f0 breq .+16 ; 0xd82 <__stack+0x883> + datain<<=1; //Schieben um das Richtige Bit zusetzen + d72: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + d74: 29 98 cbi 0x05, 1 ; 5 + + 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; } + d76: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + d78: 97 ff sbrs r25, 7 + d7a: e6 cf rjmp .-52 ; 0xd48 <__stack+0x849> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + d7c: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + d7e: 22 9a sbi 0x04, 2 ; 4 + d80: e5 cf rjmp .-54 ; 0xd4c <__stack+0x84d> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + d82: 1f 92 push r1 + d84: 8f 93 push r24 + d86: ff 92 push r15 + d88: ef 92 push r14 + d8a: 1f 93 push r17 + d8c: 0f 93 push r16 + d8e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + d92: 99 81 ldd r25, Y+1 ; 0x01 + d94: 0f 90 pop r0 + d96: 0f 90 pop r0 + d98: 0f 90 pop r0 + d9a: 0f 90 pop r0 + d9c: 0f 90 pop r0 + d9e: 0f 90 pop r0 + da0: 99 23 and r25, r25 + da2: 59 f0 breq .+22 ; 0xdba <__stack+0x8bb> + da4: fe 01 movw r30, r28 + da6: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + db0: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + db4: 91 91 ld r25, Z+ + db6: 91 11 cpse r25, r1 + db8: f7 cf rjmp .-18 ; 0xda8 <__stack+0x8a9> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + dba: 1f 92 push r1 + dbc: 1f 92 push r1 + dbe: df 92 push r13 + dc0: cf 92 push r12 + dc2: 1f 93 push r17 + dc4: 0f 93 push r16 + dc6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + dca: 99 81 ldd r25, Y+1 ; 0x01 + dcc: 0f 90 pop r0 + dce: 0f 90 pop r0 + dd0: 0f 90 pop r0 + dd2: 0f 90 pop r0 + dd4: 0f 90 pop r0 + dd6: 0f 90 pop r0 + dd8: 99 23 and r25, r25 + dda: 59 f0 breq .+22 ; 0xdf2 <__stack+0x8f3> + ddc: fe 01 movw r30, r28 + dde: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + de8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + dec: 91 91 ld r25, Z+ + dee: 91 11 cpse r25, r1 + df0: f7 cf rjmp .-18 ; 0xde0 <__stack+0x8e1> + df2: 98 e0 ldi r25, 0x08 ; 8 + df4: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + df6: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + df8: 29 98 cbi 0x05, 1 ; 5 + + 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; } + dfa: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + dfc: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + dfe: 22 9a sbi 0x04, 2 ; 4 + e00: 25 e0 ldi r18, 0x05 ; 5 + e02: 2a 95 dec r18 + e04: f1 f7 brne .-4 ; 0xe02 <__stack+0x903> + e06: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + e08: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + e0a: 81 60 ori r24, 0x01 ; 1 + e0c: 35 e0 ldi r19, 0x05 ; 5 + e0e: 3a 95 dec r19 + e10: f1 f7 brne .-4 ; 0xe0e <__stack+0x90f> + e12: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + e14: 29 9a sbi 0x05, 1 ; 5 + + 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; } + e16: 21 9a sbi 0x04, 1 ; 4 + e18: 4a e0 ldi r20, 0x0A ; 10 + e1a: 4a 95 dec r20 + e1c: f1 f7 brne .-4 ; 0xe1a <__stack+0x91b> + e1e: 00 c0 rjmp .+0 ; 0xe20 <__stack+0x921> + e20: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + e22: 49 f7 brne .-46 ; 0xdf6 <__stack+0x8f7> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + e24: 1f 92 push r1 + e26: 8f 93 push r24 + e28: ff 92 push r15 + e2a: ef 92 push r14 + e2c: 1f 93 push r17 + e2e: 0f 93 push r16 + e30: 0e 94 80 16 call 0x2d00 ; 0x2d00 + e34: 99 81 ldd r25, Y+1 ; 0x01 + e36: 0f 90 pop r0 + e38: 0f 90 pop r0 + e3a: 0f 90 pop r0 + e3c: 0f 90 pop r0 + e3e: 0f 90 pop r0 + e40: 0f 90 pop r0 + e42: 99 23 and r25, r25 + e44: 09 f4 brne .+2 ; 0xe48 <__stack+0x949> + e46: 97 ce rjmp .-722 ; 0xb76 <__stack+0x677> + e48: fe 01 movw r30, r28 + e4a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + e54: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + e58: 91 91 ld r25, Z+ + e5a: 91 11 cpse r25, r1 + e5c: f7 cf rjmp .-18 ; 0xe4c <__stack+0x94d> + e5e: 8b ce rjmp .-746 ; 0xb76 <__stack+0x677> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + e60: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + e62: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + e64: 1f 92 push r1 + e66: 84 e9 ldi r24, 0x94 ; 148 + e68: 8f 93 push r24 + e6a: df 92 push r13 + e6c: cf 92 push r12 + e6e: 1f 93 push r17 + e70: 0f 93 push r16 + e72: 0e 94 80 16 call 0x2d00 ; 0x2d00 + e76: 99 81 ldd r25, Y+1 ; 0x01 + e78: 0f 90 pop r0 + e7a: 0f 90 pop r0 + e7c: 0f 90 pop r0 + e7e: 0f 90 pop r0 + e80: 0f 90 pop r0 + e82: 0f 90 pop r0 + e84: 99 23 and r25, r25 + e86: 59 f0 breq .+22 ; 0xe9e <__stack+0x99f> + e88: fe 01 movw r30, r28 + e8a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + e94: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + e98: 91 91 ld r25, Z+ + e9a: 91 11 cpse r25, r1 + e9c: f7 cf rjmp .-18 ; 0xe8c <__stack+0x98d> + e9e: 28 e0 ldi r18, 0x08 ; 8 + ea0: 94 e9 ldi r25, 0x94 ; 148 + ea2: 80 e0 ldi r24, 0x00 ; 0 + ea4: 15 c0 rjmp .+42 ; 0xed0 <__stack+0x9d1> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + ea6: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + ea8: 22 9a sbi 0x04, 2 ; 4 + eaa: 45 e0 ldi r20, 0x05 ; 5 + eac: 4a 95 dec r20 + eae: f1 f7 brne .-4 ; 0xeac <__stack+0x9ad> + eb0: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + eb2: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + eb4: 81 60 ori r24, 0x01 ; 1 + eb6: 35 e0 ldi r19, 0x05 ; 5 + eb8: 3a 95 dec r19 + eba: f1 f7 brne .-4 ; 0xeb8 <__stack+0x9b9> + ebc: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + ebe: 29 9a sbi 0x05, 1 ; 5 + + 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; } + ec0: 21 9a sbi 0x04, 1 ; 4 + ec2: 4a e0 ldi r20, 0x0A ; 10 + ec4: 4a 95 dec r20 + ec6: f1 f7 brne .-4 ; 0xec4 <__stack+0x9c5> + ec8: 00 c0 rjmp .+0 ; 0xeca <__stack+0x9cb> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + eca: 99 0f add r25, r25 + ecc: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + ece: 41 f0 breq .+16 ; 0xee0 <__stack+0x9e1> + datain<<=1; //Schieben um das Richtige Bit zusetzen + ed0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + ed2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + ed4: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + ed6: 97 ff sbrs r25, 7 + ed8: e6 cf rjmp .-52 ; 0xea6 <__stack+0x9a7> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + eda: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + edc: 22 9a sbi 0x04, 2 ; 4 + ede: e5 cf rjmp .-54 ; 0xeaa <__stack+0x9ab> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + ee0: 1f 92 push r1 + ee2: 8f 93 push r24 + ee4: ff 92 push r15 + ee6: ef 92 push r14 + ee8: 1f 93 push r17 + eea: 0f 93 push r16 + eec: 0e 94 80 16 call 0x2d00 ; 0x2d00 + ef0: 99 81 ldd r25, Y+1 ; 0x01 + ef2: 0f 90 pop r0 + ef4: 0f 90 pop r0 + ef6: 0f 90 pop r0 + ef8: 0f 90 pop r0 + efa: 0f 90 pop r0 + efc: 0f 90 pop r0 + efe: 99 23 and r25, r25 + f00: 09 f4 brne .+2 ; 0xf04 <__stack+0xa05> + f02: b1 ca rjmp .-2718 ; 0x466 + f04: fe 01 movw r30, r28 + f06: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + f10: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + f14: 91 91 ld r25, Z+ + f16: 91 11 cpse r25, r1 + f18: f7 cf rjmp .-18 ; 0xf08 <__stack+0xa09> + f1a: a5 ca rjmp .-2742 ; 0x466 + +00000f1c <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC1Ev>: + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + f1c: 86 e0 ldi r24, 0x06 ; 6 + f1e: 80 93 ca 00 sts 0x00CA, r24 + UCSR1B |= /*(1< + UDR1 = c; + f40: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + f44: 91 91 ld r25, Z+ + f46: 91 11 cpse r25, r1 + f48: f7 cf rjmp .-18 ; 0xf38 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC1Ev+0x1c> + f4a: 22 9a sbi 0x04, 2 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + f4c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + f4e: 22 9a sbi 0x04, 2 ; 4 + f50: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + f52: 29 98 cbi 0x05, 1 ; 5 + + 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; } + f54: 21 9a sbi 0x04, 1 ; 4 + f56: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + f58: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + f5a: 24 9a sbi 0x04, 4 ; 4 + f5c: 23 98 cbi 0x04, 3 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + f5e: 2b 98 cbi 0x05, 3 ; 5 + f60: 2b 98 cbi 0x05, 3 ; 5 + + 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; } + f62: 23 9a sbi 0x04, 3 ; 4 + f64: 08 95 ret + +00000f66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh>: + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + f66: 0f 93 push r16 + f68: 1f 93 push r17 + f6a: cf 93 push r28 + f6c: df 93 push r29 + f6e: cd b7 in r28, 0x3d ; 61 + f70: de b7 in r29, 0x3e ; 62 + f72: e3 97 sbiw r28, 0x33 ; 51 + f74: 0f b6 in r0, 0x3f ; 63 + f76: f8 94 cli + f78: de bf out 0x3e, r29 ; 62 + f7a: 0f be out 0x3f, r0 ; 63 + f7c: cd bf out 0x3d, r28 ; 61 + char t[50]; + sprintf(t, "-> 0x%02x", data); + f7e: 1f 92 push r1 + f80: 6f 93 push r22 + f82: 8d e1 ldi r24, 0x1D ; 29 + f84: 91 e0 ldi r25, 0x01 ; 1 + f86: 9f 93 push r25 + f88: 8f 93 push r24 + f8a: 8e 01 movw r16, r28 + f8c: 0f 5f subi r16, 0xFF ; 255 + f8e: 1f 4f sbci r17, 0xFF ; 255 + f90: 1f 93 push r17 + f92: 0f 93 push r16 + f94: 6b ab std Y+51, r22 ; 0x33 + f96: 0e 94 80 16 call 0x2d00 ; 0x2d00 + f9a: 99 81 ldd r25, Y+1 ; 0x01 + f9c: 0f 90 pop r0 + f9e: 0f 90 pop r0 + fa0: 0f 90 pop r0 + fa2: 0f 90 pop r0 + fa4: 0f 90 pop r0 + fa6: 0f 90 pop r0 + fa8: 6b a9 ldd r22, Y+51 ; 0x33 + faa: 99 23 and r25, r25 + fac: 59 f0 breq .+22 ; 0xfc4 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x5e> + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + fae: fe 01 movw r30, r28 + fb0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + fba: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + fbe: 91 91 ld r25, Z+ + fc0: 91 11 cpse r25, r1 + fc2: f7 cf rjmp .-18 ; 0xfb2 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x4c> + fc4: 88 e0 ldi r24, 0x08 ; 8 + fc6: 40 e0 ldi r20, 0x00 ; 0 + fc8: 15 c0 rjmp .+42 ; 0xff4 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x8e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + fca: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + fcc: 22 9a sbi 0x04, 2 ; 4 + fce: 95 e0 ldi r25, 0x05 ; 5 + fd0: 9a 95 dec r25 + fd2: f1 f7 brne .-4 ; 0xfd0 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x6a> + fd4: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + fd6: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + fd8: 41 60 ori r20, 0x01 ; 1 + fda: 95 e0 ldi r25, 0x05 ; 5 + fdc: 9a 95 dec r25 + fde: f1 f7 brne .-4 ; 0xfdc <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x76> + fe0: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + fe2: 29 9a sbi 0x05, 1 ; 5 + + 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; } + fe4: 21 9a sbi 0x04, 1 ; 4 + fe6: 9a e0 ldi r25, 0x0A ; 10 + fe8: 9a 95 dec r25 + fea: f1 f7 brne .-4 ; 0xfe8 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x82> + fec: 00 c0 rjmp .+0 ; 0xfee <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x88> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + fee: 66 0f add r22, r22 + ff0: 81 50 subi r24, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + ff2: 41 f0 breq .+16 ; 0x1004 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x9e> + datain<<=1; //Schieben um das Richtige Bit zusetzen + ff4: 44 0f add r20, r20 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + ff6: 29 98 cbi 0x05, 1 ; 5 + + 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; } + ff8: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + ffa: 67 ff sbrs r22, 7 + ffc: e6 cf rjmp .-52 ; 0xfca <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x64> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + ffe: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1000: 22 9a sbi 0x04, 2 ; 4 + 1002: e5 cf rjmp .-54 ; 0xfce <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0x68> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1004: 1f 92 push r1 + 1006: 4f 93 push r20 + 1008: 27 e2 ldi r18, 0x27 ; 39 + 100a: 31 e0 ldi r19, 0x01 ; 1 + 100c: 3f 93 push r19 + 100e: 2f 93 push r18 + 1010: 1f 93 push r17 + 1012: 0f 93 push r16 + 1014: 4b ab std Y+51, r20 ; 0x33 + 1016: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 101a: 29 81 ldd r18, Y+1 ; 0x01 + 101c: 0f 90 pop r0 + 101e: 0f 90 pop r0 + 1020: 0f 90 pop r0 + 1022: 0f 90 pop r0 + 1024: 0f 90 pop r0 + 1026: 0f 90 pop r0 + 1028: 4b a9 ldd r20, Y+51 ; 0x33 + 102a: 22 23 and r18, r18 + 102c: 59 f0 breq .+22 ; 0x1044 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0xde> + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + 102e: fe 01 movw r30, r28 + 1030: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 103a: 20 93 ce 00 sts 0x00CE, r18 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 103e: 21 91 ld r18, Z+ + 1040: 21 11 cpse r18, r1 + 1042: f7 cf rjmp .-18 ; 0x1032 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh+0xcc> + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + u.send(t); + return r; + } + 1044: 84 2f mov r24, r20 + 1046: e3 96 adiw r28, 0x33 ; 51 + 1048: 0f b6 in r0, 0x3f ; 63 + 104a: f8 94 cli + 104c: de bf out 0x3e, r29 ; 62 + 104e: 0f be out 0x3f, r0 ; 63 + 1050: cd bf out 0x3d, r28 ; 61 + 1052: df 91 pop r29 + 1054: cf 91 pop r28 + 1056: 1f 91 pop r17 + 1058: 0f 91 pop r16 + 105a: 08 95 ret + +0000105c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv>: + return (status & 0x07); + } + private: + spiclass s; + uart u; + void init_can() { + 105c: ef 92 push r14 + 105e: ff 92 push r15 + 1060: 0f 93 push r16 + 1062: 1f 93 push r17 + 1064: cf 93 push r28 + 1066: df 93 push r29 + 1068: cd b7 in r28, 0x3d ; 61 + 106a: de b7 in r29, 0x3e ; 62 + 106c: e2 97 sbiw r28, 0x32 ; 50 + 106e: 0f b6 in r0, 0x3f ; 63 + 1070: f8 94 cli + 1072: de bf out 0x3e, r29 ; 62 + 1074: 0f be out 0x3f, r0 ; 63 + 1076: cd bf out 0x3d, r28 ; 61 + 1078: f8 2e mov r15, r24 + 107a: e9 2e mov r14, r25 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 107c: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 107e: 24 9a sbi 0x04, 4 ; 4 - // Wartet bis Byte gesendet wurde - loop_until_bit_is_set(SPSR, SPIF); - 586: 0d b4 in r0, 0x2d ; 45 - 588: 07 fe sbrs r0, 7 - 58a: fd cf rjmp .-6 ; 0x586 <_ZN3Spi4sendEh+0xa> - - return SPDR; - 58c: 8e b5 in r24, 0x2e ; 46 - 58e: 08 95 ret + // MCP2515 per Software Reset zuruecksetzten, + // danach ist der MCP2515 im Configuration Mode + s.CSOn(); + s.send( SPI_RESET ); + 1080: 60 ec ldi r22, 0xC0 ; 192 + 1082: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif -uint8_t Spi::send(uint8_t data) { - if(mode == 0) { - return send_hard(data); - } - return send_soft(data); - 590: 0c 94 9d 02 jmp 0x53a ; 0x53a <_ZN3Spi9send_softEh> + __builtin_avr_delay_cycles(__ticks_dc); + 1086: 8f e9 ldi r24, 0x9F ; 159 + 1088: 9f e0 ldi r25, 0x0F ; 15 + 108a: 01 97 sbiw r24, 0x01 ; 1 + 108c: f1 f7 brne .-4 ; 0x108a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2e> + 108e: 00 c0 rjmp .+0 ; 0x1090 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x34> + 1090: 00 00 nop +namespace avrlib { -00000594 <__tablejump2__>: - 594: ee 0f add r30, r30 - 596: ff 1f adc r31, r31 + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1092: 2c 9a sbi 0x05, 4 ; 5 -00000598 <__tablejump__>: - 598: 05 90 lpm r0, Z+ - 59a: f4 91 lpm r31, Z - 59c: e0 2d mov r30, r0 - 59e: 09 94 ijmp + static uint8_t pin() { return PINB; } + static void pin(uint8_t v) { PINB = v; } -000005a0 <_exit>: - 5a0: f8 94 cli + static uint8_t dir() { return DDRB; } + static void dir(uint8_t v) { DDRB = v; } + 1094: 24 9a sbi 0x04, 4 ; 4 + 1096: 8f e3 ldi r24, 0x3F ; 63 + 1098: 9c e9 ldi r25, 0x9C ; 156 + 109a: 01 97 sbiw r24, 0x01 ; 1 + 109c: f1 f7 brne .-4 ; 0x109a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3e> + 109e: 00 c0 rjmp .+0 ; 0x10a0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x44> + 10a0: 00 00 nop +namespace avrlib { -000005a2 <__stop_program>: - 5a2: ff cf rjmp .-2 ; 0x5a2 <__stop_program> + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 10a2: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 10a4: 24 9a sbi 0x04, 4 ; 4 + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 10a6: 62 e0 ldi r22, 0x02 ; 2 + 10a8: 8f 2d mov r24, r15 + 10aa: 9e 2d mov r25, r14 + 10ac: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 10b0: 1f 92 push r1 + 10b2: 8a e2 ldi r24, 0x2A ; 42 + 10b4: 8f 93 push r24 + 10b6: 8d e1 ldi r24, 0x1D ; 29 + 10b8: 91 e0 ldi r25, 0x01 ; 1 + 10ba: 9f 93 push r25 + 10bc: 8f 93 push r24 + 10be: 8e 01 movw r16, r28 + 10c0: 0f 5f subi r16, 0xFF ; 255 + 10c2: 1f 4f sbci r17, 0xFF ; 255 + 10c4: 1f 93 push r17 + 10c6: 0f 93 push r16 + 10c8: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 10cc: 99 81 ldd r25, Y+1 ; 0x01 + 10ce: 0f 90 pop r0 + 10d0: 0f 90 pop r0 + 10d2: 0f 90 pop r0 + 10d4: 0f 90 pop r0 + 10d6: 0f 90 pop r0 + 10d8: 0f 90 pop r0 + 10da: 99 23 and r25, r25 + 10dc: 59 f0 breq .+22 ; 0x10f4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x98> + return (status & 0x07); + } + private: + spiclass s; + uart u; + void init_can() { + 10de: fe 01 movw r30, r28 + 10e0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 10ea: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 10ee: 91 91 ld r25, Z+ + 10f0: 91 11 cpse r25, r1 + 10f2: f7 cf rjmp .-18 ; 0x10e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x86> + 10f4: 28 e0 ldi r18, 0x08 ; 8 + 10f6: 9a e2 ldi r25, 0x2A ; 42 + 10f8: 80 e0 ldi r24, 0x00 ; 0 + 10fa: 15 c0 rjmp .+42 ; 0x1126 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xca> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 10fc: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 10fe: 22 9a sbi 0x04, 2 ; 4 + #else + //round up by default + __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); + #endif + + __builtin_avr_delay_cycles(__ticks_dc); + 1100: 35 e0 ldi r19, 0x05 ; 5 + 1102: 3a 95 dec r19 + 1104: f1 f7 brne .-4 ; 0x1102 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa6> + 1106: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1108: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 110a: 81 60 ori r24, 0x01 ; 1 + 110c: 35 e0 ldi r19, 0x05 ; 5 + 110e: 3a 95 dec r19 + 1110: f1 f7 brne .-4 ; 0x110e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb2> + 1112: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1114: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1116: 21 9a sbi 0x04, 1 ; 4 + 1118: 3a e0 ldi r19, 0x0A ; 10 + 111a: 3a 95 dec r19 + 111c: f1 f7 brne .-4 ; 0x111a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbe> + 111e: 00 c0 rjmp .+0 ; 0x1120 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xc4> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1120: 99 0f add r25, r25 + 1122: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1124: 41 f0 breq .+16 ; 0x1136 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xda> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1126: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1128: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 112a: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 112c: 97 ff sbrs r25, 7 + 112e: e6 cf rjmp .-52 ; 0x10fc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa0> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1130: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1132: 22 9a sbi 0x04, 2 ; 4 + 1134: e5 cf rjmp .-54 ; 0x1100 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa4> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1136: 1f 92 push r1 + 1138: 8f 93 push r24 + 113a: 87 e2 ldi r24, 0x27 ; 39 + 113c: 91 e0 ldi r25, 0x01 ; 1 + 113e: 9f 93 push r25 + 1140: 8f 93 push r24 + 1142: 1f 93 push r17 + 1144: 0f 93 push r16 + 1146: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 114a: 99 81 ldd r25, Y+1 ; 0x01 + 114c: 0f 90 pop r0 + 114e: 0f 90 pop r0 + 1150: 0f 90 pop r0 + 1152: 0f 90 pop r0 + 1154: 0f 90 pop r0 + 1156: 0f 90 pop r0 + 1158: 99 23 and r25, r25 + 115a: 59 f0 breq .+22 ; 0x1172 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x116> + 115c: fe 01 movw r30, r28 + 115e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1168: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 116c: 91 91 ld r25, Z+ + 116e: 91 11 cpse r25, r1 + 1170: f7 cf rjmp .-18 ; 0x1160 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x104> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1172: 1f 92 push r1 + 1174: 87 e0 ldi r24, 0x07 ; 7 + 1176: 8f 93 push r24 + 1178: 8d e1 ldi r24, 0x1D ; 29 + 117a: 91 e0 ldi r25, 0x01 ; 1 + 117c: 9f 93 push r25 + 117e: 8f 93 push r24 + 1180: 1f 93 push r17 + 1182: 0f 93 push r16 + 1184: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1188: 99 81 ldd r25, Y+1 ; 0x01 + 118a: 0f 90 pop r0 + 118c: 0f 90 pop r0 + 118e: 0f 90 pop r0 + 1190: 0f 90 pop r0 + 1192: 0f 90 pop r0 + 1194: 0f 90 pop r0 + 1196: 99 23 and r25, r25 + 1198: 59 f0 breq .+22 ; 0x11b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x154> + 119a: fe 01 movw r30, r28 + 119c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 11a6: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 11aa: 91 91 ld r25, Z+ + 11ac: 91 11 cpse r25, r1 + 11ae: f7 cf rjmp .-18 ; 0x119e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x142> + 11b0: 28 e0 ldi r18, 0x08 ; 8 + 11b2: 97 e0 ldi r25, 0x07 ; 7 + 11b4: 80 e0 ldi r24, 0x00 ; 0 + 11b6: 15 c0 rjmp .+42 ; 0x11e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x186> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 11b8: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 11ba: 22 9a sbi 0x04, 2 ; 4 + 11bc: 35 e0 ldi r19, 0x05 ; 5 + 11be: 3a 95 dec r19 + 11c0: f1 f7 brne .-4 ; 0x11be <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x162> + 11c2: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 11c4: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 11c6: 81 60 ori r24, 0x01 ; 1 + 11c8: 35 e0 ldi r19, 0x05 ; 5 + 11ca: 3a 95 dec r19 + 11cc: f1 f7 brne .-4 ; 0x11ca <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x16e> + 11ce: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 11d0: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 11d2: 21 9a sbi 0x04, 1 ; 4 + 11d4: 3a e0 ldi r19, 0x0A ; 10 + 11d6: 3a 95 dec r19 + 11d8: f1 f7 brne .-4 ; 0x11d6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17a> + 11da: 00 c0 rjmp .+0 ; 0x11dc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x180> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 11dc: 99 0f add r25, r25 + 11de: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 11e0: 41 f0 breq .+16 ; 0x11f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x196> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 11e2: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 11e4: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 11e6: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 11e8: 97 ff sbrs r25, 7 + 11ea: e6 cf rjmp .-52 ; 0x11b8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15c> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 11ec: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 11ee: 22 9a sbi 0x04, 2 ; 4 + 11f0: e5 cf rjmp .-54 ; 0x11bc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x160> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 11f2: 1f 92 push r1 + 11f4: 8f 93 push r24 + 11f6: 87 e2 ldi r24, 0x27 ; 39 + 11f8: 91 e0 ldi r25, 0x01 ; 1 + 11fa: 9f 93 push r25 + 11fc: 8f 93 push r24 + 11fe: 1f 93 push r17 + 1200: 0f 93 push r16 + 1202: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1206: 99 81 ldd r25, Y+1 ; 0x01 + 1208: 0f 90 pop r0 + 120a: 0f 90 pop r0 + 120c: 0f 90 pop r0 + 120e: 0f 90 pop r0 + 1210: 0f 90 pop r0 + 1212: 0f 90 pop r0 + 1214: 99 23 and r25, r25 + 1216: 59 f0 breq .+22 ; 0x122e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1d2> + 1218: fe 01 movw r30, r28 + 121a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1224: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1228: 91 91 ld r25, Z+ + 122a: 91 11 cpse r25, r1 + 122c: f7 cf rjmp .-18 ; 0x121c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1c0> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 122e: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1230: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1232: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1234: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1236: 1f 92 push r1 + 1238: 82 e0 ldi r24, 0x02 ; 2 + 123a: 8f 93 push r24 + 123c: 8d e1 ldi r24, 0x1D ; 29 + 123e: 91 e0 ldi r25, 0x01 ; 1 + 1240: 9f 93 push r25 + 1242: 8f 93 push r24 + 1244: 1f 93 push r17 + 1246: 0f 93 push r16 + 1248: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 124c: 99 81 ldd r25, Y+1 ; 0x01 + 124e: 0f 90 pop r0 + 1250: 0f 90 pop r0 + 1252: 0f 90 pop r0 + 1254: 0f 90 pop r0 + 1256: 0f 90 pop r0 + 1258: 0f 90 pop r0 + 125a: 99 23 and r25, r25 + 125c: 59 f0 breq .+22 ; 0x1274 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x218> + 125e: fe 01 movw r30, r28 + 1260: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 126a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 126e: 91 91 ld r25, Z+ + 1270: 91 11 cpse r25, r1 + 1272: f7 cf rjmp .-18 ; 0x1262 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x206> + 1274: 28 e0 ldi r18, 0x08 ; 8 + 1276: 92 e0 ldi r25, 0x02 ; 2 + 1278: 80 e0 ldi r24, 0x00 ; 0 + 127a: 15 c0 rjmp .+42 ; 0x12a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x24a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 127c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 127e: 22 9a sbi 0x04, 2 ; 4 + 1280: 35 e0 ldi r19, 0x05 ; 5 + 1282: 3a 95 dec r19 + 1284: f1 f7 brne .-4 ; 0x1282 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x226> + 1286: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1288: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 128a: 81 60 ori r24, 0x01 ; 1 + 128c: 35 e0 ldi r19, 0x05 ; 5 + 128e: 3a 95 dec r19 + 1290: f1 f7 brne .-4 ; 0x128e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x232> + 1292: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1294: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1296: 21 9a sbi 0x04, 1 ; 4 + 1298: 3a e0 ldi r19, 0x0A ; 10 + 129a: 3a 95 dec r19 + 129c: f1 f7 brne .-4 ; 0x129a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x23e> + 129e: 00 c0 rjmp .+0 ; 0x12a0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x244> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 12a0: 99 0f add r25, r25 + 12a2: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 12a4: 41 f0 breq .+16 ; 0x12b6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x25a> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 12a6: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 12a8: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 12aa: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 12ac: 97 ff sbrs r25, 7 + 12ae: e6 cf rjmp .-52 ; 0x127c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x220> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 12b0: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 12b2: 22 9a sbi 0x04, 2 ; 4 + 12b4: e5 cf rjmp .-54 ; 0x1280 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x224> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 12b6: 1f 92 push r1 + 12b8: 8f 93 push r24 + 12ba: 87 e2 ldi r24, 0x27 ; 39 + 12bc: 91 e0 ldi r25, 0x01 ; 1 + 12be: 9f 93 push r25 + 12c0: 8f 93 push r24 + 12c2: 1f 93 push r17 + 12c4: 0f 93 push r16 + 12c6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 12ca: 99 81 ldd r25, Y+1 ; 0x01 + 12cc: 0f 90 pop r0 + 12ce: 0f 90 pop r0 + 12d0: 0f 90 pop r0 + 12d2: 0f 90 pop r0 + 12d4: 0f 90 pop r0 + 12d6: 0f 90 pop r0 + 12d8: 99 23 and r25, r25 + 12da: 59 f0 breq .+22 ; 0x12f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x296> + 12dc: fe 01 movw r30, r28 + 12de: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 12e8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 12ec: 91 91 ld r25, Z+ + 12ee: 91 11 cpse r25, r1 + 12f0: f7 cf rjmp .-18 ; 0x12e0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x284> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 12f2: 1f 92 push r1 + 12f4: 89 e2 ldi r24, 0x29 ; 41 + 12f6: 8f 93 push r24 + 12f8: 8d e1 ldi r24, 0x1D ; 29 + 12fa: 91 e0 ldi r25, 0x01 ; 1 + 12fc: 9f 93 push r25 + 12fe: 8f 93 push r24 + 1300: 1f 93 push r17 + 1302: 0f 93 push r16 + 1304: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1308: 99 81 ldd r25, Y+1 ; 0x01 + 130a: 0f 90 pop r0 + 130c: 0f 90 pop r0 + 130e: 0f 90 pop r0 + 1310: 0f 90 pop r0 + 1312: 0f 90 pop r0 + 1314: 0f 90 pop r0 + 1316: 99 23 and r25, r25 + 1318: 59 f0 breq .+22 ; 0x1330 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2d4> + 131a: fe 01 movw r30, r28 + 131c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1326: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 132a: 91 91 ld r25, Z+ + 132c: 91 11 cpse r25, r1 + 132e: f7 cf rjmp .-18 ; 0x131e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2c2> + 1330: 28 e0 ldi r18, 0x08 ; 8 + 1332: 99 e2 ldi r25, 0x29 ; 41 + 1334: 80 e0 ldi r24, 0x00 ; 0 + 1336: 15 c0 rjmp .+42 ; 0x1362 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x306> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1338: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 133a: 22 9a sbi 0x04, 2 ; 4 + 133c: 35 e0 ldi r19, 0x05 ; 5 + 133e: 3a 95 dec r19 + 1340: f1 f7 brne .-4 ; 0x133e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2e2> + 1342: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1344: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1346: 81 60 ori r24, 0x01 ; 1 + 1348: 35 e0 ldi r19, 0x05 ; 5 + 134a: 3a 95 dec r19 + 134c: f1 f7 brne .-4 ; 0x134a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2ee> + 134e: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1350: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1352: 21 9a sbi 0x04, 1 ; 4 + 1354: 3a e0 ldi r19, 0x0A ; 10 + 1356: 3a 95 dec r19 + 1358: f1 f7 brne .-4 ; 0x1356 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2fa> + 135a: 00 c0 rjmp .+0 ; 0x135c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x300> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 135c: 99 0f add r25, r25 + 135e: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1360: 41 f0 breq .+16 ; 0x1372 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x316> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1362: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1364: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1366: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1368: 97 ff sbrs r25, 7 + 136a: e6 cf rjmp .-52 ; 0x1338 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2dc> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 136c: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 136e: 22 9a sbi 0x04, 2 ; 4 + 1370: e5 cf rjmp .-54 ; 0x133c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x2e0> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1372: 1f 92 push r1 + 1374: 8f 93 push r24 + 1376: 87 e2 ldi r24, 0x27 ; 39 + 1378: 91 e0 ldi r25, 0x01 ; 1 + 137a: 9f 93 push r25 + 137c: 8f 93 push r24 + 137e: 1f 93 push r17 + 1380: 0f 93 push r16 + 1382: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1386: 99 81 ldd r25, Y+1 ; 0x01 + 1388: 0f 90 pop r0 + 138a: 0f 90 pop r0 + 138c: 0f 90 pop r0 + 138e: 0f 90 pop r0 + 1390: 0f 90 pop r0 + 1392: 0f 90 pop r0 + 1394: 99 23 and r25, r25 + 1396: 59 f0 breq .+22 ; 0x13ae <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x352> + 1398: fe 01 movw r30, r28 + 139a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 13a4: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 13a8: 91 91 ld r25, Z+ + 13aa: 91 11 cpse r25, r1 + 13ac: f7 cf rjmp .-18 ; 0x139c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x340> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 13ae: 1f 92 push r1 + 13b0: 80 e9 ldi r24, 0x90 ; 144 + 13b2: 8f 93 push r24 + 13b4: 8d e1 ldi r24, 0x1D ; 29 + 13b6: 91 e0 ldi r25, 0x01 ; 1 + 13b8: 9f 93 push r25 + 13ba: 8f 93 push r24 + 13bc: 1f 93 push r17 + 13be: 0f 93 push r16 + 13c0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 13c4: 99 81 ldd r25, Y+1 ; 0x01 + 13c6: 0f 90 pop r0 + 13c8: 0f 90 pop r0 + 13ca: 0f 90 pop r0 + 13cc: 0f 90 pop r0 + 13ce: 0f 90 pop r0 + 13d0: 0f 90 pop r0 + 13d2: 99 23 and r25, r25 + 13d4: 59 f0 breq .+22 ; 0x13ec <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x390> + 13d6: fe 01 movw r30, r28 + 13d8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 13e2: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 13e6: 91 91 ld r25, Z+ + 13e8: 91 11 cpse r25, r1 + 13ea: f7 cf rjmp .-18 ; 0x13da <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x37e> + 13ec: 28 e0 ldi r18, 0x08 ; 8 + 13ee: 90 e9 ldi r25, 0x90 ; 144 + 13f0: 80 e0 ldi r24, 0x00 ; 0 + 13f2: 15 c0 rjmp .+42 ; 0x141e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3c2> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 13f4: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 13f6: 22 9a sbi 0x04, 2 ; 4 + 13f8: 35 e0 ldi r19, 0x05 ; 5 + 13fa: 3a 95 dec r19 + 13fc: f1 f7 brne .-4 ; 0x13fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x39e> + 13fe: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1400: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1402: 81 60 ori r24, 0x01 ; 1 + 1404: 35 e0 ldi r19, 0x05 ; 5 + 1406: 3a 95 dec r19 + 1408: f1 f7 brne .-4 ; 0x1406 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3aa> + 140a: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 140c: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 140e: 21 9a sbi 0x04, 1 ; 4 + 1410: 3a e0 ldi r19, 0x0A ; 10 + 1412: 3a 95 dec r19 + 1414: f1 f7 brne .-4 ; 0x1412 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3b6> + 1416: 00 c0 rjmp .+0 ; 0x1418 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3bc> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1418: 99 0f add r25, r25 + 141a: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 141c: 41 f0 breq .+16 ; 0x142e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3d2> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 141e: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1420: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1422: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1424: 97 ff sbrs r25, 7 + 1426: e6 cf rjmp .-52 ; 0x13f4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x398> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1428: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 142a: 22 9a sbi 0x04, 2 ; 4 + 142c: e5 cf rjmp .-54 ; 0x13f8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x39c> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 142e: 1f 92 push r1 + 1430: 8f 93 push r24 + 1432: 87 e2 ldi r24, 0x27 ; 39 + 1434: 91 e0 ldi r25, 0x01 ; 1 + 1436: 9f 93 push r25 + 1438: 8f 93 push r24 + 143a: 1f 93 push r17 + 143c: 0f 93 push r16 + 143e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1442: 99 81 ldd r25, Y+1 ; 0x01 + 1444: 0f 90 pop r0 + 1446: 0f 90 pop r0 + 1448: 0f 90 pop r0 + 144a: 0f 90 pop r0 + 144c: 0f 90 pop r0 + 144e: 0f 90 pop r0 + 1450: 99 23 and r25, r25 + 1452: 59 f0 breq .+22 ; 0x146a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x40e> + 1454: fe 01 movw r30, r28 + 1456: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1460: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1464: 91 91 ld r25, Z+ + 1466: 91 11 cpse r25, r1 + 1468: f7 cf rjmp .-18 ; 0x1458 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x3fc> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 146a: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 146c: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 146e: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1470: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1472: 1f 92 push r1 + 1474: 82 e0 ldi r24, 0x02 ; 2 + 1476: 8f 93 push r24 + 1478: 8d e1 ldi r24, 0x1D ; 29 + 147a: 91 e0 ldi r25, 0x01 ; 1 + 147c: 9f 93 push r25 + 147e: 8f 93 push r24 + 1480: 1f 93 push r17 + 1482: 0f 93 push r16 + 1484: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1488: 99 81 ldd r25, Y+1 ; 0x01 + 148a: 0f 90 pop r0 + 148c: 0f 90 pop r0 + 148e: 0f 90 pop r0 + 1490: 0f 90 pop r0 + 1492: 0f 90 pop r0 + 1494: 0f 90 pop r0 + 1496: 99 23 and r25, r25 + 1498: 59 f0 breq .+22 ; 0x14b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x454> + 149a: fe 01 movw r30, r28 + 149c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 14a6: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 14aa: 91 91 ld r25, Z+ + 14ac: 91 11 cpse r25, r1 + 14ae: f7 cf rjmp .-18 ; 0x149e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x442> + 14b0: 28 e0 ldi r18, 0x08 ; 8 + 14b2: 92 e0 ldi r25, 0x02 ; 2 + 14b4: 80 e0 ldi r24, 0x00 ; 0 + 14b6: 15 c0 rjmp .+42 ; 0x14e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x486> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 14b8: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 14ba: 22 9a sbi 0x04, 2 ; 4 + 14bc: 35 e0 ldi r19, 0x05 ; 5 + 14be: 3a 95 dec r19 + 14c0: f1 f7 brne .-4 ; 0x14be <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x462> + 14c2: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 14c4: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 14c6: 81 60 ori r24, 0x01 ; 1 + 14c8: 35 e0 ldi r19, 0x05 ; 5 + 14ca: 3a 95 dec r19 + 14cc: f1 f7 brne .-4 ; 0x14ca <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x46e> + 14ce: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 14d0: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 14d2: 21 9a sbi 0x04, 1 ; 4 + 14d4: 3a e0 ldi r19, 0x0A ; 10 + 14d6: 3a 95 dec r19 + 14d8: f1 f7 brne .-4 ; 0x14d6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x47a> + 14da: 00 c0 rjmp .+0 ; 0x14dc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x480> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 14dc: 99 0f add r25, r25 + 14de: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 14e0: 41 f0 breq .+16 ; 0x14f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x496> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 14e2: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 14e4: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 14e6: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 14e8: 97 ff sbrs r25, 7 + 14ea: e6 cf rjmp .-52 ; 0x14b8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x45c> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 14ec: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 14ee: 22 9a sbi 0x04, 2 ; 4 + 14f0: e5 cf rjmp .-54 ; 0x14bc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x460> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 14f2: 1f 92 push r1 + 14f4: 8f 93 push r24 + 14f6: 87 e2 ldi r24, 0x27 ; 39 + 14f8: 91 e0 ldi r25, 0x01 ; 1 + 14fa: 9f 93 push r25 + 14fc: 8f 93 push r24 + 14fe: 1f 93 push r17 + 1500: 0f 93 push r16 + 1502: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1506: 99 81 ldd r25, Y+1 ; 0x01 + 1508: 0f 90 pop r0 + 150a: 0f 90 pop r0 + 150c: 0f 90 pop r0 + 150e: 0f 90 pop r0 + 1510: 0f 90 pop r0 + 1512: 0f 90 pop r0 + 1514: 99 23 and r25, r25 + 1516: 59 f0 breq .+22 ; 0x152e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x4d2> + 1518: fe 01 movw r30, r28 + 151a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1524: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1528: 91 91 ld r25, Z+ + 152a: 91 11 cpse r25, r1 + 152c: f7 cf rjmp .-18 ; 0x151c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x4c0> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 152e: 1f 92 push r1 + 1530: 88 e2 ldi r24, 0x28 ; 40 + 1532: 8f 93 push r24 + 1534: 8d e1 ldi r24, 0x1D ; 29 + 1536: 91 e0 ldi r25, 0x01 ; 1 + 1538: 9f 93 push r25 + 153a: 8f 93 push r24 + 153c: 1f 93 push r17 + 153e: 0f 93 push r16 + 1540: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1544: 99 81 ldd r25, Y+1 ; 0x01 + 1546: 0f 90 pop r0 + 1548: 0f 90 pop r0 + 154a: 0f 90 pop r0 + 154c: 0f 90 pop r0 + 154e: 0f 90 pop r0 + 1550: 0f 90 pop r0 + 1552: 99 23 and r25, r25 + 1554: 59 f0 breq .+22 ; 0x156c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x510> + 1556: fe 01 movw r30, r28 + 1558: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1562: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1566: 91 91 ld r25, Z+ + 1568: 91 11 cpse r25, r1 + 156a: f7 cf rjmp .-18 ; 0x155a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x4fe> + 156c: 28 e0 ldi r18, 0x08 ; 8 + 156e: 98 e2 ldi r25, 0x28 ; 40 + 1570: 80 e0 ldi r24, 0x00 ; 0 + 1572: 15 c0 rjmp .+42 ; 0x159e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x542> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1574: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1576: 22 9a sbi 0x04, 2 ; 4 + 1578: 35 e0 ldi r19, 0x05 ; 5 + 157a: 3a 95 dec r19 + 157c: f1 f7 brne .-4 ; 0x157a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x51e> + 157e: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1580: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1582: 81 60 ori r24, 0x01 ; 1 + 1584: 35 e0 ldi r19, 0x05 ; 5 + 1586: 3a 95 dec r19 + 1588: f1 f7 brne .-4 ; 0x1586 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x52a> + 158a: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 158c: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 158e: 21 9a sbi 0x04, 1 ; 4 + 1590: 3a e0 ldi r19, 0x0A ; 10 + 1592: 3a 95 dec r19 + 1594: f1 f7 brne .-4 ; 0x1592 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x536> + 1596: 00 c0 rjmp .+0 ; 0x1598 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x53c> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1598: 99 0f add r25, r25 + 159a: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 159c: 41 f0 breq .+16 ; 0x15ae <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x552> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 159e: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 15a0: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 15a2: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 15a4: 97 ff sbrs r25, 7 + 15a6: e6 cf rjmp .-52 ; 0x1574 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x518> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 15a8: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 15aa: 22 9a sbi 0x04, 2 ; 4 + 15ac: e5 cf rjmp .-54 ; 0x1578 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x51c> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 15ae: 1f 92 push r1 + 15b0: 8f 93 push r24 + 15b2: 87 e2 ldi r24, 0x27 ; 39 + 15b4: 91 e0 ldi r25, 0x01 ; 1 + 15b6: 9f 93 push r25 + 15b8: 8f 93 push r24 + 15ba: 1f 93 push r17 + 15bc: 0f 93 push r16 + 15be: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 15c2: 99 81 ldd r25, Y+1 ; 0x01 + 15c4: 0f 90 pop r0 + 15c6: 0f 90 pop r0 + 15c8: 0f 90 pop r0 + 15ca: 0f 90 pop r0 + 15cc: 0f 90 pop r0 + 15ce: 0f 90 pop r0 + 15d0: 99 23 and r25, r25 + 15d2: 59 f0 breq .+22 ; 0x15ea <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x58e> + 15d4: fe 01 movw r30, r28 + 15d6: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 15e0: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 15e4: 91 91 ld r25, Z+ + 15e6: 91 11 cpse r25, r1 + 15e8: f7 cf rjmp .-18 ; 0x15d8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x57c> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 15ea: 1f 92 push r1 + 15ec: 82 e0 ldi r24, 0x02 ; 2 + 15ee: 8f 93 push r24 + 15f0: 8d e1 ldi r24, 0x1D ; 29 + 15f2: 91 e0 ldi r25, 0x01 ; 1 + 15f4: 9f 93 push r25 + 15f6: 8f 93 push r24 + 15f8: 1f 93 push r17 + 15fa: 0f 93 push r16 + 15fc: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1600: 99 81 ldd r25, Y+1 ; 0x01 + 1602: 0f 90 pop r0 + 1604: 0f 90 pop r0 + 1606: 0f 90 pop r0 + 1608: 0f 90 pop r0 + 160a: 0f 90 pop r0 + 160c: 0f 90 pop r0 + 160e: 99 23 and r25, r25 + 1610: 59 f0 breq .+22 ; 0x1628 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5cc> + 1612: fe 01 movw r30, r28 + 1614: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 161e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1622: 91 91 ld r25, Z+ + 1624: 91 11 cpse r25, r1 + 1626: f7 cf rjmp .-18 ; 0x1616 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5ba> + 1628: 28 e0 ldi r18, 0x08 ; 8 + 162a: 92 e0 ldi r25, 0x02 ; 2 + 162c: 80 e0 ldi r24, 0x00 ; 0 + 162e: 15 c0 rjmp .+42 ; 0x165a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5fe> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1630: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1632: 22 9a sbi 0x04, 2 ; 4 + 1634: 35 e0 ldi r19, 0x05 ; 5 + 1636: 3a 95 dec r19 + 1638: f1 f7 brne .-4 ; 0x1636 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5da> + 163a: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 163c: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 163e: 81 60 ori r24, 0x01 ; 1 + 1640: 35 e0 ldi r19, 0x05 ; 5 + 1642: 3a 95 dec r19 + 1644: f1 f7 brne .-4 ; 0x1642 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5e6> + 1646: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1648: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 164a: 21 9a sbi 0x04, 1 ; 4 + 164c: 3a e0 ldi r19, 0x0A ; 10 + 164e: 3a 95 dec r19 + 1650: f1 f7 brne .-4 ; 0x164e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5f2> + 1652: 00 c0 rjmp .+0 ; 0x1654 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5f8> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1654: 99 0f add r25, r25 + 1656: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1658: 41 f0 breq .+16 ; 0x166a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x60e> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 165a: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 165c: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 165e: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1660: 97 ff sbrs r25, 7 + 1662: e6 cf rjmp .-52 ; 0x1630 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5d4> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1664: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1666: 22 9a sbi 0x04, 2 ; 4 + 1668: e5 cf rjmp .-54 ; 0x1634 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x5d8> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 166a: 1f 92 push r1 + 166c: 8f 93 push r24 + 166e: 87 e2 ldi r24, 0x27 ; 39 + 1670: 91 e0 ldi r25, 0x01 ; 1 + 1672: 9f 93 push r25 + 1674: 8f 93 push r24 + 1676: 1f 93 push r17 + 1678: 0f 93 push r16 + 167a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 167e: 99 81 ldd r25, Y+1 ; 0x01 + 1680: 0f 90 pop r0 + 1682: 0f 90 pop r0 + 1684: 0f 90 pop r0 + 1686: 0f 90 pop r0 + 1688: 0f 90 pop r0 + 168a: 0f 90 pop r0 + 168c: 99 23 and r25, r25 + 168e: 59 f0 breq .+22 ; 0x16a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x64a> + 1690: fe 01 movw r30, r28 + 1692: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 169c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 16a0: 91 91 ld r25, Z+ + 16a2: 91 11 cpse r25, r1 + 16a4: f7 cf rjmp .-18 ; 0x1694 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x638> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 16a6: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 16a8: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 16aa: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 16ac: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 16ae: 1f 92 push r1 + 16b0: 82 e0 ldi r24, 0x02 ; 2 + 16b2: 8f 93 push r24 + 16b4: 8d e1 ldi r24, 0x1D ; 29 + 16b6: 91 e0 ldi r25, 0x01 ; 1 + 16b8: 9f 93 push r25 + 16ba: 8f 93 push r24 + 16bc: 1f 93 push r17 + 16be: 0f 93 push r16 + 16c0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 16c4: 99 81 ldd r25, Y+1 ; 0x01 + 16c6: 0f 90 pop r0 + 16c8: 0f 90 pop r0 + 16ca: 0f 90 pop r0 + 16cc: 0f 90 pop r0 + 16ce: 0f 90 pop r0 + 16d0: 0f 90 pop r0 + 16d2: 99 23 and r25, r25 + 16d4: 59 f0 breq .+22 ; 0x16ec <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x690> + 16d6: fe 01 movw r30, r28 + 16d8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 16e2: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 16e6: 91 91 ld r25, Z+ + 16e8: 91 11 cpse r25, r1 + 16ea: f7 cf rjmp .-18 ; 0x16da <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x67e> + 16ec: 28 e0 ldi r18, 0x08 ; 8 + 16ee: 92 e0 ldi r25, 0x02 ; 2 + 16f0: 80 e0 ldi r24, 0x00 ; 0 + 16f2: 15 c0 rjmp .+42 ; 0x171e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6c2> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 16f4: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 16f6: 22 9a sbi 0x04, 2 ; 4 + 16f8: 35 e0 ldi r19, 0x05 ; 5 + 16fa: 3a 95 dec r19 + 16fc: f1 f7 brne .-4 ; 0x16fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x69e> + 16fe: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1700: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1702: 81 60 ori r24, 0x01 ; 1 + 1704: 35 e0 ldi r19, 0x05 ; 5 + 1706: 3a 95 dec r19 + 1708: f1 f7 brne .-4 ; 0x1706 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6aa> + 170a: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 170c: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 170e: 21 9a sbi 0x04, 1 ; 4 + 1710: 3a e0 ldi r19, 0x0A ; 10 + 1712: 3a 95 dec r19 + 1714: f1 f7 brne .-4 ; 0x1712 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6b6> + 1716: 00 c0 rjmp .+0 ; 0x1718 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6bc> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1718: 99 0f add r25, r25 + 171a: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 171c: 41 f0 breq .+16 ; 0x172e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6d2> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 171e: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1720: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1722: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1724: 97 ff sbrs r25, 7 + 1726: e6 cf rjmp .-52 ; 0x16f4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x698> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1728: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 172a: 22 9a sbi 0x04, 2 ; 4 + 172c: e5 cf rjmp .-54 ; 0x16f8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x69c> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 172e: 1f 92 push r1 + 1730: 8f 93 push r24 + 1732: 87 e2 ldi r24, 0x27 ; 39 + 1734: 91 e0 ldi r25, 0x01 ; 1 + 1736: 9f 93 push r25 + 1738: 8f 93 push r24 + 173a: 1f 93 push r17 + 173c: 0f 93 push r16 + 173e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1742: 99 81 ldd r25, Y+1 ; 0x01 + 1744: 0f 90 pop r0 + 1746: 0f 90 pop r0 + 1748: 0f 90 pop r0 + 174a: 0f 90 pop r0 + 174c: 0f 90 pop r0 + 174e: 0f 90 pop r0 + 1750: 99 23 and r25, r25 + 1752: 59 f0 breq .+22 ; 0x176a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x70e> + 1754: fe 01 movw r30, r28 + 1756: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1760: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1764: 91 91 ld r25, Z+ + 1766: 91 11 cpse r25, r1 + 1768: f7 cf rjmp .-18 ; 0x1758 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x6fc> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 176a: 1f 92 push r1 + 176c: 8b e2 ldi r24, 0x2B ; 43 + 176e: 8f 93 push r24 + 1770: 8d e1 ldi r24, 0x1D ; 29 + 1772: 91 e0 ldi r25, 0x01 ; 1 + 1774: 9f 93 push r25 + 1776: 8f 93 push r24 + 1778: 1f 93 push r17 + 177a: 0f 93 push r16 + 177c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1780: 99 81 ldd r25, Y+1 ; 0x01 + 1782: 0f 90 pop r0 + 1784: 0f 90 pop r0 + 1786: 0f 90 pop r0 + 1788: 0f 90 pop r0 + 178a: 0f 90 pop r0 + 178c: 0f 90 pop r0 + 178e: 99 23 and r25, r25 + 1790: 59 f0 breq .+22 ; 0x17a8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x74c> + 1792: fe 01 movw r30, r28 + 1794: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 179e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 17a2: 91 91 ld r25, Z+ + 17a4: 91 11 cpse r25, r1 + 17a6: f7 cf rjmp .-18 ; 0x1796 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x73a> + 17a8: 28 e0 ldi r18, 0x08 ; 8 + 17aa: 9b e2 ldi r25, 0x2B ; 43 + 17ac: 80 e0 ldi r24, 0x00 ; 0 + 17ae: 15 c0 rjmp .+42 ; 0x17da <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x77e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 17b0: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 17b2: 22 9a sbi 0x04, 2 ; 4 + 17b4: 35 e0 ldi r19, 0x05 ; 5 + 17b6: 3a 95 dec r19 + 17b8: f1 f7 brne .-4 ; 0x17b6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x75a> + 17ba: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 17bc: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 17be: 81 60 ori r24, 0x01 ; 1 + 17c0: 35 e0 ldi r19, 0x05 ; 5 + 17c2: 3a 95 dec r19 + 17c4: f1 f7 brne .-4 ; 0x17c2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x766> + 17c6: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 17c8: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 17ca: 21 9a sbi 0x04, 1 ; 4 + 17cc: 3a e0 ldi r19, 0x0A ; 10 + 17ce: 3a 95 dec r19 + 17d0: f1 f7 brne .-4 ; 0x17ce <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x772> + 17d2: 00 c0 rjmp .+0 ; 0x17d4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x778> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 17d4: 99 0f add r25, r25 + 17d6: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 17d8: 41 f0 breq .+16 ; 0x17ea <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x78e> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 17da: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 17dc: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 17de: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 17e0: 97 ff sbrs r25, 7 + 17e2: e6 cf rjmp .-52 ; 0x17b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x754> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 17e4: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 17e6: 22 9a sbi 0x04, 2 ; 4 + 17e8: e5 cf rjmp .-54 ; 0x17b4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x758> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 17ea: 1f 92 push r1 + 17ec: 8f 93 push r24 + 17ee: 87 e2 ldi r24, 0x27 ; 39 + 17f0: 91 e0 ldi r25, 0x01 ; 1 + 17f2: 9f 93 push r25 + 17f4: 8f 93 push r24 + 17f6: 1f 93 push r17 + 17f8: 0f 93 push r16 + 17fa: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 17fe: 99 81 ldd r25, Y+1 ; 0x01 + 1800: 0f 90 pop r0 + 1802: 0f 90 pop r0 + 1804: 0f 90 pop r0 + 1806: 0f 90 pop r0 + 1808: 0f 90 pop r0 + 180a: 0f 90 pop r0 + 180c: 99 23 and r25, r25 + 180e: 59 f0 breq .+22 ; 0x1826 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x7ca> + 1810: fe 01 movw r30, r28 + 1812: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 181c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1820: 91 91 ld r25, Z+ + 1822: 91 11 cpse r25, r1 + 1824: f7 cf rjmp .-18 ; 0x1814 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x7b8> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1826: 1f 92 push r1 + 1828: 83 e0 ldi r24, 0x03 ; 3 + 182a: 8f 93 push r24 + 182c: 8d e1 ldi r24, 0x1D ; 29 + 182e: 91 e0 ldi r25, 0x01 ; 1 + 1830: 9f 93 push r25 + 1832: 8f 93 push r24 + 1834: 1f 93 push r17 + 1836: 0f 93 push r16 + 1838: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 183c: 99 81 ldd r25, Y+1 ; 0x01 + 183e: 0f 90 pop r0 + 1840: 0f 90 pop r0 + 1842: 0f 90 pop r0 + 1844: 0f 90 pop r0 + 1846: 0f 90 pop r0 + 1848: 0f 90 pop r0 + 184a: 99 23 and r25, r25 + 184c: 59 f0 breq .+22 ; 0x1864 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x808> + 184e: fe 01 movw r30, r28 + 1850: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 185a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 185e: 91 91 ld r25, Z+ + 1860: 91 11 cpse r25, r1 + 1862: f7 cf rjmp .-18 ; 0x1852 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x7f6> + 1864: 28 e0 ldi r18, 0x08 ; 8 + 1866: 93 e0 ldi r25, 0x03 ; 3 + 1868: 80 e0 ldi r24, 0x00 ; 0 + 186a: 15 c0 rjmp .+42 ; 0x1896 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x83a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 186c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 186e: 22 9a sbi 0x04, 2 ; 4 + 1870: 35 e0 ldi r19, 0x05 ; 5 + 1872: 3a 95 dec r19 + 1874: f1 f7 brne .-4 ; 0x1872 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x816> + 1876: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1878: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 187a: 81 60 ori r24, 0x01 ; 1 + 187c: 35 e0 ldi r19, 0x05 ; 5 + 187e: 3a 95 dec r19 + 1880: f1 f7 brne .-4 ; 0x187e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x822> + 1882: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1884: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1886: 21 9a sbi 0x04, 1 ; 4 + 1888: 3a e0 ldi r19, 0x0A ; 10 + 188a: 3a 95 dec r19 + 188c: f1 f7 brne .-4 ; 0x188a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x82e> + 188e: 00 c0 rjmp .+0 ; 0x1890 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x834> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1890: 99 0f add r25, r25 + 1892: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1894: 41 f0 breq .+16 ; 0x18a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x84a> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1896: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1898: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 189a: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 189c: 97 ff sbrs r25, 7 + 189e: e6 cf rjmp .-52 ; 0x186c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x810> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 18a0: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 18a2: 22 9a sbi 0x04, 2 ; 4 + 18a4: e5 cf rjmp .-54 ; 0x1870 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x814> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 18a6: 1f 92 push r1 + 18a8: 8f 93 push r24 + 18aa: 87 e2 ldi r24, 0x27 ; 39 + 18ac: 91 e0 ldi r25, 0x01 ; 1 + 18ae: 9f 93 push r25 + 18b0: 8f 93 push r24 + 18b2: 1f 93 push r17 + 18b4: 0f 93 push r16 + 18b6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 18ba: 99 81 ldd r25, Y+1 ; 0x01 + 18bc: 0f 90 pop r0 + 18be: 0f 90 pop r0 + 18c0: 0f 90 pop r0 + 18c2: 0f 90 pop r0 + 18c4: 0f 90 pop r0 + 18c6: 0f 90 pop r0 + 18c8: 99 23 and r25, r25 + 18ca: 59 f0 breq .+22 ; 0x18e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x886> + 18cc: fe 01 movw r30, r28 + 18ce: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 18d8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 18dc: 91 91 ld r25, Z+ + 18de: 91 11 cpse r25, r1 + 18e0: f7 cf rjmp .-18 ; 0x18d0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x874> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 18e2: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 18e4: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 18e6: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 18e8: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 18ea: 1f 92 push r1 + 18ec: 82 e0 ldi r24, 0x02 ; 2 + 18ee: 8f 93 push r24 + 18f0: 8d e1 ldi r24, 0x1D ; 29 + 18f2: 91 e0 ldi r25, 0x01 ; 1 + 18f4: 9f 93 push r25 + 18f6: 8f 93 push r24 + 18f8: 1f 93 push r17 + 18fa: 0f 93 push r16 + 18fc: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1900: 99 81 ldd r25, Y+1 ; 0x01 + 1902: 0f 90 pop r0 + 1904: 0f 90 pop r0 + 1906: 0f 90 pop r0 + 1908: 0f 90 pop r0 + 190a: 0f 90 pop r0 + 190c: 0f 90 pop r0 + 190e: 99 23 and r25, r25 + 1910: 59 f0 breq .+22 ; 0x1928 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8cc> + 1912: fe 01 movw r30, r28 + 1914: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 191e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1922: 91 91 ld r25, Z+ + 1924: 91 11 cpse r25, r1 + 1926: f7 cf rjmp .-18 ; 0x1916 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8ba> + 1928: 28 e0 ldi r18, 0x08 ; 8 + 192a: 92 e0 ldi r25, 0x02 ; 2 + 192c: 80 e0 ldi r24, 0x00 ; 0 + 192e: 15 c0 rjmp .+42 ; 0x195a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8fe> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1930: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1932: 22 9a sbi 0x04, 2 ; 4 + 1934: 35 e0 ldi r19, 0x05 ; 5 + 1936: 3a 95 dec r19 + 1938: f1 f7 brne .-4 ; 0x1936 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8da> + 193a: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 193c: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 193e: 81 60 ori r24, 0x01 ; 1 + 1940: 35 e0 ldi r19, 0x05 ; 5 + 1942: 3a 95 dec r19 + 1944: f1 f7 brne .-4 ; 0x1942 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8e6> + 1946: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1948: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 194a: 21 9a sbi 0x04, 1 ; 4 + 194c: 3a e0 ldi r19, 0x0A ; 10 + 194e: 3a 95 dec r19 + 1950: f1 f7 brne .-4 ; 0x194e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8f2> + 1952: 00 c0 rjmp .+0 ; 0x1954 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8f8> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1954: 99 0f add r25, r25 + 1956: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1958: 41 f0 breq .+16 ; 0x196a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x90e> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 195a: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 195c: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 195e: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1960: 97 ff sbrs r25, 7 + 1962: e6 cf rjmp .-52 ; 0x1930 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8d4> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1964: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1966: 22 9a sbi 0x04, 2 ; 4 + 1968: e5 cf rjmp .-54 ; 0x1934 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x8d8> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 196a: 1f 92 push r1 + 196c: 8f 93 push r24 + 196e: 87 e2 ldi r24, 0x27 ; 39 + 1970: 91 e0 ldi r25, 0x01 ; 1 + 1972: 9f 93 push r25 + 1974: 8f 93 push r24 + 1976: 1f 93 push r17 + 1978: 0f 93 push r16 + 197a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 197e: 99 81 ldd r25, Y+1 ; 0x01 + 1980: 0f 90 pop r0 + 1982: 0f 90 pop r0 + 1984: 0f 90 pop r0 + 1986: 0f 90 pop r0 + 1988: 0f 90 pop r0 + 198a: 0f 90 pop r0 + 198c: 99 23 and r25, r25 + 198e: 59 f0 breq .+22 ; 0x19a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x94a> + 1990: fe 01 movw r30, r28 + 1992: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 199c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 19a0: 91 91 ld r25, Z+ + 19a2: 91 11 cpse r25, r1 + 19a4: f7 cf rjmp .-18 ; 0x1994 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x938> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 19a6: 1f 92 push r1 + 19a8: 80 e6 ldi r24, 0x60 ; 96 + 19aa: 8f 93 push r24 + 19ac: 8d e1 ldi r24, 0x1D ; 29 + 19ae: 91 e0 ldi r25, 0x01 ; 1 + 19b0: 9f 93 push r25 + 19b2: 8f 93 push r24 + 19b4: 1f 93 push r17 + 19b6: 0f 93 push r16 + 19b8: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 19bc: 99 81 ldd r25, Y+1 ; 0x01 + 19be: 0f 90 pop r0 + 19c0: 0f 90 pop r0 + 19c2: 0f 90 pop r0 + 19c4: 0f 90 pop r0 + 19c6: 0f 90 pop r0 + 19c8: 0f 90 pop r0 + 19ca: 99 23 and r25, r25 + 19cc: 59 f0 breq .+22 ; 0x19e4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x988> + 19ce: fe 01 movw r30, r28 + 19d0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 19da: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 19de: 91 91 ld r25, Z+ + 19e0: 91 11 cpse r25, r1 + 19e2: f7 cf rjmp .-18 ; 0x19d2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x976> + 19e4: 28 e0 ldi r18, 0x08 ; 8 + 19e6: 90 e6 ldi r25, 0x60 ; 96 + 19e8: 80 e0 ldi r24, 0x00 ; 0 + 19ea: 15 c0 rjmp .+42 ; 0x1a16 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9ba> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 19ec: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 19ee: 22 9a sbi 0x04, 2 ; 4 + 19f0: 35 e0 ldi r19, 0x05 ; 5 + 19f2: 3a 95 dec r19 + 19f4: f1 f7 brne .-4 ; 0x19f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x996> + 19f6: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 19f8: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 19fa: 81 60 ori r24, 0x01 ; 1 + 19fc: 35 e0 ldi r19, 0x05 ; 5 + 19fe: 3a 95 dec r19 + 1a00: f1 f7 brne .-4 ; 0x19fe <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9a2> + 1a02: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1a04: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1a06: 21 9a sbi 0x04, 1 ; 4 + 1a08: 3a e0 ldi r19, 0x0A ; 10 + 1a0a: 3a 95 dec r19 + 1a0c: f1 f7 brne .-4 ; 0x1a0a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9ae> + 1a0e: 00 c0 rjmp .+0 ; 0x1a10 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9b4> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1a10: 99 0f add r25, r25 + 1a12: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1a14: 41 f0 breq .+16 ; 0x1a26 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9ca> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1a16: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1a18: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1a1a: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1a1c: 97 ff sbrs r25, 7 + 1a1e: e6 cf rjmp .-52 ; 0x19ec <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x990> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1a20: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1a22: 22 9a sbi 0x04, 2 ; 4 + 1a24: e5 cf rjmp .-54 ; 0x19f0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x994> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1a26: 1f 92 push r1 + 1a28: 8f 93 push r24 + 1a2a: 87 e2 ldi r24, 0x27 ; 39 + 1a2c: 91 e0 ldi r25, 0x01 ; 1 + 1a2e: 9f 93 push r25 + 1a30: 8f 93 push r24 + 1a32: 1f 93 push r17 + 1a34: 0f 93 push r16 + 1a36: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1a3a: 99 81 ldd r25, Y+1 ; 0x01 + 1a3c: 0f 90 pop r0 + 1a3e: 0f 90 pop r0 + 1a40: 0f 90 pop r0 + 1a42: 0f 90 pop r0 + 1a44: 0f 90 pop r0 + 1a46: 0f 90 pop r0 + 1a48: 99 23 and r25, r25 + 1a4a: 59 f0 breq .+22 ; 0x1a62 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa06> + 1a4c: fe 01 movw r30, r28 + 1a4e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1a58: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1a5c: 91 91 ld r25, Z+ + 1a5e: 91 11 cpse r25, r1 + 1a60: f7 cf rjmp .-18 ; 0x1a50 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x9f4> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1a62: 1f 92 push r1 + 1a64: 80 e6 ldi r24, 0x60 ; 96 + 1a66: 8f 93 push r24 + 1a68: 8d e1 ldi r24, 0x1D ; 29 + 1a6a: 91 e0 ldi r25, 0x01 ; 1 + 1a6c: 9f 93 push r25 + 1a6e: 8f 93 push r24 + 1a70: 1f 93 push r17 + 1a72: 0f 93 push r16 + 1a74: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1a78: 99 81 ldd r25, Y+1 ; 0x01 + 1a7a: 0f 90 pop r0 + 1a7c: 0f 90 pop r0 + 1a7e: 0f 90 pop r0 + 1a80: 0f 90 pop r0 + 1a82: 0f 90 pop r0 + 1a84: 0f 90 pop r0 + 1a86: 99 23 and r25, r25 + 1a88: 59 f0 breq .+22 ; 0x1aa0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa44> + 1a8a: fe 01 movw r30, r28 + 1a8c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1a96: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1a9a: 91 91 ld r25, Z+ + 1a9c: 91 11 cpse r25, r1 + 1a9e: f7 cf rjmp .-18 ; 0x1a8e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa32> + 1aa0: 28 e0 ldi r18, 0x08 ; 8 + 1aa2: 90 e6 ldi r25, 0x60 ; 96 + 1aa4: 80 e0 ldi r24, 0x00 ; 0 + 1aa6: 15 c0 rjmp .+42 ; 0x1ad2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa76> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1aa8: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1aaa: 22 9a sbi 0x04, 2 ; 4 + 1aac: 35 e0 ldi r19, 0x05 ; 5 + 1aae: 3a 95 dec r19 + 1ab0: f1 f7 brne .-4 ; 0x1aae <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa52> + 1ab2: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1ab4: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1ab6: 81 60 ori r24, 0x01 ; 1 + 1ab8: 35 e0 ldi r19, 0x05 ; 5 + 1aba: 3a 95 dec r19 + 1abc: f1 f7 brne .-4 ; 0x1aba <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa5e> + 1abe: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ac0: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1ac2: 21 9a sbi 0x04, 1 ; 4 + 1ac4: 3a e0 ldi r19, 0x0A ; 10 + 1ac6: 3a 95 dec r19 + 1ac8: f1 f7 brne .-4 ; 0x1ac6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa6a> + 1aca: 00 c0 rjmp .+0 ; 0x1acc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa70> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1acc: 99 0f add r25, r25 + 1ace: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1ad0: 41 f0 breq .+16 ; 0x1ae2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa86> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1ad2: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ad4: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1ad6: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1ad8: 97 ff sbrs r25, 7 + 1ada: e6 cf rjmp .-52 ; 0x1aa8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa4c> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1adc: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1ade: 22 9a sbi 0x04, 2 ; 4 + 1ae0: e5 cf rjmp .-54 ; 0x1aac <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xa50> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1ae2: 1f 92 push r1 + 1ae4: 8f 93 push r24 + 1ae6: 87 e2 ldi r24, 0x27 ; 39 + 1ae8: 91 e0 ldi r25, 0x01 ; 1 + 1aea: 9f 93 push r25 + 1aec: 8f 93 push r24 + 1aee: 1f 93 push r17 + 1af0: 0f 93 push r16 + 1af2: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1af6: 99 81 ldd r25, Y+1 ; 0x01 + 1af8: 0f 90 pop r0 + 1afa: 0f 90 pop r0 + 1afc: 0f 90 pop r0 + 1afe: 0f 90 pop r0 + 1b00: 0f 90 pop r0 + 1b02: 0f 90 pop r0 + 1b04: 99 23 and r25, r25 + 1b06: 59 f0 breq .+22 ; 0x1b1e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xac2> + 1b08: fe 01 movw r30, r28 + 1b0a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1b14: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1b18: 91 91 ld r25, Z+ + 1b1a: 91 11 cpse r25, r1 + 1b1c: f7 cf rjmp .-18 ; 0x1b0c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xab0> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1b1e: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1b20: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1b22: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1b24: 24 9a sbi 0x04, 4 ; 4 + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 1b26: 62 e0 ldi r22, 0x02 ; 2 + 1b28: 8f 2d mov r24, r15 + 1b2a: 9e 2d mov r25, r14 + 1b2c: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1b30: 1f 92 push r1 + 1b32: 80 e7 ldi r24, 0x70 ; 112 + 1b34: 8f 93 push r24 + 1b36: 8d e1 ldi r24, 0x1D ; 29 + 1b38: 91 e0 ldi r25, 0x01 ; 1 + 1b3a: 9f 93 push r25 + 1b3c: 8f 93 push r24 + 1b3e: 1f 93 push r17 + 1b40: 0f 93 push r16 + 1b42: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1b46: 99 81 ldd r25, Y+1 ; 0x01 + 1b48: 0f 90 pop r0 + 1b4a: 0f 90 pop r0 + 1b4c: 0f 90 pop r0 + 1b4e: 0f 90 pop r0 + 1b50: 0f 90 pop r0 + 1b52: 0f 90 pop r0 + 1b54: 99 23 and r25, r25 + 1b56: 59 f0 breq .+22 ; 0x1b6e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb12> + return (status & 0x07); + } + private: + spiclass s; + uart u; + void init_can() { + 1b58: fe 01 movw r30, r28 + 1b5a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1b64: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1b68: 91 91 ld r25, Z+ + 1b6a: 91 11 cpse r25, r1 + 1b6c: f7 cf rjmp .-18 ; 0x1b5c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb00> + 1b6e: 28 e0 ldi r18, 0x08 ; 8 + 1b70: 90 e7 ldi r25, 0x70 ; 112 + 1b72: 80 e0 ldi r24, 0x00 ; 0 + 1b74: 15 c0 rjmp .+42 ; 0x1ba0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb44> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1b76: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1b78: 22 9a sbi 0x04, 2 ; 4 + 1b7a: 35 e0 ldi r19, 0x05 ; 5 + 1b7c: 3a 95 dec r19 + 1b7e: f1 f7 brne .-4 ; 0x1b7c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb20> + 1b80: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1b82: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1b84: 81 60 ori r24, 0x01 ; 1 + 1b86: 35 e0 ldi r19, 0x05 ; 5 + 1b88: 3a 95 dec r19 + 1b8a: f1 f7 brne .-4 ; 0x1b88 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb2c> + 1b8c: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1b8e: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1b90: 21 9a sbi 0x04, 1 ; 4 + 1b92: 3a e0 ldi r19, 0x0A ; 10 + 1b94: 3a 95 dec r19 + 1b96: f1 f7 brne .-4 ; 0x1b94 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb38> + 1b98: 00 c0 rjmp .+0 ; 0x1b9a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb3e> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1b9a: 99 0f add r25, r25 + 1b9c: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1b9e: 41 f0 breq .+16 ; 0x1bb0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb54> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1ba0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ba2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1ba4: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1ba6: 97 ff sbrs r25, 7 + 1ba8: e6 cf rjmp .-52 ; 0x1b76 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb1a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1baa: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1bac: 22 9a sbi 0x04, 2 ; 4 + 1bae: e5 cf rjmp .-54 ; 0x1b7a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb1e> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1bb0: 1f 92 push r1 + 1bb2: 8f 93 push r24 + 1bb4: 87 e2 ldi r24, 0x27 ; 39 + 1bb6: 91 e0 ldi r25, 0x01 ; 1 + 1bb8: 9f 93 push r25 + 1bba: 8f 93 push r24 + 1bbc: 1f 93 push r17 + 1bbe: 0f 93 push r16 + 1bc0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1bc4: 99 81 ldd r25, Y+1 ; 0x01 + 1bc6: 0f 90 pop r0 + 1bc8: 0f 90 pop r0 + 1bca: 0f 90 pop r0 + 1bcc: 0f 90 pop r0 + 1bce: 0f 90 pop r0 + 1bd0: 0f 90 pop r0 + 1bd2: 99 23 and r25, r25 + 1bd4: 59 f0 breq .+22 ; 0x1bec <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb90> + 1bd6: fe 01 movw r30, r28 + 1bd8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1be2: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1be6: 91 91 ld r25, Z+ + 1be8: 91 11 cpse r25, r1 + 1bea: f7 cf rjmp .-18 ; 0x1bda <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xb7e> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1bec: 1f 92 push r1 + 1bee: 80 e6 ldi r24, 0x60 ; 96 + 1bf0: 8f 93 push r24 + 1bf2: 8d e1 ldi r24, 0x1D ; 29 + 1bf4: 91 e0 ldi r25, 0x01 ; 1 + 1bf6: 9f 93 push r25 + 1bf8: 8f 93 push r24 + 1bfa: 1f 93 push r17 + 1bfc: 0f 93 push r16 + 1bfe: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1c02: 99 81 ldd r25, Y+1 ; 0x01 + 1c04: 0f 90 pop r0 + 1c06: 0f 90 pop r0 + 1c08: 0f 90 pop r0 + 1c0a: 0f 90 pop r0 + 1c0c: 0f 90 pop r0 + 1c0e: 0f 90 pop r0 + 1c10: 99 23 and r25, r25 + 1c12: 59 f0 breq .+22 ; 0x1c2a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbce> + 1c14: fe 01 movw r30, r28 + 1c16: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1c20: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1c24: 91 91 ld r25, Z+ + 1c26: 91 11 cpse r25, r1 + 1c28: f7 cf rjmp .-18 ; 0x1c18 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbbc> + 1c2a: 28 e0 ldi r18, 0x08 ; 8 + 1c2c: 90 e6 ldi r25, 0x60 ; 96 + 1c2e: 80 e0 ldi r24, 0x00 ; 0 + 1c30: 15 c0 rjmp .+42 ; 0x1c5c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xc00> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1c32: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1c34: 22 9a sbi 0x04, 2 ; 4 + 1c36: 35 e0 ldi r19, 0x05 ; 5 + 1c38: 3a 95 dec r19 + 1c3a: f1 f7 brne .-4 ; 0x1c38 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbdc> + 1c3c: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1c3e: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1c40: 81 60 ori r24, 0x01 ; 1 + 1c42: 35 e0 ldi r19, 0x05 ; 5 + 1c44: 3a 95 dec r19 + 1c46: f1 f7 brne .-4 ; 0x1c44 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbe8> + 1c48: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1c4a: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1c4c: 21 9a sbi 0x04, 1 ; 4 + 1c4e: 3a e0 ldi r19, 0x0A ; 10 + 1c50: 3a 95 dec r19 + 1c52: f1 f7 brne .-4 ; 0x1c50 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbf4> + 1c54: 00 c0 rjmp .+0 ; 0x1c56 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbfa> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1c56: 99 0f add r25, r25 + 1c58: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1c5a: 41 f0 breq .+16 ; 0x1c6c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xc10> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1c5c: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1c5e: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1c60: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1c62: 97 ff sbrs r25, 7 + 1c64: e6 cf rjmp .-52 ; 0x1c32 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbd6> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1c66: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1c68: 22 9a sbi 0x04, 2 ; 4 + 1c6a: e5 cf rjmp .-54 ; 0x1c36 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xbda> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1c6c: 1f 92 push r1 + 1c6e: 8f 93 push r24 + 1c70: 87 e2 ldi r24, 0x27 ; 39 + 1c72: 91 e0 ldi r25, 0x01 ; 1 + 1c74: 9f 93 push r25 + 1c76: 8f 93 push r24 + 1c78: 1f 93 push r17 + 1c7a: 0f 93 push r16 + 1c7c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1c80: 99 81 ldd r25, Y+1 ; 0x01 + 1c82: 0f 90 pop r0 + 1c84: 0f 90 pop r0 + 1c86: 0f 90 pop r0 + 1c88: 0f 90 pop r0 + 1c8a: 0f 90 pop r0 + 1c8c: 0f 90 pop r0 + 1c8e: 99 23 and r25, r25 + 1c90: 59 f0 breq .+22 ; 0x1ca8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xc4c> + 1c92: fe 01 movw r30, r28 + 1c94: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1c9e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1ca2: 91 91 ld r25, Z+ + 1ca4: 91 11 cpse r25, r1 + 1ca6: f7 cf rjmp .-18 ; 0x1c96 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xc3a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ca8: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1caa: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1cac: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1cae: 24 9a sbi 0x04, 4 ; 4 + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 1cb0: 62 e0 ldi r22, 0x02 ; 2 + 1cb2: 8f 2d mov r24, r15 + 1cb4: 9e 2d mov r25, r14 + 1cb6: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + s.send(adress); + 1cba: 60 e2 ldi r22, 0x20 ; 32 + 1cbc: 8f 2d mov r24, r15 + 1cbe: 9e 2d mov r25, r14 + 1cc0: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + s.send(data); + 1cc4: 60 e0 ldi r22, 0x00 ; 0 + 1cc6: 8f 2d mov r24, r15 + 1cc8: 9e 2d mov r25, r14 + 1cca: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1cce: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1cd0: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1cd2: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1cd4: 24 9a sbi 0x04, 4 ; 4 + } + void mcp2515_write_register( uint8_t adress, uint8_t data ) { + // /CS des MCP2515 auf Low ziehen + s.CSOn(); + + s.send(SPI_WRITE); + 1cd6: 62 e0 ldi r22, 0x02 ; 2 + 1cd8: 8f 2d mov r24, r15 + 1cda: 9e 2d mov r25, r14 + 1cdc: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + s.send(adress); + 1ce0: 61 e2 ldi r22, 0x21 ; 33 + 1ce2: 8f 2d mov r24, r15 + 1ce4: 9e 2d mov r25, r14 + 1ce6: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> + s.send(data); + 1cea: 60 e0 ldi r22, 0x00 ; 0 + 1cec: 8f 2d mov r24, r15 + 1cee: 9e 2d mov r25, r14 + 1cf0: 0e 94 b3 07 call 0xf66 ; 0xf66 <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1cf4: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1cf6: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1cf8: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1cfa: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1cfc: 1f 92 push r1 + 1cfe: 82 e0 ldi r24, 0x02 ; 2 + 1d00: 8f 93 push r24 + 1d02: 8d e1 ldi r24, 0x1D ; 29 + 1d04: 91 e0 ldi r25, 0x01 ; 1 + 1d06: 9f 93 push r25 + 1d08: 8f 93 push r24 + 1d0a: 1f 93 push r17 + 1d0c: 0f 93 push r16 + 1d0e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1d12: 99 81 ldd r25, Y+1 ; 0x01 + 1d14: 0f 90 pop r0 + 1d16: 0f 90 pop r0 + 1d18: 0f 90 pop r0 + 1d1a: 0f 90 pop r0 + 1d1c: 0f 90 pop r0 + 1d1e: 0f 90 pop r0 + 1d20: 99 23 and r25, r25 + 1d22: 59 f0 breq .+22 ; 0x1d3a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xcde> + return (status & 0x07); + } + private: + spiclass s; + uart u; + void init_can() { + 1d24: fe 01 movw r30, r28 + 1d26: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1d30: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1d34: 91 91 ld r25, Z+ + 1d36: 91 11 cpse r25, r1 + 1d38: f7 cf rjmp .-18 ; 0x1d28 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xccc> + 1d3a: 28 e0 ldi r18, 0x08 ; 8 + 1d3c: 92 e0 ldi r25, 0x02 ; 2 + 1d3e: 80 e0 ldi r24, 0x00 ; 0 + 1d40: 15 c0 rjmp .+42 ; 0x1d6c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd10> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1d42: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1d44: 22 9a sbi 0x04, 2 ; 4 + 1d46: 35 e0 ldi r19, 0x05 ; 5 + 1d48: 3a 95 dec r19 + 1d4a: f1 f7 brne .-4 ; 0x1d48 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xcec> + 1d4c: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1d4e: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1d50: 81 60 ori r24, 0x01 ; 1 + 1d52: 35 e0 ldi r19, 0x05 ; 5 + 1d54: 3a 95 dec r19 + 1d56: f1 f7 brne .-4 ; 0x1d54 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xcf8> + 1d58: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1d5a: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1d5c: 21 9a sbi 0x04, 1 ; 4 + 1d5e: 3a e0 ldi r19, 0x0A ; 10 + 1d60: 3a 95 dec r19 + 1d62: f1 f7 brne .-4 ; 0x1d60 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd04> + 1d64: 00 c0 rjmp .+0 ; 0x1d66 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd0a> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1d66: 99 0f add r25, r25 + 1d68: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1d6a: 41 f0 breq .+16 ; 0x1d7c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd20> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1d6c: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1d6e: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1d70: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1d72: 97 ff sbrs r25, 7 + 1d74: e6 cf rjmp .-52 ; 0x1d42 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xce6> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1d76: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1d78: 22 9a sbi 0x04, 2 ; 4 + 1d7a: e5 cf rjmp .-54 ; 0x1d46 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xcea> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1d7c: 1f 92 push r1 + 1d7e: 8f 93 push r24 + 1d80: 87 e2 ldi r24, 0x27 ; 39 + 1d82: 91 e0 ldi r25, 0x01 ; 1 + 1d84: 9f 93 push r25 + 1d86: 8f 93 push r24 + 1d88: 1f 93 push r17 + 1d8a: 0f 93 push r16 + 1d8c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1d90: 99 81 ldd r25, Y+1 ; 0x01 + 1d92: 0f 90 pop r0 + 1d94: 0f 90 pop r0 + 1d96: 0f 90 pop r0 + 1d98: 0f 90 pop r0 + 1d9a: 0f 90 pop r0 + 1d9c: 0f 90 pop r0 + 1d9e: 99 23 and r25, r25 + 1da0: 59 f0 breq .+22 ; 0x1db8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd5c> + 1da2: fe 01 movw r30, r28 + 1da4: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1dae: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1db2: 91 91 ld r25, Z+ + 1db4: 91 11 cpse r25, r1 + 1db6: f7 cf rjmp .-18 ; 0x1da6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd4a> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1db8: 1f 92 push r1 + 1dba: 82 e2 ldi r24, 0x22 ; 34 + 1dbc: 8f 93 push r24 + 1dbe: 8d e1 ldi r24, 0x1D ; 29 + 1dc0: 91 e0 ldi r25, 0x01 ; 1 + 1dc2: 9f 93 push r25 + 1dc4: 8f 93 push r24 + 1dc6: 1f 93 push r17 + 1dc8: 0f 93 push r16 + 1dca: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1dce: 99 81 ldd r25, Y+1 ; 0x01 + 1dd0: 0f 90 pop r0 + 1dd2: 0f 90 pop r0 + 1dd4: 0f 90 pop r0 + 1dd6: 0f 90 pop r0 + 1dd8: 0f 90 pop r0 + 1dda: 0f 90 pop r0 + 1ddc: 99 23 and r25, r25 + 1dde: 59 f0 breq .+22 ; 0x1df6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd9a> + 1de0: fe 01 movw r30, r28 + 1de2: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1dec: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1df0: 91 91 ld r25, Z+ + 1df2: 91 11 cpse r25, r1 + 1df4: f7 cf rjmp .-18 ; 0x1de4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xd88> + 1df6: 28 e0 ldi r18, 0x08 ; 8 + 1df8: 92 e2 ldi r25, 0x22 ; 34 + 1dfa: 80 e0 ldi r24, 0x00 ; 0 + 1dfc: 15 c0 rjmp .+42 ; 0x1e28 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xdcc> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1dfe: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1e00: 22 9a sbi 0x04, 2 ; 4 + 1e02: 35 e0 ldi r19, 0x05 ; 5 + 1e04: 3a 95 dec r19 + 1e06: f1 f7 brne .-4 ; 0x1e04 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xda8> + 1e08: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1e0a: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1e0c: 81 60 ori r24, 0x01 ; 1 + 1e0e: 35 e0 ldi r19, 0x05 ; 5 + 1e10: 3a 95 dec r19 + 1e12: f1 f7 brne .-4 ; 0x1e10 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xdb4> + 1e14: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1e16: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1e18: 21 9a sbi 0x04, 1 ; 4 + 1e1a: 3a e0 ldi r19, 0x0A ; 10 + 1e1c: 3a 95 dec r19 + 1e1e: f1 f7 brne .-4 ; 0x1e1c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xdc0> + 1e20: 00 c0 rjmp .+0 ; 0x1e22 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xdc6> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1e22: 99 0f add r25, r25 + 1e24: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1e26: 41 f0 breq .+16 ; 0x1e38 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xddc> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1e28: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1e2a: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1e2c: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1e2e: 97 ff sbrs r25, 7 + 1e30: e6 cf rjmp .-52 ; 0x1dfe <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xda2> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1e32: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1e34: 22 9a sbi 0x04, 2 ; 4 + 1e36: e5 cf rjmp .-54 ; 0x1e02 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xda6> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1e38: 1f 92 push r1 + 1e3a: 8f 93 push r24 + 1e3c: 87 e2 ldi r24, 0x27 ; 39 + 1e3e: 91 e0 ldi r25, 0x01 ; 1 + 1e40: 9f 93 push r25 + 1e42: 8f 93 push r24 + 1e44: 1f 93 push r17 + 1e46: 0f 93 push r16 + 1e48: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1e4c: 99 81 ldd r25, Y+1 ; 0x01 + 1e4e: 0f 90 pop r0 + 1e50: 0f 90 pop r0 + 1e52: 0f 90 pop r0 + 1e54: 0f 90 pop r0 + 1e56: 0f 90 pop r0 + 1e58: 0f 90 pop r0 + 1e5a: 99 23 and r25, r25 + 1e5c: 59 f0 breq .+22 ; 0x1e74 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe18> + 1e5e: fe 01 movw r30, r28 + 1e60: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1e6a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1e6e: 91 91 ld r25, Z+ + 1e70: 91 11 cpse r25, r1 + 1e72: f7 cf rjmp .-18 ; 0x1e62 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe06> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1e74: 1f 92 push r1 + 1e76: 1f 92 push r1 + 1e78: 8d e1 ldi r24, 0x1D ; 29 + 1e7a: 91 e0 ldi r25, 0x01 ; 1 + 1e7c: 9f 93 push r25 + 1e7e: 8f 93 push r24 + 1e80: 1f 93 push r17 + 1e82: 0f 93 push r16 + 1e84: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1e88: 99 81 ldd r25, Y+1 ; 0x01 + 1e8a: 0f 90 pop r0 + 1e8c: 0f 90 pop r0 + 1e8e: 0f 90 pop r0 + 1e90: 0f 90 pop r0 + 1e92: 0f 90 pop r0 + 1e94: 0f 90 pop r0 + 1e96: 99 23 and r25, r25 + 1e98: 59 f0 breq .+22 ; 0x1eb0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe54> + 1e9a: fe 01 movw r30, r28 + 1e9c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1ea6: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1eaa: 91 91 ld r25, Z+ + 1eac: 91 11 cpse r25, r1 + 1eae: f7 cf rjmp .-18 ; 0x1e9e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe42> + 1eb0: 98 e0 ldi r25, 0x08 ; 8 + 1eb2: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1eb4: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1eb6: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1eb8: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1eba: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1ebc: 22 9a sbi 0x04, 2 ; 4 + 1ebe: 25 e0 ldi r18, 0x05 ; 5 + 1ec0: 2a 95 dec r18 + 1ec2: f1 f7 brne .-4 ; 0x1ec0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe64> + 1ec4: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1ec6: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1ec8: 81 60 ori r24, 0x01 ; 1 + 1eca: 35 e0 ldi r19, 0x05 ; 5 + 1ecc: 3a 95 dec r19 + 1ece: f1 f7 brne .-4 ; 0x1ecc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe70> + 1ed0: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1ed2: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1ed4: 21 9a sbi 0x04, 1 ; 4 + 1ed6: 2a e0 ldi r18, 0x0A ; 10 + 1ed8: 2a 95 dec r18 + 1eda: f1 f7 brne .-4 ; 0x1ed8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe7c> + 1edc: 00 c0 rjmp .+0 ; 0x1ede <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe82> + 1ede: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1ee0: 49 f7 brne .-46 ; 0x1eb4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xe58> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1ee2: 1f 92 push r1 + 1ee4: 8f 93 push r24 + 1ee6: 87 e2 ldi r24, 0x27 ; 39 + 1ee8: 91 e0 ldi r25, 0x01 ; 1 + 1eea: 9f 93 push r25 + 1eec: 8f 93 push r24 + 1eee: 1f 93 push r17 + 1ef0: 0f 93 push r16 + 1ef2: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1ef6: 99 81 ldd r25, Y+1 ; 0x01 + 1ef8: 0f 90 pop r0 + 1efa: 0f 90 pop r0 + 1efc: 0f 90 pop r0 + 1efe: 0f 90 pop r0 + 1f00: 0f 90 pop r0 + 1f02: 0f 90 pop r0 + 1f04: 99 23 and r25, r25 + 1f06: 59 f0 breq .+22 ; 0x1f1e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xec2> + 1f08: fe 01 movw r30, r28 + 1f0a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1f14: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1f18: 91 91 ld r25, Z+ + 1f1a: 91 11 cpse r25, r1 + 1f1c: f7 cf rjmp .-18 ; 0x1f0c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xeb0> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1f1e: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 1f20: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1f22: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 1f24: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1f26: 1f 92 push r1 + 1f28: 82 e0 ldi r24, 0x02 ; 2 + 1f2a: 8f 93 push r24 + 1f2c: 8d e1 ldi r24, 0x1D ; 29 + 1f2e: 91 e0 ldi r25, 0x01 ; 1 + 1f30: 9f 93 push r25 + 1f32: 8f 93 push r24 + 1f34: 1f 93 push r17 + 1f36: 0f 93 push r16 + 1f38: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1f3c: 99 81 ldd r25, Y+1 ; 0x01 + 1f3e: 0f 90 pop r0 + 1f40: 0f 90 pop r0 + 1f42: 0f 90 pop r0 + 1f44: 0f 90 pop r0 + 1f46: 0f 90 pop r0 + 1f48: 0f 90 pop r0 + 1f4a: 99 23 and r25, r25 + 1f4c: 59 f0 breq .+22 ; 0x1f64 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf08> + 1f4e: fe 01 movw r30, r28 + 1f50: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1f5a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1f5e: 91 91 ld r25, Z+ + 1f60: 91 11 cpse r25, r1 + 1f62: f7 cf rjmp .-18 ; 0x1f52 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xef6> + 1f64: 28 e0 ldi r18, 0x08 ; 8 + 1f66: 92 e0 ldi r25, 0x02 ; 2 + 1f68: 80 e0 ldi r24, 0x00 ; 0 + 1f6a: 15 c0 rjmp .+42 ; 0x1f96 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf3a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1f6c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 1f6e: 22 9a sbi 0x04, 2 ; 4 + 1f70: 35 e0 ldi r19, 0x05 ; 5 + 1f72: 3a 95 dec r19 + 1f74: f1 f7 brne .-4 ; 0x1f72 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf16> + 1f76: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 1f78: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 1f7a: 81 60 ori r24, 0x01 ; 1 + 1f7c: 35 e0 ldi r19, 0x05 ; 5 + 1f7e: 3a 95 dec r19 + 1f80: f1 f7 brne .-4 ; 0x1f7e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf22> + 1f82: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1f84: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 1f86: 21 9a sbi 0x04, 1 ; 4 + 1f88: 3a e0 ldi r19, 0x0A ; 10 + 1f8a: 3a 95 dec r19 + 1f8c: f1 f7 brne .-4 ; 0x1f8a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf2e> + 1f8e: 00 c0 rjmp .+0 ; 0x1f90 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf34> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 1f90: 99 0f add r25, r25 + 1f92: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 1f94: 41 f0 breq .+16 ; 0x1fa6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf4a> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 1f96: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1f98: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 1f9a: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 1f9c: 97 ff sbrs r25, 7 + 1f9e: e6 cf rjmp .-52 ; 0x1f6c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf10> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 1fa0: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 1fa2: 22 9a sbi 0x04, 2 ; 4 + 1fa4: e5 cf rjmp .-54 ; 0x1f70 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf14> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 1fa6: 1f 92 push r1 + 1fa8: 8f 93 push r24 + 1faa: 87 e2 ldi r24, 0x27 ; 39 + 1fac: 91 e0 ldi r25, 0x01 ; 1 + 1fae: 9f 93 push r25 + 1fb0: 8f 93 push r24 + 1fb2: 1f 93 push r17 + 1fb4: 0f 93 push r16 + 1fb6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1fba: 99 81 ldd r25, Y+1 ; 0x01 + 1fbc: 0f 90 pop r0 + 1fbe: 0f 90 pop r0 + 1fc0: 0f 90 pop r0 + 1fc2: 0f 90 pop r0 + 1fc4: 0f 90 pop r0 + 1fc6: 0f 90 pop r0 + 1fc8: 99 23 and r25, r25 + 1fca: 59 f0 breq .+22 ; 0x1fe2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf86> + 1fcc: fe 01 movw r30, r28 + 1fce: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 1fd8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 1fdc: 91 91 ld r25, Z+ + 1fde: 91 11 cpse r25, r1 + 1fe0: f7 cf rjmp .-18 ; 0x1fd0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xf74> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 1fe2: 1f 92 push r1 + 1fe4: 83 e2 ldi r24, 0x23 ; 35 + 1fe6: 8f 93 push r24 + 1fe8: 8d e1 ldi r24, 0x1D ; 29 + 1fea: 91 e0 ldi r25, 0x01 ; 1 + 1fec: 9f 93 push r25 + 1fee: 8f 93 push r24 + 1ff0: 1f 93 push r17 + 1ff2: 0f 93 push r16 + 1ff4: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 1ff8: 99 81 ldd r25, Y+1 ; 0x01 + 1ffa: 0f 90 pop r0 + 1ffc: 0f 90 pop r0 + 1ffe: 0f 90 pop r0 + 2000: 0f 90 pop r0 + 2002: 0f 90 pop r0 + 2004: 0f 90 pop r0 + 2006: 99 23 and r25, r25 + 2008: 59 f0 breq .+22 ; 0x2020 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfc4> + 200a: fe 01 movw r30, r28 + 200c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2016: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 201a: 91 91 ld r25, Z+ + 201c: 91 11 cpse r25, r1 + 201e: f7 cf rjmp .-18 ; 0x200e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfb2> + 2020: 28 e0 ldi r18, 0x08 ; 8 + 2022: 93 e2 ldi r25, 0x23 ; 35 + 2024: 80 e0 ldi r24, 0x00 ; 0 + 2026: 15 c0 rjmp .+42 ; 0x2052 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xff6> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2028: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 202a: 22 9a sbi 0x04, 2 ; 4 + 202c: 35 e0 ldi r19, 0x05 ; 5 + 202e: 3a 95 dec r19 + 2030: f1 f7 brne .-4 ; 0x202e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfd2> + 2032: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2034: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2036: 81 60 ori r24, 0x01 ; 1 + 2038: 35 e0 ldi r19, 0x05 ; 5 + 203a: 3a 95 dec r19 + 203c: f1 f7 brne .-4 ; 0x203a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfde> + 203e: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2040: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2042: 21 9a sbi 0x04, 1 ; 4 + 2044: 3a e0 ldi r19, 0x0A ; 10 + 2046: 3a 95 dec r19 + 2048: f1 f7 brne .-4 ; 0x2046 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfea> + 204a: 00 c0 rjmp .+0 ; 0x204c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xff0> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 204c: 99 0f add r25, r25 + 204e: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2050: 41 f0 breq .+16 ; 0x2062 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1006> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2052: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2054: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2056: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2058: 97 ff sbrs r25, 7 + 205a: e6 cf rjmp .-52 ; 0x2028 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfcc> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 205c: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 205e: 22 9a sbi 0x04, 2 ; 4 + 2060: e5 cf rjmp .-54 ; 0x202c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0xfd0> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2062: 1f 92 push r1 + 2064: 8f 93 push r24 + 2066: 87 e2 ldi r24, 0x27 ; 39 + 2068: 91 e0 ldi r25, 0x01 ; 1 + 206a: 9f 93 push r25 + 206c: 8f 93 push r24 + 206e: 1f 93 push r17 + 2070: 0f 93 push r16 + 2072: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2076: 99 81 ldd r25, Y+1 ; 0x01 + 2078: 0f 90 pop r0 + 207a: 0f 90 pop r0 + 207c: 0f 90 pop r0 + 207e: 0f 90 pop r0 + 2080: 0f 90 pop r0 + 2082: 0f 90 pop r0 + 2084: 99 23 and r25, r25 + 2086: 59 f0 breq .+22 ; 0x209e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1042> + 2088: fe 01 movw r30, r28 + 208a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2094: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2098: 91 91 ld r25, Z+ + 209a: 91 11 cpse r25, r1 + 209c: f7 cf rjmp .-18 ; 0x208c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1030> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 209e: 1f 92 push r1 + 20a0: 1f 92 push r1 + 20a2: 8d e1 ldi r24, 0x1D ; 29 + 20a4: 91 e0 ldi r25, 0x01 ; 1 + 20a6: 9f 93 push r25 + 20a8: 8f 93 push r24 + 20aa: 1f 93 push r17 + 20ac: 0f 93 push r16 + 20ae: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 20b2: 99 81 ldd r25, Y+1 ; 0x01 + 20b4: 0f 90 pop r0 + 20b6: 0f 90 pop r0 + 20b8: 0f 90 pop r0 + 20ba: 0f 90 pop r0 + 20bc: 0f 90 pop r0 + 20be: 0f 90 pop r0 + 20c0: 99 23 and r25, r25 + 20c2: 59 f0 breq .+22 ; 0x20da <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x107e> + 20c4: fe 01 movw r30, r28 + 20c6: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 20d0: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 20d4: 91 91 ld r25, Z+ + 20d6: 91 11 cpse r25, r1 + 20d8: f7 cf rjmp .-18 ; 0x20c8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x106c> + 20da: 98 e0 ldi r25, 0x08 ; 8 + 20dc: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 20de: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 20e0: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 20e2: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 20e4: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 20e6: 22 9a sbi 0x04, 2 ; 4 + 20e8: 25 e0 ldi r18, 0x05 ; 5 + 20ea: 2a 95 dec r18 + 20ec: f1 f7 brne .-4 ; 0x20ea <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x108e> + 20ee: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 20f0: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 20f2: 81 60 ori r24, 0x01 ; 1 + 20f4: 35 e0 ldi r19, 0x05 ; 5 + 20f6: 3a 95 dec r19 + 20f8: f1 f7 brne .-4 ; 0x20f6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x109a> + 20fa: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 20fc: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 20fe: 21 9a sbi 0x04, 1 ; 4 + 2100: 2a e0 ldi r18, 0x0A ; 10 + 2102: 2a 95 dec r18 + 2104: f1 f7 brne .-4 ; 0x2102 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x10a6> + 2106: 00 c0 rjmp .+0 ; 0x2108 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x10ac> + 2108: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 210a: 49 f7 brne .-46 ; 0x20de <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1082> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 210c: 1f 92 push r1 + 210e: 8f 93 push r24 + 2110: 87 e2 ldi r24, 0x27 ; 39 + 2112: 91 e0 ldi r25, 0x01 ; 1 + 2114: 9f 93 push r25 + 2116: 8f 93 push r24 + 2118: 1f 93 push r17 + 211a: 0f 93 push r16 + 211c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2120: 99 81 ldd r25, Y+1 ; 0x01 + 2122: 0f 90 pop r0 + 2124: 0f 90 pop r0 + 2126: 0f 90 pop r0 + 2128: 0f 90 pop r0 + 212a: 0f 90 pop r0 + 212c: 0f 90 pop r0 + 212e: 99 23 and r25, r25 + 2130: 59 f0 breq .+22 ; 0x2148 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x10ec> + 2132: fe 01 movw r30, r28 + 2134: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 213e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2142: 91 91 ld r25, Z+ + 2144: 91 11 cpse r25, r1 + 2146: f7 cf rjmp .-18 ; 0x2136 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x10da> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2148: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 214a: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 214c: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 214e: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2150: 1f 92 push r1 + 2152: 82 e0 ldi r24, 0x02 ; 2 + 2154: 8f 93 push r24 + 2156: 8d e1 ldi r24, 0x1D ; 29 + 2158: 91 e0 ldi r25, 0x01 ; 1 + 215a: 9f 93 push r25 + 215c: 8f 93 push r24 + 215e: 1f 93 push r17 + 2160: 0f 93 push r16 + 2162: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2166: 99 81 ldd r25, Y+1 ; 0x01 + 2168: 0f 90 pop r0 + 216a: 0f 90 pop r0 + 216c: 0f 90 pop r0 + 216e: 0f 90 pop r0 + 2170: 0f 90 pop r0 + 2172: 0f 90 pop r0 + 2174: 99 23 and r25, r25 + 2176: 59 f0 breq .+22 ; 0x218e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1132> + 2178: fe 01 movw r30, r28 + 217a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2184: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2188: 91 91 ld r25, Z+ + 218a: 91 11 cpse r25, r1 + 218c: f7 cf rjmp .-18 ; 0x217c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1120> + 218e: 28 e0 ldi r18, 0x08 ; 8 + 2190: 92 e0 ldi r25, 0x02 ; 2 + 2192: 80 e0 ldi r24, 0x00 ; 0 + 2194: 15 c0 rjmp .+42 ; 0x21c0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1164> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2196: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2198: 22 9a sbi 0x04, 2 ; 4 + 219a: 35 e0 ldi r19, 0x05 ; 5 + 219c: 3a 95 dec r19 + 219e: f1 f7 brne .-4 ; 0x219c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1140> + 21a0: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 21a2: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 21a4: 81 60 ori r24, 0x01 ; 1 + 21a6: 35 e0 ldi r19, 0x05 ; 5 + 21a8: 3a 95 dec r19 + 21aa: f1 f7 brne .-4 ; 0x21a8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x114c> + 21ac: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 21ae: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 21b0: 21 9a sbi 0x04, 1 ; 4 + 21b2: 3a e0 ldi r19, 0x0A ; 10 + 21b4: 3a 95 dec r19 + 21b6: f1 f7 brne .-4 ; 0x21b4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1158> + 21b8: 00 c0 rjmp .+0 ; 0x21ba <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x115e> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 21ba: 99 0f add r25, r25 + 21bc: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 21be: 41 f0 breq .+16 ; 0x21d0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1174> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 21c0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 21c2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 21c4: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 21c6: 97 ff sbrs r25, 7 + 21c8: e6 cf rjmp .-52 ; 0x2196 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x113a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 21ca: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 21cc: 22 9a sbi 0x04, 2 ; 4 + 21ce: e5 cf rjmp .-54 ; 0x219a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x113e> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 21d0: 1f 92 push r1 + 21d2: 8f 93 push r24 + 21d4: 87 e2 ldi r24, 0x27 ; 39 + 21d6: 91 e0 ldi r25, 0x01 ; 1 + 21d8: 9f 93 push r25 + 21da: 8f 93 push r24 + 21dc: 1f 93 push r17 + 21de: 0f 93 push r16 + 21e0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 21e4: 99 81 ldd r25, Y+1 ; 0x01 + 21e6: 0f 90 pop r0 + 21e8: 0f 90 pop r0 + 21ea: 0f 90 pop r0 + 21ec: 0f 90 pop r0 + 21ee: 0f 90 pop r0 + 21f0: 0f 90 pop r0 + 21f2: 99 23 and r25, r25 + 21f4: 59 f0 breq .+22 ; 0x220c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11b0> + 21f6: fe 01 movw r30, r28 + 21f8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2202: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2206: 91 91 ld r25, Z+ + 2208: 91 11 cpse r25, r1 + 220a: f7 cf rjmp .-18 ; 0x21fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x119e> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 220c: 1f 92 push r1 + 220e: 84 e2 ldi r24, 0x24 ; 36 + 2210: 8f 93 push r24 + 2212: 8d e1 ldi r24, 0x1D ; 29 + 2214: 91 e0 ldi r25, 0x01 ; 1 + 2216: 9f 93 push r25 + 2218: 8f 93 push r24 + 221a: 1f 93 push r17 + 221c: 0f 93 push r16 + 221e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2222: 99 81 ldd r25, Y+1 ; 0x01 + 2224: 0f 90 pop r0 + 2226: 0f 90 pop r0 + 2228: 0f 90 pop r0 + 222a: 0f 90 pop r0 + 222c: 0f 90 pop r0 + 222e: 0f 90 pop r0 + 2230: 99 23 and r25, r25 + 2232: 59 f0 breq .+22 ; 0x224a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11ee> + 2234: fe 01 movw r30, r28 + 2236: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2240: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2244: 91 91 ld r25, Z+ + 2246: 91 11 cpse r25, r1 + 2248: f7 cf rjmp .-18 ; 0x2238 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11dc> + 224a: 28 e0 ldi r18, 0x08 ; 8 + 224c: 94 e2 ldi r25, 0x24 ; 36 + 224e: 80 e0 ldi r24, 0x00 ; 0 + 2250: 15 c0 rjmp .+42 ; 0x227c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1220> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2252: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2254: 22 9a sbi 0x04, 2 ; 4 + 2256: 35 e0 ldi r19, 0x05 ; 5 + 2258: 3a 95 dec r19 + 225a: f1 f7 brne .-4 ; 0x2258 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11fc> + 225c: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 225e: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2260: 81 60 ori r24, 0x01 ; 1 + 2262: 35 e0 ldi r19, 0x05 ; 5 + 2264: 3a 95 dec r19 + 2266: f1 f7 brne .-4 ; 0x2264 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1208> + 2268: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 226a: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 226c: 21 9a sbi 0x04, 1 ; 4 + 226e: 3a e0 ldi r19, 0x0A ; 10 + 2270: 3a 95 dec r19 + 2272: f1 f7 brne .-4 ; 0x2270 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1214> + 2274: 00 c0 rjmp .+0 ; 0x2276 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x121a> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 2276: 99 0f add r25, r25 + 2278: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 227a: 41 f0 breq .+16 ; 0x228c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1230> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 227c: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 227e: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2280: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2282: 97 ff sbrs r25, 7 + 2284: e6 cf rjmp .-52 ; 0x2252 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11f6> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2286: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 2288: 22 9a sbi 0x04, 2 ; 4 + 228a: e5 cf rjmp .-54 ; 0x2256 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x11fa> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 228c: 1f 92 push r1 + 228e: 8f 93 push r24 + 2290: 87 e2 ldi r24, 0x27 ; 39 + 2292: 91 e0 ldi r25, 0x01 ; 1 + 2294: 9f 93 push r25 + 2296: 8f 93 push r24 + 2298: 1f 93 push r17 + 229a: 0f 93 push r16 + 229c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 22a0: 99 81 ldd r25, Y+1 ; 0x01 + 22a2: 0f 90 pop r0 + 22a4: 0f 90 pop r0 + 22a6: 0f 90 pop r0 + 22a8: 0f 90 pop r0 + 22aa: 0f 90 pop r0 + 22ac: 0f 90 pop r0 + 22ae: 99 23 and r25, r25 + 22b0: 59 f0 breq .+22 ; 0x22c8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x126c> + 22b2: fe 01 movw r30, r28 + 22b4: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 22be: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 22c2: 91 91 ld r25, Z+ + 22c4: 91 11 cpse r25, r1 + 22c6: f7 cf rjmp .-18 ; 0x22b6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x125a> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 22c8: 1f 92 push r1 + 22ca: 1f 92 push r1 + 22cc: 8d e1 ldi r24, 0x1D ; 29 + 22ce: 91 e0 ldi r25, 0x01 ; 1 + 22d0: 9f 93 push r25 + 22d2: 8f 93 push r24 + 22d4: 1f 93 push r17 + 22d6: 0f 93 push r16 + 22d8: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 22dc: 99 81 ldd r25, Y+1 ; 0x01 + 22de: 0f 90 pop r0 + 22e0: 0f 90 pop r0 + 22e2: 0f 90 pop r0 + 22e4: 0f 90 pop r0 + 22e6: 0f 90 pop r0 + 22e8: 0f 90 pop r0 + 22ea: 99 23 and r25, r25 + 22ec: 59 f0 breq .+22 ; 0x2304 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12a8> + 22ee: fe 01 movw r30, r28 + 22f0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 22fa: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 22fe: 91 91 ld r25, Z+ + 2300: 91 11 cpse r25, r1 + 2302: f7 cf rjmp .-18 ; 0x22f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1296> + 2304: 98 e0 ldi r25, 0x08 ; 8 + 2306: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2308: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 230a: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 230c: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 230e: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2310: 22 9a sbi 0x04, 2 ; 4 + 2312: 25 e0 ldi r18, 0x05 ; 5 + 2314: 2a 95 dec r18 + 2316: f1 f7 brne .-4 ; 0x2314 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12b8> + 2318: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 231a: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 231c: 81 60 ori r24, 0x01 ; 1 + 231e: 35 e0 ldi r19, 0x05 ; 5 + 2320: 3a 95 dec r19 + 2322: f1 f7 brne .-4 ; 0x2320 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12c4> + 2324: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2326: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2328: 21 9a sbi 0x04, 1 ; 4 + 232a: 2a e0 ldi r18, 0x0A ; 10 + 232c: 2a 95 dec r18 + 232e: f1 f7 brne .-4 ; 0x232c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12d0> + 2330: 00 c0 rjmp .+0 ; 0x2332 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12d6> + 2332: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2334: 49 f7 brne .-46 ; 0x2308 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x12ac> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2336: 1f 92 push r1 + 2338: 8f 93 push r24 + 233a: 87 e2 ldi r24, 0x27 ; 39 + 233c: 91 e0 ldi r25, 0x01 ; 1 + 233e: 9f 93 push r25 + 2340: 8f 93 push r24 + 2342: 1f 93 push r17 + 2344: 0f 93 push r16 + 2346: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 234a: 99 81 ldd r25, Y+1 ; 0x01 + 234c: 0f 90 pop r0 + 234e: 0f 90 pop r0 + 2350: 0f 90 pop r0 + 2352: 0f 90 pop r0 + 2354: 0f 90 pop r0 + 2356: 0f 90 pop r0 + 2358: 99 23 and r25, r25 + 235a: 59 f0 breq .+22 ; 0x2372 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1316> + 235c: fe 01 movw r30, r28 + 235e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2368: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 236c: 91 91 ld r25, Z+ + 236e: 91 11 cpse r25, r1 + 2370: f7 cf rjmp .-18 ; 0x2360 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1304> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2372: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 2374: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2376: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 2378: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 237a: 1f 92 push r1 + 237c: 82 e0 ldi r24, 0x02 ; 2 + 237e: 8f 93 push r24 + 2380: 8d e1 ldi r24, 0x1D ; 29 + 2382: 91 e0 ldi r25, 0x01 ; 1 + 2384: 9f 93 push r25 + 2386: 8f 93 push r24 + 2388: 1f 93 push r17 + 238a: 0f 93 push r16 + 238c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2390: 99 81 ldd r25, Y+1 ; 0x01 + 2392: 0f 90 pop r0 + 2394: 0f 90 pop r0 + 2396: 0f 90 pop r0 + 2398: 0f 90 pop r0 + 239a: 0f 90 pop r0 + 239c: 0f 90 pop r0 + 239e: 99 23 and r25, r25 + 23a0: 59 f0 breq .+22 ; 0x23b8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x135c> + 23a2: fe 01 movw r30, r28 + 23a4: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 23ae: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 23b2: 91 91 ld r25, Z+ + 23b4: 91 11 cpse r25, r1 + 23b6: f7 cf rjmp .-18 ; 0x23a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x134a> + 23b8: 28 e0 ldi r18, 0x08 ; 8 + 23ba: 92 e0 ldi r25, 0x02 ; 2 + 23bc: 80 e0 ldi r24, 0x00 ; 0 + 23be: 15 c0 rjmp .+42 ; 0x23ea <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x138e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 23c0: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 23c2: 22 9a sbi 0x04, 2 ; 4 + 23c4: 35 e0 ldi r19, 0x05 ; 5 + 23c6: 3a 95 dec r19 + 23c8: f1 f7 brne .-4 ; 0x23c6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x136a> + 23ca: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 23cc: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 23ce: 81 60 ori r24, 0x01 ; 1 + 23d0: 35 e0 ldi r19, 0x05 ; 5 + 23d2: 3a 95 dec r19 + 23d4: f1 f7 brne .-4 ; 0x23d2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1376> + 23d6: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 23d8: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 23da: 21 9a sbi 0x04, 1 ; 4 + 23dc: 3a e0 ldi r19, 0x0A ; 10 + 23de: 3a 95 dec r19 + 23e0: f1 f7 brne .-4 ; 0x23de <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1382> + 23e2: 00 c0 rjmp .+0 ; 0x23e4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1388> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 23e4: 99 0f add r25, r25 + 23e6: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 23e8: 41 f0 breq .+16 ; 0x23fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x139e> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 23ea: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 23ec: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 23ee: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 23f0: 97 ff sbrs r25, 7 + 23f2: e6 cf rjmp .-52 ; 0x23c0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1364> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 23f4: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 23f6: 22 9a sbi 0x04, 2 ; 4 + 23f8: e5 cf rjmp .-54 ; 0x23c4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1368> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 23fa: 1f 92 push r1 + 23fc: 8f 93 push r24 + 23fe: 87 e2 ldi r24, 0x27 ; 39 + 2400: 91 e0 ldi r25, 0x01 ; 1 + 2402: 9f 93 push r25 + 2404: 8f 93 push r24 + 2406: 1f 93 push r17 + 2408: 0f 93 push r16 + 240a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 240e: 99 81 ldd r25, Y+1 ; 0x01 + 2410: 0f 90 pop r0 + 2412: 0f 90 pop r0 + 2414: 0f 90 pop r0 + 2416: 0f 90 pop r0 + 2418: 0f 90 pop r0 + 241a: 0f 90 pop r0 + 241c: 99 23 and r25, r25 + 241e: 59 f0 breq .+22 ; 0x2436 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x13da> + 2420: fe 01 movw r30, r28 + 2422: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 242c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2430: 91 91 ld r25, Z+ + 2432: 91 11 cpse r25, r1 + 2434: f7 cf rjmp .-18 ; 0x2424 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x13c8> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2436: 1f 92 push r1 + 2438: 85 e2 ldi r24, 0x25 ; 37 + 243a: 8f 93 push r24 + 243c: 8d e1 ldi r24, 0x1D ; 29 + 243e: 91 e0 ldi r25, 0x01 ; 1 + 2440: 9f 93 push r25 + 2442: 8f 93 push r24 + 2444: 1f 93 push r17 + 2446: 0f 93 push r16 + 2448: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 244c: 99 81 ldd r25, Y+1 ; 0x01 + 244e: 0f 90 pop r0 + 2450: 0f 90 pop r0 + 2452: 0f 90 pop r0 + 2454: 0f 90 pop r0 + 2456: 0f 90 pop r0 + 2458: 0f 90 pop r0 + 245a: 99 23 and r25, r25 + 245c: 59 f0 breq .+22 ; 0x2474 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1418> + 245e: fe 01 movw r30, r28 + 2460: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 246a: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 246e: 91 91 ld r25, Z+ + 2470: 91 11 cpse r25, r1 + 2472: f7 cf rjmp .-18 ; 0x2462 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1406> + 2474: 28 e0 ldi r18, 0x08 ; 8 + 2476: 95 e2 ldi r25, 0x25 ; 37 + 2478: 80 e0 ldi r24, 0x00 ; 0 + 247a: 15 c0 rjmp .+42 ; 0x24a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x144a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 247c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 247e: 22 9a sbi 0x04, 2 ; 4 + 2480: 35 e0 ldi r19, 0x05 ; 5 + 2482: 3a 95 dec r19 + 2484: f1 f7 brne .-4 ; 0x2482 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1426> + 2486: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2488: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 248a: 81 60 ori r24, 0x01 ; 1 + 248c: 35 e0 ldi r19, 0x05 ; 5 + 248e: 3a 95 dec r19 + 2490: f1 f7 brne .-4 ; 0x248e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1432> + 2492: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2494: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2496: 21 9a sbi 0x04, 1 ; 4 + 2498: 3a e0 ldi r19, 0x0A ; 10 + 249a: 3a 95 dec r19 + 249c: f1 f7 brne .-4 ; 0x249a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x143e> + 249e: 00 c0 rjmp .+0 ; 0x24a0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1444> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 24a0: 99 0f add r25, r25 + 24a2: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 24a4: 41 f0 breq .+16 ; 0x24b6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x145a> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 24a6: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 24a8: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 24aa: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 24ac: 97 ff sbrs r25, 7 + 24ae: e6 cf rjmp .-52 ; 0x247c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1420> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 24b0: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 24b2: 22 9a sbi 0x04, 2 ; 4 + 24b4: e5 cf rjmp .-54 ; 0x2480 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1424> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 24b6: 1f 92 push r1 + 24b8: 8f 93 push r24 + 24ba: 87 e2 ldi r24, 0x27 ; 39 + 24bc: 91 e0 ldi r25, 0x01 ; 1 + 24be: 9f 93 push r25 + 24c0: 8f 93 push r24 + 24c2: 1f 93 push r17 + 24c4: 0f 93 push r16 + 24c6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 24ca: 99 81 ldd r25, Y+1 ; 0x01 + 24cc: 0f 90 pop r0 + 24ce: 0f 90 pop r0 + 24d0: 0f 90 pop r0 + 24d2: 0f 90 pop r0 + 24d4: 0f 90 pop r0 + 24d6: 0f 90 pop r0 + 24d8: 99 23 and r25, r25 + 24da: 59 f0 breq .+22 ; 0x24f2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1496> + 24dc: fe 01 movw r30, r28 + 24de: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 24e8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 24ec: 91 91 ld r25, Z+ + 24ee: 91 11 cpse r25, r1 + 24f0: f7 cf rjmp .-18 ; 0x24e0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1484> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 24f2: 1f 92 push r1 + 24f4: 1f 92 push r1 + 24f6: 8d e1 ldi r24, 0x1D ; 29 + 24f8: 91 e0 ldi r25, 0x01 ; 1 + 24fa: 9f 93 push r25 + 24fc: 8f 93 push r24 + 24fe: 1f 93 push r17 + 2500: 0f 93 push r16 + 2502: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2506: 99 81 ldd r25, Y+1 ; 0x01 + 2508: 0f 90 pop r0 + 250a: 0f 90 pop r0 + 250c: 0f 90 pop r0 + 250e: 0f 90 pop r0 + 2510: 0f 90 pop r0 + 2512: 0f 90 pop r0 + 2514: 99 23 and r25, r25 + 2516: 59 f0 breq .+22 ; 0x252e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14d2> + 2518: fe 01 movw r30, r28 + 251a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2524: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2528: 91 91 ld r25, Z+ + 252a: 91 11 cpse r25, r1 + 252c: f7 cf rjmp .-18 ; 0x251c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14c0> + 252e: 98 e0 ldi r25, 0x08 ; 8 + 2530: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2532: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2534: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2536: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2538: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 253a: 22 9a sbi 0x04, 2 ; 4 + 253c: 25 e0 ldi r18, 0x05 ; 5 + 253e: 2a 95 dec r18 + 2540: f1 f7 brne .-4 ; 0x253e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14e2> + 2542: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2544: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2546: 81 60 ori r24, 0x01 ; 1 + 2548: 35 e0 ldi r19, 0x05 ; 5 + 254a: 3a 95 dec r19 + 254c: f1 f7 brne .-4 ; 0x254a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14ee> + 254e: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2550: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2552: 21 9a sbi 0x04, 1 ; 4 + 2554: 2a e0 ldi r18, 0x0A ; 10 + 2556: 2a 95 dec r18 + 2558: f1 f7 brne .-4 ; 0x2556 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14fa> + 255a: 00 c0 rjmp .+0 ; 0x255c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1500> + 255c: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 255e: 49 f7 brne .-46 ; 0x2532 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x14d6> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2560: 1f 92 push r1 + 2562: 8f 93 push r24 + 2564: 87 e2 ldi r24, 0x27 ; 39 + 2566: 91 e0 ldi r25, 0x01 ; 1 + 2568: 9f 93 push r25 + 256a: 8f 93 push r24 + 256c: 1f 93 push r17 + 256e: 0f 93 push r16 + 2570: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2574: 99 81 ldd r25, Y+1 ; 0x01 + 2576: 0f 90 pop r0 + 2578: 0f 90 pop r0 + 257a: 0f 90 pop r0 + 257c: 0f 90 pop r0 + 257e: 0f 90 pop r0 + 2580: 0f 90 pop r0 + 2582: 99 23 and r25, r25 + 2584: 59 f0 breq .+22 ; 0x259c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1540> + 2586: fe 01 movw r30, r28 + 2588: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2592: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2596: 91 91 ld r25, Z+ + 2598: 91 11 cpse r25, r1 + 259a: f7 cf rjmp .-18 ; 0x258a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x152e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 259c: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 259e: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 25a0: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 25a2: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 25a4: 1f 92 push r1 + 25a6: 82 e0 ldi r24, 0x02 ; 2 + 25a8: 8f 93 push r24 + 25aa: 8d e1 ldi r24, 0x1D ; 29 + 25ac: 91 e0 ldi r25, 0x01 ; 1 + 25ae: 9f 93 push r25 + 25b0: 8f 93 push r24 + 25b2: 1f 93 push r17 + 25b4: 0f 93 push r16 + 25b6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 25ba: 99 81 ldd r25, Y+1 ; 0x01 + 25bc: 0f 90 pop r0 + 25be: 0f 90 pop r0 + 25c0: 0f 90 pop r0 + 25c2: 0f 90 pop r0 + 25c4: 0f 90 pop r0 + 25c6: 0f 90 pop r0 + 25c8: 99 23 and r25, r25 + 25ca: 59 f0 breq .+22 ; 0x25e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1586> + 25cc: fe 01 movw r30, r28 + 25ce: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 25d8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 25dc: 91 91 ld r25, Z+ + 25de: 91 11 cpse r25, r1 + 25e0: f7 cf rjmp .-18 ; 0x25d0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1574> + 25e2: 28 e0 ldi r18, 0x08 ; 8 + 25e4: 92 e0 ldi r25, 0x02 ; 2 + 25e6: 80 e0 ldi r24, 0x00 ; 0 + 25e8: 15 c0 rjmp .+42 ; 0x2614 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15b8> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 25ea: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 25ec: 22 9a sbi 0x04, 2 ; 4 + 25ee: 35 e0 ldi r19, 0x05 ; 5 + 25f0: 3a 95 dec r19 + 25f2: f1 f7 brne .-4 ; 0x25f0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1594> + 25f4: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 25f6: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 25f8: 81 60 ori r24, 0x01 ; 1 + 25fa: 35 e0 ldi r19, 0x05 ; 5 + 25fc: 3a 95 dec r19 + 25fe: f1 f7 brne .-4 ; 0x25fc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15a0> + 2600: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2602: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2604: 21 9a sbi 0x04, 1 ; 4 + 2606: 3a e0 ldi r19, 0x0A ; 10 + 2608: 3a 95 dec r19 + 260a: f1 f7 brne .-4 ; 0x2608 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15ac> + 260c: 00 c0 rjmp .+0 ; 0x260e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15b2> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 260e: 99 0f add r25, r25 + 2610: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2612: 41 f0 breq .+16 ; 0x2624 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15c8> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2614: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2616: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2618: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 261a: 97 ff sbrs r25, 7 + 261c: e6 cf rjmp .-52 ; 0x25ea <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x158e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 261e: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 2620: 22 9a sbi 0x04, 2 ; 4 + 2622: e5 cf rjmp .-54 ; 0x25ee <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1592> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2624: 1f 92 push r1 + 2626: 8f 93 push r24 + 2628: 87 e2 ldi r24, 0x27 ; 39 + 262a: 91 e0 ldi r25, 0x01 ; 1 + 262c: 9f 93 push r25 + 262e: 8f 93 push r24 + 2630: 1f 93 push r17 + 2632: 0f 93 push r16 + 2634: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2638: 99 81 ldd r25, Y+1 ; 0x01 + 263a: 0f 90 pop r0 + 263c: 0f 90 pop r0 + 263e: 0f 90 pop r0 + 2640: 0f 90 pop r0 + 2642: 0f 90 pop r0 + 2644: 0f 90 pop r0 + 2646: 99 23 and r25, r25 + 2648: 59 f0 breq .+22 ; 0x2660 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1604> + 264a: fe 01 movw r30, r28 + 264c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2656: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 265a: 91 91 ld r25, Z+ + 265c: 91 11 cpse r25, r1 + 265e: f7 cf rjmp .-18 ; 0x264e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x15f2> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2660: 1f 92 push r1 + 2662: 86 e2 ldi r24, 0x26 ; 38 + 2664: 8f 93 push r24 + 2666: 8d e1 ldi r24, 0x1D ; 29 + 2668: 91 e0 ldi r25, 0x01 ; 1 + 266a: 9f 93 push r25 + 266c: 8f 93 push r24 + 266e: 1f 93 push r17 + 2670: 0f 93 push r16 + 2672: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2676: 99 81 ldd r25, Y+1 ; 0x01 + 2678: 0f 90 pop r0 + 267a: 0f 90 pop r0 + 267c: 0f 90 pop r0 + 267e: 0f 90 pop r0 + 2680: 0f 90 pop r0 + 2682: 0f 90 pop r0 + 2684: 99 23 and r25, r25 + 2686: 59 f0 breq .+22 ; 0x269e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1642> + 2688: fe 01 movw r30, r28 + 268a: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2694: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2698: 91 91 ld r25, Z+ + 269a: 91 11 cpse r25, r1 + 269c: f7 cf rjmp .-18 ; 0x268c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1630> + 269e: 28 e0 ldi r18, 0x08 ; 8 + 26a0: 96 e2 ldi r25, 0x26 ; 38 + 26a2: 80 e0 ldi r24, 0x00 ; 0 + 26a4: 15 c0 rjmp .+42 ; 0x26d0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1674> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 26a6: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 26a8: 22 9a sbi 0x04, 2 ; 4 + 26aa: 35 e0 ldi r19, 0x05 ; 5 + 26ac: 3a 95 dec r19 + 26ae: f1 f7 brne .-4 ; 0x26ac <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1650> + 26b0: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 26b2: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 26b4: 81 60 ori r24, 0x01 ; 1 + 26b6: 35 e0 ldi r19, 0x05 ; 5 + 26b8: 3a 95 dec r19 + 26ba: f1 f7 brne .-4 ; 0x26b8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x165c> + 26bc: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 26be: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 26c0: 21 9a sbi 0x04, 1 ; 4 + 26c2: 3a e0 ldi r19, 0x0A ; 10 + 26c4: 3a 95 dec r19 + 26c6: f1 f7 brne .-4 ; 0x26c4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1668> + 26c8: 00 c0 rjmp .+0 ; 0x26ca <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x166e> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 26ca: 99 0f add r25, r25 + 26cc: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 26ce: 41 f0 breq .+16 ; 0x26e0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1684> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 26d0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 26d2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 26d4: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 26d6: 97 ff sbrs r25, 7 + 26d8: e6 cf rjmp .-52 ; 0x26a6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x164a> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 26da: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 26dc: 22 9a sbi 0x04, 2 ; 4 + 26de: e5 cf rjmp .-54 ; 0x26aa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x164e> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 26e0: 1f 92 push r1 + 26e2: 8f 93 push r24 + 26e4: 87 e2 ldi r24, 0x27 ; 39 + 26e6: 91 e0 ldi r25, 0x01 ; 1 + 26e8: 9f 93 push r25 + 26ea: 8f 93 push r24 + 26ec: 1f 93 push r17 + 26ee: 0f 93 push r16 + 26f0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 26f4: 99 81 ldd r25, Y+1 ; 0x01 + 26f6: 0f 90 pop r0 + 26f8: 0f 90 pop r0 + 26fa: 0f 90 pop r0 + 26fc: 0f 90 pop r0 + 26fe: 0f 90 pop r0 + 2700: 0f 90 pop r0 + 2702: 99 23 and r25, r25 + 2704: 59 f0 breq .+22 ; 0x271c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x16c0> + 2706: fe 01 movw r30, r28 + 2708: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2712: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2716: 91 91 ld r25, Z+ + 2718: 91 11 cpse r25, r1 + 271a: f7 cf rjmp .-18 ; 0x270a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x16ae> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 271c: 1f 92 push r1 + 271e: 1f 92 push r1 + 2720: 8d e1 ldi r24, 0x1D ; 29 + 2722: 91 e0 ldi r25, 0x01 ; 1 + 2724: 9f 93 push r25 + 2726: 8f 93 push r24 + 2728: 1f 93 push r17 + 272a: 0f 93 push r16 + 272c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2730: 99 81 ldd r25, Y+1 ; 0x01 + 2732: 0f 90 pop r0 + 2734: 0f 90 pop r0 + 2736: 0f 90 pop r0 + 2738: 0f 90 pop r0 + 273a: 0f 90 pop r0 + 273c: 0f 90 pop r0 + 273e: 99 23 and r25, r25 + 2740: 59 f0 breq .+22 ; 0x2758 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x16fc> + 2742: fe 01 movw r30, r28 + 2744: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 274e: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2752: 91 91 ld r25, Z+ + 2754: 91 11 cpse r25, r1 + 2756: f7 cf rjmp .-18 ; 0x2746 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x16ea> + 2758: 98 e0 ldi r25, 0x08 ; 8 + 275a: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 275c: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 275e: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2760: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2762: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2764: 22 9a sbi 0x04, 2 ; 4 + 2766: 25 e0 ldi r18, 0x05 ; 5 + 2768: 2a 95 dec r18 + 276a: f1 f7 brne .-4 ; 0x2768 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x170c> + 276c: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 276e: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2770: 81 60 ori r24, 0x01 ; 1 + 2772: 35 e0 ldi r19, 0x05 ; 5 + 2774: 3a 95 dec r19 + 2776: f1 f7 brne .-4 ; 0x2774 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1718> + 2778: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 277a: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 277c: 21 9a sbi 0x04, 1 ; 4 + 277e: 2a e0 ldi r18, 0x0A ; 10 + 2780: 2a 95 dec r18 + 2782: f1 f7 brne .-4 ; 0x2780 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1724> + 2784: 00 c0 rjmp .+0 ; 0x2786 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x172a> + 2786: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2788: 49 f7 brne .-46 ; 0x275c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1700> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 278a: 1f 92 push r1 + 278c: 8f 93 push r24 + 278e: 87 e2 ldi r24, 0x27 ; 39 + 2790: 91 e0 ldi r25, 0x01 ; 1 + 2792: 9f 93 push r25 + 2794: 8f 93 push r24 + 2796: 1f 93 push r17 + 2798: 0f 93 push r16 + 279a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 279e: 99 81 ldd r25, Y+1 ; 0x01 + 27a0: 0f 90 pop r0 + 27a2: 0f 90 pop r0 + 27a4: 0f 90 pop r0 + 27a6: 0f 90 pop r0 + 27a8: 0f 90 pop r0 + 27aa: 0f 90 pop r0 + 27ac: 99 23 and r25, r25 + 27ae: 59 f0 breq .+22 ; 0x27c6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x176a> + 27b0: fe 01 movw r30, r28 + 27b2: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 27bc: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 27c0: 91 91 ld r25, Z+ + 27c2: 91 11 cpse r25, r1 + 27c4: f7 cf rjmp .-18 ; 0x27b4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1758> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 27c6: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 27c8: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 27ca: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 27cc: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 27ce: 1f 92 push r1 + 27d0: 82 e0 ldi r24, 0x02 ; 2 + 27d2: 8f 93 push r24 + 27d4: 8d e1 ldi r24, 0x1D ; 29 + 27d6: 91 e0 ldi r25, 0x01 ; 1 + 27d8: 9f 93 push r25 + 27da: 8f 93 push r24 + 27dc: 1f 93 push r17 + 27de: 0f 93 push r16 + 27e0: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 27e4: 99 81 ldd r25, Y+1 ; 0x01 + 27e6: 0f 90 pop r0 + 27e8: 0f 90 pop r0 + 27ea: 0f 90 pop r0 + 27ec: 0f 90 pop r0 + 27ee: 0f 90 pop r0 + 27f0: 0f 90 pop r0 + 27f2: 99 23 and r25, r25 + 27f4: 59 f0 breq .+22 ; 0x280c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17b0> + 27f6: fe 01 movw r30, r28 + 27f8: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2802: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2806: 91 91 ld r25, Z+ + 2808: 91 11 cpse r25, r1 + 280a: f7 cf rjmp .-18 ; 0x27fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x179e> + 280c: 28 e0 ldi r18, 0x08 ; 8 + 280e: 92 e0 ldi r25, 0x02 ; 2 + 2810: 80 e0 ldi r24, 0x00 ; 0 + 2812: 15 c0 rjmp .+42 ; 0x283e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17e2> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2814: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2816: 22 9a sbi 0x04, 2 ; 4 + 2818: 35 e0 ldi r19, 0x05 ; 5 + 281a: 3a 95 dec r19 + 281c: f1 f7 brne .-4 ; 0x281a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17be> + 281e: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2820: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2822: 81 60 ori r24, 0x01 ; 1 + 2824: 35 e0 ldi r19, 0x05 ; 5 + 2826: 3a 95 dec r19 + 2828: f1 f7 brne .-4 ; 0x2826 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17ca> + 282a: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 282c: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 282e: 21 9a sbi 0x04, 1 ; 4 + 2830: 3a e0 ldi r19, 0x0A ; 10 + 2832: 3a 95 dec r19 + 2834: f1 f7 brne .-4 ; 0x2832 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17d6> + 2836: 00 c0 rjmp .+0 ; 0x2838 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17dc> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 2838: 99 0f add r25, r25 + 283a: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 283c: 41 f0 breq .+16 ; 0x284e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17f2> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 283e: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2840: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2842: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2844: 97 ff sbrs r25, 7 + 2846: e6 cf rjmp .-52 ; 0x2814 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17b8> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2848: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 284a: 22 9a sbi 0x04, 2 ; 4 + 284c: e5 cf rjmp .-54 ; 0x2818 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x17bc> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 284e: 1f 92 push r1 + 2850: 8f 93 push r24 + 2852: 87 e2 ldi r24, 0x27 ; 39 + 2854: 91 e0 ldi r25, 0x01 ; 1 + 2856: 9f 93 push r25 + 2858: 8f 93 push r24 + 285a: 1f 93 push r17 + 285c: 0f 93 push r16 + 285e: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2862: 99 81 ldd r25, Y+1 ; 0x01 + 2864: 0f 90 pop r0 + 2866: 0f 90 pop r0 + 2868: 0f 90 pop r0 + 286a: 0f 90 pop r0 + 286c: 0f 90 pop r0 + 286e: 0f 90 pop r0 + 2870: 99 23 and r25, r25 + 2872: 59 f0 breq .+22 ; 0x288a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x182e> + 2874: fe 01 movw r30, r28 + 2876: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2880: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2884: 91 91 ld r25, Z+ + 2886: 91 11 cpse r25, r1 + 2888: f7 cf rjmp .-18 ; 0x2878 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x181c> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 288a: 1f 92 push r1 + 288c: 87 e2 ldi r24, 0x27 ; 39 + 288e: 8f 93 push r24 + 2890: 8d e1 ldi r24, 0x1D ; 29 + 2892: 91 e0 ldi r25, 0x01 ; 1 + 2894: 9f 93 push r25 + 2896: 8f 93 push r24 + 2898: 1f 93 push r17 + 289a: 0f 93 push r16 + 289c: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 28a0: 99 81 ldd r25, Y+1 ; 0x01 + 28a2: 0f 90 pop r0 + 28a4: 0f 90 pop r0 + 28a6: 0f 90 pop r0 + 28a8: 0f 90 pop r0 + 28aa: 0f 90 pop r0 + 28ac: 0f 90 pop r0 + 28ae: 99 23 and r25, r25 + 28b0: 59 f0 breq .+22 ; 0x28c8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x186c> + 28b2: fe 01 movw r30, r28 + 28b4: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 28be: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 28c2: 91 91 ld r25, Z+ + 28c4: 91 11 cpse r25, r1 + 28c6: f7 cf rjmp .-18 ; 0x28b6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x185a> + 28c8: 28 e0 ldi r18, 0x08 ; 8 + 28ca: 97 e2 ldi r25, 0x27 ; 39 + 28cc: 80 e0 ldi r24, 0x00 ; 0 + 28ce: 15 c0 rjmp .+42 ; 0x28fa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x189e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 28d0: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 28d2: 22 9a sbi 0x04, 2 ; 4 + 28d4: 35 e0 ldi r19, 0x05 ; 5 + 28d6: 3a 95 dec r19 + 28d8: f1 f7 brne .-4 ; 0x28d6 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x187a> + 28da: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 28dc: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 28de: 81 60 ori r24, 0x01 ; 1 + 28e0: 35 e0 ldi r19, 0x05 ; 5 + 28e2: 3a 95 dec r19 + 28e4: f1 f7 brne .-4 ; 0x28e2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1886> + 28e6: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 28e8: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 28ea: 21 9a sbi 0x04, 1 ; 4 + 28ec: 3a e0 ldi r19, 0x0A ; 10 + 28ee: 3a 95 dec r19 + 28f0: f1 f7 brne .-4 ; 0x28ee <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1892> + 28f2: 00 c0 rjmp .+0 ; 0x28f4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1898> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 28f4: 99 0f add r25, r25 + 28f6: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 28f8: 41 f0 breq .+16 ; 0x290a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x18ae> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 28fa: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 28fc: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 28fe: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2900: 97 ff sbrs r25, 7 + 2902: e6 cf rjmp .-52 ; 0x28d0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1874> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2904: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 2906: 22 9a sbi 0x04, 2 ; 4 + 2908: e5 cf rjmp .-54 ; 0x28d4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1878> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 290a: 1f 92 push r1 + 290c: 8f 93 push r24 + 290e: 87 e2 ldi r24, 0x27 ; 39 + 2910: 91 e0 ldi r25, 0x01 ; 1 + 2912: 9f 93 push r25 + 2914: 8f 93 push r24 + 2916: 1f 93 push r17 + 2918: 0f 93 push r16 + 291a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 291e: 99 81 ldd r25, Y+1 ; 0x01 + 2920: 0f 90 pop r0 + 2922: 0f 90 pop r0 + 2924: 0f 90 pop r0 + 2926: 0f 90 pop r0 + 2928: 0f 90 pop r0 + 292a: 0f 90 pop r0 + 292c: 99 23 and r25, r25 + 292e: 59 f0 breq .+22 ; 0x2946 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x18ea> + 2930: fe 01 movw r30, r28 + 2932: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 293c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2940: 91 91 ld r25, Z+ + 2942: 91 11 cpse r25, r1 + 2944: f7 cf rjmp .-18 ; 0x2934 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x18d8> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2946: 1f 92 push r1 + 2948: 1f 92 push r1 + 294a: 8d e1 ldi r24, 0x1D ; 29 + 294c: 91 e0 ldi r25, 0x01 ; 1 + 294e: 9f 93 push r25 + 2950: 8f 93 push r24 + 2952: 1f 93 push r17 + 2954: 0f 93 push r16 + 2956: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 295a: 99 81 ldd r25, Y+1 ; 0x01 + 295c: 0f 90 pop r0 + 295e: 0f 90 pop r0 + 2960: 0f 90 pop r0 + 2962: 0f 90 pop r0 + 2964: 0f 90 pop r0 + 2966: 0f 90 pop r0 + 2968: 99 23 and r25, r25 + 296a: 59 f0 breq .+22 ; 0x2982 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1926> + 296c: fe 01 movw r30, r28 + 296e: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2978: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 297c: 91 91 ld r25, Z+ + 297e: 91 11 cpse r25, r1 + 2980: f7 cf rjmp .-18 ; 0x2970 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1914> + 2982: 98 e0 ldi r25, 0x08 ; 8 + 2984: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2986: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2988: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 298a: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 298c: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 298e: 22 9a sbi 0x04, 2 ; 4 + 2990: 25 e0 ldi r18, 0x05 ; 5 + 2992: 2a 95 dec r18 + 2994: f1 f7 brne .-4 ; 0x2992 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1936> + 2996: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2998: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 299a: 81 60 ori r24, 0x01 ; 1 + 299c: 35 e0 ldi r19, 0x05 ; 5 + 299e: 3a 95 dec r19 + 29a0: f1 f7 brne .-4 ; 0x299e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1942> + 29a2: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 29a4: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 29a6: 21 9a sbi 0x04, 1 ; 4 + 29a8: 2a e0 ldi r18, 0x0A ; 10 + 29aa: 2a 95 dec r18 + 29ac: f1 f7 brne .-4 ; 0x29aa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x194e> + 29ae: 00 c0 rjmp .+0 ; 0x29b0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1954> + 29b0: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 29b2: 49 f7 brne .-46 ; 0x2986 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x192a> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 29b4: 1f 92 push r1 + 29b6: 8f 93 push r24 + 29b8: 87 e2 ldi r24, 0x27 ; 39 + 29ba: 91 e0 ldi r25, 0x01 ; 1 + 29bc: 9f 93 push r25 + 29be: 8f 93 push r24 + 29c0: 1f 93 push r17 + 29c2: 0f 93 push r16 + 29c4: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 29c8: 99 81 ldd r25, Y+1 ; 0x01 + 29ca: 0f 90 pop r0 + 29cc: 0f 90 pop r0 + 29ce: 0f 90 pop r0 + 29d0: 0f 90 pop r0 + 29d2: 0f 90 pop r0 + 29d4: 0f 90 pop r0 + 29d6: 99 23 and r25, r25 + 29d8: 59 f0 breq .+22 ; 0x29f0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1994> + 29da: fe 01 movw r30, r28 + 29dc: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 29e6: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 29ea: 91 91 ld r25, Z+ + 29ec: 91 11 cpse r25, r1 + 29ee: f7 cf rjmp .-18 ; 0x29de <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1982> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 29f0: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 29f2: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 29f4: 2c 98 cbi 0x05, 4 ; 5 + + 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; } + 29f6: 24 9a sbi 0x04, 4 ; 4 + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 29f8: 1f 92 push r1 + 29fa: 82 e0 ldi r24, 0x02 ; 2 + 29fc: 8f 93 push r24 + 29fe: 8d e1 ldi r24, 0x1D ; 29 + 2a00: 91 e0 ldi r25, 0x01 ; 1 + 2a02: 9f 93 push r25 + 2a04: 8f 93 push r24 + 2a06: 1f 93 push r17 + 2a08: 0f 93 push r16 + 2a0a: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2a0e: 99 81 ldd r25, Y+1 ; 0x01 + 2a10: 0f 90 pop r0 + 2a12: 0f 90 pop r0 + 2a14: 0f 90 pop r0 + 2a16: 0f 90 pop r0 + 2a18: 0f 90 pop r0 + 2a1a: 0f 90 pop r0 + 2a1c: 99 23 and r25, r25 + 2a1e: 59 f0 breq .+22 ; 0x2a36 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19da> + 2a20: fe 01 movw r30, r28 + 2a22: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2a2c: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2a30: 91 91 ld r25, Z+ + 2a32: 91 11 cpse r25, r1 + 2a34: f7 cf rjmp .-18 ; 0x2a24 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19c8> + 2a36: 28 e0 ldi r18, 0x08 ; 8 + 2a38: 92 e0 ldi r25, 0x02 ; 2 + 2a3a: 80 e0 ldi r24, 0x00 ; 0 + 2a3c: 15 c0 rjmp .+42 ; 0x2a68 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a0c> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2a3e: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2a40: 22 9a sbi 0x04, 2 ; 4 + 2a42: 35 e0 ldi r19, 0x05 ; 5 + 2a44: 3a 95 dec r19 + 2a46: f1 f7 brne .-4 ; 0x2a44 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19e8> + 2a48: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2a4a: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2a4c: 81 60 ori r24, 0x01 ; 1 + 2a4e: 35 e0 ldi r19, 0x05 ; 5 + 2a50: 3a 95 dec r19 + 2a52: f1 f7 brne .-4 ; 0x2a50 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19f4> + 2a54: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2a56: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2a58: 21 9a sbi 0x04, 1 ; 4 + 2a5a: 3a e0 ldi r19, 0x0A ; 10 + 2a5c: 3a 95 dec r19 + 2a5e: f1 f7 brne .-4 ; 0x2a5c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a00> + 2a60: 00 c0 rjmp .+0 ; 0x2a62 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a06> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 2a62: 99 0f add r25, r25 + 2a64: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2a66: 41 f0 breq .+16 ; 0x2a78 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a1c> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2a68: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2a6a: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2a6c: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2a6e: 97 ff sbrs r25, 7 + 2a70: e6 cf rjmp .-52 ; 0x2a3e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19e2> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2a72: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 2a74: 22 9a sbi 0x04, 2 ; 4 + 2a76: e5 cf rjmp .-54 ; 0x2a42 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x19e6> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2a78: 1f 92 push r1 + 2a7a: 8f 93 push r24 + 2a7c: 87 e2 ldi r24, 0x27 ; 39 + 2a7e: 91 e0 ldi r25, 0x01 ; 1 + 2a80: 9f 93 push r25 + 2a82: 8f 93 push r24 + 2a84: 1f 93 push r17 + 2a86: 0f 93 push r16 + 2a88: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2a8c: 99 81 ldd r25, Y+1 ; 0x01 + 2a8e: 0f 90 pop r0 + 2a90: 0f 90 pop r0 + 2a92: 0f 90 pop r0 + 2a94: 0f 90 pop r0 + 2a96: 0f 90 pop r0 + 2a98: 0f 90 pop r0 + 2a9a: 99 23 and r25, r25 + 2a9c: 59 f0 breq .+22 ; 0x2ab4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a58> + 2a9e: fe 01 movw r30, r28 + 2aa0: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2aaa: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2aae: 91 91 ld r25, Z+ + 2ab0: 91 11 cpse r25, r1 + 2ab2: f7 cf rjmp .-18 ; 0x2aa2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a46> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2ab4: 1f 92 push r1 + 2ab6: 8c e0 ldi r24, 0x0C ; 12 + 2ab8: 8f 93 push r24 + 2aba: 8d e1 ldi r24, 0x1D ; 29 + 2abc: 91 e0 ldi r25, 0x01 ; 1 + 2abe: 9f 93 push r25 + 2ac0: 8f 93 push r24 + 2ac2: 1f 93 push r17 + 2ac4: 0f 93 push r16 + 2ac6: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2aca: 99 81 ldd r25, Y+1 ; 0x01 + 2acc: 0f 90 pop r0 + 2ace: 0f 90 pop r0 + 2ad0: 0f 90 pop r0 + 2ad2: 0f 90 pop r0 + 2ad4: 0f 90 pop r0 + 2ad6: 0f 90 pop r0 + 2ad8: 99 23 and r25, r25 + 2ada: 59 f0 breq .+22 ; 0x2af2 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a96> + 2adc: fe 01 movw r30, r28 + 2ade: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2ae8: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2aec: 91 91 ld r25, Z+ + 2aee: 91 11 cpse r25, r1 + 2af0: f7 cf rjmp .-18 ; 0x2ae0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a84> + 2af2: 28 e0 ldi r18, 0x08 ; 8 + 2af4: 9c e0 ldi r25, 0x0C ; 12 + 2af6: 80 e0 ldi r24, 0x00 ; 0 + 2af8: 15 c0 rjmp .+42 ; 0x2b24 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1ac8> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2afa: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2afc: 22 9a sbi 0x04, 2 ; 4 + 2afe: 35 e0 ldi r19, 0x05 ; 5 + 2b00: 3a 95 dec r19 + 2b02: f1 f7 brne .-4 ; 0x2b00 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1aa4> + 2b04: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2b06: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2b08: 81 60 ori r24, 0x01 ; 1 + 2b0a: 35 e0 ldi r19, 0x05 ; 5 + 2b0c: 3a 95 dec r19 + 2b0e: f1 f7 brne .-4 ; 0x2b0c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1ab0> + 2b10: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2b12: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2b14: 21 9a sbi 0x04, 1 ; 4 + 2b16: 3a e0 ldi r19, 0x0A ; 10 + 2b18: 3a 95 dec r19 + 2b1a: f1 f7 brne .-4 ; 0x2b18 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1abc> + 2b1c: 00 c0 rjmp .+0 ; 0x2b1e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1ac2> + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + 2b1e: 99 0f add r25, r25 + 2b20: 21 50 subi r18, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2b22: 41 f0 breq .+16 ; 0x2b34 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1ad8> + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2b24: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2b26: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2b28: 21 9a sbi 0x04, 1 ; 4 + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + 2b2a: 97 ff sbrs r25, 7 + 2b2c: e6 cf rjmp .-52 ; 0x2afa <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1a9e> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2b2e: 2a 9a sbi 0x05, 2 ; 5 + + 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; } + 2b30: 22 9a sbi 0x04, 2 ; 4 + 2b32: e5 cf rjmp .-54 ; 0x2afe <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1aa2> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2b34: 1f 92 push r1 + 2b36: 8f 93 push r24 + 2b38: 87 e2 ldi r24, 0x27 ; 39 + 2b3a: 91 e0 ldi r25, 0x01 ; 1 + 2b3c: 9f 93 push r25 + 2b3e: 8f 93 push r24 + 2b40: 1f 93 push r17 + 2b42: 0f 93 push r16 + 2b44: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2b48: 99 81 ldd r25, Y+1 ; 0x01 + 2b4a: 0f 90 pop r0 + 2b4c: 0f 90 pop r0 + 2b4e: 0f 90 pop r0 + 2b50: 0f 90 pop r0 + 2b52: 0f 90 pop r0 + 2b54: 0f 90 pop r0 + 2b56: 99 23 and r25, r25 + 2b58: 59 f0 breq .+22 ; 0x2b70 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b14> + 2b5a: fe 01 movw r30, r28 + 2b5c: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2b66: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2b6a: 91 91 ld r25, Z+ + 2b6c: 91 11 cpse r25, r1 + 2b6e: f7 cf rjmp .-18 ; 0x2b5e <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b02> + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + 2b70: 1f 92 push r1 + 2b72: 1f 92 push r1 + 2b74: 8d e1 ldi r24, 0x1D ; 29 + 2b76: 91 e0 ldi r25, 0x01 ; 1 + 2b78: 9f 93 push r25 + 2b7a: 8f 93 push r24 + 2b7c: 1f 93 push r17 + 2b7e: 0f 93 push r16 + 2b80: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2b84: 99 81 ldd r25, Y+1 ; 0x01 + 2b86: 0f 90 pop r0 + 2b88: 0f 90 pop r0 + 2b8a: 0f 90 pop r0 + 2b8c: 0f 90 pop r0 + 2b8e: 0f 90 pop r0 + 2b90: 0f 90 pop r0 + 2b92: 99 23 and r25, r25 + 2b94: 59 f0 breq .+22 ; 0x2bac <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b50> + 2b96: fe 01 movw r30, r28 + 2b98: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2ba2: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2ba6: 91 91 ld r25, Z+ + 2ba8: 91 11 cpse r25, r1 + 2baa: f7 cf rjmp .-18 ; 0x2b9a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b3e> + 2bac: 98 e0 ldi r25, 0x08 ; 8 + 2bae: 80 e0 ldi r24, 0x00 ; 0 + SPSR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + 2bb0: 88 0f add r24, r24 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2bb2: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2bb4: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2bb6: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2bb8: 22 9a sbi 0x04, 2 ; 4 + 2bba: 25 e0 ldi r18, 0x05 ; 5 + 2bbc: 2a 95 dec r18 + 2bbe: f1 f7 brne .-4 ; 0x2bbc <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b60> + 2bc0: 00 00 nop + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + 2bc2: 1b 99 sbic 0x03, 3 ; 3 + { + datain |= 1; + 2bc4: 81 60 ori r24, 0x01 ; 1 + 2bc6: 35 e0 ldi r19, 0x05 ; 5 + 2bc8: 3a 95 dec r19 + 2bca: f1 f7 brne .-4 ; 0x2bc8 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b6c> + 2bcc: 00 00 nop +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2bce: 29 9a sbi 0x05, 1 ; 5 + + 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; } + 2bd0: 21 9a sbi 0x04, 1 ; 4 + 2bd2: 2a e0 ldi r18, 0x0A ; 10 + 2bd4: 2a 95 dec r18 + 2bd6: f1 f7 brne .-4 ; 0x2bd4 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b78> + 2bd8: 00 c0 rjmp .+0 ; 0x2bda <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b7e> + 2bda: 91 50 subi r25, 0x01 ; 1 + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + 2bdc: 49 f7 brne .-46 ; 0x2bb0 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1b54> + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + 2bde: 1f 92 push r1 + 2be0: 8f 93 push r24 + 2be2: 87 e2 ldi r24, 0x27 ; 39 + 2be4: 91 e0 ldi r25, 0x01 ; 1 + 2be6: 9f 93 push r25 + 2be8: 8f 93 push r24 + 2bea: 1f 93 push r17 + 2bec: 0f 93 push r16 + 2bee: 0e 94 80 16 call 0x2d00 ; 0x2d00 + 2bf2: 99 81 ldd r25, Y+1 ; 0x01 + 2bf4: 0f 90 pop r0 + 2bf6: 0f 90 pop r0 + 2bf8: 0f 90 pop r0 + 2bfa: 0f 90 pop r0 + 2bfc: 0f 90 pop r0 + 2bfe: 0f 90 pop r0 + 2c00: 99 23 and r25, r25 + 2c02: 59 f0 breq .+22 ; 0x2c1a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1bbe> + 2c04: fe 01 movw r30, r28 + 2c06: 32 96 adiw r30, 0x02 ; 2 + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1< + UDR1 = c; + 2c10: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2c14: 91 91 ld r25, Z+ + 2c16: 91 11 cpse r25, r1 + 2c18: f7 cf rjmp .-18 ; 0x2c08 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv+0x1bac> +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2c1a: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 2c1c: 24 9a sbi 0x04, 4 ; 4 + // TXnRTS Bits als Inputs schalten + mcp2515_write_register( TXRTSCTRL, 0 ); + + // Device zurueck in den normalen Modus versetzten + mcp2515_bit_modify( CANCTRL, 0xE0, 0); + } + 2c1e: e2 96 adiw r28, 0x32 ; 50 + 2c20: 0f b6 in r0, 0x3f ; 63 + 2c22: f8 94 cli + 2c24: de bf out 0x3e, r29 ; 62 + 2c26: 0f be out 0x3f, r0 ; 63 + 2c28: cd bf out 0x3d, r28 ; 61 + 2c2a: df 91 pop r29 + 2c2c: cf 91 pop r28 + 2c2e: 1f 91 pop r17 + 2c30: 0f 91 pop r16 + 2c32: ff 90 pop r15 + 2c34: ef 90 pop r14 + 2c36: 08 95 ret + +00002c38 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC1Ev>: + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + 2c38: 26 e0 ldi r18, 0x06 ; 6 + 2c3a: 20 93 ca 00 sts 0x00CA, r18 + UCSR1B |= /*(1< + UDR1 = c; + 2c5e: 30 93 ce 00 sts 0x00CE, r19 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2c62: 3d 91 ld r19, X+ + 2c64: 31 11 cpse r19, r1 + 2c66: f7 cf rjmp .-18 ; 0x2c56 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC1Ev+0x1e> + 2c68: 22 9a sbi 0x04, 2 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2c6a: 2a 98 cbi 0x05, 2 ; 5 + + 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; } + 2c6c: 22 9a sbi 0x04, 2 ; 4 + 2c6e: 21 9a sbi 0x04, 1 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2c70: 29 98 cbi 0x05, 1 ; 5 + + 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; } + 2c72: 21 9a sbi 0x04, 1 ; 4 + 2c74: 24 9a sbi 0x04, 4 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2c76: 2c 9a sbi 0x05, 4 ; 5 + + 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; } + 2c78: 24 9a sbi 0x04, 4 ; 4 + 2c7a: 23 98 cbi 0x04, 3 ; 4 +namespace avrlib { + + struct portb + { + static uint8_t port() { return PORTB; } + static void port(uint8_t v) { PORTB = v; } + 2c7c: 2b 98 cbi 0x05, 3 ; 5 + 2c7e: 2b 98 cbi 0x05, 3 ; 5 + + 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; } + 2c80: 23 9a sbi 0x04, 3 ; 4 + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + 2c82: 26 e0 ldi r18, 0x06 ; 6 + 2c84: 20 93 ca 00 sts 0x00CA, r18 + UCSR1B |= /*(1< + UDR1 = c; + 2ca2: 30 93 ce 00 sts 0x00CE, r19 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2ca6: 31 91 ld r19, Z+ + 2ca8: 31 11 cpse r19, r1 + 2caa: f7 cf rjmp .-18 ; 0x2c9a <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC1Ev+0x62> + +template +class Can { + public: + Can() { + init_can(); + 2cac: 0c 94 2e 08 jmp 0x105c ; 0x105c <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv> + +00002cb0 <_GLOBAL__sub_I_l>: + 2cb0: 27 9a sbi 0x04, 7 ; 4 + 2cb2: 26 9a sbi 0x04, 6 ; 4 + 2cb4: 25 9a sbi 0x04, 5 ; 4 + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + 2cb6: 86 e0 ldi r24, 0x06 ; 6 + 2cb8: 80 93 ca 00 sts 0x00CA, r24 + UCSR1B |= /*(1< + UDR1 = c; + 2cda: 90 93 ce 00 sts 0x00CE, r25 + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + 2cde: 91 91 ld r25, Z+ + 2ce0: 91 11 cpse r25, r1 + 2ce2: f7 cf rjmp .-18 ; 0x2cd2 <_GLOBAL__sub_I_l+0x22> +///////////////////////// UART //////////////////////////////////// +typedef Uart<9600> uartclass; +uartclass u; +///////////////////////// SPI ///////////////////////////////////// +typedef Spi spiclass; +spiclass s; + 2ce4: 84 e4 ldi r24, 0x44 ; 68 + 2ce6: 91 e0 ldi r25, 0x01 ; 1 + 2ce8: 0e 94 8e 07 call 0xf1c ; 0xf1c <_ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC1Ev> +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; + 2cec: 82 e4 ldi r24, 0x42 ; 66 + 2cee: 91 e0 ldi r25, 0x01 ; 1 + 2cf0: 0c 94 1c 16 jmp 0x2c38 ; 0x2c38 <_ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC1Ev> + +00002cf4 <__tablejump2__>: + 2cf4: ee 0f add r30, r30 + 2cf6: ff 1f adc r31, r31 + +00002cf8 <__tablejump__>: + 2cf8: 05 90 lpm r0, Z+ + 2cfa: f4 91 lpm r31, Z + 2cfc: e0 2d mov r30, r0 + 2cfe: 09 94 ijmp + +00002d00 : + 2d00: ae e0 ldi r26, 0x0E ; 14 + 2d02: b0 e0 ldi r27, 0x00 ; 0 + 2d04: e6 e8 ldi r30, 0x86 ; 134 + 2d06: f6 e1 ldi r31, 0x16 ; 22 + 2d08: 0c 94 39 19 jmp 0x3272 ; 0x3272 <__prologue_saves__+0x1c> + 2d0c: 0d 89 ldd r16, Y+21 ; 0x15 + 2d0e: 1e 89 ldd r17, Y+22 ; 0x16 + 2d10: 86 e0 ldi r24, 0x06 ; 6 + 2d12: 8c 83 std Y+4, r24 ; 0x04 + 2d14: 1a 83 std Y+2, r17 ; 0x02 + 2d16: 09 83 std Y+1, r16 ; 0x01 + 2d18: 8f ef ldi r24, 0xFF ; 255 + 2d1a: 9f e7 ldi r25, 0x7F ; 127 + 2d1c: 9e 83 std Y+6, r25 ; 0x06 + 2d1e: 8d 83 std Y+5, r24 ; 0x05 + 2d20: ce 01 movw r24, r28 + 2d22: 49 96 adiw r24, 0x19 ; 25 + 2d24: ac 01 movw r20, r24 + 2d26: 6f 89 ldd r22, Y+23 ; 0x17 + 2d28: 78 8d ldd r23, Y+24 ; 0x18 + 2d2a: ce 01 movw r24, r28 + 2d2c: 01 96 adiw r24, 0x01 ; 1 + 2d2e: 0e 94 a2 16 call 0x2d44 ; 0x2d44 + 2d32: ef 81 ldd r30, Y+7 ; 0x07 + 2d34: f8 85 ldd r31, Y+8 ; 0x08 + 2d36: e0 0f add r30, r16 + 2d38: f1 1f adc r31, r17 + 2d3a: 10 82 st Z, r1 + 2d3c: 2e 96 adiw r28, 0x0e ; 14 + 2d3e: e4 e0 ldi r30, 0x04 ; 4 + 2d40: 0c 94 55 19 jmp 0x32aa ; 0x32aa <__epilogue_restores__+0x1c> + +00002d44 : + 2d44: ac e0 ldi r26, 0x0C ; 12 + 2d46: b0 e0 ldi r27, 0x00 ; 0 + 2d48: e8 ea ldi r30, 0xA8 ; 168 + 2d4a: f6 e1 ldi r31, 0x16 ; 22 + 2d4c: 0c 94 2b 19 jmp 0x3256 ; 0x3256 <__prologue_saves__> + 2d50: 7c 01 movw r14, r24 + 2d52: 6b 01 movw r12, r22 + 2d54: 8a 01 movw r16, r20 + 2d56: fc 01 movw r30, r24 + 2d58: 17 82 std Z+7, r1 ; 0x07 + 2d5a: 16 82 std Z+6, r1 ; 0x06 + 2d5c: 83 81 ldd r24, Z+3 ; 0x03 + 2d5e: 81 ff sbrs r24, 1 + 2d60: c8 c1 rjmp .+912 ; 0x30f2 + 2d62: 88 24 eor r8, r8 + 2d64: 83 94 inc r8 + 2d66: 91 2c mov r9, r1 + 2d68: 8c 0e add r8, r28 + 2d6a: 9d 1e adc r9, r29 + 2d6c: f7 01 movw r30, r14 + 2d6e: 93 81 ldd r25, Z+3 ; 0x03 + 2d70: f6 01 movw r30, r12 + 2d72: 93 fd sbrc r25, 3 + 2d74: 85 91 lpm r24, Z+ + 2d76: 93 ff sbrs r25, 3 + 2d78: 81 91 ld r24, Z+ + 2d7a: 6f 01 movw r12, r30 + 2d7c: 88 23 and r24, r24 + 2d7e: 09 f4 brne .+2 ; 0x2d82 + 2d80: b4 c1 rjmp .+872 ; 0x30ea + 2d82: 85 32 cpi r24, 0x25 ; 37 + 2d84: 39 f4 brne .+14 ; 0x2d94 + 2d86: 93 fd sbrc r25, 3 + 2d88: 85 91 lpm r24, Z+ + 2d8a: 93 ff sbrs r25, 3 + 2d8c: 81 91 ld r24, Z+ + 2d8e: 6f 01 movw r12, r30 + 2d90: 85 32 cpi r24, 0x25 ; 37 + 2d92: 29 f4 brne .+10 ; 0x2d9e + 2d94: b7 01 movw r22, r14 + 2d96: 90 e0 ldi r25, 0x00 ; 0 + 2d98: 0e 94 96 18 call 0x312c ; 0x312c + 2d9c: e7 cf rjmp .-50 ; 0x2d6c + 2d9e: 51 2c mov r5, r1 + 2da0: 31 2c mov r3, r1 + 2da2: 20 e0 ldi r18, 0x00 ; 0 + 2da4: 20 32 cpi r18, 0x20 ; 32 + 2da6: a8 f4 brcc .+42 ; 0x2dd2 + 2da8: 8b 32 cpi r24, 0x2B ; 43 + 2daa: 61 f0 breq .+24 ; 0x2dc4 + 2dac: 28 f4 brcc .+10 ; 0x2db8 + 2dae: 80 32 cpi r24, 0x20 ; 32 + 2db0: 51 f0 breq .+20 ; 0x2dc6 + 2db2: 83 32 cpi r24, 0x23 ; 35 + 2db4: 71 f4 brne .+28 ; 0x2dd2 + 2db6: 0b c0 rjmp .+22 ; 0x2dce + 2db8: 8d 32 cpi r24, 0x2D ; 45 + 2dba: 39 f0 breq .+14 ; 0x2dca + 2dbc: 80 33 cpi r24, 0x30 ; 48 + 2dbe: 49 f4 brne .+18 ; 0x2dd2 + 2dc0: 21 60 ori r18, 0x01 ; 1 + 2dc2: 2a c0 rjmp .+84 ; 0x2e18 + 2dc4: 22 60 ori r18, 0x02 ; 2 + 2dc6: 24 60 ori r18, 0x04 ; 4 + 2dc8: 27 c0 rjmp .+78 ; 0x2e18 + 2dca: 28 60 ori r18, 0x08 ; 8 + 2dcc: 25 c0 rjmp .+74 ; 0x2e18 + 2dce: 20 61 ori r18, 0x10 ; 16 + 2dd0: 23 c0 rjmp .+70 ; 0x2e18 + 2dd2: 27 fd sbrc r18, 7 + 2dd4: 29 c0 rjmp .+82 ; 0x2e28 + 2dd6: 38 2f mov r19, r24 + 2dd8: 30 53 subi r19, 0x30 ; 48 + 2dda: 3a 30 cpi r19, 0x0A ; 10 + 2ddc: 88 f4 brcc .+34 ; 0x2e00 + 2dde: 26 ff sbrs r18, 6 + 2de0: 07 c0 rjmp .+14 ; 0x2df0 + 2de2: 85 2d mov r24, r5 + 2de4: 6a e0 ldi r22, 0x0A ; 10 + 2de6: 0e 94 22 19 call 0x3244 ; 0x3244 <__mulqi3> + 2dea: 58 2e mov r5, r24 + 2dec: 53 0e add r5, r19 + 2dee: 14 c0 rjmp .+40 ; 0x2e18 + 2df0: 83 2d mov r24, r3 + 2df2: 6a e0 ldi r22, 0x0A ; 10 + 2df4: 0e 94 22 19 call 0x3244 ; 0x3244 <__mulqi3> + 2df8: 38 2e mov r3, r24 + 2dfa: 33 0e add r3, r19 + 2dfc: 20 62 ori r18, 0x20 ; 32 + 2dfe: 0c c0 rjmp .+24 ; 0x2e18 + 2e00: 8e 32 cpi r24, 0x2E ; 46 + 2e02: 21 f4 brne .+8 ; 0x2e0c + 2e04: 26 fd sbrc r18, 6 + 2e06: 71 c1 rjmp .+738 ; 0x30ea + 2e08: 20 64 ori r18, 0x40 ; 64 + 2e0a: 06 c0 rjmp .+12 ; 0x2e18 + 2e0c: 8c 36 cpi r24, 0x6C ; 108 + 2e0e: 11 f4 brne .+4 ; 0x2e14 + 2e10: 20 68 ori r18, 0x80 ; 128 + 2e12: 02 c0 rjmp .+4 ; 0x2e18 + 2e14: 88 36 cpi r24, 0x68 ; 104 + 2e16: 41 f4 brne .+16 ; 0x2e28 + 2e18: f6 01 movw r30, r12 + 2e1a: 93 fd sbrc r25, 3 + 2e1c: 85 91 lpm r24, Z+ + 2e1e: 93 ff sbrs r25, 3 + 2e20: 81 91 ld r24, Z+ + 2e22: 6f 01 movw r12, r30 + 2e24: 81 11 cpse r24, r1 + 2e26: be cf rjmp .-132 ; 0x2da4 + 2e28: 98 2f mov r25, r24 + 2e2a: 95 54 subi r25, 0x45 ; 69 + 2e2c: 93 30 cpi r25, 0x03 ; 3 + 2e2e: 18 f0 brcs .+6 ; 0x2e36 + 2e30: 90 52 subi r25, 0x20 ; 32 + 2e32: 93 30 cpi r25, 0x03 ; 3 + 2e34: 28 f4 brcc .+10 ; 0x2e40 + 2e36: 0c 5f subi r16, 0xFC ; 252 + 2e38: 1f 4f sbci r17, 0xFF ; 255 + 2e3a: ff e3 ldi r31, 0x3F ; 63 + 2e3c: f9 83 std Y+1, r31 ; 0x01 + 2e3e: 0d c0 rjmp .+26 ; 0x2e5a + 2e40: 83 36 cpi r24, 0x63 ; 99 + 2e42: 31 f0 breq .+12 ; 0x2e50 + 2e44: 83 37 cpi r24, 0x73 ; 115 + 2e46: 71 f0 breq .+28 ; 0x2e64 + 2e48: 83 35 cpi r24, 0x53 ; 83 + 2e4a: 09 f0 breq .+2 ; 0x2e4e + 2e4c: 5e c0 rjmp .+188 ; 0x2f0a + 2e4e: 23 c0 rjmp .+70 ; 0x2e96 + 2e50: f8 01 movw r30, r16 + 2e52: 80 81 ld r24, Z + 2e54: 89 83 std Y+1, r24 ; 0x01 + 2e56: 0e 5f subi r16, 0xFE ; 254 + 2e58: 1f 4f sbci r17, 0xFF ; 255 + 2e5a: 44 24 eor r4, r4 + 2e5c: 43 94 inc r4 + 2e5e: 51 2c mov r5, r1 + 2e60: 54 01 movw r10, r8 + 2e62: 15 c0 rjmp .+42 ; 0x2e8e + 2e64: 38 01 movw r6, r16 + 2e66: f2 e0 ldi r31, 0x02 ; 2 + 2e68: 6f 0e add r6, r31 + 2e6a: 71 1c adc r7, r1 + 2e6c: f8 01 movw r30, r16 + 2e6e: a0 80 ld r10, Z + 2e70: b1 80 ldd r11, Z+1 ; 0x01 + 2e72: 26 ff sbrs r18, 6 + 2e74: 03 c0 rjmp .+6 ; 0x2e7c + 2e76: 65 2d mov r22, r5 + 2e78: 70 e0 ldi r23, 0x00 ; 0 + 2e7a: 02 c0 rjmp .+4 ; 0x2e80 + 2e7c: 6f ef ldi r22, 0xFF ; 255 + 2e7e: 7f ef ldi r23, 0xFF ; 255 + 2e80: c5 01 movw r24, r10 + 2e82: 2c 87 std Y+12, r18 ; 0x0c + 2e84: 0e 94 8b 18 call 0x3116 ; 0x3116 + 2e88: 2c 01 movw r4, r24 + 2e8a: 83 01 movw r16, r6 + 2e8c: 2c 85 ldd r18, Y+12 ; 0x0c + 2e8e: 6f e7 ldi r22, 0x7F ; 127 + 2e90: 26 2e mov r2, r22 + 2e92: 22 22 and r2, r18 + 2e94: 18 c0 rjmp .+48 ; 0x2ec6 + 2e96: 38 01 movw r6, r16 + 2e98: f2 e0 ldi r31, 0x02 ; 2 + 2e9a: 6f 0e add r6, r31 + 2e9c: 71 1c adc r7, r1 + 2e9e: f8 01 movw r30, r16 + 2ea0: a0 80 ld r10, Z + 2ea2: b1 80 ldd r11, Z+1 ; 0x01 + 2ea4: 26 ff sbrs r18, 6 + 2ea6: 03 c0 rjmp .+6 ; 0x2eae + 2ea8: 65 2d mov r22, r5 + 2eaa: 70 e0 ldi r23, 0x00 ; 0 + 2eac: 02 c0 rjmp .+4 ; 0x2eb2 + 2eae: 6f ef ldi r22, 0xFF ; 255 + 2eb0: 7f ef ldi r23, 0xFF ; 255 + 2eb2: c5 01 movw r24, r10 + 2eb4: 2c 87 std Y+12, r18 ; 0x0c + 2eb6: 0e 94 80 18 call 0x3100 ; 0x3100 + 2eba: 2c 01 movw r4, r24 + 2ebc: 2c 85 ldd r18, Y+12 ; 0x0c + 2ebe: 50 e8 ldi r21, 0x80 ; 128 + 2ec0: 25 2e mov r2, r21 + 2ec2: 22 2a or r2, r18 + 2ec4: 83 01 movw r16, r6 + 2ec6: 23 fc sbrc r2, 3 + 2ec8: 1c c0 rjmp .+56 ; 0x2f02 + 2eca: 06 c0 rjmp .+12 ; 0x2ed8 + 2ecc: b7 01 movw r22, r14 + 2ece: 80 e2 ldi r24, 0x20 ; 32 + 2ed0: 90 e0 ldi r25, 0x00 ; 0 + 2ed2: 0e 94 96 18 call 0x312c ; 0x312c + 2ed6: 3a 94 dec r3 + 2ed8: 83 2d mov r24, r3 + 2eda: 90 e0 ldi r25, 0x00 ; 0 + 2edc: 48 16 cp r4, r24 + 2ede: 59 06 cpc r5, r25 + 2ee0: a8 f3 brcs .-22 ; 0x2ecc + 2ee2: 0f c0 rjmp .+30 ; 0x2f02 + 2ee4: f5 01 movw r30, r10 + 2ee6: 27 fc sbrc r2, 7 + 2ee8: 85 91 lpm r24, Z+ + 2eea: 27 fe sbrs r2, 7 + 2eec: 81 91 ld r24, Z+ + 2eee: 5f 01 movw r10, r30 + 2ef0: b7 01 movw r22, r14 + 2ef2: 90 e0 ldi r25, 0x00 ; 0 + 2ef4: 0e 94 96 18 call 0x312c ; 0x312c + 2ef8: 31 10 cpse r3, r1 + 2efa: 3a 94 dec r3 + 2efc: f1 e0 ldi r31, 0x01 ; 1 + 2efe: 4f 1a sub r4, r31 + 2f00: 51 08 sbc r5, r1 + 2f02: 41 14 cp r4, r1 + 2f04: 51 04 cpc r5, r1 + 2f06: 71 f7 brne .-36 ; 0x2ee4 + 2f08: ed c0 rjmp .+474 ; 0x30e4 + 2f0a: 84 36 cpi r24, 0x64 ; 100 + 2f0c: 11 f0 breq .+4 ; 0x2f12 + 2f0e: 89 36 cpi r24, 0x69 ; 105 + 2f10: 41 f5 brne .+80 ; 0x2f62 + 2f12: f8 01 movw r30, r16 + 2f14: 27 ff sbrs r18, 7 + 2f16: 07 c0 rjmp .+14 ; 0x2f26 + 2f18: 60 81 ld r22, Z + 2f1a: 71 81 ldd r23, Z+1 ; 0x01 + 2f1c: 82 81 ldd r24, Z+2 ; 0x02 + 2f1e: 93 81 ldd r25, Z+3 ; 0x03 + 2f20: 0c 5f subi r16, 0xFC ; 252 + 2f22: 1f 4f sbci r17, 0xFF ; 255 + 2f24: 08 c0 rjmp .+16 ; 0x2f36 + 2f26: 60 81 ld r22, Z + 2f28: 71 81 ldd r23, Z+1 ; 0x01 + 2f2a: 88 27 eor r24, r24 + 2f2c: 77 fd sbrc r23, 7 + 2f2e: 80 95 com r24 + 2f30: 98 2f mov r25, r24 + 2f32: 0e 5f subi r16, 0xFE ; 254 + 2f34: 1f 4f sbci r17, 0xFF ; 255 + 2f36: 4f e6 ldi r20, 0x6F ; 111 + 2f38: b4 2e mov r11, r20 + 2f3a: b2 22 and r11, r18 + 2f3c: 97 ff sbrs r25, 7 + 2f3e: 09 c0 rjmp .+18 ; 0x2f52 + 2f40: 90 95 com r25 + 2f42: 80 95 com r24 + 2f44: 70 95 com r23 + 2f46: 61 95 neg r22 + 2f48: 7f 4f sbci r23, 0xFF ; 255 + 2f4a: 8f 4f sbci r24, 0xFF ; 255 + 2f4c: 9f 4f sbci r25, 0xFF ; 255 + 2f4e: f0 e8 ldi r31, 0x80 ; 128 + 2f50: bf 2a or r11, r31 + 2f52: 2a e0 ldi r18, 0x0A ; 10 + 2f54: 30 e0 ldi r19, 0x00 ; 0 + 2f56: a4 01 movw r20, r8 + 2f58: 0e 94 c2 18 call 0x3184 ; 0x3184 <__ultoa_invert> + 2f5c: a8 2e mov r10, r24 + 2f5e: a8 18 sub r10, r8 + 2f60: 43 c0 rjmp .+134 ; 0x2fe8 + 2f62: 85 37 cpi r24, 0x75 ; 117 + 2f64: 31 f4 brne .+12 ; 0x2f72 + 2f66: 3f ee ldi r19, 0xEF ; 239 + 2f68: b3 2e mov r11, r19 + 2f6a: b2 22 and r11, r18 + 2f6c: 2a e0 ldi r18, 0x0A ; 10 + 2f6e: 30 e0 ldi r19, 0x00 ; 0 + 2f70: 24 c0 rjmp .+72 ; 0x2fba + 2f72: 99 ef ldi r25, 0xF9 ; 249 + 2f74: b9 2e mov r11, r25 + 2f76: b2 22 and r11, r18 + 2f78: 8f 36 cpi r24, 0x6F ; 111 + 2f7a: b9 f0 breq .+46 ; 0x2faa + 2f7c: 20 f4 brcc .+8 ; 0x2f86 + 2f7e: 88 35 cpi r24, 0x58 ; 88 + 2f80: 09 f0 breq .+2 ; 0x2f84 + 2f82: b3 c0 rjmp .+358 ; 0x30ea + 2f84: 0d c0 rjmp .+26 ; 0x2fa0 + 2f86: 80 37 cpi r24, 0x70 ; 112 + 2f88: 21 f0 breq .+8 ; 0x2f92 + 2f8a: 88 37 cpi r24, 0x78 ; 120 + 2f8c: 09 f0 breq .+2 ; 0x2f90 + 2f8e: ad c0 rjmp .+346 ; 0x30ea + 2f90: 02 c0 rjmp .+4 ; 0x2f96 + 2f92: 20 e1 ldi r18, 0x10 ; 16 + 2f94: b2 2a or r11, r18 + 2f96: b4 fe sbrs r11, 4 + 2f98: 0b c0 rjmp .+22 ; 0x2fb0 + 2f9a: 84 e0 ldi r24, 0x04 ; 4 + 2f9c: b8 2a or r11, r24 + 2f9e: 08 c0 rjmp .+16 ; 0x2fb0 + 2fa0: 24 ff sbrs r18, 4 + 2fa2: 09 c0 rjmp .+18 ; 0x2fb6 + 2fa4: e6 e0 ldi r30, 0x06 ; 6 + 2fa6: be 2a or r11, r30 + 2fa8: 06 c0 rjmp .+12 ; 0x2fb6 + 2faa: 28 e0 ldi r18, 0x08 ; 8 + 2fac: 30 e0 ldi r19, 0x00 ; 0 + 2fae: 05 c0 rjmp .+10 ; 0x2fba + 2fb0: 20 e1 ldi r18, 0x10 ; 16 + 2fb2: 30 e0 ldi r19, 0x00 ; 0 + 2fb4: 02 c0 rjmp .+4 ; 0x2fba + 2fb6: 20 e1 ldi r18, 0x10 ; 16 + 2fb8: 32 e0 ldi r19, 0x02 ; 2 + 2fba: f8 01 movw r30, r16 + 2fbc: b7 fe sbrs r11, 7 + 2fbe: 07 c0 rjmp .+14 ; 0x2fce + 2fc0: 60 81 ld r22, Z + 2fc2: 71 81 ldd r23, Z+1 ; 0x01 + 2fc4: 82 81 ldd r24, Z+2 ; 0x02 + 2fc6: 93 81 ldd r25, Z+3 ; 0x03 + 2fc8: 0c 5f subi r16, 0xFC ; 252 + 2fca: 1f 4f sbci r17, 0xFF ; 255 + 2fcc: 06 c0 rjmp .+12 ; 0x2fda + 2fce: 60 81 ld r22, Z + 2fd0: 71 81 ldd r23, Z+1 ; 0x01 + 2fd2: 80 e0 ldi r24, 0x00 ; 0 + 2fd4: 90 e0 ldi r25, 0x00 ; 0 + 2fd6: 0e 5f subi r16, 0xFE ; 254 + 2fd8: 1f 4f sbci r17, 0xFF ; 255 + 2fda: a4 01 movw r20, r8 + 2fdc: 0e 94 c2 18 call 0x3184 ; 0x3184 <__ultoa_invert> + 2fe0: a8 2e mov r10, r24 + 2fe2: a8 18 sub r10, r8 + 2fe4: ff e7 ldi r31, 0x7F ; 127 + 2fe6: bf 22 and r11, r31 + 2fe8: b6 fe sbrs r11, 6 + 2fea: 0b c0 rjmp .+22 ; 0x3002 + 2fec: 2b 2d mov r18, r11 + 2fee: 2e 7f andi r18, 0xFE ; 254 + 2ff0: a5 14 cp r10, r5 + 2ff2: 50 f4 brcc .+20 ; 0x3008 + 2ff4: b4 fe sbrs r11, 4 + 2ff6: 0a c0 rjmp .+20 ; 0x300c + 2ff8: b2 fc sbrc r11, 2 + 2ffa: 08 c0 rjmp .+16 ; 0x300c + 2ffc: 2b 2d mov r18, r11 + 2ffe: 2e 7e andi r18, 0xEE ; 238 + 3000: 05 c0 rjmp .+10 ; 0x300c + 3002: 7a 2c mov r7, r10 + 3004: 2b 2d mov r18, r11 + 3006: 03 c0 rjmp .+6 ; 0x300e + 3008: 7a 2c mov r7, r10 + 300a: 01 c0 rjmp .+2 ; 0x300e + 300c: 75 2c mov r7, r5 + 300e: 24 ff sbrs r18, 4 + 3010: 0d c0 rjmp .+26 ; 0x302c + 3012: fe 01 movw r30, r28 + 3014: ea 0d add r30, r10 + 3016: f1 1d adc r31, r1 + 3018: 80 81 ld r24, Z + 301a: 80 33 cpi r24, 0x30 ; 48 + 301c: 11 f4 brne .+4 ; 0x3022 + 301e: 29 7e andi r18, 0xE9 ; 233 + 3020: 09 c0 rjmp .+18 ; 0x3034 + 3022: 22 ff sbrs r18, 2 + 3024: 06 c0 rjmp .+12 ; 0x3032 + 3026: 73 94 inc r7 + 3028: 73 94 inc r7 + 302a: 04 c0 rjmp .+8 ; 0x3034 + 302c: 82 2f mov r24, r18 + 302e: 86 78 andi r24, 0x86 ; 134 + 3030: 09 f0 breq .+2 ; 0x3034 + 3032: 73 94 inc r7 + 3034: 23 fd sbrc r18, 3 + 3036: 14 c0 rjmp .+40 ; 0x3060 + 3038: 20 ff sbrs r18, 0 + 303a: 0f c0 rjmp .+30 ; 0x305a + 303c: 5a 2c mov r5, r10 + 303e: 73 14 cp r7, r3 + 3040: 60 f4 brcc .+24 ; 0x305a + 3042: 53 0c add r5, r3 + 3044: 57 18 sub r5, r7 + 3046: 73 2c mov r7, r3 + 3048: 08 c0 rjmp .+16 ; 0x305a + 304a: b7 01 movw r22, r14 + 304c: 80 e2 ldi r24, 0x20 ; 32 + 304e: 90 e0 ldi r25, 0x00 ; 0 + 3050: 2c 87 std Y+12, r18 ; 0x0c + 3052: 0e 94 96 18 call 0x312c ; 0x312c + 3056: 73 94 inc r7 + 3058: 2c 85 ldd r18, Y+12 ; 0x0c + 305a: 73 14 cp r7, r3 + 305c: b0 f3 brcs .-20 ; 0x304a + 305e: 04 c0 rjmp .+8 ; 0x3068 + 3060: 73 14 cp r7, r3 + 3062: 10 f4 brcc .+4 ; 0x3068 + 3064: 37 18 sub r3, r7 + 3066: 01 c0 rjmp .+2 ; 0x306a + 3068: 31 2c mov r3, r1 + 306a: 24 ff sbrs r18, 4 + 306c: 12 c0 rjmp .+36 ; 0x3092 + 306e: b7 01 movw r22, r14 + 3070: 80 e3 ldi r24, 0x30 ; 48 + 3072: 90 e0 ldi r25, 0x00 ; 0 + 3074: 2c 87 std Y+12, r18 ; 0x0c + 3076: 0e 94 96 18 call 0x312c ; 0x312c + 307a: 2c 85 ldd r18, Y+12 ; 0x0c + 307c: 22 ff sbrs r18, 2 + 307e: 1e c0 rjmp .+60 ; 0x30bc + 3080: 21 ff sbrs r18, 1 + 3082: 03 c0 rjmp .+6 ; 0x308a + 3084: 88 e5 ldi r24, 0x58 ; 88 + 3086: 90 e0 ldi r25, 0x00 ; 0 + 3088: 02 c0 rjmp .+4 ; 0x308e + 308a: 88 e7 ldi r24, 0x78 ; 120 + 308c: 90 e0 ldi r25, 0x00 ; 0 + 308e: b7 01 movw r22, r14 + 3090: 0c c0 rjmp .+24 ; 0x30aa + 3092: 82 2f mov r24, r18 + 3094: 86 78 andi r24, 0x86 ; 134 + 3096: 91 f0 breq .+36 ; 0x30bc + 3098: 21 fd sbrc r18, 1 + 309a: 02 c0 rjmp .+4 ; 0x30a0 + 309c: 80 e2 ldi r24, 0x20 ; 32 + 309e: 01 c0 rjmp .+2 ; 0x30a2 + 30a0: 8b e2 ldi r24, 0x2B ; 43 + 30a2: 27 fd sbrc r18, 7 + 30a4: 8d e2 ldi r24, 0x2D ; 45 + 30a6: b7 01 movw r22, r14 + 30a8: 90 e0 ldi r25, 0x00 ; 0 + 30aa: 0e 94 96 18 call 0x312c ; 0x312c + 30ae: 06 c0 rjmp .+12 ; 0x30bc + 30b0: b7 01 movw r22, r14 + 30b2: 80 e3 ldi r24, 0x30 ; 48 + 30b4: 90 e0 ldi r25, 0x00 ; 0 + 30b6: 0e 94 96 18 call 0x312c ; 0x312c + 30ba: 5a 94 dec r5 + 30bc: a5 14 cp r10, r5 + 30be: c0 f3 brcs .-16 ; 0x30b0 + 30c0: aa 94 dec r10 + 30c2: f4 01 movw r30, r8 + 30c4: ea 0d add r30, r10 + 30c6: f1 1d adc r31, r1 + 30c8: b7 01 movw r22, r14 + 30ca: 80 81 ld r24, Z + 30cc: 90 e0 ldi r25, 0x00 ; 0 + 30ce: 0e 94 96 18 call 0x312c ; 0x312c + 30d2: a1 10 cpse r10, r1 + 30d4: f5 cf rjmp .-22 ; 0x30c0 + 30d6: 06 c0 rjmp .+12 ; 0x30e4 + 30d8: b7 01 movw r22, r14 + 30da: 80 e2 ldi r24, 0x20 ; 32 + 30dc: 90 e0 ldi r25, 0x00 ; 0 + 30de: 0e 94 96 18 call 0x312c ; 0x312c + 30e2: 3a 94 dec r3 + 30e4: 31 10 cpse r3, r1 + 30e6: f8 cf rjmp .-16 ; 0x30d8 + 30e8: 41 ce rjmp .-894 ; 0x2d6c + 30ea: f7 01 movw r30, r14 + 30ec: 26 81 ldd r18, Z+6 ; 0x06 + 30ee: 37 81 ldd r19, Z+7 ; 0x07 + 30f0: 02 c0 rjmp .+4 ; 0x30f6 + 30f2: 2f ef ldi r18, 0xFF ; 255 + 30f4: 3f ef ldi r19, 0xFF ; 255 + 30f6: c9 01 movw r24, r18 + 30f8: 2c 96 adiw r28, 0x0c ; 12 + 30fa: e2 e1 ldi r30, 0x12 ; 18 + 30fc: 0c 94 47 19 jmp 0x328e ; 0x328e <__epilogue_restores__> + +00003100 : + 3100: fc 01 movw r30, r24 + 3102: 05 90 lpm r0, Z+ + 3104: 61 50 subi r22, 0x01 ; 1 + 3106: 70 40 sbci r23, 0x00 ; 0 + 3108: 01 10 cpse r0, r1 + 310a: d8 f7 brcc .-10 ; 0x3102 + 310c: 80 95 com r24 + 310e: 90 95 com r25 + 3110: 8e 0f add r24, r30 + 3112: 9f 1f adc r25, r31 + 3114: 08 95 ret + +00003116 : + 3116: fc 01 movw r30, r24 + 3118: 61 50 subi r22, 0x01 ; 1 + 311a: 70 40 sbci r23, 0x00 ; 0 + 311c: 01 90 ld r0, Z+ + 311e: 01 10 cpse r0, r1 + 3120: d8 f7 brcc .-10 ; 0x3118 + 3122: 80 95 com r24 + 3124: 90 95 com r25 + 3126: 8e 0f add r24, r30 + 3128: 9f 1f adc r25, r31 + 312a: 08 95 ret + +0000312c : + 312c: 0f 93 push r16 + 312e: 1f 93 push r17 + 3130: cf 93 push r28 + 3132: df 93 push r29 + 3134: 8c 01 movw r16, r24 + 3136: eb 01 movw r28, r22 + 3138: 8b 81 ldd r24, Y+3 ; 0x03 + 313a: 81 fd sbrc r24, 1 + 313c: 03 c0 rjmp .+6 ; 0x3144 + 313e: 0f ef ldi r16, 0xFF ; 255 + 3140: 1f ef ldi r17, 0xFF ; 255 + 3142: 1a c0 rjmp .+52 ; 0x3178 + 3144: 82 ff sbrs r24, 2 + 3146: 0d c0 rjmp .+26 ; 0x3162 + 3148: 2e 81 ldd r18, Y+6 ; 0x06 + 314a: 3f 81 ldd r19, Y+7 ; 0x07 + 314c: 8c 81 ldd r24, Y+4 ; 0x04 + 314e: 9d 81 ldd r25, Y+5 ; 0x05 + 3150: 28 17 cp r18, r24 + 3152: 39 07 cpc r19, r25 + 3154: 64 f4 brge .+24 ; 0x316e + 3156: e8 81 ld r30, Y + 3158: f9 81 ldd r31, Y+1 ; 0x01 + 315a: 01 93 st Z+, r16 + 315c: f9 83 std Y+1, r31 ; 0x01 + 315e: e8 83 st Y, r30 + 3160: 06 c0 rjmp .+12 ; 0x316e + 3162: e8 85 ldd r30, Y+8 ; 0x08 + 3164: f9 85 ldd r31, Y+9 ; 0x09 + 3166: 80 2f mov r24, r16 + 3168: 09 95 icall + 316a: 89 2b or r24, r25 + 316c: 41 f7 brne .-48 ; 0x313e + 316e: 8e 81 ldd r24, Y+6 ; 0x06 + 3170: 9f 81 ldd r25, Y+7 ; 0x07 + 3172: 01 96 adiw r24, 0x01 ; 1 + 3174: 9f 83 std Y+7, r25 ; 0x07 + 3176: 8e 83 std Y+6, r24 ; 0x06 + 3178: c8 01 movw r24, r16 + 317a: df 91 pop r29 + 317c: cf 91 pop r28 + 317e: 1f 91 pop r17 + 3180: 0f 91 pop r16 + 3182: 08 95 ret + +00003184 <__ultoa_invert>: + 3184: fa 01 movw r30, r20 + 3186: aa 27 eor r26, r26 + 3188: 28 30 cpi r18, 0x08 ; 8 + 318a: 61 f1 breq .+88 ; 0x31e4 <__ultoa_invert+0x60> + 318c: 20 31 cpi r18, 0x10 ; 16 + 318e: 91 f1 breq .+100 ; 0x31f4 <__ultoa_invert+0x70> + 3190: e8 94 clt + 3192: 6f 93 push r22 + 3194: 6e 7f andi r22, 0xFE ; 254 + 3196: 6e 5f subi r22, 0xFE ; 254 + 3198: 7f 4f sbci r23, 0xFF ; 255 + 319a: 8f 4f sbci r24, 0xFF ; 255 + 319c: 9f 4f sbci r25, 0xFF ; 255 + 319e: af 4f sbci r26, 0xFF ; 255 + 31a0: b1 e0 ldi r27, 0x01 ; 1 + 31a2: 40 d0 rcall .+128 ; 0x3224 <__ultoa_invert+0xa0> + 31a4: b4 e0 ldi r27, 0x04 ; 4 + 31a6: 3e d0 rcall .+124 ; 0x3224 <__ultoa_invert+0xa0> + 31a8: 67 0f add r22, r23 + 31aa: 78 1f adc r23, r24 + 31ac: 89 1f adc r24, r25 + 31ae: 9a 1f adc r25, r26 + 31b0: a1 1d adc r26, r1 + 31b2: 68 0f add r22, r24 + 31b4: 79 1f adc r23, r25 + 31b6: 8a 1f adc r24, r26 + 31b8: 91 1d adc r25, r1 + 31ba: a1 1d adc r26, r1 + 31bc: 6a 0f add r22, r26 + 31be: 71 1d adc r23, r1 + 31c0: 81 1d adc r24, r1 + 31c2: 91 1d adc r25, r1 + 31c4: a1 1d adc r26, r1 + 31c6: 22 d0 rcall .+68 ; 0x320c <__ultoa_invert+0x88> + 31c8: 09 f4 brne .+2 ; 0x31cc <__ultoa_invert+0x48> + 31ca: 68 94 set + 31cc: 3f 91 pop r19 + 31ce: 06 2e mov r0, r22 + 31d0: 00 0c add r0, r0 + 31d2: 30 19 sub r19, r0 + 31d4: 00 0c add r0, r0 + 31d6: 00 0c add r0, r0 + 31d8: 30 19 sub r19, r0 + 31da: 30 5d subi r19, 0xD0 ; 208 + 31dc: 31 93 st Z+, r19 + 31de: ce f6 brtc .-78 ; 0x3192 <__ultoa_invert+0xe> + 31e0: cf 01 movw r24, r30 + 31e2: 08 95 ret + 31e4: 46 2f mov r20, r22 + 31e6: 47 70 andi r20, 0x07 ; 7 + 31e8: 40 5d subi r20, 0xD0 ; 208 + 31ea: 41 93 st Z+, r20 + 31ec: b3 e0 ldi r27, 0x03 ; 3 + 31ee: 0f d0 rcall .+30 ; 0x320e <__ultoa_invert+0x8a> + 31f0: c9 f7 brne .-14 ; 0x31e4 <__ultoa_invert+0x60> + 31f2: f6 cf rjmp .-20 ; 0x31e0 <__ultoa_invert+0x5c> + 31f4: 46 2f mov r20, r22 + 31f6: 4f 70 andi r20, 0x0F ; 15 + 31f8: 40 5d subi r20, 0xD0 ; 208 + 31fa: 4a 33 cpi r20, 0x3A ; 58 + 31fc: 18 f0 brcs .+6 ; 0x3204 <__ultoa_invert+0x80> + 31fe: 49 5d subi r20, 0xD9 ; 217 + 3200: 31 fd sbrc r19, 1 + 3202: 40 52 subi r20, 0x20 ; 32 + 3204: 41 93 st Z+, r20 + 3206: 02 d0 rcall .+4 ; 0x320c <__ultoa_invert+0x88> + 3208: a9 f7 brne .-22 ; 0x31f4 <__ultoa_invert+0x70> + 320a: ea cf rjmp .-44 ; 0x31e0 <__ultoa_invert+0x5c> + 320c: b4 e0 ldi r27, 0x04 ; 4 + 320e: a6 95 lsr r26 + 3210: 97 95 ror r25 + 3212: 87 95 ror r24 + 3214: 77 95 ror r23 + 3216: 67 95 ror r22 + 3218: ba 95 dec r27 + 321a: c9 f7 brne .-14 ; 0x320e <__ultoa_invert+0x8a> + 321c: 00 97 sbiw r24, 0x00 ; 0 + 321e: 61 05 cpc r22, r1 + 3220: 71 05 cpc r23, r1 + 3222: 08 95 ret + 3224: 9b 01 movw r18, r22 + 3226: ac 01 movw r20, r24 + 3228: 0a 2e mov r0, r26 + 322a: 06 94 lsr r0 + 322c: 57 95 ror r21 + 322e: 47 95 ror r20 + 3230: 37 95 ror r19 + 3232: 27 95 ror r18 + 3234: ba 95 dec r27 + 3236: c9 f7 brne .-14 ; 0x322a <__ultoa_invert+0xa6> + 3238: 62 0f add r22, r18 + 323a: 73 1f adc r23, r19 + 323c: 84 1f adc r24, r20 + 323e: 95 1f adc r25, r21 + 3240: a0 1d adc r26, r0 + 3242: 08 95 ret + +00003244 <__mulqi3>: + 3244: 00 24 eor r0, r0 + +00003246 <__mulqi3_loop>: + 3246: 80 fd sbrc r24, 0 + 3248: 06 0e add r0, r22 + 324a: 66 0f add r22, r22 + 324c: 11 f0 breq .+4 ; 0x3252 <__mulqi3_exit> + 324e: 86 95 lsr r24 + 3250: d1 f7 brne .-12 ; 0x3246 <__mulqi3_loop> + +00003252 <__mulqi3_exit>: + 3252: 80 2d mov r24, r0 + 3254: 08 95 ret + +00003256 <__prologue_saves__>: + 3256: 2f 92 push r2 + 3258: 3f 92 push r3 + 325a: 4f 92 push r4 + 325c: 5f 92 push r5 + 325e: 6f 92 push r6 + 3260: 7f 92 push r7 + 3262: 8f 92 push r8 + 3264: 9f 92 push r9 + 3266: af 92 push r10 + 3268: bf 92 push r11 + 326a: cf 92 push r12 + 326c: df 92 push r13 + 326e: ef 92 push r14 + 3270: ff 92 push r15 + 3272: 0f 93 push r16 + 3274: 1f 93 push r17 + 3276: cf 93 push r28 + 3278: df 93 push r29 + 327a: cd b7 in r28, 0x3d ; 61 + 327c: de b7 in r29, 0x3e ; 62 + 327e: ca 1b sub r28, r26 + 3280: db 0b sbc r29, r27 + 3282: 0f b6 in r0, 0x3f ; 63 + 3284: f8 94 cli + 3286: de bf out 0x3e, r29 ; 62 + 3288: 0f be out 0x3f, r0 ; 63 + 328a: cd bf out 0x3d, r28 ; 61 + 328c: 09 94 ijmp + +0000328e <__epilogue_restores__>: + 328e: 2a 88 ldd r2, Y+18 ; 0x12 + 3290: 39 88 ldd r3, Y+17 ; 0x11 + 3292: 48 88 ldd r4, Y+16 ; 0x10 + 3294: 5f 84 ldd r5, Y+15 ; 0x0f + 3296: 6e 84 ldd r6, Y+14 ; 0x0e + 3298: 7d 84 ldd r7, Y+13 ; 0x0d + 329a: 8c 84 ldd r8, Y+12 ; 0x0c + 329c: 9b 84 ldd r9, Y+11 ; 0x0b + 329e: aa 84 ldd r10, Y+10 ; 0x0a + 32a0: b9 84 ldd r11, Y+9 ; 0x09 + 32a2: c8 84 ldd r12, Y+8 ; 0x08 + 32a4: df 80 ldd r13, Y+7 ; 0x07 + 32a6: ee 80 ldd r14, Y+6 ; 0x06 + 32a8: fd 80 ldd r15, Y+5 ; 0x05 + 32aa: 0c 81 ldd r16, Y+4 ; 0x04 + 32ac: 1b 81 ldd r17, Y+3 ; 0x03 + 32ae: aa 81 ldd r26, Y+2 ; 0x02 + 32b0: b9 81 ldd r27, Y+1 ; 0x01 + 32b2: ce 0f add r28, r30 + 32b4: d1 1d adc r29, r1 + 32b6: 0f b6 in r0, 0x3f ; 63 + 32b8: f8 94 cli + 32ba: de bf out 0x3e, r29 ; 62 + 32bc: 0f be out 0x3f, r0 ; 63 + 32be: cd bf out 0x3d, r28 ; 61 + 32c0: ed 01 movw r28, r26 + 32c2: 08 95 ret + +000032c4 <_exit>: + 32c4: f8 94 cli + +000032c6 <__stop_program>: + 32c6: ff cf rjmp .-2 ; 0x32c6 <__stop_program> diff --git a/Mainboard/Mainboard/Debug/Mainboard.map b/Mainboard/Mainboard/Debug/Mainboard.map index 345a2cb..910eeb8 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.map +++ b/Mainboard/Mainboard/Debug/Mainboard.map @@ -10,31 +10,43 @@ c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu- Mainboard.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/avr35\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/avr35\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/avr35\libc.a(sprintf.o) + Mainboard.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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\libgcc.a(_mulqi3.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/avr35\libc.a(vfprintf_std.o) (__mulqi3) +c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\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/avr35\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/avr35\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/avr35\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/avr35/crtm32u2.o - .text 0x00000000 0x0 Can.o - .bss 0x00000000 0x0 Can.o - .text._ZN3Can21mcp2515_read_registerEh - 0x00000000 0x42 Can.o - .text._ZN3Can16can_send_messageEP10CANMessage - 0x00000000 0x154 Can.o - .text 0x00000000 0x0 Led.o - .bss 0x00000000 0x0 Led.o + .group 0x00000000 0x8 Mainboard.o + .group 0x00000000 0x8 Mainboard.o + .group 0x00000000 0x8 Mainboard.o + .group 0x00000000 0x8 Mainboard.o .text 0x00000000 0x0 Mainboard.o - .text 0x00000000 0x0 Rs232.o - .bss 0x00000000 0x0 Rs232.o - .text._ZN5Rs23212uart_putcharEh - 0x00000000 0x10 Rs232.o - .text._ZN5Rs2324initEv - 0x00000000 0x18 Rs232.o - .text 0x00000000 0x0 Spi.o - .bss 0x00000000 0x0 Spi.o - .text._ZN3Spi8init_spiEv - 0x00000000 0xa Spi.o - .text._ZN3Spi9send_hardEh - 0x00000000 0xc Spi.o + .text._ZN6avrlib3pinINS_5portbELh5EE3setEb.part.4 + 0x00000000 0x4 Mainboard.o + .text._ZN6avrlib3pinINS_5portbELh6EE3setEb.part.6 + 0x00000000 0x4 Mainboard.o + .text._ZN6avrlib3pinINS_5portbELh7EE3setEb.part.9 + 0x00000000 0x4 Mainboard.o + .text._ZN6avrlib3pinINS_5portbELh4EE3setEb.part.12 + 0x00000000 0x4 Mainboard.o + .text._ZN6avrlib3pinINS_5portbELh1EE3setEb.part.19 + 0x00000000 0x4 Mainboard.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/avr35\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/avr35\libgcc.a(_exit.o) .text.libgcc.mul @@ -99,6 +111,51 @@ 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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\libgcc.a(_mulqi3.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/avr35\libgcc.a(_mulqi3.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/avr35\libgcc.a(_mulqi3.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/avr35\libgcc.a(_mulqi3.o) + .text.libgcc.prologue + 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/avr35\libgcc.a(_mulqi3.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/avr35\libgcc.a(_mulqi3.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/avr35\libgcc.a(_mulqi3.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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\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/avr35\libgcc.a(_epilogue.o) Memory Configuration @@ -116,11 +173,7 @@ Linker script and memory map Address of section .data set to 0x800100 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/avr35/crtm32u2.o -LOAD Can.o -LOAD Led.o LOAD Mainboard.o -LOAD Rs232.o -LOAD Spi.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/avr35\libm.a END GROUP @@ -220,7 +273,7 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .rela.plt *(.rela.plt) -.text 0x00000000 0x5a4 +.text 0x00000000 0x32c8 *(.vectors) .vectors 0x00000000 0x74 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/avr35/crtm32u2.o 0x00000000 __vector_default @@ -310,67 +363,60 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 0x000000c6 __vector_20 0x000000ca . = ALIGN (0x2) *(.text.*) - .text._ZN3Can22mcp2515_write_registerEhh - 0x000000ca 0x50 Can.o - 0x000000ca _ZN3Can22mcp2515_write_registerEhh - .text._ZN3Can8init_canEv - 0x0000011a 0xee Can.o - 0x0000011a _ZN3Can8init_canEv - .text._ZN3CanC2E3Spi - 0x00000208 0x8 Can.o - 0x00000208 _ZN3CanC2E3Spi - 0x00000208 _ZN3CanC1E3Spi - .text._ZN3Can18mcp2515_bit_modifyEhhh - 0x00000210 0x60 Can.o - 0x00000210 _ZN3Can18mcp2515_bit_modifyEhhh - .text._ZN3Can22mcp2515_read_rx_statusEv - 0x00000270 0x40 Can.o - 0x00000270 _ZN3Can22mcp2515_read_rx_statusEv - .text._ZN3Can15can_get_messageEP10CANMessage - 0x000002b0 0x142 Can.o - 0x000002b0 _ZN3Can15can_get_messageEP10CANMessage .text.startup.main - 0x000003f2 0x8e Mainboard.o - 0x000003f2 main + 0x000000ca 0xe52 Mainboard.o + 0x000000ca main + .text._ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC2Ev + 0x00000f1c 0x4a Mainboard.o + 0x00000f1c _ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC2Ev + 0x00000f1c _ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEEC1Ev + .text._ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh + 0x00000f66 0xf6 Mainboard.o + 0x00000f66 _ZN3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEE4sendEh + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv + 0x0000105c 0x1bdc Mainboard.o + 0x0000105c _ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_E8init_canEv + .text._ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC2Ev + 0x00002c38 0x78 Mainboard.o + 0x00002c38 _ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC2Ev + 0x00002c38 _ZN3CanI3SpiIN6avrlib5portbELi4ELi3ELi2ELi1ELi1E4UartILm9600EEES4_EC1Ev .text.startup._GLOBAL__sub_I_l - 0x00000480 0x34 Mainboard.o - .text._ZN5Rs232C2Ev - 0x000004b4 0x18 Rs232.o - 0x000004b4 _ZN5Rs232C2Ev - 0x000004b4 _ZN5Rs232C1Ev - .text._ZN5Rs2324sendEPKc - 0x000004cc 0x1e Rs232.o - 0x000004cc _ZN5Rs2324sendEPKc - .text._ZN3Spi9init_portEv - 0x000004ea 0x1c Spi.o - 0x000004ea _ZN3Spi9init_portEv - .text._ZN3Spi4initEv - 0x00000506 0x1e Spi.o - 0x00000506 _ZN3Spi4initEv - .text._ZN3SpiC2Eh - 0x00000524 0xa Spi.o - 0x00000524 _ZN3SpiC1Eh - 0x00000524 _ZN3SpiC2Eh - .text._ZN3Spi5CSOffEv - 0x0000052e 0x6 Spi.o - 0x0000052e _ZN3Spi5CSOffEv - .text._ZN3Spi4CSOnEv - 0x00000534 0x6 Spi.o - 0x00000534 _ZN3Spi4CSOnEv - .text._ZN3Spi9send_softEh - 0x0000053a 0x42 Spi.o - 0x0000053a _ZN3Spi9send_softEh - .text._ZN3Spi4sendEh - 0x0000057c 0x18 Spi.o - 0x0000057c _ZN3Spi4sendEh - .text.libgcc 0x00000594 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/avr35\libgcc.a(_tablejump.o) - 0x00000594 __tablejump2__ - 0x00000598 __tablejump__ - 0x000005a0 . = ALIGN (0x2) + 0x00002cb0 0x44 Mainboard.o + .text.libgcc 0x00002cf4 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/avr35\libgcc.a(_tablejump.o) + 0x00002cf4 __tablejump2__ + 0x00002cf8 __tablejump__ + .text.avr-libc + 0x00002d00 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/avr35\libc.a(sprintf.o) + 0x00002d00 sprintf + .text.avr-libc + 0x00002d44 0x3bc 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/avr35\libc.a(vfprintf_std.o) + 0x00002d44 vfprintf + .text.avr-libc + 0x00003100 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/avr35\libc.a(strnlen_P.o) + 0x00003100 strnlen_P + .text.avr-libc + 0x00003116 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/avr35\libc.a(strnlen.o) + 0x00003116 strnlen + .text.avr-libc + 0x0000312c 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/avr35\libc.a(fputc.o) + 0x0000312c fputc + .text.avr-libc + 0x00003184 0xc0 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/avr35\libc.a(ultoa_invert.o) + 0x00003184 __ultoa_invert + .text.libgcc.mul + 0x00003244 0x12 c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8-gnu-toolchain/bin/../lib/gcc/avr/4.7.2/avr35\libgcc.a(_mulqi3.o) + 0x00003244 __mulqi3 + .text.libgcc.prologue + 0x00003256 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/avr35\libgcc.a(_prologue.o) + 0x00003256 __prologue_saves__ + .text.libgcc.prologue + 0x0000328e 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/avr35\libgcc.a(_epilogue.o) + 0x0000328e __epilogue_restores__ + 0x000032c4 . = ALIGN (0x2) *(.fini9) - .fini9 0x000005a0 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/avr35\libgcc.a(_exit.o) - 0x000005a0 _exit - 0x000005a0 exit + .fini9 0x000032c4 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/avr35\libgcc.a(_exit.o) + 0x000032c4 _exit + 0x000032c4 exit *(.fini9) *(.fini8) *(.fini8) @@ -389,54 +435,60 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 *(.fini1) *(.fini1) *(.fini0) - .fini0 0x000005a0 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/avr35\libgcc.a(_exit.o) + .fini0 0x000032c4 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/avr35\libgcc.a(_exit.o) *(.fini0) - 0x000005a4 _etext = . + 0x000032c8 _etext = . -.data 0x00800100 0x6 load address 0x000005a4 +.data 0x00800100 0x42 load address 0x000032c8 0x00800100 PROVIDE (__data_start, .) *(.data) .data 0x00800100 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/avr35/crtm32u2.o - .data 0x00800100 0x0 Can.o - .data 0x00800100 0x0 Led.o .data 0x00800100 0x0 Mainboard.o - .data 0x00800100 0x0 Rs232.o - .data 0x00800100 0x0 Spi.o .data 0x00800100 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/avr35\libgcc.a(_exit.o) .data 0x00800100 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/avr35\libgcc.a(_copy_data.o) .data 0x00800100 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/avr35\libgcc.a(_clear_bss.o) .data 0x00800100 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/avr35\libgcc.a(_ctors.o) .data 0x00800100 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/avr35\libgcc.a(_tablejump.o) + .data 0x00800100 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/avr35\libc.a(sprintf.o) + .data 0x00800100 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/avr35\libc.a(vfprintf_std.o) + .data 0x00800100 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/avr35\libc.a(strnlen_P.o) + .data 0x00800100 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/avr35\libc.a(strnlen.o) + .data 0x00800100 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/avr35\libc.a(fputc.o) + .data 0x00800100 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/avr35\libc.a(ultoa_invert.o) + .data 0x00800100 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/avr35\libgcc.a(_mulqi3.o) + .data 0x00800100 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/avr35\libgcc.a(_prologue.o) + .data 0x00800100 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/avr35\libgcc.a(_epilogue.o) *(.data*) *(.rodata) *(.rodata*) .rodata.str1.1 - 0x00800100 0x5 Mainboard.o + 0x00800100 0x41 Mainboard.o *(.gnu.linkonce.d*) - 0x00800106 . = ALIGN (0x2) - *fill* 0x00800105 0x1 - 0x00800106 _edata = . - 0x00800106 PROVIDE (__data_end, .) + 0x00800142 . = ALIGN (0x2) + *fill* 0x00800141 0x1 + 0x00800142 _edata = . + 0x00800142 PROVIDE (__data_end, .) -.bss 0x00800106 0x3 - 0x00800106 PROVIDE (__bss_start, .) +.bss 0x00800142 0x5 + 0x00800142 PROVIDE (__bss_start, .) *(.bss) - .bss 0x00800106 0x3 Mainboard.o - 0x00800106 c - 0x00800107 r - 0x00800108 l + .bss 0x00800142 0x5 Mainboard.o + 0x00800142 c + 0x00800144 s + 0x00800145 u + 0x00800146 l *(.bss*) *(COMMON) - 0x00800109 PROVIDE (__bss_end, .) - 0x000005a4 __data_load_start = LOADADDR (.data) - 0x000005aa __data_load_end = (__data_load_start + SIZEOF (.data)) + 0x00800147 PROVIDE (__bss_end, .) + 0x000032c8 __data_load_start = LOADADDR (.data) + 0x0000330a __data_load_end = (__data_load_start + SIZEOF (.data)) -.noinit 0x00800109 0x0 - 0x00800109 PROVIDE (__noinit_start, .) +.noinit 0x00800147 0x0 + 0x00800147 PROVIDE (__noinit_start, .) *(.noinit*) - 0x00800109 PROVIDE (__noinit_end, .) - 0x00800109 _end = . - 0x00800109 PROVIDE (__heap_start, .) + 0x00800147 PROVIDE (__noinit_end, .) + 0x00800147 _end = . + 0x00800147 PROVIDE (__heap_start, .) .eeprom 0x00810000 0x0 *(.eeprom*) @@ -457,13 +509,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 0xc9c *(.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/avr35/crtm32u2.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/avr35\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/avr35\libc.a(strnlen.o) + 0xa8 (size before relaxing) + .stab 0x00000804 0x498 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/avr35\libc.a(ultoa_invert.o) + 0x4a4 (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/avr35/crtm32u2.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/avr35/crtm32u2.o .stab.excl *(.stab.excl) @@ -479,12 +537,11 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .comment 0x00000000 0x2f *(.comment) - .comment 0x00000000 0x2f Can.o + .comment 0x00000000 0x2f Mainboard.o 0x30 (size before relaxing) - .comment 0x00000000 0x30 Led.o - .comment 0x00000000 0x30 Mainboard.o - .comment 0x00000000 0x30 Rs232.o - .comment 0x00000000 0x30 Spi.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/avr35\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/avr35\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/avr35\libc.a(fputc.o) .debug *(.debug) @@ -498,73 +555,66 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_sfnames *(.debug_sfnames) -.debug_aranges 0x00000000 0x130 +.debug_aranges 0x00000000 0xd0 *(.debug_aranges) .debug_aranges - 0x00000000 0x58 Can.o + 0x00000000 0x70 Mainboard.o .debug_aranges - 0x00000058 0x18 Led.o + 0x00000070 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/avr35\libc.a(sprintf.o) .debug_aranges - 0x00000070 0x28 Mainboard.o + 0x00000090 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/avr35\libc.a(vfprintf_std.o) .debug_aranges - 0x00000098 0x38 Rs232.o - .debug_aranges - 0x000000d0 0x60 Spi.o + 0x000000b0 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/avr35\libc.a(fputc.o) .debug_pubnames *(.debug_pubnames) -.debug_info 0x00000000 0x31fa +.debug_info 0x00000000 0x15054 *(.debug_info) - .debug_info 0x00000000 0xdec Can.o - .debug_info 0x00000dec 0x5d Led.o - .debug_info 0x00000e49 0xf68 Mainboard.o - .debug_info 0x00001db1 0x27a Rs232.o - .debug_info 0x0000202b 0x11cf Spi.o + .debug_info 0x00000000 0x14793 Mainboard.o + .debug_info 0x00014793 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/avr35\libc.a(sprintf.o) + .debug_info 0x00014997 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/avr35\libc.a(vfprintf_std.o) + .debug_info 0x00014ee0 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/avr35\libc.a(fputc.o) *(.gnu.linkonce.wi.*) -.debug_abbrev 0x00000000 0xc55 +.debug_abbrev 0x00000000 0x909 *(.debug_abbrev) - .debug_abbrev 0x00000000 0x354 Can.o - .debug_abbrev 0x00000354 0x31 Led.o - .debug_abbrev 0x00000385 0x414 Mainboard.o - .debug_abbrev 0x00000799 0x15b Rs232.o - .debug_abbrev 0x000008f4 0x361 Spi.o + .debug_abbrev 0x00000000 0x518 Mainboard.o + .debug_abbrev 0x00000518 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/avr35\libc.a(sprintf.o) + .debug_abbrev 0x00000642 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/avr35\libc.a(vfprintf_std.o) + .debug_abbrev 0x00000818 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/avr35\libc.a(fputc.o) -.debug_line 0x00000000 0x88d +.debug_line 0x00000000 0x2342 *(.debug_line) - .debug_line 0x00000000 0x2be Can.o - .debug_line 0x000002be 0x2c Led.o - .debug_line 0x000002ea 0x1f6 Mainboard.o - .debug_line 0x000004e0 0x122 Rs232.o - .debug_line 0x00000602 0x28b Spi.o + .debug_line 0x00000000 0x1e1c Mainboard.o + .debug_line 0x00001e1c 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/avr35\libc.a(sprintf.o) + .debug_line 0x00001f6a 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/avr35\libc.a(vfprintf_std.o) + .debug_line 0x00002268 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/avr35\libc.a(fputc.o) -.debug_frame 0x00000000 0x2d8 +.debug_frame 0x00000000 0x1c8 *(.debug_frame) - .debug_frame 0x00000000 0x180 Can.o - .debug_frame 0x00000180 0x54 Mainboard.o - .debug_frame 0x000001d4 0x54 Rs232.o - .debug_frame 0x00000228 0xb0 Spi.o + .debug_frame 0x00000000 0x114 Mainboard.o + .debug_frame 0x00000114 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/avr35\libc.a(sprintf.o) + .debug_frame 0x00000144 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/avr35\libc.a(vfprintf_std.o) + .debug_frame 0x00000190 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/avr35\libc.a(fputc.o) -.debug_str 0x00000000 0xf02 +.debug_str 0x00000000 0x143d *(.debug_str) - .debug_str 0x00000000 0x38b Can.o - 0x3e3 (size before relaxing) - .debug_str 0x0000038b 0xd Led.o - 0xc7 (size before relaxing) - .debug_str 0x00000398 0x618 Mainboard.o - 0x9d0 (size before relaxing) - .debug_str 0x000009b0 0x22 Rs232.o - 0x14b (size before relaxing) - .debug_str 0x000009d2 0x530 Spi.o - 0x757 (size before relaxing) + .debug_str 0x00000000 0x128e Mainboard.o + 0x12fc (size before relaxing) + .debug_str 0x0000128e 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/avr35\libc.a(sprintf.o) + 0x127 (size before relaxing) + .debug_str 0x00001331 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/avr35\libc.a(vfprintf_std.o) + 0x198 (size before relaxing) + .debug_str 0x000013f0 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/avr35\libc.a(fputc.o) + 0xf8 (size before relaxing) -.debug_loc 0x00000000 0xc7f +.debug_loc 0x00000000 0x6e36 *(.debug_loc) - .debug_loc 0x00000000 0x6ea Can.o - .debug_loc 0x000006ea 0xf5 Mainboard.o - .debug_loc 0x000007df 0x8a Rs232.o - .debug_loc 0x00000869 0x416 Spi.o + .debug_loc 0x00000000 0x6807 Mainboard.o + .debug_loc 0x00006807 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/avr35\libc.a(sprintf.o) + .debug_loc 0x00006828 0x51b 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/avr35\libc.a(vfprintf_std.o) + .debug_loc 0x00006d43 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/avr35\libc.a(fputc.o) .debug_macinfo *(.debug_macinfo) @@ -572,12 +622,12 @@ LOAD c:/program files (x86)/atmel/atmel toolchain/avr8 gcc/native/3.4.2.876/avr8 .debug_pubtypes *(.debug_pubtypes) -.debug_ranges 0x00000000 0x120 +.debug_ranges 0x00000000 0x3860 *(.debug_ranges) - .debug_ranges 0x00000000 0x90 Can.o - .debug_ranges 0x00000090 0x18 Mainboard.o - .debug_ranges 0x000000a8 0x28 Rs232.o - .debug_ranges 0x000000d0 0x50 Spi.o + .debug_ranges 0x00000000 0x3830 Mainboard.o + .debug_ranges 0x00003830 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/avr35\libc.a(sprintf.o) + .debug_ranges 0x00003840 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/avr35\libc.a(vfprintf_std.o) + .debug_ranges 0x00003850 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/avr35\libc.a(fputc.o) .debug_macro *(.debug_macro) diff --git a/Mainboard/Mainboard/Debug/Mainboard.srec b/Mainboard/Mainboard/Debug/Mainboard.srec index 21a107a..5018a57 100644 --- a/Mainboard/Mainboard/Debug/Mainboard.srec +++ b/Mainboard/Mainboard/Debug/Mainboard.srec @@ -6,89 +6,815 @@ S11300300C9463000C9463000C9463000C946300B0 S11300400C9463000C9463000C9463000C946300A0 S11300500C9463000C9463000C9463000C94630090 S11300600C9463000C9463000C9463000C94630080 -S11300700C946300400211241FBECFEFD4E0DEBF16 -S1130080CDBF11E0A0E0B1E0E4EAF5E002C00590E4 -S11300900D92A630B107D9F721E0A6E0B1E001C086 -S11300A01D92A930B207E1F710E0C6E7D0E004C022 -S11300B02297FE010E94CC02C437D107C9F70E94DF -S11300C0F9010C94D0020C940000FF920F931F933B -S11300D0CF93DF931F92CDB7DEB7F82E092F162FDB -S11300E049830E949A0262E08F2D902F0E94BE02E3 -S11300F0612F8F2D902F0E94BE024981642F8F2D76 -S1130100902F0E94BE028F2D902F0F90DF91CF91E0 -S11301101F910F91FF900C949702CF93DF93D82FE8 -S1130120C92F0E949A0260EC8D2F9C2F0E94BE0260 -S11301308FE99FE00197F1F700C000008D2F9C2FFD -S11301400E9497028FE39CE90197F1F700C0000039 -S113015047E06AE28D2F9C2F0E94650040E969E226 -S11301608D2F9C2F0E94650042E068E28D2F9C2F0A -S11301700E94650043E06BE28D2F9C2F0E94650076 -S113018040E660E68D2F9C2F0E94650040E660E704 -S11301908D2F9C2F0E94650040E060E28D2F9C2FE4 -S11301A00E94650040E061E28D2F9C2F0E94650053 -S11301B040E062E28D2F9C2F0E94650040E063E2E4 -S11301C08D2F9C2F0E94650040E064E28D2F9C2FB0 -S11301D00E94650040E065E28D2F9C2F0E9465001F -S11301E040E066E28D2F9C2F0E94650040E067E2AC -S11301F08D2F9C2F0E94650040E06CE08D2F9C2F7A -S1130200DF91CF910C946500FC0160830C948D0008 -S1130210FF920F931F93CF93DF9300D0CDB7DEB738 -S1130220F82E092F162F2A8349830E949A0265E02B -S11302308F2D902F0E94BE02612F8F2D902F0E9430 -S1130240BE024981642F8F2D902F0E94BE022A8105 -S1130250622F8F2D902F0E94BE028F2D902F0F9012 -S11302600F90DF91CF911F910F91FF900C94970203 -S11302701F93CF93DF93D82FC92F0E949A0260EB6C -S11302808D2F9C2F0E94BE026FEF8D2F9C2F0E94FA -S1130290BE02182F6FEF8D2F9C2F0E94BE028D2F50 -S11302A09C2F0E949702812FDF91CF911F91089577 -S11302B09F92AF92BF92CF92DF92EF92FF920F93F1 -S11302C01F93CF93DF931F92CDB7DEB75C016B0111 -S11302D00E943801982E8983898186FD11C0898105 -S11302E087FD7FC08FEF0F90DF91CF911F910F910A -S11302F0FF90EF90DF90CF90BF90AF909F900895C4 -S1130300C5010E949A0260E9C5010E94BE026FEF16 -S1130310C5010E94BE02282F30E0220F331F220F96 -S1130320331F220F331FF601318320836FEFC50182 -S11303300E94BE02482F50E056954795529542952B -S11303404F7045275F704527F60120813181242BAA -S1130350352B318320836FEFC5010E94BE026FEFFE -S1130360C5010E94BE026FEFC5010E94BE028F70DC -S1130370F60183838823A1F086010C5F1F4F760169 -S1130380F5E0EF0EF11C8150E80EF11C6FEFC50192 -S11303900E94BE02F80181938F01EE15FF05B1F7AB -S11303A0C5010E949702898183FD0EC0F601128265 -S11303B0898120E086FF0FC041E06CE2C5010E9404 -S11303C00801892D87708FCF81E0F60182838981AE -S11303D020E086FDF1CF42E06CE2C5010E940801F5 -S11303E0F0CFC5010E949A0264E9C5010E94BE02D1 -S11303F08ECFCF93DF93CDB7DEB72C970FB6F8949B -S1130400DEBF0FBECDBF47983F9A469A3E9A459AA3 -S11304103D9A60E071E087E091E00E94660283E229 -S113042091E09A8389831B8282E08C838FEA8D8397 -S11304308EEF8E8309C02FEF83ED90E3215080402F -S11304409040E1F700C000002FEF81EE94E02150CE -S113045080409040E1F700C00000BE016F5F7F4F15 -S113046086E091E00E9458018F3F29F72FEF81EE3B -S113047094E0215080409040E1F700C00000E4CFB8 -S1130480CF93DF931F92CDB7DEB73D9A3E9A3F9A42 -S113049087E091E00E945A0260E0CE0101960E943A -S11304A09202698186E091E00E9404010F90DF913D -S11304B0CF91089586E08093CA00E9ECF0E0808152 -S11304C08860808387E68093CC000895FB01908147 -S11304D0992351F031968091C80085FFFCCF909309 -S11304E0CE0091919111F7CF0895229A2A98229AD9 -S11304F0219A2998219A249A2C9A249A23982B9801 -S11305002B98239A0895CF93DF93EC010E947502F0 -S11305108881811104C080E58CBD81E08DBDDF91AF -S1130520CF91089521E0FC0120830C9483022C9A3E -S1130530249A08952C98249A089598E080E015C090 -S11305402A98229A25E02A95F1F700001B998160E8 -S113055025E02A95F1F70000299A219A2AE02A95A4 -S1130560F1F700C0660F915041F0880F2998219A45 -S113057067FFE6CF2A9A229AE5CF0895FC012081ED -S1130580211106C06EBD0DB407FEFDCF8EB50895D2 -S11305900C949D02EE0FFF1F0590F491E02D099439 -S10705A0F894FFCFF9 -S10905A4626C610A000014 +S11300700C946300581611241FBECFEFD4E0DEBFEA +S1130080CDBF11E0A0E0B1E0E8ECF2E302C00590DE +S11300900D92A234B107D9F721E0A2E4B1E001C086 +S11300A01D92A734B207E1F710E0C6E7D0E004C020 +S11300B02297FE010E947C16C437D107C9F70E941B +S11300C065000C9462190C940000CF93DF93CDB7B4 +S11300D0DEB7E4970FB6F894DEBF0FBECDBF2D9800 +S11300E0259A2E9A269A2F9A279AE1E0F1E089E43C +S11300F09091C80095FFFCCF8093CE00819181112F +S1130100F7CF8E010F5F1F4F9DE1C92E91E0D92ECD +S113011027E2E22E21E0F22EBB24BA942D98259AF0 +S11301202E9A269A2F98279A2AEA36EE46E981E0F3 +S11301302150304040408040D9F70000EEE0F1E02B +S11301409EE48091C80085FFFCCF9093CE009191EE +S11301509111F7CF2C98249A1F9280EB8F93DF9202 +S1130160CF921F930F930E94801699810F900F9046 +S11301700F900F900F900F90992359F0FE01329633 +S11301808091C80085FFFCCF9093CE00919191118E +S1130190F7CF28E090EB80E015C02A98229A35E04A +S11301A03A95F1F700001B99816045E04A95F1F713 +S11301B00000299A219A3AE03A95F1F700C0990F84 +S11301C0215041F0880F2998219A97FFE6CF2A9A67 +S11301D0229AE5CF1F928F93FF92EF921F930F9372 +S11301E00E94801699810F900F900F900F900F909E +S11301F00F90992359F0FE0132968091C80085FF33 +S1130200FCCF9093CE0091919111F7CF1F92BF92A2 +S1130210DF92CF921F930F930E94801699810F90C3 +S11302200F900F900F900F900F90992359F0FE01AB +S113023032968091C80085FFFCCF9093CE009191B7 +S11302409111F7CF98E08FEF20E015C02A98229AF9 +S113025045E04A95F1F700001B99216035E03A9595 +S1130260F1F70000299A219A4AE04A95F1F700C073 +S1130270880F915041F0220F2998219A87FFE6CFE9 +S11302802A9A229AE5CF1F922F93FF92EF921F93FF +S11302900F932CAB0E94801699810F900F900F90B2 +S11302A00F900F900F902CA9992359F0FE013296CC +S11302B08091C80085FFFCCF9093CE00919191115D +S11302C0F7CF1F92BF92DF92CF921F930F932CAB65 +S11302D00E94801699810F900F900F900F900F90AD +S11302E00F902CA9992359F0FE0132968091C800F1 +S11302F085FFFCCF9093CE0091919111F7CF38E018 +S11303009FEF80E015C02A98229A45E04A95F1F7BC +S113031000001B99816045E04A95F1F70000299A95 +S1130320219A4AE04A95F1F700C0990F315041F003 +S1130330880F2998219A97FFE6CF2A9A229AE5CF27 +S11303401F928F93FF92EF921F930F932CAB0E94F7 +S1130350801699810F900F900F900F900F900F902F +S11303602CA9992359F0FE0132968091C80085FF8B +S1130370FCCF9093CE0091919111F7CF2C9A249AAF +S11303802BAB8BA986FD13C08BA987FD69C52D985E +S1130390259A2E98269A2F9A279A3FEF41EE84E0C9 +S11303A0315040408040E1F700C00000B7CE2C98A7 +S11303B0249A1F9280E98F93DF92CF921F930F9319 +S11303C00E94801699810F900F900F900F900F90BC +S11303D00F90992359F0FE0132968091C80085FF51 +S11303E0FCCF9093CE0091919111F7CF28E090E942 +S11303F080E015C02A98229A35E03A95F1F700007A +S11304001B99816045E04A95F1F70000299A219AE9 +S11304103AE03A95F1F700C0990F215041F0880F66 +S11304202998219A97FFE6CF2A9A229AE5CF1F921C +S11304308F93FF92EF921F930F930E9480169981DE +S11304400F900F900F900F900F900F90992359F0E9 +S1130450FE0132968091C80085FFFCCF9093CE00B8 +S113046091919111F7CF1F92BF92DF92CF921F9378 +S11304700F930E94801699810F900F900F900F9008 +S11304800F900F90992359F0FE0132968091C80085 +S113049085FFFCCF9093CE0091919111F7CF28E086 +S11304A09FEF80E015C02A98229A35E03A95F1F73B +S11304B000001B99816045E04A95F1F70000299AF4 +S11304C0219A3AE03A95F1F700C0990F215041F092 +S11304D0880F2998219A97FFE6CF2A9A229AE5CF86 +S11304E01F928F93FF92EF921F930F930E94801697 +S11304F099810F900F900F900F900F900F90992368 +S113050059F0FE0132968091C80085FFFCCF90938C +S1130510CE0091919111F7CF1F92BF92DF92CF92AB +S11305201F930F930E94801699810F900F900F9044 +S11305300F900F900F90992359F0FE0132968091FD +S1130540C80085FFFCCF9093CE0091919111F7CF15 +S113055028E09FEF80E015C02A98229A45E04A954A +S1130560F1F700001B99816035E03A95F1F700003E +S1130570299A219A4AE04A95F1F700C0990F21502F +S113058041F0880F2998219A97FFE6CF2A9A229A58 +S1130590E5CF1F928F93FF92EF921F930F930E94C8 +S11305A0801699810F900F900F900F900F900F90DD +S11305B0992359F0FE0132968091C80085FFFCCF43 +S11305C09093CE0091919111F7CF1F92BF92DF9239 +S11305D0CF921F930F930E94801699810F900F90D2 +S11305E00F900F900F900F90992359F0FE013296BF +S11305F08091C80085FFFCCF9093CE00919191111A +S1130600F7CF28E09FEF80E015C02A98229A35E0C2 +S11306103A95F1F700001B99816045E04A95F1F79E +S11306200000299A219A3AE03A95F1F700C0990F0F +S1130630215041F0880F2998219A97FFE6CF2A9AF2 +S1130640229AE5CF1F928F93FF92EF921F930F93FD +S11306500E94801699810F900F900F900F900F9029 +S11306600F90992359F0FE0132968091C80085FFBE +S1130670FCCF9093CE0091919111F7CF1F92BF922E +S1130680DF92CF921F930F930E94801699810F904F +S11306900F900F900F900F900F90992359F0FE0137 +S11306A032968091C80085FFFCCF9093CE00919143 +S11306B09111F7CF28E09FEF80E015C02A98229A85 +S11306C045E04A95F1F700001B99816035E03A95C1 +S11306D0F1F70000299A219A4AE04A95F1F700C0FF +S11306E0990F215041F0880F2998219A97FFE6CF5E +S11306F02A9A229AE5CF1F928F93FF92EF921F932B +S11307000F930E94801699810F900F900F900F9075 +S11307100F900F90992359F0FE0132968091C800F2 +S113072085FFFCCF9093CE0091919111F7CF1F924A +S1130730BF92DF92CF921F930F930E9480169981EC +S11307400F900F900F900F900F900F90992359F0E6 +S1130750FE0132968091C80085FFFCCF9093CE00B5 +S113076091919111F7CF98E08FEF20E015C02A986E +S1130770229A35E03A95F1F700001B99216045E093 +S11307804A95F1F70000299A219A3AE03A95F1F74F +S113079000C0880F915041F0220F2998219A87FFB9 +S11307A0E6CF2A9A229AE5CF1F922F93FF92EF92D7 +S11307B01F930F932CAB0E94801699810F900F907A +S11307C00F900F900F900F902CA9992359F0FE01D0 +S11307D032968091C80085FFFCCF9093CE00919112 +S11307E09111F7CF8FE0982E922209F45DC0A12CCD +S11307F01F92BF92DF92CF921F930F930E94801695 +S113080099810F900F900F900F900F900F90992354 +S113081059F0FE0132968091C80085FFFCCF909379 +S1130820CE0091919111F7CF28E09FEF80E015C0A1 +S11308302A98229A45E04A95F1F700001B998160B5 +S113084035E03A95F1F70000299A219A4AE04A9551 +S1130850F1F700C0990F215041F0880F2998219A8F +S113086097FFE6CF2A9A229AE5CF1F928F93FF92A1 +S1130870EF921F930F930E94801699810F900F900F +S11308800F900F900F900F90992359F0FE0132961C +S11308908091C80085FFFCCF9093CE009191911177 +S11308A0F7CFA394A910A4CF2C9A249A8BA98BA92F +S11308B086FF73C12C98249A1F9285E08F93DF9250 +S11308C0CF921F930F930E94801699810F900F90DF +S11308D00F900F900F900F90992359F0FE013296CC +S11308E08091C80085FFFCCF9093CE009191911127 +S11308F0F7CF28E095E080E015C02A98229A35E0E9 +S11309003A95F1F700001B99816045E04A95F1F7AB +S11309100000299A219A3AE03A95F1F700C0990F1C +S1130920215041F0880F2998219A97FFE6CF2A9AFF +S1130930229AE5CF1F928F93FF92EF921F930F930A +S11309400E94801699810F900F900F900F900F9036 +S11309500F90992359F0FE0132968091C80085FFCB +S1130960FCCF9093CE0091919111F7CF1F928CE21E +S11309708F93DF92CF921F930F930E9480169981D9 +S11309800F900F900F900F900F900F90992359F0A4 +S1130990FE0132968091C80085FFFCCF9093CE0073 +S11309A091919111F7CF28E09CE280E015C02A983C +S11309B0229A45E04A95F1F700001B99816035E0E1 +S11309C03A95F1F70000299A219A4AE04A95F1F7FD +S11309D000C0990F215041F0880F2998219A97FF60 +S11309E0E6CF2A9A229AE5CF1F928F93FF92EF9235 +S11309F01F930F930E94801699810F900F900F9070 +S1130A000F900F900F90992359F0FE013296809128 +S1130A10C80085FFFCCF9093CE0091919111F7CF40 +S1130A201F9281E08F93DF92CF921F930F930E94C6 +S1130A30801699810F900F900F900F900F900F9048 +S1130A40992359F0FE0132968091C80085FFFCCFAE +S1130A509093CE0091919111F7CF28E091E080E03E +S1130A6015C02A98229A35E03A95F1F700001B99AF +S1130A70816045E04A95F1F70000299A219A3AE00D +S1130A803A95F1F700C0990F215041F0880F299849 +S1130A90219A97FFE6CF2A9A229AE5CF1F928F9345 +S1130AA0FF92EF921F930F930E94801699810F90EB +S1130AB00F900F900F900F900F90992359F0FE0113 +S1130AC032968091C80085FFFCCF9093CE0091911F +S1130AD09111F7CF1F921F92DF92CF921F930F9322 +S1130AE00E94801699810F900F900F900F900F9095 +S1130AF00F90992359F0FE0132968091C80085FF2A +S1130B00FCCF9093CE0091919111F7CF98E080E0C3 +S1130B10880F2998219A2A98229A45E04A95F1F754 +S1130B2000001B99816025E02A95F1F70000299ABD +S1130B30219A3AE03A95F1F700C0915049F71F9293 +S1130B408F93FF92EF921F930F930E9480169981C7 +S1130B500F900F900F900F900F900F90992359F0D2 +S1130B60FE0132968091C80085FFFCCF9093CE00A1 +S1130B7091919111F7CF2C9A249A2D9A259A2E9817 +S1130B80269A2F98279A8FEF93ED20E38150904077 +S1130B902040E1F700C00000C1CA2C98249A1F929B +S1130BA085E08F93DF92CF921F930F930E9480165C +S1130BB099810F900F900F900F900F900F909923A1 +S1130BC059F0FE0132968091C80085FFFCCF9093C6 +S1130BD0CE0091919111F7CF28E095E080E015C007 +S1130BE02A98229A45E04A95F1F700001B99816002 +S1130BF035E03A95F1F70000299A219A4AE04A959E +S1130C00F1F700C0990F215041F0880F2998219ADB +S1130C1097FFE6CF2A9A229AE5CF1F928F93FF92ED +S1130C20EF921F930F930E94801699810F900F905B +S1130C300F900F900F900F90992359F0FE01329668 +S1130C408091C80085FFFCCF9093CE0091919111C3 +S1130C50F7CF1F928CE28F93DF92CF921F930F9363 +S1130C600E94801699810F900F900F900F900F9013 +S1130C700F90992359F0FE0132968091C80085FFA8 +S1130C80FCCF9093CE0091919111F7CF28E09CE294 +S1130C9080E015C02A98229A35E03A95F1F70000D1 +S1130CA01B99816045E04A95F1F70000299A219A41 +S1130CB03AE03A95F1F700C0990F215041F0880FBE +S1130CC02998219A97FFE6CF2A9A229AE5CF1F9274 +S1130CD08F93FF92EF921F930F930E948016998136 +S1130CE00F900F900F900F900F900F90992359F041 +S1130CF0FE0132968091C80085FFFCCF9093CE0010 +S1130D0091919111F7CF1F9282E08F93DF92CF924E +S1130D101F930F930E94801699810F900F900F904C +S1130D200F900F900F90992359F0FE013296809105 +S1130D30C80085FFFCCF9093CE0091919111F7CF1D +S1130D4028E092E080E015C02A98229A45E04A956E +S1130D50F1F700001B99816035E03A95F1F7000046 +S1130D60299A219A4AE04A95F1F700C0990F215037 +S1130D7041F0880F2998219A97FFE6CF2A9A229A60 +S1130D80E5CF1F928F93FF92EF921F930F930E94D0 +S1130D90801699810F900F900F900F900F900F90E5 +S1130DA0992359F0FE0132968091C80085FFFCCF4B +S1130DB09093CE0091919111F7CF1F921F92DF92E1 +S1130DC0CF921F930F930E94801699810F900F90DA +S1130DD00F900F900F900F90992359F0FE013296C7 +S1130DE08091C80085FFFCCF9093CE009191911122 +S1130DF0F7CF98E080E0880F2998219A2A98229AC0 +S1130E0025E02A95F1F700001B99816035E03A95B9 +S1130E10F1F70000299A219A4AE04A95F1F700C0B7 +S1130E20915049F71F928F93FF92EF921F930F9364 +S1130E300E94801699810F900F900F900F900F9041 +S1130E400F90992309F497CEFE0132968091C80041 +S1130E5085FFFCCF9093CE0091919111F7CF8BCE6B +S1130E602C98249A1F9284E98F93DF92CF921F9338 +S1130E700F930E94801699810F900F900F900F90FE +S1130E800F900F90992359F0FE0132968091C8007B +S1130E9085FFFCCF9093CE0091919111F7CF28E07C +S1130EA094E980E015C02A98229A45E04A95F1F722 +S1130EB000001B99816035E03A95F1F70000299A0A +S1130EC0219A4AE04A95F1F700C0990F215041F068 +S1130ED0880F2998219A97FFE6CF2A9A229AE5CF7C +S1130EE01F928F93FF92EF921F930F930E9480168D +S1130EF099810F900F900F900F900F900F9099235E +S1130F0009F4B1CAFE0132968091C80085FFFCCF76 +S1130F109093CE0091919111F7CFA5CA86E080936A +S1130F20CA008091C90088608093C90087E68093D5 +S1130F30CC00E5E3F1E095E58091C80085FFFCCFA6 +S1130F409093CE0091919111F7CF229A2A98229AE8 +S1130F50219A2998219A249A2C9A249A23982B9896 +S1130F602B98239A08950F931F93CF93DF93CDB7B4 +S1130F70DEB7E3970FB6F894DEBF0FBECDBF1F9266 +S1130F806F938DE191E09F938F938E010F5F1F4FBD +S1130F901F930F936BAB0E94801699810F900F9053 +S1130FA00F900F900F900F906BA9992359F0FE01A9 +S1130FB032968091C80085FFFCCF9093CE0091912A +S1130FC09111F7CF88E040E015C02A98229A95E065 +S1130FD09A95F1F700001B99416095E09A95F1F715 +S1130FE00000299A219A9AE09A95F1F700C0660FB9 +S1130FF0815041F0440F2998219A67FFE6CF2A9A3D +S1131000229AE5CF1F924F9327E231E03F932F932B +S11310101F930F934BAB0E94801629810F900F9062 +S11310200F900F900F900F904BA9222359F0FE01BF +S113103032969091C80095FFFCCF2093CE00219169 +S11310402111F7CF842FE3960FB6F894DEBF0FBEBD +S1131050CDBFDF91CF911F910F910895EF92FF9231 +S11310600F931F93CF93DF93CDB7DEB7E2970FB6FD +S1131070F894DEBF0FBECDBFF82EE92E2C98249A2B +S113108060EC0E94B3078FE99FE00197F1F700C07D +S113109000002C9A249A8FE39CE90197F1F700C091 +S11310A000002C98249A62E08F2D9E2D0E94B30795 +S11310B01F928AE28F938DE191E09F938F938E012B +S11310C00F5F1F4F1F930F930E94801699810F90FB +S11310D00F900F900F900F900F90992359F0FE01ED +S11310E032968091C80085FFFCCF9093CE009191F9 +S11310F09111F7CF28E09AE280E015C02A98229A4D +S113110035E03A95F1F700001B99816035E03A9596 +S1131110F1F70000299A219A3AE03A95F1F700C0D4 +S1131120990F215041F0880F2998219A97FFE6CF13 +S11311302A9A229AE5CF1F928F9387E291E09F9398 +S11311408F931F930F930E94801699810F900F9095 +S11311500F900F900F900F90992359F0FE01329643 +S11311608091C80085FFFCCF9093CE00919191119E +S1131170F7CF1F9287E08F938DE191E09F938F9338 +S11311801F930F930E94801699810F900F900F90D8 +S11311900F900F900F90992359F0FE013296809191 +S11311A0C80085FFFCCF9093CE0091919111F7CFA9 +S11311B028E097E080E015C02A98229A35E03A9515 +S11311C0F1F700001B99816035E03A95F1F70000D2 +S11311D0299A219A3AE03A95F1F700C0990F2150E3 +S11311E041F0880F2998219A97FFE6CF2A9A229AEC +S11311F0E5CF1F928F9387E291E09F938F931F9384 +S11312000F930E94801699810F900F900F900F906A +S11312100F900F90992359F0FE0132968091C800E7 +S113122085FFFCCF9093CE0091919111F7CF2C9A2A +S1131230249A2C98249A1F9282E08F938DE191E056 +S11312409F938F931F930F930E94801699810F9001 +S11312500F900F900F900F900F90992359F0FE016B +S113126032968091C80085FFFCCF9093CE00919177 +S11312709111F7CF28E092E080E015C02A98229AD5 +S113128035E03A95F1F700001B99816035E03A9515 +S1131290F1F70000299A219A3AE03A95F1F700C053 +S11312A0990F215041F0880F2998219A97FFE6CF92 +S11312B02A9A229AE5CF1F928F9387E291E09F9317 +S11312C08F931F930F930E94801699810F900F9014 +S11312D00F900F900F900F90992359F0FE013296C2 +S11312E08091C80085FFFCCF9093CE00919191111D +S11312F0F7CF1F9289E28F938DE191E09F938F93B3 +S11313001F930F930E94801699810F900F900F9056 +S11313100F900F900F90992359F0FE01329680910F +S1131320C80085FFFCCF9093CE0091919111F7CF27 +S113133028E099E280E015C02A98229A35E03A958F +S1131340F1F700001B99816035E03A95F1F7000050 +S1131350299A219A3AE03A95F1F700C0990F215061 +S113136041F0880F2998219A97FFE6CF2A9A229A6A +S1131370E5CF1F928F9387E291E09F938F931F9302 +S11313800F930E94801699810F900F900F900F90E9 +S11313900F900F90992359F0FE0132968091C80066 +S11313A085FFFCCF9093CE0091919111F7CF1F92BE +S11313B080E98F938DE191E09F938F931F930F9317 +S11313C00E94801699810F900F900F900F900F90AC +S11313D00F90992359F0FE0132968091C80085FF41 +S11313E0FCCF9093CE0091919111F7CF28E090E932 +S11313F080E015C02A98229A35E03A95F1F700006A +S11314001B99816035E03A95F1F70000299A219AF9 +S11314103AE03A95F1F700C0990F215041F0880F56 +S11314202998219A97FFE6CF2A9A229AE5CF1F920C +S11314308F9387E291E09F938F931F930F930E9462 +S1131440801699810F900F900F900F900F900F902E +S1131450992359F0FE0132968091C80085FFFCCF94 +S11314609093CE0091919111F7CF2C9A249A2C98B5 +S1131470249A1F9282E08F938DE191E09F938F9342 +S11314801F930F930E94801699810F900F900F90D5 +S11314900F900F900F90992359F0FE01329680918E +S11314A0C80085FFFCCF9093CE0091919111F7CFA6 +S11314B028E092E080E015C02A98229A35E03A9517 +S11314C0F1F700001B99816035E03A95F1F70000CF +S11314D0299A219A3AE03A95F1F700C0990F2150E0 +S11314E041F0880F2998219A97FFE6CF2A9A229AE9 +S11314F0E5CF1F928F9387E291E09F938F931F9381 +S11315000F930E94801699810F900F900F900F9067 +S11315100F900F90992359F0FE0132968091C800E4 +S113152085FFFCCF9093CE0091919111F7CF1F923C +S113153088E28F938DE191E09F938F931F930F9394 +S11315400E94801699810F900F900F900F900F902A +S11315500F90992359F0FE0132968091C80085FFBF +S1131560FCCF9093CE0091919111F7CF28E098E2AF +S113157080E015C02A98229A35E03A95F1F70000E8 +S11315801B99816035E03A95F1F70000299A219A78 +S11315903AE03A95F1F700C0990F215041F0880FD5 +S11315A02998219A97FFE6CF2A9A229AE5CF1F928B +S11315B08F9387E291E09F938F931F930F930E94E1 +S11315C0801699810F900F900F900F900F900F90AD +S11315D0992359F0FE0132968091C80085FFFCCF13 +S11315E09093CE0091919111F7CF1F9282E08F9347 +S11315F08DE191E09F938F931F930F930E94801628 +S113160099810F900F900F900F900F900F90992346 +S113161059F0FE0132968091C80085FFFCCF90936B +S1131620CE0091919111F7CF28E092E080E015C0AF +S11316302A98229A35E03A95F1F700001B998160C7 +S113164035E03A95F1F70000299A219A3AE03A9563 +S1131650F1F700C0990F215041F0880F2998219A81 +S113166097FFE6CF2A9A229AE5CF1F928F9387E2BB +S113167091E09F938F931F930F930E9480169981FB +S11316800F900F900F900F900F900F90992359F097 +S1131690FE0132968091C80085FFFCCF9093CE0066 +S11316A091919111F7CF2C9A249A2C98249A1F92F5 +S11316B082E08F938DE191E09F938F931F930F931B +S11316C00E94801699810F900F900F900F900F90A9 +S11316D00F90992359F0FE0132968091C80085FF3E +S11316E0FCCF9093CE0091919111F7CF28E092E036 +S11316F080E015C02A98229A35E03A95F1F7000067 +S11317001B99816035E03A95F1F70000299A219AF6 +S11317103AE03A95F1F700C0990F215041F0880F53 +S11317202998219A97FFE6CF2A9A229AE5CF1F9209 +S11317308F9387E291E09F938F931F930F930E945F +S1131740801699810F900F900F900F900F900F902B +S1131750992359F0FE0132968091C80085FFFCCF91 +S11317609093CE0091919111F7CF1F928BE28F93BA +S11317708DE191E09F938F931F930F930E948016A6 +S113178099810F900F900F900F900F900F909923C5 +S113179059F0FE0132968091C80085FFFCCF9093EA +S11317A0CE0091919111F7CF28E09BE280E015C023 +S11317B02A98229A35E03A95F1F700001B99816046 +S11317C035E03A95F1F70000299A219A3AE03A95E2 +S11317D0F1F700C0990F215041F0880F2998219A00 +S11317E097FFE6CF2A9A229AE5CF1F928F9387E23A +S11317F091E09F938F931F930F930E94801699817A +S11318000F900F900F900F900F900F90992359F015 +S1131810FE0132968091C80085FFFCCF9093CE00E4 +S113182091919111F7CF1F9283E08F938DE191E015 +S11318309F938F931F930F930E94801699810F900B +S11318400F900F900F900F900F90992359F0FE0175 +S113185032968091C80085FFFCCF9093CE00919181 +S11318609111F7CF28E093E080E015C02A98229ADE +S113187035E03A95F1F700001B99816035E03A951F +S1131880F1F70000299A219A3AE03A95F1F700C05D +S1131890990F215041F0880F2998219A97FFE6CF9C +S11318A02A9A229AE5CF1F928F9387E291E09F9321 +S11318B08F931F930F930E94801699810F900F901E +S11318C00F900F900F900F90992359F0FE013296CC +S11318D08091C80085FFFCCF9093CE009191911127 +S11318E0F7CF2C9A249A2C98249A1F9282E08F93F3 +S11318F08DE191E09F938F931F930F930E94801625 +S113190099810F900F900F900F900F900F90992343 +S113191059F0FE0132968091C80085FFFCCF909368 +S1131920CE0091919111F7CF28E092E080E015C0AC +S11319302A98229A35E03A95F1F700001B998160C4 +S113194035E03A95F1F70000299A219A3AE03A9560 +S1131950F1F700C0990F215041F0880F2998219A7E +S113196097FFE6CF2A9A229AE5CF1F928F9387E2B8 +S113197091E09F938F931F930F930E9480169981F8 +S11319800F900F900F900F900F900F90992359F094 +S1131990FE0132968091C80085FFFCCF9093CE0063 +S11319A091919111F7CF1F9280E68F938DE191E091 +S11319B09F938F931F930F930E94801699810F908A +S11319C00F900F900F900F900F90992359F0FE01F4 +S11319D032968091C80085FFFCCF9093CE00919100 +S11319E09111F7CF28E090E680E015C02A98229A5A +S11319F035E03A95F1F700001B99816035E03A959E +S1131A00F1F70000299A219A3AE03A95F1F700C0DB +S1131A10990F215041F0880F2998219A97FFE6CF1A +S1131A202A9A229AE5CF1F928F9387E291E09F939F +S1131A308F931F930F930E94801699810F900F909C +S1131A400F900F900F900F90992359F0FE0132964A +S1131A508091C80085FFFCCF9093CE0091919111A5 +S1131A60F7CF1F9280E68F938DE191E09F938F9340 +S1131A701F930F930E94801699810F900F900F90DF +S1131A800F900F900F90992359F0FE013296809198 +S1131A90C80085FFFCCF9093CE0091919111F7CFB0 +S1131AA028E090E680E015C02A98229A35E03A951D +S1131AB0F1F700001B99816035E03A95F1F70000D9 +S1131AC0299A219A3AE03A95F1F700C0990F2150EA +S1131AD041F0880F2998219A97FFE6CF2A9A229AF3 +S1131AE0E5CF1F928F9387E291E09F938F931F938B +S1131AF00F930E94801699810F900F900F900F9072 +S1131B000F900F90992359F0FE0132968091C800EE +S1131B1085FFFCCF9093CE0091919111F7CF2C9A31 +S1131B20249A2C98249A62E08F2D9E2D0E94B3074C +S1131B301F9280E78F938DE191E09F938F931F9382 +S1131B400F930E94801699810F900F900F900F9021 +S1131B500F900F90992359F0FE0132968091C8009E +S1131B6085FFFCCF9093CE0091919111F7CF28E09F +S1131B7090E780E015C02A98229A35E03A95F1F76B +S1131B8000001B99816035E03A95F1F70000299A2D +S1131B90219A3AE03A95F1F700C0990F215041F0AB +S1131BA0880F2998219A97FFE6CF2A9A229AE5CF9F +S1131BB01F928F9387E291E09F938F931F930F93CC +S1131BC00E94801699810F900F900F900F900F90A4 +S1131BD00F90992359F0FE0132968091C80085FF39 +S1131BE0FCCF9093CE0091919111F7CF1F9280E694 +S1131BF08F938DE191E09F938F931F930F930E9496 +S1131C00801699810F900F900F900F900F900F9066 +S1131C10992359F0FE0132968091C80085FFFCCFCC +S1131C209093CE0091919111F7CF28E090E680E057 +S1131C3015C02A98229A35E03A95F1F700001B99CD +S1131C40816035E03A95F1F70000299A219A3AE04B +S1131C503A95F1F700C0990F215041F0880F299867 +S1131C60219A97FFE6CF2A9A229AE5CF1F928F9363 +S1131C7087E291E09F938F931F930F930E948016A6 +S1131C8099810F900F900F900F900F900F909923C0 +S1131C9059F0FE0132968091C80085FFFCCF9093E5 +S1131CA0CE0091919111F7CF2C9A249A2C98249AD2 +S1131CB062E08F2D9E2D0E94B30760E28F2D9E2D32 +S1131CC00E94B30760E08F2D9E2D0E94B3072C9ACB +S1131CD0249A2C98249A62E08F2D9E2D0E94B3079B +S1131CE061E28F2D9E2D0E94B30760E08F2D9E2D03 +S1131CF00E94B3072C9A249A2C98249A1F9282E06B +S1131D008F938DE191E09F938F931F930F930E9484 +S1131D10801699810F900F900F900F900F900F9055 +S1131D20992359F0FE0132968091C80085FFFCCFBB +S1131D309093CE0091919111F7CF28E092E080E04A +S1131D4015C02A98229A35E03A95F1F700001B99BC +S1131D50816035E03A95F1F70000299A219A3AE03A +S1131D603A95F1F700C0990F215041F0880F299856 +S1131D70219A97FFE6CF2A9A229AE5CF1F928F9352 +S1131D8087E291E09F938F931F930F930E94801695 +S1131D9099810F900F900F900F900F900F909923AF +S1131DA059F0FE0132968091C80085FFFCCF9093D4 +S1131DB0CE0091919111F7CF1F9282E28F938DE122 +S1131DC091E09F938F931F930F930E9480169981A4 +S1131DD00F900F900F900F900F900F90992359F040 +S1131DE0FE0132968091C80085FFFCCF9093CE000F +S1131DF091919111F7CF28E092E280E015C02A98E2 +S1131E00229A35E03A95F1F700001B99816035E09C +S1131E103A95F1F70000299A219A3AE03A95F1F7B8 +S1131E2000C0990F215041F0880F2998219A97FFFB +S1131E30E6CF2A9A229AE5CF1F928F9387E291E008 +S1131E409F938F931F930F930E94801699810F90F5 +S1131E500F900F900F900F900F90992359F0FE015F +S1131E6032968091C80085FFFCCF9093CE0091916B +S1131E709111F7CF1F921F928DE191E09F938F9361 +S1131E801F930F930E94801699810F900F900F90CB +S1131E900F900F900F90992359F0FE013296809184 +S1131EA0C80085FFFCCF9093CE0091919111F7CF9C +S1131EB098E080E0880F2998219A2A98229A25E0B0 +S1131EC02A95F1F700001B99816035E03A95F1F706 +S1131ED00000299A219A2AE02A95F1F700C091502E +S1131EE049F71F928F9387E291E09F938F931F93FB +S1131EF00F930E94801699810F900F900F900F906E +S1131F000F900F90992359F0FE0132968091C800EA +S1131F1085FFFCCF9093CE0091919111F7CF2C9A2D +S1131F20249A2C98249A1F9282E08F938DE191E059 +S1131F309F938F931F930F930E94801699810F9004 +S1131F400F900F900F900F900F90992359F0FE016E +S1131F5032968091C80085FFFCCF9093CE0091917A +S1131F609111F7CF28E092E080E015C02A98229AD8 +S1131F7035E03A95F1F700001B99816035E03A9518 +S1131F80F1F70000299A219A3AE03A95F1F700C056 +S1131F90990F215041F0880F2998219A97FFE6CF95 +S1131FA02A9A229AE5CF1F928F9387E291E09F931A +S1131FB08F931F930F930E94801699810F900F9017 +S1131FC00F900F900F900F90992359F0FE013296C5 +S1131FD08091C80085FFFCCF9093CE009191911120 +S1131FE0F7CF1F9283E28F938DE191E09F938F93BC +S1131FF01F930F930E94801699810F900F900F905A +S11320000F900F900F90992359F0FE013296809112 +S1132010C80085FFFCCF9093CE0091919111F7CF2A +S113202028E093E280E015C02A98229A35E03A9598 +S1132030F1F700001B99816035E03A95F1F7000053 +S1132040299A219A3AE03A95F1F700C0990F215064 +S113205041F0880F2998219A97FFE6CF2A9A229A6D +S1132060E5CF1F928F9387E291E09F938F931F9305 +S11320700F930E94801699810F900F900F900F90EC +S11320800F900F90992359F0FE0132968091C80069 +S113209085FFFCCF9093CE0091919111F7CF1F92C1 +S11320A01F928DE191E09F938F931F930F930E9452 +S11320B0801699810F900F900F900F900F900F90B2 +S11320C0992359F0FE0132968091C80085FFFCCF18 +S11320D09093CE0091919111F7CF98E080E0880F12 +S11320E02998219A2A98229A25E02A95F1F7000046 +S11320F01B99816035E03A95F1F70000299A219AFD +S11321002AE02A95F1F700C0915049F71F928F9366 +S113211087E291E09F938F931F930F930E94801601 +S113212099810F900F900F900F900F900F9099231B +S113213059F0FE0132968091C80085FFFCCF909340 +S1132140CE0091919111F7CF2C9A249A2C98249A2D +S11321501F9282E08F938DE191E09F938F931F9361 +S11321600F930E94801699810F900F900F900F90FB +S11321700F900F90992359F0FE0132968091C80078 +S113218085FFFCCF9093CE0091919111F7CF28E079 +S113219092E080E015C02A98229A35E03A95F1F74A +S11321A000001B99816035E03A95F1F70000299A07 +S11321B0219A3AE03A95F1F700C0990F215041F085 +S11321C0880F2998219A97FFE6CF2A9A229AE5CF79 +S11321D01F928F9387E291E09F938F931F930F93A6 +S11321E00E94801699810F900F900F900F900F907E +S11321F00F90992359F0FE0132968091C80085FF13 +S1132200FCCF9093CE0091919111F7CF1F9284E26D +S11322108F938DE191E09F938F931F930F930E946F +S1132220801699810F900F900F900F900F900F9040 +S1132230992359F0FE0132968091C80085FFFCCFA6 +S11322409093CE0091919111F7CF28E094E280E031 +S113225015C02A98229A35E03A95F1F700001B99A7 +S1132260816035E03A95F1F70000299A219A3AE025 +S11322703A95F1F700C0990F215041F0880F299841 +S1132280219A97FFE6CF2A9A229AE5CF1F928F933D +S113229087E291E09F938F931F930F930E94801680 +S11322A099810F900F900F900F900F900F9099239A +S11322B059F0FE0132968091C80085FFFCCF9093BF +S11322C0CE0091919111F7CF1F921F928DE191E071 +S11322D09F938F931F930F930E94801699810F9061 +S11322E00F900F900F900F900F90992359F0FE01CB +S11322F032968091C80085FFFCCF9093CE009191D7 +S11323009111F7CF98E080E0880F2998219A2A98B4 +S1132310229A25E02A95F1F700001B99816035E0A7 +S11323203A95F1F70000299A219A2AE02A95F1F7C3 +S113233000C0915049F71F928F9387E291E09F93D9 +S11323408F931F930F930E94801699810F900F9083 +S11323500F900F900F900F90992359F0FE01329631 +S11323608091C80085FFFCCF9093CE00919191118C +S1132370F7CF2C9A249A2C98249A1F9282E08F9358 +S11323808DE191E09F938F931F930F930E9480168A +S113239099810F900F900F900F900F900F909923A9 +S11323A059F0FE0132968091C80085FFFCCF9093CE +S11323B0CE0091919111F7CF28E092E080E015C012 +S11323C02A98229A35E03A95F1F700001B9981602A +S11323D035E03A95F1F70000299A219A3AE03A95C6 +S11323E0F1F700C0990F215041F0880F2998219AE4 +S11323F097FFE6CF2A9A229AE5CF1F928F9387E21E +S113240091E09F938F931F930F930E94801699815D +S11324100F900F900F900F900F900F90992359F0F9 +S1132420FE0132968091C80085FFFCCF9093CE00C8 +S113243091919111F7CF1F9285E28F938DE191E0F5 +S11324409F938F931F930F930E94801699810F90EF +S11324500F900F900F900F900F90992359F0FE0159 +S113246032968091C80085FFFCCF9093CE00919165 +S11324709111F7CF28E095E280E015C02A98229ABE +S113248035E03A95F1F700001B99816035E03A9503 +S1132490F1F70000299A219A3AE03A95F1F700C041 +S11324A0990F215041F0880F2998219A97FFE6CF80 +S11324B02A9A229AE5CF1F928F9387E291E09F9305 +S11324C08F931F930F930E94801699810F900F9002 +S11324D00F900F900F900F90992359F0FE013296B0 +S11324E08091C80085FFFCCF9093CE00919191110B +S11324F0F7CF1F921F928DE191E09F938F931F93CB +S11325000F930E94801699810F900F900F900F9057 +S11325100F900F90992359F0FE0132968091C800D4 +S113252085FFFCCF9093CE0091919111F7CF98E065 +S113253080E0880F2998219A2A98229A25E02A95E2 +S1132540F1F700001B99816035E03A95F1F700003E +S1132550299A219A2AE02A95F1F700C0915049F767 +S11325601F928F9387E291E09F938F931F930F9312 +S11325700E94801699810F900F900F900F900F90EA +S11325800F90992359F0FE0132968091C80085FF7F +S1132590FCCF9093CE0091919111F7CF2C9A249A6D +S11325A02C98249A1F9282E08F938DE191E09F935F +S11325B08F931F930F930E94801699810F900F9011 +S11325C00F900F900F900F90992359F0FE013296BF +S11325D08091C80085FFFCCF9093CE00919191111A +S11325E0F7CF28E092E080E015C02A98229A35E0DF +S11325F03A95F1F700001B99816035E03A95F1F7BF +S11326000000299A219A3AE03A95F1F700C0990F0F +S1132610215041F0880F2998219A97FFE6CF2A9AF2 +S1132620229AE5CF1F928F9387E291E09F938F9335 +S11326301F930F930E94801699810F900F900F9013 +S11326400F900F900F90992359F0FE0132968091CC +S1132650C80085FFFCCF9093CE0091919111F7CFE4 +S11326601F9286E28F938DE191E09F938F931F9346 +S11326700F930E94801699810F900F900F900F90E6 +S11326800F900F90992359F0FE0132968091C80063 +S113269085FFFCCF9093CE0091919111F7CF28E064 +S11326A096E280E015C02A98229A35E03A95F1F72F +S11326B000001B99816035E03A95F1F70000299AF2 +S11326C0219A3AE03A95F1F700C0990F215041F070 +S11326D0880F2998219A97FFE6CF2A9A229AE5CF64 +S11326E01F928F9387E291E09F938F931F930F9391 +S11326F00E94801699810F900F900F900F900F9069 +S11327000F90992359F0FE0132968091C80085FFFD +S1132710FCCF9093CE0091919111F7CF1F921F920D +S11327208DE191E09F938F931F930F930E948016E6 +S113273099810F900F900F900F900F900F90992305 +S113274059F0FE0132968091C80085FFFCCF90932A +S1132750CE0091919111F7CF98E080E0880F2998ED +S1132760219A2A98229A25E02A95F1F700001B99CC +S1132770816035E03A95F1F70000299A219A2AE020 +S11327802A95F1F700C0915049F71F928F9387E281 +S113279091E09F938F931F930F930E9480169981CA +S11327A00F900F900F900F900F900F90992359F066 +S11327B0FE0132968091C80085FFFCCF9093CE0035 +S11327C091919111F7CF2C9A249A2C98249A1F92C4 +S11327D082E08F938DE191E09F938F931F930F93EA +S11327E00E94801699810F900F900F900F900F9078 +S11327F00F90992359F0FE0132968091C80085FF0D +S1132800FCCF9093CE0091919111F7CF28E092E004 +S113281080E015C02A98229A35E03A95F1F7000035 +S11328201B99816035E03A95F1F70000299A219AC5 +S11328303AE03A95F1F700C0990F215041F0880F22 +S11328402998219A97FFE6CF2A9A229AE5CF1F92D8 +S11328508F9387E291E09F938F931F930F930E942E +S1132860801699810F900F900F900F900F900F90FA +S1132870992359F0FE0132968091C80085FFFCCF60 +S11328809093CE0091919111F7CF1F9287E28F938D +S11328908DE191E09F938F931F930F930E94801675 +S11328A099810F900F900F900F900F900F90992394 +S11328B059F0FE0132968091C80085FFFCCF9093B9 +S11328C0CE0091919111F7CF28E097E280E015C0F6 +S11328D02A98229A35E03A95F1F700001B99816015 +S11328E035E03A95F1F70000299A219A3AE03A95B1 +S11328F0F1F700C0990F215041F0880F2998219ACF +S113290097FFE6CF2A9A229AE5CF1F928F9387E208 +S113291091E09F938F931F930F930E948016998148 +S11329200F900F900F900F900F900F90992359F0E4 +S1132930FE0132968091C80085FFFCCF9093CE00B3 +S113294091919111F7CF1F921F928DE191E09F9386 +S11329508F931F930F930E94801699810F900F906D +S11329600F900F900F900F90992359F0FE0132961B +S11329708091C80085FFFCCF9093CE009191911176 +S1132980F7CF98E080E0880F2998219A2A98229A14 +S113299025E02A95F1F700001B99816035E03A950E +S11329A0F1F70000299A219A2AE02A95F1F700C04C +S11329B0915049F71F928F9387E291E09F938F93F1 +S11329C01F930F930E94801699810F900F900F9080 +S11329D00F900F900F90992359F0FE013296809139 +S11329E0C80085FFFCCF9093CE0091919111F7CF51 +S11329F02C9A249A2C98249A1F9282E08F938DE12A +S1132A0091E09F938F931F930F930E948016998157 +S1132A100F900F900F900F900F900F90992359F0F3 +S1132A20FE0132968091C80085FFFCCF9093CE00C2 +S1132A3091919111F7CF28E092E080E015C02A9897 +S1132A40229A35E03A95F1F700001B99816035E050 +S1132A503A95F1F70000299A219A3AE03A95F1F76C +S1132A6000C0990F215041F0880F2998219A97FFAF +S1132A70E6CF2A9A229AE5CF1F928F9387E291E0BC +S1132A809F938F931F930F930E94801699810F90A9 +S1132A900F900F900F900F900F90992359F0FE0113 +S1132AA032968091C80085FFFCCF9093CE0091911F +S1132AB09111F7CF1F928CE08F938DE191E09F935A +S1132AC08F931F930F930E94801699810F900F90FC +S1132AD00F900F900F900F90992359F0FE013296AA +S1132AE08091C80085FFFCCF9093CE009191911105 +S1132AF0F7CF28E09CE080E015C02A98229A35E0C0 +S1132B003A95F1F700001B99816035E03A95F1F7A9 +S1132B100000299A219A3AE03A95F1F700C0990FFA +S1132B20215041F0880F2998219A97FFE6CF2A9ADD +S1132B30229AE5CF1F928F9387E291E09F938F9320 +S1132B401F930F930E94801699810F900F900F90FE +S1132B500F900F900F90992359F0FE0132968091B7 +S1132B60C80085FFFCCF9093CE0091919111F7CFCF +S1132B701F921F928DE191E09F938F931F930F9368 +S1132B800E94801699810F900F900F900F900F90D4 +S1132B900F90992359F0FE0132968091C80085FF69 +S1132BA0FCCF9093CE0091919111F7CF98E080E003 +S1132BB0880F2998219A2A98229A25E02A95F1F7D4 +S1132BC000001B99816035E03A95F1F70000299ADD +S1132BD0219A2AE02A95F1F700C0915049F71F92F3 +S1132BE08F9387E291E09F938F931F930F930E949B +S1132BF0801699810F900F900F900F900F900F9067 +S1132C00992359F0FE0132968091C80085FFFCCFCC +S1132C109093CE0091919111F7CF2C9A249AE29639 +S1132C200FB6F894DEBF0FBECDBFDF91CF911F91D9 +S1132C300F91FF90EF90089526E02093CA00209111 +S1132C40C90028602093C90027E62093CC00E5E35F +S1132C50F1E0DF0135E52091C80025FFFCCF30937A +S1132C60CE003D913111F7CF229A2A98229A219AC7 +S1132C702998219A249A2C9A249A23982B982B9851 +S1132C80239A26E02093CA002091C900286020934B +S1132C90C90027E62093CC0035E52091C80025FF24 +S1132CA0FCCF3093CE0031913111F7CF0C942E0824 +S1132CB0279A269A259A86E08093CA008091C900B3 +S1132CC088608093C90087E68093CC00E5E3F1E057 +S1132CD095E58091C80085FFFCCF9093CE0091913B +S1132CE09111F7CF84E491E00E948E0782E491E091 +S1132CF00C941C16EE0FFF1F0590F491E02D09941F +S1132D00AEE0B0E0E6E8F6E10C9439190D891E89CD +S1132D1086E08C831A8309838FEF9FE79E838D83DC +S1132D20CE014996AC016F89788DCE0101960E943F +S1132D30A216EF81F885E00FF11F10822E96E4E0D1 +S1132D400C945519ACE0B0E0E8EAF6E10C942B19C8 +S1132D507C016B018A01FC0117821682838181FF49 +S1132D60C8C188248394912C8C0E9D1EF7019381F5 +S1132D70F60193FD859193FF81916F01882309F4F6 +S1132D80B4C1853239F493FD859193FF81916F012C +S1132D90853229F4B70190E00E949618E7CF512CB0 +S1132DA0312C20E02032A8F48B3261F028F48032F8 +S1132DB051F0833271F40BC08D3239F0803349F411 +S1132DC021602AC02260246027C0286025C02061B9 +S1132DD023C027FD29C0382F30533A3088F426FF0A +S1132DE007C0852D6AE00E942219582E530E14C084 +S1132DF0832D6AE00E942219382E330E20620CC003 +S1132E008E3221F426FD71C1206406C08C3611F483 +S1132E10206802C0883641F4F60193FD859193FF42 +S1132E2081916F018111BECF982F9554933018F082 +S1132E309052933028F40C5F1F4FFFE3F9830DC0C9 +S1132E40833631F0833771F0833509F05EC023C0D7 +S1132E50F801808189830E5F1F4F44244394512CD1 +S1132E60540115C03801F2E06F0E711CF801A08006 +S1132E70B18026FF03C0652D70E002C06FEF7FEFC5 +S1132E80C5012C870E948B182C0183012C856FE7C8 +S1132E90262E222218C03801F2E06F0E711CF801B0 +S1132EA0A080B18026FF03C0652D70E002C06FEFE3 +S1132EB07FEFC5012C870E9480182C012C8550E8D7 +S1132EC0252E222A830123FC1CC006C0B70180E200 +S1132ED090E00E9496183A94832D90E04816590683 +S1132EE0A8F30FC0F50127FC859127FE81915F01AE +S1132EF0B70190E00E94961831103A94F1E04F1A0D +S1132F0051084114510471F7EDC0843611F089362B +S1132F1041F5F80127FF07C06081718182819381A7 +S1132F200C5F1F4F08C060817181882777FD8095F1 +S1132F30982F0E5F1F4F4FE6B42EB22297FF09C0A1 +S1132F4090958095709561957F4F8F4F9F4FF0E8D6 +S1132F50BF2A2AE030E0A4010E94C218A82EA818B3 +S1132F6043C0853731F43FEEB32EB2222AE030E07D +S1132F7024C099EFB92EB2228F36B9F020F48835E7 +S1132F8009F0B3C00DC0803721F0883709F0ADC017 +S1132F9002C020E1B22AB4FE0BC084E0B82A08C003 +S1132FA024FF09C0E6E0BE2A06C028E030E005C0E0 +S1132FB020E130E002C020E132E0F801B7FE07C0B2 +S1132FC060817181828193810C5F1F4F06C0608193 +S1132FD0718180E090E00E5F1F4FA4010E94C2182F +S1132FE0A82EA818FFE7BF22B6FE0BC02B2D2E7FFC +S1132FF0A51450F4B4FE0AC0B2FC08C02B2D2E7EDA +S113300005C07A2C2B2D03C07A2C01C0752C24FF0B +S11330100DC0FE01EA0DF11D8081803311F4297E7B +S113302009C022FF06C07394739404C0822F86786B +S113303009F0739423FD14C020FF0FC05A2C73149D +S113304060F4530C5718732C08C0B70180E290E069 +S11330502C870E94961873942C857314B0F304C0C3 +S1133060731410F4371801C0312C24FF12C0B701B7 +S113307080E390E02C870E9496182C8522FF1EC0C6 +S113308021FF03C088E590E002C088E790E0B70123 +S11330900CC0822F867891F021FD02C080E201C02D +S11330A08BE227FD8DE2B70190E00E94961806C0DE +S11330B0B70180E390E00E9496185A94A514C0F3D7 +S11330C0AA94F401EA0DF11DB701808190E00E94F9 +S11330D09618A110F5CF06C0B70180E290E00E94D7 +S11330E096183A943110F8CF41CEF70126813781F2 +S11330F002C02FEF3FEFC9012C96E2E10C9447196F +S1133100FC010590615070400110D8F780959095AE +S11331108E0F9F1F0895FC016150704001900110B3 +S1133120D8F7809590958E0F9F1F08950F931F9346 +S1133130CF93DF938C01EB018B8181FD03C00FEFF3 +S11331401FEF1AC082FF0DC02E813F818C819D81AB +S11331502817390764F4E881F9810193F983E88336 +S113316006C0E885F985802F0995892B41F78E8162 +S11331709F8101969F838E83C801DF91CF911F9118 +S11331800F910895FA01AA27283061F1203191F1B5 +S1133190E8946F936E7F6E5F7F4F8F4F9F4FAF4F5B +S11331A0B1E040D0B4E03ED0670F781F891F9A1F6A +S11331B0A11D680F791F8A1F911DA11D6A0F711D22 +S11331C0811D911DA11D22D009F468943F91062E02 +S11331D0000C3019000C000C3019305D3193CEF620 +S11331E0CF010895462F4770405D4193B3E00FD05F +S11331F0C9F7F6CF462F4F70405D4A3318F0495D4A +S113320031FD4052419302D0A9F7EACFB4E0A6952C +S11332109795879577956795BA95C9F7009761054E +S1133220710508959B01AC010A2E069457954795A4 +S113323037952795BA95C9F7620F731F841F951F99 +S1133240A01D0895002480FD060E660F11F08695DA +S1133250D1F7802D08952F923F924F925F926F92F3 +S11332607F928F929F92AF92BF92CF92DF92EF9212 +S1133270FF920F931F93CF93DF93CDB7DEB7CA1B93 +S1133280DB0B0FB6F894DEBF0FBECDBF09942A88BE +S1133290398848885F846E847D848C849B84AA8466 +S11332A0B984C884DF80EE80FD800C811B81AA81F3 +S11332B0B981CE0FD11D0FB6F894DEBF0FBECDBFBE +S10B32C0ED010895F894FFCF1D +S11332C8496E697420646F6E65210D0A004E657835 +S11332D874207061636B6167653A0D0A002D3E20A6 +S11332E830782530327800203C2D20307825303253 +S11332F8780D0A005561727420646F6E65210D0A99 +S10533080000BF S9030000FC diff --git a/Mainboard/Mainboard/Debug/Makefile b/Mainboard/Mainboard/Debug/Makefile index 9ec3217..63abbba 100644 --- a/Mainboard/Mainboard/Debug/Makefile +++ b/Mainboard/Mainboard/Debug/Makefile @@ -36,11 +36,7 @@ SUBDIRS := # Add inputs and outputs from these tool invocations to the build variables C_SRCS += \ -../Can.cpp \ -../Led.cpp \ -../Mainboard.cpp \ -../Rs232.cpp \ -../Spi.cpp +../Mainboard.cpp PREPROCESSING_SRCS += @@ -50,35 +46,19 @@ ASM_SRCS += OBJS += \ -Can.o \ -Led.o \ -Mainboard.o \ -Rs232.o \ -Spi.o +Mainboard.o OBJS_AS_ARGS += \ -Can.o \ -Led.o \ -Mainboard.o \ -Rs232.o \ -Spi.o +Mainboard.o C_DEPS += \ -Can.d \ -Led.d \ -Mainboard.d \ -Rs232.d \ -Spi.d +Mainboard.d C_DEPS_AS_ARGS += \ -Can.d \ -Led.d \ -Mainboard.d \ -Rs232.d \ -Spi.d +Mainboard.d OUTPUT_FILE_PATH +=Mainboard.elf @@ -95,14 +75,6 @@ LIB_DEP+= - - - - - - - - ./%.o: .././%.cpp @echo Building file: $< @echo Invoking: AVR8/GNU C++ Compiler : diff --git a/Mainboard/Mainboard/Debug/makedep.mk b/Mainboard/Mainboard/Debug/makedep.mk index db4df43..0c8cf68 100644 --- a/Mainboard/Mainboard/Debug/makedep.mk +++ b/Mainboard/Mainboard/Debug/makedep.mk @@ -2,13 +2,5 @@ # Automatically-generated file. Do not edit or delete the file ################################################################################ -Can.cpp - -Led.cpp - Mainboard.cpp -Rs232.cpp - -Spi.cpp - diff --git a/Mainboard/Mainboard/Led.cpp b/Mainboard/Mainboard/Led.cpp index f14e3c0..f05dc17 100644 --- a/Mainboard/Mainboard/Led.cpp +++ b/Mainboard/Mainboard/Led.cpp @@ -5,37 +5,37 @@ * Author: netz */ -#include "Led.h" +/*#include "Led.h" -/*Led::Led() { +Led::Led() { init(); -}*/ +} -/*void Led::init() { +void Led::init() { red::make_output(); green::make_output(); blue::make_output(); -}*/ +} -/*void Led::uninit() { -}*/ +void Led::uninit() { +} -/*void Led::color(uint8_t mask) { +void Led::color(uint8_t mask) { (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 Led::rainbow(uint8_t time) { +void Led::rainbow(uint8_t time) { fade(RED, YELLOW, time); fade(YELLOW, GREEN, time); fade(GREEN, CYAN, time); fade(CYAN, BLUE, time); fade(BLUE, MAGENTA, time); fade(MAGENTA, RED, time); -}*/ +} -/*void Led::fade(int from, int to, int dur) { +void Led::fade(int from, int to, int dur) { for (int i=0;i<0xFF;i++) { for(int k=0;k +class Led { + public: + Led() { + init(); + } + void color(uint8_t mask) { + (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); + fade(YELLOW, GREEN, time); + 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) { + for (uint8_t i=0;i<0xFF;i++) { + for(uint8_t k=0;k red; + const typedef avrlib::pin green; + const typedef avrlib::pin blue; +}; + + + +#endif /* LED_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/Mainboard.cpp b/Mainboard/Mainboard/Mainboard.cpp index 0871614..e6250bf 100644 --- a/Mainboard/Mainboard/Mainboard.cpp +++ b/Mainboard/Mainboard/Mainboard.cpp @@ -6,31 +6,32 @@ */ #include "config.h" -#include "Led.h" -#include "Rs232.h" -#include "Can.h" -#include "Spi.h" -#include "portc.hpp" -#include "portb.hpp"; + +#include "Led.hpp" +#include "Uart.hpp" +#include "Can.hpp" +#include "Spi.hpp" +#include "portb.hpp" + #include -//////////////////// LED /////////////////////////////// -typedef Led ledclass; +//////////////////// LED ////////////////////////////////////////// +typedef Led ledclass; ledclass l; - -typedef Spi spiclass; +///////////////////////// UART //////////////////////////////////// +typedef Uart<9600> uartclass; +uartclass u; +///////////////////////// SPI ///////////////////////////////////// +typedef Spi spiclass; spiclass s; - -typedef Rs232<9600> rs232class; -rs232class r; - -Rs232 r; -Can c(s); +///////////////////////// CAN ///////////////////////////////////// +typedef Can canclass; +canclass c; int main(void) { l.color(l.YELLOW); - r.send("bla\n"); + u.send("Init done!\r\n"); CANMessage m; m.id = 0x0123; m.rtr = 0; @@ -39,21 +40,21 @@ int main(void) m.data[1] = 0xFE; while(1) { - //l.color(Led::GREEN); - _delay_ms(100); - //r.send("Text\n"); - //_delay_ms(500); - //c.can_send_message(&m); - //l.color(Led::BLACK); - //_delay_ms(100); - //l.color(Led::GREEN); - //c.can_send_message(&m); + l.color(l.GREEN); + _delay_ms(10000); + u.send("Next package:\r\n"); + /*r.send("0xAFFE\r\n"); + c.can_send_message(&m); + _delay_ms(500); + l.color(l.BLACK); + _delay_ms(100);*/ + uint8_t r = c.can_get_message(&m); if(r == 0xFF) { - //l.color(Led::RED); + l.color(l.RED); _delay_ms(100); } else { - //l.color(Led::BLUE); + l.color(l.BLUE); _delay_ms(1000); } } diff --git a/Mainboard/Mainboard/Mainboard.cppproj b/Mainboard/Mainboard/Mainboard.cppproj index c1f711d..cab9c5a 100644 --- a/Mainboard/Mainboard/Mainboard.cppproj +++ b/Mainboard/Mainboard/Mainboard.cppproj @@ -18,8 +18,7 @@ Native true false - - + exception_table 0 true 0x20000000 @@ -105,58 +104,52 @@ - True - True - True - True - True - True - - - DEBUG - - - Optimize (-O1) - True - True - Default (-g2) - True - True - True - - - DEBUG - - - Optimize more (-O2) - True - True - Default (-g2) - True - - - libm - - - <segmentname>=<address>, for example .boot=0xff - Default (-Wa,-g) - + True + True + True + True + True + True + + + DEBUG + + + Optimize (-O1) + True + True + Default (-g2) + True + True + True + + + DEBUG + + + Optimize more (-O2) + True + True + Default (-g2) + True + + + libm + + + <segmentname>=<address>, for example .boot=0xff + Default (-Wa,-g) + - - compile - - + compile compile - - compile - - + compile @@ -174,16 +167,10 @@ compile - + compile - - compile - - - compile - - + compile diff --git a/Mainboard/Mainboard/Rs232.cpp b/Mainboard/Mainboard/Rs232.cpp index a3c3975..35c8888 100644 --- a/Mainboard/Mainboard/Rs232.cpp +++ b/Mainboard/Mainboard/Rs232.cpp @@ -21,7 +21,7 @@ uint8_t Rs232::uart_putchar(uint8_t c) void Rs232::init() { UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 - UCSR1B |= /*(1< +#include +#include "pin.hpp" + +template +class Spi { + public: + Spi() { + init(); + } + void CSOn() { + cs::make_low(); + } + void CSOff() { + cs::make_high(); + } + uint8_t send(uint8_t data) { + char t[50]; + sprintf(t, "-> 0x%02x", data); + u.send(t); + uint8_t r; + if(mode == 0) { + r = send_hard(data); + } + r = send_soft(data); + sprintf(t, " <- 0x%02x\r\n", r); + u.send(t); + return r; + } + private: + uart u; + const typedef avrlib::pin cs; + const typedef avrlib::pin miso; + const typedef avrlib::pin mosi; + const typedef avrlib::pin sck; + void init() { + init_port(); + if(mode == 0) { + init_spi(); + } + } + void init_port() { + mosi::make_output(); + mosi::make_low(); + sck::make_output(); + sck::make_low(); + cs::make_output(); + cs::make_high(); + miso::make_input(); + miso::make_low(); + } + void init_spi() { + SPCR = (1<0; a--) { //das Byte wird Bitweise nacheinander Gesendet MSB zuerst + datain<<=1; //Schieben um das Richtige Bit zusetzen + sck::make_low(); // Clock auf LOW + if (data & 0x80) { //Ist Bit a in Byte gesetzt + mosi::make_high(); //Set Output High + } + else{ + mosi::make_low(); //Set Output Low + } + _delay_us(1); + if(miso::read()) //Lesen des Pegels + { + datain |= 1; + } + _delay_us(1); + sck::make_high(); // Clock auf High + _delay_us(2); + data<<=1; //Schiebe um nächstes Bit zusenden + } + return datain; + } + uint8_t send_hard(uint8_t data) { + // Sendet ein Byte + SPDR = data; + + // Wartet bis Byte gesendet wurde + loop_until_bit_is_set(SPSR, SPIF); + + return SPDR; + } +}; + +#endif /* SPI_H_ */ \ No newline at end of file diff --git a/Mainboard/Mainboard/pin.hpp b/Mainboard/Mainboard/pin.hpp index f0427b6..c14f338 100644 --- a/Mainboard/Mainboard/pin.hpp +++ b/Mainboard/Mainboard/pin.hpp @@ -1,6 +1,8 @@ #ifndef AVRLIB_PIN_HPP #define AVRLIB_PIN_HPP +#include + namespace avrlib { template diff --git a/Mainboard/Mainboard/uart.hpp b/Mainboard/Mainboard/uart.hpp new file mode 100644 index 0000000..24128da --- /dev/null +++ b/Mainboard/Mainboard/uart.hpp @@ -0,0 +1,45 @@ +/* + * Rs232.h + * + * Created: 04.11.2013 21:31:09 + * Author: netz + */ + +#ifndef RS232_H_ +#define RS232_H_ + + +#include "config.h" +#include +#include + +template +class Uart { + public: + Uart() { + init(); + send("Uart done!\r\n"); + } + void send(const char *text) { + while (*text) + { + uart_putchar(*text); + text++; + } + } + private: + void init() { + UCSR1C = (1 << UCSZ11) |(1 << UCSZ10); //8N1 + UCSR1B |= /*(1<