diff --git a/B15F.elf b/B15F.elf index 93dac83..d3266c5 100644 Binary files a/B15F.elf and b/B15F.elf differ diff --git a/B15F.hex b/B15F.hex index abe4f42..6e381a3 100644 --- a/B15F.hex +++ b/B15F.hex @@ -8,14 +8,14 @@ :100070000C9489000C9489000C9489000C948900DC :100080000C9489000C9489000C948900E900EB0021 :10009000ED00E400EF00F100F300F500F700F900D7 -:1000A000FB00FD00D804D504D2049B04CF04CC048B -:1000B000C904C604C304C004BD04DB04DE04112467 +:1000A000FB00FD0051054E054B05140548054505AF +:1000B00042053F053C053905360554055705112411 :1000C0001FBECFEFD0E4DEBFCDBF11E0A0E0B1E0B6 -:1000D000E0E2FAE000E00BBF02C007900D92A2320E +:1000D000E2E1FBE000E00BBF02C007900D92A2320C :1000E000B107D9F721E0A2E2B1E001C01D92A4332B :1000F000B207E1F710E0CFE5D0E004C02197FE01A0 -:100100000E940505CE35D107C9F70E9497040C94CB -:100110000E050C94000083E391E00E94000160E072 +:100100000E947E05CE35D107C9F70E9410050C94D8 +:1001100087050C94000083E391E00E94000160E0F9 :1001200080E391E00E9443016FEF80E391E00E9441 :10013000640160E08DE291E00E9443016FEF8DE287 :1001400091E00E9464016FEF8AE291E00E946401F5 @@ -24,12 +24,12 @@ :10017000A895809160008861809360001092600073 :100180000FBE08950FB6F894A8958091600088611D :1001900080936000109260000FBE82E291E00E94A6 -:1001A0006B03E82F98E088E10FB6F894A895809348 +:1001A000D403E82F98E088E10FB6F894A8958093DF :1001B00060000FBE90936000A8958E2F90E0FC0128 :1001C0003197EC30F10508F00895EA5BFF4F0C948D -:1001D00005050C9483030C9494030C94B8030C94BD -:1001E000C5030C94D8030C94EB030C94F4030C9407 -:1001F000FD030C9410040C9423040C943104089512 +:1001D0007E050C94EC030C94FD030C9421040C9408 +:1001E0002E040C9441040C9454040C945D040C945F +:1001F00066040C9479040C948C040C949A0408956D :1002000084B1806B84B926988AB18C618AB980E503 :100210008CBD81E08DBD8BB1837E8BB95A9A5B9A80 :100220005C9A08958BB1837E8BB98BB160FD10C051 @@ -107,60 +107,76 @@ :1006A000C00085FFFCCF7093C60008958091C00004 :1006B00085FFFCCF4093C6009FEF940F442351F079 :1006C000FB0121918091C00085FFFCCF2093C600E3 -:1006D0009150B8F708958091C00087FFFCCF8091BA -:1006E000C60008958091C00087FFFCCF2091C6000E -:1006F00030E09091C00097FFFCCF8091C600A90127 -:10070000582BCA010895CF9382E291E00E946B03B7 -:10071000C82F6FEF82E291E00E9442036C2F82E2C9 -:1007200091E0CF910C94420363E082E291E00E9459 -:1007300042034CE066E171E082E291E00E945603E0 -:1007400049E06DE071E082E291E00E9456034CE0E6 -:1007500061E071E082E291E00E9456038091000125 -:10076000811101C008956FEF82E291E00C94420381 -:1007700082E291E00E947203BC01660F771F680F4E -:10078000791F82E291E00C94490382E291E00E9499 -:100790006B03682F80E391E00E9485018091000146 -:1007A000811101C008956FEF82E291E00C94420341 -:1007B00082E291E00E946B03682F8DE291E00E943B -:1007C000850180910001811101C008956FEF82E2DF -:1007D00091E00C94420380E391E00E94EA01682FCB -:1007E00082E291E00C9442038DE291E00E94EA01E2 -:1007F000682F82E291E00C94420382E291E00E9431 -:100800007203BC0187E291E00E9412028091000114 -:10081000811101C008956FEF82E291E00C944203D0 -:1008200082E291E00E947203BC0184E291E00E94A6 -:10083000120280910001811101C008956FEF82E2E0 -:1008400091E00C94420382E291E00E946B03682FD6 -:1008500083E291E00E944102BC0182E291E00C94AB -:1008600049038F929F92AF92BF92CF92DF92EF9205 -:10087000FF920F931F93CF93DF9382E291E00E9448 -:100880006B03882E82E291E00E946B03982E82E235 -:1008900091E00E947203EC0182E291E00E947203F7 -:1008A0005C0182E291E00E9472038C016FEF82E2B0 -:1008B00091E00E944203A09E6001A19ED00CB09ED8 -:1008C000D00C1124CC15DD050CF5BE0187E291E0BA -:1008D0000E941202A895682D83E291E00E944102D5 -:1008E0007C01692D83E291E00E9441028C01B701F5 -:1008F00082E291E00E944903B80182E291E00E9405 -:100900004903CA0DDB1DCC15DD05FCF26FEF82E259 -:1009100091E0DF91CF911F910F91FF90EF90DF90C9 -:10092000CF90BF90AF909F908F900C9442030E9405 -:100930008B00D8E1C8E00FB6F894A89580916000CC -:10094000886180936000109260000FBE82E291E0A7 -:100950000E946B030FB6F894A895D09360000FBE69 -:10096000C0936000A89590E0FC013197EC30F10550 -:1009700010F7EE5AFF4F0C9405050E942304DBCFBD -:100980000E941004D8CF0E94FD03D5CF0E94F4032B -:10099000D2CF0E94EB03CFCF0E94D803CCCF0E94CE -:1009A000C503C9CF0E94B803C6CF0E949403C3CF2A -:1009B0000E948303C0CF0E943104BDCF83E391E046 -:1009C0000E94FF0042E063E371E080E391E00E9457 -:1009D0003E0143E063E371E08DE291E00E943E015D -:1009E00045E063E371E08AE291E00E943E0140E06D -:1009F00063E371E087E291E00E940D0241E063E36E -:100A000071E084E291E00C940D02EE0FFF1F0024D0 -:100A1000001C0BBE0790F691E02D0994F894FFCFCF -:100A200001626F617264696E666F2E680031333ADD -:100A300033333A3430004D61722032382032303155 -:020A400039007B +:1006D0009150B8F708958091C00085FFFCCF4093FA +:1006E000C6005FEF540F442309F45CC0FB0120E017 +:1006F00041E9DF0190818091C00085FFFCCF90939C +:10070000C60031969C91822F892780FD842790E036 +:1007100095958795282F80FF02C0242F2827822FA8 +:1007200090E095958795282F80FF02C0242F2827D9 +:1007300030E035952795822F20FF02C0842F822735 +:1007400090E095958795282F80FF02C0242F2827B9 +:1007500030E035952795822F20FF02C0842F822715 +:1007600090E095958795282F80FF02C0242F282799 +:1007700030E035952795822F20FF02C0842F8227F5 +:10078000282F2695515008F0B4CF8091C00085FFE6 +:10079000FCCF2093C6008091C00087FFFCCF8091E2 +:1007A000C600089520E0F1CF8091C00087FFFCCF04 +:1007B0008091C60008958091C00087FFFCCF2091F2 +:1007C000C60030E09091C00097FFFCCF8091C6003A +:1007D000A901582BCA010895CF9382E291E00E94AB +:1007E000D403C82F6FEF82E291E00E9442036C2F86 +:1007F00082E291E0CF910C94420363E082E291E0C7 +:100800000E9442034CE066E171E082E291E00E94C6 +:10081000560349E06DE071E082E291E00E945603E8 +:100820004CE061E071E082E291E00E945603809129 +:100830000001811101C008956FEF82E291E00C94F4 +:10084000420382E291E00E94DB03BC01660F771F46 +:10085000680F791F82E291E00C94490382E291E0F3 +:100860000E94D403682F80E391E00E94850180916B +:100870000001811101C008956FEF82E291E00C94B4 +:10088000420382E291E00E94D403682F8DE291E05E +:100890000E94850180910001811101C008956FEFD0 +:1008A00082E291E00C94420380E391E00E94EA012D +:1008B000682F82E291E00C9442038DE291E00E9465 +:1008C000EA01682F82E291E00C94420382E291E017 +:1008D0000E94DB03BC0187E291E00E94120280913A +:1008E0000001811101C008956FEF82E291E00C9444 +:1008F000420382E291E00E94DB03BC0184E291E0CA +:100900000E94120280910001811101C008956FEFD1 +:1009100082E291E00C94420382E291E00E94D403CF +:10092000682F83E291E00E944102BC0182E291E0E3 +:100930000C9449038F929F92AF92BF92CF92DF9215 +:10094000EF92FF920F931F93CF93DF9300D000D0CD +:10095000CDB7DEB782E291E00E94D403B82E82E2E6 +:1009600091E00E94D403A82E82E291E00E94DB0372 +:100970008C0182E291E00E94DB037C0182E291E043 +:100980000E94DB034C016FEF82E291E00E94420380 +:10099000E89C6001E99CD00CF89CD00C11240C154B +:1009A0001D05C4F5B80187E291E00E941202A895E6 +:1009B0006B2D83E291E00E9441029A8389836A2D24 +:1009C00083E291E00E9441029C838B8302C08F3FAF +:1009D000E1F0A89544E0BE016F5F7F4F82E291E0B5 +:1009E0000E946B038111F3CF0F900F900F900F9027 +:1009F000DF91CF911F910F91FF90EF90DF90CF90FB +:100A0000BF90AF909F908F9008950E0D1F1D0C15F5 +:100A10001D0544F26FEF82E291E00E944203E4CFB1 +:100A20000E948B00D8E1C8E00FB6F894A895809199 +:100A30006000886180936000109260000FBE82E2C7 +:100A400091E00E94D4030FB6F894A895D09360006B +:100A50000FBEC0936000A89590E0FC013197EC3088 +:100A6000F10510F7EE5AFF4F0C947E050E948C049E +:100A7000DBCF0E947904D8CF0E946604D5CF0E94B4 +:100A80005D04D2CF0E945404CFCF0E944104CCCF4A +:100A90000E942E04C9CF0E942104C6CF0E94FD03EC +:100AA000C3CF0E94EC03C0CF0E949A04BDCF83E362 +:100AB00091E00E94FF0042E063E371E080E391E097 +:100AC0000E943E0143E063E371E08DE291E00E9409 +:100AD0003E0145E063E371E08AE291E00E943E015D +:100AE00040E063E371E087E291E00E940D0241E0A3 +:100AF00063E371E084E291E00C940D02EE0FFF1FBE +:100B00000024001C0BBE0790F691E02D0994F89488 +:020B1000FFCF15 +:100B120001626F617264696E666F2E680031353AE8 +:100B220032303A3334004D61722032382032303163 +:020B3200390088 :00000001FF diff --git a/b15f.aws b/b15f.aws index 1407eab..1120d7e 100644 --- a/b15f.aws +++ b/b15f.aws @@ -1 +1 @@ - + diff --git a/requests.cpp b/requests.cpp index b9e5361..3a83465 100644 --- a/requests.cpp +++ b/requests.cpp @@ -96,10 +96,26 @@ void rqAdcDacStroke() { dac0.setValue(i); wdt_reset(); - uint16_t a = adu.getValue(channel_a); - uint16_t b = adu.getValue(channel_b); - usart.writeInt(a); - usart.writeInt(b); + + union doubleword + { + uint16_t word[2]; + uint8_t byte[4]; + }; + + union doubleword dw; + dw.word[0] = adu.getValue(channel_a); + dw.word[1] = adu.getValue(channel_b); + + uint8_t ret = 0; + do + { + wdt_reset(); + ret = usart.writeBlock(&(dw.byte[0]), 4); + + if(ret == 0) + return; + } while(ret != USART::MSG_OK); } usart.writeByte(USART::MSG_OK); diff --git a/usart.cpp b/usart.cpp index abe48b5..6f470b0 100644 --- a/usart.cpp +++ b/usart.cpp @@ -45,6 +45,28 @@ void USART::writeStr(const char* str, uint8_t len) writeByte(*str++); } +uint8_t USART::writeBlock(uint8_t* ptr, uint8_t len) +{ + writeByte(len); + + uint8_t crc = 0; + while(len--) + { + writeByte(*ptr); + crc ^= *ptr++; + for (uint8_t i = 0; i < 8; i++) + { + if (crc & 1) + crc ^= CRC7_POLY; + crc >>= 1; + } + } + + writeByte(crc); + + return readByte(); +} + uint8_t USART::readByte() { while (!(UCSR0A & (1< constexpr uint32_t BAUDRATE = 115200; // 38400 +constexpr uint8_t CRC7_POLY = 0x91; class USART { @@ -16,6 +17,7 @@ public: void writeInt(uint16_t); void writeLong(uint32_t); void writeStr(const char*, uint8_t); + uint8_t writeBlock(uint8_t*, uint8_t); uint8_t readByte(void); uint16_t readInt(void); uint32_t readLong(void);