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

做网站那里好免费企业网站系统源码下载

做网站那里好,免费企业网站系统源码下载,如何做好网站外链,网站目录管理模板下载今天跟同事看一个TP驱动#xff0c;上电后日志都正常#xff0c;但是触摸没反应#xff0c;然后开始排查。上电后可以正常读到芯片的chip ID#xff0c;那说明I2C是通讯正常的#xff0c;也可以说明触摸芯片的供电也是正常的。基于这个#xff0c;我搬来示波器#xff0… 今天跟同事看一个TP驱动上电后日志都正常但是触摸没反应然后开始排查。上电后可以正常读到芯片的chip ID那说明I2C是通讯正常的也可以说明触摸芯片的供电也是正常的。基于这个我搬来示波器测量中断引脚的信号发现两个现象1、从休眠到唤醒状态后中断脚有波形而且波形上看不出异常。2、中断处理函数没有跑进去—— 触摸屏的dts文件编写如下 文件:arch/arm/boot/dts/inxxx.dtscap_touch14 {compatible  mediatek,cap_touch;reg  0x14;interrupt-parent  pio;interrupts  100 IRQ_TYPE_EDGE_FALLING;int-gpio  pio 100 0;rst-gpio  pio 101 0;}; compatible 是和驱动里面的name 匹配上的。reg 是I2C芯片的 地址。interrupt-parent 对应的是平台的中断控制器里面应用的 pio对应的是mt8167.dtsi文件里面的中断控制器dts描述。interrupts 的第一个参数对应的是中断号第二个参数对应的是中断的触发方式。int-gpio 里面引用的 pio 也是用到了 pio里面的gpio口控制器第二个参数对应的是gpio 编号第三个对应的是gpio口的电平。rst-gpio 和上面同理。看内核文档对gpiodts的描述 文件Documentation/devicetree/binding/pinctrl/pinctrl-mt65xx.txtEg: pio 6 0[phandle of the gpio controller node][line number within the gpio controller][flags]Values for gpio specifier:- Line number: is a value between 0 to 202.- Flags:  bit field of flags, as defined in dt-bindings/gpio/gpio.h. Only the following flags are supported: 0 - GPIO_ACTIVE_HIGH 1 - GPIO_ACTIVE_LOW 看看pio这个里面都是一些什么东西pio: pinctrl10005000 {compatible  mediatek,mt8167-pinctrl;reg  0 0x1000b000 0 0x1000;mediatek,pctl-regmap  syscfg_pctl_a;pins-are-numbered;gpio-controller;#gpio-cells  2;interrupt-controller;#interrupt-cells  2;interrupts  GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH; }; —— 看看注册上的中断的编号xxxx:/ # cat proc/interruptsCPU018:      19578       GIC  27 Edge      arch_timer20:          0  MT_SYSIRQ 132 Level     mtk_timer21:         12  MT_SYSIRQ  84 Level     mtk-uart30:          0  MT_SYSIRQ 128 Level     SPM31:          0  MT_SYSIRQ 129 Level     SPM32:          0  MT_SYSIRQ 130 Level     SPM33:          0  MT_SYSIRQ 131 Level     SPM34:          0  MT_SYSIRQ 221 Edge      ATF_irq39:          0  MT_SYSIRQ 194 Level     BTCVSD_ISR_Handle40:          0  MT_SYSIRQ 198 Edge      mtk-wdt42:          0  MT_SYSIRQ 204 Level     mt-pmic-pwrap43:          0  MT_SYSIRQ 149 Edge      mtk-kpd45:          0  MT_SYSIRQ 121 Level     10203000.m4u46:          0  MT_SYSIRQ 218 Level     CIRQ47:          0  MT_SYSIRQ 114 Level     TEE IRQ49:       2942  MT_SYSIRQ 125 Level     mtk_cmdq50:          0  MT_SYSIRQ 126 Level     TEE IRQ53:          0  MT_SYSIRQ  76 Level     mt-pwm54:         30  MT_SYSIRQ  80 Level     i2c-mt65xx55:         16  MT_SYSIRQ  81 Level     i2c-mt65xx56:         64  MT_SYSIRQ  82 Level     i2c-mt65xx57:          0  MT_SYSIRQ  77 Level     mt8167-thermal58:         16  MT_SYSIRQ  83 Level     ptp62:      20967  MT_SYSIRQ  72 Level     musb-hdrc63:          0  MT_SYSIRQ 120 Level     Afe_ISR_Handle64:       2950  MT_SYSIRQ 185 Level     pvrsrvkm65:     113181  MT_SYSIRQ  78 Level     11120000.mmc67:          0  MT_SYSIRQ 210 Level     musbfsh-hdrc.074:        347  MT_SYSIRQ 160 Level     DISPSYS75:      12980  MT_SYSIRQ 162 Level     DISPSYS76:          0  MT_SYSIRQ 163 Level     DISPSYS80:          0  MT_SYSIRQ 167 Level     DISPSYS83:          0  MT_SYSIRQ 171 Level     DISPSYS85:       1466  MT_SYSIRQ 153 Level     DISPSYS88:          0  MT_SYSIRQ 180 Level     ISP 123:          0  mtk-eint  28 Level     mt6397-pmic 136:          0  mtk-eint  41 Level     USB_IDDIG 195:          6  mtk-eint 100 Edge      mtk-tpd 264:          0  mt6397-irq   6 Edge      mt6397-thr_l 265:          0  mt6397-irq   7 Edge      mt6397-thr_h 266:          0  mt6397-irq   5 Edge      mtk-pmic-keys 267:          0  mt6397-irq  17 Edge      mtk-pmic-keys 268:          0  mt6397-irq  18 Edge      mtk-pmic-keys 269:          0  mt6397-irq  19 Edge      mtk-pmic-keys 270:          0  mt6397-irq  20 Edge      mt6397-rtc IPI0:          0  CPU wakeup interrupts IPI1:          0  Timer broadcast interrupts IPI2:      31856  Rescheduling interrupts IPI3:         35  Function call interrupts IPI4:        121  Single function call interrupts IPI5:          0  CPU stop interrupts IPI6:          0  IRQ work interrupts IPI7:          0  completion interrupts Err:          0 #看看驱动文件如何驾驭这些dts配置先使用函数获取dts里面的内容  tpd_rst_gpio  of_get_named_gpio(dev-of_node, rst-gpio, 0);tpd_int_gpio  of_get_named_gpio(dev-of_node, int-gpio, 0); 然后就是申请static int gtp_get_gpio_res(void) { #if defined(CONFIG_OF)  !defined(CONFIG_GTP_USE_PINCTRL)int ret;/* configure the gpio pins */ret  gpio_request_one(tpd_rst_gpio, GPIOF_OUT_INIT_LOW,touchp_reset);if (ret  0) {GTP_ERROR(Unable to request gpio reset_pin\n);return -1;}ret  gpio_request_one(tpd_int_gpio, GPIOF_IN,tpd_int);if (ret  0) {GTP_ERROR(Unable to request gpio int_pin\n);gpio_free(tpd_rst_gpio);return -1;} #endifreturn 0; } 然后去看中断注册函数的时候会有点奇怪static int tpd_irq_registration(void) {struct device_node *node  NULL;unsigned long irqf_val  0;int ret  0;// node  of_find_compatible_node(NULL, NULL, mediatek,cap_touch);//0704node  of_find_matching_node(NULL, touch_of_match);if (node) { //  touch_irq  gpio_to_irq(tpd_int_gpio);touch_irq  irq_of_parse_and_map(node, 0);GTP_ERROR(###### touch_irq  %d\n,(int)touch_irq);irqf_val  !int_type ? IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;irq_enabled  true; //ret  request_irq(touch_irq, (irq_handler_t) tpd_interrupt_handler,irqf_val, TPD_DEVICE, NULL); //jason test hereGTP_ERROR(###### ret  %d\n,(int)ret);if (ret  0)GTP_ERROR(tpd request_irq IRQ LINE NOT AVAILABLE!.); } // touch_irq gpio_to_irq(tpd_int_gpio); 这行代码被注释掉了也就是不用 gpio_to_irq来使用中断了。目前的驱动使用了 irq_of_parse_and_map 函数来解析dts内容给驱动使用。使用 irq_of_parse_and_map 的原因还是为了让驱动工程师少干活dts 已经把中断的信息给描述清楚了包括上面说的 interrupts 和 interrupt-parent 属性这个函数会解析这两个属性并实现对应的映射关系。—— 看看内核代码对这个函数的解释/*** irq_of_parse_and_map - Parse and map an interrupt into linux virq space* dev: Device node of the device whose interrupt is to be mapped* index: Index of the interrupt to map** This function is a wrapper that chains of_irq_parse_one() and* irq_create_of_mapping() to make things easier to callers*/ unsigned int irq_of_parse_and_map(struct device_node *dev, int index) {struct of_phandle_args oirq;if (of_irq_parse_one(dev, index, oirq))return 0;return irq_create_of_mapping(oirq); } EXPORT_SYMBOL_GPL(irq_of_parse_and_map); 上面的英文的意思是这个函数是解析并映射中断到 linux virq 空间dev对应的就是device指针index 就是需要映射的中断的索引。该函数是 of_irq_parse_one() 和 irq_create_of_mapping() 的封装封装的作用是为了码农写代码更容易一些。我们再看看touch_irq  irq_of_parse_and_map(node, 0); 后边的这个 0表示的是偏移索引如果我们在dts里面这样写的话就可以使用索引来选择我们的配置interrupts  0 0 4, 0 1 4; 我们在 proc/interrupts下看到的编号「195」就是这里出来的195:         69          0          0          0  mtk-eint 100 Edge      mtk-tpd #所以为什么中断函数没有进去检查了一轮发现是因为dts描述里面的 interrupts 属性没有写对interrupts 的第一个参数需要和gpio口编号对应起来但是我们沿用上个项目的代码应该修改了这个gpio口我们软件没有及时修改过来。当然了知道问题后就很快解决了。触摸后可以看到触摸屏可以正常报点是一件非常开心的事情。#驱动获取dts中断的方式这部分韦东山老师总结的非常好的我建议大家看看这篇文章在Linux驱动中获取dts描述的中断针对不同的设备获取的方式不同比较常见的是在dts里面把中断描述成一个gpio口然后在驱动中先获取gpio口然后再转换成中断。#总结这部分属于炒旧饭触摸屏驱动是比较常见的外设调试的难度也不是很大正常的调试顺序是— 先搞定供电— 再搞定I2C、I2C一般需要上拉还有I2C的速率I2C的电平。— 再看看地址我们Linux 里面一般是 7bit 地址需要注意地址也会跟硬件设计相关。— 上面都正常了就可以去排查中断的问题了有的GPIO可能默认没有中断也需要软件配置。— 然后就观察软件是否能进入中断处理函数有的驱动是支持轮询的但是代码位置都差不多。这样都正常后就可以开机测试触摸是否正常了。推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈嵌入式Linux微信扫描二维码关注我的公众号
http://www.pierceye.com/news/750518/

