rk3568中断2

根据RKRK3568 TRM-Part1的1.3章节看出rk3568中断分布情况、

一、核心参数校准(基于 上面Table 1-3)​

  1. 中断编号定义:​
  • PPI:0~31(硬件预留范围,实际有效 3 个核心中断)​
  • SPI:32~282(共 251 个有效中断,226~259 为 Reserved)​
  • 触发方式:全量「高电平敏感」(极性固定,不可编程)​
  1. 安全分组规则:​
  • Secure Group 1:含安全看门狗(wdts)、安全 OTP(otp_s)等带_s/secure标识的外设​
  • Non-secure Group 1:其余通用外设(UART、ETH、SATA 等)​
  1. 优先级配置逻辑:​
  • 核心控制类(定时器、看门狗):1~3 级(最高)​
  • 数据传输类(ETH、USB3.0、SATA):4~6 级(高)​
  • 外设通信类(UART、I2C、SPI):7~9 级(中)​
  • 监测诊断类(tsadc、ddrmon):10~12 级(低)
  • 通过命令
  • 以ttyS8为例。串口硬件中断156,linux对应的中断71,发生了1617次中断。中断方式level 电平触发。对应上面的1.1.3表格uart8。这就是这款芯片的中断,接下来我们看它在linux是如何注册和使用和对应的。
### Linux RK3568 平台中断处理教程及配置方法 #### 中断处理结构体 `struct irqaction` 在 Linux 内核中,每个中断处理动作由结构体 `struct irqaction` 描述。此结构体包含了多个重要成员变量: - **handler**: 这是一个指向中断服务程序 (ISR) 的指针,当触发特定中断时会调用这个函数[^1]。 - **void *dev_id**: 设备标识符,用于区分共享同一物理中断线的不同设备实例。 - **irq**: 表示分配给该中断源的唯一编号,在内核空间称为 IRQ 号码。 - 对于那些可以在独立线程上下文中执行的服务例程来说, - **thread_fn**: 定义了将在新创建的任务进程中运行的具体工作负载逻辑; - **thread**: 存储着对应的工作进程描述符 (`task_struct`) 实例。 ```c static struct irqaction my_irq_action = { .handler = my_interrupt_handler, .flags = IRQF_SHARED, /* 如果是共享中断 */ .name = "my_device", }; ``` #### 中断域(IRQ Domain) 为了抽象底层硬件细节并简化上层应用编程接口(API),Linux 内核引入了一个名为 “IRQ 域” 或者简称 “domain”的概念。通过这种方式可以实现从硬件中断ID(HW Interrupt ID) 到软件层面使用的IRQ号码之间的映射关系管理[^2]。 这种设计使得即使实际连接至系统的外部组件有所变动也不会影响到已经编写好的驱动模块代码,因为后者只需要关注统一后的虚拟化表示形式——即IRQ号即可。 #### 配置与注册中断处理器 要使能某个外设产生的中断事件被正确识别和响应,通常需要经历以下几个环节的操作流程: 定义好上述提到过的 `struct irqaction` 结构之后就可以利用 `request_irq()` 函数来向操作系统请求获取相应的资源权限,并完成必要的初始化设置过程。 ```c if (request_irq(irq_number, &my_irq_action.handler, IRQF_SHARED, "device_name", dev_id)) { printk(KERN_ERR "Failed to request IRQ\n"); } ``` 一旦不再需要继续监听某类异常情况的发生,则应当及时释放所占用的相关系统级设施以便其他部分能够正常使用它们。这可以通过调用 `free_irq()` 来达成目的。 ```c free_irq(irq_number, dev_id); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值