当前位置: 首页 > wzjs >正文

营销网站价格广州专业网站制作

营销网站价格,广州专业网站制作,泉州安全教育平台,制作游戏文章目录 1、环境介绍2、结论3、分析4、解决5、总结 1、环境介绍 这段时间在rk3576下调试ec11旋转编码器时(ec11旋转编码器的调试可以参考《Linux下EC11旋转编码器驱动调试》),发现刚上电时,是可以使用的,但大概不到一…

文章目录

  • 1、环境介绍
  • 2、结论
  • 3、分析
  • 4、解决
  • 5、总结

1、环境介绍

这段时间在rk3576下调试ec11旋转编码器时(ec11旋转编码器的调试可以参考《Linux下EC11旋转编码器驱动调试》),发现刚上电时,是可以使用的,但大概不到一分钟左右,就没反应了,同时内核有如下打印:

在此先介绍一下硬件连接,我的ec11是连接到一个xl9535 gpio扩展芯片,而非rk3576的原生IO。下图展示了之间的连接关系:

画板

当xl9535的IO引脚有状态变化时,RK3576的gpio4_A6脚就会收到xl9535 INT_脚的一个低电平输出作为中断信号。

下面再给出伪设备树便于大家理解之间的连接关系:

gpio4: gpio@2ae40000 {compatible = "rockchip,gpio-bank";reg = <0x0 0x2ae40000 0x0 0x200>;interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;clocks = <&cru PCLK_GPIO4>, <&cru DBCLK_GPIO4>;gpio-controller;#gpio-cells = <2>;gpio-ranges = <&pinctrl 0 128 32>;interrupt-controller;#interrupt-cells = <2>;
};xl9535: xl9535@21 {compatible = "nxp,pca9535";reg = <0x21>;pinctrl-names = "default";pinctrl-0 = <&pinctrl_xl9535>;gpio-controller;#gpio-cells = <2>;interrupt-parent = <&gpio4>;interrupts = <6 IRQ_TYPE_LEVEL_LOW>;#interrupt-cells = <2>;interrupt-controller;
};Coder_A {compatible = "gpio-keys";status = "okay";#address-cells = <1>;#size-cells = <0>;coder_A {label = "coder_A";linux,code=<250>;debounce-interval = <0>;gpios = <&xl9535 12 GPIO_ACTIVE_HIGH>;interrupt-parent = <&xl9535>;interrupts = <12 IRQ_TYPE_EDGE_RISING>;};
};Coder_B {compatible = "gpio-keys";status = "okay";#address-cells = <1>;#size-cells = <0>;coder_B {label = "coder_B";linux,code=<251>;debounce-interval = <0>;gpios = <&xl9535 13 GPIO_ACTIVE_HIGH>;interrupt-parent = <&xl9535>;interrupts = <13 IRQ_TYPE_EDGE_RISING>;};
};

2、结论

这里先给出结论,是因为xl9535的INT_脚没有接上拉电阻导致INT_脚输出一直为0v,相当于gpio4_A6中断源一直收到中断信号,最后因无效中断次数超过了99900次,内核将gpio4_A6中断源对应的中断处理函数(xl9535的中断函数)关闭,导致ec11旋转编码器用不了。

3、分析

上面说到,当开机不到1分钟左右,就会打印如下的错误信息:

[  340.968820] irq 70: nobody cared (try booting with the "irqpoll" option)
[  340.969082] handlers:
[  340.969090] [<0000000074d089d2>] irq_default_primary_handler threaded [<00000000eb0f1cb4>] pca953x_irq_handler
[  340.969112] Disabling IRQ #70

全局查找发现,是在spurious.c的__report_bad_irq()函数中打印该提示:

再看看是哪个函数调用的__report_bad_irq(),最后发现是note_interrupt()。因note_interrupt()函数过长,这里截取部分内容:

重点就是图中的time_after()函数,该函数用于判断两次中断之间的时间间隔,如果小于一定的时间,则无效次数累加。当无效次数超过99900次,关闭该中断。

上面是反向跟踪,下面正向跟踪,即从xl9535的中断函数入手。xl9535使用的驱动函数文件为gpio-pca953x.c,从这个错误信息可以快速知道中断函数名为pca953x_irq_handler():

继续进入handle_nested_irq():

最终在该函数又回到了note_interrupt():

所以此时可以怀疑,是不是xl9535的INT_脚一直输出低电平,导致频繁触发xl9535中断函数,最终被关闭。

然后实际测量gpio4_A6发现确实一直是0v,再来看看xl9535的数据手册对INT_脚的描述:

INT_脚是开漏输出,需要通过一个上拉电阻连接到Vcc。然而查看xl9535相关原理图发现INT_脚确实没有上拉。

4、解决

最后通过飞线,将xl9535的INT_脚接一颗10k上拉电阻到Vcc,此时中断数不会再一直累加:

5、总结

参考文章:

irq: nobody cared (try booting with the “irqpoll” option)_nobody cared (try booting with the “irqpoll” optio-CSDN博客

http://www.dtcms.com/wzjs/788040.html

相关文章:

  • 网摘网站推广法国外h5汇总网站
  • 手把手教你做网站7网络规划设计师2022论文5月
  • 怎么可以自己做网站被百度收到小程序代码怎么获取
  • 北京官网建设公司中山seo推广优化
  • 网站页脚内容网站被攻击空间关了怎么办
  • 网站套用鞍山58招聘
  • 门户网站模板源码下载嘉兴公司网站模板建站
  • 深圳3d网站建设淄博建企业网站
  • 哪些网站可以做旅游精准引流的网络推广
  • 小程序开发平台需要网站吗深圳十大品牌设计公司
  • 湖南营销型网站建设卖手表的网站
  • 招聘网站开发方案doc网站简单化
  • 网站开发项目终止协议书陕西启康建设有限公司网站
  • 建设公司怎么做网站运营网站建设总体目标
  • 网站建站主题网络口碑营销名词解释
  • 合肥市蜀山区建设局网站福建百川建设有限公司网站
  • 加强统计局网站的建设和管理襄阳市网站建设
  • 怎么更改织梦网站文章样式开封市住房和城乡建设局网站
  • 网站开发文档需求模板android开发
  • 网站问卷调查怎么做网站建设分工明细表
  • 网站建设吉金手指排名15怎么做简单的微信浏览的网站
  • 企业网络营销网站设计浙江省交通工程建设集团网站
  • 公司网站公司怎么建设网站首页
  • 清远市建设局官方网站简约wordpress模板
  • 建设银行龙卡信用卡在境外网站支付谷歌推广代理公司
  • 平台设计网站公司电话设计一个个人网站的基本步骤
  • 中国建设银行福州招聘信息网站与传统市场营销的区别与联系有哪些
  • 做我的世界头像的网站张家界网站建设多少钱
  • 网站建设 工商注册常州网站制作费用
  • 淘宝客网站推广工具seo云优化公司