近期在做一个数据采集传输模块,采集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);
}
我自己的想法还是基于网上verilog程序的思路。由于使用的是CRC_CCITT,将接收到的数据存入一个寄存器,按字节逆序,计算完毕之后再逆序。不知道这样对不对。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>