Knud Dalgaard / 310-TMC3-TestHW

Dependencies:   mbed

Committer:
knuderich
Date:
Fri May 09 11:30:55 2014 +0000
Revision:
0:c92ca0229c9a
P029 P030 gpio

Who changed what in which revision?

UserRevisionLine numberNew 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 }