[11U68]fix P0_11 to use GPIO

Fork of mbed-src by mbed official

Committer:
mbed_official
Date:
Wed Jul 08 07:45:08 2015 +0100
Revision:
584:7c5a5136e412
Synchronized with git revision a15892332f7dfbf7685582956fd7fa377aaddb51

Full URL: https://github.com/mbedmicro/mbed/commit/a15892332f7dfbf7685582956fd7fa377aaddb51/

Update mbed_overrides.c

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 584:7c5a5136e412 1 /**********************************************************************
mbed_official 584:7c5a5136e412 2 *
mbed_official 584:7c5a5136e412 3 * Filename: crc.c
mbed_official 584:7c5a5136e412 4 *
mbed_official 584:7c5a5136e412 5 * Description: Slow and fast implementations of the CRC standards.
mbed_official 584:7c5a5136e412 6 *
mbed_official 584:7c5a5136e412 7 * Notes: The parameters for each supported CRC standard are
mbed_official 584:7c5a5136e412 8 * defined in the header file crc.h. The implementations
mbed_official 584:7c5a5136e412 9 * here should stand up to further additions to that list.
mbed_official 584:7c5a5136e412 10 *
mbed_official 584:7c5a5136e412 11 *
mbed_official 584:7c5a5136e412 12 * Copyright (c) 2000 by Michael Barr. This software is placed into
mbed_official 584:7c5a5136e412 13 * the public domain and may be used for any purpose. However, this
mbed_official 584:7c5a5136e412 14 * notice must not be changed or removed and no warranty is either
mbed_official 584:7c5a5136e412 15 * expressed or implied by its publication or distribution.
mbed_official 584:7c5a5136e412 16 **********************************************************************/
mbed_official 584:7c5a5136e412 17
mbed_official 584:7c5a5136e412 18 #include "crc.h"
mbed_official 584:7c5a5136e412 19
mbed_official 584:7c5a5136e412 20
mbed_official 584:7c5a5136e412 21 /*
mbed_official 584:7c5a5136e412 22 * Derive parameters from the standard-specific parameters in crc.h.
mbed_official 584:7c5a5136e412 23 */
mbed_official 584:7c5a5136e412 24 #define WIDTH (8 * sizeof(crc))
mbed_official 584:7c5a5136e412 25 #define TOPBIT (1 << (WIDTH - 1))
mbed_official 584:7c5a5136e412 26
mbed_official 584:7c5a5136e412 27 #if (REFLECT_DATA == TRUE)
mbed_official 584:7c5a5136e412 28 #undef REFLECT_DATA
mbed_official 584:7c5a5136e412 29 #define REFLECT_DATA(X) ((unsigned char) reflect((X), 8))
mbed_official 584:7c5a5136e412 30 #else
mbed_official 584:7c5a5136e412 31 #undef REFLECT_DATA
mbed_official 584:7c5a5136e412 32 #define REFLECT_DATA(X) (X)
mbed_official 584:7c5a5136e412 33 #endif
mbed_official 584:7c5a5136e412 34
mbed_official 584:7c5a5136e412 35 #if (REFLECT_REMAINDER == TRUE)
mbed_official 584:7c5a5136e412 36 #undef REFLECT_REMAINDER
mbed_official 584:7c5a5136e412 37 #define REFLECT_REMAINDER(X) ((crc) reflect((X), WIDTH))
mbed_official 584:7c5a5136e412 38 #else
mbed_official 584:7c5a5136e412 39 #undef REFLECT_REMAINDER
mbed_official 584:7c5a5136e412 40 #define REFLECT_REMAINDER(X) (X)
mbed_official 584:7c5a5136e412 41 #endif
mbed_official 584:7c5a5136e412 42
mbed_official 584:7c5a5136e412 43
mbed_official 584:7c5a5136e412 44 /*********************************************************************
mbed_official 584:7c5a5136e412 45 *
mbed_official 584:7c5a5136e412 46 * Function: reflect()
mbed_official 584:7c5a5136e412 47 *
mbed_official 584:7c5a5136e412 48 * Description: Reorder the bits of a binary sequence, by reflecting
mbed_official 584:7c5a5136e412 49 * them about the middle position.
mbed_official 584:7c5a5136e412 50 *
mbed_official 584:7c5a5136e412 51 * Notes: No checking is done that nBits <= 32.
mbed_official 584:7c5a5136e412 52 *
mbed_official 584:7c5a5136e412 53 * Returns: The reflection of the original data.
mbed_official 584:7c5a5136e412 54 *
mbed_official 584:7c5a5136e412 55 *********************************************************************/
mbed_official 584:7c5a5136e412 56 static unsigned long
mbed_official 584:7c5a5136e412 57 reflect(unsigned long data, unsigned char nBits)
mbed_official 584:7c5a5136e412 58 {
mbed_official 584:7c5a5136e412 59 unsigned long reflection = 0x00000000;
mbed_official 584:7c5a5136e412 60 unsigned char bit;
mbed_official 584:7c5a5136e412 61
mbed_official 584:7c5a5136e412 62 /*
mbed_official 584:7c5a5136e412 63 * Reflect the data about the center bit.
mbed_official 584:7c5a5136e412 64 */
mbed_official 584:7c5a5136e412 65 for (bit = 0; bit < nBits; ++bit)
mbed_official 584:7c5a5136e412 66 {
mbed_official 584:7c5a5136e412 67 /*
mbed_official 584:7c5a5136e412 68 * If the LSB bit is set, set the reflection of it.
mbed_official 584:7c5a5136e412 69 */
mbed_official 584:7c5a5136e412 70 if (data & 0x01)
mbed_official 584:7c5a5136e412 71 {
mbed_official 584:7c5a5136e412 72 reflection |= (1 << ((nBits - 1) - bit));
mbed_official 584:7c5a5136e412 73 }
mbed_official 584:7c5a5136e412 74
mbed_official 584:7c5a5136e412 75 data = (data >> 1);
mbed_official 584:7c5a5136e412 76 }
mbed_official 584:7c5a5136e412 77
mbed_official 584:7c5a5136e412 78 return (reflection);
mbed_official 584:7c5a5136e412 79
mbed_official 584:7c5a5136e412 80 } /* reflect() */
mbed_official 584:7c5a5136e412 81
mbed_official 584:7c5a5136e412 82
mbed_official 584:7c5a5136e412 83 /*********************************************************************
mbed_official 584:7c5a5136e412 84 *
mbed_official 584:7c5a5136e412 85 * Function: crcSlow()
mbed_official 584:7c5a5136e412 86 *
mbed_official 584:7c5a5136e412 87 * Description: Compute the CRC of a given message.
mbed_official 584:7c5a5136e412 88 *
mbed_official 584:7c5a5136e412 89 * Notes:
mbed_official 584:7c5a5136e412 90 *
mbed_official 584:7c5a5136e412 91 * Returns: The CRC of the message.
mbed_official 584:7c5a5136e412 92 *
mbed_official 584:7c5a5136e412 93 *********************************************************************/
mbed_official 584:7c5a5136e412 94 crc
mbed_official 584:7c5a5136e412 95 crcSlow(unsigned char const message[], int nBytes)
mbed_official 584:7c5a5136e412 96 {
mbed_official 584:7c5a5136e412 97 crc remainder = INITIAL_REMAINDER;
mbed_official 584:7c5a5136e412 98 int byte;
mbed_official 584:7c5a5136e412 99 unsigned char bit;
mbed_official 584:7c5a5136e412 100
mbed_official 584:7c5a5136e412 101
mbed_official 584:7c5a5136e412 102 /*
mbed_official 584:7c5a5136e412 103 * Perform modulo-2 division, a byte at a time.
mbed_official 584:7c5a5136e412 104 */
mbed_official 584:7c5a5136e412 105 for (byte = 0; byte < nBytes; ++byte)
mbed_official 584:7c5a5136e412 106 {
mbed_official 584:7c5a5136e412 107 /*
mbed_official 584:7c5a5136e412 108 * Bring the next byte into the remainder.
mbed_official 584:7c5a5136e412 109 */
mbed_official 584:7c5a5136e412 110 remainder ^= (REFLECT_DATA(message[byte]) << (WIDTH - 8));
mbed_official 584:7c5a5136e412 111
mbed_official 584:7c5a5136e412 112 /*
mbed_official 584:7c5a5136e412 113 * Perform modulo-2 division, a bit at a time.
mbed_official 584:7c5a5136e412 114 */
mbed_official 584:7c5a5136e412 115 for (bit = 8; bit > 0; --bit)
mbed_official 584:7c5a5136e412 116 {
mbed_official 584:7c5a5136e412 117 /*
mbed_official 584:7c5a5136e412 118 * Try to divide the current data bit.
mbed_official 584:7c5a5136e412 119 */
mbed_official 584:7c5a5136e412 120 if (remainder & TOPBIT)
mbed_official 584:7c5a5136e412 121 {
mbed_official 584:7c5a5136e412 122 remainder = (remainder << 1) ^ POLYNOMIAL;
mbed_official 584:7c5a5136e412 123 }
mbed_official 584:7c5a5136e412 124 else
mbed_official 584:7c5a5136e412 125 {
mbed_official 584:7c5a5136e412 126 remainder = (remainder << 1);
mbed_official 584:7c5a5136e412 127 }
mbed_official 584:7c5a5136e412 128 }
mbed_official 584:7c5a5136e412 129 }
mbed_official 584:7c5a5136e412 130
mbed_official 584:7c5a5136e412 131 /*
mbed_official 584:7c5a5136e412 132 * The final remainder is the CRC result.
mbed_official 584:7c5a5136e412 133 */
mbed_official 584:7c5a5136e412 134 return (REFLECT_REMAINDER(remainder) ^ FINAL_XOR_VALUE);
mbed_official 584:7c5a5136e412 135
mbed_official 584:7c5a5136e412 136 } /* crcSlow() */
mbed_official 584:7c5a5136e412 137
mbed_official 584:7c5a5136e412 138
mbed_official 584:7c5a5136e412 139 crc crcTable[256];
mbed_official 584:7c5a5136e412 140
mbed_official 584:7c5a5136e412 141
mbed_official 584:7c5a5136e412 142 /*********************************************************************
mbed_official 584:7c5a5136e412 143 *
mbed_official 584:7c5a5136e412 144 * Function: crcInit()
mbed_official 584:7c5a5136e412 145 *
mbed_official 584:7c5a5136e412 146 * Description: Populate the partial CRC lookup table.
mbed_official 584:7c5a5136e412 147 *
mbed_official 584:7c5a5136e412 148 * Notes: This function must be rerun any time the CRC standard
mbed_official 584:7c5a5136e412 149 * is changed. If desired, it can be run "offline" and
mbed_official 584:7c5a5136e412 150 * the table results stored in an embedded system's ROM.
mbed_official 584:7c5a5136e412 151 *
mbed_official 584:7c5a5136e412 152 * Returns: None defined.
mbed_official 584:7c5a5136e412 153 *
mbed_official 584:7c5a5136e412 154 *********************************************************************/
mbed_official 584:7c5a5136e412 155 void
mbed_official 584:7c5a5136e412 156 crcInit(void)
mbed_official 584:7c5a5136e412 157 {
mbed_official 584:7c5a5136e412 158 crc remainder;
mbed_official 584:7c5a5136e412 159 int dividend;
mbed_official 584:7c5a5136e412 160 unsigned char bit;
mbed_official 584:7c5a5136e412 161
mbed_official 584:7c5a5136e412 162
mbed_official 584:7c5a5136e412 163 /*
mbed_official 584:7c5a5136e412 164 * Compute the remainder of each possible dividend.
mbed_official 584:7c5a5136e412 165 */
mbed_official 584:7c5a5136e412 166 for (dividend = 0; dividend < 256; ++dividend)
mbed_official 584:7c5a5136e412 167 {
mbed_official 584:7c5a5136e412 168 /*
mbed_official 584:7c5a5136e412 169 * Start with the dividend followed by zeros.
mbed_official 584:7c5a5136e412 170 */
mbed_official 584:7c5a5136e412 171 remainder = dividend << (WIDTH - 8);
mbed_official 584:7c5a5136e412 172
mbed_official 584:7c5a5136e412 173 /*
mbed_official 584:7c5a5136e412 174 * Perform modulo-2 division, a bit at a time.
mbed_official 584:7c5a5136e412 175 */
mbed_official 584:7c5a5136e412 176 for (bit = 8; bit > 0; --bit)
mbed_official 584:7c5a5136e412 177 {
mbed_official 584:7c5a5136e412 178 /*
mbed_official 584:7c5a5136e412 179 * Try to divide the current data bit.
mbed_official 584:7c5a5136e412 180 */
mbed_official 584:7c5a5136e412 181 if (remainder & TOPBIT)
mbed_official 584:7c5a5136e412 182 {
mbed_official 584:7c5a5136e412 183 remainder = (remainder << 1) ^ POLYNOMIAL;
mbed_official 584:7c5a5136e412 184 }
mbed_official 584:7c5a5136e412 185 else
mbed_official 584:7c5a5136e412 186 {
mbed_official 584:7c5a5136e412 187 remainder = (remainder << 1);
mbed_official 584:7c5a5136e412 188 }
mbed_official 584:7c5a5136e412 189 }
mbed_official 584:7c5a5136e412 190
mbed_official 584:7c5a5136e412 191 /*
mbed_official 584:7c5a5136e412 192 * Store the result into the table.
mbed_official 584:7c5a5136e412 193 */
mbed_official 584:7c5a5136e412 194 crcTable[dividend] = remainder;
mbed_official 584:7c5a5136e412 195 }
mbed_official 584:7c5a5136e412 196
mbed_official 584:7c5a5136e412 197 } /* crcInit() */
mbed_official 584:7c5a5136e412 198
mbed_official 584:7c5a5136e412 199
mbed_official 584:7c5a5136e412 200 /*********************************************************************
mbed_official 584:7c5a5136e412 201 *
mbed_official 584:7c5a5136e412 202 * Function: crcFast()
mbed_official 584:7c5a5136e412 203 *
mbed_official 584:7c5a5136e412 204 * Description: Compute the CRC of a given message.
mbed_official 584:7c5a5136e412 205 *
mbed_official 584:7c5a5136e412 206 * Notes: crcInit() must be called first.
mbed_official 584:7c5a5136e412 207 *
mbed_official 584:7c5a5136e412 208 * Returns: The CRC of the message.
mbed_official 584:7c5a5136e412 209 *
mbed_official 584:7c5a5136e412 210 *********************************************************************/
mbed_official 584:7c5a5136e412 211 crc
mbed_official 584:7c5a5136e412 212 crcFast(unsigned char const message[], int nBytes)
mbed_official 584:7c5a5136e412 213 {
mbed_official 584:7c5a5136e412 214 crc remainder = INITIAL_REMAINDER;
mbed_official 584:7c5a5136e412 215 unsigned char data;
mbed_official 584:7c5a5136e412 216 int byte;
mbed_official 584:7c5a5136e412 217
mbed_official 584:7c5a5136e412 218
mbed_official 584:7c5a5136e412 219 /*
mbed_official 584:7c5a5136e412 220 * Divide the message by the polynomial, a byte at a time.
mbed_official 584:7c5a5136e412 221 */
mbed_official 584:7c5a5136e412 222 for (byte = 0; byte < nBytes; ++byte)
mbed_official 584:7c5a5136e412 223 {
mbed_official 584:7c5a5136e412 224 data = REFLECT_DATA(message[byte]) ^ (remainder >> (WIDTH - 8));
mbed_official 584:7c5a5136e412 225 remainder = crcTable[data] ^ (remainder << 8);
mbed_official 584:7c5a5136e412 226 }
mbed_official 584:7c5a5136e412 227
mbed_official 584:7c5a5136e412 228 /*
mbed_official 584:7c5a5136e412 229 * The final remainder is the CRC.
mbed_official 584:7c5a5136e412 230 */
mbed_official 584:7c5a5136e412 231 return (REFLECT_REMAINDER(remainder) ^ FINAL_XOR_VALUE);
mbed_official 584:7c5a5136e412 232
mbed_official 584:7c5a5136e412 233 } /* crcFast() */
mbed_official 584:7c5a5136e412 234