龙芯1B开发板一体化红外接收头+20键迷你红外遥控器驱动.doc

龙芯1B开发板一体化红外接收头+20键迷你红外遥控器驱动.doc

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
龙芯1B开发板一体化红外接收头20键迷你红外遥控器驱动

1. 红外知识简介 3 1.1. 怎么判断遥控板是否发射了红外命令(是否有电) 3 1.2. 红外遥控器是怎样解决干扰问题的 3 2. 硬件简介 3 2.1. 一体化红外接收头 4 2.1.1. 一体化红外接收头在开发板上的位置 4 2.1.2. 一体化红外接收头原理图 5 2.1.3. 一体化红外接收头原理 7 2.2. 迷你20键38K红外遥控板 7 2.2.1. 遥控器按键编码表 7 2.2.2. NEC编码分析 8 3. 源码分析 9 3.1. 主要思路 9 3.2. 阻塞IO 10 3.3. 中断的上下半部 10 3.4. 内核定时器 11 4. 运行效果 12 4.1. 打开调试开关的效果 12 4.2. 不打开调试开关的效果 17 5. 源码清单 18 5.1. 驱动程序 18 5.1.1. ls1b_ir.h 18 5.1.2. ls1b_ir.c 18 5.1.3. Platform.c 29 5.2. 应用程序 30 5.2.1. ls1b_ir_test_app.c 30 6. 参考文档 31 版本 更新日期 更新内容 V1.0 2014.4.5 创建 红外知识简介 个人认为百度文库中的文档《全面了解红外遥控(中文版).pdf》讲得很好。我这里只是把要点提一下。 怎么判断遥控板是否发射了红外命令(是否有电) 我们时常会碰到一个问题——到底遥控器还有电没有。对于电视遥控器可以取下电池看看,但是对于这里使用的迷你遥控器怎么办?使用的是锂电池。 办法是通过手机的摄像头看遥控器的红外发射管。当按下遥控器按键时,如果有电会发射红外命令,遥控器上的红外发射管会发出红外光,手机的摄像头能看到这种光。下图《全面了解红外遥控(中文版).pdf》为通过手机摄像头看遥控器的图片 红外遥控器是怎样解决干扰问题的 只要有发热的物体都有红外光,问题是这么多红外光源,遥控器是怎样进行准确的传递信息的呢? 采取了两种措施:一、采用指定波长(940nm)的红外光;二、对940nm的红外光进行调制,调制到38Khz上。 虽然发出红外光的光源有很多,但是每个发出红外光的波长不一定一样,就算是都发出940nm的红外光,通常也没有什么规律,为了排除干扰能够进行准确的通信,遥控器还将940nm的红外光调制到38Khz上。 硬件简介 说了这么久,还不知道开发板和遥控器到底是哪一款,来个合影吧。 注意:本驱动是针对图中所示的遥控器的驱动。 一体化红外接收头 一体化红外接收头在开发板上的位置 先来看一下开发板上一体化红外接收头在哪里 位于电源和网口之间。 一体化红外接收头原理图 再来看看原理图中的一体化红外接收头的电路 由图可知,一体化红外接收头有3个引脚,分别为5v电源,地和信号输出引脚。 注意:原理图中信号输出引脚为GPIO60,这是原理图中的标注,实际上是龙芯1B处理器的GPIO61,这点很重要。原理图中也有说明,如下图所示 一体化红外接收头原理 左边为遥控器发射的38khz的红外信号,右边为一体化红外接收头收到信号后,解调得到的信号。即没有38khz红外信号时,一体化红外接收头输出高电平;有38khz红外信号时,输出低电平。 迷你20键38K红外遥控板 遥控器按键编码表 为了在linux驱动中能够正确解析遥控器的红外命令,并判断出具体是哪个按键被按下,必须知道遥控器按键编码。这里选择的这款遥控器的按键编码是已知的,如下图所示 注意:第一行中间那个(编码为46的)按键本遥控器没有。其它的编码都正确,详细请看后面的测试结果。 如果不幸没有这个编码表,只有通过示波器来找出每个按键的编码值了。 NEC编码分析 参考文档《全面了解红外遥控(中文版).pdf》中给出了NEC编码格式,如下图所示 针对这里使用的遥控器,对应的编码如下 其中address就是用户码0x00,按键编码为按键编码表中的值,比如“开关”按键的编码值为0x45,“menu”按键的编码值为0x47,“Test”按键的编码值为0x44,“倒退”按键的编码值为0x43等等。 驱动中要得到的就是按键编码。 上图中的逻辑‘1’和逻辑‘0’对应红外接收头信号引脚的高低电平,NEC编码规定:560us高电平+1690us低电平表示逻辑‘1’,560高电平+560低电平表示逻辑‘0’。如下图所示。 源码分析 主要思路 简单来说,应用程序执行read()函数,然后阻塞,直到有红外命令并解析后,驱动才将获取的“按键编码”返回给应用程序,应用程序的read()才返回。 获取按键编码的方法是:一体化红外接收头在收到遥控器信号后,在信号输出引脚输出高低电平,并产生中断,中断程序中计算两次中断间隔的时间如果为2.25ms则

文档评论(0)

kabudou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档