近期在做一个数据采集传输模块,采集6000多个数据打包,使用CRC校验。网上查找的相关verilog程序均是对单一数据处理的程序,没有对一个完整数据包的处理。c倒是有之前使用过的程序,但语言转换不熟练,所以暂时卡住了。望大神指教。下面贴出c的程序。
u16 cal_crc16(u8 *ptr, u16 len)
{
u16 crc;
u16 i;
crc=0;
while(len--!=0) {
for(i=0x80; i!=0; i/=2){
if((crc&0x8000)!=0){
crc *= 2;
crc ^= CRC16_CCITT;
}
else{
crc *= 2;
}
if((*ptr&i)!=0){
crc ^= CRC16_CCITT;
}
}
ptr++;
}
return(crc);
} |