working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
samp1234
Date:
Sun Apr 03 15:35:53 2022 +0000
Revision:
357:f3d48d62e00e
Parent:
328:2242ebc71be8
First commit test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chaithanyarss 328:2242ebc71be8 1 #ifndef CRC_H_INCLUDED
chaithanyarss 328:2242ebc71be8 2 #define CRC_H_INCLUDED
shreeshas95 0:f016e9e8d48b 3 //EDITS
shreeshas95 0:f016e9e8d48b 4 //changed the initial remainder from 0x0000 to 0xffff according to the standards
shreeshas95 0:f016e9e8d48b 5 //made two seperate functions crc16_gen and crc8_gen
shreeshas95 0:f016e9e8d48b 6
shreeshas95 0:f016e9e8d48b 7 #define TOPBIT16 (1 << 15)
shreeshas95 0:f016e9e8d48b 8 #define TOPBIT8 (1 << 7)
shreeshas95 0:f016e9e8d48b 9 #define POLYNOMIAL16 0x1021
shreeshas95 6:79d422d1ed42 10 #define POLYNOMIAL8 0x07
shreeshas95 0:f016e9e8d48b 11
shreeshas95 0:f016e9e8d48b 12 typedef uint16_t crctype16;
shreeshas95 0:f016e9e8d48b 13 crctype16 crc16_gen(const unsigned char message[], unsigned int nBytes){
shreeshas95 0:f016e9e8d48b 14 crctype16 remainder = 0xffff;
shreeshas95 0:f016e9e8d48b 15 int byte;
shreeshas95 0:f016e9e8d48b 16 char bit;
shreeshas95 0:f016e9e8d48b 17
shreeshas95 0:f016e9e8d48b 18 for( byte = 0 ; byte < nBytes ; byte++ ){
shreeshas95 0:f016e9e8d48b 19 /*
shreeshas95 0:f016e9e8d48b 20 Bring the data byte by byte
shreeshas95 0:f016e9e8d48b 21 each time only one byte is brought
shreeshas95 0:f016e9e8d48b 22 0 xor x = x
shreeshas95 0:f016e9e8d48b 23 */
shreeshas95 0:f016e9e8d48b 24 remainder = remainder ^ ( message[byte] << 8 );
shreeshas95 0:f016e9e8d48b 25
shreeshas95 0:f016e9e8d48b 26 for( bit = 8 ; bit > 0 ; bit--){
shreeshas95 0:f016e9e8d48b 27 /*
shreeshas95 0:f016e9e8d48b 28 for each bit, xor the remainder with polynomial
shreeshas95 0:f016e9e8d48b 29 if the MSB is 1
shreeshas95 0:f016e9e8d48b 30 */
shreeshas95 0:f016e9e8d48b 31 if(remainder & TOPBIT16){
shreeshas95 0:f016e9e8d48b 32 remainder = (remainder << 1) ^ POLYNOMIAL16;
shreeshas95 0:f016e9e8d48b 33 /*
shreeshas95 0:f016e9e8d48b 34 each time the remainder is xor-ed with polynomial, the MSB is made zero
shreeshas95 0:f016e9e8d48b 35 hence the first digit of the remainder is ignored in the loop
shreeshas95 0:f016e9e8d48b 36 */
shreeshas95 0:f016e9e8d48b 37 }
shreeshas95 0:f016e9e8d48b 38 else{
shreeshas95 0:f016e9e8d48b 39 remainder = (remainder << 1);
shreeshas95 0:f016e9e8d48b 40 }
shreeshas95 0:f016e9e8d48b 41 }
shreeshas95 0:f016e9e8d48b 42 }
shreeshas95 0:f016e9e8d48b 43
shreeshas95 0:f016e9e8d48b 44 return remainder;
shreeshas95 0:f016e9e8d48b 45 }
shreeshas95 0:f016e9e8d48b 46
shreeshas95 0:f016e9e8d48b 47 typedef uint8_t crctype8;
shreeshas95 0:f016e9e8d48b 48 crctype8 crc8_gen(const unsigned char message[], unsigned int nBytes){
shreeshas95 0:f016e9e8d48b 49
shreeshas95 0:f016e9e8d48b 50 crctype8 remainder = 0xff;
shreeshas95 0:f016e9e8d48b 51
shreeshas95 0:f016e9e8d48b 52 for(int byte = 0 ; byte < nBytes ; byte++ ){
shreeshas95 0:f016e9e8d48b 53 /*
shreeshas95 0:f016e9e8d48b 54 Bring the data byte by byte
shreeshas95 0:f016e9e8d48b 55 each time only one byte is brought
shreeshas95 0:f016e9e8d48b 56 0 xor x = x
shreeshas95 0:f016e9e8d48b 57 */
shreeshas95 0:f016e9e8d48b 58 remainder = remainder ^ ( message[byte] );
shreeshas95 0:f016e9e8d48b 59
shreeshas95 0:f016e9e8d48b 60 for(int bit = 8 ; bit > 0 ; bit--){
shreeshas95 0:f016e9e8d48b 61 /*
shreeshas95 0:f016e9e8d48b 62 for each bit, xor the remainder with polynomial
shreeshas95 0:f016e9e8d48b 63 if the MSB is 1
shreeshas95 0:f016e9e8d48b 64 */
shreeshas95 0:f016e9e8d48b 65 if(remainder & TOPBIT8){
shreeshas95 0:f016e9e8d48b 66 remainder = (remainder << 1) ^ POLYNOMIAL8;
shreeshas95 0:f016e9e8d48b 67 /*
shreeshas95 0:f016e9e8d48b 68 each time the remainder is xor-ed with polynomial, the MSB is made zero
shreeshas95 0:f016e9e8d48b 69 hence the first digit of the remainder is ignored in the loop
shreeshas95 0:f016e9e8d48b 70 */
shreeshas95 0:f016e9e8d48b 71 }
shreeshas95 0:f016e9e8d48b 72 else{
shreeshas95 0:f016e9e8d48b 73 remainder = (remainder << 1);
shreeshas95 0:f016e9e8d48b 74 }
shreeshas95 0:f016e9e8d48b 75 }
shreeshas95 0:f016e9e8d48b 76 }
shreeshas95 0:f016e9e8d48b 77
shreeshas95 0:f016e9e8d48b 78 return remainder;
chaithanyarss 328:2242ebc71be8 79 }
chaithanyarss 328:2242ebc71be8 80
chaithanyarss 328:2242ebc71be8 81 #endif