RK3568驱动指南|第七期-设备树-第57章 实例分析:中断

news2024/10/7 19:23:20

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。


【公众号】迅为电子

【粉丝群】824412014(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第七期_设备树_全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第57章 实例分析:中断

57.1 中断相关属性

57.1.1 RK ft5x06设备树节点

下面展示的是iTOP-RK3568开发板SDK源码中的ft5x06设备树,其中蓝色字体部分就是关于中断相关的描述,包括了interrupts、 interrupt-controller、#interrupt-cells、interrupt-parent四种常见属性:

gpio0: gpio@fdd60000 {
    compatible = "rockchip,gpio-bank";
    reg = <0x0 0xfdd60000 0x0 0x100>;
    interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&pmucru PCLK_GPI00>, <&pmucru DBCLK_GPI00>;
    gpio-controller;
    #gpio-cells = <2>;
    gpio-ranges = <&pinctrl 0 0 32>;
    interrupt-controller;
    #interrupt-cells = <2>;
};

ft5x06: ft5x06@38 { 
    status = "disabled";
    compatible = "edt,edt-ft5306";
    reg = <0x38>;
    touch-gpio = <&gpio0 RK_PB5 IRQ_TYPE_EDGE_RISING>;
    interrupt-parent = <&gpio0>;
    interrupts = <RK_PB5 IRQ_TYPE_LEVEL_LOW>;
    reset-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;
    touchscreen-size-x = <800>;
    touchscreen-size-y = <1280>;
    touch_type = <1>;
};

其中gpio0节点是在内核源码的“/arch/arm64/boot/dts/rockchip/rk3568.dtsi”设备树的3549-3560行定义的,而ft5x06: ft5x06@38触摸芯片节点是在内核源码的“/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi”设备树的301-313行定义的。接下来将会对设备树常见的四个中断属性进行介绍。

57.1.2 interrupts 

interrupts 属性用于指定设备的中断相关信息。它描述了中断控制器的类型、中断号以及中断触发类型。下面将对interrupts 属性的各个方面进行介绍。

在第一小节中列举的设备树源码中的gpio0节点和ft5x06节点都涉及到了interrupts 属性,如下所示:

gpio0: gpio@fdd60000 {
    ....
interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
....
};

ft5x06: ft5x06@38 { 
    ....
interrupts = <RK_PB5 IRQ_TYPE_LEVEL_LOW>;
....
};

gpio0节点的interrupts具有三个参数,分别表示中断控制器类型、中断号和中断触发类型,每个参数的具体描述如下所示:

1中断控制器类型:

interrupts 属性的第一个参数指定了中断控制器的类型。常见的类型包括 GIC (Generic Interrupt Controller)、IRQ (Basic Interrupt Handling) 等。例如,在给定的代码片段中,GIC_SPI 表示中断控制器的类型为 GIC SPI 中断。

中断控制器负责管理系统中的中断信号,它可以是硬件中的专用中断控制器,也可以是处理器内部的中断控制器。

2中断号:

interrupts 属性的第二个参数指定了设备所使用的中断号。中断号是一个唯一标识符,用于区分不同的中断信号源。系统使用中断号来识别中断源并进行相应的中断处理。

中断号可以是一个整数值,也可以是一个宏定义或符号引用。在给定的代码片段中,33 表示该设备使用的中断号为 33。

3中断触发类型:

interrupts 属性的第三个参数指定了中断的触发类型,即中断信号的触发条件。常见的触发类型包括边沿触发和电平触发。

边沿触发表示中断信号在从低电平到高电平或从高电平到低电平的变化时触发。触发类型可以是上升沿触发、下降沿触发或双边沿触发。电平触发表示中断信号在保持特定电平状态时触发,可以是高电平触发或低电平触发。

在给定的代码片段中,IRQ_TYPE_LEVEL_HIGH 表示中断的触发类型为高电平触发。触发类型的宏定义在内核源码“include/dt-bindings/interrupt-controller/irq.h”目录下,具体内容如下所示:

#define IRQ_TYPE_NONE           0   // 无中断触发类型
#define IRQ_TYPE_EDGE_RISING    1   // 上升沿触发
#define IRQ_TYPE_EDGE_FALLING   2   // 下降沿触发
#define IRQ_TYPE_EDGE_BOTH    (IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING)// 双边沿触发
#define IRQ_TYPE_LEVEL_HIGH     4   // 高电平触发
#define IRQ_TYPE_LEVEL_LOW      8   // 低电平触发

而在ft5x06节点中只有中断号和中断触发类型两个参数,这是为什么呢,带着疑问我们继续学习下面的几个属性。

57.1.3 interrupt-controller

interrupt-controller 属性是设备树中用于描述中断控制器的属性之一。它提供了关于中断控制器的相关信息,以便操作系统和其他设备能够正确配置和使用中断系统。
interrupt-controller 属性用于标识当前节点所描述的设备是一个中断控制器。中断控制器是硬件或软件模块,负责管理和分发中断信号。它接收来自各种设备的中断请求,并根据优先级和配置规则分发中断给相应的处理器或设备。
interrupt-controller属性本身没有特定的属性值,只需出现在节点的属性列表中即可。出现该属性的存在即表示该节点描述的设备是中断控制器。

57.1.4 interrupt-parent

interrupt-parent 属性是设备树中用于建立中断信号源与中断控制器之间关联的属性。它指定了中断信号源所属的中断控制器节点,以确保正确的中断处理和分发。
interrupt-parent属性用于指定中断信号源所属的中断控制器。中断信号源是产生中断的设备或其他中断源节点。通过指定中断控制器,操作系统可以正确地将中断请求传递给相应的中断控制器节点进行处理和分发。
interrupt-parent属性值是一个引用,它指向中断控制器节点的路径或标签。可以使用路径来引用中断控制器节点,如/interrupt-controller-node,或使用标签来引用中断控制器节点,如 &interrupt-controller-label,在第一小节例子中的 ft5x06就是通过中断控制器节点和gpio0中断控制器建立了联系,如下所示:

ft5x06: ft5x06@38 { 
    ....
    interrupt-parent = <&gpio0>;
};

中断信号源节点(例如设备节点或其他中断源节点)中的 interrupt-parent 属性用于指定中断信号源所属的中断控制器节点。这样,中断信号源就可以将中断请求传递给正确的中断控制器进行处理。中断信号源节点的 interrupts 属性中的中断号和其他相关信息将与指定的中断控制器关联起来。
在某些情况下,中断控制器可以形成多级结构,其中一个中断控制器节点可能是另一个中断控制器的父节点。在这种情况下,interrupt-parent 属性可以用于指定层次结构中的上级中断控制器。

57.1.5 #interrupt-cells

#interrupt-cells属性用于描述中断控制器中每个中断信号源的中断编号单元的数量。中断编号单元是指用于表示中断号和其他相关信息的固定大小的单元。通过指定中断编号单元的数量,操作系统可以正确解析和处理中断信息,并将其与中断控制器和中断信号源进行关联。
#interrupt-cells属性的值是一个整数,表示中断编号单元的数量。通常,这个值是一个正整数,例如 1、2 或 3,取决于中断控制器和设备的要求。

在gpio0的中断控制器为gic,在gic节点中#interrupt-cells属性被设置为3,这也就是为什么在gpio0节点中interrupts 属性有三个值,而ft5x06的中断控制器为gpio0,在gpio0节点中#interrupt-cells属性被设置为2,所以ft5x06节点的interrupts 属性只有两个值。

57.2 中断实例编写

在上一个小节中对设备树中断要用到的属性进行了讲解,而在本小节将会编写一个在RK3568上的ft5x06触摸中断设备树。

首先确定ft5x06的中断引脚号,由于iTOP-RK3568有1.2和1.7两个版本,所以这里展示了两个版本的原理图:

第一张图为V1.2版本的原理图,触摸引脚网络标号为TP_INT_L_GPIO0_B5,对应的SOC管脚为GPIO0_B5,第二张图为V1.7版本的原理图,触摸引脚网络标号为TP_INT_L_GPIO3_A5,对应的SOC管脚为GPIO3_A5。

然后来查看内核源码目录下的“drivers/input/touchscreen/edt-ft5x06.c”文件,这是ft5x06的驱动文件,找到compatible匹配值相关的部分,如下(图 57-3)所示:

这里的compatible匹配值都可以选择,作者选择的是edt,edt-ft5206,选择其他compatible也是可以的。

在内核源码目录下的“include/dt-bindings/pinctrl/rockchip.h”头文件中,定义了RK引脚名和gpio编号的宏定义,如下图(57-4)所示:

可以看到RK已经将GPIO组和引脚编号写成了宏定义的形式,通过宏定义可以减少在编写设备树的过程中换算的时间,并且帮助大家进行理解。

至此,关于编写ft5x06设备树的前置内容就查找完成了,接下来进行设备树的编写。

   编写完成的设备树如下所示:
V1.2

/dts-v1/;

#include "dt-bindings/pinctrl/rockchip.h"
#include "dt-bindings/interrupt-controller/irq.h"
/{
	model = "This is my devicetree!";

	ft5x06@38 {
		compatible = "edt,edt-ft5206";
		interrupt-parent = <&gpio0>;
		interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;
	};
};

V1.7 

/dts-v1/;

#include "dt-bindings/pinctrl/rockchip.h"
#include "dt-bindings/interrupt-controller/irq.h"
/{
	model = "This is my devicetree!";

	ft5x06@38 {
		compatible = "edt,edt-ft5206";
		interrupt-parent = <&gpio3>;
		interrupts = <RK_PA5 IRQ_TYPE_EDGE_RISING>;
	};
};

第1行: 设备树文件的头部,指定了使用的设备树语法版本。

第3行:用于定义 Rockchip 平台的引脚控制器相关的绑定。

第4行:用于定义中断控制器相关的绑定。

第5行:表示设备树的根节点开始。

第6行:指定了设备树的模型名称,描述为 "This is my devicetree!"。

第9行:指定了设备节点的兼容性字符串,表示该设备与 "edt,edt-ft5206" 兼容。

第10行:指定了中断的父节点,即中断控制器所在的节点。这里使用了一个引用(&gpio0)来表示父节点。

第11行:指定了中断信号的配置。RK_PB5 表示中断信号的引脚编号,IRQ_TYPE_EDGE_RISING 表示中断类型为上升沿触发。

至此,关于ft5x06的设备树就讲解完成了。

57.3 其他SOC设备树对比

而无论使用的是瑞芯微SOC还是恩智浦、三星的SOC,在设备树关于中断相关的描述都离不开上面提到的四个属性,关于在恩智浦和三星源码中的ft5x06设备树如下所示:

恩智浦

gpio1: gpio@0209c000 {
    compatible = "fsl,inx6ul-gpio", "fsl,imx35-gpio";
    reg = <0x0209c000 0x4000>;
    interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
    gpio-controller;
    #gpio-cells = <2>;
    interrupt-controller;
    #interrupt-cells = <2>;

    edt-ft5x06@38 {
        compatible = "edt,edt-ft5306", "edt,edt-ft5x06", "edt,edt-ft5406";
        pinctrl-names = "default";
        pinctrl-0 = <&ts_int_pin &ts_reset_pin>;
        reg = <0x38>;
        interrupt-parent = <&gpio1>;
        interrupts = <9 0>;
        reset-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
        irq-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
        status = "disabled";
    };
};

三星

gpio_c: gpioc {
    compatible = "gpio-controller";
    #gpio-cells = <2>;
    interrupt-controller;
    #interrupt-cells = <2>;
};

ft5x06: ft5x06038 {
    compatible = "edt,edt-ft5406";
    reg = <0x38>;
    pinctrl-names = "default";

    #if defined(RGB_1024x600) || defined(RGB_800x480)
    pinctrl-0 = <&tsc2007_irq>;
    interrupt-parent = <&gpio_c>;
    interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
    #endif

    #if defined(LvDs_800×1280) || defined(LvDS_1024x768)
    pinctrl-0 = <&gt911_irq>;
    interrupt-parent = <&gpio_b>;
    interrupts = <29 IRQ_TYPE_EDGE_FALLING>;
    #endif

    reset-gpios = <&gpio_e 30 0>;
};

对比之后会发现,不同厂商对于中断属性的配置都是类似的,只是里面的参数有些许区别,如果大家在之后遇到了其他平台,只需要稍加区分即可。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1115829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PHP 基础

PHP 基础 概述 在PHP 文件中&#xff0c;可以与HTML 和JavaScript 混编。 开始标记<?php 表示进入PHP 模式&#xff0c;结束标记?>&#xff0c;标识退出PHP 模式。 PHP 模式之外的内容会被作为字符输出到浏览器中。 PHP 在服务端执行&#xff0c;HTML 和 JS 在浏览…

任何人不知道这款超实用的配音软件,我都会伤心的OK?

看完一段精彩的视频&#xff0c;令人陶醉的原因之一就是配音&#xff0c;有的充满感情&#xff0c;有的字正腔圆&#xff0c;相信很多人都不知道这样的声音是怎么配出来的&#xff1f;今天&#xff0c;小编就来给大家分享一款超实用的配音软件&#xff0c;不仅操作简单&#xf…

STM32:TIM通道输入捕获

本文主要讲解如何使用TIMER通道的输入脉冲捕获功能。基于STM32F7的Timer2 Channel3来进行讲解。 配置时钟 Timer2的时钟频率&#xff0c;对应APB1 Timer。 分频设置为96-1&#xff0c;这样设置每次count计数&#xff0c;对应的时间为1us。Counter设置为最大即可&#xff0c;默…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Linux1024一篇通俗易懂的liunx命令操作总结(第十课)

Linux1024一篇通俗易懂的liunx命令操作总结(第十课) 一 liunx 介绍 Linux是一种免费开源的操作系统&#xff0c;它的设计基于Unix。它最早是由芬兰的一位大学生Linus Torvalds在1991年开始编写的&#xff0c;取名为Linux。Linux具有高度的灵活性和可定制性&#xff0c;可以在…

nginx负载均衡(动静分离)

nginx负载均衡&#xff08;动静分离&#xff09; 文章目录 nginx负载均衡&#xff08;动静分离&#xff09;工作原理&#xff1a;环境说明&#xff1a;部署nginx负载均衡步骤&#xff1a;在负载均衡&#xff08;NGINX&#xff09;主机上做配置&#xff1a;测试&#xff1a;在浏…

疯狂小杨哥有意退网

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 昨天我发了一个文章说&#xff1a;有1.6亿粉丝的疯狂小杨哥也似乎宣布退网&#xff0c;有些人说我胡编乱造&#xff0c;有些人说我为了博眼球什么都敢做。毕竟做了近10多年自媒体了&#xff0c;我不…

Nginx Proxy代理

代理原理 反向代理产生的背景&#xff1a; 在计算机世界里&#xff0c;由于单个服务器的处理客户端&#xff08;用户&#xff09;请求能力有一个极限&#xff0c;当用户的接入请求蜂拥而入时&#xff0c;会造成服务器忙不过来的局面&#xff0c;可以使用多个服务器来共同分担成…

vue真实项目还原

目录 前言一&#xff0c;初步了解&#xff0c;确定方向二&#xff0c;还原数据库三&#xff0c;启动api网站四&#xff0c;启动vue的前台和后台1、vue2的版本依赖踩坑&#xff08;client_admin&#xff09;2、node-sass安装踩坑&#xff08;client_home&#xff09;&#xff08…

2023年中国印刷电路板行业研究报告

第一章 行业概况 1.1 行业简介 印刷电路板&#xff08;Printed Circuit Board, PCB&#xff09;是电子工业的基石&#xff0c;被誉为“电子产品之母”。它在电子设备中扮演着至关重要的角色&#xff0c;为电路中的各类元器件提供了机械支撑&#xff0c;并确保了电子组件之间的…

驱动实现LED点灯

demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include "head.h" //定义三个指针指向映射后的虚拟内存 unsigned int *vir_moder; unsigned …

安装pythonQt报错

在使用命令行pip install PyQt5安装pythonQt5的时候报错。 镜像源有问题&#xff0c;手动设置可用的源 pip install PyQt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tool工具 pip install PyQt5-tools -i https://pypi.douban.com/simple 安装成…

CentOS 7 安装 MySQL 8

一、卸载MariaDB MariaDB是MySQL 的一个分支&#xff0c;完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;使之能轻松成为MySQL的代替品。 1、查看版本&#xff08;如果有就卸载&#xff09; rpm -qa|grep mariadbrpm -e --nodeps 文件名 二、下载mysql 1、进入 /usr/…

02_diffusion_models_from_scratch_CN

从零开始的扩散模型 有时&#xff0c;只考虑一些事务最简单的情况会有助于更好地理解其工作原理。我们将在本笔记本中尝试这一点&#xff0c;从“玩具”扩散模型开始&#xff0c;看看不同的部分是如何工作的&#xff0c;然后再检查它们与更复杂的实现有何不同。 我们将学习 …

VSCode使用记录

一、安装 从官网 https://code.visualstudio.com 下载相应安装包 二、扩展&#xff1a;商店 Chinese (Simplified) (简体中文) Language Pack for Visual Studio CodeLive Serveropen in browserGitLens — Git superchargedRemote - SSHPrettier - Code formatterESLintpxt…

【Java 进阶篇】深入了解 Bootstrap 栅格系统

在网页开发中&#xff0c;创建响应式的布局是至关重要的&#xff0c;因为不同设备和屏幕尺寸需要不同的布局来呈现内容。Bootstrap 提供了一个强大的栅格系统&#xff0c;使开发者能够轻松创建适应不同屏幕的网页布局。本文将深入介绍 Bootstrap 栅格系统&#xff0c;面向初学者…

7.7亿参数,超越5400亿PaLM!UW谷歌提出「分步蒸馏」,只需80%训练数据|ACL 2023

LLM不实用&#xff0c;小模型蒸馏才是「现实」的大模型应用路线&#xff0c;全面领先微调技术&#xff01;土豪请无视。。。 大型语言模型虽然性能优异&#xff0c;可以用零样本或少样本提示解决新任务&#xff0c;但LLM在实际应用部署时却很不实用&#xff0c;内存利用效率低…

成集云 | 思迅商慧集成用友T | 解决方案

源系统成集云目标系统 方案介绍 思迅商慧是一款集批次成本、配送复核、自助收银、供应链、加盟管理等于一身的零售管理软件。可以帮助解决客户的运营和管理难题&#xff0c;包括加盟店管理、供应商管理、配送复核管理、商品经营维护、自助收银系统等。 用友T是一款…

ABAP:EXCEL导入导出等功能

源代码: CLASS zcl_excel_tool DEFINITIONPUBLICFINALCREATE PUBLIC .PUBLIC SECTION. *"* public components of class ZCL_EXCEL_TOOL *"* do not include other source files here!!!TYPE-POOLS ole2 .TYPE-POOLS soi .TYPES:BEGIN OF ty_excel,row TYPE c LENG…

Jetpack:013-Jetpack底部导航栏

文章目录 1. 概念介绍2. 使用方法2.1 NavigationBar2.2 NavigationBarItem 3. 示例代码3.1 代码和注释3.2 代码难点3.3 运行效果 4. 内容总结 我们在上一章回中介绍了Jetpack中弹出菜单相关的内容&#xff0c;本章回中将介绍 底部导航栏。闲话休提&#xff0c;让我们一起Talk …