From 21fab157da37660f6ea4951d6a00928e05422fac Mon Sep 17 00:00:00 2001 From: Meydin87 Date: Tue, 18 Jul 2023 06:39:39 +0200 Subject: [PATCH] WIP PinState from array to pointer --- .../Switch/{Swtich => }/.vscode/arduino.json | 4 +- .../.vscode/c_cpp_properties.json | 2 +- Software/Switch/{Swtich => }/MeyCan.cpp | 0 Software/Switch/{Swtich => }/MeyCan.h | 0 Software/Switch/{Swtich => }/MeyRule.cpp | 0 Software/Switch/{Swtich => }/MeyRule.h | 0 .../Switch/{Swtich/Swtich.ino => Switch.ino} | 5 +- .../Swtich/Swtich.ino_atmega809_8000000L.hex | 257 - .../Swtich/Swtich.ino_atmega809_8000000L.lst | 3871 --------------- Software/UPSoftware/MeyCan.cpp | 235 + Software/UPSoftware/MeyCan.h | 105 + Software/UPSoftware/MeyRule.cpp | 104 + Software/UPSoftware/MeyRule.h | 111 + Software/UPSoftware/UPSoftware.ino | 257 +- .../UPSoftware.ino_atmega809_8000000L.hex | 283 -- .../UPSoftware.ino_atmega809_8000000L.lst | 4404 ----------------- .../sketch_jun30b.ino_atmega809_16000000L.hex | 33 - .../sketch_jun30b.ino_atmega809_16000000L.lst | 590 --- .../sketch_jun30b.ino_atmega809_8000000L.hex | 221 - .../sketch_jun30b.ino_atmega809_8000000L.lst | 3265 ------------ .../sketch_jun30b/sketch_jun30b.ino | 221 - 21 files changed, 579 insertions(+), 13389 deletions(-) rename Software/Switch/{Swtich => }/.vscode/arduino.json (68%) rename Software/Switch/{Swtich => }/.vscode/c_cpp_properties.json (99%) rename Software/Switch/{Swtich => }/MeyCan.cpp (100%) rename Software/Switch/{Swtich => }/MeyCan.h (100%) rename Software/Switch/{Swtich => }/MeyRule.cpp (100%) rename Software/Switch/{Swtich => }/MeyRule.h (100%) rename Software/Switch/{Swtich/Swtich.ino => Switch.ino} (94%) delete mode 100644 Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex delete mode 100644 Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst create mode 100644 Software/UPSoftware/MeyCan.cpp create mode 100644 Software/UPSoftware/MeyCan.h create mode 100644 Software/UPSoftware/MeyRule.cpp create mode 100644 Software/UPSoftware/MeyRule.h delete mode 100644 Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.hex delete mode 100644 Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.lst delete mode 100644 Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex delete mode 100644 Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst delete mode 100644 Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex delete mode 100644 Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst delete mode 100644 Software/UPSoftware/sketch_jun30b/sketch_jun30b.ino diff --git a/Software/Switch/Swtich/.vscode/arduino.json b/Software/Switch/.vscode/arduino.json similarity index 68% rename from Software/Switch/Swtich/.vscode/arduino.json rename to Software/Switch/.vscode/arduino.json index de790da..707afe4 100644 --- a/Software/Switch/Swtich/.vscode/arduino.json +++ b/Software/Switch/.vscode/arduino.json @@ -1,5 +1,7 @@ { "configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader", "board": "MegaCoreX:megaavr:809", - "sketch": "Swtich.ino" + "sketch": "Switch.ino", + "port": "COM6", + "programmer": "jtag2updi" } \ No newline at end of file diff --git a/Software/Switch/Swtich/.vscode/c_cpp_properties.json b/Software/Switch/.vscode/c_cpp_properties.json similarity index 99% rename from Software/Switch/Swtich/.vscode/c_cpp_properties.json rename to Software/Switch/.vscode/c_cpp_properties.json index 9347603..a05167f 100644 --- a/Software/Switch/Swtich/.vscode/c_cpp_properties.json +++ b/Software/Switch/.vscode/c_cpp_properties.json @@ -32,7 +32,7 @@ "cppStandard": "c++17", "defines": [ "F_CPU=8000000L", - "ARDUINO=10819", + "ARDUINO=10607", "ARDUINO_AVR_ATmega809", "ARDUINO_ARCH_MEGAAVR", "__DBL_MIN_EXP__=(-125)", diff --git a/Software/Switch/Swtich/MeyCan.cpp b/Software/Switch/MeyCan.cpp similarity index 100% rename from Software/Switch/Swtich/MeyCan.cpp rename to Software/Switch/MeyCan.cpp diff --git a/Software/Switch/Swtich/MeyCan.h b/Software/Switch/MeyCan.h similarity index 100% rename from Software/Switch/Swtich/MeyCan.h rename to Software/Switch/MeyCan.h diff --git a/Software/Switch/Swtich/MeyRule.cpp b/Software/Switch/MeyRule.cpp similarity index 100% rename from Software/Switch/Swtich/MeyRule.cpp rename to Software/Switch/MeyRule.cpp diff --git a/Software/Switch/Swtich/MeyRule.h b/Software/Switch/MeyRule.h similarity index 100% rename from Software/Switch/Swtich/MeyRule.h rename to Software/Switch/MeyRule.h diff --git a/Software/Switch/Swtich/Swtich.ino b/Software/Switch/Switch.ino similarity index 94% rename from Software/Switch/Swtich/Swtich.ino rename to Software/Switch/Switch.ino index 129a7db..3b6936d 100644 --- a/Software/Switch/Swtich/Swtich.ino +++ b/Software/Switch/Switch.ino @@ -1,8 +1,11 @@ +#include ; +#include ; #include ; #include ; #include "MeyCan.h"; #include "MeyRule.h"; + struct can_frame incomingCanFrame; void setup() { @@ -26,7 +29,7 @@ void setup() { AddToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); + // _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); delay(10); // a bit delay for mcp2515 to get the clock diff --git a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex deleted file mode 100644 index 4cf5266..0000000 --- a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex +++ /dev/null @@ -1,257 +0,0 @@ -:1000000050C0000068C0000066C0000064C000006E -:1000100062C0000060C000005EC000005CC0000064 -:100020005AC0000058C0000056C0000054C0000074 -:1000300052C0000050C000004EC000004CC0000084 -:100040004AC0000048C0000046C0000044C0000094 -:1000500042C0000040C000003EC000003CC00000A4 -:100060003AC0000072C5000036C0000034C0000075 -:1000700032C0000030C000002EC000002CC00000C4 -:100080002AC0000028C0000026C0000024C00000D4 -:1000900022C0000020C000001EC000001CC00000E4 -:1000A000DB0511241FBECFEFCDBFDFE3DEBF2CE3A6 -:1000B000A0E0BCE301C01D92A838B207E1F710E050 -:1000C000C1E5D0E003C02197FE011BD7C035D107A1 -:1000D000D1F78BD531C794CF90E0FC01EE52F04BB5 -:1000E00020812F3F51F08755904BDC01EC91B0E21D -:1000F000EB9FF0011124FC5F218308958091433C24 -:10010000811117C01092443C1092453C1092463C1D -:100110001092473C1092483C1092493C10924A3C45 -:1001200010924B3C10924C3C10924D3C81E08093DD -:10013000433C8091E3058C7F9091423C892B8093D6 -:10014000E305911117C084E0C7DF86E0C5DF809129 -:10015000C10884608093C1088091C0088162809347 -:10016000C00890917D3C80917E3C9093C008809324 -:10017000C1080895913021F48EE0AEDF80E1E6CF32 -:10018000923029F78EE1A8DF80E2E0CF0000809373 -:10019000C4088091C30887FFFCCF8091C4080895EC -:1001A000282F30E0F901EE52F04B40814F3F09F427 -:1001B00050C0893258F4F901E95AF04BE081EE233E -:1001C00029F0E13099F010F0E63020F1F901E7551F -:1001D000F04BE081A0E2EA9FF0011124FC5F8081F6 -:1001E000842321F1611120C046830895F901E0586C -:1001F000F04B5081533008F05F5F7091010A81E04D -:1002000090E001C0880F5A95EAF780958723809384 -:10021000010ADCCF80E1E89FF0011124E05AF54F9C -:1002200081818F7E8183D2CF458308952058304BC2 -:10023000D9018C91309771F08F3F61F07096E80F83 -:10024000F11D9FB7F8948081611107C0877F80837B -:100250009FBF0895F0E0E0E0F4CF8860F8CF8FB75B -:10026000F8942091103C3091113C4091123C5091F7 -:10027000133CE091AA0AF091AB0A9091A60A90FF74 -:1002800008C02F5F3F4F4F4F5F4FE091AA0AF09198 -:10029000AB0A8FBFA8EEB3E001D623E0F695E79551 -:1002A0002A95E1F76E0F7F1F811D911D08958F9292 -:1002B0009F92AF92BF92CF92DF92EF92FF924B014B -:1002C0005C01CDDF6B017C01A8EEB3E0A5019401D8 -:1002D000E5D5C60ED71EE81EF91EC616D706E806D7 -:1002E000F90610F4BCDFF9CFBADF6C157D058E0579 -:1002F0009F05D0F3FF90EF90DF90CF90BF90AF902D -:100300009F908F9008958F929F92AF92BF92CF92BD -:10031000DF92EF92FF920F93CF93DF93FC018081E6 -:10032000893210F461E03CDF8091443C882319F06D -:1003300081FF0DC07894DF91CF910F91FF90EF90E6 -:10034000DF90CF90BF90AF909F908F90089580FFE7 -:10035000F2CF8090463C9090473CA090483CB090B3 -:10036000493CC12CD12C7601E0E09401A501B601F5 -:10037000C701A0E0BAD581F1217030E040E050E043 -:1003800060E070E080E090E0B0D5D1F0B0E0A0E0B7 -:10039000E03370F4AE2FA695A695A695F0E2AF9F38 -:1003A000D0011124A05FBB4F8E2F8770A80FB11D05 -:1003B000CE2FD0E0C25CD34C88899C91892B8C9342 -:1003C0009401A501B601C70101E074D549015A01A4 -:1003D0006B017C01EF5FC9CF80904A3C90904B3C11 -:1003E000A0904C3CB0904D3CC12CD12C7601E0E269 -:1003F0009401A501B601C701A0E077D509F49BCF10 -:10040000217030E040E050E060E070E080E090E09B -:100410006CD5D1F0B0E0A0E0E03370F4AE2FA6953B -:10042000A695A69580E2A89FD0011124A05FBB4F9E -:100430008E2F8770A80FB11DCE2FD0E0C25CD34C99 -:1004400088899C91892B8C939401A501B601C701E1 -:1004500001E030D549015A016B017C01EF5FC8CF43 -:100460006F927F928F929F92AF92BF92CF92DF92C4 -:10047000EF92FF920F93CF93DF933C018091443C26 -:10048000882319F081FF1BC0F89481E38093C00892 -:1004900084E08093C108F3018081893208F09CC018 -:1004A00060E0DF91CF910F91FF90EF90DF90CF90C0 -:1004B000BF90AF909F908F907F906F9071CE80FF94 -:1004C000E4CF8090463C9090473CA090483CB09050 -:1004D000493CC12CD12C7601B0E09401A501B601B4 -:1004E000C701A0E002D591F1217030E040E050E07A -:1004F00060E070E080E090E0F8D4E1F0D0E0C0E0AF -:10050000B03370F4CB2FC695C695C69580E2C89FD0 -:10051000E0011124C05FDB4F8B2F8770C80FD11D06 -:100520008B2F90E02881825C934CFC01208B88818A -:10053000887F88839401A501B601C70101E0BAD480 -:1005400049015A016B017C01BF5FC7CF80904A3CD3 -:1005500090904B3CA0904C3CB0904D3CC12CD12C89 -:100560007601B0E29401A501B601C701A0E0BDD4B7 -:1005700009F48BCF217030E040E050E060E070E0A3 -:1005800080E090E0B2D4E1F0D0E0C0E0B03370F4AD -:10059000CB2FC695C695C695F0E2CF9FE0011124FA -:1005A000C05FDB4F8B2F8770C80FD11D8B2F90E062 -:1005B0002881825C934CFC01208B8881887F888312 -:1005C0009401A501B601C70101E074D449015A01A3 -:1005D0006B017C01BF5FC6CFDF91CF910F91FF9080 -:1005E000EF90DF90CF90BF90AF909F908F907F90D3 -:1005F0006F900895FF920F931F93CF93DF93EC01B9 -:10060000F62E042F122F2CDF85E0C0DD8F2DBEDDEE -:10061000802FBCDD812FBADDCE01DF91CF911F91FC -:100620000F91FF9070CEDF92EF92FF920F931F9386 -:10063000CF93DF937C01C62FD42E152F022F10DF0E -:1006400082E0A4DD8C2FA2DDCD2DD12F0C0F1D2F2C -:10065000111DC017D10719F0899198DDFACFC70194 -:10066000DF91CF911F910F91FF90EF90DF904BCED4 -:100670000F931F93CF93DF93EC01062F142FF0DE1F -:1006800082E084DD802F82DD812F80DDCE01DF914D -:10069000CF911F910F9137CE1F93CF93DF93EC0132 -:1006A000162FDEDE83E072DD812F70DD80E06EDDEF -:1006B000182FCE0128DE812FDF91CF911F91089551 -:1006C000CF92DF92EF92FF921F93CF93DF93EC01D3 -:1006D000162F262F40EE6FE08DDF8FB7F894C09075 -:1006E000103CD090113CE090123CF090133C8FBF36 -:1006F0008AE0C80ED11CE11CF11C2FB7F894809140 -:10070000103C9091113CA091123CB091133C2FBF32 -:100710008C159D05AE05BF0590F46EE0CE01BCDFE3 -:10072000807E1813EACF81E091E0892790E0DF9185 -:10073000CF911F91FF90EF90DF90CF90089580E0D0 -:10074000F3CF0F931F93CF93DF93EC0160E8B8DFF3 -:100750008C01892B61F440E06AE2CE0189DF40E937 -:1007600069E2CE0185DF42E868E2CE0181DFC8019F -:10077000DF91CF911F910F91089560E0A1CF7F92FB -:100780008F929F92AF92BF92CF92DF92EF92FF92A1 -:100790000F931F93CF93DF93CDB7DEB7A297CDBF53 -:1007A000DEBF8C015DDE80ECF1DCC801ACDD6AE00F -:1007B00070E080E090E07BDDCE0101967C018EE070 -:1007C000F70111928A95E9F72EE0A70160E3C801CD -:1007D0002ADF2EE0A70160E4C80125DF2EE0A70193 -:1007E00060E5C80120DF40E060E6C80141DF40E08D -:1007F00060E7C8013DDF43EA6BE2C80139DF24E06E -:1008000047E660E6C801F6DE21E047E660E7C8019A -:10081000F1DE8CE0ECE3FFE4DE011F9601900D9227 -:100820008A95E1F74E01FFE08F0E911CB12CA12CAF -:1008300028E0722EF401E190F1904F0160E8C801C8 -:100840003FDF6C01892B09F065C0F2E0EF16F1047F -:1008500009F472C058F4E114F10409F473C0EA9485 -:10086000EF2889F0CC24C394D12C54C0E4E0EE16D8 -:10087000F10409F465C008F461C085E0E816F104EC -:1008800089F768E101C064E091E0A916B10409F0BC -:100890005BC01E8E1D8E7C8E1B8E24E0AE01455EDD -:1008A0005F4FC801C0DEEFEFAE1ABE0AF6E0AF162A -:1008B000B10409F0BFCF1F8E18A281E090E089A398 -:1008C0009AA37E018FE1E80EF11C4E0193E2890E9E -:1008D000911C98E0792EF701A190B1907F0160E81A -:1008E000C801EEDE6C01892BA9F41E8E1D8E7C8E54 -:1008F0001B8EA114B10469F1AA94AB2809F0B2CF00 -:1009000064E224E0AE01455E5F4FC8018CDE8E14C8 -:100910009F0409F7C601A296CDBFDEBFDF91CF913C -:100920001F910F91FF90EF90DF90CF90BF90AF900D -:100930009F908F907F90089568E0A6CF60E1A4CF4C -:1009400064E1A2CF60E0A0CF1B8E1C8E1E8E1D8E98 -:10095000A4CF60E2D6CF2F923F924F925F926F92D8 -:100960007F928F929F92AF92BF92CF92DF92EF923F -:10097000FF920F931F93CF93DF93CDB7DEB76397AB -:10098000CDBFDEBF7C018091143C9091153C092EB7 -:10099000000CAA0BBB0BAF6FBF688093003C909319 -:1009A000013CA093023CB093033C84E08093043C60 -:1009B00083E08093083C81E08093093C86E080934B -:1009C0000A3C10920B3C4BE0942E5E0184E1A80E91 -:1009D000B11C8091043C893008F08BC086E0E8E4CB -:1009E000FFE4DE011E9601900D928A95E1F73E012B -:1009F000EEE06E0E711CF301C190D1903F018601B3 -:100A0000000F111FF801EC0DFD1DE25BF04B808023 -:100A1000682DC70141DE83FD93C07090043CF8E06F -:100A2000F71508F466C08091003C9091013CA091BC -:100A3000023CB091033CAC01BD01442777FD4395D6 -:100A4000552766277727242FAC01BD01442755275A -:100A50006627707422242A94322C422CFFE15F2EE8 -:100A6000211106C022242A94E7E03E2E412C512C6D -:100A700082219321A421B521222309F453C08C8320 -:100A80009B83CD01AA27BB27282F220F220F220FDD -:100A9000207E382F33703860232B2A8335E09695DB -:100AA00087953A95E1F78983872D452B462B472B70 -:100AB00009F080648D83472D50E068E07CE3CE012F -:100AC000069631D225E0270D0C0D1D1DF801E25BC5 -:100AD000F04BAE014F5F5F4F6181C701A4DD28E09D -:100AE00048E0682DC70186DD682DC701D5DD807718 -:100AF00019F09A9491106DCF6396CDBFDEBFDF9150 -:100B0000CF911F910F91FF90EF90DF90CF90BF900A -:100B1000AF909F908F907F906F905F904F903F909D -:100B20002F9008959C0193E0369527959A95E1F7CB -:100B300029838295880F807E8A831C821B82B4CF92 -:100B40006A147B0409F057CFD4CF1F920F920FB6CF -:100B50000F9211248F939F93AF93BF938091103C7A -:100B60009091113CA091123CB091133C0196A11DB3 -:100B7000B11D8093103C9093113CA093123CB09314 -:100B8000133C81E08093A60ABF91AF919F918F9112 -:100B90000F900FBE0F901F9018951F93CF93DF9368 -:100BA000EC01162FABDA1883812F96DACE01DF9194 -:100BB000CF911F91A8CBEDE7FCE384E0818381E333 -:100BC0008083EEE3FCE31582148262E082E89CE31A -:100BD000E4DF63E081E89CE3E0DF68E080E89CE339 -:100BE000DCDF69E08FE79CE3D8CF91E088ED84BF3C -:100BF0009093610080910206856080930206809147 -:100C00000006816080930006809102068F7C8065DB -:100C1000809302061092E20582E08093E4059093AF -:100C2000030A8EEF8093270A8093260A80E8809338 -:100C30002D0A80932B0A8093290A80932C0A809393 -:100C40002A0A8093280A89E08093000A87E080932B -:100C5000E505E0E8FAE0C7E09EEF80E8D5E0C18373 -:100C600094878587D0837096E03C2AE0F207B9F735 -:100C70001092A10A8FE39FE18093AC0A9093AD0A92 -:100C80008091A50A81608093A50A1092A00A8091A4 -:100C9000A00A81608093A00A789430DA6AE070E05C -:100CA00080E090E004DB85E190E08093163C909337 -:100CB000173C81E08093183C8093193C80931A3C48 -:100CC00024E130E020931B3C30931C3C80931D3C7E -:100CD00080931E3C92E090931F3C23E130E02093F0 -:100CE000203C3093213C8093223C8093233C93E032 -:100CF0009093243C22E130E02093253C3093263C25 -:100D00008093273C8093283C94E09093293C21E1F8 -:100D100030E020932A3C30932B3C80932C3C8093F2 -:100D20002D3CD0932E3C20E130E020932F3C30939B -:100D3000303C8093313C8093323C96E09093333C3E -:100D40002FE030E02093343C3093353C8093363CA8 -:100D50008093373CC093383C2EE030E02093393C00 -:100D600030933A3C80933B3C80933C3C88E08093BA -:100D70003D3C80916000806890E028ED24BF809326 -:100D8000600082E89CE3FBDC82E89CE3DADC82E83A -:100D90009CE3F3DC81E89CE3F2DC81E89CE3D1DCBA -:100DA00081E89CE3EADC80E89CE3E9DC80E89CE302 -:100DB000C8DC80E89CE3E1DC8FE79CE3E0DC8FE7C4 -:100DC0009CE3BFDC8FE79CE3D8DCC6E1DCE38EE389 -:100DD000E82E8CE3F82EEC16FD0651F0188119323E -:100DE00028F4812F79D960E0812FDAD92596F3CFC5 -:100DF000F0910411809106117091081160910A110F -:100E000090910C11E091031120910511509107115F -:100E10004091091130910B11880F811D880F8F2788 -:100E2000770F711D770F711D8727629560FB67959E -:100E300067F9862792959827822F880F811D880F42 -:100E40008E27252F220F211D220F211D8227242FBF -:100E5000229520FB279527F98227232F2295822789 -:100E60008093143C9093153C82E89CE374DD81E808 -:100E70009CE371DD80E89CE36EDD8FE79CE36BDD36 -:100E8000C0E0D0E082E89CE366DD68EE73E080E0DD -:100E900090E00DDA2097B1F3B3D8F4CF38D0A59F06 -:100EA000900DB49F900DA49F800D911D1124089565 -:100EB00097FD1094002E083098F00850232F342FFF -:100EC000452F562F672F782F892F912DF4CF15940A -:100ED0009795879577956795579547953795279572 -:100EE0000A95AAF71124002D08950024A7FD009467 -:100EF0002A173005400550056005700580059005EE -:100F00000895EE0FFF1F0590F491E02D0994A29F24 -:100F1000B001B39FC001A39F01D0B29F700D811D8E -:100F20001124911D0895FB01DC0102C001900D9276 -:0C0F300041505040D8F70895F894FFCFCE -:100F3C000000010002000300040005000000010095 -:100F4C00020030313640414650515600000000003E -:100F5C00000000000000000005010101010101007A -:100F6C000000000000000000000000000000000075 -:100F7C00000203000001020304050607000102033E -:100F8C000405000102030405060700010203040521 -:100F9C00060700010203000102030405060000001D -:100FAC000000000000010101010101020202020225 -:100FBC0002020203030303030303030404040405F2 -:100FCC0005050505050501020408102040800102F5 -:100FDC0004081020010204081020408001020408BB -:0F0FEC0010204080010204080102040810204078 -:00000001FF diff --git a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst deleted file mode 100644 index fd8f337..0000000 --- a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst +++ /dev/null @@ -1,3871 +0,0 @@ - -C:\Users\Martin\AppData\Local\Temp\arduino_build_427645/Swtich.ino.elf: file format elf32-avr - - -Disassembly of section .text: - -00000000 <__vectors>: -__vectors(): -../../../../../crt1/gcrt1.S:61 - 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> - 2: 00 00 nop -../../../../../crt1/gcrt1.S:67 - 4: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt> - 6: 00 00 nop -../../../../../crt1/gcrt1.S:68 - 8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt> - a: 00 00 nop -../../../../../crt1/gcrt1.S:69 - c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt> - e: 00 00 nop -../../../../../crt1/gcrt1.S:70 - 10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt> - 12: 00 00 nop -../../../../../crt1/gcrt1.S:71 - 14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt> - 16: 00 00 nop -../../../../../crt1/gcrt1.S:72 - 18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt> - 1a: 00 00 nop -../../../../../crt1/gcrt1.S:73 - 1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt> - 1e: 00 00 nop -../../../../../crt1/gcrt1.S:74 - 20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt> - 22: 00 00 nop -../../../../../crt1/gcrt1.S:75 - 24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt> - 26: 00 00 nop -../../../../../crt1/gcrt1.S:76 - 28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt> - 2a: 00 00 nop -../../../../../crt1/gcrt1.S:77 - 2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt> - 2e: 00 00 nop -../../../../../crt1/gcrt1.S:78 - 30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt> - 32: 00 00 nop -../../../../../crt1/gcrt1.S:79 - 34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt> - 36: 00 00 nop -../../../../../crt1/gcrt1.S:80 - 38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt> - 3a: 00 00 nop -../../../../../crt1/gcrt1.S:81 - 3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt> - 3e: 00 00 nop -../../../../../crt1/gcrt1.S:82 - 40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt> - 42: 00 00 nop -../../../../../crt1/gcrt1.S:83 - 44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt> - 46: 00 00 nop -../../../../../crt1/gcrt1.S:84 - 48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt> - 4a: 00 00 nop -../../../../../crt1/gcrt1.S:85 - 4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt> - 4e: 00 00 nop -../../../../../crt1/gcrt1.S:86 - 50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt> - 52: 00 00 nop -../../../../../crt1/gcrt1.S:87 - 54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt> - 56: 00 00 nop -../../../../../crt1/gcrt1.S:88 - 58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt> - 5a: 00 00 nop -../../../../../crt1/gcrt1.S:89 - 5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt> - 5e: 00 00 nop -../../../../../crt1/gcrt1.S:90 - 60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt> - 62: 00 00 nop -../../../../../crt1/gcrt1.S:91 - 64: 72 c5 rjmp .+2788 ; 0xb4a <__vector_25> - 66: 00 00 nop -../../../../../crt1/gcrt1.S:92 - 68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt> - 6a: 00 00 nop -../../../../../crt1/gcrt1.S:93 - 6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt> - 6e: 00 00 nop -../../../../../crt1/gcrt1.S:94 - 70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt> - 72: 00 00 nop -../../../../../crt1/gcrt1.S:95 - 74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt> - 76: 00 00 nop -../../../../../crt1/gcrt1.S:96 - 78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt> - 7a: 00 00 nop -../../../../../crt1/gcrt1.S:97 - 7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt> - 7e: 00 00 nop -../../../../../crt1/gcrt1.S:98 - 80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt> - 82: 00 00 nop -../../../../../crt1/gcrt1.S:99 - 84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt> - 86: 00 00 nop -../../../../../crt1/gcrt1.S:100 - 88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt> - 8a: 00 00 nop -../../../../../crt1/gcrt1.S:101 - 8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt> - 8e: 00 00 nop -../../../../../crt1/gcrt1.S:102 - 90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt> - 92: 00 00 nop -../../../../../crt1/gcrt1.S:103 - 94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt> - 96: 00 00 nop -../../../../../crt1/gcrt1.S:104 - 98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt> - 9a: 00 00 nop -../../../../../crt1/gcrt1.S:105 - 9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt> - ... - -000000a0 <__ctors_start>: -__trampolines_start(): - a0: db 05 cpc r29, r11 - -000000a2 <__ctors_end>: -__dtors_end(): -../../../../../crt1/gcrt1.S:230 - a2: 11 24 eor r1, r1 -../../../../../crt1/gcrt1.S:231 - a4: 1f be out 0x3f, r1 ; 63 -../../../../../crt1/gcrt1.S:232 - a6: cf ef ldi r28, 0xFF ; 255 -../../../../../crt1/gcrt1.S:234 - a8: cd bf out 0x3d, r28 ; 61 -../../../../../crt1/gcrt1.S:236 - aa: df e3 ldi r29, 0x3F ; 63 -../../../../../crt1/gcrt1.S:237 - ac: de bf out 0x3e, r29 ; 62 - -000000ae <__do_clear_bss>: -__do_clear_bss(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 - ae: 2c e3 ldi r18, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 - b0: a0 e0 ldi r26, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 - b2: bc e3 ldi r27, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 - b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start> - -000000b6 <.do_clear_bss_loop>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 - b6: 1d 92 st X+, r1 - -000000b8 <.do_clear_bss_start>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 - b8: a8 38 cpi r26, 0x88 ; 136 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 - ba: b2 07 cpc r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 - bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop> - -000000be <__do_global_ctors>: -__do_global_ctors(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 - be: 10 e0 ldi r17, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 - c0: c1 e5 ldi r28, 0x51 ; 81 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 - c2: d0 e0 ldi r29, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 - c4: 03 c0 rjmp .+6 ; 0xcc <__do_global_ctors+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 - c6: 21 97 sbiw r28, 0x01 ; 1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 - c8: fe 01 movw r30, r28 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 - ca: 1b d7 rcall .+3638 ; 0xf02 <__tablejump2__> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 - cc: c0 35 cpi r28, 0x50 ; 80 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 - ce: d1 07 cpc r29, r17 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 - d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8> -../../../../../crt1/gcrt1.S:314 - d2: 8b d5 rcall .+2838 ; 0xbea
-../../../../../crt1/gcrt1.S:315 - d4: 31 c7 rjmp .+3682 ; 0xf38 <_exit> - -000000d6 <__bad_interrupt>: -__vector_38(): -../../../../../crt1/gcrt1.S:209 - d6: 94 cf rjmp .-216 ; 0x0 <__vectors> - -000000d8 : -pinMode.part.1.constprop.23(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - d8: 90 e0 ldi r25, 0x00 ; 0 - da: fc 01 movw r30, r24 - dc: ee 52 subi r30, 0x2E ; 46 - de: f0 4b sbci r31, 0xB0 ; 176 - e0: 20 81 ld r18, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:33 - - if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP)) - e2: 2f 3f cpi r18, 0xFF ; 255 - e4: 51 f0 breq .+20 ; 0xfa -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:36 - return; - - PORT_t *port = digitalPinToPortStruct(pin); - e6: 87 55 subi r24, 0x57 ; 87 - e8: 90 4b sbci r25, 0xB0 ; 176 - ea: dc 01 movw r26, r24 - ec: ec 91 ld r30, X - ee: b0 e2 ldi r27, 0x20 ; 32 - f0: eb 9f mul r30, r27 - f2: f0 01 movw r30, r0 - f4: 11 24 eor r1, r1 - f6: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:43 - return; - - if (mode == OUTPUT) - { - /* Configure direction as output */ - port->DIRSET = bit_mask; - f8: 21 83 std Z+1, r18 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:75 - } - - /* Restore state */ - SREG = status; - } -} - fa: 08 95 ret - -000000fc : -_ZN8SPIClass5beginEv.constprop.19(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:131 - config(DEFAULT_SPI_SETTINGS); -} - -void SPIClass::init() -{ - if (initialized) - fc: 80 91 43 3c lds r24, 0x3C43 ; 0x803c43 - 100: 81 11 cpse r24, r1 - 102: 17 c0 rjmp .+46 ; 0x132 <__EEPROM_REGION_LENGTH__+0x32> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133 - return; - interruptMode = SPI_IMODE_NONE; - 104: 10 92 44 3c sts 0x3C44, r1 ; 0x803c44 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134 - interruptSave = 0; - 108: 10 92 45 3c sts 0x3C45, r1 ; 0x803c45 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135 - interruptMask_lo = 0; - 10c: 10 92 46 3c sts 0x3C46, r1 ; 0x803c46 - 110: 10 92 47 3c sts 0x3C47, r1 ; 0x803c47 - 114: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 - 118: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136 - interruptMask_hi = 0; - 11c: 10 92 4a 3c sts 0x3C4A, r1 ; 0x803c4a - 120: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b - 124: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c - 128: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137 - initialized = true; - 12c: 81 e0 ldi r24, 0x01 ; 1 - 12e: 80 93 43 3c sts 0x3C43, r24 ; 0x803c43 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:99 - -void SPIClass::begin() -{ - init(); - - PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3); - 132: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 - 136: 8c 7f andi r24, 0xFC ; 252 - 138: 90 91 42 3c lds r25, 0x3C42 ; 0x803c42 - 13c: 89 2b or r24, r25 - 13e: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:102 - - // MISO is set to input by the controller - if(_uc_mux == SPI_MUX) - 142: 91 11 cpse r25, r1 - 144: 17 c0 rjmp .+46 ; 0x174 <__EEPROM_REGION_LENGTH__+0x74> -pinMode(): - 146: 84 e0 ldi r24, 0x04 ; 4 - 148: c7 df rcall .-114 ; 0xd8 - 14a: 86 e0 ldi r24, 0x06 ; 6 - 14c: c5 df rcall .-118 ; 0xd8 -_ZN8SPIClass5beginEv.constprop.19(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:123 - pinMode(PIN_SPI_SCK_PINSWAP_2, OUTPUT); - } - #endif - - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - 14e: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 - 152: 84 60 ori r24, 0x04 ; 4 - 154: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:124 - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - 158: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 - 15c: 81 62 ori r24, 0x21 ; 33 - 15e: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 - 162: 90 91 7d 3c lds r25, 0x3C7D ; 0x803c7d - 166: 80 91 7e 3c lds r24, 0x3C7E ; 0x803c7e -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 16a: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 16e: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN8SPIClass5beginEv.constprop.19(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:127 - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - - config(DEFAULT_SPI_SETTINGS); -} - 172: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:108 - { - pinMode(PIN_SPI_MOSI, OUTPUT); - pinMode(PIN_SPI_SCK, OUTPUT); - } - #if defined(SPI_MUX_PINSWAP_1) - else if(_uc_mux == SPI_MUX_PINSWAP_1) - 174: 91 30 cpi r25, 0x01 ; 1 - 176: 21 f4 brne .+8 ; 0x180 <__EEPROM_REGION_LENGTH__+0x80> -pinMode(): - 178: 8e e0 ldi r24, 0x0E ; 14 - 17a: ae df rcall .-164 ; 0xd8 - 17c: 80 e1 ldi r24, 0x10 ; 16 - 17e: e6 cf rjmp .-52 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c> -_ZN8SPIClass5beginEv.constprop.19(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:115 - pinMode(PIN_SPI_MOSI_PINSWAP_1, OUTPUT); - pinMode(PIN_SPI_SCK_PINSWAP_1, OUTPUT); - } - #endif - #if defined(SPI_MUX_PINSWAP_2) - else if(_uc_mux == SPI_MUX_PINSWAP_2) - 180: 92 30 cpi r25, 0x02 ; 2 - 182: 29 f7 brne .-54 ; 0x14e <__EEPROM_REGION_LENGTH__+0x4e> -pinMode(): - 184: 8e e1 ldi r24, 0x1E ; 30 - 186: a8 df rcall .-176 ; 0xd8 - 188: 80 e2 ldi r24, 0x20 ; 32 - 18a: e0 cf rjmp .-64 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c> - -0000018c : -_ZN8SPIClass8transferEh.constprop.17(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:304 - * The following NOP introduces a small delay that can prevent the wait - * loop from iterating when running at the maximum speed. This gives - * about 10% more speed, even if it seems counter-intuitive. At lower - * speeds it is unnoticed. - */ - asm volatile("nop"); - 18c: 00 00 nop -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:306 - - SPI0.DATA = data; - 18e: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:307 - while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0); // wait for complete send - 192: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 - 196: 87 ff sbrs r24, 7 - 198: fc cf rjmp .-8 ; 0x192 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:308 - return SPI0.DATA; // read data back - 19a: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:309 -} - 19e: 08 95 ret - -000001a0 : -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 1a0: 28 2f mov r18, r24 - 1a2: 30 e0 ldi r19, 0x00 ; 0 - 1a4: f9 01 movw r30, r18 - 1a6: ee 52 subi r30, 0x2E ; 46 - 1a8: f0 4b sbci r31, 0xB0 ; 176 - 1aa: 40 81 ld r20, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:138 - if (bit_mask == NOT_A_PIN) - 1ac: 4f 3f cpi r20, 0xFF ; 255 - 1ae: 09 f4 brne .+2 ; 0x1b2 - 1b0: 50 c0 rjmp .+160 ; 0x252 -turnOffPWM(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:97 -static void turnOffPWM(uint8_t pin) -{ - /* Actually turn off compare channel, not the timer */ - - /* Get pin's timer */ - uint8_t timer = digitalPinToTimer(pin); - 1b2: 89 32 cpi r24, 0x29 ; 41 - 1b4: 58 f4 brcc .+22 ; 0x1cc - 1b6: f9 01 movw r30, r18 - 1b8: e9 5a subi r30, 0xA9 ; 169 - 1ba: f0 4b sbci r31, 0xB0 ; 176 - 1bc: e0 81 ld r30, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:98 - if (timer == NOT_ON_TIMER) - 1be: ee 23 and r30, r30 - 1c0: 29 f0 breq .+10 ; 0x1cc -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:104 - return; - - uint8_t bit_pos; - TCB_t *timerB; - - switch (timer) - 1c2: e1 30 cpi r30, 0x01 ; 1 - 1c4: 99 f0 breq .+38 ; 0x1ec - 1c6: 10 f0 brcs .+4 ; 0x1cc - 1c8: e6 30 cpi r30, 0x06 ; 6 - 1ca: 20 f1 brcs .+72 ; 0x214 -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:150 - turnOffPWM(pin); - - /* Assuming the direction is already output !! */ - - /* Get port */ - PORT_t *port = digitalPinToPortStruct(pin); - 1cc: f9 01 movw r30, r18 - 1ce: e7 55 subi r30, 0x57 ; 87 - 1d0: f0 4b sbci r31, 0xB0 ; 176 - 1d2: e0 81 ld r30, Z - 1d4: a0 e2 ldi r26, 0x20 ; 32 - 1d6: ea 9f mul r30, r26 - 1d8: f0 01 movw r30, r0 - 1da: 11 24 eor r1, r1 - 1dc: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:153 - - /* Output direction */ - if (port->DIR & bit_mask) - 1de: 80 81 ld r24, Z - 1e0: 84 23 and r24, r20 - 1e2: 21 f1 breq .+72 ; 0x22c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:156 - { - /* Set output to value */ - if (val == LOW) - 1e4: 61 11 cpse r22, r1 - 1e6: 20 c0 rjmp .+64 ; 0x228 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:158 - { /* If LOW */ - port->OUTCLR = bit_mask; - 1e8: 46 83 std Z+6, r20 ; 0x06 - 1ea: 08 95 ret -turnOffPWM(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:109 - switch (timer) - { - /* TCA0 */ - case TIMERA0: - /* Bit position will give output channel */ - bit_pos = digitalPinToBitPosition(pin); - 1ec: f9 01 movw r30, r18 - 1ee: e0 58 subi r30, 0x80 ; 128 - 1f0: f0 4b sbci r31, 0xB0 ; 176 - 1f2: 50 81 ld r21, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:112 - - /* Disable corresponding channel */ - if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */ - 1f4: 53 30 cpi r21, 0x03 ; 3 - 1f6: 08 f0 brcs .+2 ; 0x1fa - 1f8: 5f 5f subi r21, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:113 - TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos)); - 1fa: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 - 1fe: 81 e0 ldi r24, 0x01 ; 1 - 200: 90 e0 ldi r25, 0x00 ; 0 - 202: 01 c0 rjmp .+2 ; 0x206 - 204: 88 0f add r24, r24 - 206: 5a 95 dec r21 - 208: ea f7 brpl .-6 ; 0x204 - 20a: 80 95 com r24 - 20c: 87 23 and r24, r23 - 20e: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 - 212: dc cf rjmp .-72 ; 0x1cc -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:123 - case TIMERB0: - case TIMERB1: - case TIMERB2: - case TIMERB3: - - timerB = (TCB_t *)&TCB0 + (timer - TIMERB0); - 214: 80 e1 ldi r24, 0x10 ; 16 - 216: e8 9f mul r30, r24 - 218: f0 01 movw r30, r0 - 21a: 11 24 eor r1, r1 - 21c: e0 5a subi r30, 0xA0 ; 160 - 21e: f5 4f sbci r31, 0xF5 ; 245 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:126 - - /* Disable TCB compare channel */ - timerB->CTRLB &= ~(TCB_CCMPEN_bm); - 220: 81 81 ldd r24, Z+1 ; 0x01 - 222: 8f 7e andi r24, 0xEF ; 239 - 224: 81 83 std Z+1, r24 ; 0x01 - 226: d2 cf rjmp .-92 ; 0x1cc -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:167 - port->OUTTGL = bit_mask; - /* If HIGH OR > TOGGLE */ - } - else - { - port->OUTSET = bit_mask; - 228: 45 83 std Z+5, r20 ; 0x05 - 22a: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:180 - pull up is enabled if this function is called. - Should we purposely implement this side effect? - */ - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - 22c: 20 58 subi r18, 0x80 ; 128 - 22e: 30 4b sbci r19, 0xB0 ; 176 - 230: d9 01 movw r26, r18 - 232: 8c 91 ld r24, X -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 234: 30 97 sbiw r30, 0x00 ; 0 - 236: 71 f0 breq .+28 ; 0x254 - 238: 8f 3f cpi r24, 0xFF ; 255 - 23a: 61 f0 breq .+24 ; 0x254 - 23c: 70 96 adiw r30, 0x10 ; 16 - 23e: e8 0f add r30, r24 - 240: f1 1d adc r31, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:186 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - 242: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:187 - cli(); - 244: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 - - if (val == LOW) - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 246: 80 81 ld r24, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:189 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - cli(); - - if (val == LOW) - 248: 61 11 cpse r22, r1 - 24a: 07 c0 rjmp .+14 ; 0x25a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 24c: 87 7f andi r24, 0xF7 ; 247 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 24e: 80 83 st Z, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:201 - } - - /* Restore system status */ - SREG = status; - 250: 9f bf out 0x3f, r25 ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:203 - } -} - 252: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 254: f0 e0 ldi r31, 0x00 ; 0 - 256: e0 e0 ldi r30, 0x00 ; 0 - 258: f4 cf rjmp .-24 ; 0x242 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 25a: 88 60 ori r24, 0x08 ; 8 - 25c: f8 cf rjmp .-16 ; 0x24e - -0000025e : -micros(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:103 -{ - uint32_t m; - uint16_t t; - - /* Save current state and disable interrupts */ - uint8_t status = SREG; - 25e: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:104 - cli(); - 260: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:107 - - /* Get current number of millis (i.e. overflows) and timer count */ - m = timer_millis; - 262: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 - 266: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 - 26a: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 - 26e: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108 - t = _timer->CNT; - 272: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 276: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:112 - - /* If the timer overflow flag is raised, we just missed it, - increment to account for it, & read new ticks */ - if (_timer->INTFLAGS & TCB_CAPT_bm) - 27a: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 - 27e: 90 ff sbrs r25, 0 - 280: 08 c0 rjmp .+16 ; 0x292 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114 - { - m++; - 282: 2f 5f subi r18, 0xFF ; 255 - 284: 3f 4f sbci r19, 0xFF ; 255 - 286: 4f 4f sbci r20, 0xFF ; 255 - 288: 5f 4f sbci r21, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:115 - t = _timer->CNT; - 28a: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 28e: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:119 - } - - // Restore SREG - SREG = status; - 292: 8f bf out 0x3f, r24 ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:130 - return m * 1000 + (t >> 4); -#elif (F_CPU == 10000000L) - t = t >> 3; - return m * 1000 + (t - (t >> 2) + (t >> 4) - (t >> 6)); -#elif (F_CPU == 8000000L) - return m * 1000 + (t >> 3); - 294: a8 ee ldi r26, 0xE8 ; 232 - 296: b3 e0 ldi r27, 0x03 ; 3 - 298: 01 d6 rcall .+3074 ; 0xe9c <__muluhisi3> - 29a: 23 e0 ldi r18, 0x03 ; 3 - 29c: f6 95 lsr r31 - 29e: e7 95 ror r30 - 2a0: 2a 95 dec r18 - 2a2: e1 f7 brne .-8 ; 0x29c - 2a4: 6e 0f add r22, r30 - 2a6: 7f 1f adc r23, r31 - 2a8: 81 1d adc r24, r1 - 2aa: 91 1d adc r25, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:143 -#elif (F_CPU == 1000000L) - return m * 1000 + t; -#else - return 0; -#endif -} - 2ac: 08 95 ret - -000002ae : -delay(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:146 - -void delay(unsigned long ms) -{ - 2ae: 8f 92 push r8 - 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: 4b 01 movw r8, r22 - 2c0: 5c 01 movw r10, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147 - uint32_t start_time = micros(), delay_time = 1000 * ms; - 2c2: cd df rcall .-102 ; 0x25e - 2c4: 6b 01 movw r12, r22 - 2c6: 7c 01 movw r14, r24 - 2c8: a8 ee ldi r26, 0xE8 ; 232 - 2ca: b3 e0 ldi r27, 0x03 ; 3 - 2cc: a5 01 movw r20, r10 - 2ce: 94 01 movw r18, r8 - 2d0: e5 d5 rcall .+3018 ; 0xe9c <__muluhisi3> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:150 - - /* Calculate future time to return */ - uint32_t return_time = start_time + delay_time; - 2d2: c6 0e add r12, r22 - 2d4: d7 1e adc r13, r23 - 2d6: e8 1e adc r14, r24 - 2d8: f9 1e adc r15, r25 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:153 - - /* If return time overflows */ - if (return_time < delay_time) - 2da: c6 16 cp r12, r22 - 2dc: d7 06 cpc r13, r23 - 2de: e8 06 cpc r14, r24 - 2e0: f9 06 cpc r15, r25 - 2e2: 10 f4 brcc .+4 ; 0x2e8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:156 - { - /* Wait until micros overflows */ - while (micros() > return_time) - 2e4: bc df rcall .-136 ; 0x25e - 2e6: f9 cf rjmp .-14 ; 0x2da -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:161 - ; - } - - /* Wait until return time */ - while (micros() < return_time) - 2e8: ba df rcall .-140 ; 0x25e - 2ea: 6c 15 cp r22, r12 - 2ec: 7d 05 cpc r23, r13 - 2ee: 8e 05 cpc r24, r14 - 2f0: 9f 05 cpc r25, r15 - 2f2: d0 f3 brcs .-12 ; 0x2e8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163 - ; -} - 2f4: ff 90 pop r15 - 2f6: ef 90 pop r14 - 2f8: df 90 pop r13 - 2fa: cf 90 pop r12 - 2fc: bf 90 pop r11 - 2fe: af 90 pop r10 - 300: 9f 90 pop r9 - 302: 8f 90 pop r8 - 304: 08 95 ret - -00000306 : -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:29 -void MCP2515::startSPI() { - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); -} - -void MCP2515::endSPI() { - 306: 8f 92 push r8 - 308: 9f 92 push r9 - 30a: af 92 push r10 - 30c: bf 92 push r11 - 30e: cf 92 push r12 - 310: df 92 push r13 - 312: ef 92 push r14 - 314: ff 92 push r15 - 316: 0f 93 push r16 - 318: cf 93 push r28 - 31a: df 93 push r29 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30 - digitalWrite(SPICS, HIGH); - 31c: fc 01 movw r30, r24 - 31e: 80 81 ld r24, Z -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 320: 89 32 cpi r24, 0x29 ; 41 - 322: 10 f4 brcc .+4 ; 0x328 - 324: 61 e0 ldi r22, 0x01 ; 1 - 326: 3c df rcall .-392 ; 0x1a0 -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:265 - config(settings); -} - -void SPIClass::endTransaction(void) -{ - if (interruptMode != SPI_IMODE_NONE) - 328: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 - 32c: 88 23 and r24, r24 - 32e: 19 f0 breq .+6 ; 0x336 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 330: 81 ff sbrs r24, 1 - 332: 0d c0 rjmp .+26 ; 0x34e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269 - { - interrupts(); - 334: 78 94 sei -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32 - SPI.endTransaction(); -} - 336: df 91 pop r29 - 338: cf 91 pop r28 - 33a: 0f 91 pop r16 - 33c: ff 90 pop r15 - 33e: ef 90 pop r14 - 340: df 90 pop r13 - 342: cf 90 pop r12 - 344: bf 90 pop r11 - 346: af 90 pop r10 - 348: 9f 90 pop r9 - 34a: 8f 90 pop r8 - 34c: 08 95 ret -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:271 - } - else if (interruptMode & SPI_IMODE_EXTINT) - 34e: 80 ff sbrs r24, 0 - 350: f2 cf rjmp .-28 ; 0x336 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:225 - shift++; - } -} - -void SPIClass::reattachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 352: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 - 356: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 - 35a: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 - 35e: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 - 362: c1 2c mov r12, r1 - 364: d1 2c mov r13, r1 - 366: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:226 - uint8_t shift = 0; - 368: e0 e0 ldi r30, 0x00 ; 0 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:227 - while (temp != 0) { - 36a: 94 01 movw r18, r8 - 36c: a5 01 movw r20, r10 - 36e: b6 01 movw r22, r12 - 370: c7 01 movw r24, r14 - 372: a0 e0 ldi r26, 0x00 ; 0 - 374: ba d5 rcall .+2932 ; 0xeea <__cmpdi2_s8> - 376: 81 f1 breq .+96 ; 0x3d8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:228 - if (temp & 1) { - 378: 21 70 andi r18, 0x01 ; 1 - 37a: 30 e0 ldi r19, 0x00 ; 0 - 37c: 40 e0 ldi r20, 0x00 ; 0 - 37e: 50 e0 ldi r21, 0x00 ; 0 - 380: 60 e0 ldi r22, 0x00 ; 0 - 382: 70 e0 ldi r23, 0x00 ; 0 - 384: 80 e0 ldi r24, 0x00 ; 0 - 386: 90 e0 ldi r25, 0x00 ; 0 - 388: b0 d5 rcall .+2912 ; 0xeea <__cmpdi2_s8> - 38a: d1 f0 breq .+52 ; 0x3c0 -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:229 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 38c: b0 e0 ldi r27, 0x00 ; 0 - 38e: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 390: e0 33 cpi r30, 0x30 ; 48 - 392: 70 f4 brcc .+28 ; 0x3b0 - 394: ae 2f mov r26, r30 - 396: a6 95 lsr r26 - 398: a6 95 lsr r26 - 39a: a6 95 lsr r26 - 39c: f0 e2 ldi r31, 0x20 ; 32 - 39e: af 9f mul r26, r31 - 3a0: d0 01 movw r26, r0 - 3a2: 11 24 eor r1, r1 - 3a4: a0 5f subi r26, 0xF0 ; 240 - 3a6: bb 4f sbci r27, 0xFB ; 251 - 3a8: 8e 2f mov r24, r30 - 3aa: 87 70 andi r24, 0x07 ; 7 - 3ac: a8 0f add r26, r24 - 3ae: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:230 - *pin_ctrl_reg |= irqMap[shift]; - 3b0: ce 2f mov r28, r30 - 3b2: d0 e0 ldi r29, 0x00 ; 0 - 3b4: c2 5c subi r28, 0xC2 ; 194 - 3b6: d3 4c sbci r29, 0xC3 ; 195 - 3b8: 88 89 ldd r24, Y+16 ; 0x10 - 3ba: 9c 91 ld r25, X - 3bc: 89 2b or r24, r25 - 3be: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:232 - } - temp = temp >> 1; - 3c0: 94 01 movw r18, r8 - 3c2: a5 01 movw r20, r10 - 3c4: b6 01 movw r22, r12 - 3c6: c7 01 movw r24, r14 - 3c8: 01 e0 ldi r16, 0x01 ; 1 - 3ca: 74 d5 rcall .+2792 ; 0xeb4 <__lshrdi3> - 3cc: 49 01 movw r8, r18 - 3ce: 5a 01 movw r10, r20 - 3d0: 6b 01 movw r12, r22 - 3d2: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:233 - shift++; - 3d4: ef 5f subi r30, 0xFF ; 255 - 3d6: c9 cf rjmp .-110 ; 0x36a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:235 - } - temp = interruptMask_hi; - 3d8: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a - 3dc: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b - 3e0: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c - 3e4: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d - 3e8: c1 2c mov r12, r1 - 3ea: d1 2c mov r13, r1 - 3ec: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:236 - shift = 32; - 3ee: e0 e2 ldi r30, 0x20 ; 32 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:237 - while (temp != 0) { - 3f0: 94 01 movw r18, r8 - 3f2: a5 01 movw r20, r10 - 3f4: b6 01 movw r22, r12 - 3f6: c7 01 movw r24, r14 - 3f8: a0 e0 ldi r26, 0x00 ; 0 - 3fa: 77 d5 rcall .+2798 ; 0xeea <__cmpdi2_s8> - 3fc: 09 f4 brne .+2 ; 0x400 <__DATA_REGION_LENGTH__> - 3fe: 9b cf rjmp .-202 ; 0x336 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:238 - if (temp & 1) { - 400: 21 70 andi r18, 0x01 ; 1 - 402: 30 e0 ldi r19, 0x00 ; 0 - 404: 40 e0 ldi r20, 0x00 ; 0 - 406: 50 e0 ldi r21, 0x00 ; 0 - 408: 60 e0 ldi r22, 0x00 ; 0 - 40a: 70 e0 ldi r23, 0x00 ; 0 - 40c: 80 e0 ldi r24, 0x00 ; 0 - 40e: 90 e0 ldi r25, 0x00 ; 0 - 410: 6c d5 rcall .+2776 ; 0xeea <__cmpdi2_s8> - 412: d1 f0 breq .+52 ; 0x448 <__DATA_REGION_LENGTH__+0x48> -_ZN7MCP25156endSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:239 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 414: b0 e0 ldi r27, 0x00 ; 0 - 416: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 418: e0 33 cpi r30, 0x30 ; 48 - 41a: 70 f4 brcc .+28 ; 0x438 <__DATA_REGION_LENGTH__+0x38> - 41c: ae 2f mov r26, r30 - 41e: a6 95 lsr r26 - 420: a6 95 lsr r26 - 422: a6 95 lsr r26 - 424: 80 e2 ldi r24, 0x20 ; 32 - 426: a8 9f mul r26, r24 - 428: d0 01 movw r26, r0 - 42a: 11 24 eor r1, r1 - 42c: a0 5f subi r26, 0xF0 ; 240 - 42e: bb 4f sbci r27, 0xFB ; 251 - 430: 8e 2f mov r24, r30 - 432: 87 70 andi r24, 0x07 ; 7 - 434: a8 0f add r26, r24 - 436: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:240 - *pin_ctrl_reg |= irqMap[shift]; - 438: ce 2f mov r28, r30 - 43a: d0 e0 ldi r29, 0x00 ; 0 - 43c: c2 5c subi r28, 0xC2 ; 194 - 43e: d3 4c sbci r29, 0xC3 ; 195 - 440: 88 89 ldd r24, Y+16 ; 0x10 - 442: 9c 91 ld r25, X - 444: 89 2b or r24, r25 - 446: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:242 - } - temp = temp >> 1; - 448: 94 01 movw r18, r8 - 44a: a5 01 movw r20, r10 - 44c: b6 01 movw r22, r12 - 44e: c7 01 movw r24, r14 - 450: 01 e0 ldi r16, 0x01 ; 1 - 452: 30 d5 rcall .+2656 ; 0xeb4 <__lshrdi3> - 454: 49 01 movw r8, r18 - 456: 5a 01 movw r10, r20 - 458: 6b 01 movw r12, r22 - 45a: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:243 - shift++; - 45c: ef 5f subi r30, 0xFF ; 255 - 45e: c8 cf rjmp .-112 ; 0x3f0 - -00000460 : -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 - SPICS = _CS; - pinMode(SPICS, OUTPUT); - endSPI(); -} - -void MCP2515::startSPI() { - 460: 6f 92 push r6 - 462: 7f 92 push r7 - 464: 8f 92 push r8 - 466: 9f 92 push r9 - 468: af 92 push r10 - 46a: bf 92 push r11 - 46c: cf 92 push r12 - 46e: df 92 push r13 - 470: ef 92 push r14 - 472: ff 92 push r15 - 474: 0f 93 push r16 - 476: cf 93 push r28 - 478: df 93 push r29 - 47a: 3c 01 movw r6, r24 -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:249 - } -} - -void SPIClass::beginTransaction(SPISettings settings) -{ - if (interruptMode != SPI_IMODE_NONE) - 47c: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 - 480: 88 23 and r24, r24 - 482: 19 f0 breq .+6 ; 0x48a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:251 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 484: 81 ff sbrs r24, 1 - 486: 1b c0 rjmp .+54 ; 0x4be -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253 - { - noInterrupts(); - 488: f8 94 cli -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 48a: 81 e3 ldi r24, 0x31 ; 49 - 48c: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 490: 84 e0 ldi r24, 0x04 ; 4 - 492: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26 - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); - 496: f3 01 movw r30, r6 - 498: 80 81 ld r24, Z -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 - 49a: 89 32 cpi r24, 0x29 ; 41 - 49c: 08 f0 brcs .+2 ; 0x4a0 - 49e: 9c c0 rjmp .+312 ; 0x5d8 - 4a0: 60 e0 ldi r22, 0x00 ; 0 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 -} - 4a2: df 91 pop r29 - 4a4: cf 91 pop r28 - 4a6: 0f 91 pop r16 - 4a8: ff 90 pop r15 - 4aa: ef 90 pop r14 - 4ac: df 90 pop r13 - 4ae: cf 90 pop r12 - 4b0: bf 90 pop r11 - 4b2: af 90 pop r10 - 4b4: 9f 90 pop r9 - 4b6: 8f 90 pop r8 - 4b8: 7f 90 pop r7 - 4ba: 6f 90 pop r6 -digitalWrite(): - 4bc: 71 ce rjmp .-798 ; 0x1a0 -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:255 - { - if (interruptMode & SPI_IMODE_GLOBAL) - { - noInterrupts(); - } - else if (interruptMode & SPI_IMODE_EXTINT) - 4be: 80 ff sbrs r24, 0 - 4c0: e4 cf rjmp .-56 ; 0x48a -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:200 - #endif - } -} - -void SPIClass::detachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 4c2: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 - 4c6: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 - 4ca: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 - 4ce: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 - 4d2: c1 2c mov r12, r1 - 4d4: d1 2c mov r13, r1 - 4d6: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:201 - uint8_t shift = 0; - 4d8: b0 e0 ldi r27, 0x00 ; 0 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:202 - while (temp != 0) { - 4da: 94 01 movw r18, r8 - 4dc: a5 01 movw r20, r10 - 4de: b6 01 movw r22, r12 - 4e0: c7 01 movw r24, r14 - 4e2: a0 e0 ldi r26, 0x00 ; 0 - 4e4: 02 d5 rcall .+2564 ; 0xeea <__cmpdi2_s8> - 4e6: 91 f1 breq .+100 ; 0x54c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:203 - if (temp & 1) { - 4e8: 21 70 andi r18, 0x01 ; 1 - 4ea: 30 e0 ldi r19, 0x00 ; 0 - 4ec: 40 e0 ldi r20, 0x00 ; 0 - 4ee: 50 e0 ldi r21, 0x00 ; 0 - 4f0: 60 e0 ldi r22, 0x00 ; 0 - 4f2: 70 e0 ldi r23, 0x00 ; 0 - 4f4: 80 e0 ldi r24, 0x00 ; 0 - 4f6: 90 e0 ldi r25, 0x00 ; 0 - 4f8: f8 d4 rcall .+2544 ; 0xeea <__cmpdi2_s8> - 4fa: e1 f0 breq .+56 ; 0x534 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:204 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 4fc: d0 e0 ldi r29, 0x00 ; 0 - 4fe: c0 e0 ldi r28, 0x00 ; 0 -detachMaskedInterrupts(): - 500: b0 33 cpi r27, 0x30 ; 48 - 502: 70 f4 brcc .+28 ; 0x520 - 504: cb 2f mov r28, r27 - 506: c6 95 lsr r28 - 508: c6 95 lsr r28 - 50a: c6 95 lsr r28 - 50c: 80 e2 ldi r24, 0x20 ; 32 - 50e: c8 9f mul r28, r24 - 510: e0 01 movw r28, r0 - 512: 11 24 eor r1, r1 - 514: c0 5f subi r28, 0xF0 ; 240 - 516: db 4f sbci r29, 0xFB ; 251 - 518: 8b 2f mov r24, r27 - 51a: 87 70 andi r24, 0x07 ; 7 - 51c: c8 0f add r28, r24 - 51e: d1 1d adc r29, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:205 - irqMap[shift] = *pin_ctrl_reg; - 520: 8b 2f mov r24, r27 - 522: 90 e0 ldi r25, 0x00 ; 0 - 524: 28 81 ld r18, Y - 526: 82 5c subi r24, 0xC2 ; 194 - 528: 93 4c sbci r25, 0xC3 ; 195 - 52a: fc 01 movw r30, r24 - 52c: 20 8b std Z+16, r18 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:206 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 52e: 88 81 ld r24, Y - 530: 88 7f andi r24, 0xF8 ; 248 - 532: 88 83 st Y, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:208 - } - temp = temp >> 1; - 534: 94 01 movw r18, r8 - 536: a5 01 movw r20, r10 - 538: b6 01 movw r22, r12 - 53a: c7 01 movw r24, r14 - 53c: 01 e0 ldi r16, 0x01 ; 1 - 53e: ba d4 rcall .+2420 ; 0xeb4 <__lshrdi3> - 540: 49 01 movw r8, r18 - 542: 5a 01 movw r10, r20 - 544: 6b 01 movw r12, r22 - 546: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:209 - shift++; - 548: bf 5f subi r27, 0xFF ; 255 - 54a: c7 cf rjmp .-114 ; 0x4da -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:211 - } - temp = interruptMask_hi; - 54c: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a - 550: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b - 554: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c - 558: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d - 55c: c1 2c mov r12, r1 - 55e: d1 2c mov r13, r1 - 560: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:212 - shift = 32; - 562: b0 e2 ldi r27, 0x20 ; 32 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:213 - while (temp != 0) { - 564: 94 01 movw r18, r8 - 566: a5 01 movw r20, r10 - 568: b6 01 movw r22, r12 - 56a: c7 01 movw r24, r14 - 56c: a0 e0 ldi r26, 0x00 ; 0 - 56e: bd d4 rcall .+2426 ; 0xeea <__cmpdi2_s8> - 570: 09 f4 brne .+2 ; 0x574 - 572: 8b cf rjmp .-234 ; 0x48a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:214 - if (temp & 1) { - 574: 21 70 andi r18, 0x01 ; 1 - 576: 30 e0 ldi r19, 0x00 ; 0 - 578: 40 e0 ldi r20, 0x00 ; 0 - 57a: 50 e0 ldi r21, 0x00 ; 0 - 57c: 60 e0 ldi r22, 0x00 ; 0 - 57e: 70 e0 ldi r23, 0x00 ; 0 - 580: 80 e0 ldi r24, 0x00 ; 0 - 582: 90 e0 ldi r25, 0x00 ; 0 - 584: b2 d4 rcall .+2404 ; 0xeea <__cmpdi2_s8> - 586: e1 f0 breq .+56 ; 0x5c0 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:215 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 588: d0 e0 ldi r29, 0x00 ; 0 - 58a: c0 e0 ldi r28, 0x00 ; 0 -detachMaskedInterrupts(): - 58c: b0 33 cpi r27, 0x30 ; 48 - 58e: 70 f4 brcc .+28 ; 0x5ac - 590: cb 2f mov r28, r27 - 592: c6 95 lsr r28 - 594: c6 95 lsr r28 - 596: c6 95 lsr r28 - 598: f0 e2 ldi r31, 0x20 ; 32 - 59a: cf 9f mul r28, r31 - 59c: e0 01 movw r28, r0 - 59e: 11 24 eor r1, r1 - 5a0: c0 5f subi r28, 0xF0 ; 240 - 5a2: db 4f sbci r29, 0xFB ; 251 - 5a4: 8b 2f mov r24, r27 - 5a6: 87 70 andi r24, 0x07 ; 7 - 5a8: c8 0f add r28, r24 - 5aa: d1 1d adc r29, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:216 - irqMap[shift] = *pin_ctrl_reg; - 5ac: 8b 2f mov r24, r27 - 5ae: 90 e0 ldi r25, 0x00 ; 0 - 5b0: 28 81 ld r18, Y - 5b2: 82 5c subi r24, 0xC2 ; 194 - 5b4: 93 4c sbci r25, 0xC3 ; 195 - 5b6: fc 01 movw r30, r24 - 5b8: 20 8b std Z+16, r18 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:217 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 5ba: 88 81 ld r24, Y - 5bc: 88 7f andi r24, 0xF8 ; 248 - 5be: 88 83 st Y, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:219 - } - temp = temp >> 1; - 5c0: 94 01 movw r18, r8 - 5c2: a5 01 movw r20, r10 - 5c4: b6 01 movw r22, r12 - 5c6: c7 01 movw r24, r14 - 5c8: 01 e0 ldi r16, 0x01 ; 1 - 5ca: 74 d4 rcall .+2280 ; 0xeb4 <__lshrdi3> - 5cc: 49 01 movw r8, r18 - 5ce: 5a 01 movw r10, r20 - 5d0: 6b 01 movw r12, r22 - 5d2: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:220 - shift++; - 5d4: bf 5f subi r27, 0xFF ; 255 - 5d6: c6 cf rjmp .-116 ; 0x564 -_ZN7MCP25158startSPIEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 - 5d8: df 91 pop r29 - 5da: cf 91 pop r28 - 5dc: 0f 91 pop r16 - 5de: ff 90 pop r15 - 5e0: ef 90 pop r14 - 5e2: df 90 pop r13 - 5e4: cf 90 pop r12 - 5e6: bf 90 pop r11 - 5e8: af 90 pop r10 - 5ea: 9f 90 pop r9 - 5ec: 8f 90 pop r8 - 5ee: 7f 90 pop r7 - 5f0: 6f 90 pop r6 - 5f2: 08 95 ret - -000005f4 : -_ZN7MCP251514modifyRegisterENS_8REGISTEREhh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:129 - } - endSPI(); -} - -void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data) -{ - 5f4: ff 92 push r15 - 5f6: 0f 93 push r16 - 5f8: 1f 93 push r17 - 5fa: cf 93 push r28 - 5fc: df 93 push r29 - 5fe: ec 01 movw r28, r24 - 600: f6 2e mov r15, r22 - 602: 04 2f mov r16, r20 - 604: 12 2f mov r17, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130 - startSPI(); - 606: 2c df rcall .-424 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131 - SPI.transfer(INSTRUCTION_BITMOD); - 608: 85 e0 ldi r24, 0x05 ; 5 - 60a: c0 dd rcall .-1152 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132 - SPI.transfer(reg); - 60c: 8f 2d mov r24, r15 - 60e: be dd rcall .-1156 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133 - SPI.transfer(mask); - 610: 80 2f mov r24, r16 - 612: bc dd rcall .-1160 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134 - SPI.transfer(data); - 614: 81 2f mov r24, r17 - 616: ba dd rcall .-1164 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 - endSPI(); - 618: ce 01 movw r24, r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136 -} - 61a: df 91 pop r29 - 61c: cf 91 pop r28 - 61e: 1f 91 pop r17 - 620: 0f 91 pop r16 - 622: ff 90 pop r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 - startSPI(); - SPI.transfer(INSTRUCTION_BITMOD); - SPI.transfer(reg); - SPI.transfer(mask); - SPI.transfer(data); - endSPI(); - 624: 70 ce rjmp .-800 ; 0x306 - -00000626 : -_ZN7MCP251512setRegistersENS_8REGISTEREPKhh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:118 - SPI.transfer(value); - endSPI(); -} - -void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n) -{ - 626: df 92 push r13 - 628: ef 92 push r14 - 62a: ff 92 push r15 - 62c: 0f 93 push r16 - 62e: 1f 93 push r17 - 630: cf 93 push r28 - 632: df 93 push r29 - 634: 7c 01 movw r14, r24 - 636: c6 2f mov r28, r22 - 638: d4 2e mov r13, r20 - 63a: 15 2f mov r17, r21 - 63c: 02 2f mov r16, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119 - startSPI(); - 63e: 10 df rcall .-480 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120 - SPI.transfer(INSTRUCTION_WRITE); - 640: 82 e0 ldi r24, 0x02 ; 2 - 642: a4 dd rcall .-1208 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121 - SPI.transfer(reg); - 644: 8c 2f mov r24, r28 - 646: a2 dd rcall .-1212 ; 0x18c - 648: cd 2d mov r28, r13 - 64a: d1 2f mov r29, r17 - 64c: 0c 0f add r16, r28 - 64e: 1d 2f mov r17, r29 - 650: 11 1d adc r17, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122 - for (uint8_t i=0; i -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123 - SPI.transfer(values[i]); - 658: 89 91 ld r24, Y+ - 65a: 98 dd rcall .-1232 ; 0x18c - 65c: fa cf rjmp .-12 ; 0x652 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 - } - endSPI(); - 65e: c7 01 movw r24, r14 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126 -} - 660: df 91 pop r29 - 662: cf 91 pop r28 - 664: 1f 91 pop r17 - 666: 0f 91 pop r16 - 668: ff 90 pop r15 - 66a: ef 90 pop r14 - 66c: df 90 pop r13 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - for (uint8_t i=0; i - -00000670 : -_ZN7MCP251511setRegisterENS_8REGISTEREh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:109 - } - endSPI(); -} - -void MCP2515::setRegister(const REGISTER reg, const uint8_t value) -{ - 670: 0f 93 push r16 - 672: 1f 93 push r17 - 674: cf 93 push r28 - 676: df 93 push r29 - 678: ec 01 movw r28, r24 - 67a: 06 2f mov r16, r22 - 67c: 14 2f mov r17, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110 - startSPI(); - 67e: f0 de rcall .-544 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111 - SPI.transfer(INSTRUCTION_WRITE); - 680: 82 e0 ldi r24, 0x02 ; 2 - 682: 84 dd rcall .-1272 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112 - SPI.transfer(reg); - 684: 80 2f mov r24, r16 - 686: 82 dd rcall .-1276 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113 - SPI.transfer(value); - 688: 81 2f mov r24, r17 - 68a: 80 dd rcall .-1280 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 - endSPI(); - 68c: ce 01 movw r24, r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115 -} - 68e: df 91 pop r29 - 690: cf 91 pop r28 - 692: 1f 91 pop r17 - 694: 0f 91 pop r16 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 -{ - startSPI(); - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - SPI.transfer(value); - endSPI(); - 696: 37 ce rjmp .-914 ; 0x306 - -00000698 : -_ZN7MCP251512readRegisterENS_8REGISTERE(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:86 - - return ERROR_OK; -} - -uint8_t MCP2515::readRegister(const REGISTER reg) -{ - 698: 1f 93 push r17 - 69a: cf 93 push r28 - 69c: df 93 push r29 - 69e: ec 01 movw r28, r24 - 6a0: 16 2f mov r17, r22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87 - startSPI(); - 6a2: de de rcall .-580 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88 - SPI.transfer(INSTRUCTION_READ); - 6a4: 83 e0 ldi r24, 0x03 ; 3 - 6a6: 72 dd rcall .-1308 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89 - SPI.transfer(reg); - 6a8: 81 2f mov r24, r17 - 6aa: 70 dd rcall .-1312 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90 - uint8_t ret = SPI.transfer(0x00); - 6ac: 80 e0 ldi r24, 0x00 ; 0 - 6ae: 6e dd rcall .-1316 ; 0x18c - 6b0: 18 2f mov r17, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 - endSPI(); - 6b2: ce 01 movw r24, r28 - 6b4: 28 de rcall .-944 ; 0x306 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94 - - return ret; -} - 6b6: 81 2f mov r24, r17 - 6b8: df 91 pop r29 - 6ba: cf 91 pop r28 - 6bc: 1f 91 pop r17 - 6be: 08 95 ret - -000006c0 : -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:174 -{ - return setMode(CANCTRL_REQOP_NORMAL); -} - -MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) -{ - 6c0: cf 92 push r12 - 6c2: df 92 push r13 - 6c4: ef 92 push r14 - 6c6: ff 92 push r15 - 6c8: 1f 93 push r17 - 6ca: cf 93 push r28 - 6cc: df 93 push r29 - 6ce: ec 01 movw r28, r24 - 6d0: 16 2f mov r17, r22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175 - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - 6d2: 26 2f mov r18, r22 - 6d4: 40 ee ldi r20, 0xE0 ; 224 - 6d6: 6f e0 ldi r22, 0x0F ; 15 - 6d8: 8d df rcall .-230 ; 0x5f4 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 6da: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 - cli(); - 6dc: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 6de: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 - 6e2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 - 6e6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 - 6ea: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 6ee: 8f bf out 0x3f, r24 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177 - - unsigned long endTime = millis() + 10; - 6f0: 8a e0 ldi r24, 0x0A ; 10 - 6f2: c8 0e add r12, r24 - 6f4: d1 1c adc r13, r1 - 6f6: e1 1c adc r14, r1 - 6f8: f1 1c adc r15, r1 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 6fa: 2f b7 in r18, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 - cli(); - 6fc: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 6fe: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - 702: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - 706: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - 70a: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 70e: 2f bf out 0x3f, r18 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 - bool modeMatch = false; - while (millis() < endTime) { - 710: 8c 15 cp r24, r12 - 712: 9d 05 cpc r25, r13 - 714: ae 05 cpc r26, r14 - 716: bf 05 cpc r27, r15 - 718: 90 f4 brcc .+36 ; 0x73e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180 - uint8_t newmode = readRegister(MCP_CANSTAT); - 71a: 6e e0 ldi r22, 0x0E ; 14 - 71c: ce 01 movw r24, r28 - 71e: bc df rcall .-136 ; 0x698 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181 - newmode &= CANSTAT_OPMOD; - 720: 80 7e andi r24, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185 - - modeMatch = newmode == mode; - - if (modeMatch) { - 722: 18 13 cpse r17, r24 - 724: ea cf rjmp .-44 ; 0x6fa -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183 - bool modeMatch = false; - while (millis() < endTime) { - uint8_t newmode = readRegister(MCP_CANSTAT); - newmode &= CANSTAT_OPMOD; - - modeMatch = newmode == mode; - 726: 81 e0 ldi r24, 0x01 ; 1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190 - if (modeMatch) { - break; - } - } - - return modeMatch ? ERROR_OK : ERROR_FAIL; - 728: 91 e0 ldi r25, 0x01 ; 1 - 72a: 89 27 eor r24, r25 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192 - -} - 72c: 90 e0 ldi r25, 0x00 ; 0 - 72e: df 91 pop r29 - 730: cf 91 pop r28 - 732: 1f 91 pop r17 - 734: ff 90 pop r15 - 736: ef 90 pop r14 - 738: df 90 pop r13 - 73a: cf 90 pop r12 - 73c: 08 95 ret -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 -{ - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - - unsigned long endTime = millis() + 10; - bool modeMatch = false; - while (millis() < endTime) { - 73e: 80 e0 ldi r24, 0x00 ; 0 - 740: f3 cf rjmp .-26 ; 0x728 - -00000742 : -_ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:199 -MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed) -{ - return setBitrate(canSpeed, MCP_16MHZ); -} - -MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) - 742: 0f 93 push r16 - 744: 1f 93 push r17 - 746: cf 93 push r28 - 748: df 93 push r29 - 74a: ec 01 movw r28, r24 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - 74c: 60 e8 ldi r22, 0x80 ; 128 - 74e: b8 df rcall .-144 ; 0x6c0 - 750: 8c 01 movw r16, r24 -_ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:202 -} - -MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) -{ - ERROR error = setConfigMode(); - if (error != ERROR_OK) { - 752: 89 2b or r24, r25 - 754: 61 f4 brne .+24 ; 0x76e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 - set = 0; - break; - } - - if (set) { - setRegister(MCP_CNF1, cfg1); - 756: 40 e0 ldi r20, 0x00 ; 0 - 758: 6a e2 ldi r22, 0x2A ; 42 - 75a: ce 01 movw r24, r28 - 75c: 89 df rcall .-238 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478 - setRegister(MCP_CNF2, cfg2); - 75e: 40 e9 ldi r20, 0x90 ; 144 - 760: 69 e2 ldi r22, 0x29 ; 41 - 762: ce 01 movw r24, r28 - 764: 85 df rcall .-246 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479 - setRegister(MCP_CNF3, cfg3); - 766: 42 e8 ldi r20, 0x82 ; 130 - 768: 68 e2 ldi r22, 0x28 ; 40 - 76a: ce 01 movw r24, r28 - 76c: 81 df rcall .-254 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:485 - return ERROR_OK; - } - else { - return ERROR_FAIL; - } -} - 76e: c8 01 movw r24, r16 - 770: df 91 pop r29 - 772: cf 91 pop r28 - 774: 1f 91 pop r17 - 776: 0f 91 pop r16 - 778: 08 95 ret - -0000077a : -_ZN7MCP251513setNormalModeEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 - return setMode(CANCTRL_REQOP_LOOPBACK); -} - -MCP2515::ERROR MCP2515::setNormalMode() -{ - return setMode(CANCTRL_REQOP_NORMAL); - 77a: 60 e0 ldi r22, 0x00 ; 0 - 77c: a1 cf rjmp .-190 ; 0x6c0 - -0000077e : -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:35 - digitalWrite(SPICS, HIGH); - SPI.endTransaction(); -} - -MCP2515::ERROR MCP2515::reset(void) -{ - 77e: 7f 92 push r7 - 780: 8f 92 push r8 - 782: 9f 92 push r9 - 784: af 92 push r10 - 786: bf 92 push r11 - 788: cf 92 push r12 - 78a: df 92 push r13 - 78c: ef 92 push r14 - 78e: ff 92 push r15 - 790: 0f 93 push r16 - 792: 1f 93 push r17 - 794: cf 93 push r28 - 796: df 93 push r29 - 798: cd b7 in r28, 0x3d ; 61 - 79a: de b7 in r29, 0x3e ; 62 - 79c: a2 97 sbiw r28, 0x22 ; 34 - 79e: cd bf out 0x3d, r28 ; 61 - 7a0: de bf out 0x3e, r29 ; 62 - 7a2: 8c 01 movw r16, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36 - startSPI(); - 7a4: 5d de rcall .-838 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37 - SPI.transfer(INSTRUCTION_RESET); - 7a6: 80 ec ldi r24, 0xC0 ; 192 - 7a8: f1 dc rcall .-1566 ; 0x18c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 - endSPI(); - 7aa: c8 01 movw r24, r16 - 7ac: ac dd rcall .-1192 ; 0x306 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40 - - delay(10); - 7ae: 6a e0 ldi r22, 0x0A ; 10 - 7b0: 70 e0 ldi r23, 0x00 ; 0 - 7b2: 80 e0 ldi r24, 0x00 ; 0 - 7b4: 90 e0 ldi r25, 0x00 ; 0 - 7b6: 7b dd rcall .-1290 ; 0x2ae -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43 - - uint8_t zeros[14]; - memset(zeros, 0, sizeof(zeros)); - 7b8: ce 01 movw r24, r28 - 7ba: 01 96 adiw r24, 0x01 ; 1 - 7bc: 7c 01 movw r14, r24 - 7be: 8e e0 ldi r24, 0x0E ; 14 - 7c0: f7 01 movw r30, r14 - 7c2: 11 92 st Z+, r1 - 7c4: 8a 95 dec r24 - 7c6: e9 f7 brne .-6 ; 0x7c2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44 - setRegisters(MCP_TXB0CTRL, zeros, 14); - 7c8: 2e e0 ldi r18, 0x0E ; 14 - 7ca: a7 01 movw r20, r14 - 7cc: 60 e3 ldi r22, 0x30 ; 48 - 7ce: c8 01 movw r24, r16 - 7d0: 2a df rcall .-428 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45 - setRegisters(MCP_TXB1CTRL, zeros, 14); - 7d2: 2e e0 ldi r18, 0x0E ; 14 - 7d4: a7 01 movw r20, r14 - 7d6: 60 e4 ldi r22, 0x40 ; 64 - 7d8: c8 01 movw r24, r16 - 7da: 25 df rcall .-438 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46 - setRegisters(MCP_TXB2CTRL, zeros, 14); - 7dc: 2e e0 ldi r18, 0x0E ; 14 - 7de: a7 01 movw r20, r14 - 7e0: 60 e5 ldi r22, 0x50 ; 80 - 7e2: c8 01 movw r24, r16 - 7e4: 20 df rcall .-448 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48 - - setRegister(MCP_RXB0CTRL, 0); - 7e6: 40 e0 ldi r20, 0x00 ; 0 - 7e8: 60 e6 ldi r22, 0x60 ; 96 - 7ea: c8 01 movw r24, r16 - 7ec: 41 df rcall .-382 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49 - setRegister(MCP_RXB1CTRL, 0); - 7ee: 40 e0 ldi r20, 0x00 ; 0 - 7f0: 60 e7 ldi r22, 0x70 ; 112 - 7f2: c8 01 movw r24, r16 - 7f4: 3d df rcall .-390 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51 - - setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); - 7f6: 43 ea ldi r20, 0xA3 ; 163 - 7f8: 6b e2 ldi r22, 0x2B ; 43 - 7fa: c8 01 movw r24, r16 - 7fc: 39 df rcall .-398 ; 0x670 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:55 - - // receives all valid messages using either Standard or Extended Identifiers that - // meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1 - modifyRegister(MCP_RXB0CTRL, - 7fe: 24 e0 ldi r18, 0x04 ; 4 - 800: 47 e6 ldi r20, 0x67 ; 103 - 802: 60 e6 ldi r22, 0x60 ; 96 - 804: c8 01 movw r24, r16 - 806: f6 de rcall .-532 ; 0x5f4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:58 - RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK, - RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT); - modifyRegister(MCP_RXB1CTRL, - 808: 21 e0 ldi r18, 0x01 ; 1 - 80a: 47 e6 ldi r20, 0x67 ; 103 - 80c: 60 e7 ldi r22, 0x70 ; 112 - 80e: c8 01 movw r24, r16 - 810: f1 de rcall .-542 ; 0x5f4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65 - RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - 812: 8c e0 ldi r24, 0x0C ; 12 - 814: ec e3 ldi r30, 0x3C ; 60 - 816: ff e4 ldi r31, 0x4F ; 79 - 818: de 01 movw r26, r28 - 81a: 1f 96 adiw r26, 0x0f ; 15 - 81c: 01 90 ld r0, Z+ - 81e: 0d 92 st X+, r0 - 820: 8a 95 dec r24 - 822: e1 f7 brne .-8 ; 0x81c - 824: 4e 01 movw r8, r28 - 826: ff e0 ldi r31, 0x0F ; 15 - 828: 8f 0e add r8, r31 - 82a: 91 1c adc r9, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - for (int i=0; i<6; i++) { - 82c: b1 2c mov r11, r1 - 82e: a1 2c mov r10, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - 830: 28 e0 ldi r18, 0x08 ; 8 - 832: 72 2e mov r7, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68 - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - bool ext = (i == 1); - ERROR result = setFilter(filters[i], ext, 0); - 834: f4 01 movw r30, r8 - 836: e1 90 ld r14, Z+ - 838: f1 90 ld r15, Z+ - 83a: 4f 01 movw r8, r30 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - 83c: 60 e8 ldi r22, 0x80 ; 128 - 83e: c8 01 movw r24, r16 - 840: 3f df rcall .-386 ; 0x6c0 - 842: 6c 01 movw r12, r24 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:555 -} - -MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - 844: 89 2b or r24, r25 - 846: 09 f0 breq .+2 ; 0x84a - 848: 65 c0 rjmp .+202 ; 0x914 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - 84a: f2 e0 ldi r31, 0x02 ; 2 - 84c: ef 16 cp r14, r31 - 84e: f1 04 cpc r15, r1 - 850: 09 f4 brne .+2 ; 0x854 - 852: 72 c0 rjmp .+228 ; 0x938 - 854: 58 f4 brcc .+22 ; 0x86c - 856: e1 14 cp r14, r1 - 858: f1 04 cpc r15, r1 - 85a: 09 f4 brne .+2 ; 0x85e - 85c: 73 c0 rjmp .+230 ; 0x944 - 85e: ea 94 dec r14 - 860: ef 28 or r14, r15 - 862: 89 f0 breq .+34 ; 0x886 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:544 - REGISTER reg; - switch (mask) { - case MASK0: reg = MCP_RXM0SIDH; break; - case MASK1: reg = MCP_RXM1SIDH; break; - default: - return ERROR_FAIL; - 864: cc 24 eor r12, r12 - 866: c3 94 inc r12 - 868: d1 2c mov r13, r1 - 86a: 54 c0 rjmp .+168 ; 0x914 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - 86c: e4 e0 ldi r30, 0x04 ; 4 - 86e: ee 16 cp r14, r30 - 870: f1 04 cpc r15, r1 - 872: 09 f4 brne .+2 ; 0x876 - 874: 65 c0 rjmp .+202 ; 0x940 - 876: 08 f4 brcc .+2 ; 0x87a - 878: 61 c0 rjmp .+194 ; 0x93c - 87a: 85 e0 ldi r24, 0x05 ; 5 - 87c: e8 16 cp r14, r24 - 87e: f1 04 cpc r15, r1 - 880: 89 f7 brne .-30 ; 0x864 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567 - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - case RXF3: reg = MCP_RXF3SIDH; break; - case RXF4: reg = MCP_RXF4SIDH; break; - case RXF5: reg = MCP_RXF5SIDH; break; - 882: 68 e1 ldi r22, 0x18 ; 24 - 884: 01 c0 rjmp .+2 ; 0x888 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563 - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - 886: 64 e0 ldi r22, 0x04 ; 4 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - 888: 91 e0 ldi r25, 0x01 ; 1 - 88a: a9 16 cp r10, r25 - 88c: b1 04 cpc r11, r1 - 88e: 09 f0 breq .+2 ; 0x892 - 890: 5b c0 rjmp .+182 ; 0x948 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - 892: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - 894: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 896: 7c 8e std Y+28, r7 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - 898: 1b 8e std Y+27, r1 ; 0x1b -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574 - return ERROR_FAIL; - } - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - setRegisters(reg, tbufdata, 4); - 89a: 24 e0 ldi r18, 0x04 ; 4 - 89c: ae 01 movw r20, r28 - 89e: 45 5e subi r20, 0xE5 ; 229 - 8a0: 5f 4f sbci r21, 0xFF ; 255 - 8a2: c8 01 movw r24, r16 - 8a4: c0 de rcall .-640 ; 0x626 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - 8a6: ef ef ldi r30, 0xFF ; 255 - 8a8: ae 1a sub r10, r30 - 8aa: be 0a sbc r11, r30 - 8ac: f6 e0 ldi r31, 0x06 ; 6 - 8ae: af 16 cp r10, r31 - 8b0: b1 04 cpc r11, r1 - 8b2: 09 f0 breq .+2 ; 0x8b6 - 8b4: bf cf rjmp .-130 ; 0x834 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 - if (result != ERROR_OK) { - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - 8b6: 1f 8e std Y+31, r1 ; 0x1f - 8b8: 18 a2 std Y+32, r1 ; 0x20 - 8ba: 81 e0 ldi r24, 0x01 ; 1 - 8bc: 90 e0 ldi r25, 0x00 ; 0 - 8be: 89 a3 std Y+33, r24 ; 0x21 - 8c0: 9a a3 std Y+34, r25 ; 0x22 - 8c2: 7e 01 movw r14, r28 - 8c4: 8f e1 ldi r24, 0x1F ; 31 - 8c6: e8 0e add r14, r24 - 8c8: f1 1c adc r15, r1 - 8ca: 4e 01 movw r8, r28 - 8cc: 93 e2 ldi r25, 0x23 ; 35 - 8ce: 89 0e add r8, r25 - 8d0: 91 1c adc r9, r1 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 8d2: 98 e0 ldi r25, 0x08 ; 8 - 8d4: 79 2e mov r7, r25 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76 - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - ERROR result = setFilterMask(masks[i], true, 0); - 8d6: f7 01 movw r30, r14 - 8d8: a1 90 ld r10, Z+ - 8da: b1 90 ld r11, Z+ - 8dc: 7f 01 movw r14, r30 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - 8de: 60 e8 ldi r22, 0x80 ; 128 - 8e0: c8 01 movw r24, r16 - 8e2: ee de rcall .-548 ; 0x6c0 - 8e4: 6c 01 movw r12, r24 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:532 -} - -MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - 8e6: 89 2b or r24, r25 - 8e8: a9 f4 brne .+42 ; 0x914 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - 8ea: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - 8ec: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 8ee: 7c 8e std Y+28, r7 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - 8f0: 1b 8e std Y+27, r1 ; 0x1b -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540 - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - 8f2: a1 14 cp r10, r1 - 8f4: b1 04 cpc r11, r1 - 8f6: 69 f1 breq .+90 ; 0x952 - 8f8: aa 94 dec r10 - 8fa: ab 28 or r10, r11 - 8fc: 09 f0 breq .+2 ; 0x900 - 8fe: b2 cf rjmp .-156 ; 0x864 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542 - case MASK0: reg = MCP_RXM0SIDH; break; - case MASK1: reg = MCP_RXM1SIDH; break; - 900: 64 e2 ldi r22, 0x24 ; 36 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 - default: - return ERROR_FAIL; - } - - setRegisters(reg, tbufdata, 4); - 902: 24 e0 ldi r18, 0x04 ; 4 - 904: ae 01 movw r20, r28 - 906: 45 5e subi r20, 0xE5 ; 229 - 908: 5f 4f sbci r21, 0xFF ; 255 - 90a: c8 01 movw r24, r16 - 90c: 8c de rcall .-744 ; 0x626 -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - 90e: 8e 14 cp r8, r14 - 910: 9f 04 cpc r9, r15 - 912: 09 f7 brne .-62 ; 0x8d6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:83 - return result; - } - } - - return ERROR_OK; -} - 914: c6 01 movw r24, r12 - 916: a2 96 adiw r28, 0x22 ; 34 - 918: cd bf out 0x3d, r28 ; 61 - 91a: de bf out 0x3e, r29 ; 62 - 91c: df 91 pop r29 - 91e: cf 91 pop r28 - 920: 1f 91 pop r17 - 922: 0f 91 pop r16 - 924: ff 90 pop r15 - 926: ef 90 pop r14 - 928: df 90 pop r13 - 92a: cf 90 pop r12 - 92c: bf 90 pop r11 - 92e: af 90 pop r10 - 930: 9f 90 pop r9 - 932: 8f 90 pop r8 - 934: 7f 90 pop r7 - 936: 08 95 ret -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - 938: 68 e0 ldi r22, 0x08 ; 8 - 93a: a6 cf rjmp .-180 ; 0x888 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565 - case RXF3: reg = MCP_RXF3SIDH; break; - 93c: 60 e1 ldi r22, 0x10 ; 16 - 93e: a4 cf rjmp .-184 ; 0x888 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566 - case RXF4: reg = MCP_RXF4SIDH; break; - 940: 64 e1 ldi r22, 0x14 ; 20 - 942: a2 cf rjmp .-188 ; 0x888 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 - } - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - 944: 60 e0 ldi r22, 0x00 ; 0 - 946: a0 cf rjmp .-192 ; 0x888 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - 948: 1b 8e std Y+27, r1 ; 0x1b -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - 94a: 1c 8e std Y+28, r1 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - 94c: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - 94e: 1d 8e std Y+29, r1 ; 0x1d - 950: a4 cf rjmp .-184 ; 0x89a -_ZN7MCP25155resetEv(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541 - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - case MASK0: reg = MCP_RXM0SIDH; break; - 952: 60 e2 ldi r22, 0x20 ; 32 - 954: d6 cf rjmp .-84 ; 0x902 - -00000956 : -_Z17SendSerialPackageP7MCP2515(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:442 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -void SendSerialPackage(MCP2515 *interface) -{ - 956: 2f 92 push r2 - 958: 3f 92 push r3 - 95a: 4f 92 push r4 - 95c: 5f 92 push r5 - 95e: 6f 92 push r6 - 960: 7f 92 push r7 - 962: 8f 92 push r8 - 964: 9f 92 push r9 - 966: af 92 push r10 - 968: bf 92 push r11 - 96a: cf 92 push r12 - 96c: df 92 push r13 - 96e: ef 92 push r14 - 970: ff 92 push r15 - 972: 0f 93 push r16 - 974: 1f 93 push r17 - 976: cf 93 push r28 - 978: df 93 push r29 - 97a: cd b7 in r28, 0x3d ; 61 - 97c: de b7 in r29, 0x3e ; 62 - 97e: 63 97 sbiw r28, 0x13 ; 19 - 980: cd bf out 0x3d, r28 ; 61 - 982: de bf out 0x3e, r29 ; 62 - 984: 7c 01 movw r14, r24 -CreateCanId(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:407 - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint16_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; - 986: 80 91 14 3c lds r24, 0x3C14 ; 0x803c14 - 98a: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 - 98e: 09 2e mov r0, r25 - 990: 00 0c add r0, r0 - 992: aa 0b sbc r26, r26 - 994: bb 0b sbc r27, r27 - 996: af 6f ori r26, 0xFF ; 255 - 998: bf 68 ori r27, 0x8F ; 143 -_Z17SendSerialPackageP7MCP2515(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:443 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -void SendSerialPackage(MCP2515 *interface) -{ - _frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); - 99a: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> - 99e: 90 93 01 3c sts 0x3C01, r25 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - 9a2: a0 93 02 3c sts 0x3C02, r26 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - 9a6: b0 93 03 3c sts 0x3C03, r27 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:444 - _frame.can_dlc = 4; - 9aa: 84 e0 ldi r24, 0x04 ; 4 - 9ac: 80 93 04 3c sts 0x3C04, r24 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:446 - - _frame.data[0] = SoftwareVersionHigh; - 9b0: 83 e0 ldi r24, 0x03 ; 3 - 9b2: 80 93 08 3c sts 0x3C08, r24 ; 0x803c08 <__DATA_REGION_ORIGIN__+0x8> -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:447 - _frame.data[1] = SoftwareVersionLow; - 9b6: 81 e0 ldi r24, 0x01 ; 1 - 9b8: 80 93 09 3c sts 0x3C09, r24 ; 0x803c09 <__DATA_REGION_ORIGIN__+0x9> -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:448 - _frame.data[2] = HardwareVersionHigh; - 9bc: 86 e0 ldi r24, 0x06 ; 6 - 9be: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a <__DATA_REGION_ORIGIN__+0xa> -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:449 - _frame.data[3] = HardwareVersionLow; - 9c2: 10 92 0b 3c sts 0x3C0B, r1 ; 0x803c0b <__DATA_REGION_ORIGIN__+0xb> - 9c6: 4b e0 ldi r20, 0x0B ; 11 - 9c8: 94 2e mov r9, r20 - 9ca: 5e 01 movw r10, r28 - 9cc: 84 e1 ldi r24, 0x14 ; 20 - 9ce: a8 0e add r10, r24 - 9d0: b1 1c adc r11, r1 -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:612 - return ERROR_OK; -} - -MCP2515::ERROR MCP2515::sendMessage(const struct can_frame *frame) -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - 9d2: 80 91 04 3c lds r24, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> - 9d6: 89 30 cpi r24, 0x09 ; 9 - 9d8: 08 f0 brcs .+2 ; 0x9dc - 9da: 8b c0 rjmp .+278 ; 0xaf2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:616 - return ERROR_FAILTX; - } - - TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; - 9dc: 86 e0 ldi r24, 0x06 ; 6 - 9de: e8 e4 ldi r30, 0x48 ; 72 - 9e0: ff e4 ldi r31, 0x4F ; 79 - 9e2: de 01 movw r26, r28 - 9e4: 1e 96 adiw r26, 0x0e ; 14 - 9e6: 01 90 ld r0, Z+ - 9e8: 0d 92 st X+, r0 - 9ea: 8a 95 dec r24 - 9ec: e1 f7 brne .-8 ; 0x9e6 - 9ee: 3e 01 movw r6, r28 - 9f0: ee e0 ldi r30, 0x0E ; 14 - 9f2: 6e 0e add r6, r30 - 9f4: 71 1c adc r7, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:619 - - for (int i=0; iCTRL); - 9fe: 86 01 movw r16, r12 - a00: 00 0f add r16, r16 - a02: 11 1f adc r17, r17 - a04: f8 01 movw r30, r16 - a06: ec 0d add r30, r12 - a08: fd 1d adc r31, r13 - a0a: e2 5b subi r30, 0xB2 ; 178 - a0c: f0 4b sbci r31, 0xB0 ; 176 - a0e: 80 80 ld r8, Z - a10: 68 2d mov r22, r8 - a12: c7 01 movw r24, r14 - a14: 41 de rcall .-894 ; 0x698 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:621 - if ( (ctrlval & TXB_TXREQ) == 0 ) { - a16: 83 fd sbrc r24, 3 - a18: 93 c0 rjmp .+294 ; 0xb40 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581 - return ERROR_OK; -} - -MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - a1a: 70 90 04 3c lds r7, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> - a1e: f8 e0 ldi r31, 0x08 ; 8 - a20: f7 15 cp r31, r7 - a22: 08 f4 brcc .+2 ; 0xa26 - a24: 66 c0 rjmp .+204 ; 0xaf2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589 - - const struct TXBn_REGS *txbuf = &TXB[txbn]; - - uint8_t data[13]; - - bool ext = (frame->can_id & CAN_EFF_FLAG); - a26: 80 91 00 3c lds r24, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> - a2a: 90 91 01 3c lds r25, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - a2e: a0 91 02 3c lds r26, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - a32: b0 91 03 3c lds r27, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> - a36: ac 01 movw r20, r24 - a38: bd 01 movw r22, r26 - a3a: 44 27 eor r20, r20 - a3c: 77 fd sbrc r23, 7 - a3e: 43 95 inc r20 - a40: 55 27 eor r21, r21 - a42: 66 27 eor r22, r22 - a44: 77 27 eor r23, r23 - a46: 24 2f mov r18, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - a48: ac 01 movw r20, r24 - a4a: bd 01 movw r22, r26 - a4c: 44 27 eor r20, r20 - a4e: 55 27 eor r21, r21 - a50: 66 27 eor r22, r22 - a52: 70 74 andi r23, 0x40 ; 64 -_Z17SendSerialPackageP7MCP2515(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591 - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - a54: 22 24 eor r2, r2 - a56: 2a 94 dec r2 - a58: 32 2c mov r3, r2 - a5a: 42 2c mov r4, r2 - a5c: ff e1 ldi r31, 0x1F ; 31 - a5e: 5f 2e mov r5, r31 -sendMessage(): - a60: 21 11 cpse r18, r1 - a62: 06 c0 rjmp .+12 ; 0xa70 -_Z17SendSerialPackageP7MCP2515(): - a64: 22 24 eor r2, r2 - a66: 2a 94 dec r2 - a68: e7 e0 ldi r30, 0x07 ; 7 - a6a: 3e 2e mov r3, r30 - a6c: 41 2c mov r4, r1 - a6e: 51 2c mov r5, r1 -sendMessage(): - a70: 82 21 and r24, r2 - a72: 93 21 and r25, r3 - a74: a4 21 and r26, r4 - a76: b5 21 and r27, r5 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - a78: 22 23 and r18, r18 - a7a: 09 f4 brne .+2 ; 0xa7e - a7c: 53 c0 rjmp .+166 ; 0xb24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - a7e: 8c 83 std Y+4, r24 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - a80: 9b 83 std Y+3, r25 ; 0x03 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 - canid = (uint16_t)(id >> 16); - a82: cd 01 movw r24, r26 - a84: aa 27 eor r26, r26 - a86: bb 27 eor r27, r27 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - a88: 28 2f mov r18, r24 - a8a: 22 0f add r18, r18 - a8c: 22 0f add r18, r18 - a8e: 22 0f add r18, r18 - a90: 20 7e andi r18, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 - - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - a92: 38 2f mov r19, r24 - a94: 33 70 andi r19, 0x03 ; 3 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - a96: 38 60 ori r19, 0x08 ; 8 - a98: 23 2b or r18, r19 - a9a: 2a 83 std Y+2, r18 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - a9c: 35 e0 ldi r19, 0x05 ; 5 - a9e: 96 95 lsr r25 - aa0: 87 95 ror r24 - aa2: 3a 95 dec r19 - aa4: e1 f7 brne .-8 ; 0xa9e - aa6: 89 83 std Y+1, r24 ; 0x01 -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - - prepareId(data, ext, id); - - data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; - aa8: 87 2d mov r24, r7 - aaa: 45 2b or r20, r21 - aac: 46 2b or r20, r22 - aae: 47 2b or r20, r23 - ab0: 09 f0 breq .+2 ; 0xab4 - ab2: 80 64 ori r24, 0x40 ; 64 - ab4: 8d 83 std Y+5, r24 ; 0x05 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 - - memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); - ab6: 47 2d mov r20, r7 - ab8: 50 e0 ldi r21, 0x00 ; 0 - aba: 68 e0 ldi r22, 0x08 ; 8 - abc: 7c e3 ldi r23, 0x3C ; 60 - abe: ce 01 movw r24, r28 - ac0: 06 96 adiw r24, 0x06 ; 6 - ac2: 31 d2 rcall .+1122 ; 0xf26 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 - - setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); - ac4: 25 e0 ldi r18, 0x05 ; 5 - ac6: 27 0d add r18, r7 - ac8: 0c 0d add r16, r12 - aca: 1d 1d adc r17, r13 - acc: f8 01 movw r30, r16 - ace: e2 5b subi r30, 0xB2 ; 178 - ad0: f0 4b sbci r31, 0xB0 ; 176 - ad2: ae 01 movw r20, r28 - ad4: 4f 5f subi r20, 0xFF ; 255 - ad6: 5f 4f sbci r21, 0xFF ; 255 - ad8: 61 81 ldd r22, Z+1 ; 0x01 - ada: c7 01 movw r24, r14 - adc: a4 dd rcall .-1208 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 - - modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); - ade: 28 e0 ldi r18, 0x08 ; 8 - ae0: 48 e0 ldi r20, 0x08 ; 8 - ae2: 68 2d mov r22, r8 - ae4: c7 01 movw r24, r14 - ae6: 86 dd rcall .-1268 ; 0x5f4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 - - uint8_t ctrl = readRegister(txbuf->CTRL); - ae8: 68 2d mov r22, r8 - aea: c7 01 movw r24, r14 - aec: d5 dd rcall .-1110 ; 0x698 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604 - if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { - aee: 80 77 andi r24, 0x70 ; 112 - af0: 19 f0 breq .+6 ; 0xaf8 - af2: 9a 94 dec r9 -DoSendCanPkg(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:482 -{ - // ToggleDebug(); - byte cnt = 0; - while (interface->sendMessage(&_frame)) { - cnt++; - if (cnt > 10) return; - af4: 91 10 cpse r9, r1 - af6: 6d cf rjmp .-294 ; 0x9d2 -_Z17SendSerialPackageP7MCP2515(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:451 - _frame.data[0] = SoftwareVersionHigh; - _frame.data[1] = SoftwareVersionLow; - _frame.data[2] = HardwareVersionHigh; - _frame.data[3] = HardwareVersionLow; - DoSendCanPkg(interface, &_frame); -} - af8: 63 96 adiw r28, 0x13 ; 19 - afa: cd bf out 0x3d, r28 ; 61 - afc: de bf out 0x3e, r29 ; 62 - afe: df 91 pop r29 - b00: cf 91 pop r28 - b02: 1f 91 pop r17 - b04: 0f 91 pop r16 - b06: ff 90 pop r15 - b08: ef 90 pop r14 - b0a: df 90 pop r13 - b0c: cf 90 pop r12 - b0e: bf 90 pop r11 - b10: af 90 pop r10 - b12: 9f 90 pop r9 - b14: 8f 90 pop r8 - b16: 7f 90 pop r7 - b18: 6f 90 pop r6 - b1a: 5f 90 pop r5 - b1c: 4f 90 pop r4 - b1e: 3f 90 pop r3 - b20: 2f 90 pop r2 - b22: 08 95 ret -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - b24: 9c 01 movw r18, r24 - b26: 93 e0 ldi r25, 0x03 ; 3 - b28: 36 95 lsr r19 - b2a: 27 95 ror r18 - b2c: 9a 95 dec r25 - b2e: e1 f7 brne .-8 ; 0xb28 - b30: 29 83 std Y+1, r18 ; 0x01 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - b32: 82 95 swap r24 - b34: 88 0f add r24, r24 - b36: 80 7e andi r24, 0xE0 ; 224 - b38: 8a 83 std Y+2, r24 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - b3a: 1c 82 std Y+4, r1 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - b3c: 1b 82 std Y+3, r1 ; 0x03 - b3e: b4 cf rjmp .-152 ; 0xaa8 -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:618 - return ERROR_FAILTX; - } - - TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; - - for (int i=0; i - b46: 57 cf rjmp .-338 ; 0x9f6 - b48: d4 cf rjmp .-88 ; 0xaf2 - -00000b4a <__vector_25>: -__vector_25(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:74 -#elif defined(MILLIS_USE_TIMERB2) -ISR(TCB2_INT_vect) -#else // fallback or defined(MILLIS_USE_TIMERB3) -ISR(TCB3_INT_vect) -#endif -{ - b4a: 1f 92 push r1 - b4c: 0f 92 push r0 - b4e: 0f b6 in r0, 0x3f ; 63 - b50: 0f 92 push r0 - b52: 11 24 eor r1, r1 - b54: 8f 93 push r24 - b56: 9f 93 push r25 - b58: af 93 push r26 - b5a: bf 93 push r27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:75 - timer_millis++; - b5c: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - b60: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - b64: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - b68: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 - b6c: 01 96 adiw r24, 0x01 ; 1 - b6e: a1 1d adc r26, r1 - b70: b1 1d adc r27, r1 - b72: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 - b76: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 - b7a: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 - b7e: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:78 - - /* Clear flag */ - _timer->INTFLAGS = TCB_CAPT_bm; - b82: 81 e0 ldi r24, 0x01 ; 1 - b84: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:79 -} - b88: bf 91 pop r27 - b8a: af 91 pop r26 - b8c: 9f 91 pop r25 - b8e: 8f 91 pop r24 - b90: 0f 90 pop r0 - b92: 0f be out 0x3f, r0 ; 63 - b94: 0f 90 pop r0 - b96: 1f 90 pop r1 - b98: 18 95 reti - -00000b9a : -_ZN7MCP2515C2Eh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:15 -const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = { - {MCP_RXB0CTRL, MCP_RXB0SIDH, MCP_RXB0DATA, CANINTF_RX0IF}, - {MCP_RXB1CTRL, MCP_RXB1SIDH, MCP_RXB1DATA, CANINTF_RX1IF} -}; - -MCP2515::MCP2515(const uint8_t _CS) - b9a: 1f 93 push r17 - b9c: cf 93 push r28 - b9e: df 93 push r29 - ba0: ec 01 movw r28, r24 - ba2: 16 2f mov r17, r22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:17 -{ - SPI.begin(); - ba4: ab da rcall .-2730 ; 0xfc -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:19 - - SPICS = _CS; - ba6: 18 83 st Y, r17 -pinMode(): - ba8: 81 2f mov r24, r17 - baa: 96 da rcall .-2772 ; 0xd8 -_ZN7MCP2515C2Eh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21 - pinMode(SPICS, OUTPUT); - endSPI(); - bac: ce 01 movw r24, r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:22 -} - bae: df 91 pop r29 - bb0: cf 91 pop r28 - bb2: 1f 91 pop r17 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21 -{ - SPI.begin(); - - SPICS = _CS; - pinMode(SPICS, OUTPUT); - endSPI(); - bb4: a8 cb rjmp .-2224 ; 0x306 - -00000bb6 : -_GLOBAL__I_65535_0_Swtich.ino.cpp.o.2764(): - bb6: ed e7 ldi r30, 0x7D ; 125 - bb8: fc e3 ldi r31, 0x3C ; 60 - bba: 84 e0 ldi r24, 0x04 ; 4 - bbc: 81 83 std Z+1, r24 ; 0x01 - bbe: 81 e3 ldi r24, 0x31 ; 49 - bc0: 80 83 st Z, r24 - bc2: ee e3 ldi r30, 0x3E ; 62 - bc4: fc e3 ldi r31, 0x3C ; 60 - bc6: 15 82 std Z+5, r1 ; 0x05 - bc8: 14 82 std Z+4, r1 ; 0x04 - bca: 62 e0 ldi r22, 0x02 ; 2 - bcc: 82 e8 ldi r24, 0x82 ; 130 - bce: 9c e3 ldi r25, 0x3C ; 60 - bd0: e4 df rcall .-56 ; 0xb9a - bd2: 63 e0 ldi r22, 0x03 ; 3 - bd4: 81 e8 ldi r24, 0x81 ; 129 - bd6: 9c e3 ldi r25, 0x3C ; 60 - bd8: e0 df rcall .-64 ; 0xb9a - bda: 68 e0 ldi r22, 0x08 ; 8 - bdc: 80 e8 ldi r24, 0x80 ; 128 - bde: 9c e3 ldi r25, 0x3C ; 60 - be0: dc df rcall .-72 ; 0xb9a - be2: 69 e0 ldi r22, 0x09 ; 9 - be4: 8f e7 ldi r24, 0x7F ; 127 - be6: 9c e3 ldi r25, 0x3C ; 60 - be8: d8 cf rjmp .-80 ; 0xb9a - -00000bea
: -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:361 -#elif (F_CPU == 10000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); -#elif (F_CPU == 8000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); - bea: 91 e0 ldi r25, 0x01 ; 1 - bec: 88 ed ldi r24, 0xD8 ; 216 - bee: 84 bf out 0x34, r24 ; 52 - bf0: 90 93 61 00 sts 0x0061, r25 ; 0x800061 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:390 -#if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 16000000L) // 16 MHz / 128 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 8000000L) // 8 MHz / 64 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV64_gc; - bf4: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - bf8: 85 60 ori r24, 0x05 ; 5 - bfa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:402 -#else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2 - ADC0.CTRLC |= ADC_PRESC_DIV2_gc; -#endif - - /* Enable ADC */ - ADC0.CTRLA |= ADC_ENABLE_bm; - bfe: 80 91 00 06 lds r24, 0x0600 ; 0x800600 - c02: 81 60 ori r24, 0x01 ; 1 - c04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 -analogReference(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_analog.c:35 -{ - switch (mode) - { - case EXTERNAL: - case VDD: - ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely... - c08: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - c0c: 8f 7c andi r24, 0xCF ; 207 - c0e: 80 65 ori r24, 0x50 ; 80 - c10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:407 - analogReference(VDD); - -#endif - - PORTMUX.USARTROUTEA = 0; - c14: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:446 -void setup_timers() -{ - // TYPE A TIMER - - // PORTMUX setting for TCA (defined in pins_arduino.h) - PORTMUX.TCAROUTEA = TCA0_PINS; - c18: 82 e0 ldi r24, 0x02 ; 2 - c1a: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:449 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - c1e: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:453 - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - c22: 8e ef ldi r24, 0xFE ; 254 - c24: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:452 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - c28: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:461 - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE; - c2c: 80 e8 ldi r24, 0x80 ; 128 - c2e: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:460 - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - c32: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:459 - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - c36: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:458 - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - c3a: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:457 - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - c3e: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:456 - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - c42: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:471 -#elif F_CPU <= 2000000L - // Use DIV8 prescaler (giving 250kHz clock on 2MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV8_gc) | (TCA_SPLIT_ENABLE_bm); -#elif F_CPU <= 8000000L - // Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm); - c46: 89 e0 ldi r24, 0x09 ; 9 - c48: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:480 -#endif - - // TYPE B TIMERS - - // Set up routing (defined in pins_arduino.h) - PORTMUX.TCBROUTEA = 0 - c4c: 87 e0 ldi r24, 0x07 ; 7 - c4e: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:496 - | TCB3_PINS -#endif - ; - - // Start with TCB0 - TCB_t *timer_B = (TCB_t *)&TCB0; - c52: e0 e8 ldi r30, 0x80 ; 128 - c54: fa e0 ldi r31, 0x0A ; 10 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - c56: c7 e0 ldi r28, 0x07 ; 7 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - c58: 9e ef ldi r25, 0xFE ; 254 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - c5a: 80 e8 ldi r24, 0x80 ; 128 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - c5c: d5 e0 ldi r29, 0x05 ; 5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - c5e: c1 83 std Z+1, r28 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - c60: 94 87 std Z+12, r25 ; 0x0c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - c62: 85 87 std Z+13, r24 ; 0x0d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - c64: d0 83 st Z, r29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:528 - //|(TCB_SYNCUPD_bm) - | (TCB_ENABLE_bm); - - // Increment pointer to next TCB instance - timer_B++; - c66: 70 96 adiw r30, 0x10 ; 16 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:531 - - // Stop when pointing to TCB3 - } while (timer_B <= timer_B_end); - c68: e0 3c cpi r30, 0xC0 ; 192 - c6a: 2a e0 ldi r18, 0x0A ; 10 - c6c: f2 07 cpc r31, r18 - c6e: b9 f7 brne .-18 ; 0xc5e -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:416 - /********************* TCB for system time tracking **************************/ - - // BUG: we can compensate for F_CPU by fine tuning value of TIME_TRACKING_TIMER_COUNT - - /* Select vanilla 16 bit periodic interrupt mode */ - _timer->CTRLB = TCB_CNTMODE_INT_gc; - c70: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:419 - - /* TOP value for overflow every N clock cycles */ - _timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1; - c74: 8f e3 ldi r24, 0x3F ; 63 - c76: 9f e1 ldi r25, 0x1F ; 31 - c78: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac - c7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:422 - - /* Enable TCB interrupt */ - _timer->INTCTRL |= TCB_CAPT_bm; - c80: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 - c84: 81 60 ori r24, 0x01 ; 1 - c86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:426 - - /* Clock selection is F_CPU/N -- which is independent of TCA */ -#if TIME_TRACKING_TIMER_DIVIDER == 1 - _timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */ - c8a: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:434 -#else -#assert "TIME_TRACKING_TIMER_DIVIDER not supported" -#endif - - /* Enable & start */ - _timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */ - c8e: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 - c92: 81 60 ori r24, 0x01 ; 1 - c94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:438 - - /*************************** ENABLE GLOBAL INTERRUPTS *************************/ - - sei(); - c98: 78 94 sei -setup(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:147 -MCP2515 mcp2515_1(PIN_PA3); -MCP2515 mcp2515_2(PIN_PB0); -MCP2515 mcp2515_3(PIN_PB1); - -void setup() { - SPI.begin(); - c9a: 30 da rcall .-2976 ; 0xfc -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:194 - Rules[14].InitToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro - - Rules[15] = Rule(); - Rules[15].InitToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro - - delay(10); - c9c: 6a e0 ldi r22, 0x0A ; 10 - c9e: 70 e0 ldi r23, 0x00 ; 0 - ca0: 80 e0 ldi r24, 0x00 ; 0 - ca2: 90 e0 ldi r25, 0x00 ; 0 - ca4: 04 db rcall .-2552 ; 0x2ae -_ZN8PinState4InitEih(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - ca6: 85 e1 ldi r24, 0x15 ; 21 - ca8: 90 e0 ldi r25, 0x00 ; 0 - caa: 80 93 16 3c sts 0x3C16, r24 ; 0x803c16 - cae: 90 93 17 3c sts 0x3C17, r25 ; 0x803c17 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - cb2: 81 e0 ldi r24, 0x01 ; 1 - cb4: 80 93 18 3c sts 0x3C18, r24 ; 0x803c18 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - cb8: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - cbc: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - cc0: 24 e1 ldi r18, 0x14 ; 20 - cc2: 30 e0 ldi r19, 0x00 ; 0 - cc4: 20 93 1b 3c sts 0x3C1B, r18 ; 0x803c1b - cc8: 30 93 1c 3c sts 0x3C1C, r19 ; 0x803c1c -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - ccc: 80 93 1d 3c sts 0x3C1D, r24 ; 0x803c1d -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - cd0: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - cd4: 92 e0 ldi r25, 0x02 ; 2 - cd6: 90 93 1f 3c sts 0x3C1F, r25 ; 0x803c1f -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - cda: 23 e1 ldi r18, 0x13 ; 19 - cdc: 30 e0 ldi r19, 0x00 ; 0 - cde: 20 93 20 3c sts 0x3C20, r18 ; 0x803c20 - ce2: 30 93 21 3c sts 0x3C21, r19 ; 0x803c21 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - ce6: 80 93 22 3c sts 0x3C22, r24 ; 0x803c22 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - cea: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - cee: 93 e0 ldi r25, 0x03 ; 3 - cf0: 90 93 24 3c sts 0x3C24, r25 ; 0x803c24 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - cf4: 22 e1 ldi r18, 0x12 ; 18 - cf6: 30 e0 ldi r19, 0x00 ; 0 - cf8: 20 93 25 3c sts 0x3C25, r18 ; 0x803c25 - cfc: 30 93 26 3c sts 0x3C26, r19 ; 0x803c26 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - d00: 80 93 27 3c sts 0x3C27, r24 ; 0x803c27 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - d04: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - d08: 94 e0 ldi r25, 0x04 ; 4 - d0a: 90 93 29 3c sts 0x3C29, r25 ; 0x803c29 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - d0e: 21 e1 ldi r18, 0x11 ; 17 - d10: 30 e0 ldi r19, 0x00 ; 0 - d12: 20 93 2a 3c sts 0x3C2A, r18 ; 0x803c2a - d16: 30 93 2b 3c sts 0x3C2B, r19 ; 0x803c2b -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - d1a: 80 93 2c 3c sts 0x3C2C, r24 ; 0x803c2c -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - d1e: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - d22: d0 93 2e 3c sts 0x3C2E, r29 ; 0x803c2e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - d26: 20 e1 ldi r18, 0x10 ; 16 - d28: 30 e0 ldi r19, 0x00 ; 0 - d2a: 20 93 2f 3c sts 0x3C2F, r18 ; 0x803c2f - d2e: 30 93 30 3c sts 0x3C30, r19 ; 0x803c30 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - d32: 80 93 31 3c sts 0x3C31, r24 ; 0x803c31 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - d36: 80 93 32 3c sts 0x3C32, r24 ; 0x803c32 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - d3a: 96 e0 ldi r25, 0x06 ; 6 - d3c: 90 93 33 3c sts 0x3C33, r25 ; 0x803c33 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - d40: 2f e0 ldi r18, 0x0F ; 15 - d42: 30 e0 ldi r19, 0x00 ; 0 - d44: 20 93 34 3c sts 0x3C34, r18 ; 0x803c34 - d48: 30 93 35 3c sts 0x3C35, r19 ; 0x803c35 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - d4c: 80 93 36 3c sts 0x3C36, r24 ; 0x803c36 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - d50: 80 93 37 3c sts 0x3C37, r24 ; 0x803c37 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - d54: c0 93 38 3c sts 0x3C38, r28 ; 0x803c38 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - d58: 2e e0 ldi r18, 0x0E ; 14 - d5a: 30 e0 ldi r19, 0x00 ; 0 - d5c: 20 93 39 3c sts 0x3C39, r18 ; 0x803c39 - d60: 30 93 3a 3c sts 0x3C3A, r19 ; 0x803c3a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 - this->pin_state = true; - d64: 80 93 3b 3c sts 0x3C3B, r24 ; 0x803c3b -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 - this->is_input = true; - d68: 80 93 3c 3c sts 0x3C3C, r24 ; 0x803c3c -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 - this->meyPinId = meyPinId; - d6c: 88 e0 ldi r24, 0x08 ; 8 - d6e: 80 93 3d 3c sts 0x3C3D, r24 ; 0x803c3d -setup(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:221 - MeyPins[7] = PinState(); - MeyPins[7].Init(PIN_PC0, (byte) 8); - - - - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - d72: 80 91 60 00 lds r24, 0x0060 ; 0x800060 - d76: 80 68 ori r24, 0x80 ; 128 - d78: 90 e0 ldi r25, 0x00 ; 0 - d7a: 28 ed ldi r18, 0xD8 ; 216 - d7c: 24 bf out 0x34, r18 ; 52 - d7e: 80 93 60 00 sts 0x0060, r24 ; 0x800060 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:224 - - - mcp2515_0.reset(); - d82: 82 e8 ldi r24, 0x82 ; 130 - d84: 9c e3 ldi r25, 0x3C ; 60 - d86: fb dc rcall .-1546 ; 0x77e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:225 - mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - d88: 82 e8 ldi r24, 0x82 ; 130 - d8a: 9c e3 ldi r25, 0x3C ; 60 - d8c: da dc rcall .-1612 ; 0x742 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:226 - mcp2515_0.setNormalMode(); - d8e: 82 e8 ldi r24, 0x82 ; 130 - d90: 9c e3 ldi r25, 0x3C ; 60 - d92: f3 dc rcall .-1562 ; 0x77a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:228 - - mcp2515_1.reset(); - d94: 81 e8 ldi r24, 0x81 ; 129 - d96: 9c e3 ldi r25, 0x3C ; 60 - d98: f2 dc rcall .-1564 ; 0x77e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:229 - mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - d9a: 81 e8 ldi r24, 0x81 ; 129 - d9c: 9c e3 ldi r25, 0x3C ; 60 - d9e: d1 dc rcall .-1630 ; 0x742 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:230 - mcp2515_1.setNormalMode(); - da0: 81 e8 ldi r24, 0x81 ; 129 - da2: 9c e3 ldi r25, 0x3C ; 60 - da4: ea dc rcall .-1580 ; 0x77a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:232 - - mcp2515_2.reset(); - da6: 80 e8 ldi r24, 0x80 ; 128 - da8: 9c e3 ldi r25, 0x3C ; 60 - daa: e9 dc rcall .-1582 ; 0x77e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:233 - mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - dac: 80 e8 ldi r24, 0x80 ; 128 - dae: 9c e3 ldi r25, 0x3C ; 60 - db0: c8 dc rcall .-1648 ; 0x742 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:234 - mcp2515_2.setNormalMode(); - db2: 80 e8 ldi r24, 0x80 ; 128 - db4: 9c e3 ldi r25, 0x3C ; 60 - db6: e1 dc rcall .-1598 ; 0x77a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:236 - - mcp2515_3.reset(); - db8: 8f e7 ldi r24, 0x7F ; 127 - dba: 9c e3 ldi r25, 0x3C ; 60 - dbc: e0 dc rcall .-1600 ; 0x77e -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:237 - mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - dbe: 8f e7 ldi r24, 0x7F ; 127 - dc0: 9c e3 ldi r25, 0x3C ; 60 - dc2: bf dc rcall .-1666 ; 0x742 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:238 - mcp2515_3.setNormalMode(); - dc4: 8f e7 ldi r24, 0x7F ; 127 - dc6: 9c e3 ldi r25, 0x3C ; 60 - dc8: d8 dc rcall .-1616 ; 0x77a - dca: c6 e1 ldi r28, 0x16 ; 22 - dcc: dc e3 ldi r29, 0x3C ; 60 - dce: 8e e3 ldi r24, 0x3E ; 62 - dd0: e8 2e mov r14, r24 - dd2: 8c e3 ldi r24, 0x3C ; 60 - dd4: f8 2e mov r15, r24 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:240 - - for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) - dd6: ec 16 cp r14, r28 - dd8: fd 06 cpc r15, r29 - dda: 51 f0 breq .+20 ; 0xdf0 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:242 - { - pinMode(MeyPins[i].pin_id, OUTPUT); - ddc: 18 81 ld r17, Y -pinMode(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - dde: 19 32 cpi r17, 0x29 ; 41 - de0: 28 f4 brcc .+10 ; 0xdec - de2: 81 2f mov r24, r17 - de4: 79 d9 rcall .-3342 ; 0xd8 -digitalWrite(): - de6: 60 e0 ldi r22, 0x00 ; 0 - de8: 81 2f mov r24, r17 - dea: da d9 rcall .-3148 ; 0x1a0 - dec: 25 96 adiw r28, 0x05 ; 5 - dee: f3 cf rjmp .-26 ; 0xdd6 -GetDeviceIdHigh(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - df0: f0 91 04 11 lds r31, 0x1104 ; 0x801104 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 - CircularShift(SIGROW.SERNUM3) << 1 ^ - df4: 80 91 06 11 lds r24, 0x1106 ; 0x801106 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436 - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - df8: 70 91 08 11 lds r23, 0x1108 ; 0x801108 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - dfc: 60 91 0a 11 lds r22, 0x110A ; 0x80110a -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:438 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); - e00: 90 91 0c 11 lds r25, 0x110C ; 0x80110c -GetDeviceIdLow(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426 -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - e04: e0 91 03 11 lds r30, 0x1103 ; 0x801103 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 - CircularShift(SIGROW.SERNUM2) << 1 ^ - e08: 20 91 05 11 lds r18, 0x1105 ; 0x801105 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428 - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - e0c: 50 91 07 11 lds r21, 0x1107 ; 0x801107 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - e10: 40 91 09 11 lds r20, 0x1109 ; 0x801109 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:430 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); - e14: 30 91 0b 11 lds r19, 0x110B ; 0x80110b -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e18: 88 0f add r24, r24 - e1a: 81 1d adc r24, r1 -GetDeviceIdHigh(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - e1c: 88 0f add r24, r24 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - e1e: 8f 27 eor r24, r31 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e20: 77 0f add r23, r23 - e22: 71 1d adc r23, r1 - e24: 77 0f add r23, r23 - e26: 71 1d adc r23, r1 -GetDeviceIdHigh(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - e28: 87 27 eor r24, r23 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e2a: 62 95 swap r22 - e2c: 60 fb bst r22, 0 - e2e: 67 95 ror r22 - e30: 67 f9 bld r22, 7 -GetDeviceIdHigh(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436 -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - e32: 86 27 eor r24, r22 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e34: 92 95 swap r25 -GetDeviceIdHigh(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437 - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - e36: 98 27 eor r25, r24 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e38: 82 2f mov r24, r18 - e3a: 88 0f add r24, r24 - e3c: 81 1d adc r24, r1 -GetDeviceIdLow(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - e3e: 88 0f add r24, r24 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426 -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - e40: 8e 27 eor r24, r30 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e42: 25 2f mov r18, r21 - e44: 22 0f add r18, r18 - e46: 21 1d adc r18, r1 - e48: 22 0f add r18, r18 - e4a: 21 1d adc r18, r1 -GetDeviceIdLow(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - e4c: 82 27 eor r24, r18 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e4e: 24 2f mov r18, r20 - e50: 22 95 swap r18 - e52: 20 fb bst r18, 0 - e54: 27 95 ror r18 - e56: 27 f9 bld r18, 7 -GetDeviceIdLow(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428 -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - e58: 82 27 eor r24, r18 -CircularShift(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - e5a: 23 2f mov r18, r19 - e5c: 22 95 swap r18 -GetDeviceIdLow(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429 - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - e5e: 82 27 eor r24, r18 -CalculateMyDeviceId(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:417 - return ((commandId & 0xFFF) * 0x10000) | deviceId | CAN_EFF_FLAG; -} - -void CalculateMyDeviceId() -{ - myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); - e60: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 - e64: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 -setup(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:249 - digitalWrite(MeyPins[i].pin_id, LOW); - - } - CalculateMyDeviceId(); - - SendSerialPackage(&mcp2515_0); - e68: 82 e8 ldi r24, 0x82 ; 130 - e6a: 9c e3 ldi r25, 0x3C ; 60 - e6c: 74 dd rcall .-1304 ; 0x956 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:250 - SendSerialPackage(&mcp2515_1); - e6e: 81 e8 ldi r24, 0x81 ; 129 - e70: 9c e3 ldi r25, 0x3C ; 60 - e72: 71 dd rcall .-1310 ; 0x956 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:251 - SendSerialPackage(&mcp2515_2); - e74: 80 e8 ldi r24, 0x80 ; 128 - e76: 9c e3 ldi r25, 0x3C ; 60 - e78: 6e dd rcall .-1316 ; 0x956 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:252 - SendSerialPackage(&mcp2515_3); - e7a: 8f e7 ldi r24, 0x7F ; 127 - e7c: 9c e3 ldi r25, 0x3C ; 60 - e7e: 6b dd rcall .-1322 ; 0x956 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 - setup(); - - for (;;) - { - loop(); - if (serialEventRun) serialEventRun(); - e80: c0 e0 ldi r28, 0x00 ; 0 - e82: d0 e0 ldi r29, 0x00 ; 0 -loop(): -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:270 - - -void loop() -{ - - SendSerialPackage(&mcp2515_0); - e84: 82 e8 ldi r24, 0x82 ; 130 - e86: 9c e3 ldi r25, 0x3C ; 60 - e88: 66 dd rcall .-1332 ; 0x956 -C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:271 - delay(1000); - e8a: 68 ee ldi r22, 0xE8 ; 232 - e8c: 73 e0 ldi r23, 0x03 ; 3 - e8e: 80 e0 ldi r24, 0x00 ; 0 - e90: 90 e0 ldi r25, 0x00 ; 0 - e92: 0d da rcall .-3046 ; 0x2ae -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 - e94: 20 97 sbiw r28, 0x00 ; 0 - e96: b1 f3 breq .-20 ; 0xe84 - e98: b3 d8 rcall .-3738 ; 0x0 <__vectors> - e9a: f4 cf rjmp .-24 ; 0xe84 - -00000e9c <__muluhisi3>: -__muluhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:626 - e9c: 38 d0 rcall .+112 ; 0xf0e <__umulhisi3> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:627 - e9e: a5 9f mul r26, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:628 - ea0: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:629 - ea2: b4 9f mul r27, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:630 - ea4: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:631 - ea6: a4 9f mul r26, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:632 - ea8: 80 0d add r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:633 - eaa: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:634 - eac: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:635 - eae: 08 95 ret - -00000eb0 <__ashrdi3>: -__ashrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3122 - eb0: 97 fd sbrc r25, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3123 - eb2: 10 94 com r1 - -00000eb4 <__lshrdi3>: -__lshrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3131 - eb4: 00 2e mov r0, r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3132 - eb6: 08 30 cpi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3133 - eb8: 98 f0 brcs .+38 ; 0xee0 <__lshrdi3+0x2c> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3134 - eba: 08 50 subi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3135 - ebc: 23 2f mov r18, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3136 - ebe: 34 2f mov r19, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3137 - ec0: 45 2f mov r20, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3138 - ec2: 56 2f mov r21, r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3139 - ec4: 67 2f mov r22, r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3140 - ec6: 78 2f mov r23, r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3141 - ec8: 89 2f mov r24, r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3142 - eca: 91 2d mov r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3143 - ecc: f4 cf rjmp .-24 ; 0xeb6 <__lshrdi3+0x2> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3144 - ece: 15 94 asr r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3145 - ed0: 97 95 ror r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3146 - ed2: 87 95 ror r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3147 - ed4: 77 95 ror r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3148 - ed6: 67 95 ror r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3149 - ed8: 57 95 ror r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3150 - eda: 47 95 ror r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3151 - edc: 37 95 ror r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3152 - ede: 27 95 ror r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3153 - ee0: 0a 95 dec r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3154 - ee2: aa f7 brpl .-22 ; 0xece <__lshrdi3+0x1a> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3155 - ee4: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3156 - ee6: 00 2d mov r16, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3157 - ee8: 08 95 ret - -00000eea <__cmpdi2_s8>: -__cmpdi2_s8(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2102 - eea: 00 24 eor r0, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2103 - eec: a7 fd sbrc r26, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2104 - eee: 00 94 com r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2105 - ef0: 2a 17 cp r18, r26 - ef2: 30 05 cpc r19, r0 - ef4: 40 05 cpc r20, r0 - ef6: 50 05 cpc r21, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2106 - ef8: 60 05 cpc r22, r0 - efa: 70 05 cpc r23, r0 - efc: 80 05 cpc r24, r0 - efe: 90 05 cpc r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2107 - f00: 08 95 ret - -00000f02 <__tablejump2__>: -__tablejump2__(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2296 - f02: ee 0f add r30, r30 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2297 - f04: ff 1f adc r31, r31 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2328 - f06: 05 90 lpm r0, Z+ -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2329 - f08: f4 91 lpm r31, Z -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2330 - f0a: e0 2d mov r30, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2331 - f0c: 09 94 ijmp - -00000f0e <__umulhisi3>: -__umulhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:564 - f0e: a2 9f mul r26, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:565 - f10: b0 01 movw r22, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:566 - f12: b3 9f mul r27, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:567 - f14: c0 01 movw r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:568 - f16: a3 9f mul r26, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:578 - f18: 01 d0 rcall .+2 ; 0xf1c <__umulhisi3+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:580 - f1a: b2 9f mul r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:581 - f1c: 70 0d add r23, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:582 - f1e: 81 1d adc r24, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:583 - f20: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:584 - f22: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:585 - f24: 08 95 ret - -00000f26 : -memcpy(): - f26: fb 01 movw r30, r22 - f28: dc 01 movw r26, r24 - f2a: 02 c0 rjmp .+4 ; 0xf30 - f2c: 01 90 ld r0, Z+ - f2e: 0d 92 st X+, r0 - f30: 41 50 subi r20, 0x01 ; 1 - f32: 50 40 sbci r21, 0x00 ; 0 - f34: d8 f7 brcc .-10 ; 0xf2c - f36: 08 95 ret - -00000f38 <_exit>: -exit(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 - f38: f8 94 cli - -00000f3a <__stop_program>: -__stop_program(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 - f3a: ff cf rjmp .-2 ; 0xf3a <__stop_program> diff --git a/Software/UPSoftware/MeyCan.cpp b/Software/UPSoftware/MeyCan.cpp new file mode 100644 index 0000000..99398e9 --- /dev/null +++ b/Software/UPSoftware/MeyCan.cpp @@ -0,0 +1,235 @@ +#include "MeyCan.h"; +#include ; +#include ; + + +PinState *MeyPin = NULL; +CanInterface *Interfaces = NULL; +MCP2515* canInterfaces[4]; +uint16_t myDeviceId; + +void SetupMeyPin(PinState *state) +{ + pinMode(state->pin_id, OUTPUT); + digitalWrite(state->pin_id, LOW); + state->pin_state = false; +} + +void SetupMeyCan() +{ + CalculateMyDeviceId(); + + if (MeyPin != NULL); + MeyPin->ForEach(SetupMeyPin); + + for (int i = 0; i < sizeof(canInterfaces) / sizeof(MCP2515*); i++) { + + canInterfaces[i]->reset(); + canInterfaces[i]->setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz + canInterfaces[i]->setNormalMode(); + + SendVersionPackage(canInterfaces[i]); + } +} + +void SetCanInterface(byte index, byte pinId) +{ + canInterfaces[index] = new MCP2515(pinId); +} + +void SetMeyPin(byte index, byte meyPinId, byte pinId) +{ + PinState* newState = new PinState(); + newState->Init(pinId, (byte) meyPinId); + + if (MeyPin == NULL) + MeyPin = newState; + else + MeyPin->AddPinState(newState); +} + + +bool CheckPinStatus(PinState * state) +{ + if (!state->is_input) + return false; + + bool newValue = ReadPin(state); + + + if (newValue != state->pin_state) + { + delay(10); + newValue = ReadPin(state); + if (newValue != state->pin_state) + { + state->pin_state = newValue; + SendSwitchedTriggeredCanPackage(state->meyPinId, state->pin_state); + } + } + return false; +} + +void CheckMeyPinsTriggered() +{ + MeyPin->ForEach(CheckPinStatus); +} + +bool ReadPin(PinState * state) +{ + if (state->pin_id == PIN_PD2) + return digitalReadFast(PIN_PD2); + else if (state->pin_id == PIN_PC7) + return digitalReadFast(PIN_PC7); + else if (state->pin_id == PIN_PD1) + return digitalReadFast(PIN_PD1); + else if (state->pin_id == PIN_PD0) + return digitalReadFast(PIN_PD0); + else if (state->pin_id == PIN_PD6) + return digitalReadFast(PIN_PD6); + else if (state->pin_id == PIN_PD5) + return digitalReadFast(PIN_PD5); + else if (state->pin_id == PIN_PD4) + return digitalReadFast(PIN_PD4); + else if (state->pin_id == PIN_PD3) + return digitalReadFast(PIN_PD3); + else + return digitalRead(state->pin_id); +} + + +void HandleFrame(can_frame *frame) +{ + HandleTriggerMeypinCanPackage(frame); +} + +void HandleTriggerMeypinCanPackage(can_frame *frame) +{ + if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) + { + uint16_t adressedDeviceId = ((uint16_t )frame->data[0] << 8) | frame->data[1] ; + if (adressedDeviceId != myDeviceId) return; + + + byte meyPinId = frame->data[2]; + bool state = frame->data[3] > 0; + + PinState *adressedPin = MeyPin->Find(meyPinId); + + if (adressedPin != NULL) + { + if (adressedPin->is_input == true) + { + pinMode(adressedPin->pin_id, OUTPUT); + adressedPin->is_input = false; + } + + bool pinChanged = adressedPin->pin_state != state; + adressedPin->pin_state = state; + + if (pinChanged) { + digitalWrite(adressedPin->pin_id, state); + SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state); + } + + } + } +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); +} + +uint16_t GetDeviceId(uint32_t canFrameId) +{ + return canFrameId & 0xFFFF; +} + +uint16_t GetPackageType(uint32_t canFrameId) +{ + return (canFrameId / 0x10000) & 0xFFF; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM4)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM5)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); +} + +uint32_t CreateCanId(uint16_t commandId) +{ + return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; +} + +void SendVersionPackage(MCP2515 *interface) +{ + can_frame toSend; + toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); + toSend.can_dlc = 6; + + toSend.data[0] = SOFTWARE_VERSION_HIGH; + toSend.data[1] = SOFTWARE_VERSION_LOW; + toSend.data[2] = HARDWARE_VERSION_HIGH; + toSend.data[3] = HARDWARE_VERSION_LOW; + toSend.data[4] = (myDeviceId >> 8) & 0xFF; + toSend.data[5] = myDeviceId & 0xFF; + + DoSendCanPkg(interface, &toSend); +} + +void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state) +{ + can_frame toSend; + + toSend.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID); + toSend.can_dlc = 4; + toSend.data[0] = (targetCanId & 0xFF00) >> 8; + toSend.data[1] = targetCanId & 0xFF; + toSend.data[2] = pinId; + toSend.data[3] = state; + + DoSendCanPkg(&toSend); + HandleFrame(&toSend); +} + +void SendSwitchedTriggeredCanPackage(byte pinId, int state) +{ + can_frame toSend; + toSend.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID); + toSend.can_dlc = 2; + toSend.data[0] = pinId; + toSend.data[1] = state; + + DoSendCanPkg(&toSend); +} + +void DoSendCanPkg(can_frame *frame) +{ + for (int i = 0; i < sizeof(canInterfaces) / sizeof(MCP2515*); i++) + DoSendCanPkg(canInterfaces[i], frame); +} + +void DoSendCanPkg(MCP2515* interface, can_frame *frame) +{ + byte cnt = 0; + while (interface->sendMessage(frame)) + { + if (++cnt > 10) return; + } +} + +void CalculateMyDeviceId() +{ + myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); +} diff --git a/Software/UPSoftware/MeyCan.h b/Software/UPSoftware/MeyCan.h new file mode 100644 index 0000000..11238f0 --- /dev/null +++ b/Software/UPSoftware/MeyCan.h @@ -0,0 +1,105 @@ +#ifndef MEYCAN_H +#define MEYCAN_H + +#include +#include + +typedef struct CanInterface +{ + MCP2515 *Interface; + MCP2515 *Next; +}; + +typedef struct PinState +{ + int pin_id; + bool pin_state; + bool is_input; + byte meyPinId; + PinState *next = NULL; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + this->pin_state = true; + this->is_input = true; + this->meyPinId = meyPinId; + } + + void AddPinState(PinState *nextPinState) + { + if (next == NULL) + { + this->next = nextPinState; + nextPinState->next = NULL; + } else { + next->AddPinState(nextPinState); + } + } + + PinState* Find(byte meyPinId) + { + if (this->meyPinId == meyPinId) + return this; + + if (this->next != NULL) + return this->next->Find(meyPinId); + + return NULL; + } + + void ForEach(void (*handle)(PinState *theState)) + { + handle(this); + if (this->next != NULL) + this->next->ForEach(handle); + } +} ; + + +/* START MEYCAN */ + +const byte SOFTWARE_VERSION_HIGH = 5; +const byte SOFTWARE_VERSION_LOW = 0; +const byte HARDWARE_VERSION_HIGH = 7; +const byte HARDWARE_VERSION_LOW = 0; + +const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL; +const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050; +const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055; + +extern MCP2515* canInterfaces[4]; + +void SetCanInterface(byte index, byte pinId); +void SetMeyPin(byte index, byte meyPinId, byte pinId); + +void SetupMeyCan(); + +bool ReadPin(PinState *state); +bool CheckPinStatus(PinState * state); +void CheckMeyPinsTriggered(); /* checks weather a meypin triggered and sends a can pkg is neccessary */ +void HandleFrame(can_frame *frame); +void HandleTriggerMeypinCanPackage(can_frame *frame); +byte CircularShift(byte b); +uint16_t GetDeviceId(uint32_t canFrameId); +uint16_t GetPackageType(uint32_t canFrameId); +byte GetDeviceIdLow(); + +byte GetDeviceIdHigh(); + +uint32_t CreateCanId(uint16_t commandId); +void SendVersionPackage(MCP2515 *interface); + +void SendSwitchedTriggeredCanPackage(byte pinId, int state); +void BroadcastTriggerMeyPinCanPackage(uint16_t targetCanId, byte pinId, byte state); + +void DoSendCanPkg(can_frame *frame); +void DoSendCanPkg(MCP2515 *interface, can_frame *frame); + +void CalculateMyDeviceId(); + +/* STOP MEYCAN */ + + +#endif diff --git a/Software/UPSoftware/MeyRule.cpp b/Software/UPSoftware/MeyRule.cpp new file mode 100644 index 0000000..5211f90 --- /dev/null +++ b/Software/UPSoftware/MeyRule.cpp @@ -0,0 +1,104 @@ +#include "MeyRule.h" +#include "MeyCan.h" +#include +#include ; + +RemotePinInfo remotePinInfo = RemotePinInfo(); +Rule *rules = NULL; + +void PutRule(Rule *rule) +{ + if (rules == NULL) + rules = rule; + else + rules->AddRule(rule); +} + +void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = false; + rule->inverse = false; + + PutRule(rule); +} + +void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = true; + rule->inverse = false; + + PutRule(rule); +} + +void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = true; + rule->inverse = true; + + PutRule(rule); +} + + + +void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule) +{ + RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(rule->targetDevId); + + if (currentPinState == NULL) return; + + bool pinState = state > 0; + if (rule->inverse) + pinState = !pinState; + + if (rule->toggle) + pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true); + + BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState); + currentPinState->setPinState(rule->targetMeyPinId, pinState); +} + +void HandleTriggered(can_frame *frame) +{ + if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) + { + RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(GetDeviceId(frame->can_id) ); + + if (currentPinState == NULL) + return; + + currentPinState->setPinState(frame->data[0], frame->data[1]); + } +} + +void HandleRules(can_frame *frame) +{ + HandleTriggered(frame); + + if (rules == NULL) return; + if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) + { + uint16_t deviceId = GetDeviceId(frame->can_id); + uint8_t dt = frame->data[1]; + uint8_t state = frame->data[0]; + + rules->Traverse(deviceId, dt, state, CheckRule); + } +} diff --git a/Software/UPSoftware/MeyRule.h b/Software/UPSoftware/MeyRule.h new file mode 100644 index 0000000..2245767 --- /dev/null +++ b/Software/UPSoftware/MeyRule.h @@ -0,0 +1,111 @@ +#ifndef MEYRULE_H +#define MEYRULE_H + +#include +#include ; + +struct Rule +{ + uint16_t sourceDevId; + byte sourceMeyPinId; + uint16_t targetDevId; + byte targetMeyPinId; + bool toggle; + bool inverse; + Rule *nextRule = NULL; + + void AddRule(Rule *rule) + { + if (this->nextRule == NULL) + { + this->nextRule = rule; + rule->nextRule = NULL; + } else { + this->nextRule->AddRule(rule); + } + } + + void Traverse( uint16_t deviceId, uint8_t dt, uint8_t state, void (*handle)(uint16_t, uint8_t, uint8_t, Rule*)) + { + + if ( this->sourceDevId == deviceId && this->sourceMeyPinId == state) + handle(deviceId, dt, state, this); + + if (this->nextRule != NULL) + this->nextRule->Traverse(deviceId, dt, state, handle); + + } +}; + + +typedef struct RemotePinInfo +{ + const byte MAX_REMOTE_PIN_COUNT = 64; + uint16_t DeviceId = 0; // the id of the device + uint8_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example + RemotePinInfo *next = NULL; + + bool getPinState(byte meyPin) + { + return (this->pinState >> (meyPin - 1)) & 1; + } + + void setPinState(byte meyPin, bool state) + { + if (state) + this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000 + else + this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not + } + + + int16_t Count() + { + if (this->next == NULL) return 1; + return this->next->Count() + 1; + } + + RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0) + { + if (count > MAX_REMOTE_PIN_COUNT) + return NULL; + + + if (this->DeviceId == 0 && this->pinState == 0) + { + this->DeviceId = deviceId; + this->pinState = 0; + } + + if (this->DeviceId == deviceId) + { + //ToggleDebug(); + return this; + } + + if (next != NULL) + { + return next->FindOrAdd(deviceId, count + 1); + } + + RemotePinInfo *theNext = new RemotePinInfo; + theNext->DeviceId = deviceId; + theNext->pinState = 0; + theNext->next = NULL; + + this->next = theNext; + return this->next; + } + +}; + +extern RemotePinInfo remotePinInfo; +extern Rule *rules; + +void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void HandleRules(can_frame *frame); +void PutRule(Rule *rule); +void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule); +#endif diff --git a/Software/UPSoftware/UPSoftware.ino b/Software/UPSoftware/UPSoftware.ino index 5951c38..e792b00 100644 --- a/Software/UPSoftware/UPSoftware.ino +++ b/Software/UPSoftware/UPSoftware.ino @@ -1,256 +1,31 @@ - - #include ; +#include ; #include ; +#include "MeyCan.h"; -struct can_frame _frame; -MCP2515 mcp2515(PIN_PD4); -const byte SoftwareVersionHigh = 4; -const byte SoftwareVersionLow = 0; -const byte HardwareVersionHigh = 2; -const byte HardwareVersionLow = 0; - -typedef struct PinState -{ - int pin_id; - bool pin_state; - bool is_input; - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - this->pin_state = true; - this->is_input = true; - this->meyPinId = meyPinId; - } -} ; - -int PinCount = 8; -PinState MeyPins[8]; -int16_t myDeviceId; - void setup() { SPI.begin(); - MeyPins[0] = PinState(); - MeyPins[0].Init(PIN_PC7, (byte) 1); - - MeyPins[1] = PinState(); - MeyPins[1].Init(PIN_PD0, (byte) 2); - - MeyPins[2] = PinState(); - MeyPins[2].Init(PIN_PD1, (byte) 3); - - MeyPins[3] = PinState(); - MeyPins[3].Init(PIN_PD2, (byte) 4); - - MeyPins[4] = PinState(); - MeyPins[4].Init(PIN_PD6, (byte) 5); - - MeyPins[5] = PinState(); - MeyPins[5].Init(PIN_PD5, (byte) 6); - - MeyPins[6] = PinState(); - MeyPins[6].Init(PIN_PD4, (byte) 7); - - MeyPins[7] = PinState(); - MeyPins[7].Init(PIN_PD3, (byte) 8); - - - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); + delay(10); // a bit delay for mcp2515 to get the clock + + SetMeyPin(0, 1, PIN_PC7); + SetMeyPin(1, 2, PIN_PD0); + SetMeyPin(2, 3, PIN_PD1); + SetMeyPin(3, 4, PIN_PD2); + SetMeyPin(4, 5, PIN_PD6); + SetMeyPin(5, 6, PIN_PD5); + SetMeyPin(6, 7, PIN_PD4); + SetMeyPin(7, 8, PIN_PD3); + delay(20); - mcp2515.reset(); - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - for (int i = 0; i <= PinCount - 1; i++) - { - pinMode(MeyPins[i].pin_id, INPUT_PULLUP); - MeyPins[i].pin_state = ReadPin(&MeyPins[i]); - } - - - CalculateMyDeviceId(); - SendSerialPackage(); + SetCanInterface(0, PIN_PD4); + SetupMeyCan(); } void loop() { - delay(1000); - SendSerialPackage(); - - for (int i = 0; i <= PinCount - 1; i++) - { - if (CheckPinStatus(&MeyPins[i])) - SendSwitchedTriggeredCanPackage(MeyPins[i].meyPinId, MeyPins[i].pin_state); - } - - if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) - { - if (GetDeviceId(_frame.can_id) == GetMyDeviceId()) - { - int meyPinId = _frame.data[0]; - bool state = _frame.data[1] > 0; - - PinState *adressedPin; - for (int i = 0; i <= PinCount - 1; i++) - if (MeyPins[i].meyPinId == meyPinId) - { - adressedPin = &MeyPins[i]; - break; - } - - if (adressedPin != NULL) - { - if (adressedPin->is_input == true) - { - pinMode(adressedPin->pin_id, OUTPUT); - adressedPin->is_input = false; - } - adressedPin->pin_state = state; - digitalWrite(adressedPin->pin_id, state); - } - - } - } -} - - -void SendSerialPackage() -{ - _frame.can_id = CreateCanId(0xFFFF); - _frame.can_dlc = 4; - - _frame.data[0] = SoftwareVersionHigh; - _frame.data[1] = SoftwareVersionLow; - _frame.data[2] = HardwareVersionHigh; - _frame.data[3] = HardwareVersionLow; - DoSendCanPkg(&mcp2515, &_frame); -} - - -void SendSwitchedTriggeredCanPackage(byte pinId, int state) -{ - _frame.can_id = CreateCanId(0x050); - _frame.can_dlc = 2; - _frame.data[0] = pinId; - _frame.data[1] = state; - DoSendCanPkg(&mcp2515, &_frame); -} - -void DoSendCanPkg(MCP2515 *interface, can_frame *frame) -{ - // ToggleDebug(); - byte cnt = 0; - while (interface->sendMessage(&_frame)) { - cnt++; - if (cnt > 10) return; - } - -} - -void SendDoTriggerSwitchCanPackage(uint32_t targetCanId, byte pinId, byte state) -{ - _frame.can_id = CreateCanId(0x050); - _frame.can_dlc = 4; - _frame.data[0] = targetCanId & 0xFF; - _frame.data[1] = (targetCanId & 0xFF00) >> 8; - _frame.data[2] = pinId; - _frame.data[3] = state; - DoSendCanPkg(&mcp2515, &_frame); -} - -bool ReadPin(PinState * state) -{ - if (state->pin_id == PIN_PD2) - return digitalReadFast(PIN_PD2); - else if (state->pin_id == PIN_PC7) - return digitalReadFast(PIN_PC7); - else if (state->pin_id == PIN_PD1) - return digitalReadFast(PIN_PD1); - else if (state->pin_id == PIN_PD0) - return digitalReadFast(PIN_PD0); - else if (state->pin_id == PIN_PD6) - return digitalReadFast(PIN_PD6); - else if (state->pin_id == PIN_PD5) - return digitalReadFast(PIN_PD5); - else if (state->pin_id == PIN_PD4) - return digitalReadFast(PIN_PD4); - else if (state->pin_id == PIN_PD3) - return digitalReadFast(PIN_PD3); - else - return digitalRead(state->pin_id); -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); -} - -uint32_t GetDeviceId(uint32_t canFrameId) -{ - return canFrameId & 0xFFFF; -} - -uint32_t GetPackageType(uint32_t canFrameId) -{ - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint32_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | GetMyDeviceId() | CAN_EFF_FLAG; -} - -void CalculateMyDeviceId() -{ - myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); -} - -uint16_t GetMyDeviceId() -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -bool CheckPinStatus(PinState * state) -{ - if (!state->is_input) - return false; - - bool newValue = ReadPin(state); - - - if (newValue != state->pin_state) - { - delay(10); - newValue = ReadPin(state); - if (newValue != state->pin_state) - { - state->pin_state = newValue; - return true; - } - } - return false; - + CheckMeyPinsTriggered(); } diff --git a/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.hex b/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.hex deleted file mode 100644 index 78da0a6..0000000 --- a/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.hex +++ /dev/null @@ -1,283 +0,0 @@ -:1000000050C0000068C0000066C0000064C000006E -:1000100062C0000060C000005EC000005CC0000064 -:100020005AC0000058C0000056C0000054C0000074 -:1000300052C0000050C000004EC000004CC0000084 -:100040004AC0000048C0000046C0000044C0000094 -:1000500042C0000040C000003EC000003CC00000A4 -:100060003AC0000002C5000036C0000034C00000E5 -:1000700032C0000030C000002EC000002CC00000C4 -:100080002AC0000028C0000026C0000024C00000D4 -:1000900022C0000020C000001EC000001CC00000E4 -:1000A0005D0511241FBECFEFCDBFDFE3DEBF2CE324 -:1000B000A0E0BCE301C01D92A838B207E1F710E050 -:1000C000C1E5D0E003C02197FE01E7D7C035D107D5 -:1000D000D1F704D5FDC794CF00008093C408809168 -:1000E000C30887FFFCCF8091C4080895CF93DF93A6 -:1000F00090E0FC01E55AFE4A20812F3F61F0FC01AF -:10010000EE5CFE4AE08130E2E39FF0011124FC5FE7 -:10011000613021F42183DF91CF910895875F9E4A5A -:10012000EC01A881AF3F69F0CF014096A80FB92F2D -:10013000B11D9FB7F89422838C9188608C939FBFE8 -:10014000EACFB0E0A0E0F5CF8091473C811117C025 -:100150001092483C1092493C10924A3C10924B3C01 -:1001600010924C3C10924D3C10924E3C10924F3CE1 -:100170001092503C1092513C81E08093473C80911A -:10018000E3058C7F9091463C892B8093E305911188 -:1001900019C061E084E0AADF61E086E0A7DF80911A -:1001A000C10884608093C1088091C00881628093F7 -:1001B000C0089091403C8091413C9093C00880934E -:1001C000C1080895913031F461E08EE08FDF61E085 -:1001D00080E1E4CF923019F761E08EE187DF61E0E2 -:1001E00080E2DCCF90E0FC01E052FF4AE081EE23A8 -:1001F00019F1E13021F000F1E630A8F00895875FB1 -:100200009E4AFC012081233008F02F5F3091010AC3 -:1002100081E090E001C0880F2A95EAF7809583235A -:100220008093010A089580E1E89FF0011124E05ACB -:10023000F54F81818F7E818308950F931F93CF9314 -:10024000DF93C82FD0E0FE01E55AFE4A00810F3F40 -:1002500099F0162F893208F4C5DFFE01EE5CFE4AE4 -:10026000E08180E2E89FF0011124FC5F808180231F -:1002700051F0111106C00683DF91CF911F910F91AC -:1002800008950583F9CFC75FDE4A8881309771F002 -:100290008F3F61F07096E80FF11D9FB7F894808151 -:1002A000111107C0877F80839FBFE6CFF0E0E0E0B9 -:1002B000F4CF8860F8CF8F929F92AF92BF92CF9287 -:1002C000DF92EF92FF920F93CF93DF938091813C67 -:1002D000893210F461E0B1DF8091483C882319F045 -:1002E00081FF0DC07894DF91CF910F91FF90EF9037 -:1002F000DF90CF90BF90AF909F908F90089580FF38 -:10030000F2CF80904A3C90904B3CA0904C3CB090F7 -:100310004D3CC12CD12C7601E0E09401A501B60141 -:10032000C701A0E0AED681F1217030E040E050E09E -:1003300060E070E080E090E0A4D6D1F0B0E0A0E012 -:10034000E03370F4AE2FA695A695A69580E2A89FFF -:10035000D0011124A05FBB4F8E2F8770A80FB11D55 -:10036000CE2FD0E0CE5BD34C88899C91892B8C9387 -:100370009401A501B601C70101E068D649015A01FF -:100380006B017C01EF5FC9CF80904E3C90904F3C59 -:10039000A090503CB090513CC12CD12C7601E0E2B1 -:1003A0009401A501B601C701A0E06BD609F49BCF6B -:1003B000217030E040E050E060E070E080E090E0EC -:1003C00060D6D1F0B0E0A0E0E03370F4AE2FA69597 -:1003D000A695A69580E2A89FD0011124A05FBB4FEF -:1003E0008E2F8770A80FB11DCE2FD0E0CE5BD34CDF -:1003F00088899C91892B8C939401A501B601C70132 -:1004000001E024D649015A016B017C01EF5FC8CF9E -:100410008FB7F89420912B3C30912C3C40912D3C8F -:1004200050912E3CE091AA0AF091AB0A9091A60A55 -:1004300090FF08C02F5F3F4F4F4F5F4FE091AA0AD8 -:10044000F091AB0A8FBFA8EEB3E0F4D523E0F695A8 -:10045000E7952A95E1F76E0F7F1F811D911D089585 -:100460008F929F92AF92BF92CF92DF92EF92FF92C4 -:100470004B015C01CDDF6B017C01A8EEB3E0A5016F -:100480009401D8D5C60ED71EE81EF91EC616D7068B -:10049000E806F90610F4BCDFF9CFBADF6C157D056C -:1004A0008E059F05D0F3FF90EF90DF90CF90BF9027 -:1004B000AF909F908F9008950F931F93CF93FC015F -:1004C000808191818831910541F48EB182FB88272A -:1004D00080F9CF911F910F9108958531910529F4ED -:1004E0008AB1881F8827881FF4CF8731910521F4AE -:1004F0008EB186958170EDCF8631910519F48EB15C -:100500008170E7CF8C31910529F48EB186FB882765 -:1005100080F9DFCF8B31910529F48EB185FB8827D7 -:1005200080F9D7CF8A31910521F48EB182958170FF -:10053000D0CF8931910529F48EB183FB882780F9CA -:10054000C8CF8932B0F48C011127F801E55AFE4A70 -:10055000C081CF3F71F046DEF801EE5CFE4AE081DB -:1005600080E2E89FF0011124FC5F8085C82381E0D0 -:1005700039F680E0C5CF8F929F92AF92BF92CF9213 -:10058000DF92EF92FF920F93CF93DF938091483CDD -:10059000882319F081FF19C0F89481E38093C00883 -:1005A00084E08093C1088091813C893208F098C032 -:1005B00060E0DF91CF910F91FF90EF90DF90CF90AF -:1005C000BF90AF909F908F9038CE80FFE6CF809005 -:1005D0004A3C90904B3CA0904C3CB0904D3CC12C80 -:1005E000D12C7601E0E09401A501B601C701A0E09D -:1005F00048D589F1217030E040E050E060E070E0E3 -:1006000080E090E03ED5D9F0B0E0A0E0E03370F4B7 -:10061000AE2FA695A695A69580E2A89FD00111249D -:10062000A05FBB4F8E2F8770A80FB11DCE2FD0E0DB -:100630008C91CE5BD34C888B8C91887F8C9394016A -:10064000A501B601C70101E001D549015A016B01BD -:100650007C01EF5FC8CF80904E3C90904F3CA090C3 -:10066000503CB090513CC12CD12C7601E0E2940179 -:10067000A501B601C701A0E004D509F48ECF217011 -:1006800030E040E050E060E070E080E090E0F9D4DD -:10069000D9F0B0E0A0E0E03370F4AE2FA695A695B7 -:1006A000A69580E2A89FD0011124A05FBB4F8E2F9A -:1006B0008770A80FB11DCE2FD0E08C91CE5BD34CAC -:1006C000888B8C91887F8C939401A501B601C7011A -:1006D00001E0BCD449015A016B017C01EF5FC7CF37 -:1006E000DF91CF910F91FF90EF90DF90CF90BF906F -:1006F000AF909F908F900895FF920F931F93CF9389 -:10070000DF93C82FF62E172F042F35DF82E0E4DCAD -:100710008C2FE2DCCF2DD12F0C0F1D2F111DC017F8 -:10072000D10719F08991D8DCFACFDF91CF911F91D1 -:100730000F91FF90C0CD1F93CF93DF93182FD62F2B -:10074000C42F19DF85E0C8DC812FC6DC8D2FC4DC07 -:100750008C2FC2DCDF91CF911F91ADCDCF93C82FED -:100760000ADF83E0B9DC8C2FB7DC80E0B5DCC82F72 -:10077000A2DD8C2FCF910895CF92DF92EF92FF925E -:10078000CF93C82F482F60EE8FE0D5DF8FB7F89456 -:10079000C0902B3CD0902C3CE0902D3CF0902E3C17 -:1007A0008FBF8AE0C80ED11CE11CF11C2FB7F89452 -:1007B00080912B3C90912C3CA0912D3CB0912E3CF3 -:1007C0002FBF8C159D05AE05BF0578F48EE0C6DF02 -:1007D000807EC813EBCF81E091E0892790E0CF9134 -:1007E000FF90EF90DF90CF90089580E0F5CFCF930A -:1007F000DF93D82FC62FBFDE82E06EDC8D2F6CDC3E -:100800008C2F6ADCDF91CF9156CDFF920F931F930F -:10081000CF93DF93C82FF62E172F042FACDE83E083 -:100820005BDC8C2F59DCCF2DD12F0C0F1D2F111D10 -:10083000C017D10721F080E04FDC8993F9CFDF9119 -:10084000CF911F910F91FF9036CDBF92CF92DF9243 -:10085000EF92FF920F931F93CF93DF93CDB7DEB745 -:100860002597CDBFDEBF8C01000F111F000F111F98 -:10087000F801EC57FE4A45E0BE016F5F7F4F818172 -:10088000C4DF8A81C98098E0C99E60011124282FA5 -:1008900030E055E0359527955A95E1F7C20ED31E05 -:1008A0000D2C000CEE08FF0883FF20C092E0CC0C5A -:1008B000DD1CEE1CFF1C9A95D1F78370C80ED11C6D -:1008C000E11CF11CFE2CED2CDC2CCC248B81C80E01 -:1008D000D11CE11CF11CFE2CED2CDC2CCC248C81D9 -:1008E000C80ED11CE11CF11C6894F7F88D818F7043 -:1008F000B82EE8E081E090E0EB1510F1F801EC573C -:10090000FE4A80812BDF83FF02C06894F6F8C09214 -:10091000303CD092313CE092323CF092333CB09289 -:10092000343C0C571E4A4B2D68E37CE3F80182816E -:100930006CDF40E0F80163818CE2FDDE90E080E056 -:100940002596CDBFDEBFDF91CF911F910F91FF9014 -:10095000EF90DF90CF90BF900895CF92DF92EF920B -:10096000FF920F931F93CF93DF93CDB7DEB72D97F1 -:10097000CDBFDEBF8091303C9091313CA091323CA4 -:10098000B091333CAC01BD01442777FD4395552719 -:10099000662777276C017D01CC24DD24EE2420E43A -:1009A000F2220FEF1FEF2FEF3FE1411104C00FEFD5 -:1009B00017E020E030E080239123A223B3234423D7 -:1009C00009F442C08C839B83CD01AA27BB27282F23 -:1009D00023702860382F330F330F330F307E232BD3 -:1009E0002A8335E0969587953A95E1F789831091AA -:1009F000343C812FCD28CE28CF2809F080648D8308 -:100A0000412F50E068E37CE3CE01069658D345E0E1 -:100A1000410FBE016F5F7F4F81E46EDE48E068E00A -:100A200080E489DE80E49ADE8077E1F084E090E083 -:100A30002D96CDBFDEBFDF91CF911F910F91FF901B -:100A4000EF90DF90CF9008959C0193E03695279525 -:100A50009A95E1F729838295880F807E8A831C828C -:100A60001B82C5CF90E080E0E3CF1F920F920FB6BC -:100A70000F9211248F939F93AF93BF9380912B3C40 -:100A800090912C3CA0912D3CB0912E3C0196A11D43 -:100A9000B11D80932B3C90932C3CA0932D3CB093A4 -:100AA0002E3C81E08093A60ABF91AF919F918F91D8 -:100AB0000F900FBE0F901F901895E0E4FCE384E0C8 -:100AC000818381E38083E2E4FCE3158214823CDBD2 -:100AD00083E08093813C61E009DBEDCBCF93DF9332 -:100AE000CDB7DEB7A297CDBFDEBF91E088ED84BF62 -:100AF0009093610080910206856080930206809148 -:100B00000006816080930006809102068F7C8065DC -:100B1000809302061092E20582E08093E4059093B0 -:100B2000030A8EEF8093270A8093260A80E8809339 -:100B30002D0A80932B0A8093290A80932C0A809394 -:100B40002A0A8093280A89E08093000A87E080932C -:100B5000E505E0E8FAE017E09EEF80E805E01183A4 -:100B60009487858700837096E03C2AE0F207B9F706 -:100B70001092A10A8FE39FE18093AC0A9093AD0A93 -:100B80008091A50A81608093A50A1092A00A8091A5 -:100B9000A00A81608093A00A7894D6DA85E190E07B -:100BA0008093033C9093043C81E08093053C8093C8 -:100BB000063C8093073C26E130E02093083C3093CC -:100BC000093C80930A3C80930B3C92E090930C3C50 -:100BD00027E130E020930D3C30930E3C80930F3C96 -:100BE0008093103C93E09093113C28E130E02093F7 -:100BF000123C3093133C8093143C8093153C94E05A -:100C00009093163C2CE130E02093173C3093183C35 -:100C10008093193C80931A3C00931B3C2BE130E0FD -:100C200020931C3C30931D3C80931E3C80931F3CC2 -:100C300096E09093203C2AE130E02093213C3093D1 -:100C4000223C8093233C8093243C1093253C29E153 -:100C500030E02093263C3093273C8093283C8093BF -:100C6000293C88E080932A3C80916000806890E075 -:100C700028ED24BF809360007EDC80EC2DDA1BDB46 -:100C80006AE070E080E090E0EBDB8E010F5F1F4FC9 -:100C90008EE0F80111928A95E9F74EE0B80180E301 -:100CA0002BDD4EE0B80180E427DD4EE0B80180E5A1 -:100CB00023DD60E080E69BDD60E080E798DD63EAAD -:100CC0008BE295DD44E067E680E635DD41E067E6EE -:100CD00080E731DD8CE0E4EDF0E5DE011F96019068 -:100CE0000D928A95E1F75E01FFE0AF0EB11CD12CA9 -:100CF000C12CB8E09B2EF501019111915F0180E8B4 -:100D00003BDD892B71F40230110509F475C108F03F -:100D10002CC10115110509F434C10130110509F484 -:100D200071C180E829DD892B49F460E08AE25FDD4A -:100D300060E989E25CDD62E888E259DD80E01CDD83 -:100D4000FBE2CF2EFCE3DF2E03E01CE3F801808101 -:100D5000893210F462E0CAD9C801AEDBF80182839F -:100D60000B5F1F4FC016D10689F750910311909168 -:100D70000511409107113091091120910B11892F14 -:100D8000880F811D880F8527942F990F911D990F2A -:100D9000911D8927932F929590FB979597F9892715 -:100DA000922F929589278093003C50910411409195 -:100DB00006113091081120910A1190910C11440FE5 -:100DC000411D440F4527330F311D330F311D43277C -:100DD000229520FB279527F9422792954927409392 -:100DE000013C90E0982F8827092E000CAA0BBB0B22 -:100DF00050E070E060E06F6F7F68842B952BA62B2E -:100E0000B72B8093303C9093313CA093323CB0930D -:100E1000333C84E08093343C81E08093383C1092F2 -:100E2000393C82E080933A3C10923B3C96DD992419 -:100E3000939465E0862E70E0A72E70E0B72EE2E076 -:100E40007E2E33E0C32E3CE3D32EF601838188232C -:100E5000C1F1C60131DBF6019281891791F16AE097 -:100E600070E080E090E0FCDAC60126DBF6019281BA -:100E7000891739F1828394814091003C50E0542FCE -:100E80004427052E000C660B770B2090013C312C7B -:100E9000512C412CF0E54F2A689457F842295329E8 -:100EA000642975294093303C5093313C6093323C27 -:100EB0007093333C7092343C9093383C8093393C2F -:100EC0004CDD25E0C20ED11CC016D10609F0BDCF05 -:100ED00052DB80EA01D980E0FFD8D82EECD990E02F -:100EE00080E0D0FC04C0D1FE35C081E090E0ADDCF4 -:100EF000892B81F58091023C89258093023C2091C9 -:100F0000383CDD24D3948091393C811101C0D12C2F -:100F1000E3E0FCE390E080E03481231384C0889E0A -:100F20009001899E300D1124C9018D5F934C7C0185 -:100F3000F7018381882339F08081893210F461E0E0 -:100F4000D5D8F7011382F701D2828081893210F45B -:100F50006D2D73D964E170E080E090E081DAA11436 -:100F6000B10409F46ECF4CD86CCF0430110509F4EC -:100F700047C008F443C00530110509F0D2CE88E11E -:100F800001C080E0F1E0CF16D104F1F51E8E1D8E78 -:100F90009C8E1B8E44E0BE01655E7F4FADDB2FEF64 -:100FA000C21AD20A86E0C816D10409F0A4CE1F8E58 -:100FB00018A281E090E089A39AA38E01015E1F4FE1 -:100FC0005E0193E2A90EB11CA8E09A2EF801C1902F -:100FD000D1908F0180E8D0DB892B09F0A2CE1E8E44 -:100FE0001D8E9C8E1B8EC114D10499F0CA94CD28FD -:100FF00009F097CE84E20EC088E0C4CF80E1C2CF72 -:1010000084E1C0CF84E0BECF1B8E1C8E1E8E1D8E51 -:10101000C1CF80E244E0BE01655E7F4F6DDB0A1503 -:101020001B05A1F67ECE019635968830910509F014 -:1010300073CF7ECF38D0A59F900DB49F900DA49F05 -:10104000800D911D1124089597FD1094002E0830F5 -:1010500098F00850232F342F452F562F672F782FC5 -:10106000892F912DF4CF159497958795779567954E -:1010700057954795379527950A95AAF71124002D7E -:1010800008950024A7FD00942A1730054005500557 -:1010900060057005800590050895EE0FFF1F05900F -:1010A000F491E02D0994A29FB001B39FC001A39FCA -:1010B00001D0B29F700D811D1124911D0895FB0177 -:1010C000DC0102C001900D9241505040D8F70895C4 -:0410D000F894FFCFC2 -:1010D40000000100020003000400050000000000FD -:1010E40000000000000000000005010101010101F1 -:1010F40000000000000000000000000000000000EC -:1011040000000203000001020304050607000102B7 -:101114000304050001020304050607000102030499 -:10112400050607000102030001020304050600008E -:10113400000000000000010101010101020202029D -:10114400020202020303030303030303040404046B -:101154000505050505050501020408102040800168 -:101164000204081020010204081020408001020437 -:1011740008102040800102040801020408102040E5 -:081184006061660170717602E2 -:00000001FF diff --git a/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.lst b/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.lst deleted file mode 100644 index be21701..0000000 --- a/Software/UPSoftware/UPSoftware.ino_atmega809_8000000L.lst +++ /dev/null @@ -1,4404 +0,0 @@ - -C:\Users\Martin\AppData\Local\Temp\arduino_build_795292/UPSoftware.ino.elf: file format elf32-avr - - -Disassembly of section .text: - -00000000 <__vectors>: -__vectors(): -../../../../../crt1/gcrt1.S:61 - 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> - 2: 00 00 nop -../../../../../crt1/gcrt1.S:67 - 4: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt> - 6: 00 00 nop -../../../../../crt1/gcrt1.S:68 - 8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt> - a: 00 00 nop -../../../../../crt1/gcrt1.S:69 - c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt> - e: 00 00 nop -../../../../../crt1/gcrt1.S:70 - 10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt> - 12: 00 00 nop -../../../../../crt1/gcrt1.S:71 - 14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt> - 16: 00 00 nop -../../../../../crt1/gcrt1.S:72 - 18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt> - 1a: 00 00 nop -../../../../../crt1/gcrt1.S:73 - 1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt> - 1e: 00 00 nop -../../../../../crt1/gcrt1.S:74 - 20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt> - 22: 00 00 nop -../../../../../crt1/gcrt1.S:75 - 24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt> - 26: 00 00 nop -../../../../../crt1/gcrt1.S:76 - 28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt> - 2a: 00 00 nop -../../../../../crt1/gcrt1.S:77 - 2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt> - 2e: 00 00 nop -../../../../../crt1/gcrt1.S:78 - 30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt> - 32: 00 00 nop -../../../../../crt1/gcrt1.S:79 - 34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt> - 36: 00 00 nop -../../../../../crt1/gcrt1.S:80 - 38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt> - 3a: 00 00 nop -../../../../../crt1/gcrt1.S:81 - 3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt> - 3e: 00 00 nop -../../../../../crt1/gcrt1.S:82 - 40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt> - 42: 00 00 nop -../../../../../crt1/gcrt1.S:83 - 44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt> - 46: 00 00 nop -../../../../../crt1/gcrt1.S:84 - 48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt> - 4a: 00 00 nop -../../../../../crt1/gcrt1.S:85 - 4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt> - 4e: 00 00 nop -../../../../../crt1/gcrt1.S:86 - 50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt> - 52: 00 00 nop -../../../../../crt1/gcrt1.S:87 - 54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt> - 56: 00 00 nop -../../../../../crt1/gcrt1.S:88 - 58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt> - 5a: 00 00 nop -../../../../../crt1/gcrt1.S:89 - 5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt> - 5e: 00 00 nop -../../../../../crt1/gcrt1.S:90 - 60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt> - 62: 00 00 nop -../../../../../crt1/gcrt1.S:91 - 64: 02 c5 rjmp .+2564 ; 0xa6a <__vector_25> - 66: 00 00 nop -../../../../../crt1/gcrt1.S:92 - 68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt> - 6a: 00 00 nop -../../../../../crt1/gcrt1.S:93 - 6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt> - 6e: 00 00 nop -../../../../../crt1/gcrt1.S:94 - 70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt> - 72: 00 00 nop -../../../../../crt1/gcrt1.S:95 - 74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt> - 76: 00 00 nop -../../../../../crt1/gcrt1.S:96 - 78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt> - 7a: 00 00 nop -../../../../../crt1/gcrt1.S:97 - 7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt> - 7e: 00 00 nop -../../../../../crt1/gcrt1.S:98 - 80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt> - 82: 00 00 nop -../../../../../crt1/gcrt1.S:99 - 84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt> - 86: 00 00 nop -../../../../../crt1/gcrt1.S:100 - 88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt> - 8a: 00 00 nop -../../../../../crt1/gcrt1.S:101 - 8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt> - 8e: 00 00 nop -../../../../../crt1/gcrt1.S:102 - 90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt> - 92: 00 00 nop -../../../../../crt1/gcrt1.S:103 - 94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt> - 96: 00 00 nop -../../../../../crt1/gcrt1.S:104 - 98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt> - 9a: 00 00 nop -../../../../../crt1/gcrt1.S:105 - 9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt> - ... - -000000a0 <__ctors_start>: -__trampolines_start(): - a0: 5d 05 cpc r21, r13 - -000000a2 <__ctors_end>: -__dtors_end(): -../../../../../crt1/gcrt1.S:230 - a2: 11 24 eor r1, r1 -../../../../../crt1/gcrt1.S:231 - a4: 1f be out 0x3f, r1 ; 63 -../../../../../crt1/gcrt1.S:232 - a6: cf ef ldi r28, 0xFF ; 255 -../../../../../crt1/gcrt1.S:234 - a8: cd bf out 0x3d, r28 ; 61 -../../../../../crt1/gcrt1.S:236 - aa: df e3 ldi r29, 0x3F ; 63 -../../../../../crt1/gcrt1.S:237 - ac: de bf out 0x3e, r29 ; 62 - -000000ae <__do_clear_bss>: -__do_clear_bss(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 - ae: 2c e3 ldi r18, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 - b0: a0 e0 ldi r26, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 - b2: bc e3 ldi r27, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 - b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start> - -000000b6 <.do_clear_bss_loop>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 - b6: 1d 92 st X+, r1 - -000000b8 <.do_clear_bss_start>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 - b8: a8 38 cpi r26, 0x88 ; 136 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 - ba: b2 07 cpc r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 - bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop> - -000000be <__do_global_ctors>: -__do_global_ctors(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 - be: 10 e0 ldi r17, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 - c0: c1 e5 ldi r28, 0x51 ; 81 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 - c2: d0 e0 ldi r29, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 - c4: 03 c0 rjmp .+6 ; 0xcc <__do_global_ctors+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 - c6: 21 97 sbiw r28, 0x01 ; 1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 - c8: fe 01 movw r30, r28 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 - ca: e7 d7 rcall .+4046 ; 0x109a <__tablejump2__> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 - cc: c0 35 cpi r28, 0x50 ; 80 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 - ce: d1 07 cpc r29, r17 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 - d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8> -../../../../../crt1/gcrt1.S:314 - d2: 04 d5 rcall .+2568 ; 0xadc
-../../../../../crt1/gcrt1.S:315 - d4: fd c7 rjmp .+4090 ; 0x10d0 <_exit> - -000000d6 <__bad_interrupt>: -__vector_38(): -../../../../../crt1/gcrt1.S:209 - d6: 94 cf rjmp .-216 ; 0x0 <__vectors> - -000000d8 : -_ZN8SPIClass8transferEh.constprop.31(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:304 - * The following NOP introduces a small delay that can prevent the wait - * loop from iterating when running at the maximum speed. This gives - * about 10% more speed, even if it seems counter-intuitive. At lower - * speeds it is unnoticed. - */ - asm volatile("nop"); - d8: 00 00 nop -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:306 - - SPI0.DATA = data; - da: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:307 - while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0); // wait for complete send - de: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 - e2: 87 ff sbrs r24, 7 - e4: fc cf rjmp .-8 ; 0xde -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:308 - return SPI0.DATA; // read data back - e6: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:309 -} - ea: 08 95 ret - -000000ec : -pinMode.part.1(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:29 - -#define ARDUINO_MAIN -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) - ec: cf 93 push r28 - ee: df 93 push r29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - f0: 90 e0 ldi r25, 0x00 ; 0 - f2: fc 01 movw r30, r24 - f4: e5 5a subi r30, 0xA5 ; 165 - f6: fe 4a sbci r31, 0xAE ; 174 - f8: 20 81 ld r18, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:33 - - if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP)) - fa: 2f 3f cpi r18, 0xFF ; 255 - fc: 61 f0 breq .+24 ; 0x116 <__EEPROM_REGION_LENGTH__+0x16> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:36 - return; - - PORT_t *port = digitalPinToPortStruct(pin); - fe: fc 01 movw r30, r24 - 100: ee 5c subi r30, 0xCE ; 206 - 102: fe 4a sbci r31, 0xAE ; 174 - 104: e0 81 ld r30, Z - 106: 30 e2 ldi r19, 0x20 ; 32 - 108: e3 9f mul r30, r19 - 10a: f0 01 movw r30, r0 - 10c: 11 24 eor r1, r1 - 10e: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:40 - if (port == NULL) - return; - - if (mode == OUTPUT) - 110: 61 30 cpi r22, 0x01 ; 1 - 112: 21 f4 brne .+8 ; 0x11c <__EEPROM_REGION_LENGTH__+0x1c> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:43 - { - /* Configure direction as output */ - port->DIRSET = bit_mask; - 114: 21 83 std Z+1, r18 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:75 - } - - /* Restore state */ - SREG = status; - } -} - 116: df 91 pop r29 - 118: cf 91 pop r28 - 11a: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:48 - port->DIRSET = bit_mask; - } - else - { /* mode == INPUT or INPUT_PULLUP */ - - uint8_t bit_pos = digitalPinToBitPosition(pin); - 11c: 87 5f subi r24, 0xF7 ; 247 - 11e: 9e 4a sbci r25, 0xAE ; 174 - 120: ec 01 movw r28, r24 - 122: a8 81 ld r26, Y -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:50 - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 124: af 3f cpi r26, 0xFF ; 255 - 126: 69 f0 breq .+26 ; 0x142 <__EEPROM_REGION_LENGTH__+0x42> - 128: cf 01 movw r24, r30 - 12a: 40 96 adiw r24, 0x10 ; 16 - 12c: a8 0f add r26, r24 - 12e: b9 2f mov r27, r25 - 130: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:53 - - /* Save state */ - uint8_t status = SREG; - 132: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:54 - cli(); - 134: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:57 - - /* Configure direction as input */ - port->DIRCLR = bit_mask; - 136: 22 83 std Z+2, r18 ; 0x02 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:63 - - /* Configure pull-up resistor */ - if (mode == INPUT_PULLUP) - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 138: 8c 91 ld r24, X - 13a: 88 60 ori r24, 0x08 ; 8 - 13c: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:73 - /* Disable pull-up */ - *pin_ctrl_reg &= ~(PORT_PULLUPEN_bm); - } - - /* Restore state */ - SREG = status; - 13e: 9f bf out 0x3f, r25 ; 63 - 140: ea cf rjmp .-44 ; 0x116 <__EEPROM_REGION_LENGTH__+0x16> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:50 - else - { /* mode == INPUT or INPUT_PULLUP */ - - uint8_t bit_pos = digitalPinToBitPosition(pin); - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 142: b0 e0 ldi r27, 0x00 ; 0 - 144: a0 e0 ldi r26, 0x00 ; 0 - 146: f5 cf rjmp .-22 ; 0x132 <__EEPROM_REGION_LENGTH__+0x32> - -00000148 : -_ZN8SPIClass5beginEv.constprop.8(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:131 - config(DEFAULT_SPI_SETTINGS); -} - -void SPIClass::init() -{ - if (initialized) - 148: 80 91 47 3c lds r24, 0x3C47 ; 0x803c47 - 14c: 81 11 cpse r24, r1 - 14e: 17 c0 rjmp .+46 ; 0x17e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133 - return; - interruptMode = SPI_IMODE_NONE; - 150: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134 - interruptSave = 0; - 154: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135 - interruptMask_lo = 0; - 158: 10 92 4a 3c sts 0x3C4A, r1 ; 0x803c4a - 15c: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b - 160: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c - 164: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136 - interruptMask_hi = 0; - 168: 10 92 4e 3c sts 0x3C4E, r1 ; 0x803c4e - 16c: 10 92 4f 3c sts 0x3C4F, r1 ; 0x803c4f - 170: 10 92 50 3c sts 0x3C50, r1 ; 0x803c50 - 174: 10 92 51 3c sts 0x3C51, r1 ; 0x803c51 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137 - initialized = true; - 178: 81 e0 ldi r24, 0x01 ; 1 - 17a: 80 93 47 3c sts 0x3C47, r24 ; 0x803c47 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:99 - -void SPIClass::begin() -{ - init(); - - PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3); - 17e: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 - 182: 8c 7f andi r24, 0xFC ; 252 - 184: 90 91 46 3c lds r25, 0x3C46 ; 0x803c46 - 188: 89 2b or r24, r25 - 18a: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:102 - - // MISO is set to input by the controller - if(_uc_mux == SPI_MUX) - 18e: 91 11 cpse r25, r1 - 190: 19 c0 rjmp .+50 ; 0x1c4 -pinMode(): - 192: 61 e0 ldi r22, 0x01 ; 1 - 194: 84 e0 ldi r24, 0x04 ; 4 - 196: aa df rcall .-172 ; 0xec - 198: 61 e0 ldi r22, 0x01 ; 1 - 19a: 86 e0 ldi r24, 0x06 ; 6 - 19c: a7 df rcall .-178 ; 0xec -_ZN8SPIClass5beginEv.constprop.8(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:123 - pinMode(PIN_SPI_SCK_PINSWAP_2, OUTPUT); - } - #endif - - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - 19e: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 - 1a2: 84 60 ori r24, 0x04 ; 4 - 1a4: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:124 - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - 1a8: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 - 1ac: 81 62 ori r24, 0x21 ; 33 - 1ae: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 - 1b2: 90 91 40 3c lds r25, 0x3C40 ; 0x803c40 - 1b6: 80 91 41 3c lds r24, 0x3C41 ; 0x803c41 -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 1ba: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 1be: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN8SPIClass5beginEv.constprop.8(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:127 - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - - config(DEFAULT_SPI_SETTINGS); -} - 1c2: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:108 - { - pinMode(PIN_SPI_MOSI, OUTPUT); - pinMode(PIN_SPI_SCK, OUTPUT); - } - #if defined(SPI_MUX_PINSWAP_1) - else if(_uc_mux == SPI_MUX_PINSWAP_1) - 1c4: 91 30 cpi r25, 0x01 ; 1 - 1c6: 31 f4 brne .+12 ; 0x1d4 -pinMode(): - 1c8: 61 e0 ldi r22, 0x01 ; 1 - 1ca: 8e e0 ldi r24, 0x0E ; 14 - 1cc: 8f df rcall .-226 ; 0xec - 1ce: 61 e0 ldi r22, 0x01 ; 1 - 1d0: 80 e1 ldi r24, 0x10 ; 16 - 1d2: e4 cf rjmp .-56 ; 0x19c -_ZN8SPIClass5beginEv.constprop.8(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:115 - pinMode(PIN_SPI_MOSI_PINSWAP_1, OUTPUT); - pinMode(PIN_SPI_SCK_PINSWAP_1, OUTPUT); - } - #endif - #if defined(SPI_MUX_PINSWAP_2) - else if(_uc_mux == SPI_MUX_PINSWAP_2) - 1d4: 92 30 cpi r25, 0x02 ; 2 - 1d6: 19 f7 brne .-58 ; 0x19e -pinMode(): - 1d8: 61 e0 ldi r22, 0x01 ; 1 - 1da: 8e e1 ldi r24, 0x1E ; 30 - 1dc: 87 df rcall .-242 ; 0xec - 1de: 61 e0 ldi r22, 0x01 ; 1 - 1e0: 80 e2 ldi r24, 0x20 ; 32 - 1e2: dc cf rjmp .-72 ; 0x19c - -000001e4 : -turnOffPWM.part.0(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:97 -static void turnOffPWM(uint8_t pin) -{ - /* Actually turn off compare channel, not the timer */ - - /* Get pin's timer */ - uint8_t timer = digitalPinToTimer(pin); - 1e4: 90 e0 ldi r25, 0x00 ; 0 - 1e6: fc 01 movw r30, r24 - 1e8: e0 52 subi r30, 0x20 ; 32 - 1ea: ff 4a sbci r31, 0xAF ; 175 - 1ec: e0 81 ld r30, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:98 - if (timer == NOT_ON_TIMER) - 1ee: ee 23 and r30, r30 - 1f0: 19 f1 breq .+70 ; 0x238 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:104 - return; - - uint8_t bit_pos; - TCB_t *timerB; - - switch (timer) - 1f2: e1 30 cpi r30, 0x01 ; 1 - 1f4: 21 f0 breq .+8 ; 0x1fe - 1f6: 00 f1 brcs .+64 ; 0x238 - 1f8: e6 30 cpi r30, 0x06 ; 6 - 1fa: a8 f0 brcs .+42 ; 0x226 - 1fc: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:109 - { - /* TCA0 */ - case TIMERA0: - /* Bit position will give output channel */ - bit_pos = digitalPinToBitPosition(pin); - 1fe: 87 5f subi r24, 0xF7 ; 247 - 200: 9e 4a sbci r25, 0xAE ; 174 - 202: fc 01 movw r30, r24 - 204: 20 81 ld r18, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:112 - - /* Disable corresponding channel */ - if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */ - 206: 23 30 cpi r18, 0x03 ; 3 - 208: 08 f0 brcs .+2 ; 0x20c - 20a: 2f 5f subi r18, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:113 - TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos)); - 20c: 30 91 01 0a lds r19, 0x0A01 ; 0x800a01 - 210: 81 e0 ldi r24, 0x01 ; 1 - 212: 90 e0 ldi r25, 0x00 ; 0 - 214: 01 c0 rjmp .+2 ; 0x218 - 216: 88 0f add r24, r24 - 218: 2a 95 dec r18 - 21a: ea f7 brpl .-6 ; 0x216 - 21c: 80 95 com r24 - 21e: 83 23 and r24, r19 - 220: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 - 224: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:123 - case TIMERB0: - case TIMERB1: - case TIMERB2: - case TIMERB3: - - timerB = (TCB_t *)&TCB0 + (timer - TIMERB0); - 226: 80 e1 ldi r24, 0x10 ; 16 - 228: e8 9f mul r30, r24 - 22a: f0 01 movw r30, r0 - 22c: 11 24 eor r1, r1 - 22e: e0 5a subi r30, 0xA0 ; 160 - 230: f5 4f sbci r31, 0xF5 ; 245 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:126 - - /* Disable TCB compare channel */ - timerB->CTRLB &= ~(TCB_CCMPEN_bm); - 232: 81 81 ldd r24, Z+1 ; 0x01 - 234: 8f 7e andi r24, 0xEF ; 239 - 236: 81 83 std Z+1, r24 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:132 - - break; - default: - break; - } -} - 238: 08 95 ret - -0000023a : -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:134 - -void digitalWrite(uint8_t pin, uint8_t val) - 23a: 0f 93 push r16 - 23c: 1f 93 push r17 - 23e: cf 93 push r28 - 240: df 93 push r29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 242: c8 2f mov r28, r24 - 244: d0 e0 ldi r29, 0x00 ; 0 - 246: fe 01 movw r30, r28 - 248: e5 5a subi r30, 0xA5 ; 165 - 24a: fe 4a sbci r31, 0xAE ; 174 - 24c: 00 81 ld r16, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:138 - if (bit_mask == NOT_A_PIN) - 24e: 0f 3f cpi r16, 0xFF ; 255 - 250: 99 f0 breq .+38 ; 0x278 - 252: 16 2f mov r17, r22 -turnOffPWM(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:97 -static void turnOffPWM(uint8_t pin) -{ - /* Actually turn off compare channel, not the timer */ - - /* Get pin's timer */ - uint8_t timer = digitalPinToTimer(pin); - 254: 89 32 cpi r24, 0x29 ; 41 - 256: 08 f4 brcc .+2 ; 0x25a - 258: c5 df rcall .-118 ; 0x1e4 -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:150 - turnOffPWM(pin); - - /* Assuming the direction is already output !! */ - - /* Get port */ - PORT_t *port = digitalPinToPortStruct(pin); - 25a: fe 01 movw r30, r28 - 25c: ee 5c subi r30, 0xCE ; 206 - 25e: fe 4a sbci r31, 0xAE ; 174 - 260: e0 81 ld r30, Z - 262: 80 e2 ldi r24, 0x20 ; 32 - 264: e8 9f mul r30, r24 - 266: f0 01 movw r30, r0 - 268: 11 24 eor r1, r1 - 26a: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:153 - - /* Output direction */ - if (port->DIR & bit_mask) - 26c: 80 81 ld r24, Z - 26e: 80 23 and r24, r16 - 270: 51 f0 breq .+20 ; 0x286 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:156 - { - /* Set output to value */ - if (val == LOW) - 272: 11 11 cpse r17, r1 - 274: 06 c0 rjmp .+12 ; 0x282 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:158 - { /* If LOW */ - port->OUTCLR = bit_mask; - 276: 06 83 std Z+6, r16 ; 0x06 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:203 - } - - /* Restore system status */ - SREG = status; - } -} - 278: df 91 pop r29 - 27a: cf 91 pop r28 - 27c: 1f 91 pop r17 - 27e: 0f 91 pop r16 - 280: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:167 - port->OUTTGL = bit_mask; - /* If HIGH OR > TOGGLE */ - } - else - { - port->OUTSET = bit_mask; - 282: 05 83 std Z+5, r16 ; 0x05 - 284: f9 cf rjmp .-14 ; 0x278 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:180 - pull up is enabled if this function is called. - Should we purposely implement this side effect? - */ - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - 286: c7 5f subi r28, 0xF7 ; 247 - 288: de 4a sbci r29, 0xAE ; 174 - 28a: 88 81 ld r24, Y -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 28c: 30 97 sbiw r30, 0x00 ; 0 - 28e: 71 f0 breq .+28 ; 0x2ac - 290: 8f 3f cpi r24, 0xFF ; 255 - 292: 61 f0 breq .+24 ; 0x2ac - 294: 70 96 adiw r30, 0x10 ; 16 - 296: e8 0f add r30, r24 - 298: f1 1d adc r31, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:186 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - 29a: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:187 - cli(); - 29c: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 - - if (val == LOW) - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 29e: 80 81 ld r24, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:189 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - cli(); - - if (val == LOW) - 2a0: 11 11 cpse r17, r1 - 2a2: 07 c0 rjmp .+14 ; 0x2b2 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 2a4: 87 7f andi r24, 0xF7 ; 247 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 2a6: 80 83 st Z, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:201 - } - - /* Restore system status */ - SREG = status; - 2a8: 9f bf out 0x3f, r25 ; 63 - 2aa: e6 cf rjmp .-52 ; 0x278 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 2ac: f0 e0 ldi r31, 0x00 ; 0 - 2ae: e0 e0 ldi r30, 0x00 ; 0 - 2b0: f4 cf rjmp .-24 ; 0x29a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 2b2: 88 60 ori r24, 0x08 ; 8 - 2b4: f8 cf rjmp .-16 ; 0x2a6 - -000002b6 : -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:29 -void MCP2515::startSPI() { - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); -} - -void MCP2515::endSPI() { - 2b6: 8f 92 push r8 - 2b8: 9f 92 push r9 - 2ba: af 92 push r10 - 2bc: bf 92 push r11 - 2be: cf 92 push r12 - 2c0: df 92 push r13 - 2c2: ef 92 push r14 - 2c4: ff 92 push r15 - 2c6: 0f 93 push r16 - 2c8: cf 93 push r28 - 2ca: df 93 push r29 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30 - digitalWrite(SPICS, HIGH); - 2cc: 80 91 81 3c lds r24, 0x3C81 ; 0x803c81 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 2d0: 89 32 cpi r24, 0x29 ; 41 - 2d2: 10 f4 brcc .+4 ; 0x2d8 - 2d4: 61 e0 ldi r22, 0x01 ; 1 - 2d6: b1 df rcall .-158 ; 0x23a -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:265 - config(settings); -} - -void SPIClass::endTransaction(void) -{ - if (interruptMode != SPI_IMODE_NONE) - 2d8: 80 91 48 3c lds r24, 0x3C48 ; 0x803c48 - 2dc: 88 23 and r24, r24 - 2de: 19 f0 breq .+6 ; 0x2e6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 2e0: 81 ff sbrs r24, 1 - 2e2: 0d c0 rjmp .+26 ; 0x2fe -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269 - { - interrupts(); - 2e4: 78 94 sei -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32 - SPI.endTransaction(); -} - 2e6: df 91 pop r29 - 2e8: cf 91 pop r28 - 2ea: 0f 91 pop r16 - 2ec: ff 90 pop r15 - 2ee: ef 90 pop r14 - 2f0: df 90 pop r13 - 2f2: cf 90 pop r12 - 2f4: bf 90 pop r11 - 2f6: af 90 pop r10 - 2f8: 9f 90 pop r9 - 2fa: 8f 90 pop r8 - 2fc: 08 95 ret -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:271 - } - else if (interruptMode & SPI_IMODE_EXTINT) - 2fe: 80 ff sbrs r24, 0 - 300: f2 cf rjmp .-28 ; 0x2e6 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:225 - shift++; - } -} - -void SPIClass::reattachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 302: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a - 306: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b - 30a: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c - 30e: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d - 312: c1 2c mov r12, r1 - 314: d1 2c mov r13, r1 - 316: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:226 - uint8_t shift = 0; - 318: e0 e0 ldi r30, 0x00 ; 0 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:227 - while (temp != 0) { - 31a: 94 01 movw r18, r8 - 31c: a5 01 movw r20, r10 - 31e: b6 01 movw r22, r12 - 320: c7 01 movw r24, r14 - 322: a0 e0 ldi r26, 0x00 ; 0 - 324: ae d6 rcall .+3420 ; 0x1082 <__cmpdi2_s8> - 326: 81 f1 breq .+96 ; 0x388 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:228 - if (temp & 1) { - 328: 21 70 andi r18, 0x01 ; 1 - 32a: 30 e0 ldi r19, 0x00 ; 0 - 32c: 40 e0 ldi r20, 0x00 ; 0 - 32e: 50 e0 ldi r21, 0x00 ; 0 - 330: 60 e0 ldi r22, 0x00 ; 0 - 332: 70 e0 ldi r23, 0x00 ; 0 - 334: 80 e0 ldi r24, 0x00 ; 0 - 336: 90 e0 ldi r25, 0x00 ; 0 - 338: a4 d6 rcall .+3400 ; 0x1082 <__cmpdi2_s8> - 33a: d1 f0 breq .+52 ; 0x370 -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:229 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 33c: b0 e0 ldi r27, 0x00 ; 0 - 33e: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 340: e0 33 cpi r30, 0x30 ; 48 - 342: 70 f4 brcc .+28 ; 0x360 - 344: ae 2f mov r26, r30 - 346: a6 95 lsr r26 - 348: a6 95 lsr r26 - 34a: a6 95 lsr r26 - 34c: 80 e2 ldi r24, 0x20 ; 32 - 34e: a8 9f mul r26, r24 - 350: d0 01 movw r26, r0 - 352: 11 24 eor r1, r1 - 354: a0 5f subi r26, 0xF0 ; 240 - 356: bb 4f sbci r27, 0xFB ; 251 - 358: 8e 2f mov r24, r30 - 35a: 87 70 andi r24, 0x07 ; 7 - 35c: a8 0f add r26, r24 - 35e: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:230 - *pin_ctrl_reg |= irqMap[shift]; - 360: ce 2f mov r28, r30 - 362: d0 e0 ldi r29, 0x00 ; 0 - 364: ce 5b subi r28, 0xBE ; 190 - 366: d3 4c sbci r29, 0xC3 ; 195 - 368: 88 89 ldd r24, Y+16 ; 0x10 - 36a: 9c 91 ld r25, X - 36c: 89 2b or r24, r25 - 36e: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:232 - } - temp = temp >> 1; - 370: 94 01 movw r18, r8 - 372: a5 01 movw r20, r10 - 374: b6 01 movw r22, r12 - 376: c7 01 movw r24, r14 - 378: 01 e0 ldi r16, 0x01 ; 1 - 37a: 68 d6 rcall .+3280 ; 0x104c <__lshrdi3> - 37c: 49 01 movw r8, r18 - 37e: 5a 01 movw r10, r20 - 380: 6b 01 movw r12, r22 - 382: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:233 - shift++; - 384: ef 5f subi r30, 0xFF ; 255 - 386: c9 cf rjmp .-110 ; 0x31a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:235 - } - temp = interruptMask_hi; - 388: 80 90 4e 3c lds r8, 0x3C4E ; 0x803c4e - 38c: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f - 390: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 - 394: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 - 398: c1 2c mov r12, r1 - 39a: d1 2c mov r13, r1 - 39c: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:236 - shift = 32; - 39e: e0 e2 ldi r30, 0x20 ; 32 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:237 - while (temp != 0) { - 3a0: 94 01 movw r18, r8 - 3a2: a5 01 movw r20, r10 - 3a4: b6 01 movw r22, r12 - 3a6: c7 01 movw r24, r14 - 3a8: a0 e0 ldi r26, 0x00 ; 0 - 3aa: 6b d6 rcall .+3286 ; 0x1082 <__cmpdi2_s8> - 3ac: 09 f4 brne .+2 ; 0x3b0 - 3ae: 9b cf rjmp .-202 ; 0x2e6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:238 - if (temp & 1) { - 3b0: 21 70 andi r18, 0x01 ; 1 - 3b2: 30 e0 ldi r19, 0x00 ; 0 - 3b4: 40 e0 ldi r20, 0x00 ; 0 - 3b6: 50 e0 ldi r21, 0x00 ; 0 - 3b8: 60 e0 ldi r22, 0x00 ; 0 - 3ba: 70 e0 ldi r23, 0x00 ; 0 - 3bc: 80 e0 ldi r24, 0x00 ; 0 - 3be: 90 e0 ldi r25, 0x00 ; 0 - 3c0: 60 d6 rcall .+3264 ; 0x1082 <__cmpdi2_s8> - 3c2: d1 f0 breq .+52 ; 0x3f8 -_ZN7MCP25156endSPIEv.constprop.32(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:239 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 3c4: b0 e0 ldi r27, 0x00 ; 0 - 3c6: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 3c8: e0 33 cpi r30, 0x30 ; 48 - 3ca: 70 f4 brcc .+28 ; 0x3e8 - 3cc: ae 2f mov r26, r30 - 3ce: a6 95 lsr r26 - 3d0: a6 95 lsr r26 - 3d2: a6 95 lsr r26 - 3d4: 80 e2 ldi r24, 0x20 ; 32 - 3d6: a8 9f mul r26, r24 - 3d8: d0 01 movw r26, r0 - 3da: 11 24 eor r1, r1 - 3dc: a0 5f subi r26, 0xF0 ; 240 - 3de: bb 4f sbci r27, 0xFB ; 251 - 3e0: 8e 2f mov r24, r30 - 3e2: 87 70 andi r24, 0x07 ; 7 - 3e4: a8 0f add r26, r24 - 3e6: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:240 - *pin_ctrl_reg |= irqMap[shift]; - 3e8: ce 2f mov r28, r30 - 3ea: d0 e0 ldi r29, 0x00 ; 0 - 3ec: ce 5b subi r28, 0xBE ; 190 - 3ee: d3 4c sbci r29, 0xC3 ; 195 - 3f0: 88 89 ldd r24, Y+16 ; 0x10 - 3f2: 9c 91 ld r25, X - 3f4: 89 2b or r24, r25 - 3f6: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:242 - } - temp = temp >> 1; - 3f8: 94 01 movw r18, r8 - 3fa: a5 01 movw r20, r10 - 3fc: b6 01 movw r22, r12 - 3fe: c7 01 movw r24, r14 - 400: 01 e0 ldi r16, 0x01 ; 1 - 402: 24 d6 rcall .+3144 ; 0x104c <__lshrdi3> - 404: 49 01 movw r8, r18 - 406: 5a 01 movw r10, r20 - 408: 6b 01 movw r12, r22 - 40a: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:243 - shift++; - 40c: ef 5f subi r30, 0xFF ; 255 - 40e: c8 cf rjmp .-112 ; 0x3a0 - -00000410 : -micros(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:103 -{ - uint32_t m; - uint16_t t; - - /* Save current state and disable interrupts */ - uint8_t status = SREG; - 410: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:104 - cli(); - 412: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:107 - - /* Get current number of millis (i.e. overflows) and timer count */ - m = timer_millis; - 414: 20 91 2b 3c lds r18, 0x3C2B ; 0x803c2b - 418: 30 91 2c 3c lds r19, 0x3C2C ; 0x803c2c - 41c: 40 91 2d 3c lds r20, 0x3C2D ; 0x803c2d - 420: 50 91 2e 3c lds r21, 0x3C2E ; 0x803c2e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108 - t = _timer->CNT; - 424: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 428: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:112 - - /* If the timer overflow flag is raised, we just missed it, - increment to account for it, & read new ticks */ - if (_timer->INTFLAGS & TCB_CAPT_bm) - 42c: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 - 430: 90 ff sbrs r25, 0 - 432: 08 c0 rjmp .+16 ; 0x444 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114 - { - m++; - 434: 2f 5f subi r18, 0xFF ; 255 - 436: 3f 4f sbci r19, 0xFF ; 255 - 438: 4f 4f sbci r20, 0xFF ; 255 - 43a: 5f 4f sbci r21, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:115 - t = _timer->CNT; - 43c: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 440: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:119 - } - - // Restore SREG - SREG = status; - 444: 8f bf out 0x3f, r24 ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:130 - return m * 1000 + (t >> 4); -#elif (F_CPU == 10000000L) - t = t >> 3; - return m * 1000 + (t - (t >> 2) + (t >> 4) - (t >> 6)); -#elif (F_CPU == 8000000L) - return m * 1000 + (t >> 3); - 446: a8 ee ldi r26, 0xE8 ; 232 - 448: b3 e0 ldi r27, 0x03 ; 3 - 44a: f4 d5 rcall .+3048 ; 0x1034 <__muluhisi3> - 44c: 23 e0 ldi r18, 0x03 ; 3 - 44e: f6 95 lsr r31 - 450: e7 95 ror r30 - 452: 2a 95 dec r18 - 454: e1 f7 brne .-8 ; 0x44e - 456: 6e 0f add r22, r30 - 458: 7f 1f adc r23, r31 - 45a: 81 1d adc r24, r1 - 45c: 91 1d adc r25, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:143 -#elif (F_CPU == 1000000L) - return m * 1000 + t; -#else - return 0; -#endif -} - 45e: 08 95 ret - -00000460 : -delay(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:146 - -void delay(unsigned long ms) -{ - 460: 8f 92 push r8 - 462: 9f 92 push r9 - 464: af 92 push r10 - 466: bf 92 push r11 - 468: cf 92 push r12 - 46a: df 92 push r13 - 46c: ef 92 push r14 - 46e: ff 92 push r15 - 470: 4b 01 movw r8, r22 - 472: 5c 01 movw r10, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147 - uint32_t start_time = micros(), delay_time = 1000 * ms; - 474: cd df rcall .-102 ; 0x410 - 476: 6b 01 movw r12, r22 - 478: 7c 01 movw r14, r24 - 47a: a8 ee ldi r26, 0xE8 ; 232 - 47c: b3 e0 ldi r27, 0x03 ; 3 - 47e: a5 01 movw r20, r10 - 480: 94 01 movw r18, r8 - 482: d8 d5 rcall .+2992 ; 0x1034 <__muluhisi3> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:150 - - /* Calculate future time to return */ - uint32_t return_time = start_time + delay_time; - 484: c6 0e add r12, r22 - 486: d7 1e adc r13, r23 - 488: e8 1e adc r14, r24 - 48a: f9 1e adc r15, r25 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:153 - - /* If return time overflows */ - if (return_time < delay_time) - 48c: c6 16 cp r12, r22 - 48e: d7 06 cpc r13, r23 - 490: e8 06 cpc r14, r24 - 492: f9 06 cpc r15, r25 - 494: 10 f4 brcc .+4 ; 0x49a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:156 - { - /* Wait until micros overflows */ - while (micros() > return_time) - 496: bc df rcall .-136 ; 0x410 - 498: f9 cf rjmp .-14 ; 0x48c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:161 - ; - } - - /* Wait until return time */ - while (micros() < return_time) - 49a: ba df rcall .-140 ; 0x410 - 49c: 6c 15 cp r22, r12 - 49e: 7d 05 cpc r23, r13 - 4a0: 8e 05 cpc r24, r14 - 4a2: 9f 05 cpc r25, r15 - 4a4: d0 f3 brcs .-12 ; 0x49a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163 - ; -} - 4a6: ff 90 pop r15 - 4a8: ef 90 pop r14 - 4aa: df 90 pop r13 - 4ac: cf 90 pop r12 - 4ae: bf 90 pop r11 - 4b0: af 90 pop r10 - 4b2: 9f 90 pop r9 - 4b4: 8f 90 pop r8 - 4b6: 08 95 ret - -000004b8 : -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:161 - _frame.data[3] = state; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); -} - -bool ReadPin(PinState * state) -{ - 4b8: 0f 93 push r16 - 4ba: 1f 93 push r17 - 4bc: cf 93 push r28 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:162 - if (state->pin_id == PIN_PD2) - 4be: fc 01 movw r30, r24 - 4c0: 80 81 ld r24, Z - 4c2: 91 81 ldd r25, Z+1 ; 0x01 - 4c4: 88 31 cpi r24, 0x18 ; 24 - 4c6: 91 05 cpc r25, r1 - 4c8: 41 f4 brne .+16 ; 0x4da -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - - // Old style port logic is a small integer 0 for PORTA, 1 for PORTB etc. - vport = (VPORT_t *)(port * 4); - - // Read pin value from VPORTx.IN register - return !!(vport->IN & mask); - 4ca: 8e b1 in r24, 0x0e ; 14 - 4cc: 82 fb bst r24, 2 - 4ce: 88 27 eor r24, r24 - 4d0: 80 f9 bld r24, 0 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:180 - return digitalReadFast(PIN_PD4); - else if (state->pin_id == PIN_PD3) - return digitalReadFast(PIN_PD3); - else - return digitalRead(state->pin_id); -} - 4d2: cf 91 pop r28 - 4d4: 1f 91 pop r17 - 4d6: 0f 91 pop r16 - 4d8: 08 95 ret -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:164 - -bool ReadPin(PinState * state) -{ - if (state->pin_id == PIN_PD2) - return digitalReadFast(PIN_PD2); - else if (state->pin_id == PIN_PC7) - 4da: 85 31 cpi r24, 0x15 ; 21 - 4dc: 91 05 cpc r25, r1 - 4de: 29 f4 brne .+10 ; 0x4ea -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 4e0: 8a b1 in r24, 0x0a ; 10 - 4e2: 88 1f adc r24, r24 - 4e4: 88 27 eor r24, r24 - 4e6: 88 1f adc r24, r24 - 4e8: f4 cf rjmp .-24 ; 0x4d2 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:166 - return digitalReadFast(PIN_PC7); - else if (state->pin_id == PIN_PD1) - 4ea: 87 31 cpi r24, 0x17 ; 23 - 4ec: 91 05 cpc r25, r1 - 4ee: 21 f4 brne .+8 ; 0x4f8 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 4f0: 8e b1 in r24, 0x0e ; 14 - 4f2: 86 95 lsr r24 - 4f4: 81 70 andi r24, 0x01 ; 1 - 4f6: ed cf rjmp .-38 ; 0x4d2 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:168 - return digitalReadFast(PIN_PD1); - else if (state->pin_id == PIN_PD0) - 4f8: 86 31 cpi r24, 0x16 ; 22 - 4fa: 91 05 cpc r25, r1 - 4fc: 19 f4 brne .+6 ; 0x504 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 4fe: 8e b1 in r24, 0x0e ; 14 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:179 - else if (state->pin_id == PIN_PD4) - return digitalReadFast(PIN_PD4); - else if (state->pin_id == PIN_PD3) - return digitalReadFast(PIN_PD3); - else - return digitalRead(state->pin_id); - 500: 81 70 andi r24, 0x01 ; 1 - 502: e7 cf rjmp .-50 ; 0x4d2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:170 - return digitalReadFast(PIN_PC7); - else if (state->pin_id == PIN_PD1) - return digitalReadFast(PIN_PD1); - else if (state->pin_id == PIN_PD0) - return digitalReadFast(PIN_PD0); - else if (state->pin_id == PIN_PD6) - 504: 8c 31 cpi r24, 0x1C ; 28 - 506: 91 05 cpc r25, r1 - 508: 29 f4 brne .+10 ; 0x514 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 50a: 8e b1 in r24, 0x0e ; 14 - 50c: 86 fb bst r24, 6 - 50e: 88 27 eor r24, r24 - 510: 80 f9 bld r24, 0 - 512: df cf rjmp .-66 ; 0x4d2 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:172 - return digitalReadFast(PIN_PD6); - else if (state->pin_id == PIN_PD5) - 514: 8b 31 cpi r24, 0x1B ; 27 - 516: 91 05 cpc r25, r1 - 518: 29 f4 brne .+10 ; 0x524 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 51a: 8e b1 in r24, 0x0e ; 14 - 51c: 85 fb bst r24, 5 - 51e: 88 27 eor r24, r24 - 520: 80 f9 bld r24, 0 - 522: d7 cf rjmp .-82 ; 0x4d2 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:174 - return digitalReadFast(PIN_PD5); - else if (state->pin_id == PIN_PD4) - 524: 8a 31 cpi r24, 0x1A ; 26 - 526: 91 05 cpc r25, r1 - 528: 21 f4 brne .+8 ; 0x532 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 52a: 8e b1 in r24, 0x0e ; 14 - 52c: 82 95 swap r24 - 52e: 81 70 andi r24, 0x01 ; 1 - 530: d0 cf rjmp .-96 ; 0x4d2 -_Z7ReadPinP8PinState(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:176 - return digitalReadFast(PIN_PD4); - else if (state->pin_id == PIN_PD3) - 532: 89 31 cpi r24, 0x19 ; 25 - 534: 91 05 cpc r25, r1 - 536: 29 f4 brne .+10 ; 0x542 -digitalReadFast(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:265 - 538: 8e b1 in r24, 0x0e ; 14 - 53a: 83 fb bst r24, 3 - 53c: 88 27 eor r24, r24 - 53e: 80 f9 bld r24, 0 - 540: c8 cf rjmp .-112 ; 0x4d2 -digitalRead(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:230 -} - -uint8_t digitalRead(uint8_t pin) -{ - /* Get bit mask and check valid pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 542: 89 32 cpi r24, 0x29 ; 41 - 544: b0 f4 brcc .+44 ; 0x572 - 546: 8c 01 movw r16, r24 - 548: 11 27 eor r17, r17 - 54a: f8 01 movw r30, r16 - 54c: e5 5a subi r30, 0xA5 ; 165 - 54e: fe 4a sbci r31, 0xAE ; 174 - 550: c0 81 ld r28, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:231 - if (bit_mask == NOT_A_PIN) - 552: cf 3f cpi r28, 0xFF ; 255 - 554: 71 f0 breq .+28 ; 0x572 -turnOffPWM(): - 556: 46 de rcall .-884 ; 0x1e4 -digitalRead(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:239 - // If the pin that support PWM output, we need to turn it off - // before getting a digital reading. - turnOffPWM(pin); - - /* Get port and check valid port */ - PORT_t *port = digitalPinToPortStruct(pin); - 558: f8 01 movw r30, r16 - 55a: ee 5c subi r30, 0xCE ; 206 - 55c: fe 4a sbci r31, 0xAE ; 174 - 55e: e0 81 ld r30, Z - 560: 80 e2 ldi r24, 0x20 ; 32 - 562: e8 9f mul r30, r24 - 564: f0 01 movw r30, r0 - 566: 11 24 eor r1, r1 - 568: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:242 - - /* Read pin value from PORTx.IN register */ - if (port->IN & bit_mask) - 56a: 80 85 ldd r24, Z+8 ; 0x08 - 56c: c8 23 and r28, r24 - 56e: 81 e0 ldi r24, 0x01 ; 1 - 570: 39 f6 brne .-114 ; 0x500 -_Z7ReadPinP8PinState(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:232 -uint8_t digitalRead(uint8_t pin) -{ - /* Get bit mask and check valid pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - if (bit_mask == NOT_A_PIN) - return LOW; - 572: 80 e0 ldi r24, 0x00 ; 0 - 574: c5 cf rjmp .-118 ; 0x500 - -00000576 : -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 - SPICS = _CS; - pinMode(SPICS, OUTPUT); - endSPI(); -} - -void MCP2515::startSPI() { - 576: 8f 92 push r8 - 578: 9f 92 push r9 - 57a: af 92 push r10 - 57c: bf 92 push r11 - 57e: cf 92 push r12 - 580: df 92 push r13 - 582: ef 92 push r14 - 584: ff 92 push r15 - 586: 0f 93 push r16 - 588: cf 93 push r28 - 58a: df 93 push r29 -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:249 - } -} - -void SPIClass::beginTransaction(SPISettings settings) -{ - if (interruptMode != SPI_IMODE_NONE) - 58c: 80 91 48 3c lds r24, 0x3C48 ; 0x803c48 - 590: 88 23 and r24, r24 - 592: 19 f0 breq .+6 ; 0x59a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:251 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 594: 81 ff sbrs r24, 1 - 596: 19 c0 rjmp .+50 ; 0x5ca -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253 - { - noInterrupts(); - 598: f8 94 cli -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 59a: 81 e3 ldi r24, 0x31 ; 49 - 59c: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 5a0: 84 e0 ldi r24, 0x04 ; 4 - 5a2: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26 - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); - 5a6: 80 91 81 3c lds r24, 0x3C81 ; 0x803c81 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 5aa: 89 32 cpi r24, 0x29 ; 41 - 5ac: 08 f0 brcs .+2 ; 0x5b0 - 5ae: 98 c0 rjmp .+304 ; 0x6e0 - 5b0: 60 e0 ldi r22, 0x00 ; 0 -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 -} - 5b2: df 91 pop r29 - 5b4: cf 91 pop r28 - 5b6: 0f 91 pop r16 - 5b8: ff 90 pop r15 - 5ba: ef 90 pop r14 - 5bc: df 90 pop r13 - 5be: cf 90 pop r12 - 5c0: bf 90 pop r11 - 5c2: af 90 pop r10 - 5c4: 9f 90 pop r9 - 5c6: 8f 90 pop r8 -digitalWrite(): - 5c8: 38 ce rjmp .-912 ; 0x23a -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:255 - { - if (interruptMode & SPI_IMODE_GLOBAL) - { - noInterrupts(); - } - else if (interruptMode & SPI_IMODE_EXTINT) - 5ca: 80 ff sbrs r24, 0 - 5cc: e6 cf rjmp .-52 ; 0x59a -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:200 - #endif - } -} - -void SPIClass::detachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 5ce: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a - 5d2: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b - 5d6: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c - 5da: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d - 5de: c1 2c mov r12, r1 - 5e0: d1 2c mov r13, r1 - 5e2: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:201 - uint8_t shift = 0; - 5e4: e0 e0 ldi r30, 0x00 ; 0 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:202 - while (temp != 0) { - 5e6: 94 01 movw r18, r8 - 5e8: a5 01 movw r20, r10 - 5ea: b6 01 movw r22, r12 - 5ec: c7 01 movw r24, r14 - 5ee: a0 e0 ldi r26, 0x00 ; 0 - 5f0: 48 d5 rcall .+2704 ; 0x1082 <__cmpdi2_s8> - 5f2: 89 f1 breq .+98 ; 0x656 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:203 - if (temp & 1) { - 5f4: 21 70 andi r18, 0x01 ; 1 - 5f6: 30 e0 ldi r19, 0x00 ; 0 - 5f8: 40 e0 ldi r20, 0x00 ; 0 - 5fa: 50 e0 ldi r21, 0x00 ; 0 - 5fc: 60 e0 ldi r22, 0x00 ; 0 - 5fe: 70 e0 ldi r23, 0x00 ; 0 - 600: 80 e0 ldi r24, 0x00 ; 0 - 602: 90 e0 ldi r25, 0x00 ; 0 - 604: 3e d5 rcall .+2684 ; 0x1082 <__cmpdi2_s8> - 606: d9 f0 breq .+54 ; 0x63e -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:204 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 608: b0 e0 ldi r27, 0x00 ; 0 - 60a: a0 e0 ldi r26, 0x00 ; 0 -detachMaskedInterrupts(): - 60c: e0 33 cpi r30, 0x30 ; 48 - 60e: 70 f4 brcc .+28 ; 0x62c - 610: ae 2f mov r26, r30 - 612: a6 95 lsr r26 - 614: a6 95 lsr r26 - 616: a6 95 lsr r26 - 618: 80 e2 ldi r24, 0x20 ; 32 - 61a: a8 9f mul r26, r24 - 61c: d0 01 movw r26, r0 - 61e: 11 24 eor r1, r1 - 620: a0 5f subi r26, 0xF0 ; 240 - 622: bb 4f sbci r27, 0xFB ; 251 - 624: 8e 2f mov r24, r30 - 626: 87 70 andi r24, 0x07 ; 7 - 628: a8 0f add r26, r24 - 62a: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:205 - irqMap[shift] = *pin_ctrl_reg; - 62c: ce 2f mov r28, r30 - 62e: d0 e0 ldi r29, 0x00 ; 0 - 630: 8c 91 ld r24, X - 632: ce 5b subi r28, 0xBE ; 190 - 634: d3 4c sbci r29, 0xC3 ; 195 - 636: 88 8b std Y+16, r24 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:206 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 638: 8c 91 ld r24, X - 63a: 88 7f andi r24, 0xF8 ; 248 - 63c: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:208 - } - temp = temp >> 1; - 63e: 94 01 movw r18, r8 - 640: a5 01 movw r20, r10 - 642: b6 01 movw r22, r12 - 644: c7 01 movw r24, r14 - 646: 01 e0 ldi r16, 0x01 ; 1 - 648: 01 d5 rcall .+2562 ; 0x104c <__lshrdi3> - 64a: 49 01 movw r8, r18 - 64c: 5a 01 movw r10, r20 - 64e: 6b 01 movw r12, r22 - 650: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:209 - shift++; - 652: ef 5f subi r30, 0xFF ; 255 - 654: c8 cf rjmp .-112 ; 0x5e6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:211 - } - temp = interruptMask_hi; - 656: 80 90 4e 3c lds r8, 0x3C4E ; 0x803c4e - 65a: 90 90 4f 3c lds r9, 0x3C4F ; 0x803c4f - 65e: a0 90 50 3c lds r10, 0x3C50 ; 0x803c50 - 662: b0 90 51 3c lds r11, 0x3C51 ; 0x803c51 - 666: c1 2c mov r12, r1 - 668: d1 2c mov r13, r1 - 66a: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:212 - shift = 32; - 66c: e0 e2 ldi r30, 0x20 ; 32 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:213 - while (temp != 0) { - 66e: 94 01 movw r18, r8 - 670: a5 01 movw r20, r10 - 672: b6 01 movw r22, r12 - 674: c7 01 movw r24, r14 - 676: a0 e0 ldi r26, 0x00 ; 0 - 678: 04 d5 rcall .+2568 ; 0x1082 <__cmpdi2_s8> - 67a: 09 f4 brne .+2 ; 0x67e - 67c: 8e cf rjmp .-228 ; 0x59a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:214 - if (temp & 1) { - 67e: 21 70 andi r18, 0x01 ; 1 - 680: 30 e0 ldi r19, 0x00 ; 0 - 682: 40 e0 ldi r20, 0x00 ; 0 - 684: 50 e0 ldi r21, 0x00 ; 0 - 686: 60 e0 ldi r22, 0x00 ; 0 - 688: 70 e0 ldi r23, 0x00 ; 0 - 68a: 80 e0 ldi r24, 0x00 ; 0 - 68c: 90 e0 ldi r25, 0x00 ; 0 - 68e: f9 d4 rcall .+2546 ; 0x1082 <__cmpdi2_s8> - 690: d9 f0 breq .+54 ; 0x6c8 -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:215 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 692: b0 e0 ldi r27, 0x00 ; 0 - 694: a0 e0 ldi r26, 0x00 ; 0 -detachMaskedInterrupts(): - 696: e0 33 cpi r30, 0x30 ; 48 - 698: 70 f4 brcc .+28 ; 0x6b6 - 69a: ae 2f mov r26, r30 - 69c: a6 95 lsr r26 - 69e: a6 95 lsr r26 - 6a0: a6 95 lsr r26 - 6a2: 80 e2 ldi r24, 0x20 ; 32 - 6a4: a8 9f mul r26, r24 - 6a6: d0 01 movw r26, r0 - 6a8: 11 24 eor r1, r1 - 6aa: a0 5f subi r26, 0xF0 ; 240 - 6ac: bb 4f sbci r27, 0xFB ; 251 - 6ae: 8e 2f mov r24, r30 - 6b0: 87 70 andi r24, 0x07 ; 7 - 6b2: a8 0f add r26, r24 - 6b4: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:216 - irqMap[shift] = *pin_ctrl_reg; - 6b6: ce 2f mov r28, r30 - 6b8: d0 e0 ldi r29, 0x00 ; 0 - 6ba: 8c 91 ld r24, X - 6bc: ce 5b subi r28, 0xBE ; 190 - 6be: d3 4c sbci r29, 0xC3 ; 195 - 6c0: 88 8b std Y+16, r24 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:217 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 6c2: 8c 91 ld r24, X - 6c4: 88 7f andi r24, 0xF8 ; 248 - 6c6: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:219 - } - temp = temp >> 1; - 6c8: 94 01 movw r18, r8 - 6ca: a5 01 movw r20, r10 - 6cc: b6 01 movw r22, r12 - 6ce: c7 01 movw r24, r14 - 6d0: 01 e0 ldi r16, 0x01 ; 1 - 6d2: bc d4 rcall .+2424 ; 0x104c <__lshrdi3> - 6d4: 49 01 movw r8, r18 - 6d6: 5a 01 movw r10, r20 - 6d8: 6b 01 movw r12, r22 - 6da: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:220 - shift++; - 6dc: ef 5f subi r30, 0xFF ; 255 - 6de: c7 cf rjmp .-114 ; 0x66e -_ZN7MCP25158startSPIEv.constprop.26(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 - 6e0: df 91 pop r29 - 6e2: cf 91 pop r28 - 6e4: 0f 91 pop r16 - 6e6: ff 90 pop r15 - 6e8: ef 90 pop r14 - 6ea: df 90 pop r13 - 6ec: cf 90 pop r12 - 6ee: bf 90 pop r11 - 6f0: af 90 pop r10 - 6f2: 9f 90 pop r9 - 6f4: 8f 90 pop r8 - 6f6: 08 95 ret - -000006f8 : -_ZN7MCP251512setRegistersENS_8REGISTEREPKhh.constprop.25(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:117 - SPI.transfer(reg); - SPI.transfer(value); - endSPI(); -} - -void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n) - 6f8: ff 92 push r15 - 6fa: 0f 93 push r16 - 6fc: 1f 93 push r17 - 6fe: cf 93 push r28 - 700: df 93 push r29 - 702: c8 2f mov r28, r24 - 704: f6 2e mov r15, r22 - 706: 17 2f mov r17, r23 - 708: 04 2f mov r16, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119 -{ - startSPI(); - 70a: 35 df rcall .-406 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120 - SPI.transfer(INSTRUCTION_WRITE); - 70c: 82 e0 ldi r24, 0x02 ; 2 - 70e: e4 dc rcall .-1592 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121 - SPI.transfer(reg); - 710: 8c 2f mov r24, r28 - 712: e2 dc rcall .-1596 ; 0xd8 - 714: cf 2d mov r28, r15 - 716: d1 2f mov r29, r17 - 718: 0c 0f add r16, r28 - 71a: 1d 2f mov r17, r29 - 71c: 11 1d adc r17, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122 - for (uint8_t i=0; i -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123 - SPI.transfer(values[i]); - 724: 89 91 ld r24, Y+ - 726: d8 dc rcall .-1616 ; 0xd8 - 728: fa cf rjmp .-12 ; 0x71e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126 - } - endSPI(); -} - 72a: df 91 pop r29 - 72c: cf 91 pop r28 - 72e: 1f 91 pop r17 - 730: 0f 91 pop r16 - 732: ff 90 pop r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - for (uint8_t i=0; i - -00000736 : -_ZN7MCP251514modifyRegisterENS_8REGISTEREhh.constprop.24(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:128 -} - -void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data) - 736: 1f 93 push r17 - 738: cf 93 push r28 - 73a: df 93 push r29 - 73c: 18 2f mov r17, r24 - 73e: d6 2f mov r29, r22 - 740: c4 2f mov r28, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130 -{ - startSPI(); - 742: 19 df rcall .-462 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131 - SPI.transfer(INSTRUCTION_BITMOD); - 744: 85 e0 ldi r24, 0x05 ; 5 - 746: c8 dc rcall .-1648 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132 - SPI.transfer(reg); - 748: 81 2f mov r24, r17 - 74a: c6 dc rcall .-1652 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133 - SPI.transfer(mask); - 74c: 8d 2f mov r24, r29 - 74e: c4 dc rcall .-1656 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134 - SPI.transfer(data); - 750: 8c 2f mov r24, r28 - 752: c2 dc rcall .-1660 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136 - endSPI(); -} - 754: df 91 pop r29 - 756: cf 91 pop r28 - 758: 1f 91 pop r17 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 - startSPI(); - SPI.transfer(INSTRUCTION_BITMOD); - SPI.transfer(reg); - SPI.transfer(mask); - SPI.transfer(data); - endSPI(); - 75a: ad cd rjmp .-1190 ; 0x2b6 - -0000075c : -_ZN7MCP251512readRegisterENS_8REGISTERE.constprop.23(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:85 - } - - return ERROR_OK; -} - -uint8_t MCP2515::readRegister(const REGISTER reg) - 75c: cf 93 push r28 - 75e: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87 -{ - startSPI(); - 760: 0a df rcall .-492 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88 - SPI.transfer(INSTRUCTION_READ); - 762: 83 e0 ldi r24, 0x03 ; 3 - 764: b9 dc rcall .-1678 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89 - SPI.transfer(reg); - 766: 8c 2f mov r24, r28 - 768: b7 dc rcall .-1682 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90 - uint8_t ret = SPI.transfer(0x00); - 76a: 80 e0 ldi r24, 0x00 ; 0 - 76c: b5 dc rcall .-1686 ; 0xd8 - 76e: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 - endSPI(); - 770: a2 dd rcall .-1212 ; 0x2b6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94 - - return ret; -} - 772: 8c 2f mov r24, r28 - 774: cf 91 pop r28 - 776: 08 95 ret - -00000778 : -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:173 -MCP2515::ERROR MCP2515::setNormalMode() -{ - return setMode(CANCTRL_REQOP_NORMAL); -} - -MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) - 778: cf 92 push r12 - 77a: df 92 push r13 - 77c: ef 92 push r14 - 77e: ff 92 push r15 - 780: cf 93 push r28 - 782: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175 -{ - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - 784: 48 2f mov r20, r24 - 786: 60 ee ldi r22, 0xE0 ; 224 - 788: 8f e0 ldi r24, 0x0F ; 15 - 78a: d5 df rcall .-86 ; 0x736 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 78c: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 - cli(); - 78e: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 790: c0 90 2b 3c lds r12, 0x3C2B ; 0x803c2b - 794: d0 90 2c 3c lds r13, 0x3C2C ; 0x803c2c - 798: e0 90 2d 3c lds r14, 0x3C2D ; 0x803c2d - 79c: f0 90 2e 3c lds r15, 0x3C2E ; 0x803c2e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 7a0: 8f bf out 0x3f, r24 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177 - - unsigned long endTime = millis() + 10; - 7a2: 8a e0 ldi r24, 0x0A ; 10 - 7a4: c8 0e add r12, r24 - 7a6: d1 1c adc r13, r1 - 7a8: e1 1c adc r14, r1 - 7aa: f1 1c adc r15, r1 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 7ac: 2f b7 in r18, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 - cli(); - 7ae: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 7b0: 80 91 2b 3c lds r24, 0x3C2B ; 0x803c2b - 7b4: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c - 7b8: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d - 7bc: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 7c0: 2f bf out 0x3f, r18 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 - bool modeMatch = false; - while (millis() < endTime) { - 7c2: 8c 15 cp r24, r12 - 7c4: 9d 05 cpc r25, r13 - 7c6: ae 05 cpc r26, r14 - 7c8: bf 05 cpc r27, r15 - 7ca: 78 f4 brcc .+30 ; 0x7ea -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180 - uint8_t newmode = readRegister(MCP_CANSTAT); - 7cc: 8e e0 ldi r24, 0x0E ; 14 - 7ce: c6 df rcall .-116 ; 0x75c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181 - newmode &= CANSTAT_OPMOD; - 7d0: 80 7e andi r24, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185 - - modeMatch = newmode == mode; - - if (modeMatch) { - 7d2: c8 13 cpse r28, r24 - 7d4: eb cf rjmp .-42 ; 0x7ac -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183 - bool modeMatch = false; - while (millis() < endTime) { - uint8_t newmode = readRegister(MCP_CANSTAT); - newmode &= CANSTAT_OPMOD; - - modeMatch = newmode == mode; - 7d6: 81 e0 ldi r24, 0x01 ; 1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190 - if (modeMatch) { - break; - } - } - - return modeMatch ? ERROR_OK : ERROR_FAIL; - 7d8: 91 e0 ldi r25, 0x01 ; 1 - 7da: 89 27 eor r24, r25 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192 - -} - 7dc: 90 e0 ldi r25, 0x00 ; 0 - 7de: cf 91 pop r28 - 7e0: ff 90 pop r15 - 7e2: ef 90 pop r14 - 7e4: df 90 pop r13 - 7e6: cf 90 pop r12 - 7e8: 08 95 ret -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 -{ - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - - unsigned long endTime = millis() + 10; - bool modeMatch = false; - while (millis() < endTime) { - 7ea: 80 e0 ldi r24, 0x00 ; 0 - 7ec: f5 cf rjmp .-22 ; 0x7d8 - -000007ee : -_ZN7MCP251511setRegisterENS_8REGISTEREh.constprop.18(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:108 - values[i] = SPI.transfer(0x00); - } - endSPI(); -} - -void MCP2515::setRegister(const REGISTER reg, const uint8_t value) - 7ee: cf 93 push r28 - 7f0: df 93 push r29 - 7f2: d8 2f mov r29, r24 - 7f4: c6 2f mov r28, r22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110 -{ - startSPI(); - 7f6: bf de rcall .-642 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111 - SPI.transfer(INSTRUCTION_WRITE); - 7f8: 82 e0 ldi r24, 0x02 ; 2 - 7fa: 6e dc rcall .-1828 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112 - SPI.transfer(reg); - 7fc: 8d 2f mov r24, r29 - 7fe: 6c dc rcall .-1832 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113 - SPI.transfer(value); - 800: 8c 2f mov r24, r28 - 802: 6a dc rcall .-1836 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115 - endSPI(); -} - 804: df 91 pop r29 - 806: cf 91 pop r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 -{ - startSPI(); - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - SPI.transfer(value); - endSPI(); - 808: 56 cd rjmp .-1364 ; 0x2b6 - -0000080a : -_ZN7MCP251513readRegistersENS_8REGISTEREPhh.constprop.7(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:96 - endSPI(); - - return ret; -} - -void MCP2515::readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n) - 80a: ff 92 push r15 - 80c: 0f 93 push r16 - 80e: 1f 93 push r17 - 810: cf 93 push r28 - 812: df 93 push r29 - 814: c8 2f mov r28, r24 - 816: f6 2e mov r15, r22 - 818: 17 2f mov r17, r23 - 81a: 04 2f mov r16, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:98 -{ - startSPI(); - 81c: ac de rcall .-680 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:99 - SPI.transfer(INSTRUCTION_READ); - 81e: 83 e0 ldi r24, 0x03 ; 3 - 820: 5b dc rcall .-1866 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:100 - SPI.transfer(reg); - 822: 8c 2f mov r24, r28 - 824: 59 dc rcall .-1870 ; 0xd8 - 826: cf 2d mov r28, r15 - 828: d1 2f mov r29, r17 - 82a: 0c 0f add r16, r28 - 82c: 1d 2f mov r17, r29 - 82e: 11 1d adc r17, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:102 - // mcp2515 has auto-increment of address-pointer - for (uint8_t i=0; i -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:103 - values[i] = SPI.transfer(0x00); - 836: 80 e0 ldi r24, 0x00 ; 0 - 838: 4f dc rcall .-1890 ; 0xd8 - 83a: 89 93 st Y+, r24 - 83c: f9 cf rjmp .-14 ; 0x830 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:106 - } - endSPI(); -} - 83e: df 91 pop r29 - 840: cf 91 pop r28 - 842: 1f 91 pop r17 - 844: 0f 91 pop r16 - 846: ff 90 pop r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:105 - SPI.transfer(reg); - // mcp2515 has auto-increment of address-pointer - for (uint8_t i=0; i - -0000084a : -_ZN7MCP251511readMessageENS_4RXBnEP9can_frame.constprop.6(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:629 - } - - return ERROR_ALLTXBUSY; -} - -MCP2515::ERROR MCP2515::readMessage(const RXBn rxbn, struct can_frame *frame) - 84a: bf 92 push r11 - 84c: cf 92 push r12 - 84e: df 92 push r13 - 850: ef 92 push r14 - 852: ff 92 push r15 - 854: 0f 93 push r16 - 856: 1f 93 push r17 - 858: cf 93 push r28 - 85a: df 93 push r29 - 85c: cd b7 in r28, 0x3d ; 61 - 85e: de b7 in r29, 0x3e ; 62 - 860: 25 97 sbiw r28, 0x05 ; 5 - 862: cd bf out 0x3d, r28 ; 61 - 864: de bf out 0x3e, r29 ; 62 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:635 -{ - const struct RXBn_REGS *rxb = &RXB[rxbn]; - - uint8_t tbufdata[5]; - - readRegisters(rxb->SIDH, tbufdata, 5); - 866: 8c 01 movw r16, r24 - 868: 00 0f add r16, r16 - 86a: 11 1f adc r17, r17 - 86c: 00 0f add r16, r16 - 86e: 11 1f adc r17, r17 - 870: f8 01 movw r30, r16 - 872: ec 57 subi r30, 0x7C ; 124 - 874: fe 4a sbci r31, 0xAE ; 174 - 876: 45 e0 ldi r20, 0x05 ; 5 - 878: be 01 movw r22, r28 - 87a: 6f 5f subi r22, 0xFF ; 255 - 87c: 7f 4f sbci r23, 0xFF ; 255 - 87e: 81 81 ldd r24, Z+1 ; 0x01 - 880: c4 df rcall .-120 ; 0x80a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:637 - - uint32_t id = (tbufdata[MCP_SIDH]<<3) + (tbufdata[MCP_SIDL]>>5); - 882: 8a 81 ldd r24, Y+2 ; 0x02 - 884: c9 80 ldd r12, Y+1 ; 0x01 - 886: 98 e0 ldi r25, 0x08 ; 8 - 888: c9 9e mul r12, r25 - 88a: 60 01 movw r12, r0 - 88c: 11 24 eor r1, r1 - 88e: 28 2f mov r18, r24 - 890: 30 e0 ldi r19, 0x00 ; 0 - 892: 55 e0 ldi r21, 0x05 ; 5 - 894: 35 95 asr r19 - 896: 27 95 ror r18 - 898: 5a 95 dec r21 - 89a: e1 f7 brne .-8 ; 0x894 - 89c: c2 0e add r12, r18 - 89e: d3 1e adc r13, r19 - 8a0: 0d 2c mov r0, r13 - 8a2: 00 0c add r0, r0 - 8a4: ee 08 sbc r14, r14 - 8a6: ff 08 sbc r15, r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:639 - - if ( (tbufdata[MCP_SIDL] & TXB_EXIDE_MASK) == TXB_EXIDE_MASK ) { - 8a8: 83 ff sbrs r24, 3 - 8aa: 20 c0 rjmp .+64 ; 0x8ec -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:640 - id = (id<<2) + (tbufdata[MCP_SIDL] & 0x03); - 8ac: 92 e0 ldi r25, 0x02 ; 2 - 8ae: cc 0c add r12, r12 - 8b0: dd 1c adc r13, r13 - 8b2: ee 1c adc r14, r14 - 8b4: ff 1c adc r15, r15 - 8b6: 9a 95 dec r25 - 8b8: d1 f7 brne .-12 ; 0x8ae - 8ba: 83 70 andi r24, 0x03 ; 3 - 8bc: c8 0e add r12, r24 - 8be: d1 1c adc r13, r1 - 8c0: e1 1c adc r14, r1 - 8c2: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:641 - id = (id<<8) + tbufdata[MCP_EID8]; - 8c4: fe 2c mov r15, r14 - 8c6: ed 2c mov r14, r13 - 8c8: dc 2c mov r13, r12 - 8ca: cc 24 eor r12, r12 - 8cc: 8b 81 ldd r24, Y+3 ; 0x03 - 8ce: c8 0e add r12, r24 - 8d0: d1 1c adc r13, r1 - 8d2: e1 1c adc r14, r1 - 8d4: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:642 - id = (id<<8) + tbufdata[MCP_EID0]; - 8d6: fe 2c mov r15, r14 - 8d8: ed 2c mov r14, r13 - 8da: dc 2c mov r13, r12 - 8dc: cc 24 eor r12, r12 - 8de: 8c 81 ldd r24, Y+4 ; 0x04 - 8e0: c8 0e add r12, r24 - 8e2: d1 1c adc r13, r1 - 8e4: e1 1c adc r14, r1 - 8e6: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:643 - id |= CAN_EFF_FLAG; - 8e8: 68 94 set - 8ea: f7 f8 bld r15, 7 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:646 - } - - uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); - 8ec: 8d 81 ldd r24, Y+5 ; 0x05 - 8ee: 8f 70 andi r24, 0x0F ; 15 - 8f0: b8 2e mov r11, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647 - if (dlc > CAN_MAX_DLEN) { - 8f2: e8 e0 ldi r30, 0x08 ; 8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:648 - return ERROR_FAIL; - 8f4: 81 e0 ldi r24, 0x01 ; 1 - 8f6: 90 e0 ldi r25, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647 - id = (id<<8) + tbufdata[MCP_EID0]; - id |= CAN_EFF_FLAG; - } - - uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); - if (dlc > CAN_MAX_DLEN) { - 8f8: eb 15 cp r30, r11 - 8fa: 10 f1 brcs .+68 ; 0x940 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:651 - return ERROR_FAIL; - } - - uint8_t ctrl = readRegister(rxb->CTRL); - 8fc: f8 01 movw r30, r16 - 8fe: ec 57 subi r30, 0x7C ; 124 - 900: fe 4a sbci r31, 0xAE ; 174 - 902: 80 81 ld r24, Z - 904: 2b df rcall .-426 ; 0x75c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:652 - if (ctrl & RXBnCTRL_RTR) { - 906: 83 ff sbrs r24, 3 - 908: 02 c0 rjmp .+4 ; 0x90e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:653 - id |= CAN_RTR_FLAG; - 90a: 68 94 set - 90c: f6 f8 bld r15, 6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:656 - } - - frame->can_id = id; - 90e: c0 92 30 3c sts 0x3C30, r12 ; 0x803c30 <_frame> - 912: d0 92 31 3c sts 0x3C31, r13 ; 0x803c31 <_frame+0x1> - 916: e0 92 32 3c sts 0x3C32, r14 ; 0x803c32 <_frame+0x2> - 91a: f0 92 33 3c sts 0x3C33, r15 ; 0x803c33 <_frame+0x3> -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:657 - frame->can_dlc = dlc; - 91e: b0 92 34 3c sts 0x3C34, r11 ; 0x803c34 <_frame+0x4> -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:659 - - readRegisters(rxb->DATA, frame->data, dlc); - 922: 0c 57 subi r16, 0x7C ; 124 - 924: 1e 4a sbci r17, 0xAE ; 174 - 926: 4b 2d mov r20, r11 - 928: 68 e3 ldi r22, 0x38 ; 56 - 92a: 7c e3 ldi r23, 0x3C ; 60 - 92c: f8 01 movw r30, r16 - 92e: 82 81 ldd r24, Z+2 ; 0x02 - 930: 6c df rcall .-296 ; 0x80a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:661 - - modifyRegister(MCP_CANINTF, rxb->CANINTF_RXnIF, 0); - 932: 40 e0 ldi r20, 0x00 ; 0 - 934: f8 01 movw r30, r16 - 936: 63 81 ldd r22, Z+3 ; 0x03 - 938: 8c e2 ldi r24, 0x2C ; 44 - 93a: fd de rcall .-518 ; 0x736 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:663 - - return ERROR_OK; - 93c: 90 e0 ldi r25, 0x00 ; 0 - 93e: 80 e0 ldi r24, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:664 -} - 940: 25 96 adiw r28, 0x05 ; 5 - 942: cd bf out 0x3d, r28 ; 61 - 944: de bf out 0x3e, r29 ; 62 - 946: df 91 pop r29 - 948: cf 91 pop r28 - 94a: 1f 91 pop r17 - 94c: 0f 91 pop r16 - 94e: ff 90 pop r15 - 950: ef 90 pop r14 - 952: df 90 pop r13 - 954: cf 90 pop r12 - 956: bf 90 pop r11 - 958: 08 95 ret - -0000095a : -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:579 - setRegisters(reg, tbufdata, 4); - - return ERROR_OK; -} - -MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) - 95a: cf 92 push r12 - 95c: df 92 push r13 - 95e: ef 92 push r14 - 960: ff 92 push r15 - 962: 0f 93 push r16 - 964: 1f 93 push r17 - 966: cf 93 push r28 - 968: df 93 push r29 - 96a: cd b7 in r28, 0x3d ; 61 - 96c: de b7 in r29, 0x3e ; 62 - 96e: 2d 97 sbiw r28, 0x0d ; 13 - 970: cd bf out 0x3d, r28 ; 61 - 972: de bf out 0x3e, r29 ; 62 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589 - - const struct TXBn_REGS *txbuf = &TXB[txbn]; - - uint8_t data[13]; - - bool ext = (frame->can_id & CAN_EFF_FLAG); - 974: 80 91 30 3c lds r24, 0x3C30 ; 0x803c30 <_frame> - 978: 90 91 31 3c lds r25, 0x3C31 ; 0x803c31 <_frame+0x1> - 97c: a0 91 32 3c lds r26, 0x3C32 ; 0x803c32 <_frame+0x2> - 980: b0 91 33 3c lds r27, 0x3C33 ; 0x803c33 <_frame+0x3> - 984: ac 01 movw r20, r24 - 986: bd 01 movw r22, r26 - 988: 44 27 eor r20, r20 - 98a: 77 fd sbrc r23, 7 - 98c: 43 95 inc r20 - 98e: 55 27 eor r21, r21 - 990: 66 27 eor r22, r22 - 992: 77 27 eor r23, r23 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - 994: 6c 01 movw r12, r24 - 996: 7d 01 movw r14, r26 - 998: cc 24 eor r12, r12 - 99a: dd 24 eor r13, r13 - 99c: ee 24 eor r14, r14 - 99e: 20 e4 ldi r18, 0x40 ; 64 - 9a0: f2 22 and r15, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591 - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - 9a2: 0f ef ldi r16, 0xFF ; 255 - 9a4: 1f ef ldi r17, 0xFF ; 255 - 9a6: 2f ef ldi r18, 0xFF ; 255 - 9a8: 3f e1 ldi r19, 0x1F ; 31 - 9aa: 41 11 cpse r20, r1 - 9ac: 04 c0 rjmp .+8 ; 0x9b6 - 9ae: 0f ef ldi r16, 0xFF ; 255 - 9b0: 17 e0 ldi r17, 0x07 ; 7 - 9b2: 20 e0 ldi r18, 0x00 ; 0 - 9b4: 30 e0 ldi r19, 0x00 ; 0 - 9b6: 80 23 and r24, r16 - 9b8: 91 23 and r25, r17 - 9ba: a2 23 and r26, r18 - 9bc: b3 23 and r27, r19 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - 9be: 44 23 and r20, r20 - 9c0: 09 f4 brne .+2 ; 0x9c4 - 9c2: 42 c0 rjmp .+132 ; 0xa48 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - 9c4: 8c 83 std Y+4, r24 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - 9c6: 9b 83 std Y+3, r25 ; 0x03 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 - canid = (uint16_t)(id >> 16); - 9c8: cd 01 movw r24, r26 - 9ca: aa 27 eor r26, r26 - 9cc: bb 27 eor r27, r27 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - 9ce: 28 2f mov r18, r24 - 9d0: 23 70 andi r18, 0x03 ; 3 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 9d2: 28 60 ori r18, 0x08 ; 8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518 - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - 9d4: 38 2f mov r19, r24 - 9d6: 33 0f add r19, r19 - 9d8: 33 0f add r19, r19 - 9da: 33 0f add r19, r19 - 9dc: 30 7e andi r19, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 9de: 23 2b or r18, r19 - 9e0: 2a 83 std Y+2, r18 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - 9e2: 35 e0 ldi r19, 0x05 ; 5 - 9e4: 96 95 lsr r25 - 9e6: 87 95 ror r24 - 9e8: 3a 95 dec r19 - 9ea: e1 f7 brne .-8 ; 0x9e4 - 9ec: 89 83 std Y+1, r24 ; 0x01 - 9ee: 10 91 34 3c lds r17, 0x3C34 ; 0x803c34 <_frame+0x4> -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - - prepareId(data, ext, id); - - data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; - 9f2: 81 2f mov r24, r17 - 9f4: cd 28 or r12, r13 - 9f6: ce 28 or r12, r14 - 9f8: cf 28 or r12, r15 - 9fa: 09 f0 breq .+2 ; 0x9fe - 9fc: 80 64 ori r24, 0x40 ; 64 - 9fe: 8d 83 std Y+5, r24 ; 0x05 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 - - memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); - a00: 41 2f mov r20, r17 - a02: 50 e0 ldi r21, 0x00 ; 0 - a04: 68 e3 ldi r22, 0x38 ; 56 - a06: 7c e3 ldi r23, 0x3C ; 60 - a08: ce 01 movw r24, r28 - a0a: 06 96 adiw r24, 0x06 ; 6 - a0c: 58 d3 rcall .+1712 ; 0x10be -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 - - setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); - a0e: 45 e0 ldi r20, 0x05 ; 5 - a10: 41 0f add r20, r17 - a12: be 01 movw r22, r28 - a14: 6f 5f subi r22, 0xFF ; 255 - a16: 7f 4f sbci r23, 0xFF ; 255 - a18: 81 e4 ldi r24, 0x41 ; 65 - a1a: 6e de rcall .-804 ; 0x6f8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 - - modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); - a1c: 48 e0 ldi r20, 0x08 ; 8 - a1e: 68 e0 ldi r22, 0x08 ; 8 - a20: 80 e4 ldi r24, 0x40 ; 64 - a22: 89 de rcall .-750 ; 0x736 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 - - uint8_t ctrl = readRegister(txbuf->CTRL); - a24: 80 e4 ldi r24, 0x40 ; 64 - a26: 9a de rcall .-716 ; 0x75c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604 - if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { - a28: 80 77 andi r24, 0x70 ; 112 - a2a: e1 f0 breq .+56 ; 0xa64 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:605 - return ERROR_FAILTX; - a2c: 84 e0 ldi r24, 0x04 ; 4 - a2e: 90 e0 ldi r25, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:608 - } - return ERROR_OK; -} - a30: 2d 96 adiw r28, 0x0d ; 13 - a32: cd bf out 0x3d, r28 ; 61 - a34: de bf out 0x3e, r29 ; 62 - a36: df 91 pop r29 - a38: cf 91 pop r28 - a3a: 1f 91 pop r17 - a3c: 0f 91 pop r16 - a3e: ff 90 pop r15 - a40: ef 90 pop r14 - a42: df 90 pop r13 - a44: cf 90 pop r12 - a46: 08 95 ret -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - a48: 9c 01 movw r18, r24 - a4a: 93 e0 ldi r25, 0x03 ; 3 - a4c: 36 95 lsr r19 - a4e: 27 95 ror r18 - a50: 9a 95 dec r25 - a52: e1 f7 brne .-8 ; 0xa4c - a54: 29 83 std Y+1, r18 ; 0x01 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - a56: 82 95 swap r24 - a58: 88 0f add r24, r24 - a5a: 80 7e andi r24, 0xE0 ; 224 - a5c: 8a 83 std Y+2, r24 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - a5e: 1c 82 std Y+4, r1 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - a60: 1b 82 std Y+3, r1 ; 0x03 - a62: c5 cf rjmp .-118 ; 0x9ee -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.part.3.constprop.22(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:607 - - uint8_t ctrl = readRegister(txbuf->CTRL); - if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { - return ERROR_FAILTX; - } - return ERROR_OK; - a64: 90 e0 ldi r25, 0x00 ; 0 - a66: 80 e0 ldi r24, 0x00 ; 0 - a68: e3 cf rjmp .-58 ; 0xa30 - -00000a6a <__vector_25>: -__vector_25(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:74 -#elif defined(MILLIS_USE_TIMERB2) -ISR(TCB2_INT_vect) -#else // fallback or defined(MILLIS_USE_TIMERB3) -ISR(TCB3_INT_vect) -#endif -{ - a6a: 1f 92 push r1 - a6c: 0f 92 push r0 - a6e: 0f b6 in r0, 0x3f ; 63 - a70: 0f 92 push r0 - a72: 11 24 eor r1, r1 - a74: 8f 93 push r24 - a76: 9f 93 push r25 - a78: af 93 push r26 - a7a: bf 93 push r27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:75 - timer_millis++; - a7c: 80 91 2b 3c lds r24, 0x3C2B ; 0x803c2b - a80: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c - a84: a0 91 2d 3c lds r26, 0x3C2D ; 0x803c2d - a88: b0 91 2e 3c lds r27, 0x3C2E ; 0x803c2e - a8c: 01 96 adiw r24, 0x01 ; 1 - a8e: a1 1d adc r26, r1 - a90: b1 1d adc r27, r1 - a92: 80 93 2b 3c sts 0x3C2B, r24 ; 0x803c2b - a96: 90 93 2c 3c sts 0x3C2C, r25 ; 0x803c2c - a9a: a0 93 2d 3c sts 0x3C2D, r26 ; 0x803c2d - a9e: b0 93 2e 3c sts 0x3C2E, r27 ; 0x803c2e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:78 - - /* Clear flag */ - _timer->INTFLAGS = TCB_CAPT_bm; - aa2: 81 e0 ldi r24, 0x01 ; 1 - aa4: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:79 -} - aa8: bf 91 pop r27 - aaa: af 91 pop r26 - aac: 9f 91 pop r25 - aae: 8f 91 pop r24 - ab0: 0f 90 pop r0 - ab2: 0f be out 0x3f, r0 ; 63 - ab4: 0f 90 pop r0 - ab6: 1f 90 pop r1 - ab8: 18 95 reti - -00000aba : -_GLOBAL__I_65535_0_UPSoftware.ino.cpp.o.2731(): - aba: e0 e4 ldi r30, 0x40 ; 64 - abc: fc e3 ldi r31, 0x3C ; 60 - abe: 84 e0 ldi r24, 0x04 ; 4 - ac0: 81 83 std Z+1, r24 ; 0x01 - ac2: 81 e3 ldi r24, 0x31 ; 49 - ac4: 80 83 st Z, r24 - ac6: e2 e4 ldi r30, 0x42 ; 66 - ac8: fc e3 ldi r31, 0x3C ; 60 - aca: 15 82 std Z+5, r1 ; 0x05 - acc: 14 82 std Z+4, r1 ; 0x04 - ace: 3c db rcall .-2440 ; 0x148 - ad0: 83 e0 ldi r24, 0x03 ; 3 - ad2: 80 93 81 3c sts 0x3C81, r24 ; 0x803c81 - ad6: 61 e0 ldi r22, 0x01 ; 1 - ad8: 09 db rcall .-2542 ; 0xec - ada: ed cb rjmp .-2086 ; 0x2b6 - -00000adc
: -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:29 - -void setupUSB() __attribute__((weak)); -void setupUSB() {} - -int main(void) -{ - adc: cf 93 push r28 - ade: df 93 push r29 - ae0: cd b7 in r28, 0x3d ; 61 - ae2: de b7 in r29, 0x3e ; 62 - ae4: a2 97 sbiw r28, 0x22 ; 34 - ae6: cd bf out 0x3d, r28 ; 61 - ae8: de bf out 0x3e, r29 ; 62 -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:361 -#elif (F_CPU == 10000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); -#elif (F_CPU == 8000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); - aea: 91 e0 ldi r25, 0x01 ; 1 - aec: 88 ed ldi r24, 0xD8 ; 216 - aee: 84 bf out 0x34, r24 ; 52 - af0: 90 93 61 00 sts 0x0061, r25 ; 0x800061 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:390 -#if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 16000000L) // 16 MHz / 128 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 8000000L) // 8 MHz / 64 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV64_gc; - af4: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - af8: 85 60 ori r24, 0x05 ; 5 - afa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:402 -#else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2 - ADC0.CTRLC |= ADC_PRESC_DIV2_gc; -#endif - - /* Enable ADC */ - ADC0.CTRLA |= ADC_ENABLE_bm; - afe: 80 91 00 06 lds r24, 0x0600 ; 0x800600 - b02: 81 60 ori r24, 0x01 ; 1 - b04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 -analogReference(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_analog.c:35 -{ - switch (mode) - { - case EXTERNAL: - case VDD: - ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely... - b08: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - b0c: 8f 7c andi r24, 0xCF ; 207 - b0e: 80 65 ori r24, 0x50 ; 80 - b10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:407 - analogReference(VDD); - -#endif - - PORTMUX.USARTROUTEA = 0; - b14: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:446 -void setup_timers() -{ - // TYPE A TIMER - - // PORTMUX setting for TCA (defined in pins_arduino.h) - PORTMUX.TCAROUTEA = TCA0_PINS; - b18: 82 e0 ldi r24, 0x02 ; 2 - b1a: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:449 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - b1e: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:453 - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - b22: 8e ef ldi r24, 0xFE ; 254 - b24: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:452 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - b28: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:461 - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE; - b2c: 80 e8 ldi r24, 0x80 ; 128 - b2e: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:460 - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - b32: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:459 - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - b36: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:458 - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - b3a: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:457 - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - b3e: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:456 - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - b42: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:471 -#elif F_CPU <= 2000000L - // Use DIV8 prescaler (giving 250kHz clock on 2MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV8_gc) | (TCA_SPLIT_ENABLE_bm); -#elif F_CPU <= 8000000L - // Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm); - b46: 89 e0 ldi r24, 0x09 ; 9 - b48: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:480 -#endif - - // TYPE B TIMERS - - // Set up routing (defined in pins_arduino.h) - PORTMUX.TCBROUTEA = 0 - b4c: 87 e0 ldi r24, 0x07 ; 7 - b4e: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:496 - | TCB3_PINS -#endif - ; - - // Start with TCB0 - TCB_t *timer_B = (TCB_t *)&TCB0; - b52: e0 e8 ldi r30, 0x80 ; 128 - b54: fa e0 ldi r31, 0x0A ; 10 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - b56: 17 e0 ldi r17, 0x07 ; 7 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - b58: 9e ef ldi r25, 0xFE ; 254 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - b5a: 80 e8 ldi r24, 0x80 ; 128 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - b5c: 05 e0 ldi r16, 0x05 ; 5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - b5e: 11 83 std Z+1, r17 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - b60: 94 87 std Z+12, r25 ; 0x0c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - b62: 85 87 std Z+13, r24 ; 0x0d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - b64: 00 83 st Z, r16 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:528 - //|(TCB_SYNCUPD_bm) - | (TCB_ENABLE_bm); - - // Increment pointer to next TCB instance - timer_B++; - b66: 70 96 adiw r30, 0x10 ; 16 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:531 - - // Stop when pointing to TCB3 - } while (timer_B <= timer_B_end); - b68: e0 3c cpi r30, 0xC0 ; 192 - b6a: 2a e0 ldi r18, 0x0A ; 10 - b6c: f2 07 cpc r31, r18 - b6e: b9 f7 brne .-18 ; 0xb5e -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:416 - /********************* TCB for system time tracking **************************/ - - // BUG: we can compensate for F_CPU by fine tuning value of TIME_TRACKING_TIMER_COUNT - - /* Select vanilla 16 bit periodic interrupt mode */ - _timer->CTRLB = TCB_CNTMODE_INT_gc; - b70: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:419 - - /* TOP value for overflow every N clock cycles */ - _timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1; - b74: 8f e3 ldi r24, 0x3F ; 63 - b76: 9f e1 ldi r25, 0x1F ; 31 - b78: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac - b7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:422 - - /* Enable TCB interrupt */ - _timer->INTCTRL |= TCB_CAPT_bm; - b80: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 - b84: 81 60 ori r24, 0x01 ; 1 - b86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:426 - - /* Clock selection is F_CPU/N -- which is independent of TCA */ -#if TIME_TRACKING_TIMER_DIVIDER == 1 - _timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */ - b8a: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:434 -#else -#assert "TIME_TRACKING_TIMER_DIVIDER not supported" -#endif - - /* Enable & start */ - _timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */ - b8e: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 - b92: 81 60 ori r24, 0x01 ; 1 - b94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:438 - - /*************************** ENABLE GLOBAL INTERRUPTS *************************/ - - sei(); - b98: 78 94 sei -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:34 -int PinCount = 8; -PinState PinPD2[8]; -byte DeviceId[2]; - -void setup() { - SPI.begin(); - b9a: d6 da rcall .-2644 ; 0x148 -_ZN8PinState4InitEih(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - b9c: 85 e1 ldi r24, 0x15 ; 21 - b9e: 90 e0 ldi r25, 0x00 ; 0 - ba0: 80 93 03 3c sts 0x3C03, r24 ; 0x803c03 - ba4: 90 93 04 3c sts 0x3C04, r25 ; 0x803c04 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - ba8: 81 e0 ldi r24, 0x01 ; 1 - baa: 80 93 05 3c sts 0x3C05, r24 ; 0x803c05 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - bae: 80 93 06 3c sts 0x3C06, r24 ; 0x803c06 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - bb2: 80 93 07 3c sts 0x3C07, r24 ; 0x803c07 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - bb6: 26 e1 ldi r18, 0x16 ; 22 - bb8: 30 e0 ldi r19, 0x00 ; 0 - bba: 20 93 08 3c sts 0x3C08, r18 ; 0x803c08 - bbe: 30 93 09 3c sts 0x3C09, r19 ; 0x803c09 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - bc2: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - bc6: 80 93 0b 3c sts 0x3C0B, r24 ; 0x803c0b -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - bca: 92 e0 ldi r25, 0x02 ; 2 - bcc: 90 93 0c 3c sts 0x3C0C, r25 ; 0x803c0c -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - bd0: 27 e1 ldi r18, 0x17 ; 23 - bd2: 30 e0 ldi r19, 0x00 ; 0 - bd4: 20 93 0d 3c sts 0x3C0D, r18 ; 0x803c0d - bd8: 30 93 0e 3c sts 0x3C0E, r19 ; 0x803c0e -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - bdc: 80 93 0f 3c sts 0x3C0F, r24 ; 0x803c0f -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - be0: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - be4: 93 e0 ldi r25, 0x03 ; 3 - be6: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - bea: 28 e1 ldi r18, 0x18 ; 24 - bec: 30 e0 ldi r19, 0x00 ; 0 - bee: 20 93 12 3c sts 0x3C12, r18 ; 0x803c12 - bf2: 30 93 13 3c sts 0x3C13, r19 ; 0x803c13 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - bf6: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - bfa: 80 93 15 3c sts 0x3C15, r24 ; 0x803c15 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - bfe: 94 e0 ldi r25, 0x04 ; 4 - c00: 90 93 16 3c sts 0x3C16, r25 ; 0x803c16 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - c04: 2c e1 ldi r18, 0x1C ; 28 - c06: 30 e0 ldi r19, 0x00 ; 0 - c08: 20 93 17 3c sts 0x3C17, r18 ; 0x803c17 - c0c: 30 93 18 3c sts 0x3C18, r19 ; 0x803c18 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - c10: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - c14: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - c18: 00 93 1b 3c sts 0x3C1B, r16 ; 0x803c1b -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - c1c: 2b e1 ldi r18, 0x1B ; 27 - c1e: 30 e0 ldi r19, 0x00 ; 0 - c20: 20 93 1c 3c sts 0x3C1C, r18 ; 0x803c1c - c24: 30 93 1d 3c sts 0x3C1D, r19 ; 0x803c1d -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - c28: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - c2c: 80 93 1f 3c sts 0x3C1F, r24 ; 0x803c1f -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - c30: 96 e0 ldi r25, 0x06 ; 6 - c32: 90 93 20 3c sts 0x3C20, r25 ; 0x803c20 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - c36: 2a e1 ldi r18, 0x1A ; 26 - c38: 30 e0 ldi r19, 0x00 ; 0 - c3a: 20 93 21 3c sts 0x3C21, r18 ; 0x803c21 - c3e: 30 93 22 3c sts 0x3C22, r19 ; 0x803c22 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - c42: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - c46: 80 93 24 3c sts 0x3C24, r24 ; 0x803c24 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - c4a: 10 93 25 3c sts 0x3C25, r17 ; 0x803c25 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:22 - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - c4e: 29 e1 ldi r18, 0x19 ; 25 - c50: 30 e0 ldi r19, 0x00 ; 0 - c52: 20 93 26 3c sts 0x3C26, r18 ; 0x803c26 - c56: 30 93 27 3c sts 0x3C27, r19 ; 0x803c27 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:23 - this->pin_state = true; - c5a: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:24 - this->is_input = true; - c5e: 80 93 29 3c sts 0x3C29, r24 ; 0x803c29 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:25 - this->meyPinId = meyPinId; - c62: 88 e0 ldi r24, 0x08 ; 8 - c64: 80 93 2a 3c sts 0x3C2A, r24 ; 0x803c2a -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:63 - PinPD2[7] = PinState(); - PinPD2[7].Init(PIN_PD3, (byte) 8); - - - - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - c68: 80 91 60 00 lds r24, 0x0060 ; 0x800060 - c6c: 80 68 ori r24, 0x80 ; 128 - c6e: 90 e0 ldi r25, 0x00 ; 0 - c70: 28 ed ldi r18, 0xD8 ; 216 - c72: 24 bf out 0x34, r18 ; 52 - c74: 80 93 60 00 sts 0x0060, r24 ; 0x800060 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36 - SPI.endTransaction(); -} - -MCP2515::ERROR MCP2515::reset(void) -{ - startSPI(); - c78: 7e dc rcall .-1796 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37 - SPI.transfer(INSTRUCTION_RESET); - c7a: 80 ec ldi r24, 0xC0 ; 192 - c7c: 2d da rcall .-2982 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 - endSPI(); - c7e: 1b db rcall .-2506 ; 0x2b6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40 - - delay(10); - c80: 6a e0 ldi r22, 0x0A ; 10 - c82: 70 e0 ldi r23, 0x00 ; 0 - c84: 80 e0 ldi r24, 0x00 ; 0 - c86: 90 e0 ldi r25, 0x00 ; 0 - c88: eb db rcall .-2090 ; 0x460 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43 - - uint8_t zeros[14]; - memset(zeros, 0, sizeof(zeros)); - c8a: 8e 01 movw r16, r28 - c8c: 0f 5f subi r16, 0xFF ; 255 - c8e: 1f 4f sbci r17, 0xFF ; 255 - c90: 8e e0 ldi r24, 0x0E ; 14 - c92: f8 01 movw r30, r16 - c94: 11 92 st Z+, r1 - c96: 8a 95 dec r24 - c98: e9 f7 brne .-6 ; 0xc94 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44 - setRegisters(MCP_TXB0CTRL, zeros, 14); - c9a: 4e e0 ldi r20, 0x0E ; 14 - c9c: b8 01 movw r22, r16 - c9e: 80 e3 ldi r24, 0x30 ; 48 - ca0: 2b dd rcall .-1450 ; 0x6f8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45 - setRegisters(MCP_TXB1CTRL, zeros, 14); - ca2: 4e e0 ldi r20, 0x0E ; 14 - ca4: b8 01 movw r22, r16 - ca6: 80 e4 ldi r24, 0x40 ; 64 - ca8: 27 dd rcall .-1458 ; 0x6f8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46 - setRegisters(MCP_TXB2CTRL, zeros, 14); - caa: 4e e0 ldi r20, 0x0E ; 14 - cac: b8 01 movw r22, r16 - cae: 80 e5 ldi r24, 0x50 ; 80 - cb0: 23 dd rcall .-1466 ; 0x6f8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48 - - setRegister(MCP_RXB0CTRL, 0); - cb2: 60 e0 ldi r22, 0x00 ; 0 - cb4: 80 e6 ldi r24, 0x60 ; 96 - cb6: 9b dd rcall .-1226 ; 0x7ee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49 - setRegister(MCP_RXB1CTRL, 0); - cb8: 60 e0 ldi r22, 0x00 ; 0 - cba: 80 e7 ldi r24, 0x70 ; 112 - cbc: 98 dd rcall .-1232 ; 0x7ee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51 - - setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); - cbe: 63 ea ldi r22, 0xA3 ; 163 - cc0: 8b e2 ldi r24, 0x2B ; 43 - cc2: 95 dd rcall .-1238 ; 0x7ee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:55 - - // receives all valid messages using either Standard or Extended Identifiers that - // meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1 - modifyRegister(MCP_RXB0CTRL, - cc4: 44 e0 ldi r20, 0x04 ; 4 - cc6: 67 e6 ldi r22, 0x67 ; 103 - cc8: 80 e6 ldi r24, 0x60 ; 96 - cca: 35 dd rcall .-1430 ; 0x736 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:58 - RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK, - RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT); - modifyRegister(MCP_RXB1CTRL, - ccc: 41 e0 ldi r20, 0x01 ; 1 - cce: 67 e6 ldi r22, 0x67 ; 103 - cd0: 80 e7 ldi r24, 0x70 ; 112 - cd2: 31 dd rcall .-1438 ; 0x736 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65 - RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - cd4: 8c e0 ldi r24, 0x0C ; 12 - cd6: e4 ed ldi r30, 0xD4 ; 212 - cd8: f0 e5 ldi r31, 0x50 ; 80 - cda: de 01 movw r26, r28 - cdc: 1f 96 adiw r26, 0x0f ; 15 - cde: 01 90 ld r0, Z+ - ce0: 0d 92 st X+, r0 - ce2: 8a 95 dec r24 - ce4: e1 f7 brne .-8 ; 0xcde - ce6: 5e 01 movw r10, r28 - ce8: ff e0 ldi r31, 0x0F ; 15 - cea: af 0e add r10, r31 - cec: b1 1c adc r11, r1 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - for (int i=0; i<6; i++) { - cee: d1 2c mov r13, r1 - cf0: c1 2c mov r12, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - cf2: b8 e0 ldi r27, 0x08 ; 8 - cf4: 9b 2e mov r9, r27 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68 - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - bool ext = (i == 1); - ERROR result = setFilter(filters[i], ext, 0); - cf6: f5 01 movw r30, r10 - cf8: 01 91 ld r16, Z+ - cfa: 11 91 ld r17, Z+ - cfc: 5f 01 movw r10, r30 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - cfe: 80 e8 ldi r24, 0x80 ; 128 - d00: 3b dd rcall .-1418 ; 0x778 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:555 -} - -MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - d02: 89 2b or r24, r25 - d04: 71 f4 brne .+28 ; 0xd22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - d06: 02 30 cpi r16, 0x02 ; 2 - d08: 11 05 cpc r17, r1 - d0a: 09 f4 brne .+2 ; 0xd0e - d0c: 75 c1 rjmp .+746 ; 0xff8 - d0e: 08 f0 brcs .+2 ; 0xd12 - d10: 2c c1 rjmp .+600 ; 0xf6a - d12: 01 15 cp r16, r1 - d14: 11 05 cpc r17, r1 - d16: 09 f4 brne .+2 ; 0xd1a - d18: 34 c1 rjmp .+616 ; 0xf82 - d1a: 01 30 cpi r16, 0x01 ; 1 - d1c: 11 05 cpc r17, r1 - d1e: 09 f4 brne .+2 ; 0xd22 - d20: 71 c1 rjmp .+738 ; 0x1004 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - d22: 80 e8 ldi r24, 0x80 ; 128 - d24: 29 dd rcall .-1454 ; 0x778 -setBitrate(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:202 -} - -MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) -{ - ERROR error = setConfigMode(); - if (error != ERROR_OK) { - d26: 89 2b or r24, r25 - d28: 49 f4 brne .+18 ; 0xd3c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 - set = 0; - break; - } - - if (set) { - setRegister(MCP_CNF1, cfg1); - d2a: 60 e0 ldi r22, 0x00 ; 0 - d2c: 8a e2 ldi r24, 0x2A ; 42 - d2e: 5f dd rcall .-1346 ; 0x7ee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478 - setRegister(MCP_CNF2, cfg2); - d30: 60 e9 ldi r22, 0x90 ; 144 - d32: 89 e2 ldi r24, 0x29 ; 41 - d34: 5c dd rcall .-1352 ; 0x7ee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479 - setRegister(MCP_CNF3, cfg3); - d36: 62 e8 ldi r22, 0x82 ; 130 - d38: 88 e2 ldi r24, 0x28 ; 40 - d3a: 59 dd rcall .-1358 ; 0x7ee -setNormalMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 - return setMode(CANCTRL_REQOP_LOOPBACK); -} - -MCP2515::ERROR MCP2515::setNormalMode() -{ - return setMode(CANCTRL_REQOP_NORMAL); - d3c: 80 e0 ldi r24, 0x00 ; 0 - d3e: 1c dd rcall .-1480 ; 0x778 - d40: fb e2 ldi r31, 0x2B ; 43 - d42: cf 2e mov r12, r31 - d44: fc e3 ldi r31, 0x3C ; 60 - d46: df 2e mov r13, r31 - d48: 03 e0 ldi r16, 0x03 ; 3 - d4a: 1c e3 ldi r17, 0x3C ; 60 -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:70 - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - - for (int i = 0; i <= PinCount - 1; i++) - { - pinMode(PinPD2[i].pin_id, INPUT_PULLUP); - d4c: f8 01 movw r30, r16 - d4e: 80 81 ld r24, Z -pinMode(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - d50: 89 32 cpi r24, 0x29 ; 41 - d52: 10 f4 brcc .+4 ; 0xd58 - d54: 62 e0 ldi r22, 0x02 ; 2 - d56: ca d9 rcall .-3180 ; 0xec -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:71 - PinPD2[i].pin_state = ReadPin(&PinPD2[i]); - d58: c8 01 movw r24, r16 - d5a: ae db rcall .-2212 ; 0x4b8 - d5c: f8 01 movw r30, r16 - d5e: 82 83 std Z+2, r24 ; 0x02 - d60: 0b 5f subi r16, 0xFB ; 251 - d62: 1f 4f sbci r17, 0xFF ; 255 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:68 - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - mcp2515.reset(); - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - - for (int i = 0; i <= PinCount - 1; i++) - d64: c0 16 cp r12, r16 - d66: d1 06 cpc r13, r17 - d68: 89 f7 brne .-30 ; 0xd4c -GetDeviceIdLow(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:204 -{ - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - d6a: 50 91 03 11 lds r21, 0x1103 ; 0x801103 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 - CircularShift(SIGROW.SERNUM2) << 1 ^ - d6e: 90 91 05 11 lds r25, 0x1105 ; 0x801105 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:206 - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - d72: 40 91 07 11 lds r20, 0x1107 ; 0x801107 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:207 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - d76: 30 91 09 11 lds r19, 0x1109 ; 0x801109 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:208 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); - d7a: 20 91 0b 11 lds r18, 0x110B ; 0x80110b -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - d7e: 89 2f mov r24, r25 - d80: 88 0f add r24, r24 - d82: 81 1d adc r24, r1 -GetDeviceIdLow(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - d84: 88 0f add r24, r24 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:204 -{ - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - d86: 85 27 eor r24, r21 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - d88: 94 2f mov r25, r20 - d8a: 99 0f add r25, r25 - d8c: 91 1d adc r25, r1 - d8e: 99 0f add r25, r25 - d90: 91 1d adc r25, r1 -GetDeviceIdLow(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:205 - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - d92: 89 27 eor r24, r25 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - d94: 93 2f mov r25, r19 - d96: 92 95 swap r25 - d98: 90 fb bst r25, 0 - d9a: 97 95 ror r25 - d9c: 97 f9 bld r25, 7 -GetDeviceIdLow(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:206 -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - d9e: 89 27 eor r24, r25 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - da0: 92 2f mov r25, r18 - da2: 92 95 swap r25 -GetDeviceIdLow(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:207 - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - da4: 89 27 eor r24, r25 -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:75 - pinMode(PinPD2[i].pin_id, INPUT_PULLUP); - PinPD2[i].pin_state = ReadPin(&PinPD2[i]); - } - - - DeviceId[0] = GetDeviceIdLow(); - da6: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> -GetDeviceIdHigh(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:212 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - daa: 50 91 04 11 lds r21, 0x1104 ; 0x801104 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 - CircularShift(SIGROW.SERNUM3) << 1 ^ - dae: 40 91 06 11 lds r20, 0x1106 ; 0x801106 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:214 - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - db2: 30 91 08 11 lds r19, 0x1108 ; 0x801108 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:215 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - db6: 20 91 0a 11 lds r18, 0x110A ; 0x80110a -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:216 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); - dba: 90 91 0c 11 lds r25, 0x110C ; 0x80110c -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - dbe: 44 0f add r20, r20 - dc0: 41 1d adc r20, r1 -GetDeviceIdHigh(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - dc2: 44 0f add r20, r20 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:212 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - dc4: 45 27 eor r20, r21 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - dc6: 33 0f add r19, r19 - dc8: 31 1d adc r19, r1 - dca: 33 0f add r19, r19 - dcc: 31 1d adc r19, r1 -GetDeviceIdHigh(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:213 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - dce: 43 27 eor r20, r19 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - dd0: 22 95 swap r18 - dd2: 20 fb bst r18, 0 - dd4: 27 95 ror r18 - dd6: 27 f9 bld r18, 7 -GetDeviceIdHigh(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:214 -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - dd8: 42 27 eor r20, r18 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:185 -} - - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - dda: 92 95 swap r25 -GetDeviceIdHigh(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:215 - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - ddc: 49 27 eor r20, r25 -setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:76 - PinPD2[i].pin_state = ReadPin(&PinPD2[i]); - } - - - DeviceId[0] = GetDeviceIdLow(); - DeviceId[1] = GetDeviceIdHigh(); - dde: 40 93 01 3c sts 0x3C01, r20 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> -CreateCanId(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:200 - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint32_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; - de2: 90 e0 ldi r25, 0x00 ; 0 - de4: 98 2f mov r25, r24 - de6: 88 27 eor r24, r24 - de8: 09 2e mov r0, r25 - dea: 00 0c add r0, r0 - dec: aa 0b sbc r26, r26 - dee: bb 0b sbc r27, r27 - df0: 50 e0 ldi r21, 0x00 ; 0 - df2: 70 e0 ldi r23, 0x00 ; 0 - df4: 60 e0 ldi r22, 0x00 ; 0 - df6: 6f 6f ori r22, 0xFF ; 255 - df8: 7f 68 ori r23, 0x8F ; 143 - dfa: 84 2b or r24, r20 - dfc: 95 2b or r25, r21 - dfe: a6 2b or r26, r22 - e00: b7 2b or r27, r23 -SendSerialPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:128 -} - - -void SendSerialPackage() -{ - _frame.can_id = CreateCanId(0xFFFF); - e02: 80 93 30 3c sts 0x3C30, r24 ; 0x803c30 <_frame> - e06: 90 93 31 3c sts 0x3C31, r25 ; 0x803c31 <_frame+0x1> - e0a: a0 93 32 3c sts 0x3C32, r26 ; 0x803c32 <_frame+0x2> - e0e: b0 93 33 3c sts 0x3C33, r27 ; 0x803c33 <_frame+0x3> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:129 - _frame.can_dlc = 4; - e12: 84 e0 ldi r24, 0x04 ; 4 - e14: 80 93 34 3c sts 0x3C34, r24 ; 0x803c34 <_frame+0x4> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:131 - - _frame.data[0] = SoftwareVersionHigh; - e18: 81 e0 ldi r24, 0x01 ; 1 - e1a: 80 93 38 3c sts 0x3C38, r24 ; 0x803c38 <_frame+0x8> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:132 - _frame.data[1] = SoftwareVersionLow; - e1e: 10 92 39 3c sts 0x3C39, r1 ; 0x803c39 <_frame+0x9> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:133 - _frame.data[2] = HardwareVersionHigh; - e22: 82 e0 ldi r24, 0x02 ; 2 - e24: 80 93 3a 3c sts 0x3C3A, r24 ; 0x803c3a <_frame+0xa> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:134 - _frame.data[3] = HardwareVersionLow; - e28: 10 92 3b 3c sts 0x3C3B, r1 ; 0x803c3b <_frame+0xb> -sendMessage(): - e2c: 96 dd rcall .-1236 ; 0x95a -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:93 - SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); - } - - if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) - { - debugFlag ^= true; - e2e: 99 24 eor r9, r9 - e30: 93 94 inc r9 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:104 - - PinState *adressedPin; - for (int i = 0; i <= PinCount - 1; i++) - if (PinPD2[i].meyPinId == meyPinId) - { - adressedPin = &PinPD2[i]; - e32: 65 e0 ldi r22, 0x05 ; 5 - e34: 86 2e mov r8, r22 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 - setup(); - - for (;;) - { - loop(); - if (serialEventRun) serialEventRun(); - e36: 70 e0 ldi r23, 0x00 ; 0 - e38: a7 2e mov r10, r23 - e3a: 70 e0 ldi r23, 0x00 ; 0 - e3c: b7 2e mov r11, r23 -SendSwitchedTriggeredCanPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:142 - - -void SendSwitchedTriggeredCanPackage(byte pinId, int state) -{ - _frame.can_id = CreateCanId(0x050); - _frame.can_dlc = 2; - e3e: e2 e0 ldi r30, 0x02 ; 2 - e40: 7e 2e mov r7, r30 -setNormalMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 - e42: 33 e0 ldi r19, 0x03 ; 3 - e44: c3 2e mov r12, r19 - e46: 3c e3 ldi r19, 0x3C ; 60 - e48: d3 2e mov r13, r19 -CheckPinStatus(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:221 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -bool CheckPinStatus(PinState * state) -{ - if (!state->is_input) - e4a: f6 01 movw r30, r12 - e4c: 83 81 ldd r24, Z+3 ; 0x03 - e4e: 88 23 and r24, r24 - e50: c1 f1 breq .+112 ; 0xec2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:224 - return false; - - bool newValue = ReadPin(state); - e52: c6 01 movw r24, r12 - e54: 31 db rcall .-2462 ; 0x4b8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:227 - - - if (newValue != state->pin_state) - e56: f6 01 movw r30, r12 - e58: 92 81 ldd r25, Z+2 ; 0x02 - e5a: 89 17 cp r24, r25 - e5c: 91 f1 breq .+100 ; 0xec2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:229 - { - delay(10); - e5e: 6a e0 ldi r22, 0x0A ; 10 - e60: 70 e0 ldi r23, 0x00 ; 0 - e62: 80 e0 ldi r24, 0x00 ; 0 - e64: 90 e0 ldi r25, 0x00 ; 0 - e66: fc da rcall .-2568 ; 0x460 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:230 - newValue = ReadPin(state); - e68: c6 01 movw r24, r12 - e6a: 26 db rcall .-2484 ; 0x4b8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:231 - if (newValue != state->pin_state) - e6c: f6 01 movw r30, r12 - e6e: 92 81 ldd r25, Z+2 ; 0x02 - e70: 89 17 cp r24, r25 - e72: 39 f1 breq .+78 ; 0xec2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:233 - { - state->pin_state = newValue; - e74: 82 83 std Z+2, r24 ; 0x02 -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:88 -void loop() -{ - for (int i = 0; i <= PinCount - 1; i++) - { - if (CheckPinStatus(&PinPD2[i])) - SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); - e76: 94 81 ldd r25, Z+4 ; 0x04 -CreateCanId(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:200 - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint32_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; - e78: 40 91 00 3c lds r20, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> - e7c: 50 e0 ldi r21, 0x00 ; 0 - e7e: 54 2f mov r21, r20 - e80: 44 27 eor r20, r20 - e82: 05 2e mov r0, r21 - e84: 00 0c add r0, r0 - e86: 66 0b sbc r22, r22 - e88: 77 0b sbc r23, r23 - e8a: 20 90 01 3c lds r2, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - e8e: 31 2c mov r3, r1 - e90: 51 2c mov r5, r1 - e92: 41 2c mov r4, r1 - e94: f0 e5 ldi r31, 0x50 ; 80 - e96: 4f 2a or r4, r31 - e98: 68 94 set - e9a: 57 f8 bld r5, 7 - e9c: 42 29 or r20, r2 - e9e: 53 29 or r21, r3 - ea0: 64 29 or r22, r4 - ea2: 75 29 or r23, r5 -SendSwitchedTriggeredCanPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:141 -} - - -void SendSwitchedTriggeredCanPackage(byte pinId, int state) -{ - _frame.can_id = CreateCanId(0x050); - ea4: 40 93 30 3c sts 0x3C30, r20 ; 0x803c30 <_frame> - ea8: 50 93 31 3c sts 0x3C31, r21 ; 0x803c31 <_frame+0x1> - eac: 60 93 32 3c sts 0x3C32, r22 ; 0x803c32 <_frame+0x2> - eb0: 70 93 33 3c sts 0x3C33, r23 ; 0x803c33 <_frame+0x3> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:142 - _frame.can_dlc = 2; - eb4: 70 92 34 3c sts 0x3C34, r7 ; 0x803c34 <_frame+0x4> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:143 - _frame.data[0] = pinId; - eb8: 90 93 38 3c sts 0x3C38, r25 ; 0x803c38 <_frame+0x8> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:144 - _frame.data[1] = state; - ebc: 80 93 39 3c sts 0x3C39, r24 ; 0x803c39 <_frame+0x9> -sendMessage(): - ec0: 4c dd rcall .-1384 ; 0x95a - ec2: 25 e0 ldi r18, 0x05 ; 5 - ec4: c2 0e add r12, r18 - ec6: d1 1c adc r13, r1 -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:85 - - -bool debugFlag = false; -void loop() -{ - for (int i = 0; i <= PinCount - 1; i++) - ec8: c0 16 cp r12, r16 - eca: d1 06 cpc r13, r17 - ecc: 09 f0 breq .+2 ; 0xed0 - ece: bd cf rjmp .-134 ; 0xe4a -getStatus(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:140 - endSPI(); -} - -uint8_t MCP2515::getStatus(void) -{ - startSPI(); - ed0: 52 db rcall .-2396 ; 0x576 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:141 - SPI.transfer(INSTRUCTION_READ_STATUS); - ed2: 80 ea ldi r24, 0xA0 ; 160 - ed4: 01 d9 rcall .-3582 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:142 - uint8_t i = SPI.transfer(0x00); - ed6: 80 e0 ldi r24, 0x00 ; 0 - ed8: ff d8 rcall .-3586 ; 0xd8 - eda: d8 2e mov r13, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:143 - endSPI(); - edc: ec d9 rcall .-3112 ; 0x2b6 -readMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:672 -{ - ERROR rc; - uint8_t stat = getStatus(); - - if ( stat & STAT_RX0IF ) { - rc = readMessage(RXB0, frame); - ede: 90 e0 ldi r25, 0x00 ; 0 - ee0: 80 e0 ldi r24, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:671 -MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame) -{ - ERROR rc; - uint8_t stat = getStatus(); - - if ( stat & STAT_RX0IF ) { - ee2: d0 fc sbrc r13, 0 - ee4: 04 c0 rjmp .+8 ; 0xeee -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:673 - rc = readMessage(RXB0, frame); - } else if ( stat & STAT_RX1IF ) { - ee6: d1 fe sbrs r13, 1 - ee8: 35 c0 rjmp .+106 ; 0xf54 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674 - rc = readMessage(RXB1, frame); - eea: 81 e0 ldi r24, 0x01 ; 1 - eec: 90 e0 ldi r25, 0x00 ; 0 - eee: ad dc rcall .-1702 ; 0x84a -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:91 - { - if (CheckPinStatus(&PinPD2[i])) - SendSwitchedTriggeredCanPackage(PinPD2[i].meyPinId, PinPD2[i].pin_state); - } - - if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) - ef0: 89 2b or r24, r25 - ef2: 81 f5 brne .+96 ; 0xf54 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:93 - { - debugFlag ^= true; - ef4: 80 91 02 3c lds r24, 0x3C02 ; 0x803c02 - ef8: 89 25 eor r24, r9 - efa: 80 93 02 3c sts 0x3C02, r24 ; 0x803c02 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:97 - - - - int meyPinId = _frame.data[0]; - efe: 20 91 38 3c lds r18, 0x3C38 ; 0x803c38 <_frame+0x8> -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:98 - bool state = _frame.data[1] > 0; - f02: dd 24 eor r13, r13 - f04: d3 94 inc r13 - f06: 80 91 39 3c lds r24, 0x3C39 ; 0x803c39 <_frame+0x9> - f0a: 81 11 cpse r24, r1 - f0c: 01 c0 rjmp .+2 ; 0xf10 - f0e: d1 2c mov r13, r1 - f10: e3 e0 ldi r30, 0x03 ; 3 - f12: fc e3 ldi r31, 0x3C ; 60 -main(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:101 - - PinState *adressedPin; - for (int i = 0; i <= PinCount - 1; i++) - f14: 90 e0 ldi r25, 0x00 ; 0 - f16: 80 e0 ldi r24, 0x00 ; 0 -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:102 - if (PinPD2[i].meyPinId == meyPinId) - f18: 34 81 ldd r19, Z+4 ; 0x04 - f1a: 23 13 cpse r18, r19 - f1c: 84 c0 rjmp .+264 ; 0x1026 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:104 - { - adressedPin = &PinPD2[i]; - f1e: 88 9e mul r8, r24 - f20: 90 01 movw r18, r0 - f22: 89 9e mul r8, r25 - f24: 30 0d add r19, r0 - f26: 11 24 eor r1, r1 - f28: c9 01 movw r24, r18 - f2a: 8d 5f subi r24, 0xFD ; 253 - f2c: 93 4c sbci r25, 0xC3 ; 195 - f2e: 7c 01 movw r14, r24 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:110 - break; - } - - if (adressedPin != NULL) - { - if (adressedPin->is_input == true) - f30: f7 01 movw r30, r14 - f32: 83 81 ldd r24, Z+3 ; 0x03 - f34: 88 23 and r24, r24 - f36: 39 f0 breq .+14 ; 0xf46 - f38: 80 81 ld r24, Z -pinMode(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 - f3a: 89 32 cpi r24, 0x29 ; 41 - f3c: 10 f4 brcc .+4 ; 0xf42 - f3e: 61 e0 ldi r22, 0x01 ; 1 - f40: d5 d8 rcall .-3670 ; 0xec -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:113 - { - pinMode(adressedPin->pin_id, OUTPUT); - adressedPin->is_input = false; - f42: f7 01 movw r30, r14 - f44: 13 82 std Z+3, r1 ; 0x03 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:115 - } - adressedPin->pin_state = state; - f46: f7 01 movw r30, r14 - f48: d2 82 std Z+2, r13 ; 0x02 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:116 - digitalWrite(adressedPin->pin_id, state); - f4a: 80 81 ld r24, Z -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - f4c: 89 32 cpi r24, 0x29 ; 41 - f4e: 10 f4 brcc .+4 ; 0xf54 - f50: 6d 2d mov r22, r13 - f52: 73 d9 rcall .-3354 ; 0x23a -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:122 - } - - - - } - delay(20); - f54: 64 e1 ldi r22, 0x14 ; 20 - f56: 70 e0 ldi r23, 0x00 ; 0 - f58: 80 e0 ldi r24, 0x00 ; 0 - f5a: 90 e0 ldi r25, 0x00 ; 0 - f5c: 81 da rcall .-2814 ; 0x460 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 - f5e: a1 14 cp r10, r1 - f60: b1 04 cpc r11, r1 - f62: 09 f4 brne .+2 ; 0xf66 - f64: 6e cf rjmp .-292 ; 0xe42 - f66: 4c d8 rcall .-3944 ; 0x0 <__vectors> - f68: 6c cf rjmp .-296 ; 0xe42 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - f6a: 04 30 cpi r16, 0x04 ; 4 - f6c: 11 05 cpc r17, r1 - f6e: 09 f4 brne .+2 ; 0xf72 - f70: 47 c0 rjmp .+142 ; 0x1000 - f72: 08 f4 brcc .+2 ; 0xf76 - f74: 43 c0 rjmp .+134 ; 0xffc - f76: 05 30 cpi r16, 0x05 ; 5 - f78: 11 05 cpc r17, r1 - f7a: 09 f0 breq .+2 ; 0xf7e - f7c: d2 ce rjmp .-604 ; 0xd22 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567 - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - case RXF3: reg = MCP_RXF3SIDH; break; - case RXF4: reg = MCP_RXF4SIDH; break; - case RXF5: reg = MCP_RXF5SIDH; break; - f7e: 88 e1 ldi r24, 0x18 ; 24 - f80: 01 c0 rjmp .+2 ; 0xf84 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 - } - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - f82: 80 e0 ldi r24, 0x00 ; 0 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - f84: f1 e0 ldi r31, 0x01 ; 1 - f86: cf 16 cp r12, r31 - f88: d1 04 cpc r13, r1 - f8a: f1 f5 brne .+124 ; 0x1008 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - f8c: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - f8e: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - f90: 9c 8e std Y+28, r9 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - f92: 1b 8e std Y+27, r1 ; 0x1b -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574 - return ERROR_FAIL; - } - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - setRegisters(reg, tbufdata, 4); - f94: 44 e0 ldi r20, 0x04 ; 4 - f96: be 01 movw r22, r28 - f98: 65 5e subi r22, 0xE5 ; 229 - f9a: 7f 4f sbci r23, 0xFF ; 255 - f9c: ad db rcall .-2214 ; 0x6f8 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - f9e: 2f ef ldi r18, 0xFF ; 255 - fa0: c2 1a sub r12, r18 - fa2: d2 0a sbc r13, r18 - fa4: 86 e0 ldi r24, 0x06 ; 6 - fa6: c8 16 cp r12, r24 - fa8: d1 04 cpc r13, r1 - faa: 09 f0 breq .+2 ; 0xfae - fac: a4 ce rjmp .-696 ; 0xcf6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 - if (result != ERROR_OK) { - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - fae: 1f 8e std Y+31, r1 ; 0x1f - fb0: 18 a2 std Y+32, r1 ; 0x20 - fb2: 81 e0 ldi r24, 0x01 ; 1 - fb4: 90 e0 ldi r25, 0x00 ; 0 - fb6: 89 a3 std Y+33, r24 ; 0x21 - fb8: 9a a3 std Y+34, r25 ; 0x22 - fba: 8e 01 movw r16, r28 - fbc: 01 5e subi r16, 0xE1 ; 225 - fbe: 1f 4f sbci r17, 0xFF ; 255 - fc0: 5e 01 movw r10, r28 - fc2: 93 e2 ldi r25, 0x23 ; 35 - fc4: a9 0e add r10, r25 - fc6: b1 1c adc r11, r1 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - fc8: a8 e0 ldi r26, 0x08 ; 8 - fca: 9a 2e mov r9, r26 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76 - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - ERROR result = setFilterMask(masks[i], true, 0); - fcc: f8 01 movw r30, r16 - fce: c1 90 ld r12, Z+ - fd0: d1 90 ld r13, Z+ - fd2: 8f 01 movw r16, r30 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - fd4: 80 e8 ldi r24, 0x80 ; 128 - fd6: d0 db rcall .-2144 ; 0x778 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:532 -} - -MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - fd8: 89 2b or r24, r25 - fda: 09 f0 breq .+2 ; 0xfde - fdc: a2 ce rjmp .-700 ; 0xd22 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - fde: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - fe0: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - fe2: 9c 8e std Y+28, r9 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - fe4: 1b 8e std Y+27, r1 ; 0x1b -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540 - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - fe6: c1 14 cp r12, r1 - fe8: d1 04 cpc r13, r1 - fea: 99 f0 breq .+38 ; 0x1012 - fec: ca 94 dec r12 - fee: cd 28 or r12, r13 - ff0: 09 f0 breq .+2 ; 0xff4 - ff2: 97 ce rjmp .-722 ; 0xd22 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542 - case MASK0: reg = MCP_RXM0SIDH; break; - case MASK1: reg = MCP_RXM1SIDH; break; - ff4: 84 e2 ldi r24, 0x24 ; 36 - ff6: 0e c0 rjmp .+28 ; 0x1014 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - ff8: 88 e0 ldi r24, 0x08 ; 8 - ffa: c4 cf rjmp .-120 ; 0xf84 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565 - case RXF3: reg = MCP_RXF3SIDH; break; - ffc: 80 e1 ldi r24, 0x10 ; 16 - ffe: c2 cf rjmp .-124 ; 0xf84 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566 - case RXF4: reg = MCP_RXF4SIDH; break; - 1000: 84 e1 ldi r24, 0x14 ; 20 - 1002: c0 cf rjmp .-128 ; 0xf84 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563 - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - 1004: 84 e0 ldi r24, 0x04 ; 4 - 1006: be cf rjmp .-132 ; 0xf84 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - 1008: 1b 8e std Y+27, r1 ; 0x1b -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - 100a: 1c 8e std Y+28, r1 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - 100c: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - 100e: 1d 8e std Y+29, r1 ; 0x1d - 1010: c1 cf rjmp .-126 ; 0xf94 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541 - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - case MASK0: reg = MCP_RXM0SIDH; break; - 1012: 80 e2 ldi r24, 0x20 ; 32 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 - case MASK1: reg = MCP_RXM1SIDH; break; - default: - return ERROR_FAIL; - } - - setRegisters(reg, tbufdata, 4); - 1014: 44 e0 ldi r20, 0x04 ; 4 - 1016: be 01 movw r22, r28 - 1018: 65 5e subi r22, 0xE5 ; 229 - 101a: 7f 4f sbci r23, 0xFF ; 255 - 101c: 6d db rcall .-2342 ; 0x6f8 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - 101e: 0a 15 cp r16, r10 - 1020: 1b 05 cpc r17, r11 - 1022: a1 f6 brne .-88 ; 0xfcc - 1024: 7e ce rjmp .-772 ; 0xd22 -loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\UPSoftware/UPSoftware.ino:101 - - int meyPinId = _frame.data[0]; - bool state = _frame.data[1] > 0; - - PinState *adressedPin; - for (int i = 0; i <= PinCount - 1; i++) - 1026: 01 96 adiw r24, 0x01 ; 1 - 1028: 35 96 adiw r30, 0x05 ; 5 - 102a: 88 30 cpi r24, 0x08 ; 8 - 102c: 91 05 cpc r25, r1 - 102e: 09 f0 breq .+2 ; 0x1032 - 1030: 73 cf rjmp .-282 ; 0xf18 - 1032: 7e cf rjmp .-260 ; 0xf30 - -00001034 <__muluhisi3>: -__muluhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:626 - 1034: 38 d0 rcall .+112 ; 0x10a6 <__umulhisi3> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:627 - 1036: a5 9f mul r26, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:628 - 1038: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:629 - 103a: b4 9f mul r27, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:630 - 103c: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:631 - 103e: a4 9f mul r26, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:632 - 1040: 80 0d add r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:633 - 1042: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:634 - 1044: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:635 - 1046: 08 95 ret - -00001048 <__ashrdi3>: -__ashrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3122 - 1048: 97 fd sbrc r25, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3123 - 104a: 10 94 com r1 - -0000104c <__lshrdi3>: -__lshrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3131 - 104c: 00 2e mov r0, r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3132 - 104e: 08 30 cpi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3133 - 1050: 98 f0 brcs .+38 ; 0x1078 <__lshrdi3+0x2c> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3134 - 1052: 08 50 subi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3135 - 1054: 23 2f mov r18, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3136 - 1056: 34 2f mov r19, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3137 - 1058: 45 2f mov r20, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3138 - 105a: 56 2f mov r21, r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3139 - 105c: 67 2f mov r22, r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3140 - 105e: 78 2f mov r23, r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3141 - 1060: 89 2f mov r24, r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3142 - 1062: 91 2d mov r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3143 - 1064: f4 cf rjmp .-24 ; 0x104e <__lshrdi3+0x2> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3144 - 1066: 15 94 asr r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3145 - 1068: 97 95 ror r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3146 - 106a: 87 95 ror r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3147 - 106c: 77 95 ror r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3148 - 106e: 67 95 ror r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3149 - 1070: 57 95 ror r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3150 - 1072: 47 95 ror r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3151 - 1074: 37 95 ror r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3152 - 1076: 27 95 ror r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3153 - 1078: 0a 95 dec r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3154 - 107a: aa f7 brpl .-22 ; 0x1066 <__lshrdi3+0x1a> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3155 - 107c: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3156 - 107e: 00 2d mov r16, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3157 - 1080: 08 95 ret - -00001082 <__cmpdi2_s8>: -__cmpdi2_s8(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2102 - 1082: 00 24 eor r0, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2103 - 1084: a7 fd sbrc r26, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2104 - 1086: 00 94 com r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2105 - 1088: 2a 17 cp r18, r26 - 108a: 30 05 cpc r19, r0 - 108c: 40 05 cpc r20, r0 - 108e: 50 05 cpc r21, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2106 - 1090: 60 05 cpc r22, r0 - 1092: 70 05 cpc r23, r0 - 1094: 80 05 cpc r24, r0 - 1096: 90 05 cpc r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2107 - 1098: 08 95 ret - -0000109a <__tablejump2__>: -__tablejump2__(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2296 - 109a: ee 0f add r30, r30 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2297 - 109c: ff 1f adc r31, r31 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2328 - 109e: 05 90 lpm r0, Z+ -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2329 - 10a0: f4 91 lpm r31, Z -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2330 - 10a2: e0 2d mov r30, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2331 - 10a4: 09 94 ijmp - -000010a6 <__umulhisi3>: -__umulhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:564 - 10a6: a2 9f mul r26, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:565 - 10a8: b0 01 movw r22, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:566 - 10aa: b3 9f mul r27, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:567 - 10ac: c0 01 movw r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:568 - 10ae: a3 9f mul r26, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:578 - 10b0: 01 d0 rcall .+2 ; 0x10b4 <__umulhisi3+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:580 - 10b2: b2 9f mul r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:581 - 10b4: 70 0d add r23, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:582 - 10b6: 81 1d adc r24, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:583 - 10b8: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:584 - 10ba: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:585 - 10bc: 08 95 ret - -000010be : -memcpy(): - 10be: fb 01 movw r30, r22 - 10c0: dc 01 movw r26, r24 - 10c2: 02 c0 rjmp .+4 ; 0x10c8 - 10c4: 01 90 ld r0, Z+ - 10c6: 0d 92 st X+, r0 - 10c8: 41 50 subi r20, 0x01 ; 1 - 10ca: 50 40 sbci r21, 0x00 ; 0 - 10cc: d8 f7 brcc .-10 ; 0x10c4 - 10ce: 08 95 ret - -000010d0 <_exit>: -exit(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 - 10d0: f8 94 cli - -000010d2 <__stop_program>: -__stop_program(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 - 10d2: ff cf rjmp .-2 ; 0x10d2 <__stop_program> diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex deleted file mode 100644 index 1c4f338..0000000 --- a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.hex +++ /dev/null @@ -1,33 +0,0 @@ -:100000004FC000005DC000005BC0000059C0000090 -:1000100057C0000055C0000053C0000051C0000090 -:100020004FC000004DC000004BC0000049C00000A0 -:1000300047C0000045C0000043C0000041C00000B0 -:100040003FC000003DC000003BC0000039C00000C0 -:1000500037C0000035C0000033C0000031C00000D0 -:100060002FC000002EC000002BC0000029C00000DF -:1000700027C0000025C0000023C0000021C00000F0 -:100080001FC000001DC000001BC0000019C0000000 -:1000900017C0000015C0000013C0000011C0000010 -:1000A00011241FBECFEFCDBFDFE3DEBF2CE3A0E006 -:1000B000BCE301C01D92A430B207E1F72AD09BC077 -:1000C0009FCF1F920F920FB60F9211248F939F9381 -:1000D000AF93BF938091003C9091013CA091023C72 -:1000E000B091033C0196A11DB11D8093003C9093FB -:1000F000013CA093023CB093033C81E08093A60AAC -:10010000BF91AF919F918F910F900FBE0F901F9055 -:10011000189588ED90E084BF90936100809102066D -:1001200086608093020680910006816080930006BD -:10013000809102068F7C8065809302061092E20512 -:1001400082E08093E40581E08093030A8EEF809340 -:10015000270A8093260A80E880932D0A80932B0A31 -:100160008093290A80932C0A80932A0A8093280A74 -:100170008BE08093000A87E08093E505E0E8FAE0F1 -:1001800037E02EEF90E885E03183248795878083E0 -:100190007096E03C4AE0F407B9F71092A10A8FE7A5 -:1001A0009EE38093AC0A9093AD0A8091A50A81608A -:1001B0008093A50A1092A00A8091A00A8160809382 -:1001C000A00A789482E08093010412E0C0E0D0E0BD -:1001D0008091000481FF06C0109305042097C1F3AD -:1001E0000FDFF6CF9FB7F894809111048860809359 -:0A01F00011049FBFF3CFF894FFCF76 -:00000001FF diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst b/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst deleted file mode 100644 index a9bc5bc..0000000 --- a/Software/UPSoftware/sketch_jun30b.ino_atmega809_16000000L.lst +++ /dev/null @@ -1,590 +0,0 @@ - -C:\Users\Martin\AppData\Local\Temp\arduino_build_659813/sketch_jun30b.ino.elf: file format elf32-avr - - -Disassembly of section .text: - -00000000 <__vectors>: -__vectors(): -../../../../../crt1/gcrt1.S:61 - 0: 4f c0 rjmp .+158 ; 0xa0 <__ctors_end> - 2: 00 00 nop -../../../../../crt1/gcrt1.S:67 - 4: 5d c0 rjmp .+186 ; 0xc0 <__bad_interrupt> - 6: 00 00 nop -../../../../../crt1/gcrt1.S:68 - 8: 5b c0 rjmp .+182 ; 0xc0 <__bad_interrupt> - a: 00 00 nop -../../../../../crt1/gcrt1.S:69 - c: 59 c0 rjmp .+178 ; 0xc0 <__bad_interrupt> - e: 00 00 nop -../../../../../crt1/gcrt1.S:70 - 10: 57 c0 rjmp .+174 ; 0xc0 <__bad_interrupt> - 12: 00 00 nop -../../../../../crt1/gcrt1.S:71 - 14: 55 c0 rjmp .+170 ; 0xc0 <__bad_interrupt> - 16: 00 00 nop -../../../../../crt1/gcrt1.S:72 - 18: 53 c0 rjmp .+166 ; 0xc0 <__bad_interrupt> - 1a: 00 00 nop -../../../../../crt1/gcrt1.S:73 - 1c: 51 c0 rjmp .+162 ; 0xc0 <__bad_interrupt> - 1e: 00 00 nop -../../../../../crt1/gcrt1.S:74 - 20: 4f c0 rjmp .+158 ; 0xc0 <__bad_interrupt> - 22: 00 00 nop -../../../../../crt1/gcrt1.S:75 - 24: 4d c0 rjmp .+154 ; 0xc0 <__bad_interrupt> - 26: 00 00 nop -../../../../../crt1/gcrt1.S:76 - 28: 4b c0 rjmp .+150 ; 0xc0 <__bad_interrupt> - 2a: 00 00 nop -../../../../../crt1/gcrt1.S:77 - 2c: 49 c0 rjmp .+146 ; 0xc0 <__bad_interrupt> - 2e: 00 00 nop -../../../../../crt1/gcrt1.S:78 - 30: 47 c0 rjmp .+142 ; 0xc0 <__bad_interrupt> - 32: 00 00 nop -../../../../../crt1/gcrt1.S:79 - 34: 45 c0 rjmp .+138 ; 0xc0 <__bad_interrupt> - 36: 00 00 nop -../../../../../crt1/gcrt1.S:80 - 38: 43 c0 rjmp .+134 ; 0xc0 <__bad_interrupt> - 3a: 00 00 nop -../../../../../crt1/gcrt1.S:81 - 3c: 41 c0 rjmp .+130 ; 0xc0 <__bad_interrupt> - 3e: 00 00 nop -../../../../../crt1/gcrt1.S:82 - 40: 3f c0 rjmp .+126 ; 0xc0 <__bad_interrupt> - 42: 00 00 nop -../../../../../crt1/gcrt1.S:83 - 44: 3d c0 rjmp .+122 ; 0xc0 <__bad_interrupt> - 46: 00 00 nop -../../../../../crt1/gcrt1.S:84 - 48: 3b c0 rjmp .+118 ; 0xc0 <__bad_interrupt> - 4a: 00 00 nop -../../../../../crt1/gcrt1.S:85 - 4c: 39 c0 rjmp .+114 ; 0xc0 <__bad_interrupt> - 4e: 00 00 nop -../../../../../crt1/gcrt1.S:86 - 50: 37 c0 rjmp .+110 ; 0xc0 <__bad_interrupt> - 52: 00 00 nop -../../../../../crt1/gcrt1.S:87 - 54: 35 c0 rjmp .+106 ; 0xc0 <__bad_interrupt> - 56: 00 00 nop -../../../../../crt1/gcrt1.S:88 - 58: 33 c0 rjmp .+102 ; 0xc0 <__bad_interrupt> - 5a: 00 00 nop -../../../../../crt1/gcrt1.S:89 - 5c: 31 c0 rjmp .+98 ; 0xc0 <__bad_interrupt> - 5e: 00 00 nop -../../../../../crt1/gcrt1.S:90 - 60: 2f c0 rjmp .+94 ; 0xc0 <__bad_interrupt> - 62: 00 00 nop -../../../../../crt1/gcrt1.S:91 - 64: 2e c0 rjmp .+92 ; 0xc2 <__vector_25> - 66: 00 00 nop -../../../../../crt1/gcrt1.S:92 - 68: 2b c0 rjmp .+86 ; 0xc0 <__bad_interrupt> - 6a: 00 00 nop -../../../../../crt1/gcrt1.S:93 - 6c: 29 c0 rjmp .+82 ; 0xc0 <__bad_interrupt> - 6e: 00 00 nop -../../../../../crt1/gcrt1.S:94 - 70: 27 c0 rjmp .+78 ; 0xc0 <__bad_interrupt> - 72: 00 00 nop -../../../../../crt1/gcrt1.S:95 - 74: 25 c0 rjmp .+74 ; 0xc0 <__bad_interrupt> - 76: 00 00 nop -../../../../../crt1/gcrt1.S:96 - 78: 23 c0 rjmp .+70 ; 0xc0 <__bad_interrupt> - 7a: 00 00 nop -../../../../../crt1/gcrt1.S:97 - 7c: 21 c0 rjmp .+66 ; 0xc0 <__bad_interrupt> - 7e: 00 00 nop -../../../../../crt1/gcrt1.S:98 - 80: 1f c0 rjmp .+62 ; 0xc0 <__bad_interrupt> - 82: 00 00 nop -../../../../../crt1/gcrt1.S:99 - 84: 1d c0 rjmp .+58 ; 0xc0 <__bad_interrupt> - 86: 00 00 nop -../../../../../crt1/gcrt1.S:100 - 88: 1b c0 rjmp .+54 ; 0xc0 <__bad_interrupt> - 8a: 00 00 nop -../../../../../crt1/gcrt1.S:101 - 8c: 19 c0 rjmp .+50 ; 0xc0 <__bad_interrupt> - 8e: 00 00 nop -../../../../../crt1/gcrt1.S:102 - 90: 17 c0 rjmp .+46 ; 0xc0 <__bad_interrupt> - 92: 00 00 nop -../../../../../crt1/gcrt1.S:103 - 94: 15 c0 rjmp .+42 ; 0xc0 <__bad_interrupt> - 96: 00 00 nop -../../../../../crt1/gcrt1.S:104 - 98: 13 c0 rjmp .+38 ; 0xc0 <__bad_interrupt> - 9a: 00 00 nop -../../../../../crt1/gcrt1.S:105 - 9c: 11 c0 rjmp .+34 ; 0xc0 <__bad_interrupt> - ... - -000000a0 <__ctors_end>: -__trampolines_start(): -../../../../../crt1/gcrt1.S:230 - a0: 11 24 eor r1, r1 -../../../../../crt1/gcrt1.S:231 - a2: 1f be out 0x3f, r1 ; 63 -../../../../../crt1/gcrt1.S:232 - a4: cf ef ldi r28, 0xFF ; 255 -../../../../../crt1/gcrt1.S:234 - a6: cd bf out 0x3d, r28 ; 61 -../../../../../crt1/gcrt1.S:236 - a8: df e3 ldi r29, 0x3F ; 63 -../../../../../crt1/gcrt1.S:237 - aa: de bf out 0x3e, r29 ; 62 - -000000ac <__do_clear_bss>: -__do_clear_bss(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 - ac: 2c e3 ldi r18, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 - ae: a0 e0 ldi r26, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 - b0: bc e3 ldi r27, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 - b2: 01 c0 rjmp .+2 ; 0xb6 <.do_clear_bss_start> - -000000b4 <.do_clear_bss_loop>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 - b4: 1d 92 st X+, r1 - -000000b6 <.do_clear_bss_start>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 - b6: a4 30 cpi r26, 0x04 ; 4 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 - b8: b2 07 cpc r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 - ba: e1 f7 brne .-8 ; 0xb4 <.do_clear_bss_loop> -.do_clear_bss_start(): -../../../../../crt1/gcrt1.S:314 - bc: 2a d0 rcall .+84 ; 0x112
-../../../../../crt1/gcrt1.S:315 - be: 9b c0 rjmp .+310 ; 0x1f6 <_exit> - -000000c0 <__bad_interrupt>: -__vector_38(): -../../../../../crt1/gcrt1.S:209 - c0: 9f cf rjmp .-194 ; 0x0 <__vectors> - -000000c2 <__vector_25>: -__vector_25(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:74 -#elif defined(MILLIS_USE_TIMERB2) -ISR(TCB2_INT_vect) -#else // fallback or defined(MILLIS_USE_TIMERB3) -ISR(TCB3_INT_vect) -#endif -{ - c2: 1f 92 push r1 - c4: 0f 92 push r0 - c6: 0f b6 in r0, 0x3f ; 63 - c8: 0f 92 push r0 - ca: 11 24 eor r1, r1 - cc: 8f 93 push r24 - ce: 9f 93 push r25 - d0: af 93 push r26 - d2: bf 93 push r27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:75 - timer_millis++; - d4: 80 91 00 3c lds r24, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> - d8: 90 91 01 3c lds r25, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - dc: a0 91 02 3c lds r26, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - e0: b0 91 03 3c lds r27, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> - e4: 01 96 adiw r24, 0x01 ; 1 - e6: a1 1d adc r26, r1 - e8: b1 1d adc r27, r1 - ea: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> - ee: 90 93 01 3c sts 0x3C01, r25 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - f2: a0 93 02 3c sts 0x3C02, r26 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - f6: b0 93 03 3c sts 0x3C03, r27 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:78 - - /* Clear flag */ - _timer->INTFLAGS = TCB_CAPT_bm; - fa: 81 e0 ldi r24, 0x01 ; 1 - fc: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 <__RODATA_PM_OFFSET__+0x7fcaa6> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:79 -} - 100: bf 91 pop r27 - 102: af 91 pop r26 - 104: 9f 91 pop r25 - 106: 8f 91 pop r24 - 108: 0f 90 pop r0 - 10a: 0f be out 0x3f, r0 ; 63 - 10c: 0f 90 pop r0 - 10e: 1f 90 pop r1 - 110: 18 95 reti - -00000112
: -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:355 -#if (F_CPU == 20000000L) - /* No division on clock */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, 0x00); -#elif (F_CPU == 16000000L) - /* No division on clock */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, 0x00); - 112: 88 ed ldi r24, 0xD8 ; 216 - 114: 90 e0 ldi r25, 0x00 ; 0 - 116: 84 bf out 0x34, r24 ; 52 - 118: 90 93 61 00 sts 0x0061, r25 ; 0x800061 <__RODATA_PM_OFFSET__+0x7fc061> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:388 - /* ADC clock between 50-200 kHz */ - -#if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 16000000L) // 16 MHz / 128 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; - 11c: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> - 120: 86 60 ori r24, 0x06 ; 6 - 122: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:402 -#else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2 - ADC0.CTRLC |= ADC_PRESC_DIV2_gc; -#endif - - /* Enable ADC */ - ADC0.CTRLA |= ADC_ENABLE_bm; - 126: 80 91 00 06 lds r24, 0x0600 ; 0x800600 <__RODATA_PM_OFFSET__+0x7fc600> - 12a: 81 60 ori r24, 0x01 ; 1 - 12c: 80 93 00 06 sts 0x0600, r24 ; 0x800600 <__RODATA_PM_OFFSET__+0x7fc600> -analogReference(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_analog.c:35 -{ - switch (mode) - { - case EXTERNAL: - case VDD: - ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely... - 130: 80 91 02 06 lds r24, 0x0602 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> - 134: 8f 7c andi r24, 0xCF ; 207 - 136: 80 65 ori r24, 0x50 ; 80 - 138: 80 93 02 06 sts 0x0602, r24 ; 0x800602 <__RODATA_PM_OFFSET__+0x7fc602> -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:407 - analogReference(VDD); - -#endif - - PORTMUX.USARTROUTEA = 0; - 13c: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 <__RODATA_PM_OFFSET__+0x7fc5e2> -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:446 -void setup_timers() -{ - // TYPE A TIMER - - // PORTMUX setting for TCA (defined in pins_arduino.h) - PORTMUX.TCAROUTEA = TCA0_PINS; - 140: 82 e0 ldi r24, 0x02 ; 2 - 142: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 <__RODATA_PM_OFFSET__+0x7fc5e4> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:449 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - 146: 81 e0 ldi r24, 0x01 ; 1 - 148: 80 93 03 0a sts 0x0A03, r24 ; 0x800a03 <__RODATA_PM_OFFSET__+0x7fca03> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:453 - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - 14c: 8e ef ldi r24, 0xFE ; 254 - 14e: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 <__RODATA_PM_OFFSET__+0x7fca27> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:452 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - 152: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 <__RODATA_PM_OFFSET__+0x7fca26> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:461 - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE; - 156: 80 e8 ldi r24, 0x80 ; 128 - 158: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d <__RODATA_PM_OFFSET__+0x7fca2d> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:460 - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - 15c: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b <__RODATA_PM_OFFSET__+0x7fca2b> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:459 - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - 160: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 <__RODATA_PM_OFFSET__+0x7fca29> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:458 - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - 164: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c <__RODATA_PM_OFFSET__+0x7fca2c> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:457 - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - 168: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a <__RODATA_PM_OFFSET__+0x7fca2a> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:456 - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - 16c: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 <__RODATA_PM_OFFSET__+0x7fca28> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:474 -#elif F_CPU <= 8000000L - // Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm); -#else - // Use DIV64 prescaler (giving 250kHz clock on 16MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV64_gc) | (TCA_SPLIT_ENABLE_bm); - 170: 8b e0 ldi r24, 0x0B ; 11 - 172: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 <__RODATA_PM_OFFSET__+0x7fca00> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:480 -#endif - - // TYPE B TIMERS - - // Set up routing (defined in pins_arduino.h) - PORTMUX.TCBROUTEA = 0 - 176: 87 e0 ldi r24, 0x07 ; 7 - 178: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 <__RODATA_PM_OFFSET__+0x7fc5e5> -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:496 - | TCB3_PINS -#endif - ; - - // Start with TCB0 - TCB_t *timer_B = (TCB_t *)&TCB0; - 17c: e0 e8 ldi r30, 0x80 ; 128 - 17e: fa e0 ldi r31, 0x0A ; 10 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - 180: 37 e0 ldi r19, 0x07 ; 7 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - 182: 2e ef ldi r18, 0xFE ; 254 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - 184: 90 e8 ldi r25, 0x80 ; 128 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - 186: 85 e0 ldi r24, 0x05 ; 5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - 188: 31 83 std Z+1, r19 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - 18a: 24 87 std Z+12, r18 ; 0x0c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - 18c: 95 87 std Z+13, r25 ; 0x0d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - 18e: 80 83 st Z, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:528 - //|(TCB_SYNCUPD_bm) - | (TCB_ENABLE_bm); - - // Increment pointer to next TCB instance - timer_B++; - 190: 70 96 adiw r30, 0x10 ; 16 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:531 - - // Stop when pointing to TCB3 - } while (timer_B <= timer_B_end); - 192: e0 3c cpi r30, 0xC0 ; 192 - 194: 4a e0 ldi r20, 0x0A ; 10 - 196: f4 07 cpc r31, r20 - 198: b9 f7 brne .-18 ; 0x188 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:416 - /********************* TCB for system time tracking **************************/ - - // BUG: we can compensate for F_CPU by fine tuning value of TIME_TRACKING_TIMER_COUNT - - /* Select vanilla 16 bit periodic interrupt mode */ - _timer->CTRLB = TCB_CNTMODE_INT_gc; - 19a: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 <__RODATA_PM_OFFSET__+0x7fcaa1> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:419 - - /* TOP value for overflow every N clock cycles */ - _timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1; - 19e: 8f e7 ldi r24, 0x7F ; 127 - 1a0: 9e e3 ldi r25, 0x3E ; 62 - 1a2: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac <__RODATA_PM_OFFSET__+0x7fcaac> - 1a6: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad <__RODATA_PM_OFFSET__+0x7fcaad> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:422 - - /* Enable TCB interrupt */ - _timer->INTCTRL |= TCB_CAPT_bm; - 1aa: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 <__RODATA_PM_OFFSET__+0x7fcaa5> - 1ae: 81 60 ori r24, 0x01 ; 1 - 1b0: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 <__RODATA_PM_OFFSET__+0x7fcaa5> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:426 - - /* Clock selection is F_CPU/N -- which is independent of TCA */ -#if TIME_TRACKING_TIMER_DIVIDER == 1 - _timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */ - 1b4: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:434 -#else -#assert "TIME_TRACKING_TIMER_DIVIDER not supported" -#endif - - /* Enable & start */ - _timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */ - 1b8: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> - 1bc: 81 60 ori r24, 0x01 ; 1 - 1be: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 <__RODATA_PM_OFFSET__+0x7fcaa0> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:438 - - /*************************** ENABLE GLOBAL INTERRUPTS *************************/ - - sei(); - 1c2: 78 94 sei -pinMode(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:43 - return; - - if (mode == OUTPUT) - { - /* Configure direction as output */ - port->DIRSET = bit_mask; - 1c4: 82 e0 ldi r24, 0x02 ; 2 - 1c6: 80 93 01 04 sts 0x0401, r24 ; 0x800401 <__RODATA_PM_OFFSET__+0x7fc401> -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:167 - port->OUTTGL = bit_mask; - /* If HIGH OR > TOGGLE */ - } - else - { - port->OUTSET = bit_mask; - 1ca: 12 e0 ldi r17, 0x02 ; 2 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:43 - setup(); - - for (;;) - { - loop(); - if (serialEventRun) serialEventRun(); - 1cc: c0 e0 ldi r28, 0x00 ; 0 - 1ce: d0 e0 ldi r29, 0x00 ; 0 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:153 - - /* Get port */ - PORT_t *port = digitalPinToPortStruct(pin); - - /* Output direction */ - if (port->DIR & bit_mask) - 1d0: 80 91 00 04 lds r24, 0x0400 ; 0x800400 <__RODATA_PM_OFFSET__+0x7fc400> - 1d4: 81 ff sbrs r24, 1 - 1d6: 06 c0 rjmp .+12 ; 0x1e4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:167 - port->OUTTGL = bit_mask; - /* If HIGH OR > TOGGLE */ - } - else - { - port->OUTSET = bit_mask; - 1d8: 10 93 05 04 sts 0x0405, r17 ; 0x800405 <__RODATA_PM_OFFSET__+0x7fc405> -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:43 - 1dc: 20 97 sbiw r28, 0x00 ; 0 - 1de: c1 f3 breq .-16 ; 0x1d0 - 1e0: 0f df rcall .-482 ; 0x0 <__vectors> - 1e2: f6 cf rjmp .-20 ; 0x1d0 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:186 - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - 1e4: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:187 - cli(); - 1e6: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:197 - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 1e8: 80 91 11 04 lds r24, 0x0411 ; 0x800411 <__RODATA_PM_OFFSET__+0x7fc411> - 1ec: 88 60 ori r24, 0x08 ; 8 - 1ee: 80 93 11 04 sts 0x0411, r24 ; 0x800411 <__RODATA_PM_OFFSET__+0x7fc411> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:201 - } - - /* Restore system status */ - SREG = status; - 1f2: 9f bf out 0x3f, r25 ; 63 - 1f4: f3 cf rjmp .-26 ; 0x1dc - -000001f6 <_exit>: -exit(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 - 1f6: f8 94 cli - -000001f8 <__stop_program>: -__stop_program(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 - 1f8: ff cf rjmp .-2 ; 0x1f8 <__stop_program> diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex deleted file mode 100644 index 6bc7ffe..0000000 --- a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.hex +++ /dev/null @@ -1,221 +0,0 @@ -:1000000050C0000068C0000066C0000064C000006E -:1000100062C0000060C000005EC000005CC0000064 -:100020005AC0000058C0000056C0000054C0000074 -:1000300052C0000050C000004EC000004CC0000084 -:100040004AC0000048C0000046C0000044C0000094 -:1000500042C0000040C000003EC000003CC00000A4 -:100060003AC0000069C3000036C0000034C0000080 -:1000700032C0000030C000002EC000002CC00000C4 -:100080002AC0000028C0000026C0000024C00000D4 -:1000900022C0000020C000001EC000001CC00000E4 -:1000A000C40311241FBECFEFCDBFDFE3DEBF2CE3BF -:1000B000A0E0BCE301C01D92A838B207E1F710E050 -:1000C000C1E5D0E003C02197FE01F8D5C035D107C6 -:1000D000D1F7B9D30EC694CF00008093C4088091A5 -:1000E000C30887FFFCCF8091C4080895282F30E013 -:1000F000F901ED57F24B40814F3F09F450C089326E -:1001000058F4F901E85FF24BE081EE2329F0E13089 -:1001100099F010F0E63020F1F901E65AF24BE08157 -:10012000A0E2EA9FF0011124FC5F8081842321F189 -:10013000611120C046830895F901EF5CF24B5081B4 -:10014000533008F05F5F7091010A81E090E001C0D8 -:10015000880F5A95EAF7809587238093010ADCCFB0 -:1001600080E1E89FF0011124E05AF54F81818F7EF4 -:100170008183D2CF458308952F5C324BD9018C9176 -:10018000309771F08F3F61F07096E80FF11D9FB7C7 -:10019000F8948081611107C0877F80839FBF089595 -:1001A000F0E0E0E0F4CF8860F8CF8F929F92AF92BA -:1001B000BF92CF92DF92EF92FF920F93CF93DF9394 -:1001C0008091853C893210F461E090DF80911C3C85 -:1001D000882319F081FF0DC07894DF91CF910F91A2 -:1001E000FF90EF90DF90CF90BF90AF909F908F9057 -:1001F000089580FFF2CF80901E3C90901F3CA0900D -:10020000203CB090213CC12CD12C7601E0E094013F -:10021000A501B601C701A0E045D581F1217030E00C -:1002200040E050E060E070E080E090E03BD5D1F04D -:10023000B0E0A0E0E03370F4AE2FA695A695A695A9 -:1002400080E2A89FD0011124A05FBB4F8E2F877042 -:10025000A80FB11DCE2FD0E0CA5ED34C88899C91E7 -:10026000892B8C939401A501B601C70101E0FFD44D -:1002700049015A016B017C01EF5FC9CF8090223C9C -:100280009090233CA090243CB090253CC12CD12CD4 -:100290007601E0E29401A501B601C701A0E002D514 -:1002A00009F49BCF217030E040E050E060E070E066 -:1002B00080E090E0F7D4D1F0B0E0A0E0E03370F45B -:1002C000AE2FA695A695A69580E2A89FD0011124F1 -:1002D000A05FBB4F8E2F8770A80FB11DCE2FD0E02F -:1002E000CA5ED34C88899C91892B8C939401A5017B -:1002F000B601C70101E0BBD449015A016B017C0181 -:10030000EF5FC8CFCF93DF9390E0FC01ED57F24B46 -:1003100020812F3F61F0FC01E65AF24BE08130E290 -:10032000E39FF0011124FC5F613021F42183DF9110 -:10033000CF9108958F5C924BEC01A881AF3F69F09B -:10034000CF014096A80FB92FB11D9FB7F894228313 -:100350008C9188608C939FBFEACFB0E0A0E0F5CF8E -:1003600080911B3C811117C010921C3C10921D3CC7 -:1003700010921E3C10921F3C1092203C1092213C87 -:100380001092223C1092233C1092243C1092253C67 -:1003900081E080931B3C8091E3058C7F90911A3C17 -:1003A000892B8093E305911119C061E084E0AADFF5 -:1003B00061E086E0A7DF8091C10884608093C10876 -:1003C0008091C00881628093C0089091143C809114 -:1003D000153C9093C0088093C1080895913031F482 -:1003E00061E08EE08FDF61E080E1E4CF923019F7C9 -:1003F00061E08EE187DF61E080E2DCCF8FB7F894C7 -:100400002091103C3091113C4091123C5091133C92 -:10041000E091AA0AF091AB0A9091A60A90FF08C059 -:100420002F5F3F4F4F4F5F4FE091AA0AF091AB0A09 -:100430008FBFA8EEB3E00FD423E0F695E7952A9599 -:10044000E1F76E0F7F1F811D911D08958F929F927E -:10045000AF92BF92CF92DF92EF92FF924B015C017D -:10046000CDDF6B017C01A8EEB3E0A5019401F3D3CD -:10047000C60ED71EE81EF91EC616D706E806F906F0 -:1004800010F4BCDFF9CFBADF6C157D058E059F0532 -:10049000D0F3FF90EF90DF90CF90BF90AF909F9000 -:1004A0008F9008958F929F92AF92BF92CF92DF92DA -:1004B000EF92FF920F93CF93DF9380911C3C8823A0 -:1004C00019F081FF19C0F89481E38093C00884E09B -:1004D0008093C1088091853C893208F098C060E023 -:1004E000DF91CF910F91FF90EF90DF90CF90BF9071 -:1004F000AF909F908F90FACD80FFE6CF80901E3C0A -:1005000090901F3CA090203CB090213CC12CD12C5D -:100510007601E0E09401A501B601C701A0E0C2D3D5 -:1005200089F1217030E040E050E060E070E080E070 -:1005300090E0B8D3D9F0B0E0A0E0E03370F4AE2F93 -:10054000A695A695A69580E2A89FD0011124A05F4C -:10055000BB4F8E2F8770A80FB11DCE2FD0E08C918E -:10056000CA5ED34C888B8C91887F8C939401A501B3 -:10057000B601C70101E07BD349015A016B017C013F -:10058000EF5FC8CF8090223C9090233CA090243C09 -:10059000B090253CC12CD12C7601E0E29401A5015C -:1005A000B601C701A0E07ED309F48ECF217030E000 -:1005B00040E050E060E070E080E090E073D3D9F07C -:1005C000B0E0A0E0E03370F4AE2FA695A695A69516 -:1005D00080E2A89FD0011124A05FBB4F8E2F8770AF -:1005E000A80FB11DCE2FD0E08C91CA5ED34C888B62 -:1005F0008C91887F8C939401A501B601C70101E01D -:1006000036D349015A016B017C01EF5FC7CFDF91FF -:10061000CF910F91FF90EF90DF90CF90BF90AF9070 -:100620009F908F900895CF93C82F3CDF83E054DDD7 -:100630008C2F52DD80E050DDC82FB7DD8C2FCF919D -:100640000895FF920F931F93CF93DF93C82FF62E39 -:10065000172F042F27DF82E03FDD8C2F3DDDCF2DCC -:10066000D12F0C0F1D2F111DC017D10719F0899123 -:1006700033DDFACFDF91CF911F910F91FF9095CD90 -:100680001F93CF93DF93182FD62FC42F0BDF85E056 -:1006900023DD812F21DD8D2F1FDD8C2F1DDDDF91CF -:1006A000CF911F9182CDCF92DF92EF92FF92CF93A5 -:1006B000C82F482F60EE8FE0E3DF8FB7F894C0902B -:1006C000103CD090113CE090123CF090133C8FBF56 -:1006D0008AE0C80ED11CE11CF11C2FB7F894809160 -:1006E000103C9091113CA091123CB091133C2FBF53 -:1006F0008C159D05AE05BF0578F48EE094DF807EF5 -:10070000C813EBCF81E091E0892790E0CF91FF9073 -:10071000EF90DF90CF90089580E0F5CFCF93DF93F7 -:10072000D82FC62FBFDE82E0D7DC8D2FD5DC8C2FF3 -:10073000D3DCDF91CF9139CD1F920F920FB60F927C -:1007400011248F939F93AF93BF938091103C90910E -:10075000113CA091123CB091133C0196A11DB11D1A -:100760008093103C9093113CA093123CB093133CA7 -:1007700081E08093A60ABF91AF919F918F910F90D6 -:100780000FBE0F901F901895CF93DF93E4E1FCE329 -:10079000C4E0C18381E38083E6E1FCE31582148237 -:1007A000DFDDD3E0D093853C61E083E0ABDDFDDCB1 -:1007B000E5E5FCE385E190E080839183128213827A -:1007C00081E08483858326E130E0268337831086A9 -:1007D0001186828792E0938727E130E0248735876E -:1007E00016861786808BD18B28E130E0228B338BE5 -:1007F000148A158A868BC78B2CE130E0208F318FCD -:10080000128E138E848F95E0958F2BE130E0268F2A -:10081000378F10A211A282A396E093A32AE130E0C1 -:1008200024A335A316A217A280A797E091A729E1D8 -:1008300030E022A733A714A615A686A788E087A7CD -:10084000DF91CF910895CF93DF93CDB7DEB7A9970E -:10085000CDBFDEBF91E088ED84BF909361008091B1 -:100860000206856080930206809100068160809375 -:100870000006809102068F7C8065809302061092AC -:10088000E20582E08093E4059093030A8EEF809363 -:10089000270A8093260A80E880932D0A80932B0AEA -:1008A0008093290A80932C0A80932A0A8093280A2D -:1008B00089E08093000A87E08093E505E0E8FAE0AC -:1008C00037E02EEF90E885E0318324879587808399 -:1008D0007096E03C4AE0F407B9F71092A10A8FE362 -:1008E0009FE18093AC0A9093AD0A8091A50A816044 -:1008F0008093A50A1092A00A8091A00A816080933B -:10090000A00A78942DDD80916000806890E028ED49 -:1009100024BF80936000C6DD80ECDEDB46DC6AE04D -:1009200070E080E090E092DDCE0101967C018EE0E7 -:10093000D7011D928A95E9F74EE0B70180E381DE89 -:100940004EE0B70180E47DDE4EE0B70180E579DE60 -:1009500060E080E6E3DE60E080E7E0DE63EA8BE211 -:10096000DDDE44E067E680E68BDE41E067E680E7B7 -:1009700087DE8CE0E6EFFCE4DE011F9601900D922D -:100980008A95E1F74E01BFE08B0E911CD12CC12C52 -:10099000A82C99A698E0B92EF401019111914F016C -:1009A00080E881DE892B61F40230110509F47BC0F7 -:1009B000A0F501151105E1F10130110509F479C027 -:1009C00080E871DE892B49F460E08AE2A7DE60E905 -:1009D00089E2A4DE62E888E2A1DE80E064DE60ED08 -:1009E00077E080E090E032DDA5E5CA2EACE3DA2EB8 -:1009F000412C512C32014394FE017596EBA3FCA3CC -:100A0000FFE6CF16FDE3DF0609F064C000E010E06A -:100A100001151105E9F3F4DAFBCF0430110509F4EF -:100A200046C008F442C00530110551F688E101C006 -:100A300080E0F1E0CF16D104F1F51E8E1D8EBC8E44 -:100A40001B8E44E0BE01655E7F4FFBDD4FEFC41A95 -:100A5000D40A86E0C816D10409F09ECF1F8E18A2D2 -:100A600081E090E089A39AA38E01015E1F4F6E0181 -:100A700093E2C90ED11C88E0B82ED8018D909D90CC -:100A80008D0180E810DE892B09F09ACF1E8E1D8E15 -:100A9000BC8E1B8E8114910499F08A94892809F0E8 -:100AA0008FCF84E20EC088E0C4CF80E1C2CF84E162 -:100AB000C0CF84E0BECF1B8E1C8E1E8E1D8EC1CF7C -:100AC00080E244E0BE01655E7F4FBBDDC016D1060B -:100AD000A1F676CF4092003C5092013C6092023CDD -:100AE0007092033C44E04093043C87E48093083CCC -:100AF00091E19093093CA8E0A0930A3CB5E1B09342 -:100B00000B3C86E0E2E0FDE4DE011F9601900D92D1 -:100B10008A95E1F70A2D19A5F801819091908F012E -:100B20001401220C331CF101E80DF91DE455F24BC0 -:100B3000B0808B2D78DD83FD87C01091043C193087 -:100B400008F063C04091003C5091013C6091023C30 -:100B50007091033CDB01CA018827B7FD8395992773 -:100B6000AA27BB27282FDB01CA0188279927AA2794 -:100B7000B0748DA39EA3AFA3B8A78FEF9FEFAFEF85 -:100B8000BFE1211104C08FEF97E0A0E0B0E0842323 -:100B90009523A623B723222309F446C08C839B8385 -:100BA000CD01AA27BB27282F220F220F220F207E3C -:100BB000382F33703860232B2A8335E0969587953C -:100BC0003A95E1F789838DA19EA1AFA1B8A5892BA4 -:100BD0008A2B8B2BB9F1812F80648D83412F50E0BC -:100BE00068E07CE3CE0106967BD045E0410FF10141 -:100BF000E80DF91DE455F24BB701818122DD48E093 -:100C000068E08B2D3DDD8B2D0EDD68EE73E080E01E -:100C100090E01CDCF6018081893210F462E072DB26 -:100C2000F6E0CF0ED11CECCE9C0193E036952795D3 -:100C30009A95E1F729838295880F807E8A831C82AA -:100C40001B82C1CF812FC9CFABA1BCA10A171B0743 -:100C500009F062CFDACF38D0A59F900DB49F900DE8 -:100C6000A49F800D911D1124089597FD1094002ECE -:100C7000083098F00850232F342F452F562F672F18 -:100C8000782F892F912DF4CF159497958795779587 -:100C9000679557954795379527950A95AAF7112493 -:100CA000002D08950024A7FD00942A173005400563 -:100CB000500560057005800590050895EE0FFF1F33 -:100CC0000590F491E02D0994A29FB001B39FC0015B -:100CD000A39F01D0B29F700D811D1124911D089515 -:100CE000FB01DC0102C001900D9241505040D8F749 -:060CF0000895F894FFCF07 -:100CF60000000100020003000400050000000100DE -:100D060002000000000000000000000000000005D6 -:100D160001010101010100000000000000000000C7 -:100D260000000000000000000203000001020304AE -:100D36000506070001020304050001020304050677 -:100D46000700010203040506070001020300010271 -:100D56000304050600000000000000000101010177 -:100D66000101020202020202020203030303030359 -:100D7600030304040404050505050505050102042D -:100D86000810204080010204081020010204081007 -:100D9600204080010204081020408001020408015E -:0F0DA6000204081020403031364041465051566B -:00000001FF diff --git a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst b/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst deleted file mode 100644 index 8b4b796..0000000 --- a/Software/UPSoftware/sketch_jun30b.ino_atmega809_8000000L.lst +++ /dev/null @@ -1,3265 +0,0 @@ - -C:\Users\Martin\AppData\Local\Temp\arduino_build_23468/sketch_jun30b.ino.elf: file format elf32-avr - - -Disassembly of section .text: - -00000000 <__vectors>: -__vectors(): -../../../../../crt1/gcrt1.S:61 - 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> - 2: 00 00 nop -../../../../../crt1/gcrt1.S:67 - 4: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt> - 6: 00 00 nop -../../../../../crt1/gcrt1.S:68 - 8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt> - a: 00 00 nop -../../../../../crt1/gcrt1.S:69 - c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt> - e: 00 00 nop -../../../../../crt1/gcrt1.S:70 - 10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt> - 12: 00 00 nop -../../../../../crt1/gcrt1.S:71 - 14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt> - 16: 00 00 nop -../../../../../crt1/gcrt1.S:72 - 18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt> - 1a: 00 00 nop -../../../../../crt1/gcrt1.S:73 - 1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt> - 1e: 00 00 nop -../../../../../crt1/gcrt1.S:74 - 20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt> - 22: 00 00 nop -../../../../../crt1/gcrt1.S:75 - 24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt> - 26: 00 00 nop -../../../../../crt1/gcrt1.S:76 - 28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt> - 2a: 00 00 nop -../../../../../crt1/gcrt1.S:77 - 2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt> - 2e: 00 00 nop -../../../../../crt1/gcrt1.S:78 - 30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt> - 32: 00 00 nop -../../../../../crt1/gcrt1.S:79 - 34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt> - 36: 00 00 nop -../../../../../crt1/gcrt1.S:80 - 38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt> - 3a: 00 00 nop -../../../../../crt1/gcrt1.S:81 - 3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt> - 3e: 00 00 nop -../../../../../crt1/gcrt1.S:82 - 40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt> - 42: 00 00 nop -../../../../../crt1/gcrt1.S:83 - 44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt> - 46: 00 00 nop -../../../../../crt1/gcrt1.S:84 - 48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt> - 4a: 00 00 nop -../../../../../crt1/gcrt1.S:85 - 4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt> - 4e: 00 00 nop -../../../../../crt1/gcrt1.S:86 - 50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt> - 52: 00 00 nop -../../../../../crt1/gcrt1.S:87 - 54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt> - 56: 00 00 nop -../../../../../crt1/gcrt1.S:88 - 58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt> - 5a: 00 00 nop -../../../../../crt1/gcrt1.S:89 - 5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt> - 5e: 00 00 nop -../../../../../crt1/gcrt1.S:90 - 60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt> - 62: 00 00 nop -../../../../../crt1/gcrt1.S:91 - 64: 69 c3 rjmp .+1746 ; 0x738 <__vector_25> - 66: 00 00 nop -../../../../../crt1/gcrt1.S:92 - 68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt> - 6a: 00 00 nop -../../../../../crt1/gcrt1.S:93 - 6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt> - 6e: 00 00 nop -../../../../../crt1/gcrt1.S:94 - 70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt> - 72: 00 00 nop -../../../../../crt1/gcrt1.S:95 - 74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt> - 76: 00 00 nop -../../../../../crt1/gcrt1.S:96 - 78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt> - 7a: 00 00 nop -../../../../../crt1/gcrt1.S:97 - 7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt> - 7e: 00 00 nop -../../../../../crt1/gcrt1.S:98 - 80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt> - 82: 00 00 nop -../../../../../crt1/gcrt1.S:99 - 84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt> - 86: 00 00 nop -../../../../../crt1/gcrt1.S:100 - 88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt> - 8a: 00 00 nop -../../../../../crt1/gcrt1.S:101 - 8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt> - 8e: 00 00 nop -../../../../../crt1/gcrt1.S:102 - 90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt> - 92: 00 00 nop -../../../../../crt1/gcrt1.S:103 - 94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt> - 96: 00 00 nop -../../../../../crt1/gcrt1.S:104 - 98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt> - 9a: 00 00 nop -../../../../../crt1/gcrt1.S:105 - 9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt> - ... - -000000a0 <__ctors_start>: -__trampolines_start(): - a0: c4 03 fmuls r20, r20 - -000000a2 <__ctors_end>: -__dtors_end(): -../../../../../crt1/gcrt1.S:230 - a2: 11 24 eor r1, r1 -../../../../../crt1/gcrt1.S:231 - a4: 1f be out 0x3f, r1 ; 63 -../../../../../crt1/gcrt1.S:232 - a6: cf ef ldi r28, 0xFF ; 255 -../../../../../crt1/gcrt1.S:234 - a8: cd bf out 0x3d, r28 ; 61 -../../../../../crt1/gcrt1.S:236 - aa: df e3 ldi r29, 0x3F ; 63 -../../../../../crt1/gcrt1.S:237 - ac: de bf out 0x3e, r29 ; 62 - -000000ae <__do_clear_bss>: -__do_clear_bss(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 - ae: 2c e3 ldi r18, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 - b0: a0 e0 ldi r26, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 - b2: bc e3 ldi r27, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 - b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start> - -000000b6 <.do_clear_bss_loop>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 - b6: 1d 92 st X+, r1 - -000000b8 <.do_clear_bss_start>: -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 - b8: a8 38 cpi r26, 0x88 ; 136 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 - ba: b2 07 cpc r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 - bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop> - -000000be <__do_global_ctors>: -__do_global_ctors(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 - be: 10 e0 ldi r17, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 - c0: c1 e5 ldi r28, 0x51 ; 81 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 - c2: d0 e0 ldi r29, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 - c4: 03 c0 rjmp .+6 ; 0xcc <__do_global_ctors+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 - c6: 21 97 sbiw r28, 0x01 ; 1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 - c8: fe 01 movw r30, r28 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 - ca: f8 d5 rcall .+3056 ; 0xcbc <__tablejump2__> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 - cc: c0 35 cpi r28, 0x50 ; 80 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 - ce: d1 07 cpc r29, r17 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 - d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8> -../../../../../crt1/gcrt1.S:314 - d2: b9 d3 rcall .+1906 ; 0x846
-../../../../../crt1/gcrt1.S:315 - d4: 0e c6 rjmp .+3100 ; 0xcf2 <_exit> - -000000d6 <__bad_interrupt>: -__vector_38(): -../../../../../crt1/gcrt1.S:209 - d6: 94 cf rjmp .-216 ; 0x0 <__vectors> - -000000d8 : -_ZN8SPIClass8transferEh.constprop.25(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:304 - * The following NOP introduces a small delay that can prevent the wait - * loop from iterating when running at the maximum speed. This gives - * about 10% more speed, even if it seems counter-intuitive. At lower - * speeds it is unnoticed. - */ - asm volatile("nop"); - d8: 00 00 nop -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:306 - - SPI0.DATA = data; - da: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:307 - while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0); // wait for complete send - de: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 - e2: 87 ff sbrs r24, 7 - e4: fc cf rjmp .-8 ; 0xde -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:308 - return SPI0.DATA; // read data back - e6: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:309 -} - ea: 08 95 ret - -000000ec : -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - ec: 28 2f mov r18, r24 - ee: 30 e0 ldi r19, 0x00 ; 0 - f0: f9 01 movw r30, r18 - f2: ed 57 subi r30, 0x7D ; 125 - f4: f2 4b sbci r31, 0xB2 ; 178 - f6: 40 81 ld r20, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:138 - if (bit_mask == NOT_A_PIN) - f8: 4f 3f cpi r20, 0xFF ; 255 - fa: 09 f4 brne .+2 ; 0xfe - fc: 50 c0 rjmp .+160 ; 0x19e <__EEPROM_REGION_LENGTH__+0x9e> -turnOffPWM(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:97 -static void turnOffPWM(uint8_t pin) -{ - /* Actually turn off compare channel, not the timer */ - - /* Get pin's timer */ - uint8_t timer = digitalPinToTimer(pin); - fe: 89 32 cpi r24, 0x29 ; 41 - 100: 58 f4 brcc .+22 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18> - 102: f9 01 movw r30, r18 - 104: e8 5f subi r30, 0xF8 ; 248 - 106: f2 4b sbci r31, 0xB2 ; 178 - 108: e0 81 ld r30, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:98 - if (timer == NOT_ON_TIMER) - 10a: ee 23 and r30, r30 - 10c: 29 f0 breq .+10 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:104 - return; - - uint8_t bit_pos; - TCB_t *timerB; - - switch (timer) - 10e: e1 30 cpi r30, 0x01 ; 1 - 110: 99 f0 breq .+38 ; 0x138 <__EEPROM_REGION_LENGTH__+0x38> - 112: 10 f0 brcs .+4 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18> - 114: e6 30 cpi r30, 0x06 ; 6 - 116: 20 f1 brcs .+72 ; 0x160 <__EEPROM_REGION_LENGTH__+0x60> -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:150 - turnOffPWM(pin); - - /* Assuming the direction is already output !! */ - - /* Get port */ - PORT_t *port = digitalPinToPortStruct(pin); - 118: f9 01 movw r30, r18 - 11a: e6 5a subi r30, 0xA6 ; 166 - 11c: f2 4b sbci r31, 0xB2 ; 178 - 11e: e0 81 ld r30, Z - 120: a0 e2 ldi r26, 0x20 ; 32 - 122: ea 9f mul r30, r26 - 124: f0 01 movw r30, r0 - 126: 11 24 eor r1, r1 - 128: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:153 - - /* Output direction */ - if (port->DIR & bit_mask) - 12a: 80 81 ld r24, Z - 12c: 84 23 and r24, r20 - 12e: 21 f1 breq .+72 ; 0x178 <__EEPROM_REGION_LENGTH__+0x78> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:156 - { - /* Set output to value */ - if (val == LOW) - 130: 61 11 cpse r22, r1 - 132: 20 c0 rjmp .+64 ; 0x174 <__EEPROM_REGION_LENGTH__+0x74> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:158 - { /* If LOW */ - port->OUTCLR = bit_mask; - 134: 46 83 std Z+6, r20 ; 0x06 - 136: 08 95 ret -turnOffPWM(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:109 - switch (timer) - { - /* TCA0 */ - case TIMERA0: - /* Bit position will give output channel */ - bit_pos = digitalPinToBitPosition(pin); - 138: f9 01 movw r30, r18 - 13a: ef 5c subi r30, 0xCF ; 207 - 13c: f2 4b sbci r31, 0xB2 ; 178 - 13e: 50 81 ld r21, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:112 - - /* Disable corresponding channel */ - if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */ - 140: 53 30 cpi r21, 0x03 ; 3 - 142: 08 f0 brcs .+2 ; 0x146 <__EEPROM_REGION_LENGTH__+0x46> - 144: 5f 5f subi r21, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:113 - TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos)); - 146: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 - 14a: 81 e0 ldi r24, 0x01 ; 1 - 14c: 90 e0 ldi r25, 0x00 ; 0 - 14e: 01 c0 rjmp .+2 ; 0x152 <__EEPROM_REGION_LENGTH__+0x52> - 150: 88 0f add r24, r24 - 152: 5a 95 dec r21 - 154: ea f7 brpl .-6 ; 0x150 <__EEPROM_REGION_LENGTH__+0x50> - 156: 80 95 com r24 - 158: 87 23 and r24, r23 - 15a: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 - 15e: dc cf rjmp .-72 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:123 - case TIMERB0: - case TIMERB1: - case TIMERB2: - case TIMERB3: - - timerB = (TCB_t *)&TCB0 + (timer - TIMERB0); - 160: 80 e1 ldi r24, 0x10 ; 16 - 162: e8 9f mul r30, r24 - 164: f0 01 movw r30, r0 - 166: 11 24 eor r1, r1 - 168: e0 5a subi r30, 0xA0 ; 160 - 16a: f5 4f sbci r31, 0xF5 ; 245 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:126 - - /* Disable TCB compare channel */ - timerB->CTRLB &= ~(TCB_CCMPEN_bm); - 16c: 81 81 ldd r24, Z+1 ; 0x01 - 16e: 8f 7e andi r24, 0xEF ; 239 - 170: 81 83 std Z+1, r24 ; 0x01 - 172: d2 cf rjmp .-92 ; 0x118 <__EEPROM_REGION_LENGTH__+0x18> -digitalWrite.part.2(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:167 - port->OUTTGL = bit_mask; - /* If HIGH OR > TOGGLE */ - } - else - { - port->OUTSET = bit_mask; - 174: 45 83 std Z+5, r20 ; 0x05 - 176: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:180 - pull up is enabled if this function is called. - Should we purposely implement this side effect? - */ - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - 178: 2f 5c subi r18, 0xCF ; 207 - 17a: 32 4b sbci r19, 0xB2 ; 178 - 17c: d9 01 movw r26, r18 - 17e: 8c 91 ld r24, X -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:183 - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 180: 30 97 sbiw r30, 0x00 ; 0 - 182: 71 f0 breq .+28 ; 0x1a0 <__EEPROM_REGION_LENGTH__+0xa0> - 184: 8f 3f cpi r24, 0xFF ; 255 - 186: 61 f0 breq .+24 ; 0x1a0 <__EEPROM_REGION_LENGTH__+0xa0> - 188: 70 96 adiw r30, 0x10 ; 16 - 18a: e8 0f add r30, r24 - 18c: f1 1d adc r31, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:186 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - 18e: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:187 - cli(); - 190: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:192 - - if (val == LOW) - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 192: 80 81 ld r24, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:189 - - /* Save system status and disable interrupts */ - uint8_t status = SREG; - cli(); - - if (val == LOW) - 194: 61 11 cpse r22, r1 - 196: 07 c0 rjmp .+14 ; 0x1a6 <__EEPROM_REGION_LENGTH__+0xa6> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:192 - { - /* Disable pullup */ - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 198: 87 7f andi r24, 0xF7 ; 247 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:197 - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 19a: 80 83 st Z, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:201 - } - - /* Restore system status */ - SREG = status; - 19c: 9f bf out 0x3f, r25 ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:203 - } -} - 19e: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:183 - - /* Get bit position for getting pin ctrl reg */ - uint8_t bit_pos = digitalPinToBitPosition(pin); - - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 1a0: f0 e0 ldi r31, 0x00 ; 0 - 1a2: e0 e0 ldi r30, 0x00 ; 0 - 1a4: f4 cf rjmp .-24 ; 0x18e <__EEPROM_REGION_LENGTH__+0x8e> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:197 - *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - } - else - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 1a6: 88 60 ori r24, 0x08 ; 8 - 1a8: f8 cf rjmp .-16 ; 0x19a <__EEPROM_REGION_LENGTH__+0x9a> - -000001aa : -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:29 -void MCP2515::startSPI() { - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); -} - -void MCP2515::endSPI() { - 1aa: 8f 92 push r8 - 1ac: 9f 92 push r9 - 1ae: af 92 push r10 - 1b0: bf 92 push r11 - 1b2: cf 92 push r12 - 1b4: df 92 push r13 - 1b6: ef 92 push r14 - 1b8: ff 92 push r15 - 1ba: 0f 93 push r16 - 1bc: cf 93 push r28 - 1be: df 93 push r29 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30 - digitalWrite(SPICS, HIGH); - 1c0: 80 91 85 3c lds r24, 0x3C85 ; 0x803c85 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 1c4: 89 32 cpi r24, 0x29 ; 41 - 1c6: 10 f4 brcc .+4 ; 0x1cc - 1c8: 61 e0 ldi r22, 0x01 ; 1 - 1ca: 90 df rcall .-224 ; 0xec -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:265 - config(settings); -} - -void SPIClass::endTransaction(void) -{ - if (interruptMode != SPI_IMODE_NONE) - 1cc: 80 91 1c 3c lds r24, 0x3C1C ; 0x803c1c - 1d0: 88 23 and r24, r24 - 1d2: 19 f0 breq .+6 ; 0x1da -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:267 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 1d4: 81 ff sbrs r24, 1 - 1d6: 0d c0 rjmp .+26 ; 0x1f2 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:269 - { - interrupts(); - 1d8: 78 94 sei -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32 - SPI.endTransaction(); -} - 1da: df 91 pop r29 - 1dc: cf 91 pop r28 - 1de: 0f 91 pop r16 - 1e0: ff 90 pop r15 - 1e2: ef 90 pop r14 - 1e4: df 90 pop r13 - 1e6: cf 90 pop r12 - 1e8: bf 90 pop r11 - 1ea: af 90 pop r10 - 1ec: 9f 90 pop r9 - 1ee: 8f 90 pop r8 - 1f0: 08 95 ret -endTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:271 - } - else if (interruptMode & SPI_IMODE_EXTINT) - 1f2: 80 ff sbrs r24, 0 - 1f4: f2 cf rjmp .-28 ; 0x1da -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:225 - shift++; - } -} - -void SPIClass::reattachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 1f6: 80 90 1e 3c lds r8, 0x3C1E ; 0x803c1e - 1fa: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f - 1fe: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 - 202: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 - 206: c1 2c mov r12, r1 - 208: d1 2c mov r13, r1 - 20a: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:226 - uint8_t shift = 0; - 20c: e0 e0 ldi r30, 0x00 ; 0 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:227 - while (temp != 0) { - 20e: 94 01 movw r18, r8 - 210: a5 01 movw r20, r10 - 212: b6 01 movw r22, r12 - 214: c7 01 movw r24, r14 - 216: a0 e0 ldi r26, 0x00 ; 0 - 218: 45 d5 rcall .+2698 ; 0xca4 <__cmpdi2_s8> - 21a: 81 f1 breq .+96 ; 0x27c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:228 - if (temp & 1) { - 21c: 21 70 andi r18, 0x01 ; 1 - 21e: 30 e0 ldi r19, 0x00 ; 0 - 220: 40 e0 ldi r20, 0x00 ; 0 - 222: 50 e0 ldi r21, 0x00 ; 0 - 224: 60 e0 ldi r22, 0x00 ; 0 - 226: 70 e0 ldi r23, 0x00 ; 0 - 228: 80 e0 ldi r24, 0x00 ; 0 - 22a: 90 e0 ldi r25, 0x00 ; 0 - 22c: 3b d5 rcall .+2678 ; 0xca4 <__cmpdi2_s8> - 22e: d1 f0 breq .+52 ; 0x264 -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:229 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 230: b0 e0 ldi r27, 0x00 ; 0 - 232: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 234: e0 33 cpi r30, 0x30 ; 48 - 236: 70 f4 brcc .+28 ; 0x254 - 238: ae 2f mov r26, r30 - 23a: a6 95 lsr r26 - 23c: a6 95 lsr r26 - 23e: a6 95 lsr r26 - 240: 80 e2 ldi r24, 0x20 ; 32 - 242: a8 9f mul r26, r24 - 244: d0 01 movw r26, r0 - 246: 11 24 eor r1, r1 - 248: a0 5f subi r26, 0xF0 ; 240 - 24a: bb 4f sbci r27, 0xFB ; 251 - 24c: 8e 2f mov r24, r30 - 24e: 87 70 andi r24, 0x07 ; 7 - 250: a8 0f add r26, r24 - 252: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:230 - *pin_ctrl_reg |= irqMap[shift]; - 254: ce 2f mov r28, r30 - 256: d0 e0 ldi r29, 0x00 ; 0 - 258: ca 5e subi r28, 0xEA ; 234 - 25a: d3 4c sbci r29, 0xC3 ; 195 - 25c: 88 89 ldd r24, Y+16 ; 0x10 - 25e: 9c 91 ld r25, X - 260: 89 2b or r24, r25 - 262: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:232 - } - temp = temp >> 1; - 264: 94 01 movw r18, r8 - 266: a5 01 movw r20, r10 - 268: b6 01 movw r22, r12 - 26a: c7 01 movw r24, r14 - 26c: 01 e0 ldi r16, 0x01 ; 1 - 26e: ff d4 rcall .+2558 ; 0xc6e <__lshrdi3> - 270: 49 01 movw r8, r18 - 272: 5a 01 movw r10, r20 - 274: 6b 01 movw r12, r22 - 276: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:233 - shift++; - 278: ef 5f subi r30, 0xFF ; 255 - 27a: c9 cf rjmp .-110 ; 0x20e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:235 - } - temp = interruptMask_hi; - 27c: 80 90 22 3c lds r8, 0x3C22 ; 0x803c22 - 280: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 - 284: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 - 288: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 - 28c: c1 2c mov r12, r1 - 28e: d1 2c mov r13, r1 - 290: 76 01 movw r14, r12 -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:236 - shift = 32; - 292: e0 e2 ldi r30, 0x20 ; 32 -reattachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:237 - while (temp != 0) { - 294: 94 01 movw r18, r8 - 296: a5 01 movw r20, r10 - 298: b6 01 movw r22, r12 - 29a: c7 01 movw r24, r14 - 29c: a0 e0 ldi r26, 0x00 ; 0 - 29e: 02 d5 rcall .+2564 ; 0xca4 <__cmpdi2_s8> - 2a0: 09 f4 brne .+2 ; 0x2a4 - 2a2: 9b cf rjmp .-202 ; 0x1da -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:238 - if (temp & 1) { - 2a4: 21 70 andi r18, 0x01 ; 1 - 2a6: 30 e0 ldi r19, 0x00 ; 0 - 2a8: 40 e0 ldi r20, 0x00 ; 0 - 2aa: 50 e0 ldi r21, 0x00 ; 0 - 2ac: 60 e0 ldi r22, 0x00 ; 0 - 2ae: 70 e0 ldi r23, 0x00 ; 0 - 2b0: 80 e0 ldi r24, 0x00 ; 0 - 2b2: 90 e0 ldi r25, 0x00 ; 0 - 2b4: f7 d4 rcall .+2542 ; 0xca4 <__cmpdi2_s8> - 2b6: d1 f0 breq .+52 ; 0x2ec -_ZN7MCP25156endSPIEv.constprop.31(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:239 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 2b8: b0 e0 ldi r27, 0x00 ; 0 - 2ba: a0 e0 ldi r26, 0x00 ; 0 -reattachMaskedInterrupts(): - 2bc: e0 33 cpi r30, 0x30 ; 48 - 2be: 70 f4 brcc .+28 ; 0x2dc - 2c0: ae 2f mov r26, r30 - 2c2: a6 95 lsr r26 - 2c4: a6 95 lsr r26 - 2c6: a6 95 lsr r26 - 2c8: 80 e2 ldi r24, 0x20 ; 32 - 2ca: a8 9f mul r26, r24 - 2cc: d0 01 movw r26, r0 - 2ce: 11 24 eor r1, r1 - 2d0: a0 5f subi r26, 0xF0 ; 240 - 2d2: bb 4f sbci r27, 0xFB ; 251 - 2d4: 8e 2f mov r24, r30 - 2d6: 87 70 andi r24, 0x07 ; 7 - 2d8: a8 0f add r26, r24 - 2da: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:240 - *pin_ctrl_reg |= irqMap[shift]; - 2dc: ce 2f mov r28, r30 - 2de: d0 e0 ldi r29, 0x00 ; 0 - 2e0: ca 5e subi r28, 0xEA ; 234 - 2e2: d3 4c sbci r29, 0xC3 ; 195 - 2e4: 88 89 ldd r24, Y+16 ; 0x10 - 2e6: 9c 91 ld r25, X - 2e8: 89 2b or r24, r25 - 2ea: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:242 - } - temp = temp >> 1; - 2ec: 94 01 movw r18, r8 - 2ee: a5 01 movw r20, r10 - 2f0: b6 01 movw r22, r12 - 2f2: c7 01 movw r24, r14 - 2f4: 01 e0 ldi r16, 0x01 ; 1 - 2f6: bb d4 rcall .+2422 ; 0xc6e <__lshrdi3> - 2f8: 49 01 movw r8, r18 - 2fa: 5a 01 movw r10, r20 - 2fc: 6b 01 movw r12, r22 - 2fe: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:243 - shift++; - 300: ef 5f subi r30, 0xFF ; 255 - 302: c8 cf rjmp .-112 ; 0x294 - -00000304 : -pinMode.part.1(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:29 - -#define ARDUINO_MAIN -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) - 304: cf 93 push r28 - 306: df 93 push r29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:31 -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - 308: 90 e0 ldi r25, 0x00 ; 0 - 30a: fc 01 movw r30, r24 - 30c: ed 57 subi r30, 0x7D ; 125 - 30e: f2 4b sbci r31, 0xB2 ; 178 - 310: 20 81 ld r18, Z -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:33 - - if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP)) - 312: 2f 3f cpi r18, 0xFF ; 255 - 314: 61 f0 breq .+24 ; 0x32e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:36 - return; - - PORT_t *port = digitalPinToPortStruct(pin); - 316: fc 01 movw r30, r24 - 318: e6 5a subi r30, 0xA6 ; 166 - 31a: f2 4b sbci r31, 0xB2 ; 178 - 31c: e0 81 ld r30, Z - 31e: 30 e2 ldi r19, 0x20 ; 32 - 320: e3 9f mul r30, r19 - 322: f0 01 movw r30, r0 - 324: 11 24 eor r1, r1 - 326: fc 5f subi r31, 0xFC ; 252 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:40 - if (port == NULL) - return; - - if (mode == OUTPUT) - 328: 61 30 cpi r22, 0x01 ; 1 - 32a: 21 f4 brne .+8 ; 0x334 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:43 - { - /* Configure direction as output */ - port->DIRSET = bit_mask; - 32c: 21 83 std Z+1, r18 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:75 - } - - /* Restore state */ - SREG = status; - } -} - 32e: df 91 pop r29 - 330: cf 91 pop r28 - 332: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:48 - port->DIRSET = bit_mask; - } - else - { /* mode == INPUT or INPUT_PULLUP */ - - uint8_t bit_pos = digitalPinToBitPosition(pin); - 334: 8f 5c subi r24, 0xCF ; 207 - 336: 92 4b sbci r25, 0xB2 ; 178 - 338: ec 01 movw r28, r24 - 33a: a8 81 ld r26, Y -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:50 - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 33c: af 3f cpi r26, 0xFF ; 255 - 33e: 69 f0 breq .+26 ; 0x35a - 340: cf 01 movw r24, r30 - 342: 40 96 adiw r24, 0x10 ; 16 - 344: a8 0f add r26, r24 - 346: b9 2f mov r27, r25 - 348: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:53 - - /* Save state */ - uint8_t status = SREG; - 34a: 9f b7 in r25, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:54 - cli(); - 34c: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:57 - - /* Configure direction as input */ - port->DIRCLR = bit_mask; - 34e: 22 83 std Z+2, r18 ; 0x02 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:63 - - /* Configure pull-up resistor */ - if (mode == INPUT_PULLUP) - { - /* Enable pull-up */ - *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 350: 8c 91 ld r24, X - 352: 88 60 ori r24, 0x08 ; 8 - 354: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:73 - /* Disable pull-up */ - *pin_ctrl_reg &= ~(PORT_PULLUPEN_bm); - } - - /* Restore state */ - SREG = status; - 356: 9f bf out 0x3f, r25 ; 63 - 358: ea cf rjmp .-44 ; 0x32e -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:50 - else - { /* mode == INPUT or INPUT_PULLUP */ - - uint8_t bit_pos = digitalPinToBitPosition(pin); - /* Calculate where pin control register is */ - volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 35a: b0 e0 ldi r27, 0x00 ; 0 - 35c: a0 e0 ldi r26, 0x00 ; 0 - 35e: f5 cf rjmp .-22 ; 0x34a - -00000360 : -_ZN8SPIClass5beginEv.constprop.28(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:131 - config(DEFAULT_SPI_SETTINGS); -} - -void SPIClass::init() -{ - if (initialized) - 360: 80 91 1b 3c lds r24, 0x3C1B ; 0x803c1b - 364: 81 11 cpse r24, r1 - 366: 17 c0 rjmp .+46 ; 0x396 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:133 - return; - interruptMode = SPI_IMODE_NONE; - 368: 10 92 1c 3c sts 0x3C1C, r1 ; 0x803c1c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:134 - interruptSave = 0; - 36c: 10 92 1d 3c sts 0x3C1D, r1 ; 0x803c1d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:135 - interruptMask_lo = 0; - 370: 10 92 1e 3c sts 0x3C1E, r1 ; 0x803c1e - 374: 10 92 1f 3c sts 0x3C1F, r1 ; 0x803c1f - 378: 10 92 20 3c sts 0x3C20, r1 ; 0x803c20 - 37c: 10 92 21 3c sts 0x3C21, r1 ; 0x803c21 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:136 - interruptMask_hi = 0; - 380: 10 92 22 3c sts 0x3C22, r1 ; 0x803c22 - 384: 10 92 23 3c sts 0x3C23, r1 ; 0x803c23 - 388: 10 92 24 3c sts 0x3C24, r1 ; 0x803c24 - 38c: 10 92 25 3c sts 0x3C25, r1 ; 0x803c25 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:137 - initialized = true; - 390: 81 e0 ldi r24, 0x01 ; 1 - 392: 80 93 1b 3c sts 0x3C1B, r24 ; 0x803c1b -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:99 - -void SPIClass::begin() -{ - init(); - - PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3); - 396: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 - 39a: 8c 7f andi r24, 0xFC ; 252 - 39c: 90 91 1a 3c lds r25, 0x3C1A ; 0x803c1a - 3a0: 89 2b or r24, r25 - 3a2: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:102 - - // MISO is set to input by the controller - if(_uc_mux == SPI_MUX) - 3a6: 91 11 cpse r25, r1 - 3a8: 19 c0 rjmp .+50 ; 0x3dc -pinMode(): - 3aa: 61 e0 ldi r22, 0x01 ; 1 - 3ac: 84 e0 ldi r24, 0x04 ; 4 - 3ae: aa df rcall .-172 ; 0x304 - 3b0: 61 e0 ldi r22, 0x01 ; 1 - 3b2: 86 e0 ldi r24, 0x06 ; 6 - 3b4: a7 df rcall .-178 ; 0x304 -_ZN8SPIClass5beginEv.constprop.28(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:123 - pinMode(PIN_SPI_SCK_PINSWAP_2, OUTPUT); - } - #endif - - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - 3b6: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 - 3ba: 84 60 ori r24, 0x04 ; 4 - 3bc: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:124 - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - 3c0: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 - 3c4: 81 62 ori r24, 0x21 ; 33 - 3c6: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 - 3ca: 90 91 14 3c lds r25, 0x3C14 ; 0x803c14 - 3ce: 80 91 15 3c lds r24, 0x3C15 ; 0x803c15 -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 3d2: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 3d6: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN8SPIClass5beginEv.constprop.28(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:127 - // We don't need HW SS since salve/master mode is selected via registers - SPI0.CTRLB |= (SPI_SSD_bm); - SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - - config(DEFAULT_SPI_SETTINGS); -} - 3da: 08 95 ret -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:108 - { - pinMode(PIN_SPI_MOSI, OUTPUT); - pinMode(PIN_SPI_SCK, OUTPUT); - } - #if defined(SPI_MUX_PINSWAP_1) - else if(_uc_mux == SPI_MUX_PINSWAP_1) - 3dc: 91 30 cpi r25, 0x01 ; 1 - 3de: 31 f4 brne .+12 ; 0x3ec -pinMode(): - 3e0: 61 e0 ldi r22, 0x01 ; 1 - 3e2: 8e e0 ldi r24, 0x0E ; 14 - 3e4: 8f df rcall .-226 ; 0x304 - 3e6: 61 e0 ldi r22, 0x01 ; 1 - 3e8: 80 e1 ldi r24, 0x10 ; 16 - 3ea: e4 cf rjmp .-56 ; 0x3b4 -_ZN8SPIClass5beginEv.constprop.28(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:115 - pinMode(PIN_SPI_MOSI_PINSWAP_1, OUTPUT); - pinMode(PIN_SPI_SCK_PINSWAP_1, OUTPUT); - } - #endif - #if defined(SPI_MUX_PINSWAP_2) - else if(_uc_mux == SPI_MUX_PINSWAP_2) - 3ec: 92 30 cpi r25, 0x02 ; 2 - 3ee: 19 f7 brne .-58 ; 0x3b6 -pinMode(): - 3f0: 61 e0 ldi r22, 0x01 ; 1 - 3f2: 8e e1 ldi r24, 0x1E ; 30 - 3f4: 87 df rcall .-242 ; 0x304 - 3f6: 61 e0 ldi r22, 0x01 ; 1 - 3f8: 80 e2 ldi r24, 0x20 ; 32 - 3fa: dc cf rjmp .-72 ; 0x3b4 - -000003fc : -micros(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:103 -{ - uint32_t m; - uint16_t t; - - /* Save current state and disable interrupts */ - uint8_t status = SREG; - 3fc: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:104 - cli(); - 3fe: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:107 - - /* Get current number of millis (i.e. overflows) and timer count */ - m = timer_millis; - 400: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 - 404: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 - 408: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 - 40c: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:108 - t = _timer->CNT; - 410: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 414: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:112 - - /* If the timer overflow flag is raised, we just missed it, - increment to account for it, & read new ticks */ - if (_timer->INTFLAGS & TCB_CAPT_bm) - 418: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 - 41c: 90 ff sbrs r25, 0 - 41e: 08 c0 rjmp .+16 ; 0x430 <__DATA_REGION_LENGTH__+0x30> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:114 - { - m++; - 420: 2f 5f subi r18, 0xFF ; 255 - 422: 3f 4f sbci r19, 0xFF ; 255 - 424: 4f 4f sbci r20, 0xFF ; 255 - 426: 5f 4f sbci r21, 0xFF ; 255 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:115 - t = _timer->CNT; - 428: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 42c: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:119 - } - - // Restore SREG - SREG = status; - 430: 8f bf out 0x3f, r24 ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:130 - return m * 1000 + (t >> 4); -#elif (F_CPU == 10000000L) - t = t >> 3; - return m * 1000 + (t - (t >> 2) + (t >> 4) - (t >> 6)); -#elif (F_CPU == 8000000L) - return m * 1000 + (t >> 3); - 432: a8 ee ldi r26, 0xE8 ; 232 - 434: b3 e0 ldi r27, 0x03 ; 3 - 436: 0f d4 rcall .+2078 ; 0xc56 <__muluhisi3> - 438: 23 e0 ldi r18, 0x03 ; 3 - 43a: f6 95 lsr r31 - 43c: e7 95 ror r30 - 43e: 2a 95 dec r18 - 440: e1 f7 brne .-8 ; 0x43a <__DATA_REGION_LENGTH__+0x3a> - 442: 6e 0f add r22, r30 - 444: 7f 1f adc r23, r31 - 446: 81 1d adc r24, r1 - 448: 91 1d adc r25, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:143 -#elif (F_CPU == 1000000L) - return m * 1000 + t; -#else - return 0; -#endif -} - 44a: 08 95 ret - -0000044c : -delay(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:146 - -void delay(unsigned long ms) -{ - 44c: 8f 92 push r8 - 44e: 9f 92 push r9 - 450: af 92 push r10 - 452: bf 92 push r11 - 454: cf 92 push r12 - 456: df 92 push r13 - 458: ef 92 push r14 - 45a: ff 92 push r15 - 45c: 4b 01 movw r8, r22 - 45e: 5c 01 movw r10, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:147 - uint32_t start_time = micros(), delay_time = 1000 * ms; - 460: cd df rcall .-102 ; 0x3fc - 462: 6b 01 movw r12, r22 - 464: 7c 01 movw r14, r24 - 466: a8 ee ldi r26, 0xE8 ; 232 - 468: b3 e0 ldi r27, 0x03 ; 3 - 46a: a5 01 movw r20, r10 - 46c: 94 01 movw r18, r8 - 46e: f3 d3 rcall .+2022 ; 0xc56 <__muluhisi3> -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:150 - - /* Calculate future time to return */ - uint32_t return_time = start_time + delay_time; - 470: c6 0e add r12, r22 - 472: d7 1e adc r13, r23 - 474: e8 1e adc r14, r24 - 476: f9 1e adc r15, r25 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:153 - - /* If return time overflows */ - if (return_time < delay_time) - 478: c6 16 cp r12, r22 - 47a: d7 06 cpc r13, r23 - 47c: e8 06 cpc r14, r24 - 47e: f9 06 cpc r15, r25 - 480: 10 f4 brcc .+4 ; 0x486 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:156 - { - /* Wait until micros overflows */ - while (micros() > return_time) - 482: bc df rcall .-136 ; 0x3fc - 484: f9 cf rjmp .-14 ; 0x478 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:161 - ; - } - - /* Wait until return time */ - while (micros() < return_time) - 486: ba df rcall .-140 ; 0x3fc - 488: 6c 15 cp r22, r12 - 48a: 7d 05 cpc r23, r13 - 48c: 8e 05 cpc r24, r14 - 48e: 9f 05 cpc r25, r15 - 490: d0 f3 brcs .-12 ; 0x486 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:163 - ; -} - 492: ff 90 pop r15 - 494: ef 90 pop r14 - 496: df 90 pop r13 - 498: cf 90 pop r12 - 49a: bf 90 pop r11 - 49c: af 90 pop r10 - 49e: 9f 90 pop r9 - 4a0: 8f 90 pop r8 - 4a2: 08 95 ret - -000004a4 : -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 - SPICS = _CS; - pinMode(SPICS, OUTPUT); - endSPI(); -} - -void MCP2515::startSPI() { - 4a4: 8f 92 push r8 - 4a6: 9f 92 push r9 - 4a8: af 92 push r10 - 4aa: bf 92 push r11 - 4ac: cf 92 push r12 - 4ae: df 92 push r13 - 4b0: ef 92 push r14 - 4b2: ff 92 push r15 - 4b4: 0f 93 push r16 - 4b6: cf 93 push r28 - 4b8: df 93 push r29 -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:249 - } -} - -void SPIClass::beginTransaction(SPISettings settings) -{ - if (interruptMode != SPI_IMODE_NONE) - 4ba: 80 91 1c 3c lds r24, 0x3C1C ; 0x803c1c - 4be: 88 23 and r24, r24 - 4c0: 19 f0 breq .+6 ; 0x4c8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:251 - { - if (interruptMode & SPI_IMODE_GLOBAL) - 4c2: 81 ff sbrs r24, 1 - 4c4: 19 c0 rjmp .+50 ; 0x4f8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:253 - { - noInterrupts(); - 4c6: f8 94 cli -config(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:142 - initialized = true; -} - -void SPIClass::config(SPISettings settings) -{ - SPI0.CTRLA = settings.ctrla; - 4c8: 81 e3 ldi r24, 0x31 ; 49 - 4ca: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:143 - SPI0.CTRLB = settings.ctrlb; - 4ce: 84 e0 ldi r24, 0x04 ; 4 - 4d0: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26 - SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); - digitalWrite(SPICS, LOW); - 4d4: 80 91 85 3c lds r24, 0x3C85 ; 0x803c85 -digitalWrite(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:137 -} - -void digitalWrite(uint8_t pin, uint8_t val) -{ - /* Get bit mask for pin */ - uint8_t bit_mask = digitalPinToBitMask(pin); - 4d8: 89 32 cpi r24, 0x29 ; 41 - 4da: 08 f0 brcs .+2 ; 0x4de - 4dc: 98 c0 rjmp .+304 ; 0x60e - 4de: 60 e0 ldi r22, 0x00 ; 0 -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 -} - 4e0: df 91 pop r29 - 4e2: cf 91 pop r28 - 4e4: 0f 91 pop r16 - 4e6: ff 90 pop r15 - 4e8: ef 90 pop r14 - 4ea: df 90 pop r13 - 4ec: cf 90 pop r12 - 4ee: bf 90 pop r11 - 4f0: af 90 pop r10 - 4f2: 9f 90 pop r9 - 4f4: 8f 90 pop r8 -digitalWrite(): - 4f6: fa cd rjmp .-1036 ; 0xec -beginTransaction(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:255 - { - if (interruptMode & SPI_IMODE_GLOBAL) - { - noInterrupts(); - } - else if (interruptMode & SPI_IMODE_EXTINT) - 4f8: 80 ff sbrs r24, 0 - 4fa: e6 cf rjmp .-52 ; 0x4c8 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:200 - #endif - } -} - -void SPIClass::detachMaskedInterrupts() { - uint64_t temp = interruptMask_lo; - 4fc: 80 90 1e 3c lds r8, 0x3C1E ; 0x803c1e - 500: 90 90 1f 3c lds r9, 0x3C1F ; 0x803c1f - 504: a0 90 20 3c lds r10, 0x3C20 ; 0x803c20 - 508: b0 90 21 3c lds r11, 0x3C21 ; 0x803c21 - 50c: c1 2c mov r12, r1 - 50e: d1 2c mov r13, r1 - 510: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:201 - uint8_t shift = 0; - 512: e0 e0 ldi r30, 0x00 ; 0 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:202 - while (temp != 0) { - 514: 94 01 movw r18, r8 - 516: a5 01 movw r20, r10 - 518: b6 01 movw r22, r12 - 51a: c7 01 movw r24, r14 - 51c: a0 e0 ldi r26, 0x00 ; 0 - 51e: c2 d3 rcall .+1924 ; 0xca4 <__cmpdi2_s8> - 520: 89 f1 breq .+98 ; 0x584 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:203 - if (temp & 1) { - 522: 21 70 andi r18, 0x01 ; 1 - 524: 30 e0 ldi r19, 0x00 ; 0 - 526: 40 e0 ldi r20, 0x00 ; 0 - 528: 50 e0 ldi r21, 0x00 ; 0 - 52a: 60 e0 ldi r22, 0x00 ; 0 - 52c: 70 e0 ldi r23, 0x00 ; 0 - 52e: 80 e0 ldi r24, 0x00 ; 0 - 530: 90 e0 ldi r25, 0x00 ; 0 - 532: b8 d3 rcall .+1904 ; 0xca4 <__cmpdi2_s8> - 534: d9 f0 breq .+54 ; 0x56c -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:204 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 536: b0 e0 ldi r27, 0x00 ; 0 - 538: a0 e0 ldi r26, 0x00 ; 0 -detachMaskedInterrupts(): - 53a: e0 33 cpi r30, 0x30 ; 48 - 53c: 70 f4 brcc .+28 ; 0x55a - 53e: ae 2f mov r26, r30 - 540: a6 95 lsr r26 - 542: a6 95 lsr r26 - 544: a6 95 lsr r26 - 546: 80 e2 ldi r24, 0x20 ; 32 - 548: a8 9f mul r26, r24 - 54a: d0 01 movw r26, r0 - 54c: 11 24 eor r1, r1 - 54e: a0 5f subi r26, 0xF0 ; 240 - 550: bb 4f sbci r27, 0xFB ; 251 - 552: 8e 2f mov r24, r30 - 554: 87 70 andi r24, 0x07 ; 7 - 556: a8 0f add r26, r24 - 558: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:205 - irqMap[shift] = *pin_ctrl_reg; - 55a: ce 2f mov r28, r30 - 55c: d0 e0 ldi r29, 0x00 ; 0 - 55e: 8c 91 ld r24, X - 560: ca 5e subi r28, 0xEA ; 234 - 562: d3 4c sbci r29, 0xC3 ; 195 - 564: 88 8b std Y+16, r24 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:206 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 566: 8c 91 ld r24, X - 568: 88 7f andi r24, 0xF8 ; 248 - 56a: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:208 - } - temp = temp >> 1; - 56c: 94 01 movw r18, r8 - 56e: a5 01 movw r20, r10 - 570: b6 01 movw r22, r12 - 572: c7 01 movw r24, r14 - 574: 01 e0 ldi r16, 0x01 ; 1 - 576: 7b d3 rcall .+1782 ; 0xc6e <__lshrdi3> - 578: 49 01 movw r8, r18 - 57a: 5a 01 movw r10, r20 - 57c: 6b 01 movw r12, r22 - 57e: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:209 - shift++; - 580: ef 5f subi r30, 0xFF ; 255 - 582: c8 cf rjmp .-112 ; 0x514 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:211 - } - temp = interruptMask_hi; - 584: 80 90 22 3c lds r8, 0x3C22 ; 0x803c22 - 588: 90 90 23 3c lds r9, 0x3C23 ; 0x803c23 - 58c: a0 90 24 3c lds r10, 0x3C24 ; 0x803c24 - 590: b0 90 25 3c lds r11, 0x3C25 ; 0x803c25 - 594: c1 2c mov r12, r1 - 596: d1 2c mov r13, r1 - 598: 76 01 movw r14, r12 -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:212 - shift = 32; - 59a: e0 e2 ldi r30, 0x20 ; 32 -detachMaskedInterrupts(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:213 - while (temp != 0) { - 59c: 94 01 movw r18, r8 - 59e: a5 01 movw r20, r10 - 5a0: b6 01 movw r22, r12 - 5a2: c7 01 movw r24, r14 - 5a4: a0 e0 ldi r26, 0x00 ; 0 - 5a6: 7e d3 rcall .+1788 ; 0xca4 <__cmpdi2_s8> - 5a8: 09 f4 brne .+2 ; 0x5ac - 5aa: 8e cf rjmp .-228 ; 0x4c8 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:214 - if (temp & 1) { - 5ac: 21 70 andi r18, 0x01 ; 1 - 5ae: 30 e0 ldi r19, 0x00 ; 0 - 5b0: 40 e0 ldi r20, 0x00 ; 0 - 5b2: 50 e0 ldi r21, 0x00 ; 0 - 5b4: 60 e0 ldi r22, 0x00 ; 0 - 5b6: 70 e0 ldi r23, 0x00 ; 0 - 5b8: 80 e0 ldi r24, 0x00 ; 0 - 5ba: 90 e0 ldi r25, 0x00 ; 0 - 5bc: 73 d3 rcall .+1766 ; 0xca4 <__cmpdi2_s8> - 5be: d9 f0 breq .+54 ; 0x5f6 -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:215 - volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 5c0: b0 e0 ldi r27, 0x00 ; 0 - 5c2: a0 e0 ldi r26, 0x00 ; 0 -detachMaskedInterrupts(): - 5c4: e0 33 cpi r30, 0x30 ; 48 - 5c6: 70 f4 brcc .+28 ; 0x5e4 - 5c8: ae 2f mov r26, r30 - 5ca: a6 95 lsr r26 - 5cc: a6 95 lsr r26 - 5ce: a6 95 lsr r26 - 5d0: 80 e2 ldi r24, 0x20 ; 32 - 5d2: a8 9f mul r26, r24 - 5d4: d0 01 movw r26, r0 - 5d6: 11 24 eor r1, r1 - 5d8: a0 5f subi r26, 0xF0 ; 240 - 5da: bb 4f sbci r27, 0xFB ; 251 - 5dc: 8e 2f mov r24, r30 - 5de: 87 70 andi r24, 0x07 ; 7 - 5e0: a8 0f add r26, r24 - 5e2: b1 1d adc r27, r1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:216 - irqMap[shift] = *pin_ctrl_reg; - 5e4: ce 2f mov r28, r30 - 5e6: d0 e0 ldi r29, 0x00 ; 0 - 5e8: 8c 91 ld r24, X - 5ea: ca 5e subi r28, 0xEA ; 234 - 5ec: d3 4c sbci r29, 0xC3 ; 195 - 5ee: 88 8b std Y+16, r24 ; 0x10 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:217 - *pin_ctrl_reg &= ~(PORT_ISC_gm); - 5f0: 8c 91 ld r24, X - 5f2: 88 7f andi r24, 0xF8 ; 248 - 5f4: 8c 93 st X, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:219 - } - temp = temp >> 1; - 5f6: 94 01 movw r18, r8 - 5f8: a5 01 movw r20, r10 - 5fa: b6 01 movw r22, r12 - 5fc: c7 01 movw r24, r14 - 5fe: 01 e0 ldi r16, 0x01 ; 1 - 600: 36 d3 rcall .+1644 ; 0xc6e <__lshrdi3> - 602: 49 01 movw r8, r18 - 604: 5a 01 movw r10, r20 - 606: 6b 01 movw r12, r22 - 608: 7c 01 movw r14, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\libraries\SPI\src/SPI.cpp:220 - shift++; - 60a: ef 5f subi r30, 0xFF ; 255 - 60c: c7 cf rjmp .-114 ; 0x59c -_ZN7MCP25158startSPIEv.constprop.20(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 - 60e: df 91 pop r29 - 610: cf 91 pop r28 - 612: 0f 91 pop r16 - 614: ff 90 pop r15 - 616: ef 90 pop r14 - 618: df 90 pop r13 - 61a: cf 90 pop r12 - 61c: bf 90 pop r11 - 61e: af 90 pop r10 - 620: 9f 90 pop r9 - 622: 8f 90 pop r8 - 624: 08 95 ret - -00000626 : -_ZN7MCP251512readRegisterENS_8REGISTERE.constprop.19(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:85 - } - - return ERROR_OK; -} - -uint8_t MCP2515::readRegister(const REGISTER reg) - 626: cf 93 push r28 - 628: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87 -{ - startSPI(); - 62a: 3c df rcall .-392 ; 0x4a4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88 - SPI.transfer(INSTRUCTION_READ); - 62c: 83 e0 ldi r24, 0x03 ; 3 - 62e: 54 dd rcall .-1368 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89 - SPI.transfer(reg); - 630: 8c 2f mov r24, r28 - 632: 52 dd rcall .-1372 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90 - uint8_t ret = SPI.transfer(0x00); - 634: 80 e0 ldi r24, 0x00 ; 0 - 636: 50 dd rcall .-1376 ; 0xd8 - 638: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 - endSPI(); - 63a: b7 dd rcall .-1170 ; 0x1aa -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94 - - return ret; -} - 63c: 8c 2f mov r24, r28 - 63e: cf 91 pop r28 - 640: 08 95 ret - -00000642 : -_ZN7MCP251512setRegistersENS_8REGISTEREPKhh.constprop.17(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:117 - SPI.transfer(reg); - SPI.transfer(value); - endSPI(); -} - -void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n) - 642: ff 92 push r15 - 644: 0f 93 push r16 - 646: 1f 93 push r17 - 648: cf 93 push r28 - 64a: df 93 push r29 - 64c: c8 2f mov r28, r24 - 64e: f6 2e mov r15, r22 - 650: 17 2f mov r17, r23 - 652: 04 2f mov r16, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119 -{ - startSPI(); - 654: 27 df rcall .-434 ; 0x4a4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120 - SPI.transfer(INSTRUCTION_WRITE); - 656: 82 e0 ldi r24, 0x02 ; 2 - 658: 3f dd rcall .-1410 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121 - SPI.transfer(reg); - 65a: 8c 2f mov r24, r28 - 65c: 3d dd rcall .-1414 ; 0xd8 - 65e: cf 2d mov r28, r15 - 660: d1 2f mov r29, r17 - 662: 0c 0f add r16, r28 - 664: 1d 2f mov r17, r29 - 666: 11 1d adc r17, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122 - for (uint8_t i=0; i -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123 - SPI.transfer(values[i]); - 66e: 89 91 ld r24, Y+ - 670: 33 dd rcall .-1434 ; 0xd8 - 672: fa cf rjmp .-12 ; 0x668 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126 - } - endSPI(); -} - 674: df 91 pop r29 - 676: cf 91 pop r28 - 678: 1f 91 pop r17 - 67a: 0f 91 pop r16 - 67c: ff 90 pop r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - for (uint8_t i=0; i - -00000680 : -_ZN7MCP251514modifyRegisterENS_8REGISTEREhh.constprop.16(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:128 -} - -void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data) - 680: 1f 93 push r17 - 682: cf 93 push r28 - 684: df 93 push r29 - 686: 18 2f mov r17, r24 - 688: d6 2f mov r29, r22 - 68a: c4 2f mov r28, r20 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130 -{ - startSPI(); - 68c: 0b df rcall .-490 ; 0x4a4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131 - SPI.transfer(INSTRUCTION_BITMOD); - 68e: 85 e0 ldi r24, 0x05 ; 5 - 690: 23 dd rcall .-1466 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132 - SPI.transfer(reg); - 692: 81 2f mov r24, r17 - 694: 21 dd rcall .-1470 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133 - SPI.transfer(mask); - 696: 8d 2f mov r24, r29 - 698: 1f dd rcall .-1474 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134 - SPI.transfer(data); - 69a: 8c 2f mov r24, r28 - 69c: 1d dd rcall .-1478 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136 - endSPI(); -} - 69e: df 91 pop r29 - 6a0: cf 91 pop r28 - 6a2: 1f 91 pop r17 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 - startSPI(); - SPI.transfer(INSTRUCTION_BITMOD); - SPI.transfer(reg); - SPI.transfer(mask); - SPI.transfer(data); - endSPI(); - 6a4: 82 cd rjmp .-1276 ; 0x1aa - -000006a6 : -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:173 -MCP2515::ERROR MCP2515::setNormalMode() -{ - return setMode(CANCTRL_REQOP_NORMAL); -} - -MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) - 6a6: cf 92 push r12 - 6a8: df 92 push r13 - 6aa: ef 92 push r14 - 6ac: ff 92 push r15 - 6ae: cf 93 push r28 - 6b0: c8 2f mov r28, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175 -{ - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - 6b2: 48 2f mov r20, r24 - 6b4: 60 ee ldi r22, 0xE0 ; 224 - 6b6: 8f e0 ldi r24, 0x0F ; 15 - 6b8: e3 df rcall .-58 ; 0x680 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 6ba: 8f b7 in r24, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:88 - cli(); - 6bc: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 6be: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 - 6c2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 - 6c6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 - 6ca: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 6ce: 8f bf out 0x3f, r24 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177 - - unsigned long endTime = millis() + 10; - 6d0: 8a e0 ldi r24, 0x0A ; 10 - 6d2: c8 0e add r12, r24 - 6d4: d1 1c adc r13, r1 - 6d6: e1 1c adc r14, r1 - 6d8: f1 1c adc r15, r1 -millis(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:87 -{ - unsigned long m; - - // disable interrupts while we read timer0_millis or we might get an - // inconsistent value (e.g. in the middle of a write to timer_millis) - uint8_t status = SREG; - 6da: 2f b7 in r18, 0x3f ; 63 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:88 - cli(); - 6dc: f8 94 cli -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:90 - - m = timer_millis; - 6de: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - 6e2: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - 6e6: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - 6ea: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:92 - - SREG = status; - 6ee: 2f bf out 0x3f, r18 ; 63 -_ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE.constprop.11(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 - bool modeMatch = false; - while (millis() < endTime) { - 6f0: 8c 15 cp r24, r12 - 6f2: 9d 05 cpc r25, r13 - 6f4: ae 05 cpc r26, r14 - 6f6: bf 05 cpc r27, r15 - 6f8: 78 f4 brcc .+30 ; 0x718 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180 - uint8_t newmode = readRegister(MCP_CANSTAT); - 6fa: 8e e0 ldi r24, 0x0E ; 14 - 6fc: 94 df rcall .-216 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181 - newmode &= CANSTAT_OPMOD; - 6fe: 80 7e andi r24, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185 - - modeMatch = newmode == mode; - - if (modeMatch) { - 700: c8 13 cpse r28, r24 - 702: eb cf rjmp .-42 ; 0x6da -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183 - bool modeMatch = false; - while (millis() < endTime) { - uint8_t newmode = readRegister(MCP_CANSTAT); - newmode &= CANSTAT_OPMOD; - - modeMatch = newmode == mode; - 704: 81 e0 ldi r24, 0x01 ; 1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190 - if (modeMatch) { - break; - } - } - - return modeMatch ? ERROR_OK : ERROR_FAIL; - 706: 91 e0 ldi r25, 0x01 ; 1 - 708: 89 27 eor r24, r25 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192 - -} - 70a: 90 e0 ldi r25, 0x00 ; 0 - 70c: cf 91 pop r28 - 70e: ff 90 pop r15 - 710: ef 90 pop r14 - 712: df 90 pop r13 - 714: cf 90 pop r12 - 716: 08 95 ret -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 -{ - modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - - unsigned long endTime = millis() + 10; - bool modeMatch = false; - while (millis() < endTime) { - 718: 80 e0 ldi r24, 0x00 ; 0 - 71a: f5 cf rjmp .-22 ; 0x706 - -0000071c : -_ZN7MCP251511setRegisterENS_8REGISTEREh.constprop.9(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:108 - values[i] = SPI.transfer(0x00); - } - endSPI(); -} - -void MCP2515::setRegister(const REGISTER reg, const uint8_t value) - 71c: cf 93 push r28 - 71e: df 93 push r29 - 720: d8 2f mov r29, r24 - 722: c6 2f mov r28, r22 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110 -{ - startSPI(); - 724: bf de rcall .-642 ; 0x4a4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111 - SPI.transfer(INSTRUCTION_WRITE); - 726: 82 e0 ldi r24, 0x02 ; 2 - 728: d7 dc rcall .-1618 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112 - SPI.transfer(reg); - 72a: 8d 2f mov r24, r29 - 72c: d5 dc rcall .-1622 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113 - SPI.transfer(value); - 72e: 8c 2f mov r24, r28 - 730: d3 dc rcall .-1626 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115 - endSPI(); -} - 732: df 91 pop r29 - 734: cf 91 pop r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 -{ - startSPI(); - SPI.transfer(INSTRUCTION_WRITE); - SPI.transfer(reg); - SPI.transfer(value); - endSPI(); - 736: 39 cd rjmp .-1422 ; 0x1aa - -00000738 <__vector_25>: -__vector_25(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:74 -#elif defined(MILLIS_USE_TIMERB2) -ISR(TCB2_INT_vect) -#else // fallback or defined(MILLIS_USE_TIMERB3) -ISR(TCB3_INT_vect) -#endif -{ - 738: 1f 92 push r1 - 73a: 0f 92 push r0 - 73c: 0f b6 in r0, 0x3f ; 63 - 73e: 0f 92 push r0 - 740: 11 24 eor r1, r1 - 742: 8f 93 push r24 - 744: 9f 93 push r25 - 746: af 93 push r26 - 748: bf 93 push r27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:75 - timer_millis++; - 74a: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - 74e: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - 752: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - 756: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 - 75a: 01 96 adiw r24, 0x01 ; 1 - 75c: a1 1d adc r26, r1 - 75e: b1 1d adc r27, r1 - 760: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 - 764: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 - 768: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 - 76c: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:78 - - /* Clear flag */ - _timer->INTFLAGS = TCB_CAPT_bm; - 770: 81 e0 ldi r24, 0x01 ; 1 - 772: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:79 -} - 776: bf 91 pop r27 - 778: af 91 pop r26 - 77a: 9f 91 pop r25 - 77c: 8f 91 pop r24 - 77e: 0f 90 pop r0 - 780: 0f be out 0x3f, r0 ; 63 - 782: 0f 90 pop r0 - 784: 1f 90 pop r1 - 786: 18 95 reti - -00000788 : -_GLOBAL__I_65535_0_sketch_jun30b.ino.cpp.o.2661(): - 788: cf 93 push r28 - 78a: df 93 push r29 - 78c: e4 e1 ldi r30, 0x14 ; 20 - 78e: fc e3 ldi r31, 0x3C ; 60 - 790: c4 e0 ldi r28, 0x04 ; 4 - 792: c1 83 std Z+1, r28 ; 0x01 - 794: 81 e3 ldi r24, 0x31 ; 49 - 796: 80 83 st Z, r24 - 798: e6 e1 ldi r30, 0x16 ; 22 - 79a: fc e3 ldi r31, 0x3C ; 60 - 79c: 15 82 std Z+5, r1 ; 0x05 - 79e: 14 82 std Z+4, r1 ; 0x04 - 7a0: df dd rcall .-1090 ; 0x360 - 7a2: d3 e0 ldi r29, 0x03 ; 3 - 7a4: d0 93 85 3c sts 0x3C85, r29 ; 0x803c85 - 7a8: 61 e0 ldi r22, 0x01 ; 1 - 7aa: 83 e0 ldi r24, 0x03 ; 3 - 7ac: ab dd rcall .-1194 ; 0x304 - 7ae: fd dc rcall .-1542 ; 0x1aa - 7b0: e5 e5 ldi r30, 0x55 ; 85 - 7b2: fc e3 ldi r31, 0x3C ; 60 - 7b4: 85 e1 ldi r24, 0x15 ; 21 - 7b6: 90 e0 ldi r25, 0x00 ; 0 - 7b8: 80 83 st Z, r24 - 7ba: 91 83 std Z+1, r25 ; 0x01 - 7bc: 12 82 std Z+2, r1 ; 0x02 - 7be: 13 82 std Z+3, r1 ; 0x03 - 7c0: 81 e0 ldi r24, 0x01 ; 1 - 7c2: 84 83 std Z+4, r24 ; 0x04 - 7c4: 85 83 std Z+5, r24 ; 0x05 - 7c6: 26 e1 ldi r18, 0x16 ; 22 - 7c8: 30 e0 ldi r19, 0x00 ; 0 - 7ca: 26 83 std Z+6, r18 ; 0x06 - 7cc: 37 83 std Z+7, r19 ; 0x07 - 7ce: 10 86 std Z+8, r1 ; 0x08 - 7d0: 11 86 std Z+9, r1 ; 0x09 - 7d2: 82 87 std Z+10, r24 ; 0x0a - 7d4: 92 e0 ldi r25, 0x02 ; 2 - 7d6: 93 87 std Z+11, r25 ; 0x0b - 7d8: 27 e1 ldi r18, 0x17 ; 23 - 7da: 30 e0 ldi r19, 0x00 ; 0 - 7dc: 24 87 std Z+12, r18 ; 0x0c - 7de: 35 87 std Z+13, r19 ; 0x0d - 7e0: 16 86 std Z+14, r1 ; 0x0e - 7e2: 17 86 std Z+15, r1 ; 0x0f - 7e4: 80 8b std Z+16, r24 ; 0x10 - 7e6: d1 8b std Z+17, r29 ; 0x11 - 7e8: 28 e1 ldi r18, 0x18 ; 24 - 7ea: 30 e0 ldi r19, 0x00 ; 0 - 7ec: 22 8b std Z+18, r18 ; 0x12 - 7ee: 33 8b std Z+19, r19 ; 0x13 - 7f0: 14 8a std Z+20, r1 ; 0x14 - 7f2: 15 8a std Z+21, r1 ; 0x15 - 7f4: 86 8b std Z+22, r24 ; 0x16 - 7f6: c7 8b std Z+23, r28 ; 0x17 - 7f8: 2c e1 ldi r18, 0x1C ; 28 - 7fa: 30 e0 ldi r19, 0x00 ; 0 - 7fc: 20 8f std Z+24, r18 ; 0x18 - 7fe: 31 8f std Z+25, r19 ; 0x19 - 800: 12 8e std Z+26, r1 ; 0x1a - 802: 13 8e std Z+27, r1 ; 0x1b - 804: 84 8f std Z+28, r24 ; 0x1c - 806: 95 e0 ldi r25, 0x05 ; 5 - 808: 95 8f std Z+29, r25 ; 0x1d - 80a: 2b e1 ldi r18, 0x1B ; 27 - 80c: 30 e0 ldi r19, 0x00 ; 0 - 80e: 26 8f std Z+30, r18 ; 0x1e - 810: 37 8f std Z+31, r19 ; 0x1f - 812: 10 a2 std Z+32, r1 ; 0x20 - 814: 11 a2 std Z+33, r1 ; 0x21 - 816: 82 a3 std Z+34, r24 ; 0x22 - 818: 96 e0 ldi r25, 0x06 ; 6 - 81a: 93 a3 std Z+35, r25 ; 0x23 - 81c: 2a e1 ldi r18, 0x1A ; 26 - 81e: 30 e0 ldi r19, 0x00 ; 0 - 820: 24 a3 std Z+36, r18 ; 0x24 - 822: 35 a3 std Z+37, r19 ; 0x25 - 824: 16 a2 std Z+38, r1 ; 0x26 - 826: 17 a2 std Z+39, r1 ; 0x27 - 828: 80 a7 std Z+40, r24 ; 0x28 - 82a: 97 e0 ldi r25, 0x07 ; 7 - 82c: 91 a7 std Z+41, r25 ; 0x29 - 82e: 29 e1 ldi r18, 0x19 ; 25 - 830: 30 e0 ldi r19, 0x00 ; 0 - 832: 22 a7 std Z+42, r18 ; 0x2a - 834: 33 a7 std Z+43, r19 ; 0x2b - 836: 14 a6 std Z+44, r1 ; 0x2c - 838: 15 a6 std Z+45, r1 ; 0x2d - 83a: 86 a7 std Z+46, r24 ; 0x2e - 83c: 88 e0 ldi r24, 0x08 ; 8 - 83e: 87 a7 std Z+47, r24 ; 0x2f - 840: df 91 pop r29 - 842: cf 91 pop r28 - 844: 08 95 ret - -00000846
: -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:29 - -void setupUSB() __attribute__((weak)); -void setupUSB() {} - -int main(void) -{ - 846: cf 93 push r28 - 848: df 93 push r29 - 84a: cd b7 in r28, 0x3d ; 61 - 84c: de b7 in r29, 0x3e ; 62 - 84e: a9 97 sbiw r28, 0x29 ; 41 - 850: cd bf out 0x3d, r28 ; 61 - 852: de bf out 0x3e, r29 ; 62 -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:361 -#elif (F_CPU == 10000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); -#elif (F_CPU == 8000000L) - /* Clock DIV2 */ - _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); - 854: 91 e0 ldi r25, 0x01 ; 1 - 856: 88 ed ldi r24, 0xD8 ; 216 - 858: 84 bf out 0x34, r24 ; 52 - 85a: 90 93 61 00 sts 0x0061, r25 ; 0x800061 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:390 -#if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 16000000L) // 16 MHz / 128 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV128_gc; -#elif (F_CPU >= 8000000L) // 8 MHz / 64 = 125 kHz - ADC0.CTRLC |= ADC_PRESC_DIV64_gc; - 85e: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - 862: 85 60 ori r24, 0x05 ; 5 - 864: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:402 -#else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2 - ADC0.CTRLC |= ADC_PRESC_DIV2_gc; -#endif - - /* Enable ADC */ - ADC0.CTRLA |= ADC_ENABLE_bm; - 868: 80 91 00 06 lds r24, 0x0600 ; 0x800600 - 86c: 81 60 ori r24, 0x01 ; 1 - 86e: 80 93 00 06 sts 0x0600, r24 ; 0x800600 -analogReference(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_analog.c:35 -{ - switch (mode) - { - case EXTERNAL: - case VDD: - ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely... - 872: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - 876: 8f 7c andi r24, 0xCF ; 207 - 878: 80 65 ori r24, 0x50 ; 80 - 87a: 80 93 02 06 sts 0x0602, r24 ; 0x800602 -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:407 - analogReference(VDD); - -#endif - - PORTMUX.USARTROUTEA = 0; - 87e: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:446 -void setup_timers() -{ - // TYPE A TIMER - - // PORTMUX setting for TCA (defined in pins_arduino.h) - PORTMUX.TCAROUTEA = TCA0_PINS; - 882: 82 e0 ldi r24, 0x02 ; 2 - 884: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:449 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - 888: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:453 - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - 88c: 8e ef ldi r24, 0xFE ; 254 - 88e: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:452 - - // Enable split mode before anything else - TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - 892: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:461 - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE; - 896: 80 e8 ldi r24, 0x80 ; 128 - 898: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:460 - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - TCA0.SPLIT.HCMP1 = - 89c: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:459 - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - TCA0.SPLIT.HCMP0 = - 8a0: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:458 - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - TCA0.SPLIT.LCMP2 = - 8a4: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:457 - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - TCA0.SPLIT.LCMP1 = - 8a8: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:456 - // Period setting, two 8 bit registers - TCA0.SPLIT.LPER = - TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - - // Default duty 50%, will re-assign in analogWrite() - TCA0.SPLIT.LCMP0 = - 8ac: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:471 -#elif F_CPU <= 2000000L - // Use DIV8 prescaler (giving 250kHz clock on 2MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV8_gc) | (TCA_SPLIT_ENABLE_bm); -#elif F_CPU <= 8000000L - // Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer - TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm); - 8b0: 89 e0 ldi r24, 0x09 ; 9 - 8b2: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:480 -#endif - - // TYPE B TIMERS - - // Set up routing (defined in pins_arduino.h) - PORTMUX.TCBROUTEA = 0 - 8b6: 87 e0 ldi r24, 0x07 ; 7 - 8b8: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:496 - | TCB3_PINS -#endif - ; - - // Start with TCB0 - TCB_t *timer_B = (TCB_t *)&TCB0; - 8bc: e0 e8 ldi r30, 0x80 ; 128 - 8be: fa e0 ldi r31, 0x0A ; 10 -setup_timers(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - 8c0: 37 e0 ldi r19, 0x07 ; 7 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - 8c2: 2e ef ldi r18, 0xFE ; 254 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - 8c4: 90 e8 ldi r25, 0x80 ; 128 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - 8c6: 85 e0 ldi r24, 0x05 ; 5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:513 - - // Timer B Setup loop for TCB[0:end] - do - { - // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() - timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - 8c8: 31 83 std Z+1, r19 ; 0x01 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:516 - - // Assign 8-bit period - timer_B->CCMPL = PWM_TIMER_PERIOD; - 8ca: 24 87 std Z+12, r18 ; 0x0c -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:519 - - // default duty 50%, set when output enabled - timer_B->CCMPH = PWM_TIMER_COMPARE; - 8cc: 95 87 std Z+13, r25 ; 0x0d -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:523 - - // Use TCA clock (250kHz) and enable - // (sync update commented out, might try to synchronize later - timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - 8ce: 80 83 st Z, r24 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:528 - //|(TCB_SYNCUPD_bm) - | (TCB_ENABLE_bm); - - // Increment pointer to next TCB instance - timer_B++; - 8d0: 70 96 adiw r30, 0x10 ; 16 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:531 - - // Stop when pointing to TCB3 - } while (timer_B <= timer_B_end); - 8d2: e0 3c cpi r30, 0xC0 ; 192 - 8d4: 4a e0 ldi r20, 0x0A ; 10 - 8d6: f4 07 cpc r31, r20 - 8d8: b9 f7 brne .-18 ; 0x8c8 -init(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:416 - /********************* TCB for system time tracking **************************/ - - // BUG: we can compensate for F_CPU by fine tuning value of TIME_TRACKING_TIMER_COUNT - - /* Select vanilla 16 bit periodic interrupt mode */ - _timer->CTRLB = TCB_CNTMODE_INT_gc; - 8da: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:419 - - /* TOP value for overflow every N clock cycles */ - _timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1; - 8de: 8f e3 ldi r24, 0x3F ; 63 - 8e0: 9f e1 ldi r25, 0x1F ; 31 - 8e2: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac - 8e6: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:422 - - /* Enable TCB interrupt */ - _timer->INTCTRL |= TCB_CAPT_bm; - 8ea: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 - 8ee: 81 60 ori r24, 0x01 ; 1 - 8f0: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:426 - - /* Clock selection is F_CPU/N -- which is independent of TCA */ -#if TIME_TRACKING_TIMER_DIVIDER == 1 - _timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */ - 8f4: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:434 -#else -#assert "TIME_TRACKING_TIMER_DIVIDER not supported" -#endif - - /* Enable & start */ - _timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */ - 8f8: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 - 8fc: 81 60 ori r24, 0x01 ; 1 - 8fe: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring.c:438 - - /*************************** ENABLE GLOBAL INTERRUPTS *************************/ - - sei(); - 902: 78 94 sei -setup(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:50 - PinState(PIN_PD3, 8) -}; - - -void setup() { - SPI.begin(); - 904: 2d dd rcall .-1446 ; 0x360 -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:52 - - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - 906: 80 91 60 00 lds r24, 0x0060 ; 0x800060 - 90a: 80 68 ori r24, 0x80 ; 128 - 90c: 90 e0 ldi r25, 0x00 ; 0 - 90e: 28 ed ldi r18, 0xD8 ; 216 - 910: 24 bf out 0x34, r18 ; 52 - 912: 80 93 60 00 sts 0x0060, r24 ; 0x800060 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36 - SPI.endTransaction(); -} - -MCP2515::ERROR MCP2515::reset(void) -{ - startSPI(); - 916: c6 dd rcall .-1140 ; 0x4a4 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37 - SPI.transfer(INSTRUCTION_RESET); - 918: 80 ec ldi r24, 0xC0 ; 192 - 91a: de db rcall .-2116 ; 0xd8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 - endSPI(); - 91c: 46 dc rcall .-1908 ; 0x1aa -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40 - - delay(10); - 91e: 6a e0 ldi r22, 0x0A ; 10 - 920: 70 e0 ldi r23, 0x00 ; 0 - 922: 80 e0 ldi r24, 0x00 ; 0 - 924: 90 e0 ldi r25, 0x00 ; 0 - 926: 92 dd rcall .-1244 ; 0x44c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43 - - uint8_t zeros[14]; - memset(zeros, 0, sizeof(zeros)); - 928: ce 01 movw r24, r28 - 92a: 01 96 adiw r24, 0x01 ; 1 - 92c: 7c 01 movw r14, r24 - 92e: 8e e0 ldi r24, 0x0E ; 14 - 930: d7 01 movw r26, r14 - 932: 1d 92 st X+, r1 - 934: 8a 95 dec r24 - 936: e9 f7 brne .-6 ; 0x932 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44 - setRegisters(MCP_TXB0CTRL, zeros, 14); - 938: 4e e0 ldi r20, 0x0E ; 14 - 93a: b7 01 movw r22, r14 - 93c: 80 e3 ldi r24, 0x30 ; 48 - 93e: 81 de rcall .-766 ; 0x642 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45 - setRegisters(MCP_TXB1CTRL, zeros, 14); - 940: 4e e0 ldi r20, 0x0E ; 14 - 942: b7 01 movw r22, r14 - 944: 80 e4 ldi r24, 0x40 ; 64 - 946: 7d de rcall .-774 ; 0x642 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46 - setRegisters(MCP_TXB2CTRL, zeros, 14); - 948: 4e e0 ldi r20, 0x0E ; 14 - 94a: b7 01 movw r22, r14 - 94c: 80 e5 ldi r24, 0x50 ; 80 - 94e: 79 de rcall .-782 ; 0x642 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48 - - setRegister(MCP_RXB0CTRL, 0); - 950: 60 e0 ldi r22, 0x00 ; 0 - 952: 80 e6 ldi r24, 0x60 ; 96 - 954: e3 de rcall .-570 ; 0x71c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49 - setRegister(MCP_RXB1CTRL, 0); - 956: 60 e0 ldi r22, 0x00 ; 0 - 958: 80 e7 ldi r24, 0x70 ; 112 - 95a: e0 de rcall .-576 ; 0x71c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51 - - setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); - 95c: 63 ea ldi r22, 0xA3 ; 163 - 95e: 8b e2 ldi r24, 0x2B ; 43 - 960: dd de rcall .-582 ; 0x71c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:55 - - // receives all valid messages using either Standard or Extended Identifiers that - // meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1 - modifyRegister(MCP_RXB0CTRL, - 962: 44 e0 ldi r20, 0x04 ; 4 - 964: 67 e6 ldi r22, 0x67 ; 103 - 966: 80 e6 ldi r24, 0x60 ; 96 - 968: 8b de rcall .-746 ; 0x680 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:58 - RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK, - RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT); - modifyRegister(MCP_RXB1CTRL, - 96a: 41 e0 ldi r20, 0x01 ; 1 - 96c: 67 e6 ldi r22, 0x67 ; 103 - 96e: 80 e7 ldi r24, 0x70 ; 112 - 970: 87 de rcall .-754 ; 0x680 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65 - RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - 972: 8c e0 ldi r24, 0x0C ; 12 - 974: e6 ef ldi r30, 0xF6 ; 246 - 976: fc e4 ldi r31, 0x4C ; 76 - 978: de 01 movw r26, r28 - 97a: 1f 96 adiw r26, 0x0f ; 15 - 97c: 01 90 ld r0, Z+ - 97e: 0d 92 st X+, r0 - 980: 8a 95 dec r24 - 982: e1 f7 brne .-8 ; 0x97c - 984: 4e 01 movw r8, r28 - 986: bf e0 ldi r27, 0x0F ; 15 - 988: 8b 0e add r8, r27 - 98a: 91 1c adc r9, r1 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - for (int i=0; i<6; i++) { - 98c: d1 2c mov r13, r1 - 98e: c1 2c mov r12, r1 - 990: a8 2c mov r10, r8 - 992: 99 a6 std Y+41, r9 ; 0x29 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - 994: 98 e0 ldi r25, 0x08 ; 8 - 996: b9 2e mov r11, r25 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68 - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - bool ext = (i == 1); - ERROR result = setFilter(filters[i], ext, 0); - 998: f4 01 movw r30, r8 - 99a: 01 91 ld r16, Z+ - 99c: 11 91 ld r17, Z+ - 99e: 4f 01 movw r8, r30 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - 9a0: 80 e8 ldi r24, 0x80 ; 128 - 9a2: 81 de rcall .-766 ; 0x6a6 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:555 -} - -MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - 9a4: 89 2b or r24, r25 - 9a6: 61 f4 brne .+24 ; 0x9c0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - 9a8: 02 30 cpi r16, 0x02 ; 2 - 9aa: 11 05 cpc r17, r1 - 9ac: 09 f4 brne .+2 ; 0x9b0 - 9ae: 7b c0 rjmp .+246 ; 0xaa6 - 9b0: a0 f5 brcc .+104 ; 0xa1a - 9b2: 01 15 cp r16, r1 - 9b4: 11 05 cpc r17, r1 - 9b6: e1 f1 breq .+120 ; 0xa30 - 9b8: 01 30 cpi r16, 0x01 ; 1 - 9ba: 11 05 cpc r17, r1 - 9bc: 09 f4 brne .+2 ; 0x9c0 - 9be: 79 c0 rjmp .+242 ; 0xab2 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - 9c0: 80 e8 ldi r24, 0x80 ; 128 - 9c2: 71 de rcall .-798 ; 0x6a6 -setBitrate(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:202 -} - -MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) -{ - ERROR error = setConfigMode(); - if (error != ERROR_OK) { - 9c4: 89 2b or r24, r25 - 9c6: 49 f4 brne .+18 ; 0x9da -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 - set = 0; - break; - } - - if (set) { - setRegister(MCP_CNF1, cfg1); - 9c8: 60 e0 ldi r22, 0x00 ; 0 - 9ca: 8a e2 ldi r24, 0x2A ; 42 - 9cc: a7 de rcall .-690 ; 0x71c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478 - setRegister(MCP_CNF2, cfg2); - 9ce: 60 e9 ldi r22, 0x90 ; 144 - 9d0: 89 e2 ldi r24, 0x29 ; 41 - 9d2: a4 de rcall .-696 ; 0x71c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479 - setRegister(MCP_CNF3, cfg3); - 9d4: 62 e8 ldi r22, 0x82 ; 130 - 9d6: 88 e2 ldi r24, 0x28 ; 40 - 9d8: a1 de rcall .-702 ; 0x71c -setNormalMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 - return setMode(CANCTRL_REQOP_LOOPBACK); -} - -MCP2515::ERROR MCP2515::setNormalMode() -{ - return setMode(CANCTRL_REQOP_NORMAL); - 9da: 80 e0 ldi r24, 0x00 ; 0 - 9dc: 64 de rcall .-824 ; 0x6a6 -setup(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:58 - mcp2515.reset(); - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - - - delay(2000); - 9de: 60 ed ldi r22, 0xD0 ; 208 - 9e0: 77 e0 ldi r23, 0x07 ; 7 - 9e2: 80 e0 ldi r24, 0x00 ; 0 - 9e4: 90 e0 ldi r25, 0x00 ; 0 - 9e6: 32 dd rcall .-1436 ; 0x44c - 9e8: a5 e5 ldi r26, 0x55 ; 85 - 9ea: ca 2e mov r12, r26 - 9ec: ac e3 ldi r26, 0x3C ; 60 - 9ee: da 2e mov r13, r26 -SendDebugPkg(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:107 - - -} - -void SendDebugPkg() -{ _frame.can_id = 0x001; - 9f0: 41 2c mov r4, r1 - 9f2: 51 2c mov r5, r1 - 9f4: 32 01 movw r6, r4 - 9f6: 43 94 inc r4 - 9f8: fe 01 movw r30, r28 - 9fa: 75 96 adiw r30, 0x15 ; 21 - 9fc: eb a3 std Y+35, r30 ; 0x23 - 9fe: fc a3 std Y+36, r31 ; 0x24 -setup(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:59 - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - - - delay(2000); - for (int i = 0; i < sizeof(PinStates) - 1; i++) - a00: ff e6 ldi r31, 0x6F ; 111 - a02: cf 16 cp r12, r31 - a04: fd e3 ldi r31, 0x3D ; 61 - a06: df 06 cpc r13, r31 - a08: 09 f0 breq .+2 ; 0xa0c - a0a: 64 c0 rjmp .+200 ; 0xad4 -main(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/main.cpp:43 - setup(); - - for (;;) - { - loop(); - if (serialEventRun) serialEventRun(); - a0c: 00 e0 ldi r16, 0x00 ; 0 - a0e: 10 e0 ldi r17, 0x00 ; 0 - a10: 01 15 cp r16, r1 - a12: 11 05 cpc r17, r1 - a14: e9 f3 breq .-6 ; 0xa10 - a16: f4 da rcall .-2584 ; 0x0 <__vectors> - a18: fb cf rjmp .-10 ; 0xa10 -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 - return res; - } - - REGISTER reg; - - switch (num) { - a1a: 04 30 cpi r16, 0x04 ; 4 - a1c: 11 05 cpc r17, r1 - a1e: 09 f4 brne .+2 ; 0xa22 - a20: 46 c0 rjmp .+140 ; 0xaae - a22: 08 f4 brcc .+2 ; 0xa26 - a24: 42 c0 rjmp .+132 ; 0xaaa - a26: 05 30 cpi r16, 0x05 ; 5 - a28: 11 05 cpc r17, r1 - a2a: 51 f6 brne .-108 ; 0x9c0 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567 - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - case RXF3: reg = MCP_RXF3SIDH; break; - case RXF4: reg = MCP_RXF4SIDH; break; - case RXF5: reg = MCP_RXF5SIDH; break; - a2c: 88 e1 ldi r24, 0x18 ; 24 - a2e: 01 c0 rjmp .+2 ; 0xa32 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 - } - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - a30: 80 e0 ldi r24, 0x00 ; 0 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - a32: f1 e0 ldi r31, 0x01 ; 1 - a34: cf 16 cp r12, r31 - a36: d1 04 cpc r13, r1 - a38: f1 f5 brne .+124 ; 0xab6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - a3a: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - a3c: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - a3e: bc 8e std Y+28, r11 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - a40: 1b 8e std Y+27, r1 ; 0x1b -setFilter(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574 - return ERROR_FAIL; - } - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - setRegisters(reg, tbufdata, 4); - a42: 44 e0 ldi r20, 0x04 ; 4 - a44: be 01 movw r22, r28 - a46: 65 5e subi r22, 0xE5 ; 229 - a48: 7f 4f sbci r23, 0xFF ; 255 - a4a: fb dd rcall .-1034 ; 0x642 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 - - // clear filters and masks - // do not filter any standard frames for RXF0 used by RXB0 - // do not filter any extended frames for RXF1 used by RXB1 - RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - for (int i=0; i<6; i++) { - a4c: 4f ef ldi r20, 0xFF ; 255 - a4e: c4 1a sub r12, r20 - a50: d4 0a sbc r13, r20 - a52: 86 e0 ldi r24, 0x06 ; 6 - a54: c8 16 cp r12, r24 - a56: d1 04 cpc r13, r1 - a58: 09 f0 breq .+2 ; 0xa5c - a5a: 9e cf rjmp .-196 ; 0x998 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 - if (result != ERROR_OK) { - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - a5c: 1f 8e std Y+31, r1 ; 0x1f - a5e: 18 a2 std Y+32, r1 ; 0x20 - a60: 81 e0 ldi r24, 0x01 ; 1 - a62: 90 e0 ldi r25, 0x00 ; 0 - a64: 89 a3 std Y+33, r24 ; 0x21 - a66: 9a a3 std Y+34, r25 ; 0x22 - a68: 8e 01 movw r16, r28 - a6a: 01 5e subi r16, 0xE1 ; 225 - a6c: 1f 4f sbci r17, 0xFF ; 255 - a6e: 6e 01 movw r12, r28 - a70: 93 e2 ldi r25, 0x23 ; 35 - a72: c9 0e add r12, r25 - a74: d1 1c adc r13, r1 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - a76: 88 e0 ldi r24, 0x08 ; 8 - a78: b8 2e mov r11, r24 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76 - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - ERROR result = setFilterMask(masks[i], true, 0); - a7a: d8 01 movw r26, r16 - a7c: 8d 90 ld r8, X+ - a7e: 9d 90 ld r9, X+ - a80: 8d 01 movw r16, r26 -setConfigMode(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 - return i; -} - -MCP2515::ERROR MCP2515::setConfigMode() -{ - return setMode(CANCTRL_REQOP_CONFIG); - a82: 80 e8 ldi r24, 0x80 ; 128 - a84: 10 de rcall .-992 ; 0x6a6 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:532 -} - -MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uint32_t ulData) -{ - ERROR res = setConfigMode(); - if (res != ERROR_OK) { - a86: 89 2b or r24, r25 - a88: 09 f0 breq .+2 ; 0xa8c - a8a: 9a cf rjmp .-204 ; 0x9c0 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - a8c: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - a8e: 1d 8e std Y+29, r1 ; 0x1d -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - a90: bc 8e std Y+28, r11 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - a92: 1b 8e std Y+27, r1 ; 0x1b -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540 - - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - a94: 81 14 cp r8, r1 - a96: 91 04 cpc r9, r1 - a98: 99 f0 breq .+38 ; 0xac0 - a9a: 8a 94 dec r8 - a9c: 89 28 or r8, r9 - a9e: 09 f0 breq .+2 ; 0xaa2 - aa0: 8f cf rjmp .-226 ; 0x9c0 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542 - case MASK0: reg = MCP_RXM0SIDH; break; - case MASK1: reg = MCP_RXM1SIDH; break; - aa2: 84 e2 ldi r24, 0x24 ; 36 - aa4: 0e c0 rjmp .+28 ; 0xac2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - case RXF2: reg = MCP_RXF2SIDH; break; - aa6: 88 e0 ldi r24, 0x08 ; 8 - aa8: c4 cf rjmp .-120 ; 0xa32 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565 - case RXF3: reg = MCP_RXF3SIDH; break; - aaa: 80 e1 ldi r24, 0x10 ; 16 - aac: c2 cf rjmp .-124 ; 0xa32 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566 - case RXF4: reg = MCP_RXF4SIDH; break; - aae: 84 e1 ldi r24, 0x14 ; 20 - ab0: c0 cf rjmp .-128 ; 0xa32 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563 - - REGISTER reg; - - switch (num) { - case RXF0: reg = MCP_RXF0SIDH; break; - case RXF1: reg = MCP_RXF1SIDH; break; - ab2: 84 e0 ldi r24, 0x04 ; 4 - ab4: be cf rjmp .-132 ; 0xa32 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - ab6: 1b 8e std Y+27, r1 ; 0x1b -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - ab8: 1c 8e std Y+28, r1 ; 0x1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - aba: 1e 8e std Y+30, r1 ; 0x1e -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - abc: 1d 8e std Y+29, r1 ; 0x1d - abe: c1 cf rjmp .-126 ; 0xa42 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541 - uint8_t tbufdata[4]; - prepareId(tbufdata, ext, ulData); - - REGISTER reg; - switch (mask) { - case MASK0: reg = MCP_RXM0SIDH; break; - ac0: 80 e2 ldi r24, 0x20 ; 32 -setFilterMask(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 - case MASK1: reg = MCP_RXM1SIDH; break; - default: - return ERROR_FAIL; - } - - setRegisters(reg, tbufdata, 4); - ac2: 44 e0 ldi r20, 0x04 ; 4 - ac4: be 01 movw r22, r28 - ac6: 65 5e subi r22, 0xE5 ; 229 - ac8: 7f 4f sbci r23, 0xFF ; 255 - aca: bb dd rcall .-1162 ; 0x642 -reset(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 - return result; - } - } - - MASK masks[] = {MASK0, MASK1}; - for (int i=0; i<2; i++) { - acc: c0 16 cp r12, r16 - ace: d1 06 cpc r13, r17 - ad0: a1 f6 brne .-88 ; 0xa7a - ad2: 76 cf rjmp .-276 ; 0x9c0 -SendDebugPkg(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:107 - - -} - -void SendDebugPkg() -{ _frame.can_id = 0x001; - ad4: 40 92 00 3c sts 0x3C00, r4 ; 0x803c00 <__DATA_REGION_ORIGIN__> - ad8: 50 92 01 3c sts 0x3C01, r5 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - adc: 60 92 02 3c sts 0x3C02, r6 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - ae0: 70 92 03 3c sts 0x3C03, r7 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:108 - _frame.can_dlc = 4; - ae4: 44 e0 ldi r20, 0x04 ; 4 - ae6: 40 93 04 3c sts 0x3C04, r20 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:109 - _frame.data[0] = 0x47; - aea: 87 e4 ldi r24, 0x47 ; 71 - aec: 80 93 08 3c sts 0x3C08, r24 ; 0x803c08 <__DATA_REGION_ORIGIN__+0x8> -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:110 - _frame.data[1] = 0x11; - af0: 91 e1 ldi r25, 0x11 ; 17 - af2: 90 93 09 3c sts 0x3C09, r25 ; 0x803c09 <__DATA_REGION_ORIGIN__+0x9> -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:111 - _frame.data[2] = 0x08; - af6: a8 e0 ldi r26, 0x08 ; 8 - af8: a0 93 0a 3c sts 0x3C0A, r26 ; 0x803c0a <__DATA_REGION_ORIGIN__+0xa> -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:112 - _frame.data[3] = 0x15; - afc: b5 e1 ldi r27, 0x15 ; 21 - afe: b0 93 0b 3c sts 0x3C0B, r27 ; 0x803c0b <__DATA_REGION_ORIGIN__+0xb> -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:616 -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - return ERROR_FAILTX; - } - - TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; - b02: 86 e0 ldi r24, 0x06 ; 6 - b04: e2 e0 ldi r30, 0x02 ; 2 - b06: fd e4 ldi r31, 0x4D ; 77 - b08: de 01 movw r26, r28 - b0a: 1f 96 adiw r26, 0x0f ; 15 - b0c: 01 90 ld r0, Z+ - b0e: 0d 92 st X+, r0 - b10: 8a 95 dec r24 - b12: e1 f7 brne .-8 ; 0xb0c - b14: 0a 2d mov r16, r10 - b16: 19 a5 ldd r17, Y+41 ; 0x29 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:619 - - for (int i=0; iCTRL); - b20: 14 01 movw r2, r8 - b22: 22 0c add r2, r2 - b24: 33 1c adc r3, r3 - b26: f1 01 movw r30, r2 - b28: e8 0d add r30, r8 - b2a: f9 1d adc r31, r9 - b2c: e4 55 subi r30, 0x54 ; 84 - b2e: f2 4b sbci r31, 0xB2 ; 178 - b30: b0 80 ld r11, Z - b32: 8b 2d mov r24, r11 - b34: 78 dd rcall .-1296 ; 0x626 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:621 - if ( (ctrlval & TXB_TXREQ) == 0 ) { - b36: 83 fd sbrc r24, 3 - b38: 87 c0 rjmp .+270 ; 0xc48 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581 - return ERROR_OK; -} - -MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - b3a: 10 91 04 3c lds r17, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> - b3e: 19 30 cpi r17, 0x09 ; 9 - b40: 08 f0 brcs .+2 ; 0xb44 - b42: 63 c0 rjmp .+198 ; 0xc0a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589 - - const struct TXBn_REGS *txbuf = &TXB[txbn]; - - uint8_t data[13]; - - bool ext = (frame->can_id & CAN_EFF_FLAG); - b44: 40 91 00 3c lds r20, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> - b48: 50 91 01 3c lds r21, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> - b4c: 60 91 02 3c lds r22, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> - b50: 70 91 03 3c lds r23, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> - b54: db 01 movw r26, r22 - b56: ca 01 movw r24, r20 - b58: 88 27 eor r24, r24 - b5a: b7 fd sbrc r27, 7 - b5c: 83 95 inc r24 - b5e: 99 27 eor r25, r25 - b60: aa 27 eor r26, r26 - b62: bb 27 eor r27, r27 - b64: 28 2f mov r18, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - b66: db 01 movw r26, r22 - b68: ca 01 movw r24, r20 - b6a: 88 27 eor r24, r24 - b6c: 99 27 eor r25, r25 - b6e: aa 27 eor r26, r26 - b70: b0 74 andi r27, 0x40 ; 64 - b72: 8d a3 std Y+37, r24 ; 0x25 - b74: 9e a3 std Y+38, r25 ; 0x26 - b76: af a3 std Y+39, r26 ; 0x27 - b78: b8 a7 std Y+40, r27 ; 0x28 -main(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591 - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - b7a: 8f ef ldi r24, 0xFF ; 255 - b7c: 9f ef ldi r25, 0xFF ; 255 - b7e: af ef ldi r26, 0xFF ; 255 - b80: bf e1 ldi r27, 0x1F ; 31 -sendMessage(): - b82: 21 11 cpse r18, r1 - b84: 04 c0 rjmp .+8 ; 0xb8e -main(): - b86: 8f ef ldi r24, 0xFF ; 255 - b88: 97 e0 ldi r25, 0x07 ; 7 - b8a: a0 e0 ldi r26, 0x00 ; 0 - b8c: b0 e0 ldi r27, 0x00 ; 0 -sendMessage(): - b8e: 84 23 and r24, r20 - b90: 95 23 and r25, r21 - b92: a6 23 and r26, r22 - b94: b7 23 and r27, r23 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - b96: 22 23 and r18, r18 - b98: 09 f4 brne .+2 ; 0xb9c - b9a: 46 c0 rjmp .+140 ; 0xc28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - b9c: 8c 83 std Y+4, r24 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - b9e: 9b 83 std Y+3, r25 ; 0x03 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 - canid = (uint16_t)(id >> 16); - ba0: cd 01 movw r24, r26 - ba2: aa 27 eor r26, r26 - ba4: bb 27 eor r27, r27 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - ba6: 28 2f mov r18, r24 - ba8: 22 0f add r18, r18 - baa: 22 0f add r18, r18 - bac: 22 0f add r18, r18 - bae: 20 7e andi r18, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 - - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - bb0: 38 2f mov r19, r24 - bb2: 33 70 andi r19, 0x03 ; 3 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - bb4: 38 60 ori r19, 0x08 ; 8 - bb6: 23 2b or r18, r19 - bb8: 2a 83 std Y+2, r18 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - bba: 35 e0 ldi r19, 0x05 ; 5 - bbc: 96 95 lsr r25 - bbe: 87 95 ror r24 - bc0: 3a 95 dec r19 - bc2: e1 f7 brne .-8 ; 0xbbc - bc4: 89 83 std Y+1, r24 ; 0x01 -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - - prepareId(data, ext, id); - - data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; - bc6: 8d a1 ldd r24, Y+37 ; 0x25 - bc8: 9e a1 ldd r25, Y+38 ; 0x26 - bca: af a1 ldd r26, Y+39 ; 0x27 - bcc: b8 a5 ldd r27, Y+40 ; 0x28 - bce: 89 2b or r24, r25 - bd0: 8a 2b or r24, r26 - bd2: 8b 2b or r24, r27 - bd4: b9 f1 breq .+110 ; 0xc44 - bd6: 81 2f mov r24, r17 - bd8: 80 64 ori r24, 0x40 ; 64 - bda: 8d 83 std Y+5, r24 ; 0x05 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 - - memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); - bdc: 41 2f mov r20, r17 - bde: 50 e0 ldi r21, 0x00 ; 0 - be0: 68 e0 ldi r22, 0x08 ; 8 - be2: 7c e3 ldi r23, 0x3C ; 60 - be4: ce 01 movw r24, r28 - be6: 06 96 adiw r24, 0x06 ; 6 - be8: 7b d0 rcall .+246 ; 0xce0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 - - setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); - bea: 45 e0 ldi r20, 0x05 ; 5 - bec: 41 0f add r20, r17 - bee: f1 01 movw r30, r2 - bf0: e8 0d add r30, r8 - bf2: f9 1d adc r31, r9 - bf4: e4 55 subi r30, 0x54 ; 84 - bf6: f2 4b sbci r31, 0xB2 ; 178 - bf8: b7 01 movw r22, r14 - bfa: 81 81 ldd r24, Z+1 ; 0x01 - bfc: 22 dd rcall .-1468 ; 0x642 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 - - modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); - bfe: 48 e0 ldi r20, 0x08 ; 8 - c00: 68 e0 ldi r22, 0x08 ; 8 - c02: 8b 2d mov r24, r11 - c04: 3d dd rcall .-1414 ; 0x680 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 - - uint8_t ctrl = readRegister(txbuf->CTRL); - c06: 8b 2d mov r24, r11 - c08: 0e dd rcall .-1508 ; 0x626 -setup(): -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:63 - delay(2000); - for (int i = 0; i < sizeof(PinStates) - 1; i++) - { - - SendDebugPkg(); - delay(1000); - c0a: 68 ee ldi r22, 0xE8 ; 232 - c0c: 73 e0 ldi r23, 0x03 ; 3 - c0e: 80 e0 ldi r24, 0x00 ; 0 - c10: 90 e0 ldi r25, 0x00 ; 0 - c12: 1c dc rcall .-1992 ; 0x44c -C:\Users\Martin\Documents\Arduino\sketch_jun30b/sketch_jun30b.ino:65 - - pinMode(PinStates[i].pin_id, INPUT_PULLUP); - c14: f6 01 movw r30, r12 - c16: 80 81 ld r24, Z -pinMode(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.10\cores\coreX-corefiles/wiring_digital.c:31 -#include "wiring_private.h" -#include "pins_arduino.h" - -void pinMode(uint8_t pin, uint8_t mode) -{ - uint8_t bit_mask = digitalPinToBitMask(pin); - c18: 89 32 cpi r24, 0x29 ; 41 - c1a: 10 f4 brcc .+4 ; 0xc20 - c1c: 62 e0 ldi r22, 0x02 ; 2 - c1e: 72 db rcall .-2332 ; 0x304 - c20: f6 e0 ldi r31, 0x06 ; 6 - c22: cf 0e add r12, r31 - c24: d1 1c adc r13, r1 - c26: ec ce rjmp .-552 ; 0xa00 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - c28: 9c 01 movw r18, r24 - c2a: 93 e0 ldi r25, 0x03 ; 3 - c2c: 36 95 lsr r19 - c2e: 27 95 ror r18 - c30: 9a 95 dec r25 - c32: e1 f7 brne .-8 ; 0xc2c - c34: 29 83 std Y+1, r18 ; 0x01 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - c36: 82 95 swap r24 - c38: 88 0f add r24, r24 - c3a: 80 7e andi r24, 0xE0 ; 224 - c3c: 8a 83 std Y+2, r24 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - c3e: 1c 82 std Y+4, r1 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - c40: 1b 82 std Y+3, r1 ; 0x03 - c42: c1 cf rjmp .-126 ; 0xbc6 -sendMessage(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - - prepareId(data, ext, id); - - data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; - c44: 81 2f mov r24, r17 - c46: c9 cf rjmp .-110 ; 0xbda -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:618 - return ERROR_FAILTX; - } - - TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; - - for (int i=0; i - c52: 62 cf rjmp .-316 ; 0xb18 - c54: da cf rjmp .-76 ; 0xc0a - -00000c56 <__muluhisi3>: -__muluhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:626 - c56: 38 d0 rcall .+112 ; 0xcc8 <__umulhisi3> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:627 - c58: a5 9f mul r26, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:628 - c5a: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:629 - c5c: b4 9f mul r27, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:630 - c5e: 90 0d add r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:631 - c60: a4 9f mul r26, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:632 - c62: 80 0d add r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:633 - c64: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:634 - c66: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:635 - c68: 08 95 ret - -00000c6a <__ashrdi3>: -__ashrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3122 - c6a: 97 fd sbrc r25, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3123 - c6c: 10 94 com r1 - -00000c6e <__lshrdi3>: -__lshrdi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3131 - c6e: 00 2e mov r0, r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3132 - c70: 08 30 cpi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3133 - c72: 98 f0 brcs .+38 ; 0xc9a <__lshrdi3+0x2c> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3134 - c74: 08 50 subi r16, 0x08 ; 8 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3135 - c76: 23 2f mov r18, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3136 - c78: 34 2f mov r19, r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3137 - c7a: 45 2f mov r20, r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3138 - c7c: 56 2f mov r21, r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3139 - c7e: 67 2f mov r22, r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3140 - c80: 78 2f mov r23, r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3141 - c82: 89 2f mov r24, r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3142 - c84: 91 2d mov r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3143 - c86: f4 cf rjmp .-24 ; 0xc70 <__lshrdi3+0x2> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3144 - c88: 15 94 asr r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3145 - c8a: 97 95 ror r25 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3146 - c8c: 87 95 ror r24 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3147 - c8e: 77 95 ror r23 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3148 - c90: 67 95 ror r22 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3149 - c92: 57 95 ror r21 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3150 - c94: 47 95 ror r20 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3151 - c96: 37 95 ror r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3152 - c98: 27 95 ror r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3153 - c9a: 0a 95 dec r16 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3154 - c9c: aa f7 brpl .-22 ; 0xc88 <__lshrdi3+0x1a> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3155 - c9e: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3156 - ca0: 00 2d mov r16, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3157 - ca2: 08 95 ret - -00000ca4 <__cmpdi2_s8>: -__cmpdi2_s8(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2102 - ca4: 00 24 eor r0, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2103 - ca6: a7 fd sbrc r26, 7 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2104 - ca8: 00 94 com r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2105 - caa: 2a 17 cp r18, r26 - cac: 30 05 cpc r19, r0 - cae: 40 05 cpc r20, r0 - cb0: 50 05 cpc r21, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2106 - cb2: 60 05 cpc r22, r0 - cb4: 70 05 cpc r23, r0 - cb6: 80 05 cpc r24, r0 - cb8: 90 05 cpc r25, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2107 - cba: 08 95 ret - -00000cbc <__tablejump2__>: -__tablejump2__(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2296 - cbc: ee 0f add r30, r30 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2297 - cbe: ff 1f adc r31, r31 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2328 - cc0: 05 90 lpm r0, Z+ -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2329 - cc2: f4 91 lpm r31, Z -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2330 - cc4: e0 2d mov r30, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2331 - cc6: 09 94 ijmp - -00000cc8 <__umulhisi3>: -__umulhisi3(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:564 - cc8: a2 9f mul r26, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:565 - cca: b0 01 movw r22, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:566 - ccc: b3 9f mul r27, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:567 - cce: c0 01 movw r24, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:568 - cd0: a3 9f mul r26, r19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:578 - cd2: 01 d0 rcall .+2 ; 0xcd6 <__umulhisi3+0xe> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:580 - cd4: b2 9f mul r27, r18 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:581 - cd6: 70 0d add r23, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:582 - cd8: 81 1d adc r24, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:583 - cda: 11 24 eor r1, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:584 - cdc: 91 1d adc r25, r1 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:585 - cde: 08 95 ret - -00000ce0 : -memcpy(): - ce0: fb 01 movw r30, r22 - ce2: dc 01 movw r26, r24 - ce4: 02 c0 rjmp .+4 ; 0xcea - ce6: 01 90 ld r0, Z+ - ce8: 0d 92 st X+, r0 - cea: 41 50 subi r20, 0x01 ; 1 - cec: 50 40 sbci r21, 0x00 ; 0 - cee: d8 f7 brcc .-10 ; 0xce6 - cf0: 08 95 ret - -00000cf2 <_exit>: -exit(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 - cf2: f8 94 cli - -00000cf4 <__stop_program>: -__stop_program(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 - cf4: ff cf rjmp .-2 ; 0xcf4 <__stop_program> diff --git a/Software/UPSoftware/sketch_jun30b/sketch_jun30b.ino b/Software/UPSoftware/sketch_jun30b/sketch_jun30b.ino deleted file mode 100644 index 9699f9e..0000000 --- a/Software/UPSoftware/sketch_jun30b/sketch_jun30b.ino +++ /dev/null @@ -1,221 +0,0 @@ -#include ; -#include ; - - -struct can_frame _frame; -MCP2515 mcp2515(PIN_PA3); -const byte SoftwareVersionHigh = 1; -const byte SoftwareVersionLow = 0; -const byte HardwareVersionHigh = 2; -const byte HardwareVersionLow = 0; - -typedef struct -{ - int pin_id; - bool pin_state; - bool is_input; - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - this->pin_state = true; - this->is_input = true; - this->meyPinId = meyPinId; - } -} PinState; - -int PinCount = 8; -PinState PinPD2[8]; -byte DeviceId[2]; - - - -void setup() { - SPI.begin(); - - - PinPD2[0] = PinState(); - PinPD2[0].Init(PIN_PC7, (byte) 1); - - PinPD2[1] = PinState(); - PinPD2[1].Init(PIN_PD0, (byte) 2); - - PinPD2[2] = PinState(); - PinPD2[2].Init(PIN_PD1, (byte) 3); - - PinPD2[3] = PinState(); - PinPD2[3].Init(PIN_PD2, (byte) 4); - - PinPD2[4] = PinState(); - PinPD2[4].Init(PIN_PD6, (byte) 5); - - PinPD2[5] = PinState(); - PinPD2[5].Init(PIN_PD5, (byte) 6); - - PinPD2[6] = PinState(); - PinPD2[6].Init(PIN_PD4, (byte) 7); - - PinPD2[7] = PinState(); - PinPD2[7].Init(PIN_PD3, (byte) 8); - - - - _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - mcp2515.reset(); - mcp2515.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515.setNormalMode(); - - for (int i = 0; i <= PinCount - 1; i++) - { - pinMode(PinPD2[i].pin_id, INPUT_PULLUP); - PinPD2[i].pin_state = ReadPin(&PinPD2[i]); - } - - - DeviceId[0] = (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); - DeviceId[1] = (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); - - SendSerialPackage(); -} - -bool debugFlag = false; -void loop() -{ - for (int i = 0; i <= PinCount - 1; i++) - { - if (CheckPinStatus(&PinPD2[i])) - SendSwitchedTriggeredCanPackage(&PinPD2[i]); - } - - if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) - { - debugFlag ^= true; - - int meyPinId = _frame.data[0]; - bool state = _frame.data[1] > 0; - - PinState *adressedPin; - for (int i = 0; i <= PinCount - 1; i++) - if (PinPD2[i].meyPinId == meyPinId) - { - adressedPin = &PinPD2[i]; - break; - } - - if (adressedPin != NULL) - { - if (adressedPin->is_input == true) - { - pinMode(adressedPin->pin_id, OUTPUT); - adressedPin->is_input = false; - } - adressedPin->pin_state = state; - digitalWrite(adressedPin->pin_id, state); - } - - - - } - delay(20); -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); -} - -uint32_t GetDeviceId(uint32_t canFrameId) -{ - return canFrameId & 0xFFFF; -} - -uint32_t CreateCanId(uint32_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | ( DeviceId[0] << 8) | (DeviceId[1]) | CAN_EFF_FLAG; -} - -void SendSerialPackage() -{ - _frame.can_id = CreateCanId(0xFFFF); - _frame.can_dlc = 4; - - _frame.data[0] = SoftwareVersionHigh; - _frame.data[1] = SoftwareVersionLow; - _frame.data[2] = HardwareVersionHigh; - _frame.data[3] = HardwareVersionLow; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); -} - -void SendSwitchedTriggeredCanPackage(PinState * state) -{ - _frame.can_id = CreateCanId(0x050); - _frame.can_dlc = 2; - _frame.data[0] = state->meyPinId; - _frame.data[1] = state->pin_state; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); -} - -void SendDoTriggerSwitchCanPackage(uint32_t targetCanId, byte pinId, byte state) -{ - _frame.can_id = CreateCanId(0x050); - _frame.can_dlc = 4; - _frame.data[0] = targetCanId & 0xFF; - _frame.data[1] = (targetCanId & 0xFF00) >> 8; - _frame.data[2] = pinId; - _frame.data[3] = state; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); -} - -bool ReadPin(PinState * state) -{ - if (state->pin_id == PIN_PD2) - return digitalReadFast(PIN_PD2); - else if (state->pin_id == PIN_PC7) - return digitalReadFast(PIN_PC7); - else if (state->pin_id == PIN_PD1) - return digitalReadFast(PIN_PD1); - else if (state->pin_id == PIN_PD0) - return digitalReadFast(PIN_PD0); - else if (state->pin_id == PIN_PD6) - return digitalReadFast(PIN_PD6); - else if (state->pin_id == PIN_PD5) - return digitalReadFast(PIN_PD5); - else if (state->pin_id == PIN_PD4) - return digitalReadFast(PIN_PD4); - else if (state->pin_id == PIN_PD3) - return digitalReadFast(PIN_PD3); - else - return digitalRead(state->pin_id); -} - -bool CheckPinStatus(PinState * state) -{ - if (!state->is_input) - return false; - - bool newValue = ReadPin(state); - - - if (newValue != state->pin_state) - { - delay(10); - newValue = ReadPin(state); - if (newValue != state->pin_state) - { - state->pin_state = newValue; - return true; - } - } - return false; - -}