首页> 中国专利> 一种在嵌入式系统中用软件实现红外遥控解码的方法

一种在嵌入式系统中用软件实现红外遥控解码的方法

摘要

本发明涉及一种在嵌入式系统中用软件实现红外遥控解码的方法。它包括步骤:(1)将红外遥控接收器的OUT引脚连接到嵌入式微处理器的一个具有沿中断能力的GPIO引脚。(2)初始化程序,把GPIO中断方式设为下降沿中断。(3)红外遥控脉冲序列通过GPIO引脚并发生下降沿中断时,触发微处理器内的解码程序运行。(4)利用GPIO中断和预先设定的引导码和连发码的编码规则完成对引导码或连发码的有效性判断;(5)若步骤(4)中引导码有效,则继续利用GPIO中断和预先设定的数据位“0”和数据位“1”的编码规则完成对数据码的解码。本发明的有益效果是:有效的降低系统的成本和复杂度,使得系统更灵活、适应性更强。

著录项

  • 公开/公告号CN101404113A

    专利类型发明专利

  • 公开/公告日2009-04-08

    原文格式PDF

  • 申请/专利号CN200810046471.0

  • 发明设计人 余化鹏;刑保振;

    申请日2008-11-06

  • 分类号G08C23/04(20060101);

  • 代理机构11326 北京市路盛律师事务所;

  • 代理人温利平

  • 地址 610041 四川省成都市高新区天府大道中段765号

  • 入库时间 2023-12-17 21:40:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2011-10-12

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G08C23/04 变更前: 变更后: 申请日:20081106

    专利权人的姓名或者名称、地址的变更

  • 2010-11-17

    授权

    授权

  • 2010-08-04

    著录事项变更 IPC(主分类):G08C23/04 变更前: 变更后: 申请日:20081106

    著录事项变更

  • 2009-06-03

    实质审查的生效

    实质审查的生效

  • 2009-04-08

    公开

    公开

说明书

技术领域

本发明涉及红外遥控解码技术,具体的说,涉及一种在嵌入式系统中基于GPIO(通用输入/输出端口)中断用软件实现红外遥控信号解码的方法。

背景技术

红外遥控已广泛应用于各种消费类电子设备中,其解码技术目前主要有如下两类:1.硬件解码。这种解码技术采用硬件解码模块进行红外遥控的解码,该硬件解码模块或者集成在主芯片中或者是一个独立的硬件模块。该种方式存在的问题是一般的嵌入式微处理器并不具备红外遥控的硬件解码模块,如果要单独购买一个现成的硬件解码模块,一方面会增加产品的成本,同时还会增加系统的复杂度。另外,硬件解码模块一般只能支持特定格式的红外遥控信号的解码,如果需要更换遥控器则可能需要重新选择硬件解码模块,灵活性较差。2.软件解码。这种解码技术是采用一个独立的单片机用软件实现红外遥控的解码。这种方式存在的问题是,如果该单片机仅仅是为了完成红外遥控的解码,显然是比较浪费的,将无谓的增加产品的成本;另一方面,这样做无疑也会增加系统的复杂度。

发明内容

本发明的目的是为了在嵌入式系统中有效降低红外遥控信号解码的成本和系统复杂度,从而提出了一种在嵌入式系统中用软件实现红外遥控解码的方法。

本发明为解决上述技术问题所采用的方法包括步骤:

(1)将红外遥控接收器的OUT(输出端)引脚连接到嵌入式微处理器的一个具有沿中断能力的GPIO(通用输入/输出端口)引脚,以便红外遥控接收器接收到的红外遥控脉冲序列通过GPIO引脚进入嵌入式微处理器;

(2)初始化程序,把GPIO中断方式设为下降沿中断,解码状态机状态置为“引导码低开始”;

(3)当红外遥控接收器接收到的红外遥控脉冲序列通过GPIO引脚并发生下降沿中断时,触发微处理器内的解码程序运行;

(4)利用GPIO中断和预先设定的引导码和连发码的编码规则完成对引导码或连发码的有效性判断;

