speichern
This commit is contained in:
parent
86da74bed0
commit
8e785e4b70
|
@ -28,11 +28,12 @@ void B15F::init()
|
|||
|
||||
|
||||
// Temporärer Test
|
||||
uint8_t block[] = {0, 1, 2, 3};
|
||||
uint8_t block[16];
|
||||
while(1)
|
||||
{
|
||||
usart.writeBlock(&block[0], 0, sizeof(block));
|
||||
usart.printStatistics();
|
||||
usleep(1000);
|
||||
}
|
||||
throw std::runtime_error("SCHLUSS");
|
||||
|
||||
|
|
Binary file not shown.
|
@ -2,7 +2,7 @@
|
|||
|
||||
void USART::openDevice(std::string device)
|
||||
{
|
||||
file_desc = open(device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
|
||||
file_desc = open(device.c_str(), O_RDWR | O_NOCTTY | O_NDELAY /* | O_NONBLOCK*/);
|
||||
if(file_desc <= 0)
|
||||
throw USARTException("Fehler beim Öffnen des Gerätes");
|
||||
|
||||
|
@ -96,7 +96,7 @@ int USART::read_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t
|
|||
elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
|
||||
}
|
||||
|
||||
return n_read;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int USART::write_timeout(uint8_t* buffer, uint16_t offset, uint8_t len, uint32_t timeout)
|
||||
|
@ -150,23 +150,35 @@ void USART::writeBlock(uint8_t* buffer, uint16_t offset, uint8_t len)
|
|||
block_buffer[len + 2] = BLOCK_END;
|
||||
|
||||
// send block
|
||||
clearOutputBuffer();
|
||||
clearInputBuffer();
|
||||
int n_sent = write_timeout(&block_buffer[0], 0, len + 3, us_per_bit * n_total);
|
||||
if(n_sent != n_total)
|
||||
throw std::runtime_error("fatal (send): " + std::to_string(n_sent));
|
||||
|
||||
/*for(uint8_t i = 0; i < len + 3; i++)
|
||||
{
|
||||
write_timeout(&block_buffer[i], 0, 1, us_per_bit * n_total);
|
||||
//tcdrain(file_desc);
|
||||
//usleep(1000);
|
||||
}*/
|
||||
|
||||
// flush output data
|
||||
tcdrain(file_desc);
|
||||
|
||||
usleep(us_per_bit * n_total);
|
||||
//usleep(us_per_bit * n_total * 10);
|
||||
|
||||
// check response
|
||||
int n_read = read_timeout(&aw, 0, 1, us_per_bit);
|
||||
int n_read = read_timeout(&aw, 0, 1, us_per_bit * n_blocks_total * 10);
|
||||
for(uint16_t i = 0; i < 255 && n_read != 1; i++)
|
||||
{
|
||||
writeByte(0x80); // Stoppzeichen für Block
|
||||
tcdrain(file_desc);
|
||||
if(tcdrain(file_desc))
|
||||
{
|
||||
std::cout << "drain failed" << std::endl;
|
||||
}
|
||||
std::cout << "WARNING: read error (" << n_read << "), retry #" << (int) i << std::endl;
|
||||
usleep(us_per_bit);
|
||||
usleep(us_per_bit*100);
|
||||
n_read = read_timeout(&aw, 0, 1, us_per_bit);
|
||||
}
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ public:
|
|||
/***************************************/
|
||||
|
||||
constexpr static uint8_t CRC7_POLY = 0x91;
|
||||
constexpr static uint8_t MAX_BLOCK_SIZE = 16;
|
||||
constexpr static uint8_t MAX_BLOCK_SIZE = 64;
|
||||
constexpr static uint8_t BLOCK_END = 0x80;
|
||||
private:
|
||||
|
||||
|
|
Binary file not shown.
BIN
driver/main
BIN
driver/main
Binary file not shown.
Binary file not shown.
|
@ -3,190 +3,235 @@
|
|||
:100020000C947D000C947D000C947D000C947D005C
|
||||
:100030000C947D000C947D000C947D000C947D004C
|
||||
:100040000C947D000C947D000C947D000C947D003C
|
||||
:100050000C947D000C947D000C947D000C947D002C
|
||||
:100050000C947F000C947D000C947D000C947D002A
|
||||
:100060000C947D000C947D000C947D000C947D001C
|
||||
:100070000C947D000C947D000C947D000C947D000C
|
||||
:100080000C947D000C947D000C947D00EC00EF003E
|
||||
:10009000F200E300F500F800FB00FE00010104019E
|
||||
:1000A000E9000701AA0511241FBECFEFD0E4DEBF8F
|
||||
:1000B000CDBF11E0A0E0B1E0E8EBFBE000E00BBF5A
|
||||
:100080000C947D000C947D000C947D0023012601CE
|
||||
:1000900029011A012C012F013201350138013B01E0
|
||||
:1000A00020013E010D0711241FBECFEFD0E4DEBFBB
|
||||
:1000B000CDBF11E0A0E0B1E0ECE8FEE000E00BBF56
|
||||
:1000C00002C007900D92A232B107D9F721E0A2E257
|
||||
:1000D000B1E001C01D92A433B207E1F710E0C3E51F
|
||||
:1000E000D0E004C02197FE010E94D105C235D1079E
|
||||
:1000F000C9F70E947A050C94DA050C94000083E39A
|
||||
:1001000091E00E940B0160E080E391E00E944E01CB
|
||||
:100110006FEF80E391E00E946F0160E08DE291E07B
|
||||
:100120000E944E016FEF8DE291E00E946F016FEF30
|
||||
:100130008AE291E00E946F0183E291E00E94460210
|
||||
:1001400082E291E00E943E03789484B7877F84BF67
|
||||
:10015000109260000FB6F894A895809160008861B5
|
||||
:1001600080936000109260000FBE0895CF930FB689
|
||||
:10017000F894A89580916000886180936000109247
|
||||
:1001800060000FBE6FEF8DE291E00E94900182E26D
|
||||
:1001900091E00E94EC03C82F60E08DE291E00E94A4
|
||||
:1001A000900198E088E10FB6F894A89580936000DC
|
||||
:1001B0000FBE90936000A8958C2F90E0FC013197C2
|
||||
:1001C000EC30F10510F0CF910895EA5BFF4F0C94ED
|
||||
:1001D000D105CF910C940605CF910C947F04CF915B
|
||||
:1001E0000C949004CF910C94AF04CF910C94BC0468
|
||||
:1001F000CF910C94CA04CF910C94D804CF910C9455
|
||||
:10020000E104CF910C94EA04CF910C94F804CF91BF
|
||||
:100210000C941405089584B1806B84B926988AB132
|
||||
:100220008C618AB980E58CBD81E08DBD8BB1837E08
|
||||
:100230008BB95A9A5B9A5C9A08958BB1837E8BB97D
|
||||
:100240008BB160FD10C090E0892B8BB98BB161FD43
|
||||
:1002500010C090E0892B8BB98BB162FD10C090E08B
|
||||
:10026000892B8BB9089594E0892B8BB98BB161FFF1
|
||||
:10027000F0CF98E0892B8BB98BB162FFF0CF90E182
|
||||
:10028000892B8BB908956EBD0DB407FEFDCF8EB5D9
|
||||
:100290000895FC0171836083428308951F93CF9377
|
||||
:1002A000DF93EC01162F6A81888199810E941D01DC
|
||||
:1002B00060E4888199810E94430160E0888199818E
|
||||
:1002C0000E944301612F888199810E94430167E068
|
||||
:1002D00088819981DF91CF911F910C941D011F930B
|
||||
:1002E000CF93DF93EC01162F6A81888199810E9458
|
||||
:1002F0001D0160E4888199810E94430161E0888149
|
||||
:1003000099810E944301612F888199810E94430154
|
||||
:1003100067E088819981DF91CF911F910C941D0135
|
||||
:100320001F93CF93DF93EC01162F6A818881998107
|
||||
:100330000E941D0160E4888199810E94430162E16D
|
||||
:10034000888199810E944301612F888199810E944F
|
||||
:10035000430167E088819981DF91CF911F910C94CF
|
||||
:100360001D011F93CF93DF93EC01162F6A818881C3
|
||||
:1003700099810E941D0160E4888199810E94430156
|
||||
:1003800063E1888199810E944301612F888199816D
|
||||
:100390000E94430167E088819981DF91CF911F918D
|
||||
:1003A0000C941D011F93CF93DF93EC016A81888128
|
||||
:1003B00099810E941D0161E4888199810E94430115
|
||||
:1003C00062E1888199810E94430160E0888199817E
|
||||
:1003D0000E944301182F67E0888199810E941D01C6
|
||||
:1003E000812FDF91CF911F9108951F93CF93DF93BA
|
||||
:1003F000EC016A81888199810E941D0161E48881F4
|
||||
:1004000099810E94430163E1888199810E9443019F
|
||||
:1004100060E0888199810E944301182F67E08881FC
|
||||
:1004200099810E941D01812FDF91CF911F91089525
|
||||
:10043000FC0171836083428308950F931F93CF93D0
|
||||
:10044000DF93EC018B016A81888199810E941D01F3
|
||||
:10045000B8010024660F771F001C660F771F001C71
|
||||
:10046000672F702D888199810E944301602F660F4C
|
||||
:10047000660F888199810E94430167E08881998194
|
||||
:10048000DF91CF911F910F910C941D0110927C0070
|
||||
:1004900087E880937A00089580917C00807E682BA5
|
||||
:1004A00060937C0080917A00806480937A0083EA74
|
||||
:1004B00091E00197F1F700C0000080917A0086FD7D
|
||||
:1004C000FCCF809178009091790008950F931F934D
|
||||
:1004D000CF93DF9361E080E391E00E949001C1E05F
|
||||
:1004E000D0E001E010E02FEF84E39CE02150804059
|
||||
:1004F0009040E1F700C00000B8010C2E01C0660F6B
|
||||
:100500000A94EAF780E391E00E9490012196C930B5
|
||||
:10051000D10549F7DF91CF911F910F9108950F9366
|
||||
:100520001F93CF93DF9361E08DE291E00E949001F1
|
||||
:10053000C1E0D0E001E010E02FEF84E39CE0215027
|
||||
:1005400080409040E1F700C00000B8010C2E01C0CF
|
||||
:10055000660F0A94EAF78DE291E00E9490012196DD
|
||||
:10056000C930D10549F7DF91CF911F910F910895BF
|
||||
:10057000CF93DF93C0E0D0E0BE0187E291E00E941C
|
||||
:100580001D0287E893E10197F1F700C00000219672
|
||||
:10059000C11594E0D90781F72FE78AE196E0215051
|
||||
:1005A00080409040E1F700C0000060E070E087E22A
|
||||
:1005B00091E0DF91CF910C941D02CF93DF93C0E0C7
|
||||
:1005C000D0E0BE0184E291E00E941D0287E893E141
|
||||
:1005D0000197F1F700C000002196C11594E0D907FA
|
||||
:1005E00081F72FE78AE196E0215080409040E1F7C3
|
||||
:1005F00000C0000060E070E084E291E0DF91CF9104
|
||||
:100600000C941D020FB6F894A89580916000886143
|
||||
:1006100080936000109260000FBE60E083E291E082
|
||||
:100620000E944C02BC0187E291E00E941D0261E041
|
||||
:1006300083E291E00E944C02BC0184E291E00E94BE
|
||||
:100640001D0280E391E00E94F501682F80E391E0B4
|
||||
:100650000E9490018AE291E00E94F501682F8DE2EC
|
||||
:1006600091E00E949001D9CF0E9466020E948F0201
|
||||
:100670000E94B8020E94DD020E94020382E0809381
|
||||
:10068000C00088E18093C10086E08093C200109290
|
||||
:10069000C50084E18093C40008958091C6008FE76F
|
||||
:1006A00092E00197F1F700C000008091C00087FD43
|
||||
:1006B000F4CF08958091C00085FFFCCF6093C60001
|
||||
:1006C00008958091C00085FFFCCF6093C6008091A3
|
||||
:1006D000C00085FFFCCF7093C60008958091C000D4
|
||||
:1006E00085FFFCCF4093C6009FEF940F442351F049
|
||||
:1006F000FB0121918091C00085FFFCCF2093C600B3
|
||||
:100700009150B8F708958091C00085FFFCCF4093C9
|
||||
:10071000C6005FEF540F442309F45CC0FB0120E0E6
|
||||
:1007200041E9DF0190818091C00085FFFCCF90936B
|
||||
:10073000C60031969C91822F892780FD842790E006
|
||||
:1007400095958795282F80FF02C0242F2827822F78
|
||||
:1007500090E095958795282F80FF02C0242F2827A9
|
||||
:1007600030E035952795822F20FF02C0842F822705
|
||||
:1007700090E095958795282F80FF02C0242F282789
|
||||
:1007800030E035952795822F20FF02C0842F8227E5
|
||||
:1007900090E095958795282F80FF02C0242F282769
|
||||
:1007A00030E035952795822F20FF02C0842F8227C5
|
||||
:1007B000282F2695515008F0B4CF8091C00085FFB6
|
||||
:1007C000FCCF2093C6008091C00087FFFCCF8091B2
|
||||
:1007D000C600089520E0F1CF8091C00087FFFCCFD4
|
||||
:1007E0008091C60008958091C00087FFFCCF2091C2
|
||||
:1007F000C60030E09091C00097FFFCCF8091C6000A
|
||||
:10080000A901582BCA010895CB0171E99C01240F5D
|
||||
:10081000311DA9018091C00087FFFCCFE091C60087
|
||||
:10082000E13108F0E0E060E090E08091C00087FFF7
|
||||
:10083000FCCFF091C6008F2F892780FD872790E09D
|
||||
:1008400095958795282F80FF02C0272F2827822F74
|
||||
:1008500090E095958795282F80FF02C0272F2827A5
|
||||
:1008600030E035952795822F20FF02C0872F822701
|
||||
:1008700090E095958795282F80FF02C0272F282785
|
||||
:1008800030E035952795822F20FF02C0872F8227E1
|
||||
:1008900090E095958795282F80FF02C0272F282765
|
||||
:1008A00030E035952795822F20FF02C0872F8227C1
|
||||
:1008B000982F96956E17F0F06F5FE61708F0B5CF9A
|
||||
:1008C0008091C600EFE7F2E03197F1F700C0000039
|
||||
:1008D0008091C00087FDF4CF992351F02EEF8091D5
|
||||
:1008E000C00085FFFCCF2093C600911193CF0895DF
|
||||
:1008F0002FEFF5CFDA01A60FB11DFC93DDCFCF931B
|
||||
:1009000082E291E00E94EC03C82F6FEF82E291E057
|
||||
:100910000E945A036C2F82E291E0CF910C945A030B
|
||||
:1009200063E082E291E00E945A034CE065E171E0ED
|
||||
:1009300082E291E00E946E0349E06CE071E082E2A5
|
||||
:1009400091E00E946E034CE060E071E082E291E091
|
||||
:100950000E946E036FEF82E291E00C945A0382E2F0
|
||||
:1009600091E00E94F303BC01660F771F680F791FA7
|
||||
:1009700082E291E00C94610382E291E00E94EC0338
|
||||
:10098000682F80E391E00E9490016FEF82E291E096
|
||||
:100990000C945A0382E291E00E94EC03682F8DE2EE
|
||||
:1009A00091E00E9490016FEF82E291E00C945A0373
|
||||
:1009B00080E391E00E94F501682F82E291E00C94BF
|
||||
:1009C0005A038DE291E00E94F501682F82E291E0E6
|
||||
:1009D0000C945A0382E291E00E94F303BC0187E287
|
||||
:1009E00091E00E941D026FEF82E291E00C945A03A5
|
||||
:1009F00082E291E00E94F303BC0184E291E00E9454
|
||||
:100A00001D026FEF82E291E00C945A0382E291E0C2
|
||||
:100A10000E94EC03682F83E291E00E944C02BC012B
|
||||
:100A200082E291E00C9461038F929F92AF92BF9209
|
||||
:100A3000CF92DF92EF92FF920F931F93CF93DF93AA
|
||||
:100A400082E291E00E94EC03882E82E291E00E9413
|
||||
:100A5000EC03982E82E291E00E94F303EC0182E223
|
||||
:100A600091E00E94F3035C0182E291E00E94F303B3
|
||||
:100A70008C016FEF82E291E00E945A03A09E600118
|
||||
:100A8000A19ED00CB09ED00C1124CC15DD050CF528
|
||||
:100A9000BE0187E291E00E941D02A895682D83E2C5
|
||||
:100AA00091E00E944C027C01692D83E291E00E945A
|
||||
:100AB0004C028C01B70182E291E00E946103B8010F
|
||||
:100AC00082E291E00E946103CA0DDB1DCC15DD05B9
|
||||
:100AD000FCF26FEF82E291E0DF91CF911F910F91D5
|
||||
:100AE000FF90EF90DF90CF90BF90AF909F908F904E
|
||||
:100AF0000C945A03CF93DF93CDB7DEB760970FB650
|
||||
:100B0000F894DEBF0FBECDBF0E947F006FEF80E381
|
||||
:100B100091E00E9490012FE78AE196E02150804009
|
||||
:100B20009040E1F700C0000060E080E391E00E94A7
|
||||
:100B3000900160E011E0160F80E391E00E949001C7
|
||||
:100B400040E0BE016F5F7F4F82E291E00E940404AB
|
||||
:100B5000612FF0CF83E391E00E940A0142E063E35A
|
||||
:100B600071E080E391E00E94490143E063E371E0BA
|
||||
:100B70008DE291E00E94490145E063E371E08AE281
|
||||
:100B800091E00E94490140E063E371E087E291E077
|
||||
:100B90000E94180241E063E371E084E291E00C946A
|
||||
:100BA0001802EE0FFF1F0024001C0BBE0790F691E9
|
||||
:080BB000E02D0994F894FFCF39
|
||||
:100BB800626F617264696E666F2E680031353A3211
|
||||
:100BC800393A3032004170722020312032303139C8
|
||||
:020BD80000001B
|
||||
:1000D000B1E001C01D92AA37B207E1F710E0C3E515
|
||||
:1000E000D0E004C02197FE010E943B07C235D10732
|
||||
:1000F000C9F70E94F1060C9444070C9400001F926B
|
||||
:100100000F920FB60F9211240BB60F922F933F93BD
|
||||
:100110004F935F936F937F938F939F93AF93BF930F
|
||||
:10012000EF93FF938091C00083FF05C06FEF86E7D8
|
||||
:1001300091E00E94C701F8946091C60082E291E0CC
|
||||
:100140000E943B047894FF91EF91BF91AF919F91F2
|
||||
:100150008F917F916F915F914F913F912F910F9070
|
||||
:100160000BBE0F900FBE0F901F90189589E791E07E
|
||||
:100170000E94420160E086E791E00E9485016FEFF6
|
||||
:1001800086E791E00E94A60160E083E791E00E948B
|
||||
:1001900085016FEF83E791E00E94A6016FEF80E792
|
||||
:1001A00091E00E94A60189E691E00E947D0282E230
|
||||
:1001B00091E00E947503789484B7877F84BF109282
|
||||
:1001C00060000FB6F894A8958091600088618093D4
|
||||
:1001D0006000109260000FBE0895CF930FB6F894A0
|
||||
:1001E000A895809160008861809360001092600003
|
||||
:1001F0000FBE6FEF83E791E00E94C70182E291E0BA
|
||||
:100200000E942304C82F60E083E791E00E94C701A9
|
||||
:1002100098E088E10FB6F894A895809360000FBE2F
|
||||
:1002200090936000A8958C2F90E0FC013197EC3002
|
||||
:10023000F10510F0CF910895EA5BFF4F0C943B0756
|
||||
:10024000CF910C947D06CF910C94F605CF910C9430
|
||||
:100250000706CF910C942606CF910C943306CF91CC
|
||||
:100260000C944106CF910C944F06CF910C945806F4
|
||||
:10027000CF910C946106CF910C946F06CF910C94A2
|
||||
:100280008B06089584B1806B84B926988AB18C61FD
|
||||
:100290008AB980E58CBD81E08DBD8BB1837E8BB941
|
||||
:1002A0005A9A5B9A5C9A08958BB1837E8BB98BB115
|
||||
:1002B00060FD10C090E0892B8BB98BB161FD10C03F
|
||||
:1002C00090E0892B8BB98BB162FD10C090E0892B37
|
||||
:1002D0008BB9089594E0892B8BB98BB161FFF0CF76
|
||||
:1002E00098E0892B8BB98BB162FFF0CF90E1892B1D
|
||||
:1002F0008BB908956EBD0DB407FEFDCF8EB5089580
|
||||
:10030000FC0171836083428308951F93CF93DF9331
|
||||
:10031000EC01162F6A81888199810E94540160E462
|
||||
:10032000888199810E947A0160E0888199810E9488
|
||||
:100330007A01612F888199810E947A0167E0888122
|
||||
:100340009981DF91CF911F910C9454011F93CF930A
|
||||
:10035000DF93EC01162F6A81888199810E945401F4
|
||||
:1003600060E4888199810E947A0161E088819981A5
|
||||
:100370000E947A01612F888199810E947A0167E049
|
||||
:1003800088819981DF91CF911F910C9454011F9323
|
||||
:10039000CF93DF93EC01162F6A81888199810E94A7
|
||||
:1003A000540160E4888199810E947A0162E1888128
|
||||
:1003B00099810E947A01612F888199810E947A0136
|
||||
:1003C00067E088819981DF91CF911F910C9454014E
|
||||
:1003D0001F93CF93DF93EC01162F6A818881998157
|
||||
:1003E0000E94540160E4888199810E947A0163E14E
|
||||
:1003F000888199810E947A01612F888199810E9468
|
||||
:100400007A0167E088819981DF91CF911F910C94E7
|
||||
:1004100054011F93CF93DF93EC016A818881998106
|
||||
:100420000E94540161E4888199810E947A0162E10D
|
||||
:10043000888199810E947A0160E0888199810E9477
|
||||
:100440007A01182F67E0888199810E945401812FD9
|
||||
:10045000DF91CF911F9108951F93CF93DF93EC010C
|
||||
:100460006A81888199810E94540161E4888199811F
|
||||
:100470000E947A0163E1888199810E947A0160E09B
|
||||
:10048000888199810E947A01182F67E0888199817B
|
||||
:100490000E945401812FDF91CF911F910895FC019B
|
||||
:1004A00071836083428308950F931F93CF93DF93EB
|
||||
:1004B000EC018B016A81888199810E945401B80105
|
||||
:1004C0000024660F771F001C660F771F001C672F24
|
||||
:1004D000702D888199810E947A01602F660F660FC6
|
||||
:1004E000888199810E947A0167E088819981DF91F2
|
||||
:1004F000CF911F910F910C94540110927C0087E8CA
|
||||
:1005000080937A00089580917C00807E682B6093B0
|
||||
:100510007C0080917A00806480937A0083EA91E085
|
||||
:100520000197F1F700C0000080917A0086FDFCCFB2
|
||||
:10053000809178009091790008950F931F93CF9345
|
||||
:10054000DF9361E086E791E00E94C701C1E0D0E05F
|
||||
:1005500001E010E02FEF84E39CE0215080409040C8
|
||||
:10056000E1F700C00000B8010C2E01C0660F0A942C
|
||||
:10057000EAF786E791E00E94C7012196C930D105CC
|
||||
:1005800049F7DF91CF911F910F9108950F931F931A
|
||||
:10059000CF93DF9361E083E791E00E94C701C1E060
|
||||
:1005A000D0E001E010E02FEF84E39CE02150804098
|
||||
:1005B0009040E1F700C00000B8010C2E01C0660FAA
|
||||
:1005C0000A94EAF783E791E00E94C7012196C930B7
|
||||
:1005D000D10549F7DF91CF911F910F910895CF93E6
|
||||
:1005E000DF93C0E0D0E0BE018DE691E00E945402AE
|
||||
:1005F00087E893E10197F1F700C000002196C1154B
|
||||
:1006000094E0D90781F72FE78AE196E021508040F6
|
||||
:100610009040E1F700C0000060E070E08DE691E0FE
|
||||
:10062000DF91CF910C945402CF93DF93C0E0D0E0E0
|
||||
:10063000BE018AE691E00E94540287E893E10197A7
|
||||
:10064000F1F700C000002196C11594E0D90781F7A9
|
||||
:100650002FE78AE196E0215080409040E1F700C00A
|
||||
:10066000000060E070E08AE691E0DF91CF910C94A9
|
||||
:1006700054020FB6F894A895809160008861809329
|
||||
:100680006000109260000FBE60E089E691E00E9479
|
||||
:100690008302BC018DE691E00E94540261E089E68C
|
||||
:1006A00091E00E948302BC018AE691E00E9454021C
|
||||
:1006B00086E791E00E942C02682F86E791E00E9475
|
||||
:1006C000C70180E791E00E942C02682F83E791E048
|
||||
:1006D0000E94C701D9CF0E949D020E94C6020E94BB
|
||||
:1006E000EF020E9414030E94390382E08093C0004D
|
||||
:1006F00088E98093C10086E08093C2001092C50013
|
||||
:1007000084E18093C40008958091C6008FE792E051
|
||||
:100710000197F1F700C000008091C00087FDF4CF81
|
||||
:1007200008958091C00085FFFCCF6093C6000895B6
|
||||
:100730008091C00085FFFCCF6093C6008091C0000F
|
||||
:1007400085FFFCCF7093C60008958091C00085FF9F
|
||||
:10075000FCCF4093C6009FEF940F442351F0FB0160
|
||||
:1007600021918091C00085FFFCCF2093C60091505D
|
||||
:10077000B8F708958091C00085FFFCCF4093C60074
|
||||
:100780005FEF540F442309F45CC0FB0120E041E912
|
||||
:10079000DF0190818091C00085FFFCCF9093C6005F
|
||||
:1007A00031969C91822F892780FD842790E0959532
|
||||
:1007B0008795282F80FF02C0242F2827822F90E0C2
|
||||
:1007C00095958795282F80FF02C0242F282730E099
|
||||
:1007D00035952795822F20FF02C0842F822790E035
|
||||
:1007E00095958795282F80FF02C0242F282730E079
|
||||
:1007F00035952795822F20FF02C0842F822790E015
|
||||
:1008000095958795282F80FF02C0242F282730E058
|
||||
:1008100035952795822F20FF02C0842F8227282F0D
|
||||
:100820002695515008F0B4CF8091C00085FFFCCFD1
|
||||
:100830002093C6008091C00087FFFCCF8091C60046
|
||||
:10084000089520E0F1CF8091C00087FFFCCF809118
|
||||
:10085000C60008958091C00087FFFCCF2091C6009C
|
||||
:1008600030E09091C00097FFFCCF8091C600A901B5
|
||||
:10087000582BCA010895CF93DF93FC01DC01AB5BD9
|
||||
:10088000BF4F8D919C9111978230910509F4ACC0B6
|
||||
:1008900098F4009709F48AC0019771F58081EF01FF
|
||||
:1008A000C80FD11D698322E030E02D933C938F5F08
|
||||
:1008B0008083DF91CF9108958330910519F10497DA
|
||||
:1008C000D9F48091C6008FE792E00197F1F700C05C
|
||||
:1008D00000008091C00087FDF4CFEF01CC5BDF4FBB
|
||||
:1008E00088818111E7C09FEF8091C00085FFFCCF18
|
||||
:1008F0009093C6001D921C9280818F5F8083DF9150
|
||||
:10090000CF9108958081EF01C80FD11D6983EF0158
|
||||
:10091000CC5BDF4F9881692760FF02C091E96927AE
|
||||
:1009200070E075956795462F60FF02C041E9462744
|
||||
:1009300050E055954795242F40FF02C021E9242718
|
||||
:1009400030E035952795422F20FF02C041E942272C
|
||||
:1009500050E055954795242F40FF02C021E92427F8
|
||||
:1009600030E035952795422F20FF02C041E942270C
|
||||
:1009700050E055954795242F40FF02C021E92427D8
|
||||
:1009800030E035952795922F20FF02C091E99227FC
|
||||
:10099000292F30E035952795288324E030E02D93EA
|
||||
:1009A0003C938F5F8083DF91CF910895613408F489
|
||||
:1009B00083C08091C6008FE792E00197F1F700C0F5
|
||||
:1009C00000008091C00087FDF4CF8091C00085FFBA
|
||||
:1009D000FCCF8EEF8093C6001D921C9280818F5FAA
|
||||
:1009E0008083DF91CF9108958081EF01C80FD11DE1
|
||||
:1009F0006983EF01CC5BDF4F9881692760FF02C0FC
|
||||
:100A000091E9692770E075956795462F60FF02C0F0
|
||||
:100A100041E9462750E055954795242F40FF02C0F5
|
||||
:100A200021E9242730E035952795422F20FF02C089
|
||||
:100A300041E9422750E055954795242F40FF02C0D9
|
||||
:100A400021E9242730E035952795422F20FF02C069
|
||||
:100A500041E9422750E055954795242F40FF02C0B9
|
||||
:100A600021E9242730E035952795922F20FF02C0F9
|
||||
:100A700091E99227292F30E0359527952883918198
|
||||
:100A8000891721F1891708F438CF8091C6008FE7C4
|
||||
:100A900092E00197F1F700C000008091C00087FD4F
|
||||
:100AA000F4CF8091C00085FD94CF8091C00085FF78
|
||||
:100AB000F8CF8FCF9EEF18CF6183EF01CC5BDF4F74
|
||||
:100AC000188281E090E08D939C9318CF23E030E072
|
||||
:100AD0002D933C938F5F12CFCF93DF93CB0171E9BE
|
||||
:100AE0009C01240F311DA901AEEF8091C00087FF4A
|
||||
:100AF000FCCFE091C600E03809F46AC0E13408F0A8
|
||||
:100B0000E0E060E090E08091C00087FFFCCFF091D2
|
||||
:100B1000C6008F2F892780FD872790E095958795C0
|
||||
:100B2000282F80FF02C0272F2827822F90E095953D
|
||||
:100B30008795282F80FF02C0272F282730E0359582
|
||||
:100B40002795822F20FF02C0872F822790E095955E
|
||||
:100B50008795282F80FF02C0272F282730E0359562
|
||||
:100B60002795822F20FF02C0872F822790E095953E
|
||||
:100B70008795282F80FF02C0272F282730E0359542
|
||||
:100B80002795822F20FF02C0872F8227982F9695C6
|
||||
:100B90006E1738F16F5FE61708F0B5CF8091C60089
|
||||
:100BA000EFE7F2E03197F1F700C000008091C0005C
|
||||
:100BB00087FDF4CF992399F02EEF8091C00085FF37
|
||||
:100BC000FCCF2093C600911190CFDF91CF91089573
|
||||
:100BD0008091C00085FFFCCFA093C60086CF2FEF89
|
||||
:100BE000ECCFEA01C60FD11DF883D4CFCF9382E2B8
|
||||
:100BF00091E00E942304C82F6FEF82E291E00E94EF
|
||||
:100C000091036C2F82E291E0CF910C94910363E009
|
||||
:100C100082E291E00E9491034CE065E171E082E2A2
|
||||
:100C200091E00E94A50349E06CE071E082E291E06E
|
||||
:100C30000E94A5034CE060E071E082E291E00E9436
|
||||
:100C4000A5036FEF82E291E00C94910382E291E0C0
|
||||
:100C50000E942A04BC01660F771F680F791F82E289
|
||||
:100C600091E00C94980382E291E00E942304682FA3
|
||||
:100C700086E791E00E94C7016FEF82E291E00C9459
|
||||
:100C8000910382E291E00E942304682F83E791E0C0
|
||||
:100C90000E94C7016FEF82E291E00C94910386E716
|
||||
:100CA00091E00E942C02682F82E291E00C94910363
|
||||
:100CB00083E791E00E942C02682F82E291E00C947D
|
||||
:100CC000910382E291E00E942A04BC018DE691E04A
|
||||
:100CD0000E9454026FEF82E291E00C94910382E251
|
||||
:100CE00091E00E942A04BC018AE691E00E9454022D
|
||||
:100CF0006FEF82E291E00C94910382E291E00E9416
|
||||
:100D00002304682F89E691E00E948302BC0182E2FD
|
||||
:100D100091E00C9498038F929F92AF92BF92CF92E2
|
||||
:100D2000DF92EF92FF920F931F93CF93DF9382E2B4
|
||||
:100D300091E00E942304882E82E291E00E94230425
|
||||
:100D4000982E82E291E00E942A04EC0182E291E076
|
||||
:100D50000E942A045C0182E291E00E942A048C0134
|
||||
:100D60006FEF82E291E00E949103A09E6001A19E3C
|
||||
:100D7000D00CB09ED00C1124CC15DD050CF5BE01B5
|
||||
:100D80008DE691E00E945402A895682D89E691E0D5
|
||||
:100D90000E9483027C01692D89E691E00E94830212
|
||||
:100DA0008C01B70182E291E00E949803B80182E2CF
|
||||
:100DB00091E00E949803CA0DDB1DCC15DD05FCF205
|
||||
:100DC0006FEF82E291E0DF91CF911F910F91FF9041
|
||||
:100DD000EF90DF90CF90BF90AF909F908F900C944A
|
||||
:100DE00091030E94B6006FEF86E791E00E94C70171
|
||||
:100DF0002FE78AE196E0215080409040E1F700C063
|
||||
:100E0000000060E086E791E00E94C70187E893E177
|
||||
:100E10000197F1F700C00000F9CF89E791E00E9447
|
||||
:100E2000410142E069E771E086E791E00E948001BC
|
||||
:100E300043E069E771E083E791E00E94800145E0CB
|
||||
:100E400069E771E080E791E00E94800140E069E796
|
||||
:100E500071E08DE691E00E944F0241E069E771E0A8
|
||||
:100E60008AE691E00E944F021092220110926801DE
|
||||
:100E7000109267010895EE0FFF1F0024001C0BBEA7
|
||||
:0C0E80000790F691E02D0994F894FFCF44
|
||||
:100E8C00626F617264696E666F2E680031303A343D
|
||||
:100E9C00333A3130004170722020322032303139F7
|
||||
:020EAC00000044
|
||||
:00000001FF
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#include "global_vars.h"
|
||||
|
||||
SPI spi;
|
||||
MCP23S17 beba0(spi, SPIADR::BEBA0);
|
||||
MCP23S17 beba1(spi, SPIADR::BEBA1);
|
||||
MCP23S17 sw(spi, SPIADR::SWITCH);
|
||||
TLC5615 dac0(spi, SPIADR::AA0);
|
||||
TLC5615 dac1(spi, SPIADR::AA1);
|
||||
ADU adu;
|
||||
USART usart;
|
||||
volatile SPI spi;
|
||||
volatile MCP23S17 beba0(*((SPI*) &spi), SPIADR::BEBA0);
|
||||
volatile MCP23S17 beba1(*((SPI*) &spi), SPIADR::BEBA1);
|
||||
volatile MCP23S17 sw(*((SPI*) &spi), SPIADR::SWITCH);
|
||||
volatile TLC5615 dac0(*((SPI*) &spi), SPIADR::AA0);
|
||||
volatile TLC5615 dac1(*((SPI*) &spi), SPIADR::AA1);
|
||||
volatile ADU adu;
|
||||
volatile USART usart;
|
||||
|
||||
|
|
|
@ -6,13 +6,13 @@
|
|||
#include "adu.h"
|
||||
#include "usart.h"
|
||||
|
||||
extern SPI spi;
|
||||
extern MCP23S17 beba0;
|
||||
extern MCP23S17 beba1;
|
||||
extern MCP23S17 sw;
|
||||
extern TLC5615 dac0;
|
||||
extern TLC5615 dac1;
|
||||
extern ADU adu;
|
||||
extern USART usart;
|
||||
extern volatile SPI spi;
|
||||
extern volatile MCP23S17 beba0;
|
||||
extern volatile MCP23S17 beba1;
|
||||
extern volatile MCP23S17 sw;
|
||||
extern volatile TLC5615 dac0;
|
||||
extern volatile TLC5615 dac1;
|
||||
extern volatile ADU adu;
|
||||
extern volatile USART usart;
|
||||
|
||||
#endif // GLOBAL_VARS_H
|
||||
|
|
|
@ -9,18 +9,29 @@
|
|||
|
||||
#define WDT_TIMEOUT WDTO_15MS
|
||||
|
||||
ISR(USART0_RX_vect)
|
||||
{
|
||||
if(UCSR0A & _BV(DOR0))
|
||||
{
|
||||
((MCP23S17*) &beba0)->writePortA(0xFF);
|
||||
}
|
||||
cli();
|
||||
((USART*) &usart)->nextByte(UDR0);
|
||||
sei();
|
||||
}
|
||||
|
||||
void initAll()
|
||||
{
|
||||
spi.init();
|
||||
((SPI*) &spi)->init();
|
||||
|
||||
beba0.setDirA(0x00); // alle Ausgang
|
||||
beba0.setDirB(0xFF); // alle Eingang
|
||||
beba1.setDirA(0x00); // alle Ausgang
|
||||
beba1.setDirB(0xFF); // alle Eingang
|
||||
sw.setDirB(0xFF); // alle Eingang
|
||||
((MCP23S17*) &beba0)->setDirA(0x00); // alle Ausgang
|
||||
((MCP23S17*) &beba0)->setDirB(0xFF); // alle Eingang
|
||||
((MCP23S17*) &beba1)->setDirA(0x00); // alle Ausgang
|
||||
((MCP23S17*) &beba1)->setDirB(0xFF); // alle Eingang
|
||||
((MCP23S17*) &sw)->setDirB(0xFF); // alle Eingang
|
||||
|
||||
adu.init();
|
||||
usart.init();
|
||||
((ADU*) &adu)->init();
|
||||
((USART*) &usart)->init();
|
||||
|
||||
// aktiviere Interrupts
|
||||
sei();
|
||||
|
@ -35,9 +46,9 @@ void handleRequest()
|
|||
{
|
||||
wdt_disable();
|
||||
|
||||
beba1.writePortA(0xFF);
|
||||
const uint8_t req = usart.readByte();
|
||||
beba1.writePortA(0x00);
|
||||
((MCP23S17*) &beba1)->writePortA(0xFF);
|
||||
const uint8_t req = ((USART*) &usart)->readByte();
|
||||
((MCP23S17*) &beba1)->writePortA(0x00);
|
||||
|
||||
// starte WDT
|
||||
wdt_enable(WDT_TIMEOUT);
|
||||
|
@ -104,16 +115,16 @@ int main()
|
|||
|
||||
|
||||
// Reset anzeigen
|
||||
beba0.writePortA(0xFF);
|
||||
((MCP23S17*) &beba0)->writePortA(0xFF);
|
||||
_delay_ms(100);
|
||||
beba0.writePortA(0x00);
|
||||
((MCP23S17*) &beba0)->writePortA(0x00);
|
||||
|
||||
uint8_t n = 0;
|
||||
uint8_t block[16];
|
||||
while(1)
|
||||
{
|
||||
beba0.writePortA(n++ & 0xFF);
|
||||
usart.readBlock(&block[0], 0);
|
||||
//testAll();
|
||||
_delay_ms(1);
|
||||
}
|
||||
|
||||
while(1)
|
||||
|
|
|
@ -2,99 +2,99 @@
|
|||
|
||||
void rqTestConnection()
|
||||
{
|
||||
uint8_t dummy = usart.readByte();
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
usart.writeByte(dummy);
|
||||
uint8_t dummy = ((USART*) &usart)->readByte();
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(dummy);
|
||||
}
|
||||
|
||||
void rqBoardInfo()
|
||||
{
|
||||
usart.writeByte(3); // Anzahl an Strings
|
||||
((USART*) &usart)->writeByte(3); // Anzahl an Strings
|
||||
|
||||
usart.writeStr(DATE, sizeof(DATE));
|
||||
usart.writeStr(TIME, sizeof(TIME));
|
||||
usart.writeStr(FSRC, sizeof(FSRC));
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeStr(DATE, sizeof(DATE));
|
||||
((USART*) &usart)->writeStr(TIME, sizeof(TIME));
|
||||
((USART*) &usart)->writeStr(FSRC, sizeof(FSRC));
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
||||
void rqTestIntConv()
|
||||
{
|
||||
usart.writeInt(usart.readInt() * 3);
|
||||
((USART*) &usart)->writeInt(((USART*) &usart)->readInt() * 3);
|
||||
}
|
||||
|
||||
void rqDigitalWrite0()
|
||||
{
|
||||
uint8_t port = usart.readByte();
|
||||
beba0.writePortA(port);
|
||||
uint8_t port = ((USART*) &usart)->readByte();
|
||||
((MCP23S17*) &beba0)->writePortA(port);
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
||||
void rqDigitalWrite1()
|
||||
{
|
||||
uint8_t port = usart.readByte();
|
||||
beba1.writePortA(port);
|
||||
uint8_t port = ((USART*) &usart)->readByte();
|
||||
((MCP23S17*) &beba1)->writePortA(port);
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
||||
void rqDigitalRead0()
|
||||
{
|
||||
uint8_t port = beba0.readPortB();
|
||||
usart.writeByte(port);
|
||||
uint8_t port = ((MCP23S17*) &beba0)->readPortB();
|
||||
((USART*) &usart)->writeByte(port);
|
||||
}
|
||||
|
||||
void rqDigitalRead1()
|
||||
{
|
||||
uint8_t port = beba1.readPortB();
|
||||
usart.writeByte(port);
|
||||
uint8_t port = ((MCP23S17*) &beba1)->readPortB();
|
||||
((USART*) &usart)->writeByte(port);
|
||||
}
|
||||
|
||||
void rqAnalogWrite0()
|
||||
{
|
||||
uint16_t value = usart.readInt();
|
||||
dac0.setValue(value);
|
||||
uint16_t value = ((USART*) &usart)->readInt();
|
||||
((TLC5615*) &dac0)->setValue(value);
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
||||
void rqAnalogWrite1()
|
||||
{
|
||||
uint16_t value = usart.readInt();
|
||||
dac1.setValue(value);
|
||||
uint16_t value = ((USART*) &usart)->readInt();
|
||||
((TLC5615*) &dac1)->setValue(value);
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
||||
void rqAnalogRead()
|
||||
{
|
||||
uint8_t channel = usart.readByte();
|
||||
uint16_t value = adu.getValue(channel);
|
||||
usart.writeInt(value);
|
||||
uint8_t channel = ((USART*) &usart)->readByte();
|
||||
uint16_t value = ((ADU*) &adu)->getValue(channel);
|
||||
((USART*) &usart)->writeInt(value);
|
||||
}
|
||||
|
||||
void rqAdcDacStroke()
|
||||
{
|
||||
uint8_t channel_a = usart.readByte();
|
||||
uint8_t channel_b = usart.readByte();
|
||||
uint8_t channel_a = ((USART*) &usart)->readByte();
|
||||
uint8_t channel_b = ((USART*) &usart)->readByte();
|
||||
|
||||
int16_t start = static_cast<int16_t>(usart.readInt());
|
||||
int16_t delta = static_cast<int16_t>(usart.readInt());
|
||||
int16_t count = static_cast<int16_t>(usart.readInt());
|
||||
int16_t start = static_cast<int16_t>(((USART*) &usart)->readInt());
|
||||
int16_t delta = static_cast<int16_t>(((USART*) &usart)->readInt());
|
||||
int16_t count = static_cast<int16_t>(((USART*) &usart)->readInt());
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
|
||||
count *= delta;
|
||||
|
||||
for(int16_t i = start; i < count; i += delta)
|
||||
{
|
||||
dac0.setValue(i);
|
||||
((TLC5615*) &dac0)->setValue(i);
|
||||
wdt_reset();
|
||||
|
||||
uint16_t val_a = adu.getValue(channel_a);
|
||||
uint16_t val_b = adu.getValue(channel_b);
|
||||
usart.writeInt(val_a);
|
||||
usart.writeInt(val_b);
|
||||
uint16_t val_a = ((ADU*) &adu)->getValue(channel_a);
|
||||
uint16_t val_b = ((ADU*) &adu)->getValue(channel_b);
|
||||
((USART*) &usart)->writeInt(val_a);
|
||||
((USART*) &usart)->writeInt(val_b);
|
||||
|
||||
/*union doubleword
|
||||
{
|
||||
|
@ -103,19 +103,19 @@ void rqAdcDacStroke()
|
|||
};
|
||||
|
||||
union doubleword dw;
|
||||
dw.word[0] = adu.getValue(channel_a);
|
||||
dw.word[1] = adu.getValue(channel_b);
|
||||
dw.word[0] = ((ADU*) &adu)->getValue(channel_a);
|
||||
dw.word[1] = ((ADU*) &adu)->getValue(channel_b);
|
||||
|
||||
uint8_t ret = 0;
|
||||
do
|
||||
{
|
||||
wdt_reset();
|
||||
ret = usart.writeBlock(&(dw.byte[0]), 4);
|
||||
ret = ((USART*) &usart)->writeBlock(&(dw.byte[0]), 4);
|
||||
|
||||
if(ret == 0)
|
||||
return;
|
||||
} while(ret != USART::MSG_OK);*/
|
||||
}
|
||||
|
||||
usart.writeByte(USART::MSG_OK);
|
||||
((USART*) &usart)->writeByte(USART::MSG_OK);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ void testBEBA0(void)
|
|||
{
|
||||
for(uint8_t i = 0; i < 9; i++)
|
||||
{
|
||||
beba0.writePortA(_BV(i));
|
||||
((MCP23S17*) &beba0)->writePortA(_BV(i));
|
||||
|
||||
if(i < 8)
|
||||
_delay_ms(200);
|
||||
|
@ -24,7 +24,7 @@ void testBEBA1(void)
|
|||
{
|
||||
for(uint8_t i = 0; i < 9; i++)
|
||||
{
|
||||
beba1.writePortA(_BV(i));
|
||||
((MCP23S17*) &beba1)->writePortA(_BV(i));
|
||||
|
||||
if(i < 8)
|
||||
_delay_ms(200);
|
||||
|
@ -35,22 +35,22 @@ void testDAC0(void)
|
|||
{
|
||||
for(uint16_t i = 0; i < 1024; i++)
|
||||
{
|
||||
dac0.setValue(i);
|
||||
((TLC5615*) &dac0)->setValue(i);
|
||||
_delay_ms(1);
|
||||
}
|
||||
_delay_ms(100);
|
||||
dac0.setValue(0);
|
||||
((TLC5615*) &dac0)->setValue(0);
|
||||
}
|
||||
|
||||
void testDAC1(void)
|
||||
{
|
||||
for(uint16_t i = 0; i < 1024; i++)
|
||||
{
|
||||
dac1.setValue(i);
|
||||
((TLC5615*) &dac1)->setValue(i);
|
||||
_delay_ms(1);
|
||||
}
|
||||
_delay_ms(100);
|
||||
dac1.setValue(0);
|
||||
((TLC5615*) &dac1)->setValue(0);
|
||||
}
|
||||
|
||||
void testMirror()
|
||||
|
@ -61,9 +61,9 @@ void testMirror()
|
|||
// Endlosschleife
|
||||
while(1)
|
||||
{
|
||||
dac0.setValue(adu.getValue(0));
|
||||
dac1.setValue(adu.getValue(1));
|
||||
beba0.writePortA(beba0.readPortB());
|
||||
beba1.writePortA(sw.readPortB());
|
||||
((TLC5615*) &dac0)->setValue(((ADU*) &adu)->getValue(0));
|
||||
((TLC5615*) &dac1)->setValue(((ADU*) &adu)->getValue(1));
|
||||
((MCP23S17*) &beba0)->writePortA(((MCP23S17*) &beba0)->readPortB());
|
||||
((MCP23S17*) &beba1)->writePortA(((MCP23S17*) &sw)->readPortB());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ void USART::init()
|
|||
{
|
||||
UCSR0A = _BV(U2X0);
|
||||
|
||||
UCSR0B = _BV(RXEN0) | _BV(TXEN0);
|
||||
UCSR0B = _BV(RXEN0) | _BV(TXEN0) | _BV(RXCIE0);
|
||||
|
||||
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
|
||||
UCSR0C = _BV(UCSZ00) |_BV(UCSZ01);// (1<<URSEL0)|(1<<UCSZ10)|(1<<UCSZ00);
|
||||
|
@ -15,7 +15,7 @@ void USART::init()
|
|||
|
||||
}
|
||||
|
||||
void USART::flush()
|
||||
void USART::clearInputBuffer()
|
||||
{
|
||||
uint8_t dummy;
|
||||
do
|
||||
|
@ -94,6 +94,79 @@ uint16_t USART::readInt()
|
|||
return v;
|
||||
}
|
||||
|
||||
void USART::nextByte(uint8_t byte)
|
||||
{
|
||||
switch(seq)
|
||||
{
|
||||
case IDLE:
|
||||
{
|
||||
if(byte > MAX_BLOCK_SIZE)
|
||||
{
|
||||
clearInputBuffer();
|
||||
writeByte(MSG_FAIL);
|
||||
seq = BlockSequence::IDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
block_buffer[0] = byte;
|
||||
crc = 0;
|
||||
block_pos = 0;
|
||||
seq = BlockSequence::LEN;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LEN:
|
||||
{
|
||||
block_buffer[block_pos] = byte;
|
||||
seq = BlockSequence::DATA;
|
||||
break;
|
||||
}
|
||||
case DATA:
|
||||
{
|
||||
block_buffer[block_pos] = byte;
|
||||
crc ^= byte;
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
if (crc & 1)
|
||||
crc ^= CRC7_POLY;
|
||||
crc >>= 1;
|
||||
}
|
||||
if(block_pos == block_buffer[0])
|
||||
seq = BlockSequence::CRC;
|
||||
else if(block_pos >= block_buffer[0])
|
||||
{
|
||||
clearInputBuffer();
|
||||
writeByte(MSG_FAIL);
|
||||
seq = BlockSequence::IDLE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CRC:
|
||||
{
|
||||
block_buffer[block_pos] = byte;
|
||||
crc ^= byte;
|
||||
for (uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
if (crc & 1)
|
||||
crc ^= CRC7_POLY;
|
||||
crc >>= 1;
|
||||
}
|
||||
seq = BlockSequence::END;
|
||||
break;
|
||||
}
|
||||
case END:
|
||||
{
|
||||
clearInputBuffer();
|
||||
writeByte(crc == 0 ? MSG_OK : MSG_FAIL);
|
||||
seq = BlockSequence::IDLE;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
block_pos++;
|
||||
}
|
||||
|
||||
void USART::readBlock(uint8_t* ptr, uint8_t offset)
|
||||
{
|
||||
ptr += offset;
|
||||
|
@ -129,7 +202,7 @@ void USART::readBlock(uint8_t* ptr, uint8_t offset)
|
|||
}
|
||||
|
||||
|
||||
flush(); // leere Eingangspuffer
|
||||
clearInputBuffer(); // leere Eingangspuffer
|
||||
|
||||
writeByte(crc == 0 ? MSG_OK : MSG_FAIL);
|
||||
}
|
||||
|
|
|
@ -5,15 +5,20 @@
|
|||
#include <util/delay.h>
|
||||
#include <stdint.h>
|
||||
|
||||
constexpr uint32_t BAUDRATE = 115200; // 38400
|
||||
constexpr uint8_t CRC7_POLY = 0x91;
|
||||
constexpr uint8_t MAX_BLOCK_SIZE = 16;
|
||||
enum BlockSequence
|
||||
{
|
||||
IDLE = 0,
|
||||
LEN = 1,
|
||||
DATA = 2,
|
||||
CRC = 3,
|
||||
END = 4,
|
||||
};
|
||||
|
||||
class USART
|
||||
{
|
||||
public:
|
||||
void init(void);
|
||||
void flush(void);
|
||||
void clearInputBuffer(void);
|
||||
|
||||
void writeByte(uint8_t);
|
||||
void writeInt(uint16_t);
|
||||
|
@ -23,10 +28,24 @@ public:
|
|||
uint8_t readByte(void);
|
||||
uint16_t readInt(void);
|
||||
uint32_t readLong(void);
|
||||
|
||||
void nextByte(uint8_t byte);
|
||||
void readBlock(uint8_t*, uint8_t);
|
||||
|
||||
constexpr static uint8_t MSG_OK = 0xFF;
|
||||
constexpr static uint8_t MSG_FAIL = 0xFE;
|
||||
|
||||
uint8_t block_pos = 0;
|
||||
|
||||
// constants
|
||||
constexpr static uint32_t BAUDRATE = 115200; // 38400
|
||||
constexpr static uint8_t CRC7_POLY = 0x91;
|
||||
constexpr static uint8_t MAX_BLOCK_SIZE = 64;
|
||||
constexpr static uint8_t BLOCK_END = 0x80;
|
||||
private:
|
||||
uint8_t block_buffer[MAX_BLOCK_SIZE + 3]; // don't store BLOCK_END byte
|
||||
uint8_t crc;
|
||||
BlockSequence seq = BlockSequence::IDLE;
|
||||
};
|
||||
|
||||
#endif // USART_H
|
||||
|
|
Loading…
Reference in a new issue