一种解码方法及装置的制造方法

文档序号:8545981阅读:223来源:国知局
一种解码方法及装置的制造方法
【技术领域】
[0001]本申请涉及电子信息领域,尤其涉及一种解码方法及装置。
【背景技术】
[0002]相比于使用解码电路进行解码的方式而言,使用处理器解码的方式更为满足低功耗的要求。
[0003]现有的使用处理器进行解码的方式,在检测到电平的变化时,产生中断,进行解码。
[0004]而对于工业总线型的应用场景而言,在此情况下,处理器不可能支持处理频繁的中断解码。例如,曼彻斯特码在总线供电的应用中经常采用,如符合IEC61158-2标准的PROFIBUS-PA和FF-Hl现场智能设备。总线供电对处理器的功耗有较高要求,一般处理器的主频不超过20MHz。曼彻斯特码的频率一般固定为31.25kHz,可见,现有的处理器解码方式并不适用于主频较低的处理器,因此,如何使用主频较低的处理器进行解码成为目前亟待解决的问题。
[0005]申请内容
[0006]本申请提供了一种解码方法及装置,目的在于解决如何使用主频较低的处理器进行解码的问题。
[0007]为了实现上述目的,本申请提供了以下技术方案:
[0008]一种解码方法,包括:
[0009]对接收到的编码进行采样;
[0010]将采样得到的数据序列存储到接收队列;
[0011]在所述接收队列中的数据序列的帧数达到第一数值后,产生解码中断;
[0012]在本次中断周期,对所述接收队列中的数据帧进行解码。
[0013]可选地,所述对所述接收队列中的数据帧进行解码包括:
[0014]判断所述接收队列中的数据帧是否为全O或全1,如果否,则对所述数据帧进行解码,如果所述本次解码中断周期中的先入先出接收队列中的数据帧为全0,则记录总线为空闲低电平状态,如果所述本次解码中断周期中的先入先出接收队列中的数据帧为全1,则记录总线为空闲高电平状态。
[0015]可选地,在所述编码为曼彻斯特码的情况下,所述对所述数据帧进行解码包括:
[0016]将所述接收队列中的数据帧存储到预设字节的存储缓冲区中,其中,所述数据帧在所述存储缓冲区中的存放顺序与其在所述接收队列中的存放顺序相同;
[0017]依据所述存储缓冲区中的字节,依次检测前导码起始位、前导码、帧前界定码、数据码及帧结束码。
[0018]可选地,所述依据所述存储缓冲区中的字节,检测所述前导码起始位包括:
[0019]检测所述存储缓冲区中的数据帧是否存在由高到低的跳变;
[0020]若检测到由高到低的跳变,且所述总线为空闲高电平状态,则确定从所述缓冲存储区中的数据帧中检测到编码的前导码起始位;
[0021]若检测到由高到低的跳变,且所述总线为空闲低电平状态,则判断所述由高到低的跳变之前的高电平被采样的次数是否达到第二数值,如果是,则确定从所述缓冲存储区中的数据帧中检测到前导码起始位。
[0022]可选地,所述存储缓冲区为8个字节;
[0023]所述检测所述存储缓冲区中的数据帧是否存在由高到低的跳变至少包括以下一项:
[0024]取上一中断周期中存放在存储缓冲区中的最后一个字节的后4位作为高4位,取本次中断周期中存放在存储缓冲区中的第一个字节的前4位作为低4位,组成新字节,如果在所述新字节中出现以下任意一个预设数值,则确定存在由高到低的跳变,所述预设数值包括:0x80、0xC0、0xE0、0xF0、0xF8、0xFC、0xFE ;
[0025]判断本次中断周期、所述存储缓冲区中的第一个字节,如果出现所述预设数值中的任意一个,则确定存在由高到低的跳变;
[0026]遍历所述存储缓冲区中的所有字节:取本次中断周期、存储缓冲区中的本次遍历字节的后4位作为高4位,本次遍历字节的后一个相邻字节的前4位作为低4位,组成新字节,如果所述新字节中出现所述预设数值中的任意一个,则确定存在由高到低的跳变;
[0027]判断本次中断周期、存储缓冲区中的第二个字节,如果为所述预设数值中的任意一个,则确定存在由高到低的跳变。
[0028]可选地,所述依据所述存储缓冲区中的字节,检测所述前导码包括:
[0029]设置16位的全局变量A,所述A的最高位为I ;
[0030]确定所述前导码起始位在采样得到的数据序列中的位置a ;
[0031 ] 按照以下方式分别确定A的剩余位数的值:
[0032]A:在本次中断周期以及其之后的中断周期、存储缓冲区中的后续字节中查找由低到尚的跳变;
[0033]B:记录所述低到高的跳变在采样得到的数据序列中的位置b ;
[0034]C:如果不小于a,将b减去a的差值作为低电平的采样次数,如果b小于a,则将b减去a的差值与64之和作为低电平的采样次数;
[0035]D:如果所述低电平的采样次数在第三数值与第四数值之间,则确定所述A的次高位为O ;如果所述低电平的采样次数在第五数值与第六数值之间,则确定所述A的次高位及所述次高位的前一位均为O ;如果所述低电平的采样次数为其它数值,则确定解码出错;
[0036]循环执行A至D,直至得到A中全部位置的数值;
[0037]如果所述A的值为1001100110011001,则确定检测到前导码,否则,则确定解码出错O
[0038]可选地,所述依据所述存储缓冲区中的字节,检测所述帧前界定码包括:
[0039]设置16位的全局变量A,所述A的最高位为I ;
[0040]确定所述前导码起始位在采样得到的数据序列中的位置a ;
[0041 ] 按照以下方式分别确定A的剩余位数的值:
[0042]A:在本次中断周期以及其之后的中断周期、存储缓冲区中的后续字节中查找由低到高的跳变;
[0043]B:记录所述低到高的跳变在采样得到的数据序列中位置b ;
[0044]C:如果不小于a,将b减去a的差值作为低电平的采样次数,如果b小于a,则将b减去a的差值与64之和作为低电平的采样次数;
[0045]D:如果所述低电平的采样次数在第三数值与第四数值之间,则确定所述A的次高位为0,如果所述低电平的采样次数在第五数值与第六数值之间,则确定所述A的次高位及所述次高位的前一位均为O ;如果所述低电平的采样次数为其它数值,则确定解码出错;
[0046]循环执行A至D,直至得到A中全部位置的数值;
[0047]如果所述A的值为1011001001001101,则确定检测到帧前定界码,否则,则确定解码出错。
[0048]可选地,所述依据所述存储缓冲区中的字节,检测所述数据码包括:
[0049]设置16位的全局变量A,所述A的最高位为I ;
[0050]确定所述前导码起始位在采样得到的数据序列中的位置a ;
[0051 ] 按照以下方式分别确定A的剩余位数的值:
[0052]A:在本次中断周期以及其之后的中断周期、存储缓冲区中的后续字节中查找由低到尚的跳变;
[0053]B:记录所述低到高的跳变在采样得到的数据序列中位置b ;
[0054]C:如果不小于a,将b减去a的差值作为低电平的采样次数,如果b小于a,则将b减去a的差值与64之和作为低电平的采样次数;
[0055]D:如果所述低电平的采样次数在第三数值与第四数值之间,则确定所述A的次高位为0,如果所述低电平的采样次数在第五数值与第六数值之间,则确定所述A的次高位及所述次高位的前一位均为O ;如果所述低电平的采样次数为其它数值,则确定解码出错;
[0056]循环执行A至D,直至得到A中全部位置的数值;
[0057]依据预设的规则,将A转换为数据码B,预设的规则可以为将A从高位到低位两两分成一组,每组对应数据码B中的一位,对于任意一组,第一类型组合对应第一码值,第二类型组合对应第二码值。
[0058]可选地,所述依据所述存储缓冲区中的字节,检测所述帧结束码包括:
[0059]设置16位的全局变量A,所述A的最高位为I ;
[0060]确定所述前导码起始位在采样得到的数据序列中的位置a ;
[0061 ] 按照以下方式分别确定A的剩余位数的值:
[0062]A:在本次中断周期以及其之后的中断周期、存储缓冲区中的后续字节中查找由低到尚的跳变;
[0063]B:记录所述低到高的跳变在采样得到的数据序列中位置b ;
[0064]C:如果不小于a,将b减去a的差值作为低电平的采样次数,如果b小于a,则将b减去a的差值与64之和作为低电平的采样次数;
[0065]D:如果所述低电平的采样次数在第三数值与第四数值之间,则确定所述A的次高位为0,如果所述低电平的采样次数在第五数值与第六数值之间,则确定所述A的次高位及所述次高位的前一位均为O ;如果所述低电平的采样次数为其它数值,则确定解码出错;
[0066]循环执行A至D,直至得到A中全部位置的数值;
[0067]如果所述A的值为1011001100100110,则确定检测到帧结束码,否则,则确定解码出错。
[0068]一种解码装置,包括:
[0069]采样模块,用于对接收到的编码进行采样;
[0070]存储模块,用于将采样得到的数据序列存储到接收队列;
[0071]中断模块,用于在所述接收队列中的数据序列的帧数达到第一数值后,产生解码中断;
[0072]解码模块,用于在本次中断周期,对所述接收队列中的数据帧进行解码。
[0073]可选地,所述解码模块用于对所述接收队列中的数据帧进行解码包括:
[0074]所述解码模块具体用于,判断所述接收队列中的数据帧是否为全O或全1,如果否,则对所述数据帧进行解码,如果所述本次解码中断周期中的先入先出接收队列中的数据帧为全0,则记录总线为空闲低电平状态,如果所述本次解码中断周期中的先入先出接收队列中的数据帧为全1,则记录总线为空闲高电平状态。
[0075]可选地,所述解码模块用于对所述数据帧进行解码包括:
[0076]所述解码模块具体用于,在所述编码为曼彻斯特码的情况下,将所述接收队列中的数据帧存储到预设字节的存储缓冲区中,其中,所述数据帧在所述存储缓冲区中的存放顺序与其在所述接收队列中的存放顺序相同;依据所述存储缓冲区中的字节,依次检测前导码起始位、前导码、帧前界定码、数据码及帧结束码。
[0077]可选地,所述解码模块用于依据所述存储缓冲区中的字节,检测所述前导码起始位包括:
[0078]所述解码模块具体用于,检测所述存储缓冲区中的数据帧是否存在由高到低的跳变;若检测到由高到低的跳变,且所述总线为空闲高电平状态,则确定从所述缓冲存储区中的数据帧中检测到编码的前导码起始位;若检测到由高到低的跳变,且所述总线为空闲低电平状态,则判断所述由高到低的跳变之前的高电平被采样的次数是否达到第二数值,如果是,则确定从所述缓冲存储区中的数据帧中检测到前导码起始位。
[0079]可选地,所述解码模块用于检测所述存储缓冲区中的数据帧是否存在由高到低的跳变包括:
[0080]所述解码模块具体用于,采用以下至少一项检测所述存储缓冲区中的数据帧是否存在由高到低的跳变:
[0081]取上一中断周期中存放在存储缓冲区中的最后一个字节的后4位作为高4位,取本次中断周期中存放在存储缓冲区中的第一个字节的前4位作为低4位,组成新字节,如果在所述新字节中出现以下任意一个预设数值,则确定存在由高到低的跳变,所述预设数值包括:0x80、0xC0、0xE0、0xF0、0xF8、0xFC、0xFE,所述存储缓冲区为8个字节;
[0082]判断本次中断周期、所述存储缓冲区中的
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1