mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			
						commit
						6229322c64
					
				| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
#include "platform/SingletonPtr.h"
 | 
			
		||||
#include "platform/PlatformMutex.h"
 | 
			
		||||
 | 
			
		||||
/* This is invalid warning from the compiler for below section of code
 | 
			
		||||
/* This is an invalid warning from the compiler for the below section of code
 | 
			
		||||
if ((width < 8) && (NULL == _crc_table)) {
 | 
			
		||||
    p_crc = (uint32_t)(p_crc << (8 - width));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -43,11 +43,21 @@ namespace mbed {
 | 
			
		|||
/** \addtogroup drivers */
 | 
			
		||||
/** @{*/
 | 
			
		||||
 | 
			
		||||
/** CRC object provides CRC generation through hardware/software
 | 
			
		||||
extern SingletonPtr<PlatformMutex> mbed_crc_mutex;
 | 
			
		||||
 | 
			
		||||
/** CRC object provides CRC generation through hardware or software
 | 
			
		||||
 *
 | 
			
		||||
 *  ROM polynomial tables for supported polynomials (:: crc_polynomial_t) will be used for
 | 
			
		||||
 *  software CRC computation, if ROM tables are not available then CRC is computed runtime
 | 
			
		||||
 *  bit by bit for all data input.
 | 
			
		||||
 *  CRC sums can be generated using three different methods: hardware, software ROM tables
 | 
			
		||||
 *  and bitwise computation. The mode used is selected automatically based on required
 | 
			
		||||
 *  polynomial and hardware capabilities. Any polynomial in standard form (`x^3 + x + 1`)
 | 
			
		||||
 *  can be used for computation, but custom ones can affect the performance.
 | 
			
		||||
 *
 | 
			
		||||
 *  First choice is the hardware mode. The supported polynomials are hardware specific, and
 | 
			
		||||
 *  you need to consult your MCU manual to discover them. Next, ROM polynomial tables
 | 
			
		||||
 *  are tried (you can find list of supported polynomials here ::crc_polynomial). If the selected
 | 
			
		||||
 *  configuration is supported, it will accelerate the software computations. If ROM tables
 | 
			
		||||
 *  are not available for the selected polynomial, then CRC is computed at run time bit by bit
 | 
			
		||||
 *  for all data input.
 | 
			
		||||
 *  @note Synchronization level: Thread safe
 | 
			
		||||
 *
 | 
			
		||||
 *  @tparam  polynomial CRC polynomial value in hex
 | 
			
		||||
| 
						 | 
				
			
			@ -93,9 +103,6 @@ namespace mbed {
 | 
			
		|||
 * @endcode
 | 
			
		||||
 * @ingroup drivers
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
extern SingletonPtr<PlatformMutex> mbed_crc_mutex;
 | 
			
		||||
 | 
			
		||||
template <uint32_t polynomial = POLY_32BIT_ANSI, uint8_t width = 32>
 | 
			
		||||
class MbedCRC {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,13 +28,13 @@
 | 
			
		|||
 * Different polynomial values supported
 | 
			
		||||
 */
 | 
			
		||||
typedef enum crc_polynomial {
 | 
			
		||||
    POLY_OTHER       = 0,
 | 
			
		||||
    POLY_8BIT_CCITT  = 0x07,       // x8+x2+x+1
 | 
			
		||||
    POLY_7BIT_SD     = 0x9,        // x7+x3+1;
 | 
			
		||||
    POLY_16BIT_CCITT = 0x1021,     // x16+x12+x5+1
 | 
			
		||||
    POLY_16BIT_IBM   = 0x8005,     // x16+x15+x2+1
 | 
			
		||||
    POLY_32BIT_ANSI  = 0x04C11DB7, // x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
 | 
			
		||||
    POLY_32BIT_REV_ANSI = 0xEDB88320
 | 
			
		||||
    POLY_OTHER       = 0,            ///< Custom polynomial
 | 
			
		||||
    POLY_8BIT_CCITT  = 0x07,         ///< x8+x2+x+1
 | 
			
		||||
    POLY_7BIT_SD     = 0x9,          ///< x7+x3+1
 | 
			
		||||
    POLY_16BIT_CCITT = 0x1021,       ///< x16+x12+x5+1
 | 
			
		||||
    POLY_16BIT_IBM   = 0x8005,       ///< x16+x15+x2+1
 | 
			
		||||
    POLY_32BIT_ANSI  = 0x04C11DB7,   ///< x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
 | 
			
		||||
    POLY_32BIT_REV_ANSI = 0xEDB88320 ///< x31+x30+x29+x27+x26+x24+x23+x21+x20+x19+x15+x9+x8+x5
 | 
			
		||||
} crc_polynomial_t;
 | 
			
		||||
 | 
			
		||||
typedef struct crc_mbed_config {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue