IR RX - 红外接收
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。
鉴于家用电器的品种多样化和用户的使用特点,生产厂家对进行了严格的规范编码,这些编码 各不相同,从而形成不同的编码方式,统一称为红外遥控器编码传输协议。到目前为止,红外遥控 协议已多达十种, 如:RC5、SIRCS、Sy、RECS80、Denon、NEC、Motorola、Japanese、 SAMSWNG 和 Daewoo 等。我国家用电器的红外遥控器的生产厂家,其编码方式多数是按上述 的各种协议进行编码的,而用得较多的有 NEC 协议。
电路原理图
IR-RX接到主控的IR-RX模块的接收管脚。当IR接收到数据后,会产生中断,软件收到中断会进行数据读取。
模块配置
驱动配置
IR-RX Drivers ->
<*> IR-RX Support for Allwinner SoCs
< > Allwinner GPIO IR remote control
设备树配置
设备树 dtsi
中存在的是该类芯片所有平台的模块配置,IR-RX 的设备树配置如下所示:
s_cir0: s_cir@7040000 {
compatible = "allwinner,s_cir"; // 具体的设备,用于驱动和设备的绑定
reg = <0x0 0x07040000 0x0 0x400>; // 设备使用的地址
interrupts = <GIC_SPI 151 IRQ_TYPE_LEVEL_HIGH>; // 设备使用的中断
clocks = <&r_ccu CLK_R_APB0_BUS_IRRX>, <&dcxo24M>, <&r_ccu CLK_R_APB0_IRRX>; // 设备使用的时钟
clock-names = "bus", "pclk", "mclk"; // 使用的时钟名
resets = <&r_ccu RST_R_APB0_BUS_IRRX>; // 设备使用的复位时钟
status = "disabled"; // 设备是否使用,dtsi中设为disabled,会被board.dts中的配置覆盖
};
引脚配置
&pio {
s_cir0_pins_a: s_cir0@0 {
pins = "PB1"; // 使用的引脚,不同芯片不一样
function = "ir";
};
s_cir0_pins_b: s_cir0@1 {
pins = "PB1";
function = "gpio_in";
};
};
IR 配置
&s_cir0 {
pinctrl-names = "default", "sleep"; // 设备使用的pin脚名称
pinctrl-0 = <&s_cir0_pins_a>; // 设备使用的pin脚配置(default)
pinctrl-1 = <&s_cir0_pins_b>; // 设备使用的pin脚配 置(sleep)
status = "okay"; // 设备是否使用
};
驱动接口
sunxi_irrx_probe
- 函数原型:
static int sunxi_irrx_probe(struct platform_device *pdev)