/**
|
******************************************************************************
|
* @file fm33a0xxev_crc.h
|
* @author FM33A0XXEV Application Team
|
* @version V1.0.0
|
* @date 16-April-2020
|
* @brief This file contains all the functions prototypes for the CRC firmware library.
|
******************************************************************************
|
*/
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
#ifndef __FM33A0XXEV_CRC_H
|
#define __FM33A0XXEV_CRC_H
|
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "FM33A0XXEV.h"
|
|
typedef struct
|
{
|
uint32_t CRCSEL; /*!<CRCУÑé¶àÏîʽλ¿íÑ¡Ôñ*/
|
uint32_t OPWD; /*!<WORD²Ù×÷ʹÄÜ*/
|
uint32_t PARA; /*!<CRC¿ìËÙ¼ÆËãʹÄÜ*/
|
uint32_t RFLTIN; /*!<CRCÊäÈ뷴ת¿ØÖÆ*/
|
uint32_t RFLTO; /*!<CRCÊä³ö·´×ª¿ØÖÆ*/
|
FunState XOR; /*!<Êä³öÒì»òʹÄÜ*/
|
uint32_t CRC_XOR; /*!<ÔËËã½á¹ûÒì»ò¼Ä´æÆ÷*/
|
uint32_t CRCPOLY; /*!<CRC¶àÏîʽ¼Ä´æÆ÷*/
|
uint32_t LFSR; /*!<CRC³õʼֵ*/
|
}CRC_InitTypeDef;
|
|
#define CRC_DR_DR_Pos 0 /* CRCDRÓÃÓÚ×÷ΪÊý¾ÝÊäÈë¼Ä´æÆ÷£¬²¢ÇÒÔÚÔËËã½áÊøºó±£´æCRC¼ÆËã½á¹û¡£(CRC Data Register)
|
×÷ΪÊäÈëʱ£ºÈôword²Ù×÷ʹÄÜ£¬Ôò¶ÔCRCDR[31:0]½øÐмÆË㣬¹²4´ÎbyteÔËË㣨Óɵ͵½¸ß£©£»·ñÔò¶ÔCRCDR[7:0]½øÐмÆË㣬¹²1´ÎbyteÔËËã¡£
|
±£´æ½á¹ûʱ£ºÈôΪ7λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[6:0]£¬ÈôΪ8λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[7:0]£¬ÈôΪ16λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[15:0]£¬ÈôΪ32λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[31:0]¡£ */
|
#define CRC_DR_DR_Msk (0xffffffffU << CRC_DR_DR_Pos)
|
|
#define CRC_CR_OPWD_Pos 9 /* WORD²Ù×÷ʹÄÜ (Operation by Word)
|
0£º×Ö½Ú²Ù×÷£¬CRC¼ÆËã½öÕë¶ÔCRCDR×îµÍ×Ö½Ú½øÐÐ
|
1£º×Ö²Ù×÷£¬CRC¼ÆËãÕë¶ÔCRCDRÈ«²¿4×Ö½Ú½øÐÐ */
|
#define CRC_CR_OPWD_Msk (0x1U << CRC_CR_OPWD_Pos)
|
#define CRC_CR_OPWD_BYTE (0x0U << CRC_CR_OPWD_Pos) /* ×Ö½Ú²Ù×÷£¬CRC¼ÆËã½öÕë¶ÔCRCDR×îµÍ×Ö½Ú½øÐÐ */
|
#define CRC_CR_OPWD_WORD (0x1U << CRC_CR_OPWD_Pos) /* ×Ö²Ù×÷£¬CRC¼ÆËãÕë¶ÔCRCDRÈ«²¿4×Ö½Ú½øÐÐ */
|
|
#define CRC_CR_PARA_Pos 8 /* CRC¿ìËÙ¼ÆËãʹÄÜ (Parallel Calculation)
|
0£º´®ÐÐÔËË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª8¸öʱÖÓÖÜÆÚ
|
1£º²¢ÐмÆË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª1¸öʱÖÓÖÜÆÚ */
|
#define CRC_CR_PARA_Msk (0x1U << CRC_CR_PARA_Pos)
|
#define CRC_CR_PARA_SERIAL (0x0U << CRC_CR_PARA_Pos) /* ´®ÐÐÔËË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª8¸öʱÖÓÖÜÆÚ */
|
#define CRC_CR_PARA_PARALLEL (0x1U << CRC_CR_PARA_Pos) /* ²¢ÐмÆË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª1¸öʱÖÓÖÜÆÚ */
|
|
#define CRC_CR_RFLTIN_Pos 6 /* CRCÊäÈ뷴ת¿ØÖÆ (Reflected Input)
|
00£ºÊäÈë²»·´×ª
|
01£ºÊäÈë°´×Ö½Ú·´×ª
|
10£ºÊäÈë°´°ë×Ö·´×ª
|
11£ºÊäÈë°´×Ö·´×ª
|
ÀýÈ磺¼ÆËãÊý¾ÝΪ0x11223344£¬
|
Èç¹ûRFLTIN==01£¬Ôò½«Êý¾Ý±äΪ0x8844CC22£¬ÔÙ½øÐмÆËãÈç¹ûRFLTIN==10£¬Ôò½«Êý¾Ý±äΪ0x448822CC£¬ÔÙ½øÐмÆËã
|
Èç¹ûRFLTIN==11£¬Ôò½«Êý¾Ý±äΪ0x22CC4488£¬ÔÙ½øÐмÆËã */
|
#define CRC_CR_RFLTIN_Msk (0x3U << CRC_CR_RFLTIN_Pos)
|
#define CRC_CR_RFLTIN_NONE (0x0U << CRC_CR_RFLTIN_Pos) /* ÊäÈë²»·´×ª */
|
#define CRC_CR_RFLTIN_BYTE (0x1U << CRC_CR_RFLTIN_Pos) /* ÊäÈë°´×Ö½Ú·´×ª */
|
#define CRC_CR_RFLTIN_HALFWORD (0x2U << CRC_CR_RFLTIN_Pos) /* ÊäÈë°´°ë×Ö·´×ª */
|
#define CRC_CR_RFLTIN_WORD (0x3U << CRC_CR_RFLTIN_Pos) /* ÊäÈë°´×Ö·´×ª */
|
|
#define CRC_CR_RFLTO_Pos 5 /* CRCÊä³ö·´×ª¿ØÖÆ (Reflected Output)
|
0£ºÊäÈë²»·´×ª
|
1£ºÊäÈë°´×Ö½Ú·´×ª
|
ÀýÈ磺
|
Èç¹ûRFLTO==1£¬Èôµ±Ç°¼ÆËãµÄCRC½á¹ûΪ0x1234£¬ÔòÊä³öµÄ½á¹ûΪ0x2C48Èç¹û RFLTO==0£¬ÔòÖ±½ÓÊä³ö0x1234×¢Ò⣺´Ë½á¹û²»Ò»¶¨Îª×îÖÕÊä³ö½á¹û£¬»¹ÐèÒª¿´XORÊÇ·ñΪ1£¬Ïê¼û±¾¼Ä´æÆ÷bit2˵Ã÷ */
|
#define CRC_CR_RFLTO_Msk (0x1U << CRC_CR_RFLTO_Pos)
|
#define CRC_CR_RFLTO_NON (0x0U << CRC_CR_RFLTO_Pos) /* ÊäÈë²»·´×ª */
|
#define CRC_CR_RFLTO_BYTE (0x1U << CRC_CR_RFLTO_Pos) /* ÊäÈë°´×Ö½Ú·´×ª */
|
|
#define CRC_CR_RES_Pos 4 /* CRC½á¹û±ê־λ£¬Ö»¶Á (Result Flag)
|
0£ºCRC½á¹ûΪ0
|
1£ºCRC½á¹û·ÇÈ«0 */
|
#define CRC_CR_RES_Msk (0x1U << CRC_CR_RES_Pos)
|
|
#define CRC_CR_BUSY_Pos 3 /* CRCÔËËã±ê־λ£¬Ö»¶Á (Busy)
|
0£ºCRCÔËËã½áÊø
|
1£ºCRCÔËËã½øÐÐÖÐ */
|
#define CRC_CR_BUSY_Msk (0x1U << CRC_CR_BUSY_Pos)
|
|
#define CRC_CR_XOR_Pos 2 /* Êä³öÒì»òʹÄÜ (Output XORed with CRC_XOR register enable)
|
0£ºÊä³ö²»Òì»òCRC_XOR¼Ä´æÆ÷
|
1£ºÊä³öÒì»òCRC_XOR¼Ä´æÆ÷ */
|
#define CRC_CR_XOR_Msk (0x1U << CRC_CR_XOR_Pos)
|
/* Êä³ö²»Òì»òCRC_XOR¼Ä´æÆ÷ */
|
/* Êä³öÒì»òCRC_XOR¼Ä´æÆ÷ */
|
|
#define CRC_CR_SEL_Pos 0 /* CRC¶àÏîʽλ¿íÑ¡Ôñ (Polynomial width Selection)
|
00£º32λ
|
01£º16λ
|
10£º8λ
|
11£º7λ */
|
#define CRC_CR_SEL_Msk (0x3U << CRC_CR_SEL_Pos)
|
#define CRC_CR_SEL_CRC32 (0x0U << CRC_CR_SEL_Pos) /* 32λ */
|
#define CRC_CR_SEL_CRC16 (0x1U << CRC_CR_SEL_Pos) /* 16λ */
|
#define CRC_CR_SEL_CRC8 (0x2U << CRC_CR_SEL_Pos) /* 8λ */
|
#define CRC_CR_SEL_CRC7 (0x3U << CRC_CR_SEL_Pos) /* 7λ */
|
|
#define CRC_LFSR_LFSR_Pos 0 /* CRCÏßÐÔ·´À¡ÒÆÎ»¼Ä´æÆ÷ (Linear Feedback Shift Register)
|
ÔËË㿪ʼǰ¿ÉÒÔÓÉÈí¼þдÈëCRC³õʼֵ */
|
#define CRC_LFSR_LFSR_Msk (0xffffffffU << CRC_LFSR_LFSR_Pos)
|
|
#define CRC_XOR_XOR_Pos 0 /* CRCÔËËã½á¹ûÒì»ò¼Ä´æÆ÷ (eXclusive OR)
|
µ±CRC_CR.XORΪ1ʱ£¬CRC½á¹ûÊä³öǰ½«Òì»ò´Ë¼Ä´æÆ÷µÄÊý¾Ý¡£ */
|
#define CRC_XOR_XOR_Msk (0xffffffffU << CRC_XOR_XOR_Pos)
|
|
#define CRC_POLY_POLY_Pos 0 /* CRCÔËËã¶àÏîʽϵÊý (CRC Polynominals) */
|
#define CRC_POLY_POLY_Msk (0xffffffffU << CRC_POLY_POLY_Pos)
|
//Macro_End
|
|
/* Exported functions --------------------------------------------------------*/
|
extern void CRC_Deinit(void);
|
|
/* CRCDRÓÃÓÚ×÷ΪÊý¾ÝÊäÈë¼Ä´æÆ÷£¬²¢ÇÒÔÚÔËËã½áÊøºó±£´æCRC¼ÆËã½á¹û¡£(CRC Data Register)
|
×÷ΪÊäÈëʱ£ºÈôword²Ù×÷ʹÄÜ£¬Ôò¶ÔCRCDR[31:0]½øÐмÆË㣬¹²4´ÎbyteÔËË㣨Óɵ͵½¸ß£©£»·ñÔò¶ÔCRCDR[7:0]½øÐмÆË㣬¹²1´ÎbyteÔËËã¡£
|
±£´æ½á¹ûʱ£ºÈôΪ7λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[6:0]£¬ÈôΪ8λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[7:0]£¬ÈôΪ16λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[15:0]£¬ÈôΪ32λ¶àÏîʽ½á¹û±£´æÔÚCRCDR[31:0]¡£ Ïà¹Øº¯Êý */
|
extern void CRC_DR_Write(uint32_t SetValue);
|
extern uint32_t CRC_DR_Read(void);
|
|
/* WORD²Ù×÷ʹÄÜ (Operation by Word)
|
0£º×Ö½Ú²Ù×÷£¬CRC¼ÆËã½öÕë¶ÔCRCDR×îµÍ×Ö½Ú½øÐÐ
|
1£º×Ö²Ù×÷£¬CRC¼ÆËãÕë¶ÔCRCDRÈ«²¿4×Ö½Ú½øÐÐ Ïà¹Øº¯Êý */
|
extern void CRC_CR_OPWD_Set(uint32_t SetValue);
|
extern uint32_t CRC_CR_OPWD_Get(void);
|
|
/* CRC¿ìËÙ¼ÆËãʹÄÜ (Parallel Calculation)
|
0£º´®ÐÐÔËË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª8¸öʱÖÓÖÜÆÚ
|
1£º²¢ÐмÆË㣬¼ÆËã1¸ö×Ö½ÚÐèÒª1¸öʱÖÓÖÜÆÚ Ïà¹Øº¯Êý */
|
extern void CRC_CR_PARA_Set(uint32_t SetValue);
|
extern uint32_t CRC_CR_PARA_Get(void);
|
|
/* CRCÊäÈ뷴ת¿ØÖÆ (Reflected Input)
|
00£ºÊäÈë²»·´×ª
|
01£ºÊäÈë°´×Ö½Ú·´×ª
|
10£ºÊäÈë°´°ë×Ö·´×ª
|
11£ºÊäÈë°´×Ö·´×ª
|
ÀýÈ磺¼ÆËãÊý¾ÝΪ0x11223344£¬
|
Èç¹ûRFLTIN==01£¬Ôò½«Êý¾Ý±äΪ0x8844CC22£¬ÔÙ½øÐмÆËãÈç¹ûRFLTIN==10£¬Ôò½«Êý¾Ý±äΪ0x448822CC£¬ÔÙ½øÐмÆËã
|
Èç¹ûRFLTIN==11£¬Ôò½«Êý¾Ý±äΪ0x22CC4488£¬ÔÙ½øÐмÆËã Ïà¹Øº¯Êý */
|
extern void CRC_CR_RFLTIN_Set(uint32_t SetValue);
|
extern uint32_t CRC_CR_RFLTIN_Get(void);
|
|
/* CRCÊä³ö·´×ª¿ØÖÆ (Reflected Output)
|
0£ºÊäÈë²»·´×ª
|
1£ºÊäÈë°´×Ö½Ú·´×ª
|
ÀýÈ磺
|
Èç¹ûRFLTO==1£¬Èôµ±Ç°¼ÆËãµÄCRC½á¹ûΪ0x1234£¬ÔòÊä³öµÄ½á¹ûΪ0x2C48Èç¹û RFLTO==0£¬ÔòÖ±½ÓÊä³ö0x1234×¢Ò⣺´Ë½á¹û²»Ò»¶¨Îª×îÖÕÊä³ö½á¹û£¬»¹ÐèÒª¿´XORÊÇ·ñΪ1£¬Ïê¼û±¾¼Ä´æÆ÷bit2˵Ã÷ Ïà¹Øº¯Êý */
|
extern void CRC_CR_RFLTO_Set(uint32_t SetValue);
|
extern uint32_t CRC_CR_RFLTO_Get(void);
|
|
/* CRC½á¹û±ê־λ£¬Ö»¶Á (Result Flag)
|
0£ºCRC½á¹ûΪ0
|
1£ºCRC½á¹û·ÇÈ«0 Ïà¹Øº¯Êý */
|
extern FlagStatus CRC_CR_RES_Chk(void);
|
|
/* CRCÔËËã±ê־λ£¬Ö»¶Á (Busy)
|
0£ºCRCÔËËã½áÊø
|
1£ºCRCÔËËã½øÐÐÖÐ Ïà¹Øº¯Êý */
|
extern FlagStatus CRC_CR_BUSY_Chk(void);
|
|
/* Êä³öÒì»òʹÄÜ (Output XORed with CRC_XOR register enable)
|
0£ºÊä³ö²»Òì»òCRC_XOR¼Ä´æÆ÷
|
1£ºÊä³öÒì»òCRC_XOR¼Ä´æÆ÷ Ïà¹Øº¯Êý */
|
extern void CRC_CR_XOR_Setable(FunState NewState);
|
extern FunState CRC_CR_XOR_Getable(void);
|
|
/* CRC¶àÏîʽλ¿íÑ¡Ôñ (Polynomial width Selection)
|
00£º32λ
|
01£º16λ
|
10£º8λ
|
11£º7λ Ïà¹Øº¯Êý */
|
extern void CRC_CR_SEL_Set(uint32_t SetValue);
|
extern uint32_t CRC_CR_SEL_Get(void);
|
|
/* CRCÏßÐÔ·´À¡ÒÆÎ»¼Ä´æÆ÷ (Linear Feedback Shift Register)
|
ÔËË㿪ʼǰ¿ÉÒÔÓÉÈí¼þдÈëCRC³õʼֵ Ïà¹Øº¯Êý */
|
extern void CRC_LFSR_Write(uint32_t SetValue);
|
extern uint32_t CRC_LFSR_Read(void);
|
|
/* CRCÔËËã½á¹ûÒì»ò¼Ä´æÆ÷ (eXclusive OR)
|
µ±CRC_CR.XORΪ1ʱ£¬CRC½á¹ûÊä³öǰ½«Òì»ò´Ë¼Ä´æÆ÷µÄÊý¾Ý¡£ Ïà¹Øº¯Êý */
|
extern void CRC_XOR_Write(uint32_t SetValue);
|
extern uint32_t CRC_XOR_Read(void);
|
|
/* CRCÔËËã¶àÏîʽϵÊý (CRC Polynominals) Ïà¹Øº¯Êý */
|
extern void CRC_POLY_Write(uint32_t SetValue);
|
extern uint32_t CRC_POLY_Read(void);
|
//Announce_End
|
extern void CRC_Init(CRC_InitTypeDef* para);
|
#ifdef __cplusplus
|
}
|
#endif
|
|
#endif /* __FM33A0XXEV_CRC_H */
|