WIP PinState from array to pointer
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader",
|
"configuration": "pinout=48pin_standard,eeprom=keep,resetpin=reset,BOD=2v6,clock=internal_8MHz,bootloader=no_bootloader",
|
||||||
"board": "MegaCoreX:megaavr:809",
|
"board": "MegaCoreX:megaavr:809",
|
||||||
"sketch": "Swtich.ino"
|
"sketch": "Switch.ino",
|
||||||
|
"port": "COM6",
|
||||||
|
"programmer": "jtag2updi"
|
||||||
}
|
}
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
"cppStandard": "c++17",
|
"cppStandard": "c++17",
|
||||||
"defines": [
|
"defines": [
|
||||||
"F_CPU=8000000L",
|
"F_CPU=8000000L",
|
||||||
"ARDUINO=10819",
|
"ARDUINO=10607",
|
||||||
"ARDUINO_AVR_ATmega809",
|
"ARDUINO_AVR_ATmega809",
|
||||||
"ARDUINO_ARCH_MEGAAVR",
|
"ARDUINO_ARCH_MEGAAVR",
|
||||||
"__DBL_MIN_EXP__=(-125)",
|
"__DBL_MIN_EXP__=(-125)",
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
|
#include <avr/io.h>;
|
||||||
|
#include <avr/xmega.h>;
|
||||||
#include <SPI.h>;
|
#include <SPI.h>;
|
||||||
#include <mcp2515.h>;
|
#include <mcp2515.h>;
|
||||||
#include "MeyCan.h";
|
#include "MeyCan.h";
|
||||||
#include "MeyRule.h";
|
#include "MeyRule.h";
|
||||||
|
|
||||||
|
|
||||||
struct can_frame incomingCanFrame;
|
struct can_frame incomingCanFrame;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
@@ -26,7 +29,7 @@ void setup() {
|
|||||||
AddToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro
|
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
|
delay(10); // a bit delay for mcp2515 to get the clock
|
||||||
|
|
||||||
@@ -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
|
|
||||||
File diff suppressed because it is too large
Load Diff
235
Software/UPSoftware/MeyCan.cpp
Normal file
235
Software/UPSoftware/MeyCan.cpp
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
#include "MeyCan.h";
|
||||||
|
#include <SPI.h>;
|
||||||
|
#include <mcp2515.h>;
|
||||||
|
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
105
Software/UPSoftware/MeyCan.h
Normal file
105
Software/UPSoftware/MeyCan.h
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
#ifndef MEYCAN_H
|
||||||
|
#define MEYCAN_H
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <mcp2515.h>
|
||||||
|
|
||||||
|
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
|
||||||
104
Software/UPSoftware/MeyRule.cpp
Normal file
104
Software/UPSoftware/MeyRule.cpp
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#include "MeyRule.h"
|
||||||
|
#include "MeyCan.h"
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <mcp2515.h>;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
111
Software/UPSoftware/MeyRule.h
Normal file
111
Software/UPSoftware/MeyRule.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
#ifndef MEYRULE_H
|
||||||
|
#define MEYRULE_H
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <mcp2515.h>;
|
||||||
|
|
||||||
|
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
|
||||||
@@ -1,256 +1,31 @@
|
|||||||
|
|
||||||
#include <SPI.h>;
|
#include <SPI.h>;
|
||||||
#include <mcp2515.h>;
|
#include <mcp2515.h>;
|
||||||
|
#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() {
|
void setup() {
|
||||||
SPI.begin();
|
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);
|
_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);
|
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++)
|
SetCanInterface(0, PIN_PD4);
|
||||||
{
|
SetupMeyCan();
|
||||||
pinMode(MeyPins[i].pin_id, INPUT_PULLUP);
|
|
||||||
MeyPins[i].pin_state = ReadPin(&MeyPins[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
CalculateMyDeviceId();
|
|
||||||
SendSerialPackage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
delay(1000);
|
CheckMeyPinsTriggered();
|
||||||
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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
|
||||||
@@ -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 <main>
|
|
||||||
../../../../../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>:
|
|
||||||
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+0x76>
|
|
||||||
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 <main+0xd2>
|
|
||||||
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 <main+0xbe>
|
|
||||||
1e0: 0f df rcall .-482 ; 0x0 <__vectors>
|
|
||||||
1e2: f6 cf rjmp .-20 ; 0x1d0 <main+0xbe>
|
|
||||||
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 <main+0xca>
|
|
||||||
|
|
||||||
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>
|
|
||||||
@@ -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
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,221 +0,0 @@
|
|||||||
#include <SPI.h>;
|
|
||||||
#include <mcp2515.h>;
|
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user