跳到主要内容

IR-RX

介绍IR的配置和调试方式

模块介绍

红外接收模块主要功能是接收红外信号。

功能介绍

在k1平台中外接红外接收头(解调器)收到解调后的电信号在驱动和内核IR框架中进行解码并上报事件。

源码结构介绍

IR-RX控制器驱动代码在drivers/media/rc目录下:

drivers/media/rc  
|--rc-ir-raw.c #内核ir框架接口代码
|--ir-nec-decoder.c #内核ir解码电信号代码
|--ir-spacemit.c #k1 ir驱动

关键特性

特性
可配置噪声阈值
32Bytes大小RX FIFO

配置介绍

主要包括驱动使能配置和dts配置

CONFIG配置

CONFIG_IR_SPACEMIT=y

Symbol: IR_SPACEMIT [=y]
Device Drivers
-> Remote Controller support (RC_CORE [=y])
-> Remote Controller devices (RC_DEVICES [=y])
-> SPACEMIT IR remote Recriver control (IR_SPACEMIT [=y])

dts配置

pinctrl

可查看linux仓库的arch/riscv/boot/dts/spacemit/k1-x_pinctrl.dtsi,参考已配置好的pwm节点配置,如下:

 pinctrl_ir_rx_1: ir_rx_1_grp {
pinctrl-single,pins = <
K1X_PADCONF(GPIO_79, MUX_MODE1, (EDGE_NONE | PULL_UP | PAD_3V_DS4)) /* ir_rx */
>;
};

dtsi配置示例

dtsi中配置IR控制器基地址和时钟复位资源,正常情况无需改动

 ircrx: irc-rx@d4017f00 {
compatible = "spacemit,k1x-irc";
reg = <0x0 0xd4017f00 0x0 0x100>;
interrupts = <69>;
interrupt-parent = <&intc>;
clocks = <&ccu CLK_IR>;
resets = <&reset RESET_IR>;
clock-frequency = <102400000>;
status = "disabled";
};

dts配置示例

dts完整配置,如下所示

 &ircrx {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ir_rx_1>;
status = "okay";
};

接口描述

API介绍

常用:

int ir_raw_event_store_with_filter(struct rc_dev *dev, struct ir_raw_event *ev)
驱动中调用ir框架实现的接口在中断回调函数中完成信号的存储解码和事件上报。

测试介绍

可基于k1平台外接红外解调器,连接到上述ir配置的pin上,通过遥控器向解调器发送信号,并在应用层接收码值。

FAQ