遥控器中断

我们以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

发布了105 篇原创文章 · 获赞 20 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/kehyuanyu/article/details/104960883