(5)若步骤(4)中引导码有效,则继续利用GPIO中断和预先设定的数据位“0”和数据位“1”的编码规则完成对数据码的解码。

上述方法中,步骤(1)中红外遥控接收器的OUT引脚和嵌入式微处理器的GPIO引脚之间,进一步包括电平转换芯片,用以实现OUT引脚与GPIO引脚之间的电平转换。

上述方法中,在步骤(4)中对引导码或连发码的有效性判断包括步骤:

(41)当第一个GPIO中断产生时,判断解码状态机状态是否为“引导码低开始”,是则将下一个GPIO中断的设为上升沿中断,解码状态机状态置为“引导码低结束”,等待下一个GPIO中断的发生;

(42)当下一个GPIO中断产生时,判断解码状态机状态是否为“引导码低结束”,是则将把GPIO中断方式设为下降沿中断;进一步判断红外遥控脉冲序列的低电平长度是否合法,低电平长度合法则将解码状态机状态置为“引导码高结束”,否则将解码状态机状态置为“引导码低开始”;最后等待下一个GPIO中断的发生;

(43)当下一个GPIO中断产生时,状态判断解码状态机状态是否为“引导码高结束”,是则进一步判断红外遥控脉冲序列的高电平长度是否合法,高电平合法则引导码有效,同时将解码状态机状态置为“数据码解码”;否则判断连发码是否有效,若连发码有效则将连发码入队,并将解码状态机状态置为“引导码低开始”,若连发码无效则直接将解码状态机状态置为“引导码低开始”;最后等待下一个GPIO中断的发生。

上述方法中,若步骤(4)中引导码有效,紧接着步骤(33)对数据码的解码包括步骤:

(51)当GPIO中断产生时,判断解码状态机状态是否为“数据码解码”,非“数据码解码”状态则等待下一个GPIO中断的发生;是数据码解码”状态则进一步判断红外遥控脉冲序列是否为数据位“0”,若是数据位“0”则记录该位;

(52)若非数据位“0”则判断是否为数据位“1”,若是数据位“1”则记录该位,否则将解码状态机状态置为“引导码低开始”,等待下一个GPIO中断的发生;

(53)记录数据位“0”或数据位“1”后,判断32位数据码解码是否完成,若未完成则直接等待下一个GPIO中断的发生;若完成则将数据码入队,同时将解码状态机状态置为“引导码低开始”,等待下一个GPIO中断的发生。

本发明的有益效果是:同现有技术中的红外遥控信号的硬件解码和软件解码相比较,本发明在嵌入式多任务系统中用软件实现了红外遥控的可靠解码,不需要增加额外的硬件设备,有效的降低系统的成本和复杂度,使得系统更灵活、适应性更强。

附图说明

图1是本发明的硬件连接图。

图2是NEC格式数据位“0”和数据位“1”的编码波形图。

图3是NEC格式32位二进制码组的编码波形图。

图4是NEC格式遥控连发信号波形图。

图5是NEC格式引导码和连发码的波形图。

图6是本发明的软件解码流程图。

图7是数据位“0”和“1”的解码原理图。

具体实施方式

下面结合附图和具体实施例对本发明的原理进行详细说明。

本发明的思路是利用嵌入式微处理器的GPIO接口接收来自红外遥控接收器的脉冲信号,基于GPIO中断用软件实现对红外遥控脉冲序列的解码。

如图1所示为本发明的硬件连接图。将红外遥控接收器的OUT(输出端)引脚连接到嵌入式微处理器的一个具有沿中断能力的GPIO(通用输入/输出端口)引脚,以便红外遥控接收器接收到的红外遥控脉冲序列通过GPIO引脚进入嵌入式微处理器;红外遥控接收器与嵌入式微处理器的GND引脚连接在一起并接地。如果OUT引脚与GPIO引脚之间的电平要求是不匹配的,则红外遥控接收器的OUT引脚和嵌入式微处理器的GPIO引脚之间,进一步包括电平转换芯片,用以实现OUT引脚与GPIO引脚之间的电平转换。另外,红外遥控接收器由电源VCC1提供电能支持,嵌入式微处理器由电源VCC2提供电能支持。

