123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- /*
- * @brief LPC8xx Cyclic Redundancy Check (CRC) Engine driver
- *
- * @note
- * Copyright(C) NXP Semiconductors, 2012
- * All rights reserved.
- *
- * @par
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * LPC products. This software is supplied "AS IS" without any warranties of
- * any kind, and NXP Semiconductors and its licenser disclaim any and
- * all warranties, express or implied, including all implied warranties of
- * merchantability, fitness for a particular purpose and non-infringement of
- * intellectual property rights. NXP Semiconductors assumes no responsibility
- * or liability for the use of the software, conveys no license or rights under any
- * patent, copyright, mask work right, or any other intellectual property rights in
- * or to any products. NXP Semiconductors reserves the right to make changes
- * in the software without notification. NXP Semiconductors also makes no
- * representation or warranty that such application will be suitable for the
- * specified use without further testing or modification.
- *
- * @par
- * Permission to use, copy, modify, and distribute this software and its
- * documentation is hereby granted, under NXP Semiconductors' and its
- * licensor's relevant copyrights in the software, without fee, provided that it
- * is used in conjunction with NXP Semiconductors microcontrollers. This
- * copyright, permission, and disclaimer notice must appear in all copies of
- * this code.
- */
- #ifndef __CRC_8XX_H_
- #define __CRC_8XX_H_
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** @defgroup CRC_8XX CHIP: LPC8xx Cyclic Redundancy Check Engine driver
- * @ingroup CHIP_8XX_Drivers
- * @{
- */
- /**
- * @brief CRC register block structure
- */
- typedef struct { /*!< CRC Structure */
- __IO uint32_t MODE; /*!< CRC Mode Register */
- __IO uint32_t SEED; /*!< CRC SEED Register */
- union {
- __I uint32_t SUM; /*!< CRC Checksum Register. */
- __O uint32_t WRDATA32; /*!< CRC Data Register: write size 32-bit*/
- __O uint16_t WRDATA16; /*!< CRC Data Register: write size 16-bit*/
- __O uint8_t WRDATA8; /*!< CRC Data Register: write size 8-bit*/
- };
- } LPC_CRC_T;
- /*
- * @brief CRC MODE register description
- */
- #define CRC_MODE_POLY_BITMASK ((0x03)) /** CRC polynomial Bit mask */
- #define CRC_MODE_POLY_CCITT (0x00) /** Select CRC-CCITT polynomial */
- #define CRC_MODE_POLY_CRC16 (0x01) /** Select CRC-16 polynomial */
- #define CRC_MODE_POLY_CRC32 (0x02) /** Select CRC-32 polynomial */
- #define CRC_MODE_WRDATA_BITMASK (0x03 << 2) /** CRC WR_Data Config Bit mask */
- #define CRC_MODE_WRDATA_BIT_RVS (1 << 2) /** Select Bit order reverse for WR_DATA (per byte) */
- #define CRC_MODE_WRDATA_CMPL (1 << 3) /** Select One's complement for WR_DATA */
- #define CRC_MODE_SUM_BITMASK (0x03 << 4) /** CRC Sum Config Bit mask */
- #define CRC_MODE_SUM_BIT_RVS (1 << 4) /** Select Bit order reverse for CRC_SUM */
- #define CRC_MODE_SUM_CMPL (1 << 5) /** Select One's complement for CRC_SUM */
- #define MODE_CFG_CCITT (0x00) /** Pre-defined mode word for default CCITT setup */
- #define MODE_CFG_CRC16 (0x15) /** Pre-defined mode word for default CRC16 setup */
- #define MODE_CFG_CRC32 (0x36) /** Pre-defined mode word for default CRC32 setup */
- #define CRC_SEED_CCITT (0x0000FFFF)/** Initial seed value for CCITT mode */
- #define CRC_SEED_CRC16 (0x00000000)/** Initial seed value for CRC16 mode */
- #define CRC_SEED_CRC32 (0xFFFFFFFF)/** Initial seed value for CRC32 mode */
- /**
- * @brief CRC polynomial
- */
- typedef enum IP_CRC_001_POLY {
- CRC_POLY_CCITT = CRC_MODE_POLY_CCITT, /**< CRC-CCIT polynomial */
- CRC_POLY_CRC16 = CRC_MODE_POLY_CRC16, /**< CRC-16 polynomial */
- CRC_POLY_CRC32 = CRC_MODE_POLY_CRC32, /**< CRC-32 polynomial */
- CRC_POLY_LAST,
- } CRC_POLY_T;
- /**
- * @brief Initializes the CRC Engine
- * @return Nothing
- */
- void Chip_CRC_Init(void);
- /**
- * @brief Deinitializes the CRC Engine
- * @return Nothing
- */
- void Chip_CRC_Deinit(void);
- /**
- * @brief Set the polynomial used for the CRC calculation
- * @param poly : The enumerated polynomial to be used
- * @param flags : An Or'ed value of flags that setup the mode
- * @return Nothing
- * @note Flags for setting up the mode word include CRC_MODE_WRDATA_BIT_RVS,
- * CRC_MODE_WRDATA_CMPL, CRC_MODE_SUM_BIT_RVS, and CRC_MODE_SUM_CMPL.
- */
- STATIC INLINE void Chip_CRC_SetPoly(CRC_POLY_T poly, uint32_t flags)
- {
- LPC_CRC->MODE = (uint32_t) poly | flags;
- }
- /**
- * @brief Sets up the CRC engine for CRC16 mode
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_UseCRC16(void)
- {
- LPC_CRC->MODE = MODE_CFG_CRC16;
- LPC_CRC->SEED = CRC_SEED_CRC16;
- }
- /**
- * @brief Sets up the CRC engine for CRC32 mode
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_UseCRC32(void)
- {
- LPC_CRC->MODE = MODE_CFG_CRC32;
- LPC_CRC->SEED = CRC_SEED_CRC32;
- }
- /**
- * @brief Sets up the CRC engine for CCITT mode
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_UseCCITT(void)
- {
- LPC_CRC->MODE = MODE_CFG_CCITT;
- LPC_CRC->SEED = CRC_SEED_CCITT;
- }
- /**
- * @brief Engage the CRC engine with defaults based on the polynomial to be used
- * @param poly : The enumerated polynomial to be used
- * @return Nothing
- */
- void Chip_CRC_UseDefaultConfig(CRC_POLY_T poly);
- /**
- * @brief Set the CRC Mode bits
- * @param mode : Mode value
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_SetMode(uint32_t mode)
- {
- LPC_CRC->MODE = mode;
- }
- /**
- * @brief Get the CRC Mode bits
- * @return The current value of the CRC Mode bits
- */
- STATIC INLINE uint32_t Chip_CRC_GetMode(void)
- {
- return LPC_CRC->MODE;
- }
- /**
- * @brief Set the seed bits used by the CRC_SUM register
- * @param seed : Seed value
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_SetSeed(uint32_t seed)
- {
- LPC_CRC->SEED = seed;
- }
- /**
- * @brief Get the CRC seed value
- * @return Seed value
- */
- STATIC INLINE uint32_t Chip_CRC_GetSeed(void)
- {
- return LPC_CRC->SEED;
- }
- /**
- * @brief Convenience function for writing 8-bit data to the CRC engine
- * @param data : 8-bit data to write
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_Write8(uint8_t data)
- {
- LPC_CRC->WRDATA8 = data;
- }
- /**
- * @brief Convenience function for writing 16-bit data to the CRC engine
- * @param data : 16-bit data to write
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_Write16(uint16_t data)
- {
- LPC_CRC->WRDATA16 = data;
- }
- /**
- * @brief Convenience function for writing 32-bit data to the CRC engine
- * @param data : 32-bit data to write
- * @return Nothing
- */
- STATIC INLINE void Chip_CRC_Write32(uint32_t data)
- {
- LPC_CRC->WRDATA32 = data;
- }
- /**
- * @brief Gets the CRC Sum based on the Mode and Seed as previously configured
- * @return CRC Checksum value
- */
- STATIC INLINE uint32_t Chip_CRC_Sum(void)
- {
- return LPC_CRC->SUM;
- }
- /**
- * @brief Convenience function for computing a standard CCITT checksum from an 8-bit data block
- * @param data : Pointer to the block of 8-bit data
- * @param bytes : The number of bytes pointed to by data
- * @return Check sum value
- */
- uint32_t Chip_CRC_CRC8(const uint8_t *data, uint32_t bytes);
- /**
- * @brief Convenience function for computing a standard CRC16 checksum from 16-bit data block
- * @param data : Pointer to the block of 16-bit data
- * @param hwords : The number of 16 byte entries pointed to by data
- * @return Check sum value
- */
- uint32_t Chip_CRC_CRC16(const uint16_t *data, uint32_t hwords);
- /**
- * @brief Convenience function for computing a standard CRC32 checksum from 32-bit data block
- * @param data : Pointer to the block of 32-bit data
- * @param words : The number of 32-bit entries pointed to by data
- * @return Check sum value
- */
- uint32_t Chip_CRC_CRC32(const uint32_t *data, uint32_t words);
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __CRC_8XX_H_ */
|