📄 crcdrv.c
字号:
/*
* AK3220 CRC driver
*
* NOTE
* 1. 每1字节中的高位先校验.
*/
#include "CRCDrv.h"
/*
* 硬件计算CRC
*
* INPUT
* crc_type: crc type, valid value is:
* CRC_TYPE_CRC8, CRC_TYPE_CRC12, CRC_TYPE_CRC16,
* CRC_TYPE_CRC24, CRC_TYPE_CRC32;
* pdata: data buff to generate crc;
* data_len: data buff length;
* RETURN
* crc value;
*
* NOTE
* 1. 使用CRC也需要指定MEMORTY类型
*/
UINT32 MakeCRC(T_AK3220_CRC_TYPE crc_type, const UINT8 *pdata, UINT32 data_len)
{
UINT32 CRC;
volatile UINT32 status;
if (crc_type > CRC_TYPE_CRC32)
return 0; // error ?
CRC = 0;
*(volatile UINT32 *) DMACRC_CNT_REG = data_len;
*(volatile UINT32 *) DMACRC_SRC_ADDR_REG = (UINT32) pdata;
*(volatile UINT32 *) DMACRC_MEM_TYPE_REG = 0x00; // 假定待检验数据在SDRAM中
*(volatile UINT32 *) DMACRC_CMD_REG = (1 << (CRC_TYPE_START_BIT + crc_type)) | DMACRC_CMD_START_BIT;
//status = *(volatile UINT32 *) DMACRC_CTRL_REG;
//printf(" control = 0x%x\n", status);
// wait dma finish
do {
status = *(volatile UINT32 *) DMACRC_STATUS_REG;
status &= DMACRC_STATUS_FINISH_BIT;
//printf("status reg = 0x%x\n", status);
} while (status == 0);
CRC = *(volatile UINT32 *) DMACRC_VALUE_REG;
return CRC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -