一种嵌入式系统的红外通讯解码方法与流程

文档序号:16541318发布日期:2019-01-08 20:25阅读:389来源:国知局
一种嵌入式系统的红外通讯解码方法与流程

本发明涉及一种无线通讯领域,特别是一种嵌入式系统的红外通讯解码方法。



背景技术:

红外遥控已经在家用电器等领域得到广泛应用,它是利用波长为0.76μm~1.5μm的红外光作为控制光源,传送遥控指令。由于红外光通信方向性很强,非常适合近距离的无线传输。红外遥控主要由红外发射和红外接收两个部分组成。常用的红外遥控信号制式有:脉冲位置编码(ppm码)、脉冲宽度编码(pwm码)和manchester编码等,差别主要在于引导码表示方式高低电平的宽度不同、表示逻辑0/1的高低电平宽度不同、编码的位数不同。ppm码的一帧信息包括引导码、系统码、用户码、数据码、数据码反码组成,编码共32位;pwm码的一帧信息包括引导码、命令码、地址码组成,编码共12位;manchester编码的一帧信息包括起始位s、场位f、控制位c、5位系统码、6位命令码组成,编码共14位。以nec协议为例说明,这是一个ppm码,引导码由一个9ms低电平和4.5ms高电平组成,逻辑1则由560μs低电平和1680μs高电平组成,逻辑0由560μs低电平和560μs高电平组成。

虽然各种红外信号制式的表示方式不一样,但现有的红外通讯解码处理方法总体是相同,即利用微处理器具有外部中断输入功能的引脚来实现红外信号的解码,具体方式为:当微处理器的外部中断输入引脚出现电平跳变(从低电平到高电平、高电平跳到低电平),微处理器进入外部中断服务,根据中断的时间间隔首先采集获得红外信号的引导码后,然后启动采集红外信号的数据波形,最后分析红外波形数据、解码执行。这种先确定红外引导码后再启动后续红外波形采集、数据解码的方法,存在外部中断服务时间过长、占用cpu太多时间等不足。



技术实现要素:

本发明的目的是在现有红外通讯接口的嵌入式终端构成基础上,通过嵌入式微处理器的一个具有中断功能gpio(generalpurposeinputoutput)口和一个定时器,采用两级处理方法,将红外波形采集和数据分析解码各自独立,有利于提高嵌入式微处理器在红外解码的高效率、对不同编码的普适性。

为达到上述目的,本发明的设计技术方案是:

一种嵌入式系统的红外通讯解码方法,设置有红外通讯接口的嵌入式终端,由一个一体化红外接收头和需要红外通讯功能的嵌入式终端组成,装置中,一体化红外遥控接收头的电源端、地线端、输出引脚端分别和嵌入式终端中嵌入式微处理器的电源端、地线端、嵌入式微处理器一个具有中断功能的gpio引脚相连。其特征在于嵌入式微处理器设置有红外波形数据结构体,同时还包含由中断服务处理和应用服务处理组成的两级处理方法,其中,中断服务处理包括gpio中断服务和定时器0中断服务,应用服务处理对已采集的红外波形数据分析、解码处理。

所述的嵌入式微处理器,有一个16位的定时器0,中断周期t0为m微秒,m范围为:10~5000。

所述的嵌入式微处理器,内部设置有红外波形数据结构体,由1字节的定时器t0中断次数计数器timer_count、1字节的红外信号波形时长缓存区的索引序号pir_wave、1字节红外信号波形采集完成申请分析isir_wave、n字节的红外信号波形时长缓存区ir_wave等组成,其中,n的范围:34~120。

所述的中断服务处理包括gpio中断服务和定时器0中断服务。由中断服务处理完成对红外通讯波形的数据采集,以t0时间为单位获得其高电平、低电平的格式化时长数据,在采集完成后再交由应用服务处理完成对红外波形数据的分析、解码处理。

