Boen_Shi 8be2866433 feat(base): 初始化 MSPM0 开发环境
- 添加头文件和配置文件支持
- 更新.gitignore忽略编译和IDE相关文件
- 添加基础的bsp代码
2026-07-16 14:45:26 +08:00

867 lines
33 KiB
C

/*
* Copyright (c) 2023, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*!****************************************************************************
* @file dl_crcp.h
* @brief Cyclic Redundancy Check with Configurable Polynomial (CRCP) Driver Library
* @defgroup CRCP Cyclic Redundancy Check with Configurable Polynomial (CRCP)
*
* @anchor ti_dl_dl_crcp_Overview
* # Overview
*
* The CRCP DriverLib allows full configuration of the MSPM0 CRCP module.
* The cyclic redundancy check (CRC) accelerator generates signatures for a
* given data sequence based on a user-configured polynomial, allowing for
* support of any 16-bit or 32-bit polynomial including but not limited to:
* * CRC32-IS03309
* * CRC16-ITT
* * CRC-32C
* * CRC-32K
* * CRC-16-Profibus
*
* <hr>
******************************************************************************
*/
/** @addtogroup CRCP
* @{
*/
#ifndef ti_dl_dl_crcp__include
#define ti_dl_dl_crcp__include
#include <stdbool.h>
#include <stdint.h>
#include <ti/devices/msp/msp.h>
#include <ti/driverlib/dl_common.h>
#ifdef __MSPM0_HAS_CRCP__
#ifdef __cplusplus
extern "C" {
#endif
/* clang-format off */
/**
* @brief Redirects to @ref DL_CRCP_POLYNOMIAL_SIZE_16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_POLYNOMIAL_SIZE_16 DL_CRCP_POLYNOMIAL_SIZE_16
/**
* @brief Redirects to @ref DL_CRCP_POLYNOMIAL_SIZE_32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_POLYNOMIAL_SIZE_32 DL_CRCP_POLYNOMIAL_SIZE_32
/**
* @brief Redirects to @ref DL_CRCP_BIT_REVERSED for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_BIT_REVERSED DL_CRCP_BIT_REVERSED
/**
* @brief Redirects to @ref DL_CRCP_BIT_NOT_REVERSED for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_BIT_NOT_REVERSED DL_CRCP_BIT_NOT_REVERSED
/**
* @brief Redirects to @ref DL_CRCP_INPUT_ENDIANESS_LITTLE_ENDIAN for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_INPUT_ENDIANESS_LITTLE_ENDIAN \
DL_CRCP_INPUT_ENDIANESS_LITTLE_ENDIAN
/**
* @brief Redirects to @ref DL_CRCP_INPUT_ENDIANESS_BIG_ENDIAN for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_INPUT_ENDIANESS_BIG_ENDIAN DL_CRCP_INPUT_ENDIANESS_BIG_ENDIAN
/**
* @brief Redirects to @ref DL_CRCP_OUTPUT_BYTESWAP_ENABLED for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_OUTPUT_BYTESWAP_ENABLED DL_CRCP_OUTPUT_BYTESWAP_ENABLED
/**
* @brief Redirects to @ref DL_CRCP_OUTPUT_BYTESWAP_DISABLED for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_OUTPUT_BYTESWAP_DISABLED DL_CRCP_OUTPUT_BYTESWAP_DISABLED
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_32_MPEG2 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_32_MPEG2 DL_CRCP_CRCPOLY_POLYNOMIAL_32_MPEG2
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_32_Q for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_32_Q DL_CRCP_CRCPOLY_POLYNOMIAL_32_Q
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_32_JAMCRC for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_32_JAMCRC \
DL_CRCP_CRCPOLY_POLYNOMIAL_32_JAMCRC
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_32_XFER for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_32_XFER \
DL_CRCP_CRCPOLY_POLYNOMIAL_32_XFER
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_32_MPEG2 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_32_MPEG2 DL_CRCP_CRCPOLY_POLYNOMIAL_32_MPEG2
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_ZERO for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_CCIT_ZERO \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_ZERO
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_ARC for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_ARC \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_ARC
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_AUG_CCIT for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_AUG_CCIT \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_AUG_CCIT
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_BUYPASS for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_BUYPASS \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_BUYPASS
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_FALSE for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_CCIT_FALSE \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_FALSE
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_CDMA2000 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_CDMA2000 \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CDMA2000
/**
* @brief Redirects to @ref DL_CRCP_CRCPOLY_POLYNOMIAL_16_MODBUS for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCPOLY_POLYNOMIAL_16_MODBUS \
DL_CRCP_CRCPOLY_POLYNOMIAL_16_MODBUS
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_32_MPEG2 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_32_MPEG2 DL_CRCP_CRCSEED_SEED_32_MPEG2
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_32_Q for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_32_Q DL_CRCP_CRCSEED_SEED_32_Q
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_32_JAMCRC for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_32_JAMCRC DL_CRCP_CRCSEED_SEED_32_JAMCRC
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_32_XFER for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_32_XFER DL_CRCP_CRCSEED_SEED_32_XFER
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_32_MPEG2 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_32_MPEG2 DL_CRCP_CRCSEED_SEED_32_MPEG2
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_16_AUG_CCIT for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_16_AUG_CCIT DL_CRCP_CRCSEED_SEED_16_AUG_CCIT
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_16_BUYPASS for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_16_BUYPASS DL_CRCP_CRCSEED_SEED_16_BUYPASS
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_16_CCIT_FALSE for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_16_CCIT_FALSE DL_CRCP_CRCSEED_SEED_16_CCIT_FALSE
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_16_CDMA2000 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_16_CDMA2000 DL_CRCP_CRCSEED_SEED_16_CDMA2000
/**
* @brief Redirects to @ref DL_CRCP_CRCSEED_SEED_16_MODBUS for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_CRCSEED_SEED_16_MODBUS DL_CRCP_CRCSEED_SEED_16_MODBUS
/**
* @brief Redirects to @ref DL_CRCP_enablePower for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_enablePower DL_CRCP_enablePower
/**
* @brief Redirects to @ref DL_CRCP_isPowerEnabled for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_isPowerEnabled DL_CRCP_isPowerEnabled
/**
* @brief Redirects to @ref DL_CRCP_reset for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_reset DL_CRCP_reset
/**
* @brief Redirects to @ref DL_CRCP_isReset for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_isReset DL_CRCP_isReset
/**
* @brief Redirects to @ref DL_CRCP_init for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_init DL_CRCP_init
/**
* @brief Redirects to @ref DL_CRCP_setSeed16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_setSeed16 DL_CRCP_setSeed16
/**
* @brief Redirects to @ref DL_CRCP_setSeed32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_setSeed32 DL_CRCP_setSeed32
/**
* @brief Redirects to @ref DL_CRCP_feedData8 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_feedData8 DL_CRCP_feedData8
/**
* @brief Redirects to @ref DL_CRCP_feedData16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_feedData16 DL_CRCP_feedData16
/**
* @brief Redirects to @ref DL_CRCP_feedData32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_feedData32 DL_CRCP_feedData32
/**
* @brief Redirects to @ref DL_CRCP_getResult16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_getResult16 DL_CRCP_getResult16
/**
* @brief Redirects to @ref DL_CRCP_getResult32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_getResult32 DL_CRCP_getResult32
/**
* @brief Redirects to @ref DL_CRCP_setPolynomial for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_setPolynomial DL_CRCP_setPolynomial
/**
* @brief Redirects to @ref DL_CRCP_getPolynomial for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_getPolynomial DL_CRCP_getPolynomial
/**
* @brief Redirects to @ref DL_CRCP_calculateBlock32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_calculateBlock32 DL_CRCP_calculateBlock32
/**
* @brief Redirects to @ref DL_CRCP_calculateMemoryRange32 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_calculateMemoryRange32 DL_CRCP_calculateMemoryRange32
/**
* @brief Redirects to @ref DL_CRCP_calculateBlock16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_calculateBlock16 DL_CRCP_calculateBlock16
/**
* @brief Redirects to @ref DL_CRCP_calculateMemoryRange16 for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_calculateMemoryRange16 DL_CRCP_calculateMemoryRange16
/**
* @brief Redirects to @ref DL_CRCP_getCRCINAddr for compatibility
* between CRC and CRCP DriverLib modules
*/
#define DL_CRC_getCRCINAddr DL_CRCP_getCRCINAddr
/* clang-format on */
/*! @enum DL_CRCP_POLYNOMIAL_SIZE */
typedef enum {
/*! Use lower 16-bit value of CRCPOLY as polynomial for calculation.
* Upon reset, user will need to update polynomial value for 16-bits,
* such as the CRC-16-CCITT standard of 0x1021. */
DL_CRCP_POLYNOMIAL_SIZE_16 = CRCP_CRCCTRL_POLYSIZE_CRC16,
/*! Use 32-bit polynomial value of CRCPOLY as polynomial for calculation.
* Defaults to the CRC32-ISO3309 standard value of 0x04C11DB7. */
DL_CRCP_POLYNOMIAL_SIZE_32 = CRCP_CRCCTRL_POLYSIZE_CRC32
} DL_CRCP_POLYNOMIAL_SIZE;
/*! @enum DL_CRCP_BIT */
typedef enum {
/*! CRCP Bit Input and output bit orders are reversed */
DL_CRCP_BIT_REVERSED = CRCP_CRCCTRL_BITREVERSE_REVERSED,
/*! CRCP Bit Input and output are not reversed */
DL_CRCP_BIT_NOT_REVERSED = CRCP_CRCCTRL_BITREVERSE_NOT_REVERSED
} DL_CRCP_BIT;
/*! @enum DL_CRCP_INPUT_ENDIANESS */
typedef enum {
/*! CRCP Input is proccessed in little endian.
* LSB is lowest memory address and first to be processed. */
DL_CRCP_INPUT_ENDIANESS_LITTLE_ENDIAN =
CRCP_CRCCTRL_INPUT_ENDIANNESS_LITTLE_ENDIAN,
/*! CRCP Input is proccessed in big endian.
* LSB is highest memory address and last to be processed. */
DL_CRCP_INPUT_ENDIANESS_BIG_ENDIAN =
CRCP_CRCCTRL_INPUT_ENDIANNESS_BIG_ENDIAN
} DL_CRCP_INPUT_ENDIANESS;
/*! @enum DL_CRCP_OUTPUT_BYTESWAP */
typedef enum {
/*! CRCP output byteswap is enabled */
DL_CRCP_OUTPUT_BYTESWAP_ENABLED = CRCP_CRCCTRL_OUTPUT_BYTESWAP_ENABLE,
/*! CRCP output byteswap is disabled */
DL_CRCP_OUTPUT_BYTESWAP_DISABLED = CRCP_CRCCTRL_OUTPUT_BYTESWAP_DISABLE
} DL_CRCP_OUTPUT_BYTESWAP;
/*! @enum DL_CRCP_CRCPOLY_POLYNOMIAL
*
* @brief commonly used pre-defined polynomials to be used by CRCP
* as mentioned by the website
* http://www.sunshine2k.de/coding/javascript/crc/crc_js.html.
* Custom polynomials can also be used in lieu of the follwoing.
*/
typedef enum {
/*! CRCP commonly used polynomial CRC32_MPEG2. To match online output,
* seed value must be set to 0xFFFFFFFF */
DL_CRCP_CRCPOLY_POLYNOMIAL_32_MPEG2 = 0x04C11DB7,
/*! CRCP commonly used polynomial CRC32_Q. To match online output,
* seed value must be set to 0x00000000 */
DL_CRCP_CRCPOLY_POLYNOMIAL_32_Q = 0x814141AB,
/*! CRCP commonly used polynomial CRC32_JAMCRC. To match online output,
* seed value must be set to 0xFFFFFFFF and bit order reversed */
DL_CRCP_CRCPOLY_POLYNOMIAL_32_JAMCRC = 0x04C11DB7,
/*! CRCP commonly used polynomial CRC32_XFER. To match online output,
* seed value must be set to 0x00000000 */
DL_CRCP_CRCPOLY_POLYNOMIAL_32_XFER = 0x000000AF,
/*! CRCP commonly used polynomial CRC16_CCIT_ZERO. To match online
* output, seed value must be set to 0x0000 */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_ZERO = 0x00001021,
/*! CRCP commonly used polynomial CRC16_ARC. To match online output,
* seed value must be set to 0x0000 and bit order reversed */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_ARC = 0x00001DCF,
/*! CRCP commonly used polynomial CRC16_AUG_CCIT. To match online output,
* seed value must be set to 0x1D0F */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_AUG_CCIT = 0x00001021,
/*! CRCP commonly used polynomial CRC16_BUYPASS. To match online output,
* seed value must be set to 0x0000 */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_BUYPASS = 0x00008005,
/*! CRCP commonly used polynomial CRC16_CCIT_FALSE. To match online output,
* seed value must be set to 0xFFFF */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CCIT_FALSE = 0x00001021,
/*! CRCP commonly used polynomial CRC16_CDMA2000. To match online output,
* seed value must be set to 0xFFFF */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_CDMA2000 = 0x0000C867,
/*! CRCP commonly used polynomial CRC16_MODBUS. To match online output,
* seed value must be set to 0xFFFF and bit order reversed */
DL_CRCP_CRCPOLY_POLYNOMIAL_16_MODBUS = 0x00001DCF,
} DL_CRCP_CRCPOLY_POLYNOMIAL;
/*! @enum DL_CRCP_CRCSEED_SEED
*
* @brief seeds for commonly used pre-defined polynomials to be used
* by CRCP as mentioned by the website
* http://www.sunshine2k.de/coding/javascript/crc/crc_js.html.
* Custom polynomials can also be used in lieu of the follwoing.
*/
typedef enum {
/*! CRCP commonly used polynomial CRC32_MPEG2. To match online output,
* polynomial must be set to 0x04C11DB7 */
DL_CRCP_CRCSEED_SEED_32_MPEG2 = 0xFFFFFFFF,
/*! CRCP commonly used polynomial CRC32_Q. To match online output,
* polynomial must be set to 0x814141AB */
DL_CRCP_CRCSEED_SEED_32_Q = 0x00000000,
/*! CRCP commonly used polynomial CRC32_JAMCRC. To match online output,
* polynomial must be set to 0x04C11DB7 and bit order reversed */
DL_CRCP_CRCSEED_SEED_32_JAMCRC = 0xFFFFFFFF,
/*! CRCP commonly used polynomial CRC32_XFER. To match online output,
* polynomial must be set to 0x000000AF */
DL_CRCP_CRCSEED_SEED_32_XFER = 0x00000000,
/*! CRCP commonly used polynomial CRC16_CCIT_ZERO. To match online
* output, polynomial must be set to 0x00001021 */
DL_CRCP_CRCSEED_SEED_16_CCIT_ZERO = 0x0000,
/*! CRCP commonly used polynomial CRC16_ARC. To match online output,
* polynomial must be set to 0x00001DCF and bit order reversed */
DL_CRCP_CRCSEED_SEED_16_ARC = 0x0000,
/*! CRCP commonly used polynomial CRC16_AUG_CCIT. To match online output,
* polynomial must be set to 0x00001021 */
DL_CRCP_CRCSEED_SEED_16_AUG_CCIT = 0x1D0F,
/*! CRCP commonly used polynomial CRC16_BUYPASS. To match online output,
* polynomial must be set to 0x00008005 */
DL_CRCP_CRCSEED_SEED_16_BUYPASS = 0x0000,
/*! CRCP commonly used polynomial CRC16_CCIT_FALSE. To match online output,
* polynomial must be set to 0x00001021 */
DL_CRCP_CRCSEED_SEED_16_CCIT_FALSE = 0xFFFF,
/*! CRCP commonly used polynomial CRC16_CDMA2000. To match online output,
* polynomial must be set to 0x0000C867 */
DL_CRCP_CRCSEED_SEED_16_CDMA2000 = 0xFFFF,
/*! CRCP commonly used polynomial CRC16_MODBUS. To match online output,
* polynomial must be set to 0x00001DCF and bit order reversed */
DL_CRCP_CRCSEED_SEED_16_MODBUS = 0xFFFF,
} DL_CRCP_CRCSEED_SEED;
/**
* @brief Enables the Peripheral Write Enable (PWREN) register for the CRCP
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* @param crcp Pointer to the register overlay for the CRCP peripheral
*/
__STATIC_INLINE void DL_CRCP_enablePower(CRCP_Regs *crcp)
{
crcp->GPRCM.PWREN = (CRCP_PWREN_KEY_UNLOCK_W | CRCP_PWREN_ENABLE_ENABLE);
}
/**
* @brief Disables the Peripheral Write Enable (PWREN) register for the CRCP
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
* @note This API does not provide large power savings.
*
* @param crcp Pointer to the register overlay for the CRCP peripheral
*/
__STATIC_INLINE void DL_CRCP_disablePower(CRCP_Regs *crcp)
{
crcp->GPRCM.PWREN = (CRCP_PWREN_KEY_UNLOCK_W | CRCP_PWREN_ENABLE_DISABLE);
}
/**
* @brief Returns if the Peripheral Write Enable (PWREN) register for the CRCP
* is enabled
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
* @param crcp Pointer to the register overlay for the CRCP peripheral
*
* @return true if peripheral register access is enabled
* @return false if peripheral register access is disabled
*
*/
__STATIC_INLINE bool DL_CRCP_isPowerEnabled(const CRCP_Regs *crcp)
{
return ((crcp->GPRCM.PWREN & CRCP_PWREN_ENABLE_MASK) ==
CRCP_PWREN_ENABLE_ENABLE);
}
/**
* @brief Resets CRCP peripheral
*
* @param crcp Pointer to the register overlay for the CRCP peripheral
*/
__STATIC_INLINE void DL_CRCP_reset(CRCP_Regs *crcp)
{
crcp->GPRCM.RSTCTL =
(CRCP_RSTCTL_KEY_UNLOCK_W | CRCP_RSTCTL_RESETSTKYCLR_CLR |
CRCP_RSTCTL_RESETASSERT_ASSERT);
}
/**
* @brief Returns if CRCP module has been reset
*
* @param crcp Pointer to the register overlay for the CRCP peripheral
*
* @return true if peripheral was reset
* @return false if peripheral wasn't reset
*
*/
__STATIC_INLINE bool DL_CRCP_isReset(const CRCP_Regs *crcp)
{
return ((crcp->GPRCM.STAT & CRCP_STAT_RESETSTKY_MASK) ==
CRCP_STAT_RESETSTKY_RESET);
}
/**
* @brief Initializes the CRCP peripheral
*
* @param crcp Pointer to the register overlay for the CRCP peripheral.
* @param polySize Selects CRC polynomial size. One of
* @ref DL_CRCP_POLYNOMIAL_SIZE.
* @param bitOrd Selects CRC bit order. One of @ref DL_CRCP_BIT.
* @param inEndianness Selects CRC input endianess. One of
* @ref DL_CRCP_INPUT_ENDIANESS.
* @param outByteSwap Selects CRC output byte swap mode. One of
* @ref DL_CRCP_OUTPUT_BYTESWAP.
*
*/
__STATIC_INLINE void DL_CRCP_init(CRCP_Regs *crcp,
DL_CRCP_POLYNOMIAL_SIZE polySize, DL_CRCP_BIT bitOrd,
DL_CRCP_INPUT_ENDIANESS inEndianness, DL_CRCP_OUTPUT_BYTESWAP outByteSwap)
{
crcp->CRCCTRL = ((uint32_t) polySize | (uint32_t) bitOrd |
(uint32_t) inEndianness | (uint32_t) outByteSwap);
}
/*!
* @brief Initializes the seed for a 16-bit polynomial CRC calculation
* @note CRC seed is swapped when CRCP module is configured in big-endian
* mode. For example when calling DL_CRCP_setSeed32(CRC, 0xaabb).
* The CRCP module will be initialized with 0xbbaa. Therefore, the
* seed value should be appropriately specified taking endianness
* into account. Please refer to the device TRM for additional
* detail.
*
* Sets the inital seed for a 16-bit CRC calculation. can be any value,
* or cast one of the common seeds in @ref DL_CRCP_CRCSEED_SEED.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
* @param[in] seed The seed from which to start generating a signature
*/
__STATIC_INLINE void DL_CRCP_setSeed16(CRCP_Regs *crcp, uint16_t seed)
{
volatile uintptr_t addr;
volatile uint16_t *pRef;
addr = (uintptr_t)((volatile uintptr_t *) &crcp->CRCSEED);
pRef = (volatile uint16_t *) addr;
*pRef = seed;
}
/*!
* @brief Initializes the seed for a 32-bit polynomial CRC calculation
* @note CRC seed is swapped when CRCP module is configured in big-endian
* mode. For example when calling DL_CRCP_setSeed32(CRC, 0xaabbccdd).
* The CRCP module will be initialized with 0xddccbbaa. Therefore,
* the seed value should be appropriately specified taking endianness
* into account. Please refer to the device TRM for additional
* detail.
*
* Sets the inital seed for a 32-bit CRC calculation. can be any value,
* or cast one of the common seeds in @ref DL_CRCP_CRCSEED_SEED.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
* @param[in] seed The seed from which to start generating a signature
*/
__STATIC_INLINE void DL_CRCP_setSeed32(CRCP_Regs *crcp, uint32_t seed)
{
crcp->CRCSEED = seed;
}
/*!
* @brief Feeds 8-bit data into the CRC calculation
*
* @param[in] crcp Pointer to the register overlay for the CRCP
* peripheral
* @param[in] dataIn 8-bit data value to add to the signature
*
*/
__STATIC_INLINE void DL_CRCP_feedData8(CRCP_Regs *crcp, uint8_t dataIn)
{
volatile uint8_t *pRef = (volatile uint8_t *) &crcp->CRCIN;
*pRef = dataIn;
}
/*!
* @brief Feeds 16-bit data into the CRC calculation
*
* @param[in] crcp Pointer to the register overlay for the CRCP
* peripheral
* @param[in] dataIn 16-bit data value to add to the signature
*
*/
__STATIC_INLINE void DL_CRCP_feedData16(CRCP_Regs *crcp, uint16_t dataIn)
{
volatile uintptr_t addr;
volatile uint16_t *pRef;
addr = (uintptr_t)((volatile uintptr_t *) &crcp->CRCIN);
pRef = (volatile uint16_t *) addr;
*pRef = dataIn;
}
/*!
* @brief Feeds 32-bit data into the CRC calculation
*
* Feeds a 32-bit value into the CRC calculation. 32-bit data can only be used
* with the 32-bit polynomial.
*
* @param[in] crcp Pointer to the register overlay for the CRCP
* peripheral
* @param[in] dataIn 32 bit data value to add to the signature
*
*/
__STATIC_INLINE void DL_CRCP_feedData32(CRCP_Regs *crcp, uint32_t dataIn)
{
crcp->CRCIN = dataIn;
}
/*!
* @brief Returns the result from the 16-bit polynomial calculation
*
* @note CRC Output will be swapped if the CRCP module is configured
* in byte-swap mode. For example, if enabled and CRCOUT register
* has the value 0xaabbccdd, DL_CRCP_getResult16 would return
* 0xddcc. Please refer to the TRM for more information.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
*
* @return The calculation result for the 16-bit polynomial
*/
__STATIC_INLINE uint16_t DL_CRCP_getResult16(const CRCP_Regs *crcp)
{
return ((uint16_t) crcp->CRCOUT);
}
/*!
* @brief Returns the result from the 32-bit polynomial calculation
*
* @note CRC Output will be swapped if the CRCP module is configured
* in byte-swap mode. For example, if enabled and CRCOUT register
* has value 0xaabbccdd, DL_CRCP_getResult32 would return
* 0xddccbbaa in the 32-bit case, and 0x0000ddcc. In the 16-bit
* case. Additionally, if byte-swap is disabled, the 16-bit size
* would return 0x0000ccdd. Please refer to the TRM for more
* information.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
*
* @return The calculation result for the 32-bit polynomial
*/
__STATIC_INLINE uint32_t DL_CRCP_getResult32(const CRCP_Regs *crcp)
{
return (crcp->CRCOUT);
}
/*!
* @brief Sets the active polynomial terms for the CRC calculation
*
* The polynomial can be any value represented with MSB first. Thus, in a
* 16-bit polynomial (where the 16th power is always present), the nth bit
* corresponds to the inclusion of the nth term of the polynomial. For example,
* The 16-bit polynomial CCIT x^16 + x^12 + x^5 + 1 is represented as 0x1021.
* One can craft a custom polynomial, use an existing polynomial,
* or cast one of the common polynomials in @ref DL_CRCP_CRCPOLY_POLYNOMIAL. If
* the polynomial size is configured as 16-bit, the upper 16-bits are ignored.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
* @param[in] poly Polynomial to implement (normal representation)
*/
__STATIC_INLINE void DL_CRCP_setPolynomial(CRCP_Regs *crcp, uint32_t poly)
{
crcp->CRCPOLY = poly;
}
/*!
* @brief Gets the active polynomial terms for the CRC calculation
*
* The polynomial can be any value represented as with MSB first. Thus, in a
* 16-bit polynomial (where the 16th power is always present), the nth bit
* corresponds to the inclusion of the nth term of the polynomial. For example,
* The 16-bit polynomial CCIT x^16 + x^12 + x^5 + 1 is represented as 0x1021.
* If the polynomial size is configured as 16-bit, the upper 16-bits are ignored.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
*
* @returns Active polynomial (normal representation)
*/
__STATIC_INLINE uint32_t DL_CRCP_getPolynomial(const CRCP_Regs *crcp)
{
return (crcp->CRCPOLY);
}
/*!
* @brief Calculates the CRC over a range of 32-bit values
*
* Uses the 32-bit polynomial to calculate the checksum over a block of
* values.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
* @param[in] seed The seed for the CRC to start generating a signature from
* @param[in] ptr A pointer to the block of code to calculate the CRC over
* @param[in] size The size of the block of uint32_t data
*
* @return The calculated CRC signature value
*/
extern uint32_t DL_CRCP_calculateBlock32(
CRCP_Regs *crcp, uint32_t seed, const uint32_t *ptr, uint32_t size);
/*!
* @brief Calculates the CRC over a memory range
*
* Calculates the checksum using the 32-bit polynomial over any memory range.
*
* @param[in] crcp Pointer to the register overlay for the CRC
* peripheral
* @param[in] seed The seed used to start generating a signature from
* @param[in] ptrStart A uint32_t pointer to the start of a block of code to
* calculate the CRC over
* @param[in] ptrEnd A uint32_t pointer to the end of a block of code to
* calculate the CRC over
*
* @return The calculated CRC signature value
*/
extern uint32_t DL_CRCP_calculateMemoryRange32(CRCP_Regs *crcp, uint32_t seed,
uint32_t *ptrStart, const uint32_t *ptrEnd);
/*!
* @brief Calculates the CRC over a range of 16-bit values
*
* Uses the 16-bit polynomial to calculate the checksum over a block of
* values.
*
* @param[in] crcp Pointer to the register overlay for the CRCP peripheral
* @param[in] seed The seed for the CRCP to start generating a signature from
* @param[in] ptr A pointer to the block of code to calculate the CRC over
* @param[in] size The size of the block of 16-bit data
*
* @return The calculated CRC signature value
*/
extern uint16_t DL_CRCP_calculateBlock16(
CRCP_Regs *crcp, uint16_t seed, const uint16_t *ptr, uint16_t size);
/*!
* @brief Calculates the CRC over a memory range
*
* Calculates the checksum using the 16-bit polynomial over any memory range.
*
* @param[in] crcp Pointer to the register overlay for the CRC
* peripheral
* @param[in] seed The seed used to start generating a signature from
* @param[in] ptrStart A uint16_t pointer to the start of a block of code to
* calculate the CRC over
* @param[in] ptrEnd A uint16_t pointer to the end of a block of code to
* calculate the CRC over
*
* @return The calculated CRC signature value
*/
extern uint16_t DL_CRCP_calculateMemoryRange16(CRCP_Regs *crcp, uint16_t seed,
uint16_t *ptrStart, const uint16_t *ptrEnd);
/**
* @brief Returns the address of the CRC input data register.
*
* This API can be used with @ref DL_DMA_setDestAddr to set the destination
* address when using DMA transfers
*
* @param[in] crcp Pointer to the register overlay for the CRC
* peripheral
* @return Address of the CRC input data register
*/
__STATIC_INLINE uintptr_t DL_CRCP_getCRCINAddr(const CRCP_Regs *crcp)
{
return ((uintptr_t) &crcp->CRCIN);
}
#ifdef __cplusplus
}
#endif
#endif /* __MSPM0_HAS_CRCP__ */
#endif /* ti_dl_DL_CRCP__include */
/** @}*/