如图2、图3、图4和图5所示为一个典型的红外遥控信号编码格式(NEC格式)的波形图,本发明将以该格式的编码格式的波形图为例对本发明的具体实施方式进行说明,为了便于本领域的技术人员理解本发明,现在结合附图对NEC格式进行详细的说明。

由于NEC格式运用比较广泛,解码比较容易,因而一般家庭用的DVD、VCD、音响都使用这种编码方式,由于红外遥控信号的所有波形的接收端与发射端相反,因而以接收端的波形为例进行说明,如图2所示,NEC格式的脉冲信号采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的数据位“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的数据位“1”。上述数据位“0”和数据位“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的,然后再通过红外发射二极管产生红外线向空间发射红外遥控脉冲序列。如图3所示,红外遥控脉冲序列的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,也称系统码,能区别不同的电器设备,防止不同机种遥控码互相干扰。后16位为8位数据码(功能码)及其反码,以确保数据码不会被错误的解码。遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。如图4所示为遥控连发信号波形图,一组码本身的持续时间随它包含的二进制数据位“0”和数据位“1”的个数不同而不同,大约在45~63ms之间。如图5所示,当一个键按下超过36ms,将发射一组108ms的编码脉冲,这108ms发射代码由一个低电平(9ms)和一个高电平(4.5ms)组成的引导码,其后是低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成的数据码。如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由高电平(9ms)和低电平(2.25ms)组成的连发码。

以下通过NEC格式的红外遥控编码的解码过程来说明本发明的软件解码流程图,如图6所示,本发明主要包括的步骤包括:

(1)将红外遥控接收器的OUT(输出端)引脚连接到嵌入式微处理器的一个具有沿中断能力的GPIO(通用输入/输出端口)引脚,以便红外遥控接收器接收到的红外遥控脉冲序列通过GPIO引脚进入嵌入式微处理器。

(2)初始化程序,把GPIO中断方式设为下降沿中断,解码状态机状态置为“引导码低开始”,并完成GPIO中断优先级设置,GPIO中断挂载等初始化工作。

(3)当红外遥控接收器接收到的红外遥控脉冲序列通过GPIO引脚并发生下降沿中断时,触发微处理器内的解码程序运行,该程序将首先清除GPIO中断状态寄存器。

(4)利用GPIO中断和预先设定的引导码和连发码的编码规则完成对引导码或连发码的有效性判断。

从“引导码低开始”状态经过“引导码低结束”状态到达“引导码高结束”状态时,即可判定是引导码还是连发码。如果判定是引导码,接下来就会进入“数据码解码”状态,在该状态下将完成32位数据码的解码工作。

对引导码或连发码有效性判断包括步骤:

(41)当第一个GPIO中断产生时,判断解码状态机状态是否为“引导码低开始”,是则将下一个GPIO中断的设为上升沿中断,解码状态机状态置为“引导码低结束”,等待下一个GPIO中断的发生;

(42)当下一个GPIO中断产生时,判断解码状态机状态是否为“引导码低结束”,是则将把GPIO中断方式设为下降沿中断;进一步判断红外遥控脉冲序列的低电平长度是否合法,低电平长度合法则将解码状态机状态置为“引导码高结束”,否则将解码状态机状态置为“引导码低开始”;最后等待下一个GPIO中断的发生;

(43)当下一个GPIO中断产生时,状态判断解码状态机状态是否为“引导码高结束”,是则进一步判断红外遥控脉冲序列的高电平长度是否合法,高电平合法则引导码有效,同时将解码状态机状态置为“数据码解码”;否则判断连发码是否有效,若连发码有效则将连发码入队,并将解码状态机状态置为“引导码低开始”,若连发码无效则直接将解码状态机状态置为“引导码低开始”;最后等待下一个GPIO中断的发生。

(5)若步骤(4)中引导码有效,则继续利用GPIO中断和预先设定的数据位“0”和数据位“1”的编码规则完成对数据码的解码。

对数据码的解码包括步骤:

(51)当GPIO中断产生时,判断解码状态机状态是否为“数据码解码”,非“数据码解码”状态则等待下一个GPIO中断的发生;是数据码解码”状态则进一步判断红外遥控脉冲序列是否为数据位“0”,若是数据位“0”则记录该位;

