These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!
EMAC/EmacRaw/crc32.c@0:bf7b9fba3924, 2011-03-20 (annotated)
- Committer:
- frank26080115
- Date:
- Sun Mar 20 05:38:56 2011 +0000
- Revision:
- 0:bf7b9fba3924
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frank26080115 | 0:bf7b9fba3924 | 1 | /***************************************************************************** |
frank26080115 | 0:bf7b9fba3924 | 2 | * crc32.c: Ethernet CRC module file for NXP LPC230x Family Microprocessors |
frank26080115 | 0:bf7b9fba3924 | 3 | * |
frank26080115 | 0:bf7b9fba3924 | 4 | * Copyright(C) 2006, NXP Semiconductor |
frank26080115 | 0:bf7b9fba3924 | 5 | * All rights reserved. |
frank26080115 | 0:bf7b9fba3924 | 6 | * |
frank26080115 | 0:bf7b9fba3924 | 7 | * History |
frank26080115 | 0:bf7b9fba3924 | 8 | * 2006.09.01 ver 1.00 Prelimnary version, first Release |
frank26080115 | 0:bf7b9fba3924 | 9 | * |
frank26080115 | 0:bf7b9fba3924 | 10 | ******************************************************************************/ |
frank26080115 | 0:bf7b9fba3924 | 11 | #include "lpc17xx_emac.h" /* LPC23xx/24xx definitions */ |
frank26080115 | 0:bf7b9fba3924 | 12 | #include "crc32.h" |
frank26080115 | 0:bf7b9fba3924 | 13 | |
frank26080115 | 0:bf7b9fba3924 | 14 | /****************************************************************************** |
frank26080115 | 0:bf7b9fba3924 | 15 | ** Function name: CRC_init |
frank26080115 | 0:bf7b9fba3924 | 16 | ** |
frank26080115 | 0:bf7b9fba3924 | 17 | ** Descriptions: Begin CRC calculation. |
frank26080115 | 0:bf7b9fba3924 | 18 | ** |
frank26080115 | 0:bf7b9fba3924 | 19 | ** parameters: pointer to the CRC area. |
frank26080115 | 0:bf7b9fba3924 | 20 | ** Returned value: None |
frank26080115 | 0:bf7b9fba3924 | 21 | ** |
frank26080115 | 0:bf7b9fba3924 | 22 | ******************************************************************************/ |
frank26080115 | 0:bf7b9fba3924 | 23 | void crc32_init(uint32_t *pCRC) |
frank26080115 | 0:bf7b9fba3924 | 24 | { |
frank26080115 | 0:bf7b9fba3924 | 25 | *pCRC = 0xffffffff; |
frank26080115 | 0:bf7b9fba3924 | 26 | } |
frank26080115 | 0:bf7b9fba3924 | 27 | |
frank26080115 | 0:bf7b9fba3924 | 28 | /****************************************************************************** |
frank26080115 | 0:bf7b9fba3924 | 29 | ** Function name: CRC32_add |
frank26080115 | 0:bf7b9fba3924 | 30 | ** |
frank26080115 | 0:bf7b9fba3924 | 31 | ** Descriptions: Calculate CRC value one at a time |
frank26080115 | 0:bf7b9fba3924 | 32 | ** |
frank26080115 | 0:bf7b9fba3924 | 33 | ** parameters: pointer to the CRC area, and passing value to get the CRC |
frank26080115 | 0:bf7b9fba3924 | 34 | ** Returned value: None |
frank26080115 | 0:bf7b9fba3924 | 35 | ** |
frank26080115 | 0:bf7b9fba3924 | 36 | ******************************************************************************/ |
frank26080115 | 0:bf7b9fba3924 | 37 | void crc32_add(uint32_t *pCRC, uint8_t val8) |
frank26080115 | 0:bf7b9fba3924 | 38 | { |
frank26080115 | 0:bf7b9fba3924 | 39 | uint32_t i, poly; |
frank26080115 | 0:bf7b9fba3924 | 40 | uint32_t entry; |
frank26080115 | 0:bf7b9fba3924 | 41 | uint32_t crc_in; |
frank26080115 | 0:bf7b9fba3924 | 42 | uint32_t crc_out; |
frank26080115 | 0:bf7b9fba3924 | 43 | |
frank26080115 | 0:bf7b9fba3924 | 44 | crc_in = *pCRC; |
frank26080115 | 0:bf7b9fba3924 | 45 | poly = 0xEDB88320L; |
frank26080115 | 0:bf7b9fba3924 | 46 | entry = (crc_in ^ ((uint32_t) val8)) & 0xFF; |
frank26080115 | 0:bf7b9fba3924 | 47 | for (i = 0; i < 8; i++) |
frank26080115 | 0:bf7b9fba3924 | 48 | { |
frank26080115 | 0:bf7b9fba3924 | 49 | if (entry & 1) |
frank26080115 | 0:bf7b9fba3924 | 50 | entry = (entry >> 1) ^ poly; |
frank26080115 | 0:bf7b9fba3924 | 51 | else |
frank26080115 | 0:bf7b9fba3924 | 52 | entry >>= 1; |
frank26080115 | 0:bf7b9fba3924 | 53 | } |
frank26080115 | 0:bf7b9fba3924 | 54 | crc_out = ((crc_in>>8) & 0x00FFFFFF) ^ entry; |
frank26080115 | 0:bf7b9fba3924 | 55 | *pCRC = crc_out; |
frank26080115 | 0:bf7b9fba3924 | 56 | return; |
frank26080115 | 0:bf7b9fba3924 | 57 | } |
frank26080115 | 0:bf7b9fba3924 | 58 | |
frank26080115 | 0:bf7b9fba3924 | 59 | /****************************************************************************** |
frank26080115 | 0:bf7b9fba3924 | 60 | ** Function name: CRC32_end |
frank26080115 | 0:bf7b9fba3924 | 61 | ** |
frank26080115 | 0:bf7b9fba3924 | 62 | ** Descriptions: Finish CRC calculation |
frank26080115 | 0:bf7b9fba3924 | 63 | ** |
frank26080115 | 0:bf7b9fba3924 | 64 | ** parameters: pointer to the CRC area. |
frank26080115 | 0:bf7b9fba3924 | 65 | ** Returned value: None |
frank26080115 | 0:bf7b9fba3924 | 66 | ** |
frank26080115 | 0:bf7b9fba3924 | 67 | ******************************************************************************/ |
frank26080115 | 0:bf7b9fba3924 | 68 | void crc32_end(uint32_t *pCRC) |
frank26080115 | 0:bf7b9fba3924 | 69 | { |
frank26080115 | 0:bf7b9fba3924 | 70 | *pCRC ^= 0xffffffff; |
frank26080115 | 0:bf7b9fba3924 | 71 | } |
frank26080115 | 0:bf7b9fba3924 | 72 | |
frank26080115 | 0:bf7b9fba3924 | 73 | /****************************************************************************** |
frank26080115 | 0:bf7b9fba3924 | 74 | ** Function name: CRC32_bfr |
frank26080115 | 0:bf7b9fba3924 | 75 | ** |
frank26080115 | 0:bf7b9fba3924 | 76 | ** Descriptions: Get the CRC value based on size of the string. |
frank26080115 | 0:bf7b9fba3924 | 77 | ** |
frank26080115 | 0:bf7b9fba3924 | 78 | ** parameters: Pointer to the string, size of the string. |
frank26080115 | 0:bf7b9fba3924 | 79 | ** Returned value: CRC value |
frank26080115 | 0:bf7b9fba3924 | 80 | ** |
frank26080115 | 0:bf7b9fba3924 | 81 | ******************************************************************************/ |
frank26080115 | 0:bf7b9fba3924 | 82 | uint32_t crc32_bfr(void *pBfr, uint32_t size) |
frank26080115 | 0:bf7b9fba3924 | 83 | { |
frank26080115 | 0:bf7b9fba3924 | 84 | uint32_t crc32; |
frank26080115 | 0:bf7b9fba3924 | 85 | uint8_t *pu8; |
frank26080115 | 0:bf7b9fba3924 | 86 | |
frank26080115 | 0:bf7b9fba3924 | 87 | crc32_init(&crc32); |
frank26080115 | 0:bf7b9fba3924 | 88 | pu8 = (uint8_t *) pBfr; |
frank26080115 | 0:bf7b9fba3924 | 89 | while (size-- != 0) |
frank26080115 | 0:bf7b9fba3924 | 90 | { |
frank26080115 | 0:bf7b9fba3924 | 91 | crc32_add(&crc32, *pu8); |
frank26080115 | 0:bf7b9fba3924 | 92 | pu8++ ; |
frank26080115 | 0:bf7b9fba3924 | 93 | } |
frank26080115 | 0:bf7b9fba3924 | 94 | crc32_end(&crc32); |
frank26080115 | 0:bf7b9fba3924 | 95 | return ( crc32 ); |
frank26080115 | 0:bf7b9fba3924 | 96 | } |
frank26080115 | 0:bf7b9fba3924 | 97 | |
frank26080115 | 0:bf7b9fba3924 | 98 | /********************************************************************************* |
frank26080115 | 0:bf7b9fba3924 | 99 | ** End Of File |
frank26080115 | 0:bf7b9fba3924 | 100 | *********************************************************************************/ |