Hardware and Software CRC implementation for K64F
Fork of FastCRC by
CRC_HW.h@2:8741619dfd64, 2016-11-23 (annotated)
- Committer:
- pkozyra
- Date:
- Wed Nov 23 22:08:34 2016 +0000
- Revision:
- 2:8741619dfd64
Hardware implementation for K64F.
Who changed what in which revision?
User | Revision | Line number | New 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 |