遥控器中断

我们以4.9.44版本内核的IR遥控器为例。

1. 查看平台中断表

使用cat /proc/interrupts命令
在这里插入图片描述
其中横向,第一列是中断号,第二列是各中断在CPU中发生的次数,GICv2 是中断控制器的名称,第三列也是中断逻辑号,第四列是驱动注册的中断名称。例如:中断号 130 对应的就是遥控器的中断。

2. 中断注册

vendor\mstar\kernel\linaro\mstar2\drv\ir_mirc\mstar_ir.c中,会注册
注册中断函数。
在这里插入图片描述
其中参数,如下:
在这里插入图片描述
INT_NUM_IR_ALL 就是中断号
文件mstar2\hal\m7221\ir\mhal_ir_reg.h

#define INT_NUM_IR_ALL (E_FIQEXPL_IR_IN) 

文件star2\hal\m7221\cpu\arm64\chip_int.h

E_FIQEXPL_IR_IN                     = E_FIQEXPL_START + 2,  //FIQ34

为平台的第34个中断,而对应的值是130。

中断flag的含义:
在这里插入图片描述
_MDrv_IR_ISR 就是中断函数,“IR” 就是中断名称。

3. 中断属性

系统还会为每个中断创建以编号命名的子目录。在/proc/irq/目录下,

 # pwd
/proc/irq/130
# ls
IR  affinity_hint  irq  node  smp_affinity  smp_affinity_list  spurious

smp_affinity irq和cpu之间的亲缘绑定关系;
smp_affinity_hint 只读条目,用于用户空间做irq平衡只用;
spurious 可以获得该irq被处理和未被处理的次数的统计信息;
handler_name 驱动程序注册该irq时传入的处理程序的名字;

5. 测试

按下遥控器,前后分别查看对应中断信息

# cat /proc/interrupts |grep 130                       
130:         24          0          0          0     GICv2 130 Level     IR
# cat /proc/interrupts |grep 130                       
130:         26          0          0          0     GICv2 130 Level     IR

发现在cpu0 响应了两次,分别是遥控器的down,up事件。

更多中断深度解析可以看博友文章
https://blog.csdn.net/zhoutaopower/article/details/86506725

)EV1527中断法解码 ① 设定定时器中断时间,设定为 80us,80us 进入中断进行解码。具体中断时间多少由自己 软件设定,但是中断时间不能太大。 ② 设定同步码解码范围,同步码定为 5.6ms - 16ms。进入中断判断到低电平,低电平判断 一直累加 Count_Lead++,累积低电平的采集时间,判断到高电平,就判断此时 Count_Lead 的值是否在 70 跟 200之间。(备注:5.6ms/80us=70 16ms/80us=200)。 ③ 引导头通过进入数据判断,刚开始是数据高电平,累积高电平的时间 Count_Data_Hi++, 当判断到低电平时候,判断 Count_Data_Hi 是否在 80us -2.4ms 之间。这里还没进行数据 0 跟 1 的区分,先把 Count_Data_Hi 的值保存在 Hi_Cnt 里面。 (备注:80us/80us=1 2.4ms/80us=30)。 ④ 高电平判断通过,开始判断低电平,累积低电平的时间 Count_Data_lo++,当判断到高电 平时候,判断 Count_Data_Lo 是否在 80us -2.4ms 之间。这里还没进行数据 0 跟 1 的区分, 先把 Count_Data_Lo 的值保存在 Lo_Cnt 里面。 (备注:80us/80us=1 2.4ms/80us=30)。 ⑤ 对 0 跟 1 进行区分,把 24bit 数据整理成三个 byte,存在数组 RfData[0],RfData[1], RfData[2]数组里面。 ⑥ 进行相应功能码的操作。 具体解码方法参考例子程序,因为不同的震荡电阻,1527 出来的编码长度不同,例子 程序是参考 1 lck=100us 波形来做的。具体时间参数可以根据自己的 1527 发射实际长度来 编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值