?? 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 + -