USBaspLoader v0.97 stable release
[pub/USBaspLoader.git] / updater / crccheck.c
1 /****************************************************************************/
2 /* CRC32 stuff taken and adapted from lib_crc version 1.16 : */
3 /* Library : lib_crc */
4 /* File : lib_crc.c */
5 /* Author : Lammert Bies 1999-2008 */
6 /* E-mail : info@lammertbies.nl */
7 /****************************************************************************/
8
9 /* the ATxmega series NVM CRC compatible polynom */
10 /* on ATxmega you can do this much faster in hardware */
11 #define P_32 0xEDB88320L
12 #define D_32 0xFFFFFFFFL
13
14 uint32_t crc_tab32_value(uint8_t address) {
15 uint32_t result;
16 uint8_t j;
17
18 result = (uint32_t)address & 0xffL;
19 for (j=0; j<8; j++) {
20 if (result & 0x00000001L) result = (result >> 1) ^ P_32;
21 else result = result >> 1;
22 }
23
24 return result;
25 }
26
27 uint32_t update_crc_32(uint32_t crc, uint8_t c) {
28 uint32_t tmp, long_c;
29
30 long_c = (uint32_t)c & 0xffL;
31
32 tmp = crc ^ long_c;
33 crc = (crc >> 8) ^ crc_tab32_value(tmp & 0xffL);
34
35 return crc;
36 }