LPCOpen Platform  v1.03
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
crc_001.c
Go to the documentation of this file.
1 /*
2  * @brief Cyclic Redundancy Check (CRC) Engine driver
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * All rights reserved.
7  *
8  * @par
9  * Software that is described herein is for illustrative purposes only
10  * which provides customers with programming information regarding the
11  * LPC products. This software is supplied "AS IS" without any warranties of
12  * any kind, and NXP Semiconductors and its licenser disclaim any and
13  * all warranties, express or implied, including all implied warranties of
14  * merchantability, fitness for a particular purpose and non-infringement of
15  * intellectual property rights. NXP Semiconductors assumes no responsibility
16  * or liability for the use of the software, conveys no license or rights under any
17  * patent, copyright, mask work right, or any other intellectual property rights in
18  * or to any products. NXP Semiconductors reserves the right to make changes
19  * in the software without notification. NXP Semiconductors also makes no
20  * representation or warranty that such application will be suitable for the
21  * specified use without further testing or modification.
22  *
23  * @par
24  * Permission to use, copy, modify, and distribute this software and its
25  * documentation is hereby granted, under NXP Semiconductors' and its
26  * licensor's relevant copyrights in the software, without fee, provided that it
27  * is used in conjunction with NXP Semiconductors microcontrollers. This
28  * copyright, permission, and disclaimer notice must appear in all copies of
29  * this code.
30  */
31 
32 #include "crc_001.h"
33 
34 /*****************************************************************************
35  * Private types/enumerations/variables
36  ****************************************************************************/
37 
38 /*****************************************************************************
39  * Public types/enumerations/variables
40  ****************************************************************************/
41 
42 /*****************************************************************************
43  * Private functions
44  ****************************************************************************/
45 
46 /*****************************************************************************
47  * Public functions
48  ****************************************************************************/
49 
50 /* Sets up the CRC engine with defaults based on the polynomial to be used */
52 {
53  switch (poly) {
54  case CRC_POLY_CRC16:
55  pCRC->MODE = MODE_CFG_CRC16;
56  pCRC->SEED = CRC_SEED_CRC16;
57  break;
58 
59  case CRC_POLY_CRC32:
60  pCRC->MODE = MODE_CFG_CRC32;
61  pCRC->SEED = CRC_SEED_CRC32;
62  break;
63 
64  case CRC_POLY_CCITT:
65  default:
66  pCRC->MODE = MODE_CFG_CCITT;
67  pCRC->SEED = CRC_SEED_CCITT;
68  break;
69  }
70 }
71 
72 /* Convenience function for computing a standard CCITT checksum from an 8-bit data block */
73 uint32_t IP_CRC_CRC8(IP_CRC_001_T *pCRC, const uint8_t *data, uint32_t bytes)
74 {
75  while (bytes > 0) {
76  IP_CRC_Write8(pCRC, *data);
77  data++;
78  bytes--;
79  }
80  return IP_CRC_ReadSum(pCRC);
81 }
82 
83 /* Configure CRC engine and compute CRC16 checksum from 16-bit data */
84 uint32_t IP_CRC_CRC16(IP_CRC_001_T *pCRC, const uint16_t *data, uint32_t hwords)
85 {
86  while (hwords > 0) {
87  IP_CRC_Write16(pCRC, *data);
88  data++;
89  hwords--;
90  }
91  return IP_CRC_ReadSum(pCRC);
92 }
93 
94 /* Configure CRC engine and compute CRC32 checksum from 32-bit data */
96 {
97  while (words > 0) {
98  IP_CRC_Write32(pCRC, *data);
99  data++;
100  words--;
101  }
102  return IP_CRC_ReadSum(pCRC);
103 }