Arm 使用硬件参考手册和配置寄存器设置中断

Arm 使用硬件参考手册和配置寄存器设置中断,arm,registry,raspberry-pi3,interrupt,interrupt-handling,Arm,Registry,Raspberry Pi3,Interrupt,Interrupt Handling,假设您拥有所有寄存器的地址,有人知道如何在不导入库的情况下将中断源与处理程序关联吗? 任何ARM处理器的示例都会有所帮助,但就我而言,我使用的是Pi3的BCM2837。 我的解释是,这是等价的 在第90页,我看到了启用上升沿检测的地址,因此我将以下代码放入程序: //-v- I think this allows me to enable detection on GPIO pins 0-31 #define RisingInterruptEnable (*(int *) 0x7E2004C)

假设您拥有所有寄存器的地址,有人知道如何在不导入库的情况下将中断源与处理程序关联吗? 任何ARM处理器的示例都会有所帮助,但就我而言,我使用的是Pi3的BCM2837。 我的解释是,这是等价的

在第90页,我看到了启用上升沿检测的地址,因此我将以下代码放入程序:

//-v- I think this allows me to enable detection on GPIO pins 0-31
#define RisingInterruptEnable (*(int *) 0x7E2004C)
//-^- e.g. "RisingInterruptEnable = 0x1" enables GPIO 0 rising detect
从手册的第112-117页,我找到了启用中断请求[0x7E00B214]的寄存器,但我真的不知道如何使用它。我了解了如何启用gpio_int[0],但在搜索pdf之后,我找不到gpio_int的含义

从中,我知道如何指向处理程序使用的任何函数。但我仍然不明白:


如何将中断源与函数关联起来[不导入库,假设我知道所有寄存器的地址]?

不确定任何ARM处理器的示例是否会有所帮助,因为BCM2837似乎没有根据使用标准ARM GIC

然后,我建议看一下David Welch提供的优秀覆盆子pi具体示例:
您将发现处理中断和直接访问寄存器的示例—我假设您正在编写一些纯金属代码。

这里有几个间接级别,即使只是在硬件中

从GPIO引脚开始,可以将其配置为在GPIO外围设备内生成中断,如您所见。然而,所有这些都是从该外设驱动一个输出,并在另一个GPIO寄存器中识别触发器。该片上信号为gpio_int[0]

根据数据表,来自GPIO_0的信号连接到A53集群的IRQ[49],这是一个非常具体的实现方面

为了启用IRQ[49],然后需要使用中断控制器中的寄存器,用于启用和处理程序,因为到右侧中断处理程序的方向是在硬件中处理的


一旦进入中断处理程序,您将需要返回GPIO寄存器,以确定您在那里启用的哪些操作实际上导致了中断,这将取决于您的用例-可能您只需要启用一个,而无需进一步检查。

听起来您还没有完全准备好中断,从投票开始,努力达到目标。将中断对准函数指针是很好的选择。你会想用一些asm来包装函数……你是否已经完成了轮询中断和清除中断之类的工作?如果这是pi3,它比PI0还要硬10倍。broadcom中断控制器非常简单,pi3有许多可能的模式,每个模式都有不同的解决方案。