您现在的位置:机电论文网>> 机床加工>> 正文内容

40位以内任意长度的crc计算及校验的实现

作者: 来源: 发布时间:2018/2/11 16:12:47  点击数:449
1 引 言
循环冗余校验码,简称crc码,是常用的检测错误码,它在数据通信中得到了非常广泛的应用。不同crc码的生成多项式各不相同,crc码的比特数也不同,且在有的通信协议中要求将余数寄存器先初始化为全0,另外的则须初始化为全1。因此,在程序设计时必须充分利用crc码的共性及所用dsp的指令特点。
2 用tms320c5000实现不同crc计算的设计思想
crc码的计算及校验都用到模2的多项式除法,而多项式除法可以采用带反馈的移位寄存器来实现,因此,用dsp来实现crc计算的关键是通过dsp来模拟一个移位寄存器(也就是模拟手写多项式除法)。考虑到tms320c5000系列dsp的累加器a和b均为40位,因此,可以用一个40位累加器a作为移位寄存器,若crc码不够40位(设为k位),则仅用到a的最高k位,无用位用0填充。在编码中涉及到码的移位和异或操作,这可以通过c5000的safa(算术移位)和xor(异或)两条指令来实现。c5000还提供了特殊指令bitt和xc,前者利用寄存器t,取出一个16位数据中的第(15-t)位,并送入tc(tc是特殊寄存器中的一位);后者是条件执行语句,它先判断所列条件是否满足,再决定是否执行其后的2条单周期指令或1条双周期指令。
步骤如下:
(1)先将crc移位寄存器(即余数寄存器)a的每一位有效位均初始化为全0或全1(与协议有关),而无用位清0;
(2)将crc移位寄存器中的值左移一位,判断移出的第一位与输入序列的最高位异或之后是否为1;
(3)若是1,则将a与生成多项式进行异或再跳到步骤2处理下一位,否则,直接跳到步骤2继续处理下一位。在手写多项式除法的过程中我们可以发现,生成多项式即除式一共为k+1位,而余数寄存器a里仅有k位有效位,这可视为余数寄存器的k+1位永远为0,因此在实际异或运算时,生成多项式的最高位即k+1位不必参与运算。流程图如图1所示。
重复(2)、(3)两步,直到输入信息位全部处理完为止,则a的最高k位为进行多项式除后所得的余数,若余数寄存器先初始化为全0,则此时a的最高k位就是crc校验码,若余数寄存器先初始化为全1,则须将a取反后最高k位才是crc码。
3 程序设计思路及设计实例
为了实现上述设计思想,可在程序中用指针ar2指向输入信息(一个字表示16比特),用ar3指向输入信息字的某一位,用ar4表示够一个字的个数(单位为字),ar5表示不够一个字的比特数,即,若参加计算的信息比特数为161,则ar4=10,ar5=1。

为了依次取出一个字中的bit15、bit14、...bit0等16位信息位,在程序中用到了一个全局变量bitpos,共占16个字,并将这16个地址的内容依次赋值为0,1,2,......15,而在程序中这些值不能被改变。为了实现循环长度为16的循环寻址,bitpos的地址必须为32字的整数倍,在汇编语言中用下面的语句实现:






;若b=1,则将余数寄存器与生成多项式相异或(即模2减)

crc码的校验过程与crc计算相似,只是参与crc计算的位须包括信息位及crc码,若最后余数寄存器的值为全0(当余数寄存器初始化全0时)或某一特定值(当余数寄存器初始化全1时,与crc码的生成多项式有关),则表示接收正确,否则表示发生错误。
4 结束语
通过反复测试,证明了上述40位以内的crc码计算及校验的设计思想正确,能正确实现crc-3、crc-12、crc-16、crc-24、crc-32等任意40位以内的crc计算及校验。所附程序具有应用简单、指令精简、运算速度快等优点。该设计思路也可以很方便地在其它dsp或单片机及pc机中实现。
参考文献
1 孙宗瀛.tms320c5x dsp原理设计与应用.北京:清华大学出版社,2002
2 戴明桢.tms320c54x dsp结构、原理及应用.北京:北京航空航天大学出版社,2001
3 曹志刚,钱亚生.现代通信原理.北京:清华大学出版社,1992

更多
字体:【】-【】-【】【关闭此页

上一篇:一种智能型家用微波炉的实现方法'   下一篇:基于tms320vc5410的实时信'


特别声明:机电之家(http://www.jdzj.com )所共享的机电类资料,机电论文、机电类文章、机电企业类管理制度、机电类软件都来自网上收集,其版权归作者本人所有,如果有任何侵犯您权益的地方,请联系我们,我们将马上进行处理。购买的论文都出自原创,保证作者的原创的版权的转让,任何纠纷由法律解决。