怎样知道0038接收器的引脚功能(HS0038红外线接收器的编程)

怎样知道0038接收器的引脚功能(HS0038红外线接收器的编程)(1)

来源:百问网_嵌入式Linux wiki_jz2440 新1期视频维基教程 (视频文字版)

作者:韦东山

本文字数:1687,阅读时长:2分钟

先打印出原始数据

irda_raw.c irda_raw.h

获取电平极性方式,当前引脚极性电平取反

#include "../../s3c2440_soc.h" #include "irda_raw.h" /* IRDA引脚 : EINT1/GPF1 */ static unsigned long long g_last_time = 0; /* * 配置GPIO, 注册中断 * 在中断处理函数里: 记录中断发生的时间, 跟上次中断的时间比较, 计算出脉冲宽度 读取引脚极性 把数据放入环型缓冲区 */ /* 先实现GPIO的基本操作 */ static void irda_data_cfg_as_eint(void) { /* 配置为中断引脚 */ GPFCON &= ~(3<<2); GPFCON |= (2<<2); /* 设置中断触发方式: 双边沿触发 */ EXTINT0 |= (7<<4); /* eint1 */ } static int irda_data_get(void) { /*如果bit1 等于1就表明高电平,返回1 */ if (GPFDAT & (1<<1)) return 1; else return 0; } /*irda中断处理函数*/ void irda_irq(int irq) { /* 在中断处理函数里: 记录中断发生的时间, 跟上次中断的时间比较, 计算出脉冲宽度 读取引脚极性 把数据放入环型缓冲区 */ irda_raw_event event; /*获得当前时间并赋值给cur*/ unsigned long long cur = get_system_time_us(); /*上次时间和这次时间的差值,也就是周期*/ event.duration = delta_time_us(g_last_time, cur); /*获取引脚极性*/ event.pol = !irda_data_get(); /*我们需要环形缓冲区的函数放入环形缓冲区 */ ir_event_put(&event); /*更新时间*/ g_last_time = cur; } /* 注册中断 仿照之前的按键中断程序 */ void irda_init(void) { /*1. 配置为中断引脚 * 2. 配置为双边沿触发 */ irda_data_cfg_as_eint(); /*注册中断*/ register_irq(1, irda_irq); } /*测试原始数据*/ void irda_raw_test(void) { irda_raw_event event; unsigned long long pre = 0, cur; irda_init(); while (1) { /*如果从唤醒缓冲区读到数据,就把它打印出来*/ if (0 == ir_event_get(&event)) { cur = get_system_time_us(); /*如果这次时间和上次时间相差远的话,就打印回车换行*/ if (delta_time_us(pre, cur) > 1000000) printf(" "); pre = cur; /*使用三目运算符来判断pol是高电平还是低电平*/ printf("%s %d us | ", event.pol? "hight" : "low", event.duration); } } }

irda_raw.h定义极性和脉冲宽度结构体

#ifndef _IRDA_RAW_H #define _IRDA_RAW_H typedef struct irda_raw_event { int pol; /* 极性 */ int duration; /* 脉冲宽度, us */ }irda_raw_event, *p_irda_raw_event; #endif /* _IRDA_RAW_H */

测试代码 修改main.c 在main主函数中增加

irda_rae_test();

修改Makefile 增加

objs = sensors/irda/irda_raw.o

编译执行

怎样知道0038接收器的引脚功能(HS0038红外线接收器的编程)(2)

一开始时间很长是因为一上电的时候高电平,值打印的特别大,说明有问题

irda中断函数中没有更新上一次的时间

/*更新时间*/ g_last_time = cur;

再次更新

怎样知道0038接收器的引脚功能(HS0038红外线接收器的编程)(3)

时间和数据格式符合时序要求

「新品首发」STM32MP157开发板火爆预售!首批仅300套

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。