]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC/Nuvoton_Code/StdDriver/src/crc.c
Add Cortex M23 GCC and IAR ports. Add demo projects for Nuvoton NuMaker-PFM-2351.
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M23_Nuvoton_NuMaker_PFM_M2351_IAR_GCC / Nuvoton_Code / StdDriver / src / crc.c
1 /**************************************************************************//**\r
2  * @file     crc.c\r
3  * @version  V3.00\r
4  * @brief    Cyclic Redundancy Check(CRC) driver source file\r
5  *\r
6  * @copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.\r
7 *****************************************************************************/\r
8 #include "NuMicro.h"\r
9 \r
10 \r
11 /** @addtogroup Standard_Driver Standard Driver\r
12   @{\r
13 */\r
14 \r
15 /** @addtogroup CRC_Driver CRC Driver\r
16   @{\r
17 */\r
18 \r
19 /** @addtogroup CRC_EXPORTED_FUNCTIONS CRC Exported Functions\r
20   @{\r
21 */\r
22 \r
23 /**\r
24   * @brief      CRC Open\r
25   *\r
26   * @param[in]  u32Mode         CRC operation polynomial mode. Valid values are:\r
27   *                             - \ref CRC_CCITT\r
28   *                             - \ref CRC_8\r
29   *                             - \ref CRC_16\r
30   *                             - \ref CRC_32\r
31   * @param[in]  u32Attribute    CRC operation data attribute. Valid values are combined with:\r
32   *                             - \ref CRC_CHECKSUM_COM\r
33   *                             - \ref CRC_CHECKSUM_RVS\r
34   *                             - \ref CRC_WDATA_COM\r
35   *                             - \ref CRC_WDATA_RVS\r
36   * @param[in]  u32Seed         Seed value.\r
37   * @param[in]  u32DataLen      CPU Write Data Length. Valid values are:\r
38   *                             - \ref CRC_CPU_WDATA_8\r
39   *                             - \ref CRC_CPU_WDATA_16\r
40   *                             - \ref CRC_CPU_WDATA_32\r
41   *\r
42   * @return     None\r
43   *\r
44   * @details    This function will enable the CRC controller by specify CRC operation mode, attribute, initial seed and write data length. \n\r
45   *             After that, user can start to perform CRC calculate by calling CRC_WRITE_DATA macro or CRC_DAT register directly.\r
46   */\r
47 void CRC_Open(uint32_t u32Mode, uint32_t u32Attribute, uint32_t u32Seed, uint32_t u32DataLen)\r
48 {\r
49     CRC_T *pCRC;\r
50 \r
51     if((__PC()&NS_OFFSET) == NS_OFFSET)\r
52     {\r
53         pCRC = CRC_NS;\r
54     }\r
55     else\r
56     {\r
57         pCRC = CRC;\r
58     }\r
59 \r
60     pCRC->SEED = u32Seed;\r
61     pCRC->CTL = u32Mode | u32Attribute | u32DataLen | CRC_CTL_CRCEN_Msk;\r
62 \r
63     /* Setting CHKSINIT bit will reload the initial seed value(CRC_SEED register) to CRC controller */\r
64     pCRC->CTL |= CRC_CTL_CHKSINIT_Msk;\r
65 }\r
66 \r
67 /**\r
68   * @brief      Get CRC Checksum\r
69   *\r
70   * @param[in]  None\r
71   *\r
72   * @return     Checksum Result\r
73   *\r
74   * @details    This macro gets the CRC checksum result by current CRC polynomial mode.\r
75   */\r
76 uint32_t CRC_GetChecksum(void)\r
77 {\r
78     CRC_T *pCRC;\r
79     uint32_t u32Checksum = 0UL;\r
80 \r
81     if((__PC()&NS_OFFSET) == NS_OFFSET)\r
82     {\r
83         pCRC = CRC_NS;\r
84     }\r
85     else\r
86     {\r
87         pCRC = CRC;\r
88     }\r
89 \r
90     switch(pCRC->CTL & CRC_CTL_CRCMODE_Msk)\r
91     {\r
92         case CRC_CCITT:\r
93         case CRC_16:\r
94             u32Checksum = (pCRC->CHECKSUM & 0xFFFFUL);\r
95             break;\r
96 \r
97         case CRC_32:\r
98             u32Checksum = pCRC->CHECKSUM;\r
99             break;\r
100 \r
101         case CRC_8:\r
102             u32Checksum = (pCRC->CHECKSUM & 0xFFUL);\r
103             break;\r
104 \r
105         default:\r
106             break;\r
107     }\r
108 \r
109     return u32Checksum;\r
110 }\r
111 \r
112 /*@}*/ /* end of group CRC_EXPORTED_FUNCTIONS */\r
113 \r
114 /*@}*/ /* end of group CRC_Driver */\r
115 \r
116 /*@}*/ /* end of group Standard_Driver */\r
117 \r
118 /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/\r