所述的gpio中断服务,由微处理器一个具有电平变化触发中断功能的gpio引脚在检测到引脚电平变化时触发进入中断服务,启动定时器0。具体步骤是:当进入gpio中断服务后,首先关闭定时器0,其次,判断红外波形数据结构体中pir_wave是否为0,如果为0,说明红外波形数据结构体没有保存数据,初始化有关资源操作,即将timer_count清零和pir_wave加一,准备开始红外波形采集,如果不为0,说明正在进行红外波形采集,则读取timer_count数据,保存到红外信号波形时长缓存区ir_wave中,然后timer_count清零和pir_wave加一,最后再开启定时器0。

所述的定时器0中断服务,在gpio中断服务中启动,进入定时器0中断服务后,对timer_count加一操作,然后检查timer_count数据是否大于tir,其中tir=1000/t0,否则如果是,则关闭定时器0,设置红外信号波形采集完成,即将isir_wave置一,申请后续进入应用服务处理,由其完成红外波形数据的分析、解码处理。

所述的应用服务处理,完成对已采集的红外波形数据分析、解码处理任务。由于红外信号波形时长缓存区ir_wave保存了以t0为周期的红外波形高电平、低电平的格式化数据,因此应用服务处理的步骤是:首先需要在缓冲区ir_wave中寻找同步头(如nec协议引导码为低电平9ms、高电平4.5ms),如果能够找到,开始对缓冲区中的后续波形数据分析获得各个位数据,再将这些位数据拼接成四字节数据,完成拼接后对四字节数据进行校验检查,如果校验正确,把红外数据存储并进行相应的操作,然后重置相关资源,即将pir_wave和isir_wave置零,准备新的红外数据采集,最后退出本次服务。

所述的应用服务处理,还包含了一个拼接四字节模块,假定在缓冲区ir_wave第[x-2]和第[x-1]字节匹配到2字节同步头,则缓冲区ir_wave[x]之后的数据就是红外波形低电平、高电平的格式化数据,其中,2≤x≤(n-3)。以nec协议为例分析说明,由于逻辑1由560μs低电平和1680μs高电平组成,逻辑0由560μs低电平和560μs高电平组成,可知应以缓冲区ir_wave中2个字节为步长,对其中的数据大小进行判断,如果正确就可以获得1位数据,如此循环8次获得1个字节,类推获得4字节,从而完成四字节拼接。

与现有技术相比,本发明的有益效果是:在现有红外信号接收装置基础上,通过两级处理方法,将红外波形采集和解码分析各自独立,提高嵌入式微处理器在红外解码的高效率、对不同编码的普适性,具有快速、稳定的应用效果。

本发明的目的、特征及优点将通过实施例并结合附图进行详细说明。

附图说明

图1是本发明的红外信号接收装置硬件连接图。

图2是本发明的红外波形数据结构体。

图3是本发明的gpio中断服务程序流程图。

图4是本发明的定时器0中断服务程序流程图。

图5是本发明的应用服务处理流程图。

图6是本发明的应用服务处理中拼接四字节的流程图。

具体实施方式

图1中,101是嵌入式微处理器,202是红外接收管,其中,101的一个输出引脚ir_power和红外接收管(202)的power引脚相连,嵌入式微处理器(101)的一个输入引脚ir_data和红外接收管(202)的data引脚相连,嵌入式微处理器(101)的一个引脚gnd和红外接收管(202)的gnd引脚相连。

图2中,框图内标注的201是1字节的定时器t0中断次数计数器timer_count,框图内标注的202是1字节红外信号波形时长缓存区的索引序号pir_wave,框图内标注的203是1字节红外信号波形采集完成标志isir_wave,204是n字节的红外信号波形时长缓存区ir_wave。

为了进一步说明本发明的具体实施,结合图3、图4、图5、图6所示的流程图,用c语言对本方法作具体实施过程描述,包括以下步骤:

步骤301:gpio电平变化,触发微处理器进入中断开始服务,然后执行步骤302;

步骤302:关闭定时器0,然后执行步骤303;

