test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Mon Jun 02 13:17:18 2014 +0000
Revision:
3:b4277f7c538e
Parent:
0:55f2866e9c0c
ok tk.ini

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:55f2866e9c0c 1 #include <inttypes.h>
fblanc 0:55f2866e9c0c 2 #include "mbed.h"
fblanc 0:55f2866e9c0c 3 #include "onewire.h"
fblanc 0:55f2866e9c0c 4
fblanc 0:55f2866e9c0c 5 #define CRC16INIT 0x0000
fblanc 0:55f2866e9c0c 6 //#define CRC16POLY 0x8005; // Polynome =x^16 + x^15 + x^2 + x^0 = 0x18005
fblanc 0:55f2866e9c0c 7 #define CRC16POLY 0xA001;
fblanc 0:55f2866e9c0c 8
fblanc 0:55f2866e9c0c 9 uint16_t crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:55f2866e9c0c 10 {
fblanc 0:55f2866e9c0c 11 uint16_t crc = CRC16INIT;
fblanc 0:55f2866e9c0c 12 int i, done = 0;
fblanc 0:55f2866e9c0c 13 uint8_t todo;
fblanc 0:55f2866e9c0c 14 if (nboctets != 0) {
fblanc 0:55f2866e9c0c 15 do {
fblanc 0:55f2866e9c0c 16 todo = octets[done];
fblanc 0:55f2866e9c0c 17 crc ^= todo;
fblanc 0:55f2866e9c0c 18 for (i = 0; i < 8; i++) {
fblanc 0:55f2866e9c0c 19 if (crc % 2 != 0) {
fblanc 0:55f2866e9c0c 20 crc = (crc >> 1) ^ CRC16POLY;
fblanc 0:55f2866e9c0c 21 } else {
fblanc 0:55f2866e9c0c 22 crc = crc >> 1;
fblanc 0:55f2866e9c0c 23 }
fblanc 0:55f2866e9c0c 24 }
fblanc 0:55f2866e9c0c 25 done++;
fblanc 0:55f2866e9c0c 26 } while (done < nboctets);
fblanc 0:55f2866e9c0c 27
fblanc 0:55f2866e9c0c 28
fblanc 0:55f2866e9c0c 29 }
fblanc 0:55f2866e9c0c 30
fblanc 0:55f2866e9c0c 31 return crc;
fblanc 0:55f2866e9c0c 32 }
fblanc 0:55f2866e9c0c 33 //CRC16 byte, always two bytes, bit inverted, LSByte first
fblanc 0:55f2866e9c0c 34 uint8_t ctrl_crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:55f2866e9c0c 35 {
fblanc 0:55f2866e9c0c 36 uint16_t crc;
fblanc 0:55f2866e9c0c 37 uint8_t *ptr;
fblanc 0:55f2866e9c0c 38 #ifdef DEBUG
fblanc 0:55f2866e9c0c 39 printf( "\nCRC16 : " );
fblanc 0:55f2866e9c0c 40 for ( uint8_t i=0 ; i< nboctets; i++ )
fblanc 0:55f2866e9c0c 41 printf(":%2.2X",octets[i]);
fblanc 0:55f2866e9c0c 42 printf( "\n" );
fblanc 0:55f2866e9c0c 43 #endif
fblanc 0:55f2866e9c0c 44 crc =~crc16(octets, nboctets-2);
fblanc 0:55f2866e9c0c 45 ptr=(uint8_t*)&crc;
fblanc 0:55f2866e9c0c 46 #ifdef DEBUG
fblanc 0:55f2866e9c0c 47 printf( "\n" );
fblanc 0:55f2866e9c0c 48 printf("CRC16:%X",crc);
fblanc 0:55f2866e9c0c 49 printf( "\n" );
fblanc 0:55f2866e9c0c 50 #endif
fblanc 0:55f2866e9c0c 51 if(*ptr==octets[nboctets-2])
fblanc 0:55f2866e9c0c 52 if(*++ptr==octets[nboctets-1])
fblanc 0:55f2866e9c0c 53 return 0;
fblanc 0:55f2866e9c0c 54
fblanc 0:55f2866e9c0c 55 return 1;
fblanc 0:55f2866e9c0c 56 }