40位以内任意长度的CRC计算及校验的实现.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
CRC 计算及校验的实现 循环冗余校验码(CRC,Cyclic Redundancy Check)是一种常用的检测错误码,广泛应用于数据通信中。不同的 CRC 码的生成多项式各不相同,CRC 码的比特数也不同。在程序设计时,必须充分利用 CRC 码的共性及所用 DSP 的指令特点。 在 TM S320C5000 系列 DSP 中,实现 40 位以内任意长度的 CRC 计算及校验需要充分利用 CRC 码的共性及 TM S320C5000 的特点。该方法可以实现任意信息长度的 40 位以内任意 CRC 码的计算及校验,如常见的 CRC23、CRC212、CRC216、CRC224、CRC232 等。 CRC 码的计算及校验都用到模 2 的多项式除法,而多项式除法可以采用带反馈的移位寄存器来实现。因此,用 DSP 来实现 CRC 计算的关键是通过 DSP 来模拟一个移位寄存器(也就是模拟手写多项式除法)。考虑到 TM S320C5000 系列 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 校验码的倒数。 该方法充分利用了不同 CRC 码的共性及 TM S320C5000 的特点,具有代码简洁、运算速度快等特点。同时,该设计思路也可以方便地在其他 DSP 或单片机中实现。
- 粉丝: 6348
- 资源: 1万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助