步骤303:判断pir_wave是否为0,如果不为0,说明正在进行红外波形采集,则执行步骤304,否则为0,说明要开始新的一轮红外波形数据采集,则执行步骤305;

步骤304:将timer_count的数据保存到红外信号波形时长缓存区ir_wave中pir_wave指定的位置,然后执行步骤305;

步骤305:将timer_count清零,pir_wave加一位置后移,用于保存下一次数据,然后执行步骤306;

步骤306:打开定时器0,然后执行步骤307;

步骤307:退出本次中断服务。

步骤401:定时器0计数到触发微处理器中断进入服务,然后执行步骤402;

步骤402:timer_count加一,表明定时器0中断次数增加了一次,然后执行步骤403;

步骤403:判断timer_count是否大于tir,如果是,说明长时间没有gpio中断了,则执行步骤404,否则说明小于tir,则执行步骤405;

步骤404:关闭定时器0,将isir_wave置一,申请后续应用服务处理,然后执行步骤405;

步骤405:退出本次中断服务。

步骤501:调用本次应用服务的前提条件是isir_wave等于1,就开始后续处理,执行步骤502;

步骤502:从红外信号波形时长缓存区ir_wave的首地址(下标为0)开始查找同步头低电平数据,即寻找缓存区ir_wave数据中满足[(4500/t0-1),(4500/t0+1)]区间的下标[x-2],如果找到,则执行步骤503,否则没有找到则执行步骤507;

步骤503:随后,检查缓存区ir_wave中下标[x-1]的数据是否满足同步头高电平数据,即是否在[(9000/t0-1),(9000/t0+1)]区间,如果满足,则执行步骤504,否则没有找到则执行步骤507;

步骤504:经过步骤501-504,缓存区ir_wave中第x字节(含)开始往后,保存红外数据的波形时间数据,调用拼装四字节模块,从然后执行步骤505;

步骤505:检查拼装的四字节(系统码、用户码、数据码、数据码反码)校验是否正确,如果正确则执行步骤506,否则不正确则执行步骤507;

步骤506:按照协议,执行红外数据约定的任务,然后执行步骤507;

步骤507:将pir_wave置零,准备新的红外波形数据采集;将isir_wave置零,表明本次应用服务申请已处理,然后执行步骤508;

步骤508:退出本次服务。

步骤601:从缓存区ir_wave中第x字节开始二重循环拼装4字节,其中,第一重循环8次,循环控制变量i,拼装1个字节,第二重循环4次,循环控制变量j,为表述方便,用指针p赋初值等于缓存区ir_wave中第x字节地址,然后执行步骤602;

步骤602:第一重循环控制变量i置零,然后执行步骤603;

步骤603:读取指针p指向地址的数据,判断是否满足在[560/t0-1,560/t0+1]区间,如果是则执行步骤604,否则不是就执行步骤612;

步骤604:读取指针(p+1)指向地址的数据,判断是否满足在[560/t0-1,560/t0+1]区间,如果是则执行步骤605,否则不是就执行步骤606;

步骤605:取得当前位数据为逻辑0,执行步骤608;

步骤606:读取指针(p+1)指向地址的数据,判断是否满足在[1680/t0-1,1680/t0+1]区间,如果是则执行步骤607,否则不是就执行步骤612;

步骤607:取得当前位数据为逻辑1,执行步骤608;

步骤608:指针p后移两字节,第一重循环控制变量i加一,然后执行步骤609;

步骤609:检查判断第一重循环控制变量i是否小于8,如果是则执行步骤602,否则执行步骤610;

步骤610:第二重循环控制变量j加一,然后执行步骤611;

步骤611:检查判断第二重循环控制变量j是否小于4,如果是则执行步骤602,否则执行步骤612;

步骤612:退出本次模块服务。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应该理解,我们所描述的具体实施例只是说明性的,而不是用于对本发明范围的限定,任何受本发明技术路线启发所作的等效修饰以及变化,都应当涵盖在本发明权利要求所保护的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1