⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crcdrv.c

📁 启动代码
💻 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 + -