【发布时间】:2019-07-25 06:31:15
【问题描述】:
有没有人知道如何在不导入库的情况下将中断源与处理程序关联起来,假设您拥有所有寄存器的地址? 任何 ARM 处理器的示例都会有所帮助,但就我而言,我使用的是 Pi3 的 BCM2837。 我对this post about the datasheet 的解释是BCM2835 manual 是等价的。
在第 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 页,我找到了启用 InterruptReQuests [0x7E00B214] 的寄存器,但老实说我不明白如何使用它。我看到了如何启用 gpio_int[0],但是在搜索 pdf 后我找不到 gpio_int 的含义。
来自this post about function pointers 我知道如何“指向”我用于处理程序的任何函数。但是我还是不明白:
我如何将中断源与函数相关联[无需导入库,假设我知道所有寄存器的地址]?
【问题讨论】:
-
听起来你还没有完全准备好被打断,按照自己的方式来处理它们......从轮询开始。将中断瞄准一个函数指针是很遥远的事情。你会想用一些 asm 包装函数...
-
您是否通过轮询中断和清除中断等工作?如果这是 pi3,它的难度是 pi-zero 的 10 倍。 Broadcom 中断控制器非常简单,pi3 有多种可能的模式,每种模式都有不同的解决方案。
标签: arm registry raspberry-pi3 interrupt interrupt-handling