我在 STM32MP157 开发板上运行 buildroot linux 环境。 我在引脚 B12 上有一个带有内部上拉电阻的按钮。 一旦线路变低,我想触发一个中断。 在 RPi 等其他 linux 板上,我已经能够调用 gpio_to_irq(<gpio#>) 并获取该引脚的 IRQ。 ...
我在 STM32MP157 开发板上运行 buildroot linux 环境。 我在引脚 B12 上有一个带有内部上拉电阻的按钮。 一旦线路变低,我想触发一个中断。 在 RPi 等其他 linux 板上,我已经能够调用 gpio_to_irq(<gpio#>) 并获取该引脚的 IRQ。 ...
我有一个 HW_IRQ 在 2 个 kernel 模块之间共享。 Module1在启动时加载并调用: request_irq(linux_irq1, handler1, IRQF_SHARED, ...); . 启动后,我想加载与Module1共享相同 HW_IRQ 的Module2 。 我需 ...
我正在查看以下函数,它将标准输出重定向到 STM32 Std 外设库中的 UART。 在通过 UART 传输之前,它会屏蔽可以通过 __disable_irq() 设置优先级的异常(我理解它包括所有外围设备和 GPIO 中断)。 我的问题是,为什么这个 UART tx 是这样实现的? 是否可以 ...
对于我的应用程序(在 STM32L082 上运行),我需要几种类型中断的准确(相对)时间戳。 为此,我以 1 MHz 的频率运行计时器并在 ISR 运行后立即对其进行计数。 它们都被赋予最高优先级,因此它们可以抢占不太重要的中断。 我面临的问题是它们可能仍然被具有相同优先级的其他中断和禁用中断的代码 ...
我正在开发一个作为业余爱好的操作系统,并且在处理键盘 IRQ 时遇到了一个奇怪的问题,我不知道为什么,但是当代码中出现的字符串太少时,我收到了无效的操作代码 ISR,并且添加更多字符串时的断点 ISR。 如果我添加了足够数量的字符串,代码将正常工作,并且没有任何问题,但是我不能只是在代码中添加字符 ...
我目前正在开发一个小型库,它可以简化 433MHz RF 模块的使用。 我现在面临的问题是,当我试图在 UART0_RX 引脚 (GPIO1) 上创建 IRQ 中断时,Pico 将调用回调 function,执行第一条指令然后冻结。 我在网上找不到任何相关信息。 这是我的代码片段:#include ...
我最近在我的一个应用程序中添加了一个部分,旨在允许它使用属于辅助 PIC 的 IRQ 进行操作。 特别是,中断处理程序需要向两个 PIC 发出中断结束条件信号,而不是仅向主 PIC 发出信号。 这是我的代码: 现在,在添加这部分时,我考虑了是先将 EOI 信号发送给辅助 PIC,还是发送给主 P ...
我一直试图在基本的 kernel 开发人员上松散地遵循本教程。 目前,目标架构是 i386。 IRQ 的实施给我带来了问题; 每当我尝试将寄存器(定义为struct )作为参数传递给 function 时,我的中断处理程序都会报告一系列Invalid Op Code异常。 这是引发异常的中断处理程 ...
我想从用 C/C++ 编写的程序中设置 linux 中 irq 进程(spi,gpiod)的优先级和亲和力。 要设置我自己的进程的优先级,我使用pthread_setschedparam来设置我自己的进程的亲和性,我使用pthread_setaffinity_np 。 我将 pthread_self ...
我正在用我的新 pci 设备运行 qemu-system-x86_64。 我想使用 IRQ 17(因为来自 kernel 的驱动程序监听 IRQ 17)。 但我的 PCI 设备采用 IRQ 10 或 11。基于 interrupt_pin(A,B,C,E)。 然后我想通过 qemu_irq_pul ...
我确信这是有充分理由的,但我看不出它是什么。 在__handle_irq_event_percpu内部,kernel 循环遍历为特定 IRQ 行注册的所有处理程序并调用它。 我不明白的是,为什么到达第一个返回IRQ_HANDLED的处理程序时没有退出这个循环? 看似简单的性能提升,肯定有什么我不明 ...
我正在尝试为我的 RV32I 内核实现一个简单的中断控制器。 我相信我理解在 RISC-V 中应该如何处理中断,以及 CSR 寄存器在这个过程中的作用。 RISC-V 定义了三种中断源:外部、软件和定时器。 我了解定时器和外部中断是如何产生的。 但是,我不明白如何或什么会产生软件中断。 指令? ...
如果在 EL1 上下文中触发了 IRQ,是否可以在 EL3(安全监视器)中执行 IRQ? 例如,我已经通过 spsr_el3(选择了 el1h)进入了 EL1,然后用 vbar_el1 设置了一个向量表。 现在,我想在 EL3 模式下执行一些 IRQ。 我怎样才能做到这一点? ...
我正在寻找 RISC-V 处理器如何处理中断请求。 我查看了互联网上的指令集手册和信息。 重点是准确解释标题设置的内容:指令集。 在我看来,如何处理中断是处理器所谓的“程序员模型”的问题。 它没有清楚地适合关于指令集的文档,因为部分中断处理没有在指令中表示。 显然,跳转到 ISR并不是出现在程序代码 ...
我正在编写一个简单的驱动程序,它可以注册一个中断并处理它。 我正在使用request_irq function 但它返回此错误: 这是简单的模块代码: 这是来自cat /proc/interrupts的 output : CPU0 CPU1 16: ...
我正在阅读用于编写设备驱动程序的操作系统和 CPU 概念,并且遇到了“延迟过程调用 (DPC)”以及 kernel 如何与 DPC 和 IRQL 交互。 我真的很感谢对它是什么以及何时使用它的简单解释? 我已经阅读了官方的微软文档和其他一些资源,但我变得更加困惑。 这些是我的一些资源: 什么是延 ...
我目前正在重构 AMD Sensor Fusion Hub 的 驱动程序。 原始驱动程序可以在这里找到。 当向设备发送命令时,芯片需要一些时间来处理请求。 我正在使用使用msleep的黑客来等待设备响应。 但是我想干净利落地实现 IRQ 处理。 作为模板,我研究了drivers/i2c/busses ...
我要开发自己的串行代码(而不是使用 CubeMX 的 HAL)来连接需要低级串行功能的现有协议代码库。 USART3_IRQHandler()被重复调用(因此也是serial::serial_irq_handler() 。 序列号: (上面代码中的serial->usart == ...
这些天我正在研究Arm 架构参考手册 ARMv7-A ARMv7-R 版文档。 当我阅读本手册的异常处理部分时,我感到困惑。 问题是当 ARMv7-A 架构实现出现 IRQ 异常时如何决定 LR 值。 示例:假设处理器正在执行地址为 0x_0000_1000 的指令,并采取了 IRQ。首先,我们必 ...
我在引导过程中偶然发现了前面提到的错误(禁用 IRQ #31),并试图通过找出导致中断的原因来解决它。 运行lspci -v | grep 31 lspci -v | grep 31没有给出结果,并且cat /proc/interrupts | grep 31 cat /proc/interr ...