From 869118f74612829db47d0d681cee5b4af937b16f Mon Sep 17 00:00:00 2001 From: root Date: Tue, 30 Nov 2021 00:24:43 +0000 Subject: tmc2209 first cut --- stm32/app/gen/c.c | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 stm32/app/gen/c.c (limited to 'stm32/app/gen/c.c') diff --git a/stm32/app/gen/c.c b/stm32/app/gen/c.c new file mode 100644 index 0000000..56e7237 --- /dev/null +++ b/stm32/app/gen/c.c @@ -0,0 +1,109 @@ +#include +#include +#include + +uint8_t crc_table[256]; + +uint8_t flip_byte (uint8_t value) +{ + value = ((value >> 1) & 0x55) | ((value & 0x55) << 1); + value = ((value >> 2) & 0x33) | ((value & 0x33) << 2); + value = ((value >> 4) & 0x0F) | ((value & 0x0F) << 4); + return value; +} + + +uint8_t +crc8 (uint8_t * data, size_t len) +{ + unsigned i, j; + uint8_t crc = 0, b; + + for (i = 0; i < len; ++i, ++data) + { + + b = *data; + for (j = 0; j < 8; j++) + { + if ((crc >> 7) ^ (b & 1)) + { + crc = (crc << 1) ^ 7; + } + else + { + crc = crc << 1; + } + + b >>= 1; + } + } + return crc; +} + +void +make_table (void) +{ + unsigned i; + unsigned j; + uint8_t b; + + for (i = 0; i < 256; ++i) + { + b = i; + for (j = 0; j < 8; j++) + { + + if (b & 1) + { + b = (b >> 1 ) ^ 0xe0; + } + else + { + b = b >> 1; + } + + } + crc_table[i] = b; + } +} + +uint8_t +crc8_better (uint8_t * data, size_t len) +{ + uint8_t crc = 0; + unsigned i; + + for (i = 0; i < len; i++, data++) + { + crc = crc_table[crc ^ *data]; + } + + return flip_byte(crc); +} + + + +int +main (int argc, char *argv[]) +{ + uint8_t fish[4] = "\5\0\1\301"; + size_t l; + + make_table (); + + for (l=0;l<256;++l) { + printf("0x%02x, ",crc_table[l]); + } + + printf("\n"); + + for (l=0;l<4;++l ) { + printf ("%u %02x %02x %02x\n",(unsigned)l, crc8 (fish, l), crc8_better (fish, l), fish[l]); + } + + + + return 0; +} + + -- cgit v1.2.3