相关文章:

  • 网站开发安全模块方案网站运营方案怎么写?
  • 章丘网站制作手机网站 微信平台
  • 自定义功能的网站做坏事网站
  • 做农村电子商务的网站有哪些wordpress批量修改引用网址
  • 简述建立网站的步骤内蒙古建设监理协会网站
  • 网站上传格式工信部 网站备案查询
  • 网站开发怎么让别人看到网站设计主流尺寸
  • 都匀经济开发区建设局网站华宇网站建设
  • 南谯区住房和城乡建设局网站大连百度推广优化
  • 东莞设计网站公司被邀请做刷客会不会碰到钓鱼网站
  • 阿里云服务器多个网站南充网络推广
  • 电子商务网站建设规划设计任务书wordpress 有道云笔记
  • 广州市地铁站地图潍坊网站建设方案
  • 买一个网站服务器多少钱企业 怎么建交互网站
  • 国产网站开发工具公司福建新闻最新消息
  • 云主机和云虚拟主机优化教程网站推广排名
  • 佛山网站建设开发二维码生成器永久免费版下载
  • 衡水网站建设衡水网站建设网站建设南宁
  • 汽车网站推广策划方案wordpress又拍云cdn伪静态
  • 用dw建立网站网站设计师要学什么
  • 网站模块建设中二级医院做网站
  • 求大神帮忙做网站云网站后台
  • 保护稀有动物网站建设策划书凡科建站多少钱
  • 怎么通过做网站来赚钱坪山网站建设方案
  • 网站架构设计师工作内容传媒在线网站模板
  • 重庆哪里有做网站的公司互联网公司网站建设ppt
  • 海南的网站建设公司wordpress最新版中午
  • 网站推广需要域名迁移iis7建设网站
  • 网站建设实践报告小结网页版传奇服务端
  • 安顺住房和城乡建设部网站做网站用什么开发工具