Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
310-TMC3-TestHW/crc16.cpp@0:c92ca0229c9a, 2014-05-09 (annotated)
- Committer:
- knuderich
- Date:
- Fri May 09 11:30:55 2014 +0000
- Revision:
- 0:c92ca0229c9a
P029 P030 gpio
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
knuderich | 0:c92ca0229c9a | 1 | |
knuderich | 0:c92ca0229c9a | 2 | |
knuderich | 0:c92ca0229c9a | 3 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 4 | // Includes |
knuderich | 0:c92ca0229c9a | 5 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 6 | #include "mbed.h" |
knuderich | 0:c92ca0229c9a | 7 | #include "crc16.h" |
knuderich | 0:c92ca0229c9a | 8 | |
knuderich | 0:c92ca0229c9a | 9 | |
knuderich | 0:c92ca0229c9a | 10 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 11 | // Prototype declaration |
knuderich | 0:c92ca0229c9a | 12 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 13 | |
knuderich | 0:c92ca0229c9a | 14 | |
knuderich | 0:c92ca0229c9a | 15 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 16 | // global Variables |
knuderich | 0:c92ca0229c9a | 17 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 18 | |
knuderich | 0:c92ca0229c9a | 19 | |
knuderich | 0:c92ca0229c9a | 20 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 21 | // Function |
knuderich | 0:c92ca0229c9a | 22 | //---------------------------------------- |
knuderich | 0:c92ca0229c9a | 23 | |
knuderich | 0:c92ca0229c9a | 24 | //--------------------------------------------------------------------- |
knuderich | 0:c92ca0229c9a | 25 | // Function Name: calcCRC16 |
knuderich | 0:c92ca0229c9a | 26 | // Description: calculate CRC16 from preview CRC16 value and new data byte |
knuderich | 0:c92ca0229c9a | 27 | // |
knuderich | 0:c92ca0229c9a | 28 | // Inputs: - uint8 *ptrData: first data byte |
knuderich | 0:c92ca0229c9a | 29 | // - uint16 numbBytes: Number of data bytes to process |
knuderich | 0:c92ca0229c9a | 30 | // - uint16 *ptrCRC16: return value |
knuderich | 0:c92ca0229c9a | 31 | // |
knuderich | 0:c92ca0229c9a | 32 | // Returns: None |
knuderich | 0:c92ca0229c9a | 33 | // |
knuderich | 0:c92ca0229c9a | 34 | // Last Change: 05.04.2013 |
knuderich | 0:c92ca0229c9a | 35 | //----------------------------------------------------------------------- |
knuderich | 0:c92ca0229c9a | 36 | void calcCRC16(char *ptrData, int numbBytes, unsigned short *ptrCRC16) |
knuderich | 0:c92ca0229c9a | 37 | { |
knuderich | 0:c92ca0229c9a | 38 | unsigned short i; |
knuderich | 0:c92ca0229c9a | 39 | unsigned short i_bytes; |
knuderich | 0:c92ca0229c9a | 40 | unsigned short CRC16; |
knuderich | 0:c92ca0229c9a | 41 | char data; |
knuderich | 0:c92ca0229c9a | 42 | |
knuderich | 0:c92ca0229c9a | 43 | CRC16 = CRC16_STARTVALUE; |
knuderich | 0:c92ca0229c9a | 44 | |
knuderich | 0:c92ca0229c9a | 45 | for(i_bytes=0; i_bytes < numbBytes; i_bytes++) |
knuderich | 0:c92ca0229c9a | 46 | { |
knuderich | 0:c92ca0229c9a | 47 | data = *ptrData++; // get new data, inc pointer |
knuderich | 0:c92ca0229c9a | 48 | |
knuderich | 0:c92ca0229c9a | 49 | for(i=0;i<8;i++) |
knuderich | 0:c92ca0229c9a | 50 | { |
knuderich | 0:c92ca0229c9a | 51 | if( ( (CRC16 ^ data) & 0x01) == 0x01 ) |
knuderich | 0:c92ca0229c9a | 52 | { |
knuderich | 0:c92ca0229c9a | 53 | CRC16 >>= 1; |
knuderich | 0:c92ca0229c9a | 54 | CRC16 ^= CRC16_POLYNOME; |
knuderich | 0:c92ca0229c9a | 55 | }//if |
knuderich | 0:c92ca0229c9a | 56 | else |
knuderich | 0:c92ca0229c9a | 57 | { |
knuderich | 0:c92ca0229c9a | 58 | CRC16 >>= 1; |
knuderich | 0:c92ca0229c9a | 59 | }//else |
knuderich | 0:c92ca0229c9a | 60 | |
knuderich | 0:c92ca0229c9a | 61 | data >>= 1; // shift data 1 bit right, dividing it by 2 |
knuderich | 0:c92ca0229c9a | 62 | }//for |
knuderich | 0:c92ca0229c9a | 63 | |
knuderich | 0:c92ca0229c9a | 64 | }//for i_bytes |
knuderich | 0:c92ca0229c9a | 65 | |
knuderich | 0:c92ca0229c9a | 66 | *ptrCRC16 = CRC16; //return CRC16 |
knuderich | 0:c92ca0229c9a | 67 | } |