前言
工作中遇到了linux中遥控器驱动无法触发足够数量的中断,导致无法正常解码和工作。
环境:安卓 linux内核版本4.14.98
编译体系:ninja
核心板:NXP imx8mm evk
NXP的imx8系列SOC应用在嵌入式产品上性能绝对是非常强大的,中断触发能力、中断处理能力能满足绝大部分需求,本不该出现中断未能及时触发或者中断处理不及时导致遗失下一次中断的问题,但是在工作中遇到了遥控器中断被丢失,导致无法遥控器NEC信息解码失败,无法接收到遥控器信号。
============================================
此贴首先直接指出解决方法,然后详细描述遥控器驱动的移植与调试过程。
核心问题描述:移植遥控器驱动后,硬件上用示波器能看到符合NEC协议的脉冲信号,但是驱动里加了DEBUG信息并没有解码成功,在中断处理函数中加了计数,发现实际触发的中断次数小于收到的次数。
漏中断原因:CPU频繁进入深度idle状态
解决方法:修改设备树中idle-states中的中相关参数,NXP官方提供的代码4.14.98版本的设备树如下:
cpus {
idle-states {
entry-method = "psci";
CPU_SLEEP: cpu-sleep {
compatible = "arm,idle-state";
arm,psci-suspend-param = <0x0010033>;
local-timer-stop;
entry-latency-us = <1000>;
exit-latency-us = <700>;
m