1 /******************************************************************************************************************************************
2 * 文件名称: SWM320_crc.c
3 * 功能说明: SWM320单片机的CRC模块驱动库
4 * 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1
5 * 注意事项:
6 * 版本日期: V1.1.0      2017年10月25日
7 * 升级记录:
8 *
9 *
10 *******************************************************************************************************************************************
11 * @attention
12 *
13 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
14 * REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
15 * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
16 * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
17 * -ECTION WITH THEIR PRODUCTS.
18 *
19 * COPYRIGHT 2012 Synwit Technology
20 *******************************************************************************************************************************************/
21 #include "SWM320.h"
22 #include "SWM320_crc.h"
23 
24 
25 /******************************************************************************************************************************************
26 * 函数名称: CRC_Init()
27 * 功能说明: CRC 初始化
28 * 输    入: CRC_TypeDef * CRCx    指定要被设置的CRC接口,有效值包括CRC
29 *           uint32_t mode       工作模式,有效值有:CRC32_IN32、CRC32_IN16、CRC32_IN8、CRC16_IN16、CRC16_IN8
30 *           uint32_t out_not    输出结果是否取反
31 *           uint32_t out_rev    输出结果是否翻转
32 *           uint32_t ini_val    CRC初始值
33 * 输    出: 无
34 * 注意事项: 无
35 ******************************************************************************************************************************************/
CRC_Init(CRC_TypeDef * CRCx,uint32_t mode,uint32_t out_not,uint32_t out_rev,uint32_t ini_val)36 void CRC_Init(CRC_TypeDef * CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val)
37 {
38     switch((uint32_t)CRCx)
39     {
40     case ((uint32_t)CRC):
41         SYS->CLKEN |= (0x01 << SYS_CLKEN_CRC_Pos);
42         break;
43     }
44 
45     CRCx->CR = (1 << CRC_CR_EN_Pos) |
46                (mode << CRC_CR_CRC16_Pos) |
47                (out_not << CRC_CR_ONOT_Pos) |
48                (out_rev << CRC_CR_OREV_Pos);
49 
50     CRCx->INIVAL = ini_val;
51 }
52