(52)若非数据位“0”则判断是否为数据位“1”,若是数据位“1”则记录该位,否则将解码状态机状态置为“引导码低开始”,等待下一个GPIO中断的发生;

(53)记录数据位“0”或数据位“1”后,判断32位数据码解码是否完成,若未完成则直接等待下一个GPIO中断的发生;若完成则将数据码入队,同时将解码状态机状态置为“引导码低开始”,等待下一个GPIO中断的发生。

在步骤(51)和(52)中对数据位“0”或数据位“1”的解码又具体包含如下步骤,现结合图7对以下步骤进行描述。

a.初始时把GPIO中断方式设为下降沿中断,将解码状态机设为“状态1”;

b.当GPIO中断1到来时,设置解码状态机的下一个状态为“状态2”;

c.当GPIO中断2到来时,首先判断GPIO中断1与GPIO中断2的时间间隔(interval)是否满足如下条件:(1.12ms-delta)<interval<(1.12ms+delta)(其中delta>0,表示允许的误差值,该值可根据具体的系统进行调整),若满足则将该段脉冲序列解码为数据位“0”;否则判断interval是否满足如下条件:(2.25ms-delta)<interval<(2.25ms+delta),若满足则则将该段脉冲序列解码为数据位“1”;否则将解码状态机设为初始时的“状态1”,意味着该脉冲序列无效,需要丢弃。

上述时间间隔(interval)的获取可以使用嵌入式微处理器中的时钟周期计数寄存器来实现,实现方法是:分别记录GPIO中断1与GPIO中断2到来时的计数寄存器的值,两个值的差值与时钟频率的倒数的乘积就得到时间间隔(interval)的值。

在上述方法中,时间间隔(interval)的获取也可以使用嵌入式微处理器中的硬件定时器来实现,实现方法是:将硬件定时器设置为不超时的连续模式,分别记录GPIO中断1与GPIO中断2到来时的硬件定时器的值,两个值的差值与时钟频率的倒数的乘积就得到时间间隔(interval)的值。

在上述方法中,delta参数需要根据具体的系统进行调整。这是因为对于嵌入式多任务系统来讲,中断延迟是难免的,而且该值对于不同的嵌入式多任务系统来说也是不同的;另外,对于同一个嵌入式多任务系统来说,该值也不是一个固定值,而是在一个范围内波动的。这就要求我们需要根据具体的系统对delta参数进行调整,以准确反映该系统的中断延迟特性,确保解码的正确性。

在上述方法中,有两种情况可能导致键码的丢失。一种是当嵌入式多任务系统负载较重时,中断延迟可能会超出正常的波动范围,从而直接导致解码错误,也就是将正确的键码丢失。对于支持优先极中断的嵌入式系统来讲,为了降低丢失率,可以采取的措施是将GPIO中断的优先级设到最高。对于我们实测的Linux 2.6系统来讲,通过将GPIO中断的优先级设到最高,丢失率处于一个很低的水平,完全能够达到产品级的可靠性要求。对于其他比Linux 2.6体量更小的系统来讲,通过正确的设置,也应该完全能够达到产品级的可靠性要求。另一种可能导致键码的丢失的情况是由于遥控器操作原因导致红外遥控接收器未收到相应的脉冲信号,从而导致对应的键码丢失。如果丢失的是连发码,问题尚不严重;但如果丢失的是数据码,则我们必须丢弃该数据码后续的连发码,以避免应用程序对连发码的错误解释。图6中,在步骤(43)中判定“该连发码有效?”就是为了完成这一工作的。

另外还有一个在图6中不便描述的问题是对遥控键释放的处理。当操作者释放一个遥控键时,软件解码程序需要给出一个特殊键码以供应用程序用作“键释放”事件。采用一个软件定时器与解码状态机配合起来,就可以完成对遥控键释放的处理。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为发明的保护范围并不局限于这样的特别陈述和实施例。凡是根据上述描述做出各种可能的等同替换或改变,均被认为属于本发明的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号