• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : mini6410 红外 驱动程序+测试程序 (源码) 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 11942
精华: 1
发帖: 144
金钱: 775 两
威望: 155 点
贡献值: 1 点
综合积分: 308 分
注册时间: 2009-12-25
最后登录: 2022-01-16
楼主  发表于: 2011-09-13 12:09

 mini6410 红外 驱动程序+测试程序 (源码)

管理提醒: 本帖被 xoom 执行加亮操作(2011-09-13)
6410的开发板的EINT12外接了一个红外接收器,总想着把它利用起来,趁中秋休假,玩了一下。      

小弟尝试利用以下三种方法完成驱动:
1.内核定时器
2.内核延时
3.6410本身的定时器

由于前两种方法的定时都有一定的局限性,所以利用6410的timer0来完成精确定时操作,不过这样的驱动也严重依赖平台。

有图有真相:
[attachment=2855]

源码附上,还请各位高手拍砖赐教。
1.采用中断查询方式进行键码识别:
[attachment=2856]

采用driver状态机进行红外键码识别(由于Linux中断并不能实时响应,会有丢码现象):
[attachment=2948]

odanobunaga兄的“AP状态机+Drv波形记录”方式:
[attachment=2947]  
[ 此帖被cole3在2011-10-05 10:58重新编辑 ]
附件设置隐藏,需要回复后才能看到
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
1楼  发表于: 2011-09-22 20:43
我也看下 哈哈
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
2楼  发表于: 2011-09-23 11:05
试验了下这个程序,不灵光哇
郁闷一个。
模块初始化成功
程序运行后我用电视机遥控器试一点反应都么有
是不是我的遥控器编码不同?
用的松下电视的遥控

或者是GPIO没有初始化
我初始化GPION之后
按下红外 狂跳这玩意:
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
one_wire_status: 2
导致我程序都被卡死啦
[ 此帖被odanobunaga在2011-09-23 11:37重新编辑 ]
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
3楼  发表于: 2011-09-23 11:49
我也是在2.6.38下测试 把那几个头文件路径修改下 就可以编译通过了
另外还要增加macn/map.h
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
4楼  发表于: 2011-09-23 11:56
oh了  哈哈
俺搞定了  
[ 此帖被odanobunaga在2011-09-26 11:17重新编辑 ]
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
5楼  发表于: 2011-09-23 12:12
楼主这样写驱动似乎不太对头啊,
在中断里面写查询定时器 不太明智
先等待了9000+5000us=1.4ms
又等待了 32*(这是个比较大的范围 最多为2000)us
就是最多可能这个程序会在中断里面停留60ms有点太长啦 虽然linux支持中断嵌套,但总觉得有问题

需要改进 感觉应当把中断触发改为双沿
中断程序改为状态机方式
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
6楼  发表于: 2011-09-23 12:30
恩 EINT中断是产生了 但是么红外的程序是有问题的
俺需要将这个重写一下
以前写过一个  代码如下
这是用PIC实现的 TIMR2用于测量脉宽
isr是中断处理程序 双沿触发 ,timer用于计量两次中断之间的时间间隔
[ 此帖被odanobunaga在2011-09-26 11:19重新编辑 ]
描述:红外IC(用来看看时序)
附件: BM6122.rar (211 K) 下载次数:41
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
7楼  发表于: 2011-09-23 16:16
另外一个问题 楼主 你的预分频
预分频只有8位  不知道你的pclk是多少
pclk/1000000可能会超过8位的容量 因此我把MUX改为1/16分频
可能这样会好些
俄晕。。。 pclk只有66.5M啊
[ 此帖被odanobunaga在2011-09-23 17:08重新编辑 ]
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
8楼  发表于: 2011-09-23 20:55
改写了程序 用了个松下遥控器 似乎编码和我之前用的遥控器不一样
数据位数要多一些
级别: 侠客
UID: 54019
精华: 0
发帖: 76
金钱: 380 两
威望: 76 点
贡献值: 0 点
综合积分: 152 分
注册时间: 2011-08-22
最后登录: 2012-03-17
9楼  发表于: 2011-09-23 21:26
看来松下的格式是不一样啊
遥控器编码格式.rar (36 K) 下载次数:29
哦了 明天按松下的格式解析
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go