Hardware and Software CRC implementation for K64F

Fork of FastCRC by tom dunigan

Committer:
pkozyra
Date:
Thu Dec 01 19:32:15 2016 +0000
Revision:
3:1a167cf7f3bb
Parent:
2:8741619dfd64
zmiana opisu

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pkozyra 2:8741619dfd64 1
pkozyra 2:8741619dfd64 2 #if !defined(CRC_HW_h)
pkozyra 2:8741619dfd64 3 #define CRC_HW__h
pkozyra 2:8741619dfd64 4 #include "inttypes.h"
pkozyra 2:8741619dfd64 5 #include "mbed.h"
pkozyra 2:8741619dfd64 6
pkozyra 2:8741619dfd64 7 // ================= DEFINES ===================
pkozyra 2:8741619dfd64 8 #define CRC_FLAG_OFF (((1<<31) | (1<<30)) | ((0<<29) | (0<<28))) //refin=false refout=false
pkozyra 2:8741619dfd64 9 #define CRC_FLAG_TOT00_TOTR00 (((0<<31) | (0<<30)) | ((0<<29) | (0<<28))) //refin=false refout=true
pkozyra 2:8741619dfd64 10 #define CRC_FLAG_TOT00_TOTR11 (((0<<31) | (0<<30)) | ((1<<29) | (1<<28))) //refin=false refout=true
pkozyra 2:8741619dfd64 11 #define CRC_FLAG_TOT11_TOTR00 (((1<<31) | (1<<30)) | ((0<<29) | (0<<28))) //refin=false refout=false
pkozyra 2:8741619dfd64 12 #define CRC_FLAG_TOT11_TOTR11 (((1<<31) | (1<<30)) | ((1<<29) | (1<<28))) //refin=true refout=true
pkozyra 2:8741619dfd64 13 #define CRC_FLAG_XOR (1<<26) //Perform XOR on result
pkozyra 2:8741619dfd64 14
pkozyra 2:8741619dfd64 15
pkozyra 2:8741619dfd64 16 // ================= 16-BIT CRC ===================
pkozyra 2:8741619dfd64 17
pkozyra 2:8741619dfd64 18 class FastCRC16
pkozyra 2:8741619dfd64 19 {
pkozyra 2:8741619dfd64 20 public:
pkozyra 2:8741619dfd64 21 FastCRC16();
pkozyra 2:8741619dfd64 22 uint16_t xmodem(uint16_t poly, uint16_t data);
pkozyra 2:8741619dfd64 23 uint16_t generic(const uint16_t polynom, const uint16_t seed, const uint32_t flags, uint16_t data);
pkozyra 2:8741619dfd64 24
pkozyra 2:8741619dfd64 25 private:
pkozyra 2:8741619dfd64 26 uint16_t seed;
pkozyra 2:8741619dfd64 27 uint16_t update(uint16_t data);
pkozyra 2:8741619dfd64 28
pkozyra 2:8741619dfd64 29 };
pkozyra 2:8741619dfd64 30
pkozyra 2:8741619dfd64 31 // ================= 32-BIT CRC ===================
pkozyra 2:8741619dfd64 32
pkozyra 2:8741619dfd64 33 class FastCRC32
pkozyra 2:8741619dfd64 34 {
pkozyra 2:8741619dfd64 35 public:
pkozyra 2:8741619dfd64 36 FastCRC32();
pkozyra 2:8741619dfd64 37 uint32_t crc32(const uint8_t *data, const uint16_t datalen);
pkozyra 2:8741619dfd64 38 uint32_t generic(const uint32_t polyom, const uint32_t seed, const uint32_t flags, const uint8_t *data, const uint16_t datalen);
pkozyra 2:8741619dfd64 39
pkozyra 2:8741619dfd64 40 private:
pkozyra 2:8741619dfd64 41 uint32_t seed;
pkozyra 2:8741619dfd64 42 uint32_t update(const uint8_t *data, const uint16_t datalen);
pkozyra 2:8741619dfd64 43 };
pkozyra 2:8741619dfd64 44
pkozyra 2:8741619dfd64 45 #endif